[llvm-commits] [llvm] r92327 - /llvm/trunk/lib/VMCore/AsmWriter.cpp

Chris Lattner sabre at nondot.org
Wed Dec 30 17:54:05 PST 2009


Author: lattner
Date: Wed Dec 30 19:54:05 2009
New Revision: 92327

URL: http://llvm.org/viewvc/llvm-project?rev=92327&view=rev
Log:
unify two copies of the NamedMDNode printing code.

Modified:
    llvm/trunk/lib/VMCore/AsmWriter.cpp

Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=92327&r1=92326&r2=92327&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/AsmWriter.cpp (original)
+++ llvm/trunk/lib/VMCore/AsmWriter.cpp Wed Dec 30 19:54:05 2009
@@ -634,8 +634,8 @@
          E = TheModule->named_metadata_end(); I != E; ++I) {
     const NamedMDNode *NMD = I;
     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
-      MDNode *MD = dyn_cast_or_null<MDNode>(NMD->getOperand(i));
-      if (MD)
+      // FIXME: Change accessor to be type safe.
+      if (MDNode *MD = cast_or_null<MDNode>(NMD->getOperand(i)))
         CreateMetadataSlot(MD);
     }
   }
@@ -1312,6 +1312,8 @@
       M->getMDKindNames(MDNames);
   }
 
+  void printNamedMDNode(const NamedMDNode *NMD);
+  
   void write(const Module *M) { printModule(M); }
 
   void write(const GlobalValue *G) {
@@ -1446,23 +1448,29 @@
 
   // Output named metadata.
   if (!M->named_metadata_empty()) Out << '\n';
+  
   for (Module::const_named_metadata_iterator I = M->named_metadata_begin(),
-         E = M->named_metadata_end(); I != E; ++I) {
-    const NamedMDNode *NMD = I;
-    Out << "!" << NMD->getName() << " = !{";
-    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
-      if (i) Out << ", ";
-      MDNode *MD = dyn_cast_or_null<MDNode>(NMD->getOperand(i));
-      Out << '!' << Machine.getMetadataSlot(MD);
-    }
-    Out << "}\n";
-  }
+         E = M->named_metadata_end(); I != E; ++I)
+    printNamedMDNode(I);
 
   // Output metadata.
   if (!Machine.mdnEmpty()) Out << '\n';
   WriteMDNodes(Out, TypePrinter, Machine);
 }
 
+void AssemblyWriter::printNamedMDNode(const NamedMDNode *NMD) {
+  Out << "!" << NMD->getName() << " = !{";
+  for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
+    if (i) Out << ", ";
+    // FIXME: Change accessor to be typesafe.
+    // FIXME: This doesn't handle null??
+    MDNode *MD = cast_or_null<MDNode>(NMD->getOperand(i));
+    Out << '!' << Machine.getMetadataSlot(MD);
+  }
+  Out << "}\n";
+}
+
+
 static void PrintLinkage(GlobalValue::LinkageTypes LT,
                          formatted_raw_ostream &Out) {
   switch (LT) {
@@ -2100,19 +2108,8 @@
     WriteMDNodes(OS, TypePrinter, SlotTable);
   } else if (const NamedMDNode *N = dyn_cast<NamedMDNode>(this)) {
     SlotTracker SlotTable(N->getParent());
-    TypePrinting TypePrinter;
-    SlotTable.initialize();
-    OS << "!" << N->getName() << " = !{";
-    for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
-      if (i) OS << ", ";
-      MDNode *MD = dyn_cast_or_null<MDNode>(N->getOperand(i));
-      if (MD)
-        OS << '!' << SlotTable.getMetadataSlot(MD);
-      else
-        OS << "null";
-    }
-    OS << "}\n";
-    WriteMDNodes(OS, TypePrinter, SlotTable);
+    AssemblyWriter W(OS, SlotTable, N->getParent(), AAW);
+    W.printNamedMDNode(N);
   } else if (const Constant *C = dyn_cast<Constant>(this)) {
     TypePrinting TypePrinter;
     TypePrinter.print(C->getType(), OS);





More information about the llvm-commits mailing list