https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109154
--- Comment #28 from Richard Biener <rguenth at gcc dot gnu.org> --- So as for what ranger should get, the testcase in comment#2 after EVRP still sees <bb 3> : _1 = (float) l_10; _2 = _1 < 0.0; zone1_17 = (int) _2; if (_1 < 0.0) goto <bb 4>; [INV] else goto <bb 5>; [INV] <bb 4> : <bb 5> : # iftmp.0_11 = PHI <zone1_17(4), 1(3)> note how zone1_17 in the PHI argument should have '1' substituted. That still is missing if you simplify and remove undefined behavior like int fasten_main_natpro_chrg_init; int fasten_main_natpro(int l) { float elcdst = 1; int zone1 = l < 0.0f, chrg_e = fasten_main_natpro_chrg_init * (zone1 ?: 1) * (l < elcdst ? 1 : 0.0f); return chrg_e; }