sse.md: Use vpbroadcastq for broadcasting DF values to 128b regs.
authorKirill Yukhin <kirill.yukhin@intel.com>
Fri, 18 Mar 2016 11:36:30 +0000 (11:36 +0000)
committerKirill Yukhin <kyukhin@gcc.gnu.org>
Fri, 18 Mar 2016 11:36:30 +0000 (11:36 +0000)
gcc/
        * config/i386/sse.md: Use vpbroadcastq for broadcasting DF
        values to 128b regs.

From-SVN: r234325

gcc/ChangeLog
gcc/config/i386/sse.md

index 11a2a2d07dd0d499fbaf9af7298c829763d67025..5be50b76802c271cb1751fccda06149a2b964238 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-18  Kirill Yukhin  <kirill.yukhin@intel.com>
+
+        * config/i386/sse.md: Use vpbroadcastq for broadcasting DF
+        values to 128b regs.
+
 2016-03-18  Ilya Enkovich  <enkovich.gnu@gmail.com>
 
        PR tree-optimization/70252
index 3c521b367f95699e4bca6429501cb48625114938..b25c2465ebf784b92423be682eb30aef914f0dd5 100644 (file)
            (match_operand:<ssexmmmode> 1 "nonimmediate_operand" "vm")
            (parallel [(const_int 0)]))))]
   "TARGET_AVX512F"
-  "v<sseintprefix>broadcast<bcstscalarsuff>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
+{
+  /*  There is no DF broadcast (in AVX-512*) to 128b register.
+      Mimic it with integer variant.  */
+  if (<MODE>mode == V2DFmode)
+    return "vpbroadcastq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}";
+  else
+    return "v<sseintprefix>broadcast<bcstscalarsuff>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}";
+}
   [(set_attr "type" "ssemov")
    (set_attr "prefix" "evex")
    (set_attr "mode" "<sseinsnmode>")])