Add some new debugging APIs to print out "raw" SelectionDAGs to make
understanding CannotYTetSelect and other errors easier.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93901 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index b8ac005..49b08bb 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -5893,47 +5893,43 @@
   print_details(OS, G);
 }
 
-void SDNode::printWithDepth(raw_ostream &OS, const SelectionDAG *G,
-                            unsigned depth, unsigned indent,
-                            bool limit) const {
-  if (depth == 0) {
-    if (limit)
-      OS << "*** <max depth> - Cycle? ***\n";
+static void printrWithDepthHelper(raw_ostream &OS, const SDNode *N,
+                                  const SelectionDAG *G, unsigned depth,
+                                  unsigned indent) 
+{
+  if (depth == 0)
     return;
+
+  OS.indent(indent);
+
+  N->print(OS, G);
+
+  if (depth < 1)
+    return;
+
+  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
+    OS << '\n';
+    printrWithDepthHelper(OS, N->getOperand(i).getNode(), G, depth-1, indent+2);
   }
-
-  int myindent = indent;
-
-  while (myindent--) {
-    OS << ' ';
-  }
-
-  print(OS, G);
-
-  if (depth > 1) {
-    for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
-      OS << '\n';
-      getOperand(i).getNode()->printWithDepth(OS, G,
-                                              depth > 0 ? depth-1 : depth,
-                                              indent+2);
-    }
-  }
-} 
-
-void SDNode::printWithFullDepth(raw_ostream &OS, const SelectionDAG *G,
-                                unsigned indent) const {
-  // Don't print impossibly deep things.
-  printWithDepth(OS, G, 100, indent, true);
-} 
-
-void SDNode::dumpWithDepth(const SelectionDAG *G, unsigned depth,
-                           unsigned indent, bool limit) const {
-  printWithDepth(dbgs(), G, depth, indent, limit);
 }
 
-void SDNode::dumpWithFullDepth(const SelectionDAG *G, unsigned indent) const {
+void SDNode::printrWithDepth(raw_ostream &OS, const SelectionDAG *G,
+                            unsigned depth) const {
+  printrWithDepthHelper(OS, this, G, depth, 0);
+} 
+
+void SDNode::printrFull(raw_ostream &OS, const SelectionDAG *G) const {
   // Don't print impossibly deep things.
-  dumpWithDepth(G, 100, indent, true);
+  printrWithDepth(OS, G, 100);
+}
+
+void SDNode::dumprWithDepth(const SelectionDAG *G, unsigned depth) const {
+  printrWithDepth(dbgs(), G, depth);
+}
+
+void SDNode::dumprFull(const SelectionDAG *G) const {
+  // Don't print impossibly deep things.
+  dumprWithDepth(G, 100);
 } 
 
 static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {