-
Notifications
You must be signed in to change notification settings - Fork 15.3k
[LLVM] Add color to SDNode ID's when dumping #141295
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This is especially helpful for the recursive 'Cannot select:' dumps, where colors help distinguish nodes at a quick glance.
|
@llvm/pr-subscribers-llvm-selectiondag Author: Jon Roelofs (jroelofs) ChangesThis is especially helpful for the recursive 'Cannot select:' dumps, where colors help distinguish nodes at a quick glance. Full diff: https://github.com/llvm/llvm-project/pull/141295.diff 2 Files Affected:
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
index 803894e298dd5..ee4297f3ad8ce 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
@@ -606,7 +606,14 @@ const char *SDNode::getIndexedModeName(ISD::MemIndexedMode AM) {
static Printable PrintNodeId(const SDNode &Node) {
return Printable([&Node](raw_ostream &OS) {
#ifndef NDEBUG
+ static const raw_ostream::Colors Color[] = {
+ raw_ostream::BLACK, raw_ostream::RED, raw_ostream::GREEN,
+ raw_ostream::YELLOW, raw_ostream::BLUE, raw_ostream::MAGENTA,
+ raw_ostream::CYAN,
+ };
+ OS.changeColor(Color[Node.PersistentId % std::size(Color)]);
OS << 't' << Node.PersistentId;
+ OS.resetColor();
#else
OS << (const void*)&Node;
#endif
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 4bdb8e68c0d32..c6b45a6042746 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -4415,6 +4415,8 @@ void SelectionDAGISel::CannotYetSelect(SDNode *N) {
raw_string_ostream Msg(msg);
Msg << "Cannot select: ";
+ Msg.enable_colors(errs().has_colors());
+
if (N->getOpcode() != ISD::INTRINSIC_W_CHAIN &&
N->getOpcode() != ISD::INTRINSIC_WO_CHAIN &&
N->getOpcode() != ISD::INTRINSIC_VOID) {
|
|
If I look at this dump I see:
Now I have two things that confuse me, instead of just one. But this is my personal preference, if other people like the feature, I will not stop it. [*] Why are these nodes even printed is a separate issue that I think it is worth pointing out. They are made explicit in the nodes that use them! |
I think this is unavoidable. These dumps often have way more nodes in them than we have terminal colors available. An astute reader should quickly see that nodes with different colors have different IDs, but that nodes with the same color still need a little more careful of a look. |
fpetrogalli
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jroelofs - you convinced me - let's get this in :)
topperc
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM


This is especially helpful for the recursive 'Cannot select:' dumps, where colors help distinguish nodes at a quick glance.