https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92645
--- Comment #23 from Richard Biener <rguenth at gcc dot gnu.org> --- So the issue is we're both not doing enough and too much, the half way early optimizations do confuse us later. Another such opportunity would maybe be: short unsigned int _950; _950 = BIT_FIELD_REF <_58, 16, 240>; _253 = (unsigned char) _950; where this is the only use of _950. It might be tempting to "optimize" this into _253 = BIT_FIELD_REF <_58, 8, 240>; forwprop does similar transforms for loads of complex and vector (though the above is not a load but the transform would extend to loads as well).