[PATCH] D126248: [BOLT][NFC] Use colors in CFG dumps
Amir Ayupov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 1 23:56:18 PDT 2022
Amir updated this revision to Diff 433666.
Amir added a comment.
Add a note in DumpDotAll help message about using -print-loops to enable
color-coded blocks.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D126248/new/
https://reviews.llvm.org/D126248
Files:
bolt/lib/Core/BinaryFunction.cpp
bolt/lib/Rewrite/RewriteInstance.cpp
Index: bolt/lib/Rewrite/RewriteInstance.cpp
===================================================================
--- bolt/lib/Rewrite/RewriteInstance.cpp
+++ bolt/lib/Rewrite/RewriteInstance.cpp
@@ -103,10 +103,9 @@
cl::opt<bool>
DumpDotAll("dump-dot-all",
- cl::desc("dump function CFGs to graphviz format after each stage"),
- cl::ZeroOrMore,
- cl::Hidden,
- cl::cat(BoltCategory));
+ cl::desc("dump function CFGs to graphviz format after each stage;"
+ "enable '-print-loops' for color-coded blocks"),
+ cl::ZeroOrMore, cl::Hidden, cl::cat(BoltCategory));
static cl::list<std::string>
ForceFunctionNames("funcs",
Index: bolt/lib/Core/BinaryFunction.cpp
===================================================================
--- bolt/lib/Core/BinaryFunction.cpp
+++ bolt/lib/Core/BinaryFunction.cpp
@@ -3006,15 +3006,33 @@
} // namespace
void BinaryFunction::dumpGraph(raw_ostream &OS) const {
- OS << "digraph \"" << getPrintName() << "\" {\n";
- OS << R"(node [fontname="courier"])" << '\n';
+ OS << "digraph \"" << getPrintName() << "\" {\n"
+ << "node [fontname=courier, shape=box, style=filled, colorscheme=brbg9]\n";
uint64_t Offset = Address;
for (BinaryBasicBlock *BB : BasicBlocks) {
auto LayoutPos =
std::find(BasicBlocksLayout.begin(), BasicBlocksLayout.end(), BB);
unsigned Layout = LayoutPos - BasicBlocksLayout.begin();
const char *ColdStr = BB->isCold() ? " (cold)" : "";
- OS << format("\"%s\" [shape=box]\n", BB->getName().data());
+ std::vector<std::string> Attrs;
+ // Bold box for entry points
+ if (isEntryPoint(*BB))
+ Attrs.push_back("penwidth=2");
+ if (BLI && BLI->getLoopFor(BB)) {
+ // Distinguish innermost loops
+ const BinaryLoop *Loop = BLI->getLoopFor(BB);
+ if (Loop->isInnermost())
+ Attrs.push_back("fillcolor=6");
+ else // some outer loop
+ Attrs.push_back("fillcolor=4");
+ } else { // non-loopy code
+ Attrs.push_back("fillcolor=5");
+ }
+ ListSeparator LS;
+ OS << "\"" << BB->getName() << "\" [";
+ for (StringRef Attr : Attrs)
+ OS << LS << Attr;
+ OS << "]\n";
OS << format("\"%s\" [label=\"%s%s\\n(C:%lu,O:%lu,I:%u,L:%u,CFI:%u)\\n",
BB->getName().data(), BB->getName().data(), ColdStr,
BB->getKnownExecutionCount(), BB->getOffset(), getIndex(BB),
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126248.433666.patch
Type: text/x-patch
Size: 2377 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220602/66eb23c5/attachment.bin>
More information about the llvm-commits
mailing list