eliminate another copy of the mdnode printing logic, simplify the
authorChris Lattner <sabre@nondot.org>
Thu, 31 Dec 2009 02:31:59 +0000 (02:31 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 31 Dec 2009 02:31:59 +0000 (02:31 +0000)
one that remains.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92334 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/AsmWriter.cpp

index 90160fcd22a4fb0561c87038542d7990932a36a4..b1b806adea7ea79969cd2fc84e5cdf119e114f4f 100644 (file)
@@ -1074,6 +1074,27 @@ static void WriteConstantInt(raw_ostream &Out, const Constant *CV,
   Out << "<placeholder or erroneous Constant>";
 }
 
+static void WriteMDNodeBodyInternal(raw_ostream &Out, const MDNode *Node,
+                                    TypePrinting *TypePrinter,
+                                    SlotTracker *Machine) {
+  Out << "!{";
+  for (unsigned mi = 0, me = Node->getNumOperands(); mi != me; ++mi) {
+    const Value *V = Node->getOperand(mi);
+    if (V == 0)
+      Out << "null";
+    else {
+      TypePrinter->print(V->getType(), Out);
+      Out << ' ';
+      WriteAsOperandInternal(Out, Node->getOperand(mi), 
+                             TypePrinter, Machine);
+    }
+    if (mi + 1 != me)
+      Out << ", ";
+  }
+  
+  Out << "}";
+}
+
 
 /// WriteAsOperand - Write the name of the specified value out to the specified
 /// ostream.  This can be useful when you just want to print int %reg126, not
@@ -1111,20 +1132,7 @@ static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
   if (const MDNode *N = dyn_cast<MDNode>(V)) {
     if (N->isFunctionLocal()) {
       // Print metadata inline, not via slot reference number.
-      Out << "!{";
-      for (unsigned mi = 0, me = N->getNumOperands(); mi != me; ++mi) {
-        const Value *Val = N->getOperand(mi);
-        if (!Val)
-          Out << "null";
-        else {
-          TypePrinter->print(N->getOperand(mi)->getType(), Out);
-          Out << ' ';
-          WriteAsOperandInternal(Out, N->getOperand(mi), TypePrinter, Machine);
-        }
-        if (mi + 1 != me)
-          Out << ", ";
-      }
-      Out << '}';
+      WriteMDNodeBodyInternal(Out, N, TypePrinter, Machine);
       return;
     }
   
@@ -1999,24 +2007,7 @@ void AssemblyWriter::writeAllMDNodes() {
 }
 
 void AssemblyWriter::printMDNodeBody(const MDNode *Node) {
-  Out << "!{";
-  for (unsigned mi = 0, me = Node->getNumOperands(); mi != me; ++mi) {
-    const Value *V = Node->getOperand(mi);
-    if (V == 0)
-      Out << "null";
-    else if (const MDNode *N = dyn_cast<MDNode>(V)) {
-      Out << "metadata !" << Machine.getMetadataSlot(N);
-    } else {
-      TypePrinter.print(V->getType(), Out);
-      Out << ' ';
-      WriteAsOperandInternal(Out, Node->getOperand(mi), 
-                             &TypePrinter, &Machine);
-    }
-    if (mi + 1 != me)
-      Out << ", ";
-  }
-  
-  Out << "}";
+  WriteMDNodeBodyInternal(Out, Node, &TypePrinter, &Machine);
   WriteMDNodeComment(Node, Out);
   Out << "\n";
 }