https://gcc.gnu.org/g:426e9cf512f439d3b97ee450a87f67f65c545c50

commit r15-9982-g426e9cf512f439d3b97ee450a87f67f65c545c50
Author: Haochen Jiang <haochen.ji...@intel.com>
Date:   Tue Jul 15 10:44:54 2025 +0800

    i386: Decouple AMX-AVX512 from AVX10.2 and imply AVX512F
    
    In ISE058, the AVX10.2 imply is removed from AMX-AVX512. This
    leads to re-consideration on the imply for AMX-AVX512.
    
    Since it is using zmm register and using zmm register only, we
    need to at least imply AVX512F. AVX512VL is not needed.
    
    On the other hand, if we imply AVX10.1 for AMX-AVX512, it will
    cause -mno-avx10.1 disabling AMX-AVX512. This would be a surprise
    for users.
    
    Based on the two reasons above, the patch is decoupling AMX-AVX512
    from AVX10.2 and imply AVX512F.
    
    gcc/ChangeLog:
    
            * common/config/i386/i386-common.cc
            (OPTION_MASK_ISA2_AMX_AVX512_SET): Do not set AVX10.2.
            (OPTION_MASK_ISA2_AVX10_2_UNSET): Remove AMX-AVX512 unset.
            (OPTION_MASK_ISA2_AVX512F_UNSET): Unset AMX-AVX512.
            (ix86_handle_option): Imply AVX512F for AMX-AVX512.
    
    gcc/testsuite/ChangeLog:
    
            * gcc.target/i386/amxavx512-cvtrowd2ps-2.c: Add -mavx512fp16 to
            use FP16 related intrins for convert.
            * gcc.target/i386/amxavx512-cvtrowps2bf16-2.c: Ditto.
            * gcc.target/i386/amxavx512-cvtrowps2ph-2.c: Ditto.
            * gcc.target/i386/amxavx512-movrow-2.c: Ditto.

Diff:
---
 gcc/common/config/i386/i386-common.cc                     | 13 ++++++-------
 gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c    |  2 +-
 gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c |  2 +-
 gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c   |  2 +-
 gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c        |  2 +-
 5 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/gcc/common/config/i386/i386-common.cc 
b/gcc/common/config/i386/i386-common.cc
index 4815fbc4d359..a87147c0914f 100644
--- a/gcc/common/config/i386/i386-common.cc
+++ b/gcc/common/config/i386/i386-common.cc
@@ -125,8 +125,7 @@ along with GCC; see the file COPYING3.  If not see
 #define OPTION_MASK_ISA2_AVX10_2_SET \
   (OPTION_MASK_ISA2_AVX10_1_SET | OPTION_MASK_ISA2_AVX10_2)
 #define OPTION_MASK_ISA2_AMX_AVX512_SET \
-  (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AVX10_2_SET \
-   | OPTION_MASK_ISA2_AMX_AVX512)
+  (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_AVX512)
 #define OPTION_MASK_ISA2_AMX_TF32_SET \
   (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_TF32)
 #define OPTION_MASK_ISA2_AMX_TRANSPOSE_SET \
@@ -325,8 +324,7 @@ along with GCC; see the file COPYING3.  If not see
 #define OPTION_MASK_ISA2_AVX10_1_UNSET \
   (OPTION_MASK_ISA2_AVX10_1_256 | OPTION_MASK_ISA2_AVX10_1 \
    | OPTION_MASK_ISA2_AVX10_2_UNSET)
-#define OPTION_MASK_ISA2_AVX10_2_UNSET \
-  (OPTION_MASK_ISA2_AVX10_2 | OPTION_MASK_ISA2_AMX_AVX512_UNSET)
+#define OPTION_MASK_ISA2_AVX10_2_UNSET OPTION_MASK_ISA2_AVX10_2
 #define OPTION_MASK_ISA2_AMX_AVX512_UNSET OPTION_MASK_ISA2_AMX_AVX512
 #define OPTION_MASK_ISA2_AMX_TF32_UNSET OPTION_MASK_ISA2_AMX_TF32
 #define OPTION_MASK_ISA2_AMX_TRANSPOSE_UNSET OPTION_MASK_ISA2_AMX_TRANSPOSE
@@ -375,7 +373,8 @@ along with GCC; see the file COPYING3.  If not see
 
 #define OPTION_MASK_ISA2_AVX512F_UNSET \
   (OPTION_MASK_ISA2_AVX512BW_UNSET \
-   | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET)
+   | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET \
+   | OPTION_MASK_ISA2_AMX_AVX512_UNSET)
 #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
   OPTION_MASK_ISA2_SSE_UNSET
 #define OPTION_MASK_ISA2_AVX_UNSET \
@@ -1414,8 +1413,8 @@ ix86_handle_option (struct gcc_options *opts,
        {
          opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_AVX512_SET;
          opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_AVX512_SET;
-         opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
-         opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
+         opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
+         opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
        }
       else
        {
diff --git a/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c 
b/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c
index cfd5644c5bb1..c9a2d19a726a 100644
--- a/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c
+++ b/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c
@@ -1,6 +1,6 @@
 /* { dg-do run { target { ! ia32 } } } */
 /* { dg-require-effective-target amx_avx512 } */
-/* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
+/* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
 #define AMX_AVX512
 #define DO_TEST test_amx_avx512_cvtrowd2ps
 void test_amx_avx512_cvtrowd2ps();
diff --git a/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c 
b/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c
index acd5f76c96cb..2014ec6f8111 100644
--- a/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c
+++ b/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c
@@ -1,6 +1,6 @@
 /* { dg-do run { target { ! ia32 } } } */
 /* { dg-require-effective-target amx_avx512 } */
-/* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
+/* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
 #define AMX_AVX512
 #define DO_TEST test_amx_avx512_cvtrowps2bf16
 void test_amx_avx512_cvtrowps2bf16();
diff --git a/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c 
b/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c
index 1fd28def9342..ca53ed009cf6 100644
--- a/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c
+++ b/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c
@@ -1,6 +1,6 @@
 /* { dg-do run { target { ! ia32 } } } */
 /* { dg-require-effective-target amx_avx512 } */
-/* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
+/* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
 #define AMX_AVX512
 #define DO_TEST test_amx_avx512_cvtrowps2ph
 void test_amx_avx512_cvtrowps2ph();
diff --git a/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c 
b/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c
index ea28d82507ef..b2dee1474bb9 100644
--- a/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c
+++ b/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c
@@ -1,6 +1,6 @@
 /* { dg-do run { target { ! ia32 } } } */
 /* { dg-require-effective-target amx_avx512 } */
-/* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
+/* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
 #define AMX_AVX512
 #define DO_TEST test_amx_avx512_movrow
 void test_amx_avx512_movrow();

Reply via email to