re PR tree-optimization/63563 (ICE: in vectorizable_store, at tree-vect-stmts.c:5106...
authorJakub Jelinek <jakub@redhat.com>
Tue, 21 Oct 2014 12:23:11 +0000 (14:23 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 21 Oct 2014 12:23:11 +0000 (14:23 +0200)
PR tree-optimization/63563
* tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Bail out
if either dra or drb stmts are not normal loads/stores.

* gcc.target/i386/pr63563.c: New test.

From-SVN: r216507

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr63563.c [new file with mode: 0644]
gcc/tree-vect-data-refs.c

index 87a4102038d0a3b5c3dd36393b3ac4e54ebd7d7c..98fc55232e7b0dcee5925ce1af392dd6f48fb6a0 100644 (file)
@@ -1,3 +1,9 @@
+2014-10-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/63563
+       * tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Bail out
+       if either dra or drb stmts are not normal loads/stores.
+
 2014-10-21  Ilya Tocar  <ilya.tocar@intel.com>
 
        * config/i386/i386.c (expand_vec_perm_1): Fix
index 50ac637d5d6166ec77de22240881d4e4cbe16582..979fe430f8f14b48081fd3952d481e74a18a15b2 100644 (file)
@@ -1,3 +1,8 @@
+2014-10-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/63563
+       * gcc.target/i386/pr63563.c: New test.
+
 2014-10-20  Richard Biener  <rguenther@suse.de>
 
        * gcc.dg/tree-ssa/slsr-19.c: Make robust against operand order changes.
diff --git a/gcc/testsuite/gcc.target/i386/pr63563.c b/gcc/testsuite/gcc.target/i386/pr63563.c
new file mode 100644 (file)
index 0000000..ce3e465
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR tree-optimization/63563 */
+/* { dg-do compile } */
+/* { dg-options "-O3 -mavx2" } */
+
+struct A { unsigned long a, b, c, d; } a[1024] = { { 0, 1, 2, 3 } }, b;
+
+void
+foo (void)
+{
+  int i;
+  for (i = 0; i < 1024; i++)
+    {
+      a[i].a = a[i].b = a[i].c = b.c;
+      if (a[i].d)
+       a[i].d = b.d;
+    }
+}
index e4befc0c85b05c49d2677962c295d4cd4fef4f3c..0807b95099d57a885137f58716825d6f021b7b6e 100644 (file)
@@ -2551,11 +2551,14 @@ vect_analyze_data_ref_accesses (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
             over them.  The we can just skip ahead to the next DR here.  */
 
          /* Check that the data-refs have same first location (except init)
-            and they are both either store or load (not load and store).  */
+            and they are both either store or load (not load and store,
+            not masked loads or stores).  */
          if (DR_IS_READ (dra) != DR_IS_READ (drb)
              || !operand_equal_p (DR_BASE_ADDRESS (dra),
                                   DR_BASE_ADDRESS (drb), 0)
-             || !dr_equal_offsets_p (dra, drb))
+             || !dr_equal_offsets_p (dra, drb)
+             || !gimple_assign_single_p (DR_STMT (dra))
+             || !gimple_assign_single_p (DR_STMT (drb)))
            break;
 
          /* Check that the data-refs have the same constant size and step.  */