Avoid repeatedly reallocating the FoldingSetNodeID when searching
authorDan Gohman <gohman@apple.com>
Tue, 12 Aug 2008 17:40:22 +0000 (17:40 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 12 Aug 2008 17:40:22 +0000 (17:40 +0000)
through multiple nodes in a bucket.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54687 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/FoldingSet.cpp

index 5f1de4a657fa4530da76857c7de902f00cab2011..6966ec8a15338d6d7f8fabac62ce51de5452f449 100644 (file)
@@ -232,6 +232,7 @@ void FoldingSetImpl::GrowHashTable() {
   Buckets[NumBuckets] = reinterpret_cast<void*>(-1);
 
   // Walk the old buckets, rehashing nodes into their new place.
+  FoldingSetNodeID ID;
   for (unsigned i = 0; i != OldNumBuckets; ++i) {
     void *Probe = OldBuckets[i];
     if (!Probe) continue;
@@ -241,9 +242,9 @@ void FoldingSetImpl::GrowHashTable() {
       NodeInBucket->SetNextInBucket(0);
 
       // Insert the node into the new bucket, after recomputing the hash.
-      FoldingSetNodeID ID;
       GetNodeProfile(ID, NodeInBucket);
       InsertNode(NodeInBucket, GetBucketFor(ID, Buckets, NumBuckets));
+      ID.clear();
     }
   }
   
@@ -262,13 +263,14 @@ FoldingSetImpl::Node
   
   InsertPos = 0;
   
+  FoldingSetNodeID OtherID;
   while (Node *NodeInBucket = GetNextPtr(Probe)) {
-    FoldingSetNodeID OtherID;
     GetNodeProfile(OtherID, NodeInBucket);
     if (OtherID == ID)
       return NodeInBucket;
 
     Probe = NodeInBucket->getNextInBucket();
+    OtherID.clear();
   }
   
   // Didn't find the node, return null with the bucket as the InsertPos.