http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54767



--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-01-15 
10:47:36 UTC ---

Yeah, indeed.  The bug seems to be in the second vrp pass on xxx function.

iaii_23: [_79, _79]  EQUIVALENCES: { } (0 elements)

looks wrong (iaii_23 is only conditionally equal to _79 (in the first iteration

that sets iaii, i.e. ia = 2, second iteration), it can be the value from

previous cycle too (in the ia = 3, third iteration).

This then leads to

  _35 = prephitmp_50 - iaii_23;

being

_35: [0, 0]

(again, wrong) and that is why we end up with 1 instead of 2 in the second row.



There is:

Visiting PHI node: iaii_23 = PHI <iaii_1(11), prephitmp_50(10)>



    Argument #0 (11 -> 12 not executable)



    Argument #1 (10 -> 12 executable)

        prephitmp_50

        Value: [_79, _79]  EQUIVALENCES: { _79 } (1 elements)

Found new range for iaii_23: [_79, _79]



which is wrong, but not sure if this is the first spot in the dump.  iaii_1

here is only conditionally UNDEFINED, it might be iaii value from previous

iteration too.

Reply via email to