SImode and DImode moves from/to mask registers are valid only with AVX512BW,
so mark relevant alternatives in *movsi_internal and *movdi_internal as such.

Even with the patch, the testcase still fails, but now with:

pr118067.c: In function ‘foo’:
pr118067.c:13:1: internal compiler error: maximum number of generated
reload insns per insn achieved (90)
   13 | }
      | ^
0x2c3b581 internal_error(char const*, ...)
        ../../git/gcc/gcc/diagnostic-global-context.cc:517
0xb68938 lra_constraints(bool)
        ../../git/gcc/gcc/lra-constraints.cc:5411
0xb51a0d lra(_IO_FILE*, int)
        ../../git/gcc/gcc/lra.cc:2449
0xaf9f4d do_reload
        ../../git/gcc/gcc/ira.cc:5977
0xafa462 execute
        ../../git/gcc/gcc/ira.cc:6165

    PR target/118067

gcc/ChangeLog:

    * config/i386/i386.md (*movdi_internal):
    Disable alternatives from/to mask registers without AVX512BW.
    (*movsi_internal): Ditto.

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Uros.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 6edcb6dc657..11815c59c53 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -2642,12 +2642,16 @@ (define_insn "*movdi_internal"
   [(set (attr "isa")
      (cond [(eq_attr "alternative" "0,1,17,18")
              (const_string "nox64")
-           (eq_attr "alternative" "2,3,4,5,10,11,23,25")
+           (eq_attr "alternative" "2,3,4,5,10,11")
              (const_string "x64")
            (eq_attr "alternative" "19,20")
              (const_string "x64_sse2")
+           (eq_attr "alternative" "23,25")
+             (const_string "x64_avx512bw")
            (eq_attr "alternative" "21,22")
              (const_string "sse2")
+           (eq_attr "alternative" "24,26,27")
+             (const_string "avx512bw")
           ]
           (const_string "*")))
    (set (attr "type")
@@ -2870,6 +2874,8 @@ (define_insn "*movsi_internal"
   [(set (attr "isa")
      (cond [(eq_attr "alternative" "12,13")
              (const_string "sse2")
+           (eq_attr "alternative" "14,15,16,17")
+             (const_string "avx512bw")
           ]
           (const_string "*")))
    (set (attr "type")

Reply via email to