aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-04-11 13:37:01 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-04-11 13:37:01 +0200
commit0c0b5b658c651d4b8161790ebad8fceb27aee945 (patch)
tree9e745e9c567c8d89aa73aac363049705a21632d2 /gcc
parentb85bbe3993fd023aaa42590cbc189c86a24d557c (diff)
downloadgcc-0c0b5b658c651d4b8161790ebad8fceb27aee945.zip
gcc-0c0b5b658c651d4b8161790ebad8fceb27aee945.tar.gz
gcc-0c0b5b658c651d4b8161790ebad8fceb27aee945.tar.bz2
re PR target/85281 (Assembler messages: Error: operand size mismatch for `vpbroadcastb' with -mavx512bw -masm=intel)
PR target/85281 * config/i386/sse.md (iptr): Add V16SFmode and V8DFmode cases. (<avx512>_vec_dup<mode><mask_name>): Use a single pattern for modes other than V2DFmode using iptr mode attribute. (<avx512>_vec_dup<mode><mask_name>): Use iptr mode attribute. * gcc.target/i386/pr85281.c: New test. From-SVN: r259316
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/sse.md8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr85281.c15
4 files changed, 31 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1b17a9e..9c86c55 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2018-04-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/85281
+ * config/i386/sse.md (iptr): Add V16SFmode and V8DFmode cases.
+ (<avx512>_vec_dup<mode><mask_name>): Use a single pattern for modes
+ other than V2DFmode using iptr mode attribute.
+ (<avx512>_vec_dup<mode><mask_name>): Use iptr mode attribute.
+
2018-04-11 Alexander Monakov <amonakov@ispras.ru>
PR rtl-optimization/84659
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index caca42d..8c970e0 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -804,6 +804,7 @@
[(V64QI "b") (V32HI "w") (V16SI "k") (V8DI "q")
(V32QI "b") (V16HI "w") (V8SI "k") (V4DI "q")
(V16QI "b") (V8HI "w") (V4SI "k") (V2DI "q")
+ (V16SF "k") (V8DF "q")
(V8SF "k") (V4DF "q")
(V4SF "k") (V2DF "q")
(SF "k") (DF "q")])
@@ -17686,10 +17687,7 @@
if (<MODE>mode == V2DFmode)
return "vpbroadcastq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}";
- if (GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) == 4)
- return "v<sseintprefix>broadcast<bcstscalarsuff>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %k1}";
- else
- return "v<sseintprefix>broadcast<bcstscalarsuff>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}";
+ return "v<sseintprefix>broadcast<bcstscalarsuff>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %<iptr>1}";
}
[(set_attr "type" "ssemov")
(set_attr "prefix" "evex")
@@ -17702,7 +17700,7 @@
(match_operand:<ssexmmmode> 1 "nonimmediate_operand" "vm")
(parallel [(const_int 0)]))))]
"TARGET_AVX512BW"
- "vpbroadcast<bcstscalarsuff>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
+ "vpbroadcast<bcstscalarsuff>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %<iptr>1}"
[(set_attr "type" "ssemov")
(set_attr "prefix" "evex")
(set_attr "mode" "<sseinsnmode>")])
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 27e92c5..8deaeb9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-04-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/85281
+ * gcc.target/i386/pr85281.c: New test.
+
2018-04-11 Alexander Monakov <amonakov@ispras.ru>
PR rtl-optimization/84659
diff --git a/gcc/testsuite/gcc.target/i386/pr85281.c b/gcc/testsuite/gcc.target/i386/pr85281.c
new file mode 100644
index 0000000..2903986
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr85281.c
@@ -0,0 +1,15 @@
+/* PR target/85281 */
+/* { dg-do assemble { target avx512bw } } */
+/* { dg-require-effective-target int128 } */
+/* { dg-require-effective-target masm_intel } */
+/* { dg-options "-O -mavx512bw -masm=intel -w" } */
+
+typedef char V __attribute__ ((__vector_size__ (64)));
+
+V
+foo (V v)
+{
+ v[8] /= (unsigned __int128) 0;
+ v[0] -= ~255;
+ return v;
+}