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

Richard Biener <rguenth at gcc dot gnu.org> changed:

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

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
The issue is that jump-threading duplicated a tail with equal conditions so VRP
is faced with

<bb 3>:
if (e_14(D) < -52)
  goto <bb 6>;
else
  goto <bb 14>;

# r_7 = PHI <r_20(13)>
if (e_14(D) < -52)
  goto <bb 5>;
else
  goto <bb 15>;

<bb 15>:
e_23 = ASSERT_EXPR <e_14(D), e_14(D) >= -52>;
goto <bb 7>;

<bb 14>:
e_22 = ASSERT_EXPR <e_14(D), e_14(D) >= -52>;

<bb 7>:
_1 = e_14(D) < 0;
_2 = (long int) _1;
if (e_14(D) < 0)


due to the fact that VRP does not insert PHIs for asserts (the assumption is
that we'll always merge to [-INF, +INF] I guess) we lose the fact that
e_14(D) >= -52 at the entry to BB 7.

So it's basically VRPs own stupidness.  The EVRP DOM-based algorithm should be
fine here (and I hope we can rip out the SSA propagator based VRP at some
point,
I believe I now fixed most of its short-comings, loops still need to be dealt
with though - stay tuned).

Reply via email to