Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/polly/lib
diff options
context:
space:
mode:
authorJohannes Doerfert <doerfert@cs.uni-saarland.de>2015-05-03 19:03:01 +0300
committerJohannes Doerfert <doerfert@cs.uni-saarland.de>2015-05-03 19:03:01 +0300
commit8983031b5edd81f67504d81a7d693e5ee79baee6 (patch)
treeebb14ce28a9c76bcb689bb0df456dfa1a9a4b8f8 /polly/lib
parent1b60ed7069d37dc1b67fad867801828ae5435887 (diff)
[FIX] Invalid recognition of multidimensional access
In the lnt benchmark MultiSource/Benchmarks/MallocBench/gs/gs with scalar and PHI modeling we detected the multidimensional accesses with sizes variant in the SCoP. This will check the sizes for validity. llvm-svn: 236395
Diffstat (limited to 'polly/lib')
-rw-r--r--polly/lib/Analysis/ScopDetection.cpp7
-rw-r--r--polly/lib/Support/SCEVValidator.cpp1
2 files changed, 8 insertions, 0 deletions
diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp
index db04f0b0a88f..f7ea6c48ff27 100644
--- a/polly/lib/Analysis/ScopDetection.cpp
+++ b/polly/lib/Analysis/ScopDetection.cpp
@@ -488,6 +488,13 @@ bool ScopDetection::hasAffineMemoryAccesses(DetectionContext &Context) const {
SE->findArrayDimensions(Terms, Shape->DelinearizedSizes,
Context.ElementSize[BasePointer]);
+ if (!AllowNonAffine)
+ for (const SCEV *DelinearizedSize : Shape->DelinearizedSizes)
+ if (hasScalarDepsInsideRegion(DelinearizedSize, &CurRegion))
+ invalid<ReportNonAffineAccess>(
+ Context, /*Assert=*/true, DelinearizedSize,
+ Context.Accesses[BasePointer].front().first, BaseValue);
+
// No array shape derived.
if (Shape->DelinearizedSizes.empty()) {
if (AllowNonAffine)
diff --git a/polly/lib/Support/SCEVValidator.cpp b/polly/lib/Support/SCEVValidator.cpp
index 80c2249769a0..f1d9443f4b0e 100644
--- a/polly/lib/Support/SCEVValidator.cpp
+++ b/polly/lib/Support/SCEVValidator.cpp
@@ -559,6 +559,7 @@ std::vector<const SCEV *> getParamsInAffineExpr(const Region *R,
SCEVValidator Validator(R, SE, BaseAddress);
ValidatorResult Result = Validator.visit(Expr);
+ assert(Result.isValid() && "Requested parameters for an invalid SCEV!");
return Result.getParameters();
}