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, ...@@ -883,6 +883,8 @@ void emitRegisterUsage(Ostream &Str, const Cfg *Func, const CfgNode *Node,
return; return;
Liveness *Liveness = Func->getLiveness(); Liveness *Liveness = Func->getLiveness();
const LivenessBV *Live; const LivenessBV *Live;
const int32_t StackReg = Func->getTarget()->getStackReg();
const int32_t FrameOrStackReg = Func->getTarget()->getFrameOrStackReg();
if (IsLiveIn) { if (IsLiveIn) {
Live = &Liveness->getLiveIn(Node); Live = &Liveness->getLiveIn(Node);
Str << "\t\t\t\t# LiveIn="; Str << "\t\t\t\t# LiveIn=";
...@@ -893,14 +895,17 @@ void emitRegisterUsage(Ostream &Str, const Cfg *Func, const CfgNode *Node, ...@@ -893,14 +895,17 @@ void emitRegisterUsage(Ostream &Str, const Cfg *Func, const CfgNode *Node,
if (!Live->empty()) { if (!Live->empty()) {
CfgVector<Variable *> LiveRegs; CfgVector<Variable *> LiveRegs;
for (SizeT i = 0; i < Live->size(); ++i) { for (SizeT i = 0; i < Live->size(); ++i) {
if ((*Live)[i]) { if (!(*Live)[i])
Variable *Var = Liveness->getVariable(i, Node); continue;
if (Var->hasReg()) { Variable *Var = Liveness->getVariable(i, Node);
if (IsLiveIn) if (!Var->hasReg())
++LiveRegCount[Var->getRegNum()]; continue;
LiveRegs.push_back(Var); 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 // Sort the variables by regnum so they are always printed in a familiar
// order. // order.
......
...@@ -186,6 +186,7 @@ public: ...@@ -186,6 +186,7 @@ public:
virtual IceString getRegName(SizeT RegNum, Type Ty) const = 0; virtual IceString getRegName(SizeT RegNum, Type Ty) const = 0;
virtual bool hasFramePointer() const { return false; } virtual bool hasFramePointer() const { return false; }
virtual SizeT getStackReg() const = 0;
virtual SizeT getFrameOrStackReg() const = 0; virtual SizeT getFrameOrStackReg() const = 0;
virtual size_t typeWidthInBytesOnStack(Type Ty) const = 0; virtual size_t typeWidthInBytesOnStack(Type Ty) const = 0;
......
...@@ -74,6 +74,7 @@ public: ...@@ -74,6 +74,7 @@ public:
return RegisterAliases[Reg]; return RegisterAliases[Reg];
} }
bool hasFramePointer() const override { return UsesFramePointer; } bool hasFramePointer() const override { return UsesFramePointer; }
SizeT getStackReg() const override { return RegARM32::Reg_sp; }
SizeT getFrameOrStackReg() const override { SizeT getFrameOrStackReg() const override {
return UsesFramePointer ? RegARM32::Reg_fp : RegARM32::Reg_sp; return UsesFramePointer ? RegARM32::Reg_fp : RegARM32::Reg_sp;
} }
......
...@@ -48,6 +48,7 @@ public: ...@@ -48,6 +48,7 @@ public:
return RegisterAliases[Reg]; return RegisterAliases[Reg];
} }
bool hasFramePointer() const override { return UsesFramePointer; } bool hasFramePointer() const override { return UsesFramePointer; }
SizeT getStackReg() const override { return RegMIPS32::Reg_SP; }
SizeT getFrameOrStackReg() const override { SizeT getFrameOrStackReg() const override {
return UsesFramePointer ? RegMIPS32::Reg_FP : RegMIPS32::Reg_SP; return UsesFramePointer ? RegMIPS32::Reg_FP : RegMIPS32::Reg_SP;
} }
......
...@@ -82,6 +82,7 @@ public: ...@@ -82,6 +82,7 @@ public:
} }
bool hasFramePointer() const override { return IsEbpBasedFrame; } bool hasFramePointer() const override { return IsEbpBasedFrame; }
SizeT getStackReg() const override { return Traits::RegisterSet::Reg_esp; }
SizeT getFrameOrStackReg() const override { SizeT getFrameOrStackReg() const override {
return IsEbpBasedFrame ? Traits::RegisterSet::Reg_ebp return IsEbpBasedFrame ? Traits::RegisterSet::Reg_ebp
: Traits::RegisterSet::Reg_esp; : 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