diff options
author | Chris Lattner <sabre@nondot.org> | 2009-10-30 22:33:29 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-10-30 22:33:29 +0000 |
commit | 0fb64e96c8cb775c57cea53171ce0525da9249c5 (patch) | |
tree | 3dc967f7b4c55152dddb6a5e1fdad3bd3a168a84 /lib/VMCore | |
parent | 4381e3bc06cb247d7d57658b2c6134c24021d316 (diff) | |
download | external_llvm-0fb64e96c8cb775c57cea53171ce0525da9249c5.zip external_llvm-0fb64e96c8cb775c57cea53171ce0525da9249c5.tar.gz external_llvm-0fb64e96c8cb775c57cea53171ce0525da9249c5.tar.bz2 |
make hasAddressTaken() constant time by storing a refcount in BB's subclass data.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85625 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore')
-rw-r--r-- | lib/VMCore/BasicBlock.cpp | 8 | ||||
-rw-r--r-- | lib/VMCore/Constants.cpp | 12 |
2 files changed, 7 insertions, 13 deletions
diff --git a/lib/VMCore/BasicBlock.cpp b/lib/VMCore/BasicBlock.cpp index ede2d12..e8069c0 100644 --- a/lib/VMCore/BasicBlock.cpp +++ b/lib/VMCore/BasicBlock.cpp @@ -278,11 +278,3 @@ BasicBlock *BasicBlock::splitBasicBlock(iterator I, const Twine &BBName) { return New; } -/// hasAddressTaken - returns true if there are any uses of this basic block -/// other than direct branches, switches, etc. to it. -bool BasicBlock::hasAddressTaken() const { - for (Value::use_const_iterator I = use_begin(), E = use_end(); I != E; ++I) - if (isa<BlockAddress>(*I)) - return true; - return false; -} diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 0d7faba..2d3d71b 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -44,7 +44,7 @@ using namespace llvm; // Constructor to create a '0' constant of arbitrary type... static const uint64_t zero[2] = {0, 0}; -Constant* Constant::getNullValue(const Type* Ty) { +Constant *Constant::getNullValue(const Type *Ty) { switch (Ty->getTypeID()) { case Type::IntegerTyID: return ConstantInt::get(Ty, 0); @@ -72,7 +72,7 @@ Constant* Constant::getNullValue(const Type* Ty) { } } -Constant* Constant::getIntegerValue(const Type* Ty, const APInt &V) { +Constant* Constant::getIntegerValue(const Type *Ty, const APInt &V) { const Type *ScalarTy = Ty->getScalarType(); // Create the base integer constant. @@ -89,13 +89,13 @@ Constant* Constant::getIntegerValue(const Type* Ty, const APInt &V) { return C; } -Constant* Constant::getAllOnesValue(const Type* Ty) { - if (const IntegerType* ITy = dyn_cast<IntegerType>(Ty)) +Constant* Constant::getAllOnesValue(const Type *Ty) { + if (const IntegerType *ITy = dyn_cast<IntegerType>(Ty)) return ConstantInt::get(Ty->getContext(), APInt::getAllOnesValue(ITy->getBitWidth())); std::vector<Constant*> Elts; - const VectorType* VTy = cast<VectorType>(Ty); + const VectorType *VTy = cast<VectorType>(Ty); Elts.resize(VTy->getNumElements(), getAllOnesValue(VTy->getElementType())); assert(Elts[0] && "Not a vector integer type!"); return cast<ConstantVector>(ConstantVector::get(Elts)); @@ -1045,6 +1045,7 @@ BlockAddress::BlockAddress(Function *F, BasicBlock *BB) &Op<0>(), 2) { Op<0>() = F; Op<1>() = BB; + BB->AdjustBlockAddressRefCount(1); } @@ -1053,6 +1054,7 @@ BlockAddress::BlockAddress(Function *F, BasicBlock *BB) void BlockAddress::destroyConstant() { getFunction()->getType()->getContext().pImpl ->BlockAddresses.erase(std::make_pair(getFunction(), getBasicBlock())); + getBasicBlock()->AdjustBlockAddressRefCount(-1); destroyConstantImpl(); } |