This is an archive of the discontinued LLVM Phabricator instance.

Allow to model non-affine control flow in a SCoP.
AbandonedPublic

Authored by jdoerfert on Feb 19 2015, 10:15 AM.

Details

Summary
In order to model non-affine control flow SCoP statements can now
represent a basic block (precise/affine case) or a whole region
(non-affine case). In the latter all write accesses except the ones in
the region entry and exit will be may-write accesses as we cannot be
certain they are executed.

As there is no real difference non-affine branches as well as floating
point branches are covered (and both called non-affine control flow).
Furthermore, conditionals as wells as loops with non-affine control
flow can be overapproximated.

Diff Detail

Event Timeline

jdoerfert updated this revision to Diff 20314.Feb 19 2015, 10:15 AM
jdoerfert retitled this revision from to Allow to model non-affine control flow in a SCoP..
jdoerfert updated this object.
jdoerfert added subscribers: Restricted Project, Unknown Object (MLST).
sebpop edited edge metadata.Feb 19 2015, 3:05 PM

I like the patch: let's wait for comments from Tobi before committing.

include/polly/ScopInfo.h
466

s/modelt/modeled/

test/ScopInfo/non-affine-loop-condition.ll
6

if C[0] is non null, then the inner while loop is infinite unless there is some aliasing A == C.
I think in this particular case we can say something about the number of elements of A and C we are accessing, because we can compute the access function A[i] and C[i].

Would we say that all the elements of arrays A and C are accessed if we cannot compute their access functions?

jdoerfert added inline comments.Feb 19 2015, 3:17 PM
test/ScopInfo/non-affine-loop-condition.ll
6

This was a bad example I will change the body to C[i]-- to make it more realistic.

jdoerfert planned changes to this revision.Feb 23 2015, 6:53 AM

I will split this patch.

jdoerfert abandoned this revision.Feb 23 2015, 6:53 AM