/// Constraints on parameters.
isl_set *Context;
- typedef MapVector<const Value *, const ScopArrayInfo *> ArrayInfoMapTy;
+ typedef MapVector<const Value *, std::unique_ptr<ScopArrayInfo>>
+ ArrayInfoMapTy;
/// @brief A map to remember ScopArrayInfo objects for all base pointers.
ArrayInfoMapTy ScopArrayInfoMap;
isl_set_free(Context);
isl_set_free(AssumedContext);
- // Free the ScopArrayInfo objects.
- for (auto &ScopArrayInfoPair : arrays())
- delete ScopArrayInfoPair.second;
-
// Free the alias groups
for (MinMaxVectorTy *MinMaxAccesses : MinMaxAliasGroups) {
for (MinMaxAccessTy &MMA : *MinMaxAccesses) {
const ScopArrayInfo *
Scop::getOrCreateScopArrayInfo(Value *BasePtr, Type *AccessType,
const SmallVector<const SCEV *, 4> &Sizes) {
- const ScopArrayInfo *&SAI = ScopArrayInfoMap[BasePtr];
+ auto &SAI = ScopArrayInfoMap[BasePtr];
if (!SAI)
- SAI = new ScopArrayInfo(BasePtr, AccessType, getIslCtx(), Sizes);
- return SAI;
+ SAI.reset(new ScopArrayInfo(BasePtr, AccessType, getIslCtx(), Sizes));
+ return SAI.get();
}
const ScopArrayInfo *Scop::getScopArrayInfo(Value *BasePtr) {
const SCEV *PtrSCEV = SE->getSCEV(BasePtr);
const SCEVUnknown *PtrBaseSCEV =
cast<SCEVUnknown>(SE->getPointerBase(PtrSCEV));
- const ScopArrayInfo *SAI = ScopArrayInfoMap[PtrBaseSCEV->getValue()];
+ const ScopArrayInfo *SAI = ScopArrayInfoMap[PtrBaseSCEV->getValue()].get();
assert(SAI && "No ScopArrayInfo available for this base pointer");
return SAI;
}
void Scop::printArrayInfo(raw_ostream &OS) const {
OS << "Arrays {\n";
- for (auto Array : arrays())
+ for (auto &Array : arrays())
Array.second->print(OS);
OS.indent(4) << "}\n";