diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/IR/Constants.cpp | 11 | ||||
-rw-r--r-- | lib/IR/LLVMContextImpl.h | 4 |
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/IR/Constants.cpp b/lib/IR/Constants.cpp index 1f6f5ac427..ecd2cfd9fd 100644 --- a/lib/IR/Constants.cpp +++ b/lib/IR/Constants.cpp @@ -1375,6 +1375,17 @@ BlockAddress::BlockAddress(Function *F, BasicBlock *BB) BB->AdjustBlockAddressRefCount(1); } +BlockAddress *BlockAddress::lookup(const BasicBlock *BB) { + if (!BB->hasAddressTaken()) + return 0; + + const Function *F = BB->getParent(); + assert(F != 0 && "Block must have a parent"); + BlockAddress *BA = + F->getContext().pImpl->BlockAddresses.lookup(std::make_pair(F, BB)); + assert(BA && "Refcount and block address map disagree!"); + return BA; +} // destroyConstant - Remove the constant from the constant table. // diff --git a/lib/IR/LLVMContextImpl.h b/lib/IR/LLVMContextImpl.h index 39e5d778ed..0433827246 100644 --- a/lib/IR/LLVMContextImpl.h +++ b/lib/IR/LLVMContextImpl.h @@ -281,8 +281,8 @@ public: StringMap<ConstantDataSequential*> CDSConstants; - - DenseMap<std::pair<Function*, BasicBlock*> , BlockAddress*> BlockAddresses; + DenseMap<std::pair<const Function *, const BasicBlock *>, BlockAddress *> + BlockAddresses; ConstantUniqueMap<ExprMapKeyType, const ExprMapKeyType&, Type, ConstantExpr> ExprConstants; |