diff options
author | Devang Patel <dpatel@apple.com> | 2009-09-28 20:56:00 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-09-28 20:56:00 +0000 |
commit | 565371b4c9bbf023259a5a0f5c500a9480787685 (patch) | |
tree | 3fa71bf2380e7c3b20caef3ba9c58d4d3b8f1613 /llvm/lib | |
parent | 46945e38ea3be5310a836eacccfa723648f24220 (diff) | |
download | bcm5719-llvm-565371b4c9bbf023259a5a0f5c500a9480787685.tar.gz bcm5719-llvm-565371b4c9bbf023259a5a0f5c500a9480787685.zip |
Do not hardcode metadata names.
llvm-svn: 83010
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/VMCore/AsmWriter.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/llvm/lib/VMCore/AsmWriter.cpp b/llvm/lib/VMCore/AsmWriter.cpp index 62856b3aca9..b8e5ec02657 100644 --- a/llvm/lib/VMCore/AsmWriter.cpp +++ b/llvm/lib/VMCore/AsmWriter.cpp @@ -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); } |