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
