Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Unified Diff: src/IceCfgNode.cpp

Issue 1152813003: Subzero: Fix/improve -asm-verbose output. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Code review changes Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceCfgNode.cpp
diff --git a/src/IceCfgNode.cpp b/src/IceCfgNode.cpp
index fb2ab396c25b04507549c76b73a899e473558818..19c5d22d731879dff9ab258632028102dc234317 100644
--- a/src/IceCfgNode.cpp
+++ b/src/IceCfgNode.cpp
@@ -794,20 +794,30 @@ void emitRegisterUsage(Ostream &Str, const Cfg *Func, const CfgNode *Node,
Str << "\t\t\t\t# LiveOut=";
}
if (!Live->empty()) {
- bool First = true;
+ std::vector<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()];
- if (!First)
- Str << ",";
- First = false;
- Var->emit(Func);
+ LiveRegs.push_back(Var);
}
}
}
+ // Sort the variables by regnum so they are always printed in a
+ // familiar order.
+ std::sort(LiveRegs.begin(), LiveRegs.end(),
+ [](const Variable *V1, const Variable *V2) {
+ return V1->getRegNum() < V2->getRegNum();
+ });
+ bool First = true;
+ for (Variable *Var : LiveRegs) {
+ if (!First)
+ Str << ",";
+ First = false;
+ Var->emit(Func);
+ }
}
Str << "\n";
}
@@ -825,8 +835,14 @@ void emitLiveRangesEnded(Ostream &Str, const Cfg *Func, const Inst *Instr,
SizeT NumVars = Src->getNumVars();
for (SizeT J = 0; J < NumVars; ++J) {
const Variable *Var = Src->getVar(J);
- if (Instr->isLastUse(Var) &&
- (!Var->hasReg() || --LiveRegCount[Var->getRegNum()] == 0)) {
+ bool ShouldEmit = Instr->isLastUse(Var);
+ if (Var->hasReg()) {
+ // Don't report end of live range until the live count reaches 0.
+ SizeT NewCount = --LiveRegCount[Var->getRegNum()];
+ if (NewCount)
+ ShouldEmit = false;
+ }
+ if (ShouldEmit) {
if (First)
Str << " \t# END=";
else
@@ -884,12 +900,8 @@ void CfgNode::emit(Cfg *Func) const {
for (const Inst &I : Insts) {
if (I.isDeleted())
continue;
- if (I.isRedundantAssign()) {
- Variable *Dest = I.getDest();
- if (DecorateAsm && Dest->hasReg() && !I.isLastUse(I.getSrc(0)))
- ++LiveRegCount[Dest->getRegNum()];
+ if (I.isRedundantAssign())
continue;
- }
I.emit(Func);
if (DecorateAsm)
emitLiveRangesEnded(Str, Func, &I, LiveRegCount);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698