re PR tree-optimization/68104 (ice in vect_update_misalignment_for_peel with -O3)
authorRichard Biener <rguenther@suse.de>
Tue, 27 Oct 2015 13:48:15 +0000 (13:48 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 27 Oct 2015 13:48:15 +0000 (13:48 +0000)
2015-10-27  Richard Biener  <rguenther@suse.de>

PR tree-optimization/68104
* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Move
strided access check ...
(vect_compute_data_refs_alignment): ... here.

* gcc.dg/torture/pr68104.c: New testcase.

From-SVN: r229440

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr68104.c [new file with mode: 0644]
gcc/tree-vect-data-refs.c

index 80045dd920497d5e03010f4c9dd9373781651ae1..9659978a60815f7fc11829c55ab3fa2dddb7053f 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-27  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/68104
+       * tree-vect-data-refs.c (vect_compute_data_ref_alignment): Move
+       strided access check ...
+       (vect_compute_data_refs_alignment): ... here.
+
 2015-10-27  Daniel Jacobowitz  <dan@codesourcery.com>
            Joseph Myers  <joseph@codesourcery.com>
            Mark Shinwell  <shinwell@codesourcery.com>
index e693063b4ad62cec7abcfcf7633003488f4acdd7..bcadb0c390019f7899cc5ecfe5b2e353553c4412 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-27  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/68104
+       * gcc.dg/torture/pr68104.c: New testcase.
+
 2015-10-27  Alan Lawrence  <alan.lawrence@arm.com>
 
        * gcc.dg/vect/vect-strided-shift-1.c: New.
diff --git a/gcc/testsuite/gcc.dg/torture/pr68104.c b/gcc/testsuite/gcc.dg/torture/pr68104.c
new file mode 100644 (file)
index 0000000..5db0282
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+
+typedef struct
+{
+  char vl;
+  char weight;
+} ib_vl_arb_element_t;
+typedef struct { ib_vl_arb_element_t vl_entry[32]; } ib_vl_arb_table_t;
+typedef enum { IB_SUCCESS } ib_api_status_t;
+int a, b, d;
+char c;
+void fn1();
+ib_api_status_t fn2()
+{
+  int e = b;
+  ib_vl_arb_table_t f;
+  if (e)
+    for (a = 0; a < d; a++)
+      f.vl_entry[a].vl &= c;
+  fn1(f);
+  return IB_SUCCESS;
+}
index b3ca9d6e1b86ebe34987991330989034493771d2..51cea9ecb31fc2f1892be55de526b36aab0c1bbf 100644 (file)
@@ -629,12 +629,6 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
   /* Initialize misalignment to unknown.  */
   SET_DR_MISALIGNMENT (dr, -1);
 
-  /* Strided accesses perform only component accesses, misalignment information
-     is irrelevant for them.  */
-  if (STMT_VINFO_STRIDED_P (stmt_info)
-      && !STMT_VINFO_GROUPED_ACCESS (stmt_info))
-    return true;
-
   if (tree_fits_shwi_p (DR_STEP (dr)))
     misalign = DR_INIT (dr);
   aligned_to = DR_ALIGNED_TO (dr);
@@ -794,18 +788,27 @@ vect_compute_data_refs_alignment (vec_info *vinfo)
   unsigned int i;
 
   FOR_EACH_VEC_ELT (datarefs, i, dr)
-    if (STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (DR_STMT (dr)))
-        && !vect_compute_data_ref_alignment (dr))
-      {
-        if (is_a <bb_vec_info> (vinfo))
-          {
-            /* Mark unsupported statement as unvectorizable.  */
-            STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (DR_STMT (dr))) = false;
-            continue;
-          }
-        else
-          return false;
-      }
+    {
+      stmt_vec_info stmt_info = vinfo_for_stmt (DR_STMT (dr));
+      if (STMT_VINFO_VECTORIZABLE (stmt_info)
+         && !vect_compute_data_ref_alignment (dr))
+       {
+         /* Strided accesses perform only component accesses, misalignment
+            information is irrelevant for them.  */
+         if (STMT_VINFO_STRIDED_P (stmt_info)
+             && !STMT_VINFO_GROUPED_ACCESS (stmt_info))
+           continue;
+
+         if (is_a <bb_vec_info> (vinfo))
+           {
+             /* Mark unsupported statement as unvectorizable.  */
+             STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (DR_STMT (dr))) = false;
+             continue;
+           }
+         else
+           return false;
+       }
+    }
 
   return true;
 }