summaryrefslogtreecommitdiffstats
path: root/polly/lib/Analysis/ScopInfo.cpp
diff options
context:
space:
mode:
authorTobias Grosser <tobias@grosser.es>2015-11-05 20:15:37 +0000
committerTobias Grosser <tobias@grosser.es>2015-11-05 20:15:37 +0000
commitf1bfd7522181098dc896c12f8cfc00c1fa177128 (patch)
tree3650ed1c97272faf4f567a5b28c86bffa13fa57e /polly/lib/Analysis/ScopInfo.cpp
parent6a11b039d9235c71139f36dd232c18f5f9d7b0d6 (diff)
downloadbcm5719-llvm-f1bfd7522181098dc896c12f8cfc00c1fa177128.tar.gz
bcm5719-llvm-f1bfd7522181098dc896c12f8cfc00c1fa177128.zip
ScopInfo: Allocate globally unique memory access identifiers
Before this commit memory reference identifiers have only been unique per basic block, but not per (non-affine) ScopStmt. This commit now uses the MemoryAccess base pointer to uniquely identify each Memory access. llvm-svn: 252200
Diffstat (limited to 'polly/lib/Analysis/ScopInfo.cpp')
-rw-r--r--polly/lib/Analysis/ScopInfo.cpp19
1 files changed, 9 insertions, 10 deletions
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp
index c889a098dc8..16ada559c8c 100644
--- a/polly/lib/Analysis/ScopInfo.cpp
+++ b/polly/lib/Analysis/ScopInfo.cpp
@@ -641,17 +641,21 @@ void MemoryAccess::buildAccessRelation(const ScopArrayInfo *SAI) {
}
MemoryAccess::MemoryAccess(ScopStmt *Stmt, Instruction *AccessInst,
- __isl_take isl_id *Id, AccessType Type,
- Value *BaseAddress, unsigned ElemBytes, bool Affine,
+ AccessType Type, Value *BaseAddress,
+ unsigned ElemBytes, bool Affine,
ArrayRef<const SCEV *> Subscripts,
ArrayRef<const SCEV *> Sizes, Value *AccessValue,
AccessOrigin Origin, StringRef BaseName)
- : Id(Id), Origin(Origin), AccType(Type), RedType(RT_NONE), Statement(Stmt),
+ : Origin(Origin), AccType(Type), RedType(RT_NONE), Statement(Stmt),
BaseAddr(BaseAddress), BaseName(BaseName), ElemBytes(ElemBytes),
Sizes(Sizes.begin(), Sizes.end()), AccessInstruction(AccessInst),
AccessValue(AccessValue), IsAffine(Affine),
Subscripts(Subscripts.begin(), Subscripts.end()), AccessRelation(nullptr),
- NewAccessRelation(nullptr) {}
+ NewAccessRelation(nullptr) {
+
+ std::string IdName = "__polly_array_ref";
+ Id = isl_id_alloc(Stmt->getParent()->getIslCtx(), IdName.c_str(), this);
+}
void MemoryAccess::realignParams() {
isl_space *ParamSpace = Statement->getParent()->getParamSpace();
@@ -3636,20 +3640,15 @@ void ScopInfo::addMemoryAccess(BasicBlock *BB, Instruction *Inst,
return;
AccFuncSetType &AccList = AccFuncMap[BB];
- size_t Identifier = AccList.size();
-
Value *BaseAddr = BaseAddress;
std::string BaseName = getIslCompatibleName("MemRef_", BaseAddr, "");
- std::string IdName = "__polly_array_ref_" + std::to_string(Identifier);
- isl_id *Id = isl_id_alloc(ctx, IdName.c_str(), nullptr);
-
bool isApproximated =
Stmt->isRegionStmt() && (Stmt->getRegion()->getEntry() != BB);
if (isApproximated && Type == MemoryAccess::MUST_WRITE)
Type = MemoryAccess::MAY_WRITE;
- AccList.emplace_back(Stmt, Inst, Id, Type, BaseAddress, ElemBytes, Affine,
+ AccList.emplace_back(Stmt, Inst, Type, BaseAddress, ElemBytes, Affine,
Subscripts, Sizes, AccessValue, Origin, BaseName);
Stmt->addAccess(&AccList.back());
}
OpenPOWER on IntegriCloud