diff options
author | Devang Patel <dpatel@apple.com> | 2009-10-22 01:01:24 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-10-22 01:01:24 +0000 |
commit | ce6a1c97569ce65a60340b20e65abd0787969942 (patch) | |
tree | 8eb4a75066bed7ec40bb723a7f3202d7f31c6f87 | |
parent | 316e3268a8ba371b92ec57952a4c1ee1ef6ae5ce (diff) | |
download | external_llvm-ce6a1c97569ce65a60340b20e65abd0787969942.zip external_llvm-ce6a1c97569ce65a60340b20e65abd0787969942.tar.gz external_llvm-ce6a1c97569ce65a60340b20e65abd0787969942.tar.bz2 |
Fix getHandlerNames() interface. Now it populate clinet supplied small vector with handler names.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84820 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Metadata.h | 2 | ||||
-rw-r--r-- | lib/Bitcode/Writer/BitcodeWriter.cpp | 12 | ||||
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 13 | ||||
-rw-r--r-- | lib/VMCore/Metadata.cpp | 9 |
4 files changed, 21 insertions, 15 deletions
diff --git a/include/llvm/Metadata.h b/include/llvm/Metadata.h index 91ab55b..a9c242c 100644 --- a/include/llvm/Metadata.h +++ b/include/llvm/Metadata.h @@ -287,7 +287,7 @@ public: /// getHandlerNames - Get handler names. This is used by bitcode /// writer. - const StringMap<unsigned> *getHandlerNames(); + void getHandlerNames(SmallVectorImpl<std::pair<unsigned, StringRef> >&N) const; /// ValueIsDeleted - This handler is used to update metadata store /// when a value is deleted. diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp index a8c1ef7..947b895 100644 --- a/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -602,11 +602,13 @@ static void WriteModuleMetadataStore(const Module *M, // Write metadata kinds // METADATA_KIND - [n x [id, name]] MetadataContext &TheMetadata = M->getContext().getMetadata(); - const StringMap<unsigned> *Kinds = TheMetadata.getHandlerNames(); - for (StringMap<unsigned>::const_iterator - I = Kinds->begin(), E = Kinds->end(); I != E; ++I) { - Record.push_back(I->second); - StringRef KName = I->first(); + SmallVector<std::pair<unsigned, StringRef>, 4> Names; + TheMetadata.getHandlerNames(Names); + for (SmallVector<std::pair<unsigned, StringRef>, 4>::iterator + I = Names.begin(), + E = Names.end(); I != E; ++I) { + Record.push_back(I->first); + StringRef KName = I->second; for (unsigned i = 0, e = KName.size(); i != e; ++i) Record.push_back(KName[i]); if (!StartedMetadataBlock) { diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index 6ee2ece..e6ed81e 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -1295,7 +1295,7 @@ class AssemblyWriter { TypePrinting TypePrinter; AssemblyAnnotationWriter *AnnotationWriter; std::vector<const Type*> NumberedTypes; - DenseMap<unsigned, const char *> MDNames; + DenseMap<unsigned, StringRef> MDNames; public: inline AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac, @@ -1306,11 +1306,12 @@ public: // FIXME: Provide MDPrinter if (M) { MetadataContext &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(); + SmallVector<std::pair<unsigned, StringRef>, 4> Names; + TheMetadata.getHandlerNames(Names); + for (SmallVector<std::pair<unsigned, StringRef>, 4>::iterator + I = Names.begin(), + E = Names.end(); I != E; ++I) { + MDNames[I->first] = I->second; } } } diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index 3e3ea77..f45114c 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -305,9 +305,12 @@ MetadataContext::getMDs(const Instruction *Inst) { } /// getHandlerNames - Get handler names. This is used by bitcode -/// writer. -const StringMap<unsigned> *MetadataContext::getHandlerNames() { - return &MDHandlerNames; +/// writer and aswm writer. +void MetadataContext:: +getHandlerNames(SmallVectorImpl<std::pair<unsigned, StringRef> >&Names) const { + for (StringMap<unsigned>::const_iterator I = MDHandlerNames.begin(), + E = MDHandlerNames.end(); I != E; ++I) + Names.push_back(std::make_pair(I->second, I->first())); } /// ValueIsCloned - This handler is used to update metadata store |