Replace a use of ConstantUniqueMap for CAZ constants with a simple DenseMap.

Now that the type system rewrite has landed, there is no need for its
complexity and std::map'ness.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148691 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2012-01-23 08:42:38 +00:00
parent cef3925698
commit 2a82d82936
4 changed files with 23 additions and 21 deletions

View File

@@ -993,18 +993,33 @@ bool ConstantFP::isValueValidForType(Type *Ty, const APFloat& Val) {
//===----------------------------------------------------------------------===//
// Factory Function Implementation
ConstantAggregateZero* ConstantAggregateZero::get(Type* Ty) {
ConstantAggregateZero *ConstantAggregateZero::get(Type *Ty) {
assert((Ty->isStructTy() || Ty->isArrayTy() || Ty->isVectorTy()) &&
"Cannot create an aggregate zero of non-aggregate type!");
LLVMContextImpl *pImpl = Ty->getContext().pImpl;
return pImpl->AggZeroConstants.getOrCreate(Ty, 0);
OwningPtr<ConstantAggregateZero> &Entry =
Ty->getContext().pImpl->CAZConstants[Ty];
if (Entry == 0)
Entry.reset(new ConstantAggregateZero(Ty));
return Entry.get();
}
/// destroyConstant - Remove the constant from the constant table...
///
void ConstantAggregateZero::destroyConstant() {
getType()->getContext().pImpl->AggZeroConstants.remove(this);
// Drop ownership of the CAZ object before removing the entry so that it
// doesn't get double deleted.
LLVMContextImpl::CAZMapTy &CAZConstants = getContext().pImpl->CAZConstants;
LLVMContextImpl::CAZMapTy::iterator I = CAZConstants.find(getType());
assert(I != CAZConstants.end() && "CAZ object not in uniquing map");
I->second.take();
// Actually remove the entry from the DenseMap now, which won't free the
// constant.
CAZConstants.erase(I);
// Free the constant and any dangling references to it.
destroyConstantImpl();
}