https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110411

Peter Bergner <bergner at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice-on-valid-code
                 CC|                            |linkw at gcc dot gnu.org,
                   |                            |meissner at gcc dot gnu.org,
                   |                            |segher at gcc dot gnu.org
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2023-06-26
             Target|                            |powerpc*-*-*

--- Comment #1 from Peter Bergner <bergner at gcc dot gnu.org> ---
I'll note this was reported by our Linux kernel team.

The problem here is the expression we assign to src ends up looking like an
altivec and:DI memory address and that type of address is invalid for a
lxvp/stxvp instruction.  fwprop seems to be creating it:

propagating insn 7 into insn 9, replacing:
(set (reg:DI 123 [ src ])
    (and:DI (reg:DI 122)
        (reg:DI 124 [ ptr ])))
successfully matched this instruction to anddi3_mask:
(set (reg:DI 123 [ src ])
    (and:DI (reg:DI 124 [ ptr ])
        (const_int -16 [0xfffffffffffffff0])))
rescanning insn with uid = 9.
updating insn 9 in-place
verify found no changes in insn with uid = 9.

propagating insn 9 into insn 10, replacing:
(set (reg:OO 125 [ MEM <char[1:32]> [(void *)src_4] ])
    (mem:OO (reg:DI 123 [ src ]) [0 MEM <char[1:32]> [(void *)src_4]+0 S32
A128]))
successfully matched this instruction to *movoo:
(set (reg:OO 125 [ MEM <char[1:32]> [(void *)src_4] ])
    (mem:OO (and:DI (reg:DI 124 [ ptr ])
            (const_int -16 [0xfffffffffffffff0])) [0 MEM <char[1:32]> [(void
*)src_4]+0 S32 A128]))


Clearly, movoo shouldn't allow these types of addresses.

Reply via email to