diff options
author | Kirill Yukhin <kirill.yukhin@intel.com> | 2015-12-07 11:05:40 +0000 |
---|---|---|
committer | Kirill Yukhin <kyukhin@gcc.gnu.org> | 2015-12-07 11:05:40 +0000 |
commit | fc2e8e423f34f2163b0e3b49b4f37c77b5ead922 (patch) | |
tree | ea093adddeb59ed3a2a8f67cac85c2f06e0dd394 | |
parent | 1bf2ca0b75a3b6ce72ab4065dbc10b7f80413d4b (diff) | |
download | gcc-fc2e8e423f34f2163b0e3b49b4f37c77b5ead922.zip gcc-fc2e8e423f34f2163b0e3b49b4f37c77b5ead922.tar.gz gcc-fc2e8e423f34f2163b0e3b49b4f37c77b5ead922.tar.bz2 |
re PR target/68633 ([i386, AVX-512] Spec2006/434.zeus miscompares when executed on KNL)
PR target/68633
gcc/
* config/i386/sse.md (define_insn "kunpckhi"): Fix operands order.
(define_insn "kunpcksi"): Ditto.
(define_insn "kunpckdi"): Ditto.
gcc/testsuite
* gcc.target/i386/pr68633.c: New test.
From-SVN: r231359
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr68633.c | 24 |
4 files changed, 39 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index be75620..2c7c823 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-12-07 Kirill Yukhin <kirill.yukhin@intel.com> + + PR target/68633 + * config/i386/sse.md (define_insn "kunpckhi"): Fix operands order. + (define_insn "kunpcksi"): Ditto. + (define_insn "kunpckdi"): Ditto. + 2015-12-06 Kaz Kojima <kkojima@gcc.gnu.org> * config/sh/sh.md (rsqrtsf2): Adjust for canonical form with unspec. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index fd0a706..49b2216 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -8803,7 +8803,7 @@ (const_int 8)) (zero_extend:HI (match_operand:QI 2 "register_operand" "k"))))] "TARGET_AVX512F" - "kunpckbw\t{%2, %1, %0|%0, %1, %2}" + "kunpckbw\t{%1, %2, %0|%0, %2, %1}" [(set_attr "mode" "HI") (set_attr "type" "msklog") (set_attr "prefix" "vex")]) @@ -8816,7 +8816,7 @@ (const_int 16)) (zero_extend:SI (match_operand:HI 2 "register_operand" "k"))))] "TARGET_AVX512BW" - "kunpckwd\t{%2, %1, %0|%0, %1, %2}" + "kunpckwd\t{%1, %2, %0|%0, %2, %1}" [(set_attr "mode" "SI")]) (define_insn "kunpckdi" @@ -8827,7 +8827,7 @@ (const_int 32)) (zero_extend:DI (match_operand:SI 2 "register_operand" "k"))))] "TARGET_AVX512BW" - "kunpckdq\t{%2, %1, %0|%0, %1, %2}" + "kunpckdq\t{%1, %2, %0|%0, %2, %1}" [(set_attr "mode" "DI")]) ;; See comment for addsi_1_zext why we do use nonimmediate_operand diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 682272f..583baa9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-12-07 Kirill Yukhin <kirill.yukhin@intel.com> + + PR target/68633 + * gcc.target/i386/pr68633.c: New test. + 2015-12-06 Victoria Stepanyan <victoria.stepanyan@amd.com> * gcc.target/i386/clzero.c: New. diff --git a/gcc/testsuite/gcc.target/i386/pr68633.c b/gcc/testsuite/gcc.target/i386/pr68633.c new file mode 100644 index 0000000..d7f513d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr68633.c @@ -0,0 +1,24 @@ +/* { dg-do run } */ +/* { dg-options "-Ofast -mavx512f" } */ +/* { dg-require-effective-target avx512f } */ + +#include <immintrin.h> + +#define AVX512F + +#include "avx512f-helper.h" + +void abort (); + +void +TEST () +{ + __mmask16 k1, k2, k3; + + __asm__( "kmovw %1, %0" : "=k" (k1) : "r" (1) ); + __asm__( "kmovw %1, %0" : "=k" (k2) : "r" (2) ); + + k3 = _mm512_kunpackb (k1, k2); + if (k3 != 0x201) + abort (); +} |