]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add missing expander for vector float_extend and float_truncate.
authorliuhongt <hongtao.liu@intel.com>
Sat, 23 May 2020 07:30:58 +0000 (15:30 +0800)
committerliuhongt <hongtao.liu@intel.com>
Mon, 25 May 2020 01:57:04 +0000 (09:57 +0800)
2020-05-25  Hongtao Liu  <hongtao.liu@intel.com>

gcc/ChangeLog
PR target/95125
* config/i386/sse.md (sf2dfmode_lower): New mode attribute.
(trunc<mode><sf2dfmode_lower>2) New expander.
(extend<sf2dfmode_lower><mode>2): Ditto.

gcc/testsuite/ChangeLog
* gcc.target/i386/pr95125-avx.c: New test.
* gcc.target/i386/pr95125-avx512f.c: Ditto.

gcc/ChangeLog
gcc/config/i386/sse.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr95125-avx.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr95125-avx512f.c [new file with mode: 0644]

index ede1f15eb7a1786f57452ff9b1015f7cddd9571d..1a808b710e76bbaa24b13c9438c5fe1ebdcf1583 100644 (file)
@@ -1,3 +1,10 @@
+2020-05-25  Hongtao Liu  <hongtao.liu@intel.com>
+
+       PR target/95125
+       * config/i386/sse.md (sf2dfmode_lower): New mode attribute.
+       (trunc<mode><sf2dfmode_lower>2) New expander.
+       (extend<sf2dfmode_lower><mode>2): Ditto.
+
 2020-05-23 Iain Sandoe <iain@sandoe.co.uk>
 
        * config/darwin.h (ASM_GENERATE_INTERNAL_LABEL): Make
index bb8ee19b64bc4141c44ca9a14a559d5f479ca475..cee2b2890a5d396ce66a22c1f23a85e6b9548d6b 100644 (file)
 ;; For <sse2_avx_avx512f>_cvtps2pd<avxsizesuffix> insn pattern
 (define_mode_attr sf2dfmode
   [(V8DF "V8SF") (V4DF "V4SF")])
+(define_mode_attr sf2dfmode_lower
+  [(V8DF "v8sf") (V4DF "v4sf")])
+
+(define_expand "trunc<mode><sf2dfmode_lower>2"
+  [(set (match_operand:<sf2dfmode> 0 "register_operand")
+       (float_truncate:<sf2dfmode>
+         (match_operand:VF2_512_256 1 "vector_operand")))]
+  "TARGET_AVX")
+
+(define_expand "extend<sf2dfmode_lower><mode>2"
+  [(set (match_operand:VF2_512_256 0 "register_operand")
+       (float_extend:VF2_512_256
+         (match_operand:<sf2dfmode> 1 "vector_operand")))]
+  "TARGET_AVX")
 
 (define_insn "<sse2_avx_avx512f>_cvtps2pd<avxsizesuffix><mask_name><round_saeonly_name>"
   [(set (match_operand:VF2_512_256 0 "register_operand" "=v")
index 2710d2ee49002d06152380fa4e29667ead2f8a23..f12bc694d49686923ccf5eea702a2b9a3dae6e21 100644 (file)
@@ -1,3 +1,8 @@
+2020-05-25  Hongtao Liu  <hongtao.liu@intel.com>
+
+       * gcc.target/i386/pr95125-avx.c: New test.
+       * gcc.target/i386/pr95125-avx512f.c: Ditto.
+
 2020-05-24  Harald Anlauf  <anlauf@gmx.de>
 
        PR fortran/95106
diff --git a/gcc/testsuite/gcc.target/i386/pr95125-avx.c b/gcc/testsuite/gcc.target/i386/pr95125-avx.c
new file mode 100644 (file)
index 0000000..3cd1a08
--- /dev/null
@@ -0,0 +1,27 @@
+/* PR target/92125 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize -mavx" } */
+
+extern float f[4];
+extern double d[4];
+
+void
+float_truncate_256 (void)
+{
+  f[0] = d[0];
+  f[1] = d[1];
+  f[2] = d[2];
+  f[3] = d[3];
+}
+
+void
+float_extend_256 (void)
+{
+  d[0] = f[0];
+  d[1] = f[1];
+  d[2] = f[2];
+  d[3] = f[3];
+}
+
+/* { dg-final { scan-assembler-times "vcvtps2pd" 1 } } */
+/* { dg-final { scan-assembler-times "vcvtpd2ps" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr95125-avx512f.c b/gcc/testsuite/gcc.target/i386/pr95125-avx512f.c
new file mode 100644 (file)
index 0000000..109278c
--- /dev/null
@@ -0,0 +1,37 @@
+/* PR target/95125 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize -mavx512f -mprefer-vector-width=512 " } */
+
+extern float f[8];
+extern double d[8];
+
+void
+float_truncate_512 (void)
+{
+  f[0] = d[0];
+  f[1] = d[1];
+  f[2] = d[2];
+  f[3] = d[3];
+  f[4] = d[4];
+  f[5] = d[5];
+  f[6] = d[6];
+  f[7] = d[7];
+}
+
+void
+float_extend_512 (void)
+{
+  d[0] = f[0];
+  d[1] = f[1];
+  d[2] = f[2];
+  d[3] = f[3];
+  d[4] = f[4];
+  d[5] = f[5];
+  d[6] = f[6];
+  d[7] = f[7];
+}
+
+
+
+/* { dg-final { scan-assembler-times "vcvtps2pd" 1 } } */
+/* { dg-final { scan-assembler-times "vcvtpd2ps" 1 } } */