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

--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
The main issue is that the PHI merging i and i = baz () has both edges
executable.

Visiting statement:
if (i_22 < 0)

Visiting conditional with predicate: if (i_22 < 0)

With known ranges
        i_22: [j_12(D), j_12(D)]  EQUIVALENCES: { i_9(D) j_12(D) i_24 i_26 } (4
elements)

Predicate evaluates to: DON'T KNOW

but

Found new range for i_24: [10, 30]

so it's the old issue of not being able to use equivalences during iteration.
Quote:

  /* Compute the value of the predicate COND by checking the known
     ranges of each of its operands.

     Note that we cannot evaluate all the equivalent ranges here
     because those ranges may not yet be final and with the current
     propagation strategy, we cannot determine when the value ranges
     of the names in the equivalence set have changed.
...

we have a similar issue for match-and-simplify valueization where we now
conveniently track and update whether stmts are going to be simulated
again.

Reply via email to