llvm-project/polly/test
Tobias Grosser a1689937ba Check scops a second time before working on them
In rare cases the modification of one scop can effect the validity of other
scops, as code generation of an earlier scop may make the scalar evolution
functions derived for later scops less precise. The example that triggered this
patch was a scop that contained an 'or' expression as follows:

  %add13710 = or i32 %j.19, 1
    -->  {(1 + (4 * %l)),+,2}<nsw><%for.body81>

Scev could only analyze the 'or' as it knew %j.19 is a multiple of 2. This
information was not available after the first scop was code generated (or
independent-blocks was run on it) and SCEV could not derive a precise SCEV
expression any more. This means we could not any more code generate this SCoP.
My current understanding is that there is always the risk that an earlier code
generation change invalidates later scops.  As the example we have seen here is
difficult to avoid, we use this occasion to guard us against all such
invalidations.

This patch "solves" this issue by verifying right before we start working on
a detected scop, if this scop is in fact still valid. This adds a certain
overhead. However the verification we run is anyways very fast and secondly
it is only run on detected scops. So the overhead should not be very large. As
a later optimization we could detect scops only on demand, such that we need
to run scop-detections always only a single time.

This should fix the single last failure in the LLVM test-suite for the new
scev-based code generation.

llvm-svn: 201593
2014-02-18 18:49:49 +00:00
..
Cloog Remove other unneccessary uses of -O3 in the test suite 2014-01-27 10:37:06 +00:00
CodePreparation CodePrepare: Do not require canonical induction variables for scev based mode 2013-03-20 22:41:53 +00:00
Dependences Dependences: Bound the time dependence calculation is allowed to take 2014-01-26 19:38:34 +00:00
IndependentBlocks IndependentBlocks: Do not assert for PHI nodes outside of scops 2014-01-29 23:08:10 +00:00
Isl Remove other unneccessary uses of -O3 in the test suite 2014-01-27 10:37:06 +00:00
ScheduleOptimizer ScopInfo: Correctly handle true/false conditions 2013-09-07 01:54:13 +00:00
ScopDetect ScopDetect: Transitively remove all children after region expansion 2014-01-29 19:05:30 +00:00
ScopInfo Check scops a second time before working on them 2014-02-18 18:49:49 +00:00
TempScop TempScop: Actually load Polly in this test case 2013-07-29 05:18:09 +00:00
CMakeLists.txt Integrate polly test-suite into an llvm "make check-all" if built as part of the whole using cmake. 2012-12-06 07:59:18 +00:00
Makefile rename make check target to match the naming convention followed in the other llvm projects 2013-05-17 23:04:28 +00:00
README
create_ll.sh
lit.cfg [tests] Update to use lit_config and lit package, as appropriate. 2013-08-09 21:54:36 +00:00
lit.site.cfg.in [tests] Update to use lit_config and lit package, as appropriate. 2013-08-09 21:54:36 +00:00
polly.ll

README

place tests here