[llvm] [LLVM] Add color to SDNode ID's when dumping (PR #141295)

Jon Roelofs via llvm-commits llvm-commits at lists.llvm.org
Fri May 23 14:48:09 PDT 2025


https://github.com/jroelofs created https://github.com/llvm/llvm-project/pull/141295

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

>From 6d3a7f7bb0e72cbcf10ff4848084fed67a200619 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 23 May 2025 14:38:37 -0700
Subject: [PATCH] [LLVM] Add color to SDNode ID's when dumping

This is especially helpful for the recursive 'Cannot select:' dumps, where
colors help distinguish nodes at a quick glance.
---
 llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp | 7 +++++++
 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp   | 2 ++
 2 files changed, 9 insertions(+)

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) {



More information about the llvm-commits mailing list