]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2016-01-13 Richard Biener <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Jan 2016 08:26:45 +0000 (08:26 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Jan 2016 08:26:45 +0000 (08:26 +0000)
PR tree-optimization/69186
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
Properly guard vect_update_misalignment_for_peel call.

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

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232314 138bc75d-0d04-0410-961f-82ee72b054a4

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

index f8f818bfb5d0be15969ce01242dce52134dc5d95..cb2ec45280a2b45b10b45aca82edc086f9d7a8cb 100644 (file)
@@ -1,3 +1,9 @@
+2016-01-13  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/69186
+       * tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
+       Properly guard vect_update_misalignment_for_peel call.
+
 2016-01-12  Jeff Law  <law@redhat.com>
 
        PR tree-optimization/pr67755
index 240fae713e41c0e7237a7bee24ebc13841224c5a..0ce47d49ea73795b5af54b9e9b3d7a3946789f5a 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-13  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/69186
+       * gcc.dg/torture/pr69186.c: New testcase.
+
 2016-01-13  Jeff Law  <law@redhat.com>
 
        PR tree-optimization/67755
diff --git a/gcc/testsuite/gcc.dg/torture/pr69186.c b/gcc/testsuite/gcc.dg/torture/pr69186.c
new file mode 100644 (file)
index 0000000..d897ff6
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+
+static int a[10][2];
+int b;
+
+void
+fn1 ()
+{
+  b = 0;
+  for (; b < 6; b++)
+    a[b][2] ^= 1;
+}
index d0e20da04a62cafda9d9c2dda2e96479ef6a2ffc..3605fa4a7a4cbeb80388bdb7d8b35d6959138ea1 100644 (file)
@@ -1826,7 +1826,16 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
              misalignment of DR_i must be set to unknown.  */
          FOR_EACH_VEC_ELT (datarefs, i, dr)
            if (dr != dr0)
-             vect_update_misalignment_for_peel (dr, dr0, npeel);
+             {
+               /* Strided accesses perform only component accesses, alignment
+                  is irrelevant for them.  */
+               stmt_info = vinfo_for_stmt (DR_STMT (dr));
+               if (STMT_VINFO_STRIDED_P (stmt_info)
+                   && !STMT_VINFO_GROUPED_ACCESS (stmt_info))
+                 continue;
+
+               vect_update_misalignment_for_peel (dr, dr0, npeel);
+             }
 
           LOOP_VINFO_UNALIGNED_DR (loop_vinfo) = dr0;
           if (npeel)