Refine HImode movement for "v" to "v".
authorliuhongt <hongtao.liu@intel.com>
Fri, 18 Mar 2022 08:11:04 +0000 (16:11 +0800)
committerliuhongt <hongtao.liu@intel.com>
Fri, 18 Mar 2022 12:01:17 +0000 (20:01 +0800)
Set attr from HImode to HFmode which uses vmovsh instead of vmovw for
movment between sse registers.

gcc/ChangeLog:

PR target/104974
* config/i386/i386.md (*movhi_internal): Set attr type from HI
to HF for alternative 12 under TARGET_AVX512FP16.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr104974.c: New test.

gcc/config/i386/i386.md
gcc/testsuite/gcc.target/i386/pr104974.c [new file with mode: 0644]

index 5b44c65..02f298c 100644 (file)
                    (const_string "TI"))
            (eq_attr "alternative" "12")
              (cond [(match_test "TARGET_AVX512FP16")
-                      (const_string "HI")
+                      (const_string "HF")
                     (match_test "TARGET_AVX")
                       (const_string "TI")
                     (ior (not (match_test "TARGET_SSE2"))
diff --git a/gcc/testsuite/gcc.target/i386/pr104974.c b/gcc/testsuite/gcc.target/i386/pr104974.c
new file mode 100644 (file)
index 0000000..d1f2b1a
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do assemble { target avx512fp16 } } */
+/* { dg-options "-mavx512fp16 -O2" } */
+
+short
+foo (short a)
+{
+  register short b __asm ("%xmm1") = a;
+  asm volatile ("": "+v" (b));
+  register short c __asm ("%xmm2") = b;
+  asm volatile ("": "+v" (c));
+  return a;
+}