From 60e425e99ba7ef05b7a52c7068a67c6baa25da38 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Sun, 19 Jan 2014 02:13:50 +0000 Subject: Add a const lookup routine to get a BlockAddress constant if there is one, but not create one. This is useful in the verifier when we want to query the constant if it exists but not create one. To be used in an upcoming commit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199568 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/IR/Constants.cpp | 11 +++++++++++ lib/IR/LLVMContextImpl.h | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'lib') 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 CDSConstants; - - DenseMap , BlockAddress*> BlockAddresses; + DenseMap, BlockAddress *> + BlockAddresses; ConstantUniqueMap ExprConstants; -- cgit v1.2.3