https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78200
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |NEW --- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> --- if-combine is combining parts of if( (red_cost < 0 && arc->ident == 1) || (red_cost > 0 && arc->ident == 2) ) { to if (red_cost_86 < 0) goto <bb 17>; else goto <bb 18>; <bb 17>: if (_23 == 1) goto <bb 19>; else goto <bb 20>; <bb 18>: _340 = _23 == 2; _341 = red_cost_86 > 0; _338 = _340 & _341; if (_338 != 0) goto <bb 19>; else goto <bb 20>; the guard could be written as red_cost != 0 && arc->ident == 1 + (red_cost > 0) before if-combine we see red_cost_86 = _27 + _29; if (red_cost_86 < 0) goto <bb 17>; else goto <bb 18>; <bb 17>: if (_23 == 1) goto <bb 20>; else goto <bb 21>; <bb 18>: if (red_cost_86 > 0) goto <bb 19>; else goto <bb 21>; <bb 19>: if (_23 == 2) goto <bb 20>; else goto <bb 21>;