forked from OSchip/llvm-project
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
This commit is contained in:
parent
1db10ac6ce
commit
0520929231
|
@ -592,9 +592,9 @@ class MDString : public Metadata {
|
|||
|
||||
StringMapEntry<MDString> *Entry;
|
||||
MDString() : Metadata(MDStringKind, Uniqued), Entry(nullptr) {}
|
||||
MDString(MDString &&) : Metadata(MDStringKind, Uniqued) {}
|
||||
|
||||
public:
|
||||
MDString(MDString &&R) = default;
|
||||
static MDString *get(LLVMContext &Context, StringRef Str);
|
||||
static MDString *get(LLVMContext &Context, const char *Str) {
|
||||
return get(Context, Str ? StringRef(Str) : StringRef());
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue