Commit e7418719 by Jim Stichnoth

Subzero: Don't bother printing stack/frame ptr as part of LiveIn/LiveOut.

The LiveIn and LiveOut register sets are printed for each basic block in -asm-verbose mode. These sets would generally include the stack and/or frame pointer registers, which is just noise, so we suppress that. BUG= none R=jpp@chromium.org Review URL: https://codereview.chromium.org/1399523003 .
parent 485d0773
......@@ -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.
......
......@@ -186,6 +186,7 @@ public:
virtual IceString getRegName(SizeT RegNum, Type Ty) const = 0;
virtual bool hasFramePointer() const { return false; }
virtual SizeT getStackReg() const = 0;
virtual SizeT getFrameOrStackReg() const = 0;
virtual size_t typeWidthInBytesOnStack(Type Ty) const = 0;
......
......@@ -74,6 +74,7 @@ public:
return RegisterAliases[Reg];
}
bool hasFramePointer() const override { return UsesFramePointer; }
SizeT getStackReg() const override { return RegARM32::Reg_sp; }
SizeT getFrameOrStackReg() const override {
return UsesFramePointer ? RegARM32::Reg_fp : RegARM32::Reg_sp;
}
......
......@@ -48,6 +48,7 @@ public:
return RegisterAliases[Reg];
}
bool hasFramePointer() const override { return UsesFramePointer; }
SizeT getStackReg() const override { return RegMIPS32::Reg_SP; }
SizeT getFrameOrStackReg() const override {
return UsesFramePointer ? RegMIPS32::Reg_FP : RegMIPS32::Reg_SP;
}
......
......@@ -82,6 +82,7 @@ public:
}
bool hasFramePointer() const override { return IsEbpBasedFrame; }
SizeT getStackReg() const override { return Traits::RegisterSet::Reg_esp; }
SizeT getFrameOrStackReg() const override {
return IsEbpBasedFrame ? Traits::RegisterSet::Reg_ebp
: Traits::RegisterSet::Reg_esp;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment