https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106101
--- Comment #21 from Andreas Krebbel <krebbel at gcc dot gnu.org> --- I have committed a patch now which accepts only SUBREGs before reload and then also REGs to deal with how LRA operates right now. I've continued a bit with the patch from Comment 18. It bootstraps on s390x and x86-64. On s390x also the testsuite is clean. However, I see a few failures in the arch specific tests on x86-64. The cases I looked at so far are the result of several peepholes and splitters not being triggered anymore. I've fixed most of them I think but there are also cases where I'm not sure what to do exactly. In case of a matching constraint between a strict_low_part operand and a normal operand. Reload now (with the patch from Comment 18) would remove the subreg on the operand with the matching constraint and would leave it in for the strict_low_part operand. (insn 9 8 16 2 (parallel [ (set (strict_low_part (subreg:QI (reg/v:SI 0 ax [orig:86 a ] [86]) 0)) (and:QI (reg:QI 0 ax [orig:86 a ] [86]) (reg:SI 4 si [92]))) (clobber (reg:CC 17 flags)) ]) "/home/andreas/gcc/gcc/testsuite/gcc.target/i386/pr91188-1a.c":20:10 553 {*andqi_1_slp} (nil)) I think this should be addressed separately. Once we solved it I will adjust the s390x backend again if necessary.