Do not hardcode metadata names.
authorDevang Patel <dpatel@apple.com>
Mon, 28 Sep 2009 20:56:00 +0000 (20:56 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 28 Sep 2009 20:56:00 +0000 (20:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83010 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/AsmWriter.cpp

index 62856b3aca9c4e055c50cf49b084c3aa8a72bd37..b8e5ec026574bfc1ece43a63c4050eb1530cf862 100644 (file)
@@ -1266,6 +1266,7 @@ class AssemblyWriter {
   TypePrinting TypePrinter;
   AssemblyAnnotationWriter *AnnotationWriter;
   std::vector<const Type*> NumberedTypes;
+  DenseMap<unsigned, const char *> MDNames;
 
 public:
   inline AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
@@ -1273,6 +1274,14 @@ public:
                         AssemblyAnnotationWriter *AAW)
     : Out(o), Machine(Mac), TheModule(M), AnnotationWriter(AAW) {
     AddModuleTypesToPrinter(TypePrinter, NumberedTypes, M);
+    // FIXME: Provide MDPrinter
+    Metadata &TheMetadata = M->getContext().getMetadata();
+    const StringMap<unsigned> *Names = TheMetadata.getHandlerNames();
+    for (StringMapConstIterator<unsigned> I = Names->begin(),
+           E = Names->end(); I != E; ++I) {
+      const StringMapEntry<unsigned> &Entry = *I;
+      MDNames[I->second] = Entry.getKeyData();
+    }
   }
 
   void write(const Module *M) { printModule(M); }
@@ -1991,11 +2000,16 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
     Out << ", align " << cast<StoreInst>(I).getAlignment();
   }
 
-  // Print DebugInfo
+  // Print Metadata info
   Metadata &TheMetadata = I.getContext().getMetadata();
-  unsigned MDDbgKind = TheMetadata.getMDKind("dbg");
-  if (const MDNode *Dbg = TheMetadata.getMD(MDDbgKind, &I))
-    Out << ", dbg !" << Machine.getMetadataSlot(Dbg);
+  const Metadata::MDMapTy *MDMap = TheMetadata.getMDs(&I);
+  if (MDMap)
+    for (Metadata::MDMapTy::const_iterator MI = MDMap->begin(),
+           ME = MDMap->end(); MI != ME; ++MI)
+      if (const MDNode *MD = dyn_cast_or_null<MDNode>(MI->second))
+        Out << ", " << MDNames[MI->first]
+            << " !" << Machine.getMetadataSlot(MD);
+
   printInfoComment(I);
 }