aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIlya Enkovich <ilya.enkovich@intel.com>2016-04-13 14:00:42 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2016-04-13 14:00:42 +0000
commit75ca93ec9a9889766beae43555a4efbe73ddf52b (patch)
tree9a9049f7d65a694ea17172ff23133c4acab63fc8 /gcc
parentb88990be30c676e36843aaab71ce98639c49711d (diff)
downloadgcc-75ca93ec9a9889766beae43555a4efbe73ddf52b.zip
gcc-75ca93ec9a9889766beae43555a4efbe73ddf52b.tar.gz
gcc-75ca93ec9a9889766beae43555a4efbe73ddf52b.tar.bz2
i386.md (kunpckhi): Swap operands.
gcc/ * config/i386/i386.md (kunpckhi): Swap operands. (kunpcksi): Likewise. (kunpckdi): Likewise. * config/i386/sse.md (vec_pack_trunc_qi): Likewise. (vec_pack_trunc_<mode>): Likewise. gcc/testsuite/ * gcc.target/i386/avx512bw-kunpckdq-2.c: New test. * gcc.target/i386/avx512bw-kunpckwd-2.c: New test. * gcc.target/i386/avx512f-kunpckbw-2.c: New test. From-SVN: r234938
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.md6
-rw-r--r--gcc/config/i386/sse.md8
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512bw-kunpckdq-2.c24
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512bw-kunpckwd-2.c24
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-kunpckbw-2.c24
7 files changed, 93 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1f83398..1353a7ab 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2016-04-13 Ilya Enkovich <ilya.enkovich@intel.com>
+
+ * config/i386/i386.md (kunpckhi): Swap operands.
+ (kunpcksi): Likewise.
+ (kunpckdi): Likewise.
+ * config/i386/sse.md (vec_pack_trunc_qi): Likewise.
+ (vec_pack_trunc_<mode>): Likewise.
+
2016-04-13 Jakub Jelinek <jakub@redhat.com>
PR debug/70628
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 09da69e..56a3050 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -8907,7 +8907,7 @@
(const_int 8))
(zero_extend:HI (match_operand:QI 2 "register_operand" "k"))))]
"TARGET_AVX512F"
- "kunpckbw\t{%1, %2, %0|%0, %2, %1}"
+ "kunpckbw\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "mode" "HI")
(set_attr "type" "msklog")
(set_attr "prefix" "vex")])
@@ -8920,7 +8920,7 @@
(const_int 16))
(zero_extend:SI (match_operand:HI 2 "register_operand" "k"))))]
"TARGET_AVX512BW"
- "kunpckwd\t{%1, %2, %0|%0, %2, %1}"
+ "kunpckwd\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "mode" "SI")])
(define_insn "kunpckdi"
@@ -8931,7 +8931,7 @@
(const_int 32))
(zero_extend:DI (match_operand:SI 2 "register_operand" "k"))))]
"TARGET_AVX512BW"
- "kunpckdq\t{%1, %2, %0|%0, %2, %1}"
+ "kunpckdq\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "mode" "DI")])
;; See comment for addsi_1_zext why we do use nonimmediate_operand
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 5132955..b64457e 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -11747,16 +11747,16 @@
(define_expand "vec_pack_trunc_qi"
[(set (match_operand:HI 0 ("register_operand"))
- (ior:HI (ashift:HI (zero_extend:HI (match_operand:QI 1 ("register_operand")))
+ (ior:HI (ashift:HI (zero_extend:HI (match_operand:QI 2 ("register_operand")))
(const_int 8))
- (zero_extend:HI (match_operand:QI 2 ("register_operand")))))]
+ (zero_extend:HI (match_operand:QI 1 ("register_operand")))))]
"TARGET_AVX512F")
(define_expand "vec_pack_trunc_<mode>"
[(set (match_operand:<DOUBLEMASKMODE> 0 ("register_operand"))
- (ior:<DOUBLEMASKMODE> (ashift:<DOUBLEMASKMODE> (zero_extend:<DOUBLEMASKMODE> (match_operand:SWI24 1 ("register_operand")))
+ (ior:<DOUBLEMASKMODE> (ashift:<DOUBLEMASKMODE> (zero_extend:<DOUBLEMASKMODE> (match_operand:SWI24 2 ("register_operand")))
(match_dup 3))
- (zero_extend:<DOUBLEMASKMODE> (match_operand:SWI24 2 ("register_operand")))))]
+ (zero_extend:<DOUBLEMASKMODE> (match_operand:SWI24 1 ("register_operand")))))]
"TARGET_AVX512BW"
{
operands[3] = GEN_INT (GET_MODE_BITSIZE (<MODE>mode));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e390840..f7c477e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2016-04-13 Ilya Enkovich <ilya.enkovich@intel.com>
+
+ * gcc.target/i386/avx512bw-kunpckdq-2.c: New test.
+ * gcc.target/i386/avx512bw-kunpckwd-2.c: New test.
+ * gcc.target/i386/avx512f-kunpckbw-2.c: New test.
+
2016-04-13 Jakub Jelinek <jakub@redhat.com>
PR middle-end/70633
diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-kunpckdq-2.c b/gcc/testsuite/gcc.target/i386/avx512bw-kunpckdq-2.c
new file mode 100644
index 0000000..4fe503e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512bw-kunpckdq-2.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -mavx512bw" } */
+/* { dg-require-effective-target avx512bw } */
+
+#define AVX512BW
+
+#include "avx512f-helper.h"
+
+static __mmask64 __attribute__((noinline,noclone))
+unpack (__mmask64 arg1, __mmask64 arg2)
+{
+ __mmask64 res;
+
+ res = _mm512_kunpackd (arg1, arg2);
+
+ return res;
+}
+
+void
+TEST (void)
+{
+ if (unpack (0x07UL, 0x70UL) != 0x0700000070UL)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-kunpckwd-2.c b/gcc/testsuite/gcc.target/i386/avx512bw-kunpckwd-2.c
new file mode 100644
index 0000000..5d7f895
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512bw-kunpckwd-2.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -mavx512bw" } */
+/* { dg-require-effective-target avx512bw } */
+
+#define AVX512BW
+
+#include "avx512f-helper.h"
+
+static __mmask32 __attribute__((noinline,noclone))
+unpack (__mmask32 arg1, __mmask32 arg2)
+{
+ __mmask32 res;
+
+ res = _mm512_kunpackw (arg1, arg2);
+
+ return res;
+}
+
+void
+TEST (void)
+{
+ if (unpack (0x07, 0x70) != 0x070070)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-kunpckbw-2.c b/gcc/testsuite/gcc.target/i386/avx512f-kunpckbw-2.c
new file mode 100644
index 0000000..86580f2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512f-kunpckbw-2.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -mavx512f" } */
+/* { dg-require-effective-target avx512f } */
+
+#define AVX512F
+
+#include "avx512f-helper.h"
+
+static __mmask16 __attribute__((noinline,noclone))
+unpack (__mmask16 arg1, __mmask16 arg2)
+{
+ __mmask16 res;
+
+ res = _mm512_kunpackb (arg1, arg2);
+
+ return res;
+}
+
+void
+TEST (void)
+{
+ if (unpack (0x07, 0x70) != 0x0770)
+ __builtin_abort ();
+}