https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108360
--- Comment #5 from Andrew Macleod <amacleod at redhat dot com> --- The key change is that condition: _6 = f.5_5 << 4; e = _6; h_23 = (short int) _6; if (_21 == -1) goto <bb 3>; [50.00%] else goto <bb 4>; [50.00%] On the false edge, we lose the ability to determine that h_23 is [16,16], and instead, it remains [0,0][16,16].. that causes us to not be able to eliminate the branch