diff options
author | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2015-10-18 12:28:00 +0000 |
---|---|---|
committer | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2015-10-18 12:28:00 +0000 |
commit | 01978cfa0c1f99e59233289c0e6bd4b64ea2fe57 (patch) | |
tree | 2fc6df9b8564062b1413bec00dd65b1d824ac53e /polly/lib/Analysis/ScopDetection.cpp | |
parent | c2c154e07865cf4fe6920aed0d1e61a4cdb4d24b (diff) | |
download | bcm5719-llvm-01978cfa0c1f99e59233289c0e6bd4b64ea2fe57.tar.gz bcm5719-llvm-01978cfa0c1f99e59233289c0e6bd4b64ea2fe57.zip |
Remove independent blocks pass
Polly can now be used as a analysis only tool as long as the code
generation is disabled. However, we do not have an alternative to the
independent blocks pass in place yet, though in the relevant cases
this does not seem to impact the performance much. Nevertheless, a
virtual alternative that allows the same transformations without
changing the input region will follow shortly.
llvm-svn: 250652
Diffstat (limited to 'polly/lib/Analysis/ScopDetection.cpp')
-rw-r--r-- | polly/lib/Analysis/ScopDetection.cpp | 17 |
1 files changed, 3 insertions, 14 deletions
diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp index e69d0b98eff..f513c81e198 100644 --- a/polly/lib/Analysis/ScopDetection.cpp +++ b/polly/lib/Analysis/ScopDetection.cpp @@ -648,10 +648,7 @@ bool ScopDetection::isValidMemoryAccess(Instruction &Inst, // Check that the base address of the access is invariant in the current // region. if (!isInvariant(*BaseValue, CurRegion)) - // Verification of this property is difficult as the independent blocks - // pass may introduce aliasing that we did not have when running the - // scop detection. - return invalid<ReportVariantBasePtr>(Context, /*Assert=*/false, BaseValue, + return invalid<ReportVariantBasePtr>(Context, /*Assert=*/true, BaseValue, &Inst); AccessFunction = SE->getMinusSCEV(AccessFunction, BasePointer); @@ -684,8 +681,7 @@ bool ScopDetection::isValidMemoryAccess(Instruction &Inst, AccessFunction, &Inst, BaseValue); } - // FIXME: Alias Analysis thinks IntToPtrInst aliases with alloca instructions - // created by IndependentBlocks Pass. + // FIXME: Think about allowing IntToPtrInst if (IntToPtrInst *Inst = dyn_cast<IntToPtrInst>(BaseValue)) return invalid<ReportIntToPtr>(Context, /*Assert=*/true, Inst); @@ -699,13 +695,6 @@ bool ScopDetection::isValidMemoryAccess(Instruction &Inst, AliasSet &AS = Context.AST.getAliasSetForPointer( BaseValue, MemoryLocation::UnknownSize, AATags); - // INVALID triggers an assertion in verifying mode, if it detects that a - // SCoP was detected by SCoP detection and that this SCoP was invalidated by - // a pass that stated it would preserve the SCoPs. We disable this check as - // the independent blocks pass may create memory references which seem to - // alias, if -basicaa is not available. They actually do not, but as we can - // not proof this without -basicaa we would fail. We disable this check to - // not cause irrelevant verification failures. if (!AS.isMustAlias()) { if (PollyUseRuntimeAliasChecks) { bool CanBuildRunTimeCheck = true; @@ -731,7 +720,7 @@ bool ScopDetection::isValidMemoryAccess(Instruction &Inst, if (CanBuildRunTimeCheck) return true; } - return invalid<ReportAlias>(Context, /*Assert=*/false, &Inst, AS); + return invalid<ReportAlias>(Context, /*Assert=*/true, &Inst, AS); } return true; |