https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109287
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Actually it is closer to: unsigned f(unsigned t, unsigned b, unsigned *tt) { if (b >= 16) __builtin_unreachable(); t *= 16; t+= b; *tt = t%16; unsigned ttt = t/16; return ttt; } As we know the range of b will be [0,15] due to the loop