https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69675

--- Comment #10 from Sebastian Pop <spop at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #9)
> Yeah, seems to be gone with ISL 0.18 here as well... (but with 0.16.1 I can
> still reproduce it).  ISL 0.18 doesn't do anything to the loop.  ISL 0.16.1
> just did some IV transforms it seems:
> 
> [scheduler] original ast:
> for (int c0 = 0; c0 <= -P_14; c0 += 1)
>   for (int c1 = 0; c1 <= 3; c1 += 1) {
>     S_5(c0, c1);
>     if (c1 <= 2)
>       S_6(c0, c1);
>   }
> 
> [scheduler] AST generated by isl:
> for (int c0 = 0; c0 <= -P_14; c0 += 1)
>   for (int c1 = 3 * c0; c1 <= 3 * c0 + 3; c1 += 1) {
>     S_5(c0, -3 * c0 + c1);

I don't know why isl started the inner loop at 3*c0:
In the end we have the identity for the array subscript: 3*c0 - 3*c0 = 0
Could be a bug in the older isl.

>     if (3 * c0 + 2 >= c1)
>       S_6(c0, -3 * c0 + c1);
>   }
> 
> and with ISL 0.18 we have
> 
> [scheduler] isl optimized schedule is identical to the original schedule.
> for (int c0 = 0; c0 <= -P_14; c0 += 1)
>   for (int c1 = 0; c1 <= 3; c1 += 1) {
>     S_5(c0, c1);
>     if (c1 <= 2)
>       S_6(c0, c1);
>   }
> 
> and eventually code generation is not happy with the changed form
> (-fgraphite-identity is fine).
> 
> Sebastian, any comment?  I think we could still for example require current
> ISL
> for GCC 6 (0.18 or maybe 0.17.1).  Or at least drop support for the current
> legacy.

I would like moving away from the older isl versions: newer isl have fewer
bugs, and people also worked on making isl faster.
Moving to a newer isl would allow to also clean up the #ifdef's from the
graphite-*.c files which will make the code easier to read.

Reply via email to