https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109637
Andrew Macleod <amacleod at redhat dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amacleod at redhat dot com --- Comment #2 from Andrew Macleod <amacleod at redhat dot com> --- I think the bigger questions is why did switch conv change: 1 = s_5(D)->x; switch (_1) <default: <L5> [INV], case 1: <L1> [INV], case 2: <L2> [INV], case 3: <L3> [INV]> <bb 3> : <L1>: goto <bb 6>; [INV] <bb 4> : <L2>: goto <bb 6>; [INV] <bb 5> : <L3>: <bb 6> : # _3 = PHI <0(2), 1(3), 2(4), 3(5)> <L5>: return _3; to <bb 2> : _1 = s_5(D)->x; _6 = (unsigned char) _1; _2 = _6 + 255; if (_2 <= 2) goto <bb 4>; [INV] else goto <bb 3>; [INV] <bb 3> : <L6>: _10 = 0; goto <bb 5>; [100.00%] <bb 4> : <L7>: _8 = (unsigned int) _1; _9 = (int) _1; _7 = _9; <bb 5> : # _3 = PHI <_10(3), _7(4)> <L8>: <L5>: return _3; Why are we adding -1 to [0,3] ? Thats the root of this issue I think? seems strange