diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-04-11 13:37:01 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-04-11 13:37:01 +0200 |
commit | 0c0b5b658c651d4b8161790ebad8fceb27aee945 (patch) | |
tree | 9e745e9c567c8d89aa73aac363049705a21632d2 /gcc | |
parent | b85bbe3993fd023aaa42590cbc189c86a24d557c (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/i386/sse.md | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr85281.c | 15 |
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; +} |