diff options
author | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2015-05-03 19:03:01 +0300 |
---|---|---|
committer | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2015-05-03 19:03:01 +0300 |
commit | 8983031b5edd81f67504d81a7d693e5ee79baee6 (patch) | |
tree | ebb14ce28a9c76bcb689bb0df456dfa1a9a4b8f8 /polly/lib | |
parent | 1b60ed7069d37dc1b67fad867801828ae5435887 (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.cpp | 7 | ||||
-rw-r--r-- | polly/lib/Support/SCEVValidator.cpp | 1 |
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(); } |