On Sun, Oct 11, 2026 at 08:24:59PM -0700, Hongtao Liu wrote:
> With this condidtion extendv16hfv16sf is valid even w/o TARGET_AVX512F.
> I suggest to change iterator VF48H_AVX512VL to (or add a new iterator)
> 
>  (define_mode_iterator VF48H_F16C
>   [(V8DF "TARGET_AVX512FP16") 
>    (V16SF "TARGET_AVX512F") 
>    (V8SF "TARGET_F16C || TARGET_AVX512VL")])

Sorry, I've missed the last line of your proposed change, changed the
conditions as you've suggested but not this one.

Here is a patch to change that, which improves code generation for
-mf16c -mavx512fp16 -mno-avx512vl.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2026-10-15  Jakub Jelinek  <[email protected]>

        PR target/121688
        * config/i386/sse.md (VF48H_AVX512VL): Change V8SF condition
        to TARGET_F16C || TARGET_AVX512VL.

        * gcc.target/i386/pr121688-avx512fp16novl.c: New test.

--- a/gcc/config/i386/sse.md    2026-10-13 22:47:56.367575793 +0200
+++ b/gcc/config/i386/sse.md    2026-10-14 13:14:18.084973077 +0200
@@ -1031,7 +1031,7 @@ (define_mode_iterator VI48F_256_512
    (V4DI "TARGET_AVX512VL") (V4DF  "TARGET_AVX512VL")])
 (define_mode_iterator VF48H_AVX512VL
   [(V8DF "TARGET_AVX512FP16") (V16SF "TARGET_AVX512F")
-   (V8SF "TARGET_AVX512VL || (TARGET_F16C && !TARGET_AVX512FP16)")])
+   (V8SF "TARGET_F16C || TARGET_AVX512VL")])
 
 (define_mode_iterator VF48_128
   [V2DF V4SF])
--- a/gcc/testsuite/gcc.target/i386/pr121688-avx512fp16novl.c   2026-10-14 
13:29:18.438824257 +0200
+++ b/gcc/testsuite/gcc.target/i386/pr121688-avx512fp16novl.c   2026-10-14 
13:30:18.536013358 +0200
@@ -0,0 +1,14 @@
+/* PR target/121688 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mf16c -mavx512fp16 -mno-avx512vl -masm=att" } */
+/* { dg-final { scan-assembler-times "\tvcvtps2ph\t\\\$4, %xmm\[0-9]\+, 
%xmm\[0-9]\+" 2 } } */
+/* { dg-final { scan-assembler-times "\tvcvtps2ph\t\\\$4, %ymm\[0-9]\+, 
%xmm\[0-9]\+" 2 } } */
+/* { dg-final { scan-assembler-not "\tvcvtps2ph\t\\\$4, %zmm\[0-9]\+, 
%ymm\[0-9]\+" } } */
+/* { dg-final { scan-assembler "\tvcvtph2ps\t%xmm\[0-9]\+, %xmm\[0-9]\+" } } */
+/* { dg-final { scan-assembler "\tvcvtph2ps\t%xmm\[0-9]\+, %ymm\[0-9]\+" } } */
+/* { dg-final { scan-assembler-not "\tvcvtph2ps\t%ymm\[0-9]\+, %zmm\[0-9]\+" } 
} */
+/* { dg-final { scan-assembler "\tvcvtph2ps\t\\\(%\[re]\[a-z0-9]\+\\\), 
%xmm\[0-9]\+" } } */
+/* { dg-final { scan-assembler "\tvcvtph2ps\t\\\(%\[re]\[a-z0-9]\+\\\), 
%ymm\[0-9]\+" } } */
+/* { dg-final { scan-assembler-not "\tvcvtph2ps\t\\\(%\[re]\[a-z0-9]\+\\\), 
%zmm\[0-9]\+" } } */
+
+#include "pr121688-f16c.c"


        Jakub

Reply via email to