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

Christophe Lyon <clyon at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2021-03-23
     Ever confirmed|0                           |1

--- Comment #2 from Christophe Lyon <clyon at gcc dot gnu.org> ---
Looks like a constraint problem: I kept the Um constraint as used by Neon,
while MVE needs Ux.

This patch fixes the ICE:
diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md
index 440fd6a..1351863 100644
--- a/gcc/config/arm/mve.md
+++ b/gcc/config/arm/mve.md
@@ -10858,7 +10858,7 @@ (define_insn "arm_vcx3q<a>_p_v16qi"
 )

 (define_insn "*movmisalign<mode>_mve_store"
-  [(set (match_operand:MVE_VLD_ST 0 "neon_permissive_struct_operand"       
"=Um")
+  [(set (match_operand:MVE_VLD_ST 0 "neon_permissive_struct_operand"       
"=Ux")
        (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "s_register_operand" "
w")]
         UNSPEC_MISALIGNED_ACCESS))]
   "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
@@ -10871,7 +10871,7 @@ (define_insn "*movmisalign<mode>_mve_store"

 (define_insn "*movmisalign<mode>_mve_load"
   [(set (match_operand:MVE_VLD_ST 0 "s_register_operand"                      
         "=w")
-       (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1
"neon_permissive_struct_operand" " Um")]
+       (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1
"neon_permissive_struct_operand" " Ux")]
         UNSPEC_MISALIGNED_ACCESS))]
   "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
     || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode)))

Reply via email to