diff options
| author | Justin Lebar <jlebar@google.com> | 2016-10-10 16:26:13 +0000 |
|---|---|---|
| committer | Justin Lebar <jlebar@google.com> | 2016-10-10 16:26:13 +0000 |
| commit | 611c5c225a4878fed90add07c112a577954f8ba5 (patch) | |
| tree | de4bcb9fbc3e1896529a1ac6f75c39673a2a8fea /llvm/lib | |
| parent | 28f09c50e2f0712c39438b4363361ada90726b39 (diff) | |
| download | bcm5719-llvm-611c5c225a4878fed90add07c112a577954f8ba5.tar.gz bcm5719-llvm-611c5c225a4878fed90add07c112a577954f8ba5.zip | |
Use unique_ptr in LLVMContextImpl's constant maps.
Reviewers: timshen
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D25419
llvm-svn: 283767
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/IR/Constants.cpp | 34 | ||||
| -rw-r--r-- | llvm/lib/IR/LLVMContextImpl.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/IR/LLVMContextImpl.h | 16 |
3 files changed, 33 insertions, 28 deletions
diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp index 6951b0c8c04..8138f8904b8 100644 --- a/llvm/lib/IR/Constants.cpp +++ b/llvm/lib/IR/Constants.cpp @@ -545,14 +545,14 @@ Constant *ConstantInt::getFalse(Type *Ty) { ConstantInt *ConstantInt::get(LLVMContext &Context, const APInt &V) { // get an existing value or the insertion position LLVMContextImpl *pImpl = Context.pImpl; - ConstantInt *&Slot = pImpl->IntConstants[V]; + std::unique_ptr<ConstantInt> &Slot = pImpl->IntConstants[V]; if (!Slot) { // Get the corresponding integer type for the bit width of the value. IntegerType *ITy = IntegerType::get(Context, V.getBitWidth()); - Slot = new ConstantInt(ITy, V); + Slot.reset(new ConstantInt(ITy, V)); } assert(Slot->getType() == IntegerType::get(Context, V.getBitWidth())); - return Slot; + return Slot.get(); } Constant *ConstantInt::get(Type *Ty, uint64_t V, bool isSigned) { @@ -685,7 +685,7 @@ Constant *ConstantFP::getZeroValueForNegation(Type *Ty) { ConstantFP* ConstantFP::get(LLVMContext &Context, const APFloat& V) { LLVMContextImpl* pImpl = Context.pImpl; - ConstantFP *&Slot = pImpl->FPConstants[V]; + std::unique_ptr<ConstantFP> &Slot = pImpl->FPConstants[V]; if (!Slot) { Type *Ty; @@ -704,10 +704,10 @@ ConstantFP* ConstantFP::get(LLVMContext &Context, const APFloat& V) { "Unknown FP format"); Ty = Type::getPPC_FP128Ty(Context); } - Slot = new ConstantFP(Ty, V); + Slot.reset(new ConstantFP(Ty, V)); } - return Slot; + return Slot.get(); } Constant *ConstantFP::getInfinity(Type *Ty, bool Negative) { @@ -1259,12 +1259,13 @@ bool ConstantFP::isValueValidForType(Type *Ty, const APFloat& Val) { ConstantAggregateZero *ConstantAggregateZero::get(Type *Ty) { assert((Ty->isStructTy() || Ty->isArrayTy() || Ty->isVectorTy()) && "Cannot create an aggregate zero of non-aggregate type!"); - - ConstantAggregateZero *&Entry = Ty->getContext().pImpl->CAZConstants[Ty]; + + std::unique_ptr<ConstantAggregateZero> &Entry = + Ty->getContext().pImpl->CAZConstants[Ty]; if (!Entry) - Entry = new ConstantAggregateZero(Ty); + Entry.reset(new ConstantAggregateZero(Ty)); - return Entry; + return Entry.get(); } /// Remove the constant from the constant table. @@ -1325,11 +1326,12 @@ const APInt &Constant::getUniqueInteger() const { // ConstantPointerNull *ConstantPointerNull::get(PointerType *Ty) { - ConstantPointerNull *&Entry = Ty->getContext().pImpl->CPNConstants[Ty]; + std::unique_ptr<ConstantPointerNull> &Entry = + Ty->getContext().pImpl->CPNConstants[Ty]; if (!Entry) - Entry = new ConstantPointerNull(Ty); + Entry.reset(new ConstantPointerNull(Ty)); - return Entry; + return Entry.get(); } /// Remove the constant from the constant table. @@ -1338,11 +1340,11 @@ void ConstantPointerNull::destroyConstantImpl() { } UndefValue *UndefValue::get(Type *Ty) { - UndefValue *&Entry = Ty->getContext().pImpl->UVConstants[Ty]; + std::unique_ptr<UndefValue> &Entry = Ty->getContext().pImpl->UVConstants[Ty]; if (!Entry) - Entry = new UndefValue(Ty); + Entry.reset(new UndefValue(Ty)); - return Entry; + return Entry.get(); } /// Remove the constant from the constant table. diff --git a/llvm/lib/IR/LLVMContextImpl.cpp b/llvm/lib/IR/LLVMContextImpl.cpp index b0b2c61bdf1..c43356c5382 100644 --- a/llvm/lib/IR/LLVMContextImpl.cpp +++ b/llvm/lib/IR/LLVMContextImpl.cpp @@ -94,12 +94,13 @@ LLVMContextImpl::~LLVMContextImpl() { ArrayConstants.freeConstants(); StructConstants.freeConstants(); VectorConstants.freeConstants(); - DeleteContainerSeconds(CAZConstants); - DeleteContainerSeconds(CPNConstants); - DeleteContainerSeconds(UVConstants); InlineAsms.freeConstants(); - DeleteContainerSeconds(IntConstants); - DeleteContainerSeconds(FPConstants); + + CAZConstants.clear(); + CPNConstants.clear(); + UVConstants.clear(); + IntConstants.clear(); + FPConstants.clear(); for (auto &CDSConstant : CDSConstants) delete CDSConstant.second; diff --git a/llvm/lib/IR/LLVMContextImpl.h b/llvm/lib/IR/LLVMContextImpl.h index 49a35a4d375..6f2f60110ca 100644 --- a/llvm/lib/IR/LLVMContextImpl.h +++ b/llvm/lib/IR/LLVMContextImpl.h @@ -1049,10 +1049,12 @@ public: LLVMContext::YieldCallbackTy YieldCallback; void *YieldOpaqueHandle; - typedef DenseMap<APInt, ConstantInt *, DenseMapAPIntKeyInfo> IntMapTy; + typedef DenseMap<APInt, std::unique_ptr<ConstantInt>, DenseMapAPIntKeyInfo> + IntMapTy; IntMapTy IntConstants; - typedef DenseMap<APFloat, ConstantFP *, DenseMapAPFloatKeyInfo> FPMapTy; + typedef DenseMap<APFloat, std::unique_ptr<ConstantFP>, DenseMapAPFloatKeyInfo> + FPMapTy; FPMapTy FPConstants; FoldingSet<AttributeImpl> AttrsSet; @@ -1078,7 +1080,7 @@ public: // them on context teardown. std::vector<MDNode *> DistinctMDNodes; - DenseMap<Type*, ConstantAggregateZero*> CAZConstants; + DenseMap<Type *, std::unique_ptr<ConstantAggregateZero>> CAZConstants; typedef ConstantUniqueMap<ConstantArray> ArrayConstantsTy; ArrayConstantsTy ArrayConstants; @@ -1088,11 +1090,11 @@ public: typedef ConstantUniqueMap<ConstantVector> VectorConstantsTy; VectorConstantsTy VectorConstants; - - DenseMap<PointerType*, ConstantPointerNull*> CPNConstants; - DenseMap<Type*, UndefValue*> UVConstants; - + DenseMap<PointerType *, std::unique_ptr<ConstantPointerNull>> CPNConstants; + + DenseMap<Type *, std::unique_ptr<UndefValue>> UVConstants; + StringMap<ConstantDataSequential*> CDSConstants; DenseMap<std::pair<const Function *, const BasicBlock *>, BlockAddress *> |

