From: Mehdi Amini Date: Wed, 17 Feb 2016 02:18:58 +0000 (+0000) Subject: Revert "Query the StringMap only once when creating MDString (NFC)" X-Git-Tag: android-x86-7.1-r4~37597 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=1df6c24ac62165ae052ae728c9f7ffeff00e958c;p=android-x86%2Fexternal-llvm.git Revert "Query the StringMap only once when creating MDString (NFC)" This reverts commit r261030 and r261036. (The revision was marked "approved" on phabricator, but some concerns were raised on the mailing list. Thanks D. Blaikie for notifying me.) From: Mehdi Amini git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@261055 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/IR/Metadata.h b/include/llvm/IR/Metadata.h index a514b6006d5..df8ce354bb7 100644 --- a/include/llvm/IR/Metadata.h +++ b/include/llvm/IR/Metadata.h @@ -592,11 +592,9 @@ class MDString : public Metadata { StringMapEntry *Entry; MDString() : Metadata(MDStringKind, Uniqued), Entry(nullptr) {} + MDString(MDString &&) : Metadata(MDStringKind, Uniqued) {} public: - // This is a "default" move ctor, MSVC does not support "= default" here - MDString(MDString &&R) - : Metadata(MDStringKind, Uniqued), Entry(std::move(R.Entry)) {} static MDString *get(LLVMContext &Context, StringRef Str); static MDString *get(LLVMContext &Context, const char *Str) { return get(Context, Str ? StringRef(Str) : StringRef()); diff --git a/lib/IR/Metadata.cpp b/lib/IR/Metadata.cpp index ddb9cc4e17f..cc0c568c861 100644 --- a/lib/IR/Metadata.cpp +++ b/lib/IR/Metadata.cpp @@ -397,12 +397,17 @@ void ValueAsMetadata::handleRAUW(Value *From, Value *To) { MDString *MDString::get(LLVMContext &Context, StringRef Str) { auto &Store = Context.pImpl->MDStringCache; - 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; + auto I = Store.find(Str); + if (I != Store.end()) + return &I->second; + + auto *Entry = + StringMapEntry::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; } StringRef MDString::getString() const {