diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2010-06-19 17:00:31 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2010-06-19 17:00:31 +0000 |
commit | bf5c3d42ba3e67c0c10cdf09dad513adc290ff6d (patch) | |
tree | c44c74ab2dcd4a9d0566725faa6284dbc70f1432 /llvm/lib/Support/FoldingSet.cpp | |
parent | 866971ed3d30520c55f8948a4a608a5b0e260c52 (diff) | |
download | bcm5719-llvm-bf5c3d42ba3e67c0c10cdf09dad513adc290ff6d.tar.gz bcm5719-llvm-bf5c3d42ba3e67c0c10cdf09dad513adc290ff6d.zip |
Use calloc instead of new/memset, it is more efficient when the set is very large.
llvm-svn: 106390
Diffstat (limited to 'llvm/lib/Support/FoldingSet.cpp')
-rw-r--r-- | llvm/lib/Support/FoldingSet.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/llvm/lib/Support/FoldingSet.cpp b/llvm/lib/Support/FoldingSet.cpp index 3f467fe1b69..b8dca334da4 100644 --- a/llvm/lib/Support/FoldingSet.cpp +++ b/llvm/lib/Support/FoldingSet.cpp @@ -175,6 +175,14 @@ static void **GetBucketFor(const FoldingSetNodeID &ID, return Buckets + BucketNum; } +/// AllocateBuckets - Allocated initialized bucket memory. +static void **AllocateBuckets(unsigned NumBuckets) { + void **Buckets = static_cast<void**>(calloc(NumBuckets+1, sizeof(void*))); + // Set the very last bucket to be a non-null "pointer". + Buckets[NumBuckets] = reinterpret_cast<void*>(-1); + return Buckets; +} + //===----------------------------------------------------------------------===// // FoldingSetImpl Implementation @@ -182,11 +190,11 @@ FoldingSetImpl::FoldingSetImpl(unsigned Log2InitSize) { assert(5 < Log2InitSize && Log2InitSize < 32 && "Initial hash table size out of range"); NumBuckets = 1 << Log2InitSize; - Buckets = new void*[NumBuckets+1]; - clear(); + Buckets = AllocateBuckets(NumBuckets); + NumNodes = 0; } FoldingSetImpl::~FoldingSetImpl() { - delete [] Buckets; + free(Buckets); } void FoldingSetImpl::clear() { // Set all but the last bucket to null pointers. @@ -207,8 +215,8 @@ void FoldingSetImpl::GrowHashTable() { NumBuckets <<= 1; // Clear out new buckets. - Buckets = new void*[NumBuckets+1]; - clear(); + Buckets = AllocateBuckets(NumBuckets); + NumNodes = 0; // Walk the old buckets, rehashing nodes into their new place. FoldingSetNodeID ID; @@ -227,7 +235,7 @@ void FoldingSetImpl::GrowHashTable() { } } - delete[] OldBuckets; + free(OldBuckets); } /// FindNodeOrInsertPos - Look up the node specified by ID. If it exists, |