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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-05-24 
07:21:28 UTC ---
We have
  x_9 = *D.1724_8;
...
  x_16 = ASSERT_EXPR <x_9, x_9 != 0>;
  D.1726_10 = found_x_2 != 0;
  D.1727_11 = x_16 <= prev_x_3;
...
  # found_x_2 = PHI <0(2), 1(6)>
  # prev_x_3 = PHI <prev_x_4(D)(2), x_16(6)>
...
  loop to top

prev_x_3: ~[0, 0]  EQUIVALENCES: { x_9 } (1 elements)
prev_x_4(D): UNDEFINED
x_9: VARYING
x_16: ~[0, 0]  EQUIVALENCES: { x_9 } (1 elements)

I think the problem are the equivalences, or their handling.  When we merge on
PHI UNDEFINED with ~[0, 0] EQUIVALENCES: { x_9 } into the latter, we push the
equivalence into the next loop iteration where x_9 already can have a different
value.  I guess either we could drop all equivalences when merging UNDEFINED
with some range with EQUIVALENCES, or at least those equivalences which don't
dominate the PHI.  Richard, what do you think?

Reply via email to