diff options
author | Mehdi Amini <mehdi.amini@apple.com> | 2016-02-16 23:05:56 +0000 |
---|---|---|
committer | Mehdi Amini <mehdi.amini@apple.com> | 2016-02-16 23:05:56 +0000 |
commit | 0520929231d9517a13ec66da6675485aa649b312 (patch) | |
tree | b9e7ad85aa5d268942cfeaef875d942ea33593e3 /llvm/lib/IR/Metadata.cpp | |
parent | 1db10ac6ce4deb09bf12a756965bee0b78f78292 (diff) | |
download | bcm5719-llvm-0520929231d9517a13ec66da6675485aa649b312.tar.gz bcm5719-llvm-0520929231d9517a13ec66da6675485aa649b312.zip |
Query the StringMap only once when creating MDString (NFC)
Summary: Loading IR with debug info improves MDString::get() from 19ms to 10ms.
Reviewers: dexonsmith
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D16597
From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 261030
Diffstat (limited to 'llvm/lib/IR/Metadata.cpp')
-rw-r--r-- | llvm/lib/IR/Metadata.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/llvm/lib/IR/Metadata.cpp b/llvm/lib/IR/Metadata.cpp index cc0c568c861..ddb9cc4e17f 100644 --- a/llvm/lib/IR/Metadata.cpp +++ b/llvm/lib/IR/Metadata.cpp @@ -397,17 +397,12 @@ void ValueAsMetadata::handleRAUW(Value *From, Value *To) { MDString *MDString::get(LLVMContext &Context, StringRef Str) { auto &Store = Context.pImpl->MDStringCache; - auto I = Store.find(Str); - if (I != Store.end()) - return &I->second; - - auto *Entry = - StringMapEntry<MDString>::Create(Str, Store.getAllocator(), MDString()); - bool WasInserted = Store.insert(Entry); - (void)WasInserted; - assert(WasInserted && "Expected entry to be inserted"); - Entry->second.Entry = Entry; - return &Entry->second; + auto I = Store.insert(std::make_pair(Str, MDString())); + auto &MapEntry = I.first->getValue(); + if (!I.second) + return &MapEntry; + MapEntry.Entry = &*I.first; + return &MapEntry; } StringRef MDString::getString() const { |