[llvm] r261055 - Revert "Query the StringMap only once when creating MDString (NFC)"

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 16 18:18:58 PST 2016


Author: mehdi_amini
Date: Tue Feb 16 20:18:58 2016
New Revision: 261055

URL: http://llvm.org/viewvc/llvm-project?rev=261055&view=rev
Log:
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 <mehdi.amini at apple.com>

Modified:
    llvm/trunk/include/llvm/IR/Metadata.h
    llvm/trunk/lib/IR/Metadata.cpp

Modified: llvm/trunk/include/llvm/IR/Metadata.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Metadata.h?rev=261055&r1=261054&r2=261055&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Metadata.h (original)
+++ llvm/trunk/include/llvm/IR/Metadata.h Tue Feb 16 20:18:58 2016
@@ -592,11 +592,9 @@ class MDString : public Metadata {
 
   StringMapEntry<MDString> *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());

Modified: llvm/trunk/lib/IR/Metadata.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=261055&r1=261054&r2=261055&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Metadata.cpp (original)
+++ llvm/trunk/lib/IR/Metadata.cpp Tue Feb 16 20:18:58 2016
@@ -397,12 +397,17 @@ void ValueAsMetadata::handleRAUW(Value *
 
 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<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;
 }
 
 StringRef MDString::getString() const {




More information about the llvm-commits mailing list