https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106888
--- Comment #10 from Jeffrey A. Law <law at gcc dot gnu.org> --- The sign_extend later gets turned into zero_extend. Presumably because we know the value is never negative. That in and of itself wouldn't be a big deal as it should be easily recognizable using any_extend. But combine steps in and scrambles the RTL in various unhelpful ways.