Index: src/IceCfgNode.cpp |
diff --git a/src/IceCfgNode.cpp b/src/IceCfgNode.cpp |
index fe1d359aab048513cf8f18395a497df4680bc337..2bcea9ad255da9671ab0817fda8f678c86fbb3e0 100644 |
--- a/src/IceCfgNode.cpp |
+++ b/src/IceCfgNode.cpp |
@@ -883,6 +883,8 @@ void emitRegisterUsage(Ostream &Str, const Cfg *Func, const CfgNode *Node, |
return; |
Liveness *Liveness = Func->getLiveness(); |
const LivenessBV *Live; |
+ const int32_t StackReg = Func->getTarget()->getStackReg(); |
+ const int32_t FrameOrStackReg = Func->getTarget()->getFrameOrStackReg(); |
if (IsLiveIn) { |
Live = &Liveness->getLiveIn(Node); |
Str << "\t\t\t\t# LiveIn="; |
@@ -893,14 +895,17 @@ void emitRegisterUsage(Ostream &Str, const Cfg *Func, const CfgNode *Node, |
if (!Live->empty()) { |
CfgVector<Variable *> LiveRegs; |
for (SizeT i = 0; i < Live->size(); ++i) { |
- if ((*Live)[i]) { |
- Variable *Var = Liveness->getVariable(i, Node); |
- if (Var->hasReg()) { |
- if (IsLiveIn) |
- ++LiveRegCount[Var->getRegNum()]; |
- LiveRegs.push_back(Var); |
- } |
- } |
+ if (!(*Live)[i]) |
+ continue; |
+ Variable *Var = Liveness->getVariable(i, Node); |
+ if (!Var->hasReg()) |
+ continue; |
+ const int32_t RegNum = Var->getRegNum(); |
+ if (RegNum == StackReg || RegNum == FrameOrStackReg) |
+ continue; |
+ if (IsLiveIn) |
+ ++LiveRegCount[RegNum]; |
+ LiveRegs.push_back(Var); |
} |
// Sort the variables by regnum so they are always printed in a familiar |
// order. |