aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Yukhin <kirill.yukhin@intel.com>2016-03-18 11:36:30 +0000
committerKirill Yukhin <kyukhin@gcc.gnu.org>2016-03-18 11:36:30 +0000
commit8d200fad9c7f0217c2a45e5a9666e2ca5d824442 (patch)
tree81648d7864d616f126b674ab12a56580cfd4cb11
parent5e8d6dff27050ebc334cb17293c69a8f858120ef (diff)
downloadgcc-8d200fad9c7f0217c2a45e5a9666e2ca5d824442.zip
gcc-8d200fad9c7f0217c2a45e5a9666e2ca5d824442.tar.gz
gcc-8d200fad9c7f0217c2a45e5a9666e2ca5d824442.tar.bz2
sse.md: Use vpbroadcastq for broadcasting DF values to 128b regs.
gcc/ * config/i386/sse.md: Use vpbroadcastq for broadcasting DF values to 128b regs. From-SVN: r234325
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/sse.md9
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 11a2a2d..5be50b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 3c521b3..b25c246 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -17269,7 +17269,14 @@
(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>")])