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.

Reply via email to