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?