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

Alex Coplan <acoplan at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-03-15
      Known to fail|                            |11.0
     Ever confirmed|0                           |1
                 CC|                            |ktkachov at gcc dot gnu.org,
                   |                            |sripar01 at gcc dot gnu.org
           Keywords|                            |ice-on-valid-code
             Target|arm                         |arm-eabi
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Alex Coplan <acoplan at gcc dot gnu.org> ---
The problematic insn is:

(insn 8 7 9 2 (set (reg:V4SI 119)
        (const_vector:V4SI [
                (const_int 4095 [0xfff])
                (const_int 0 [0]) repeated x3
            ])) "ice.c":3:21 2998 {*mve_movv4si}
     (nil))

We ICE in the output code for *mve_mov<mode> with which_alternative == 4. It
looks like the constraint is wrong for this alternative:

(define_insn "*mve_mov<mode>"
  [(set (match_operand:MVE_types 0 "nonimmediate_operand"
"=w,w,r,w,w,r,w,Ux,w")
        (match_operand:MVE_types 1 "general_operand"
"w,r,w,Dn,Uxi,r,Dm,w,Ul"))]

Unless I'm missing something, I don't think "Uxi" is a valid constraint.
Perhaps the "Ux" constraint was intended instead?

If the constraint really is invalid, it would be nice to catch this earlier
(ideally when the MD files are processed at build time).

Changing the constraint to Ux leads to cycling in LRA. Perhaps something went
wrong at expand time? Need to do some more debugging.

Reply via email to