[llvm] r258405 - [ThinLTO] Avoid unnecesary hash lookups during metadata linking (NFC)

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 21 08:46:44 PST 2016


Author: tejohnson
Date: Thu Jan 21 10:46:40 2016
New Revision: 258405

URL: http://llvm.org/viewvc/llvm-project?rev=258405&view=rev
Log:
[ThinLTO] Avoid unnecesary hash lookups during metadata linking (NFC)

Replace sequences of count() followed by operator[] with either
find() or insert(), depending on the context.

Modified:
    llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
    llvm/trunk/lib/Linker/IRMover.cpp

Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=258405&r1=258404&r2=258405&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Thu Jan 21 10:46:40 2016
@@ -3081,9 +3081,11 @@ void BitcodeReader::saveMetadataList(
     if (!OnlyTempMD || (N && N->isTemporary())) {
       // Will call this after materializing each function, in order to
       // handle remapping of the function's instructions/metadata.
+      auto IterBool = MetadataToIDs.insert(std::make_pair(MD, ID));
       // See if we already have an entry in that case.
-      if (OnlyTempMD && MetadataToIDs.count(MD)) {
-        assert(MetadataToIDs[MD] == ID && "Inconsistent metadata value id");
+      if (OnlyTempMD && !IterBool.second) {
+        assert(IterBool.first->second == ID &&
+               "Inconsistent metadata value id");
         continue;
       }
       if (N && N->isTemporary())
@@ -3091,7 +3093,6 @@ void BitcodeReader::saveMetadataList(
         // metadata while it is the key of a map. The flag will be set back
         // to true when the saved metadata list is destroyed.
         N->setCanReplace(false);
-      MetadataToIDs[MD] = ID;
     }
   }
 }

Modified: llvm/trunk/lib/Linker/IRMover.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/IRMover.cpp?rev=258405&r1=258404&r2=258405&view=diff
==============================================================================
--- llvm/trunk/lib/Linker/IRMover.cpp (original)
+++ llvm/trunk/lib/Linker/IRMover.cpp Thu Jan 21 10:46:40 2016
@@ -659,17 +659,15 @@ Metadata *IRLinker::mapTemporaryMetadata
     return nullptr;
   // If this temporary metadata has a value id recorded during function
   // parsing, record that in the ValIDToTempMDMap if one was provided.
-  if (MetadataToIDs.count(MD)) {
-    unsigned Idx = MetadataToIDs[MD];
-    // Check if we created a temp MD when importing a different function from
-    // this module. If so, reuse it the same temporary metadata, otherwise
-    // add this temporary metadata to the map.
-    if (!ValIDToTempMDMap->count(Idx)) {
-      MDNode *Node = cast<MDNode>(MD);
-      assert(Node->isTemporary());
-      (*ValIDToTempMDMap)[Idx] = Node;
-    }
-    return (*ValIDToTempMDMap)[Idx];
+  auto I = MetadataToIDs.find(MD);
+  if (I != MetadataToIDs.end()) {
+    unsigned Idx = I->second;
+    MDNode *Node = cast<MDNode>(MD);
+    assert(Node->isTemporary());
+    // If we created a temp MD when importing a different function from
+    // this module, reuse the same temporary metadata.
+    auto IterBool = ValIDToTempMDMap->insert(std::make_pair(Idx, Node));
+    return IterBool.first->second;
   }
   return nullptr;
 }
@@ -686,16 +684,18 @@ void IRLinker::replaceTemporaryMetadata(
   // created during function importing was provided, and the source
   // metadata has a value id recorded during metadata parsing, replace
   // the temporary metadata with the final mapped metadata now.
-  if (MetadataToIDs.count(OrigMD)) {
-    unsigned Idx = MetadataToIDs[OrigMD];
+  auto I = MetadataToIDs.find(OrigMD);
+  if (I != MetadataToIDs.end()) {
+    unsigned Idx = I->second;
+    auto VI = ValIDToTempMDMap->find(Idx);
     // Nothing to do if we didn't need to create a temporary metadata during
     // function importing.
-    if (!ValIDToTempMDMap->count(Idx))
+    if (VI == ValIDToTempMDMap->end())
       return;
-    MDNode *TempMD = (*ValIDToTempMDMap)[Idx];
+    MDNode *TempMD = VI->second;
     TempMD->replaceAllUsesWith(NewMD);
     MDNode::deleteTemporary(TempMD);
-    ValIDToTempMDMap->erase(Idx);
+    ValIDToTempMDMap->erase(VI);
   }
 }
 




More information about the llvm-commits mailing list