https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109637
--- Comment #3 from Andrew Macleod <amacleod at redhat dot com> --- Just to add: 040.evrp: _2 : [irange] int [0, 3] NONZERO 0x3 _3 : [irange] int [0, 3] NONZERO 0x3 <bb 2> : _1 = s_5(D)->x; _2 = (int) _1; switch (_1) <default: <L5> [INV], case 1: <L1> [INV], case 2: <L2> [INV], case 3: <L3> [INV]> we know the range of _2 is [0, 3].. wonder why we don't know that about _1... having a look