diff --git a/include/llvm/CodeGen/SelectionDAGNodes.h b/include/llvm/CodeGen/SelectionDAGNodes.h
index 964b498..6a53155 100644
--- a/include/llvm/CodeGen/SelectionDAGNodes.h
+++ b/include/llvm/CodeGen/SelectionDAGNodes.h
@@ -1285,37 +1285,55 @@
   void print_details(raw_ostream &OS, const SelectionDAG *G) const;
   void print(raw_ostream &OS, const SelectionDAG *G = 0) const;
   void printr(raw_ostream &OS, const SelectionDAG *G = 0) const;
-  /// printWithDepth - Print a SelectionDAG node and children up to
-  /// depth "depth."  "limit" controls whether a message should be
-  /// printed if we hit depth "depth."
+
+  /// printrFull - Print a SelectionDAG node and all children down to
+  /// the leaves.  The given SelectionDAG allows target-specific nodes
+  /// to be printed in human-readable form.  Unlike printr, this will
+  /// print the whole DAG, including children that appear multiple
+  /// times.
   ///
-  void printWithDepth(raw_ostream &O, const SelectionDAG *G = 0,
-                      unsigned depth = -1, unsigned indent = 0,
-                      bool limit = false) const;
-  /// printWithFullDepth - Print a SelectionDAG node and all children
-  /// down to the leaves.
+  void printrFull(raw_ostream &O, const SelectionDAG *G = 0) const;
+
+  /// printrWithDepth - Print a SelectionDAG node and children up to
+  /// depth "depth."  The given SelectionDAG allows target-specific
+  /// nodes to be printed in human-readable form.  Unlike printr, this
+  /// will print children that appear multiple times wherever they are
+  /// used.
   ///
-  void printWithFullDepth(raw_ostream &O, const SelectionDAG *G = 0,
-                          unsigned indent = 0) const;
+  void printrWithDepth(raw_ostream &O, const SelectionDAG *G = 0,
+                       unsigned depth = 100) const;
+
+
   /// dump - Dump this node, for debugging.
   void dump() const;
+
   /// dumpr - Dump (recursively) this node and its use-def subgraph.
   void dumpr() const;
+
   /// dump - Dump this node, for debugging.
   /// The given SelectionDAG allows target-specific nodes to be printed
   /// in human-readable form.
   void dump(const SelectionDAG *G) const;
+
   /// dumpr - Dump (recursively) this node and its use-def subgraph.
   /// The given SelectionDAG allows target-specific nodes to be printed
   /// in human-readable form.
   void dumpr(const SelectionDAG *G) const;
-  /// dumpWithDepth - printWithDepth to dbgs().
+
+  /// dumprFull - printrFull to dbgs().  The given SelectionDAG allows
+  /// target-specific nodes to be printed in human-readable form.
+  /// Unlike dumpr, this will print the whole DAG, including children
+  /// that appear multiple times.
   ///
-  void dumpWithDepth(const SelectionDAG *G = 0, unsigned depth = 1,
-                     unsigned indent = 0, bool limit = false) const;
-  /// dumpWithFullDepth - printWithFullDepth to dbgs().
+  void dumprFull(const SelectionDAG *G = 0) const;
+
+  /// dumprWithDepth - printrWithDepth to dbgs().  The given
+  /// SelectionDAG allows target-specific nodes to be printed in
+  /// human-readable form.  Unlike dumpr, this will print children
+  /// that appear multiple times wherever they are used.
   ///
-  void dumpWithFullDepth(const SelectionDAG *G = 0, unsigned indent = 0) const;
+  void dumprWithDepth(const SelectionDAG *G = 0, unsigned depth = 100) const;
+
 
   static bool classof(const SDNode *) { return true; }
 
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) {
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index e539664..d0fc02d 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -1426,7 +1426,7 @@
   std::string msg;
   raw_string_ostream Msg(msg);
   Msg << "Cannot yet select: ";
-  N->printWithFullDepth(Msg, CurDAG);
+  N->printrFull(Msg, CurDAG);
   llvm_report_error(Msg.str());
 }
 
