There is no need to set mode attribute to XImode since ix86_output_ssemov
can properly encode ymm16-ymm31 registers with and without AVX512VL.

        PR target/89229
        * config/i386/i386.md (*movoi_internal_avx): Call
        ix86_output_ssemov for TYPE_SSEMOV.  Remove ext_sse_reg_operand
        and TARGET_AVX512VL check.
---
 gcc/config/i386/i386.md | 26 ++------------------------
 1 file changed, 2 insertions(+), 24 deletions(-)

diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index b30e5a51edc..9e9b17d0913 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1925,21 +1925,7 @@ (define_insn "*movoi_internal_avx"
       return standard_sse_constant_opcode (insn, operands);
 
     case TYPE_SSEMOV:
-      if (misaligned_operand (operands[0], OImode)
-         || misaligned_operand (operands[1], OImode))
-       {
-         if (get_attr_mode (insn) == MODE_XI)
-           return "vmovdqu32\t{%1, %0|%0, %1}";
-         else
-           return "vmovdqu\t{%1, %0|%0, %1}";
-       }
-      else
-       {
-         if (get_attr_mode (insn) == MODE_XI)
-           return "vmovdqa32\t{%1, %0|%0, %1}";
-         else
-           return "vmovdqa\t{%1, %0|%0, %1}";
-       }
+      return ix86_output_ssemov (insn, operands);
 
     default:
       gcc_unreachable ();
@@ -1948,15 +1934,7 @@ (define_insn "*movoi_internal_avx"
   [(set_attr "isa" "*,avx2,*,*")
    (set_attr "type" "sselog1,sselog1,ssemov,ssemov")
    (set_attr "prefix" "vex")
-   (set (attr "mode")
-       (cond [(ior (match_operand 0 "ext_sse_reg_operand")
-                   (match_operand 1 "ext_sse_reg_operand"))
-                (const_string "XI")
-              (and (eq_attr "alternative" "1")
-                   (match_test "TARGET_AVX512VL"))
-                (const_string "XI")
-             ]
-             (const_string "OI")))])
+   (set_attr "mode" "OI")])
 
 (define_insn "*movti_internal"
   [(set (match_operand:TI 0 "nonimmediate_operand" "=!r ,o ,v,v ,v ,m,?r,?Yd")
-- 
2.24.1

Reply via email to