https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67830
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW CC| |law at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- _7 = (int) _5; _10 = (int) d.2_9; f_11 = _10 - _7; _12 = f_11 & -2; with _5 and d.2_9 being of type unsigned char is transformed to _15 = d.2_9 - _5; _16 = _15 & 254; _12 = (int) _16; with _16 being unsigned char. That looks wrong as it changes a sign-extended subtraction result to a zero-extended one. CCing Jeff who added that pattern.