From be5e69ed37d640a2dc4da3be2a87f4376d6a60f8 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 12 Aug 2008 17:40:22 +0000 Subject: [PATCH] Avoid repeatedly reallocating the FoldingSetNodeID when searching through multiple nodes in a bucket. llvm-svn: 54687 --- llvm/lib/Support/FoldingSet.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Support/FoldingSet.cpp b/llvm/lib/Support/FoldingSet.cpp index 5f1de4a657fa..6966ec8a1533 100644 --- a/llvm/lib/Support/FoldingSet.cpp +++ b/llvm/lib/Support/FoldingSet.cpp @@ -232,6 +232,7 @@ void FoldingSetImpl::GrowHashTable() { Buckets[NumBuckets] = reinterpret_cast(-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.