https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101186
--- Comment #2 from Di Zhao <dizhao at os dot amperecomputing.com> --- (In reply to Richard Biener from comment #1) > The complication is that the a == b equivalence has to be taken into account > to relate the c < a and c >= b relations. > > Maybe the new relation code can do sth here, but confirmed on trunk. > > void g (int a, int b, int x, int y) > { > int c = y; > if (a != 0) > c = x; > while (b < 1000) > // without this loop, jump thread & VRP can remove dead code > { > if (a != 0) > { > if (c > x) > printf ("Unreachable!"); > } > > that's also a classical example for predicated value-numbering (which we > don't implement). I've implemented a patch on FRE regarding this and will send it to patches mailing list soon. Thanks