https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100080
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I am thinking we should mark this as won't fix. In VRP2 we have: <bb 4> [local count: 105119324]: _7 = l_20(D) | 1; _8 = (unsigned int) _7; if (_8 <= 1) goto <bb 6>; [41.00%] else goto <bb 13>; [59.00%] ... 4->6 (T) _7 : [irange] int [0, 1] MASK 0x1 VALUE 0x0 4->6 (T) _8 : [irange] unsigned int [0, 1] 4->6 (T) l_20(D) : [irange] UNDEFINED ... =========== BB 6 ============ Imports: l_20(D) Exports: _5 l_20(D) _5 : l_20(D)(I) _7 [irange] int [0, 1] MASK 0x1 VALUE 0x0 l_20(D) [irange] UNDEFINED <bb 6> [local count: 43098922]: _5 = (unsigned int) l_20(D); b = _7; if (_5 > 1) goto <bb 14>; [37.49%] else goto <bb 15>; [62.51%] We techincally could have [0,1] as the range for l_20(D) on the edge 4->6 And then that if goes away.