https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88775
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
So the
if (__x.7_6 < __y.8_7)
goto <bb 4>; [50.00%]
else
goto <bb 3>; [50.00%]
<bb 3> [local count: 38463891]:
if (__x.7_6 > __y.8_7)
goto <bb 4>; [50.00%]
else
goto <bb 5>; [50.00%]
fails to merge to != because at the time we run ifcombine it still looks like
_4 = _3 > "hello";
_5 = __builtin_constant_p (_4);
if (_5 != 0)
goto <bb 4>; [34.00%]
else
goto <bb 3>; [66.00%]
<bb 3> [local count: 708669605]:
__x.5_6 = (long unsigned int) "hello";
__y.6_7 = (long unsigned int) _3;
_8 = __x.5_6 < __y.6_7;
<bb 4> [local count: 1073741824]:
# _9 = PHI <_4(2), _8(3)>
if (_9 != 0)
goto <bb 8>; [50.00%]
else
goto <bb 5>; [50.00%]
<bb 5> [local count: 536870913]:
_10 = _3 < "hello";
_11 = __builtin_constant_p (_10);
if (_11 != 0)
goto <bb 7>; [34.00%]
else
goto <bb 6>; [66.00%]
<bb 6> [local count: 354334802]:
__x.5_12 = (long unsigned int) _3;
__y.6_13 = (long unsigned int) "hello";
_14 = __x.5_12 < __y.6_13;
<bb 7> [local count: 536870913]:
# _15 = PHI <_10(5), _14(6)>
if (_15 != 0)
goto <bb 8>; [50.00%]
else
goto <bb 9>; [50.00%]
but maybe that is what Jakubs patch fixes.