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

--- Comment #3 from Andrew Macleod <amacleod at redhat dot com> ---
The original revision listed, I narrowed down to a single instance where the
new code did something that makes a difference
we determine that in stmt
  stmt _8 = (int) i_10;
which originally had a range of int [0, 0][8, 8] MASK 0x8 VALUE 0x0,
the new code allows it to determine that the result is actually now int [0, 0],
which allows stmt_8 to be propagated as "0" now.. and thus dead. 
It was also dead before, but stayed around for a fe wpasses because it wasnt a
constant, so wasn't put in the "let VRP kill this stmt because it was fully
propagated as a constant" list.

The only difference in the IL as a result is the block which contained that
stmt has a phi:
>   <bb 26> :
>   # k_14 = PHI <k_15(10), k_13(25)>
>   _8 = (int) i_10;
and with the current trunk, we remove that block, which causes the fallthru
block to have an extra incoming edge:

<   # i_10 = PHI <0(4), 8(25), 8(10), 0(3)>
<   # k_15 = PHI <0(4), k_13(25), k_15(10), 0(3)>
---
>   # i_10 = PHI <0(4), 8(26), 0(3)>
>   # k_15 = PHI <0(4), k_14(26), 0(3)>


That is literally the only difference coming out of EVRP, so perhaps the extra
edge coming into the block is causing some threading issues?

Reply via email to