Hello,
Patch in the bottom fixes ICE caused by incosistence of modes
in andn splitter.

Bootstrapped & regtested (32/64b x86 targets).
Richard, is it ok for main trunk?

gcc/
         PR target/70406
         * config/i386/i386.md (define_split, andn): Fix modes.

gcc/testsuite/
         PR target/70406
         * gcc.target/i386/pr70406.c: New test.

--
Thanks, K

commit 465529c1aad5a92a7c0b345bf0ab809590dba896
Author: Kirill Yukhin <kirill.yuk...@intel.com>
Date:   Fri Mar 25 14:44:18 2016 +0300

    AVX-512. Align type of not epxression in the split.

diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 339a134..f324ea7 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -8315,10 +8315,10 @@
    (clobber (reg:CC FLAGS_REG))]
   "TARGET_AVX512F && !TARGET_BMI && reload_completed"
   [(set (match_dup 0)
-       (not:HI (match_dup 0)))
+       (not:SWI12 (match_dup 0)))
    (parallel [(set (match_dup 0)
-                  (and:HI (match_dup 0)
-                          (match_dup 1)))
+                  (and:SWI12 (match_dup 0)
+                             (match_dup 1)))
              (clobber (reg:CC FLAGS_REG))])])
 
 ;; Turn *anddi_1 into *andsi_1_zext if possible.
diff --git a/gcc/testsuite/gcc.target/i386/pr70406.c 
b/gcc/testsuite/gcc.target/i386/pr70406.c
new file mode 100755
index 0000000..b75a5af
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70406.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target ia32 } */
+/* { dg-options "-O -mtune=pentium2 -mavx512f" } */
+
+typedef int v4si __attribute__ ((vector_size (16)));
+
+unsigned
+foo (unsigned char i, unsigned x, v4si u, v4si v, v4si w)
+{
+  i &= (unsigned)~x;
+  v <<= w[x];
+  return i + u[x] + v[i];
+}

Reply via email to