Subzero: Improve debugging controls, plus minor refactoring.
1. Decorate the list of live-in and live-out variables with register assignments in the dump() output. This helps one to assess register pressure.
2. Fix a bug where the DisableInternal flag wasn't being honored for function definitions.
3. Add a -translate-only=<symbol> to limit translation to a single function or global variable. This makes it easier to focus on debugging a single function.
4. Change the -no-phi-edge-split option to -phi-edge-split and invert the meaning, to better not avoid the non double negatives.
BUG= none
R=jvoung@chromium.org
Review URL: https://codereview.chromium.org/673783002
diff --git a/src/IceCfgNode.cpp b/src/IceCfgNode.cpp
index 767c9c3..4e4d36b 100644
--- a/src/IceCfgNode.cpp
+++ b/src/IceCfgNode.cpp
@@ -30,9 +30,7 @@
IceString CfgNode::getName() const {
if (!Name.empty())
return Name;
- char buf[30];
- snprintf(buf, llvm::array_lengthof(buf), "__%u", getIndex());
- return buf;
+ return "__" + std::to_string(getIndex());
}
// Adds an instruction to either the Phi list or the regular
@@ -65,7 +63,7 @@
InstCountEstimate = Func->getNextInstNumber() - FirstNumber;
}
-// When a node is created, the OutEdges are immediately knows, but the
+// When a node is created, the OutEdges are immediately known, but the
// InEdges have to be built up incrementally. After the CFG has been
// constructed, the computePredecessors() pass finalizes it by
// creating the InEdges list.
@@ -557,7 +555,12 @@
Str << " // LiveIn:";
for (SizeT i = 0; i < LiveIn.size(); ++i) {
if (LiveIn[i]) {
- Str << " %" << Liveness->getVariable(i, this)->getName();
+ Variable *Var = Liveness->getVariable(i, this);
+ Str << " %" << Var->getName();
+ if (Func->getContext()->isVerbose(IceV_RegOrigins) && Var->hasReg()) {
+ Str << ":" << Func->getTarget()->getRegName(Var->getRegNum(),
+ Var->getType());
+ }
}
}
Str << "\n";
@@ -577,7 +580,12 @@
Str << " // LiveOut:";
for (SizeT i = 0; i < LiveOut.size(); ++i) {
if (LiveOut[i]) {
- Str << " %" << Liveness->getVariable(i, this)->getName();
+ Variable *Var = Liveness->getVariable(i, this);
+ Str << " %" << Var->getName();
+ if (Func->getContext()->isVerbose(IceV_RegOrigins) && Var->hasReg()) {
+ Str << ":" << Func->getTarget()->getRegName(Var->getRegNum(),
+ Var->getType());
+ }
}
}
Str << "\n";