https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115576
user202729 <user202729 at protonmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |user202729 at protonmail dot com --- Comment #4 from user202729 <user202729 at protonmail dot com> --- Doing a binary search reveals that the patch that causes the issue is https://gcc.gnu.org/pipermail/gcc-patches/2023-July/623766.html . Looking at the optimization process, the working is roughly the following: Before the change, the expand pass generates code that uses (set (subreg ...)). Then the split pass splits the register that is being used in subreg into two registers, then the combine pass do "constant propagation" and simplifies the code. After the change, the expand pass generates code that uses (set reg (ior (and reg 0xffff0000) value)). Thus the split pass cannot split the register (it does not know how to deal with "and", and the combine pass is similarly stuck.