https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127720
--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> --- Comment on attachment 65752 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=65752 gcc17-pr127720.patch >2026-10-05 Jakub Jelinek <[email protected]> > > PR target/127720 > * config/i386/i386.md (extendhfdf2): Enable also for > TARGET_F16C || TARGET_AVX512VL, in those cases expand as > extendhfsf2 followed by extendsfdf2. > > * gcc.target/i386/f16c-pr127720.c: New test. > * gcc.target/i386/avx512vl-pr127720.c: New test. OK with a couple of trivial adjustments in testcases. > >--- a/gcc/config/i386/i386.md 2026-10-05 09:40:23.607071678 +0200 >+++ b/gcc/config/i386/i386.md 2026-10-05 09:59:20.199379797 +0200 >@@ -5577,7 +5577,16 @@ (define_expand "extendhfdf2" > [(set (match_operand:DF 0 "register_operand") > (float_extend:DF > (match_operand:HF 1 "nonimmediate_operand")))] >- "TARGET_AVX512FP16") >+ "TARGET_AVX512FP16 || TARGET_F16C || TARGET_AVX512VL" >+{ >+ if (!TARGET_AVX512FP16) >+ { >+ rtx tmp = gen_reg_rtx (SFmode); >+ emit_insn (gen_extendhfsf2 (tmp, operands[1])); >+ emit_insn (gen_extendsfdf2 (operands[0], tmp)); >+ DONE; >+ } >+}) > > (define_insn "*extendhf<mode>2" > [(set (match_operand:MODEF 0 "register_operand" "=v") >--- a/gcc/testsuite/gcc.target/i386/f16c-pr127720.c 2026-10-05 >10:17:14.228623830 +0200 >+++ b/gcc/testsuite/gcc.target/i386/f16c-pr127720.c 2026-10-05 >10:16:46.764000655 +0200 Please rename the file to pr127720-f16c.c. >@@ -0,0 +1,11 @@ >+/* PR target/127720 */ >+/* { dg-do compile } */ >+/* { dg-options "-O2 -mno-avx512f -mf16c" } */ >+/* { dg-final { scan-assembler "\tvcvtph2ps\t" } } */ >+/* { dg-final { scan-assembler "\tvcvtss2sd\t" { target { ! ia32 } } } } */ Please add -mfpmath=sse to dg-options to emit both insns for 64-bit and 32-bit targets. >+ >+double >+foo (_Float16 x) >+{ >+ return x; >+} >--- a/gcc/testsuite/gcc.target/i386/avx512vl-pr127720.c 2026-10-05 >10:17:29.811410031 +0200 >+++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr127720.c 2026-10-05 >10:17:54.287074209 +0200 ... and this one to pr127720-avx512vl.c. >@@ -0,0 +1,11 @@ >+/* PR target/127720 */ >+/* { dg-do compile } */ >+/* { dg-options "-O2 -mno-f16c -mavx512vl -mno-avx512fp16" } */ >+/* { dg-final { scan-assembler "\tvcvtph2ps\t" } } */ >+/* { dg-final { scan-assembler "\tvcvtss2sd\t" { target { ! ia32 } } } } */ ... also here. >+ >+double >+foo (_Float16 x) >+{ >+ return x; >+}
