Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2016-01-13  Richard Biener  <rguent...@suse.de>

        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.

Index: gcc/tree-vect-data-refs.c
===================================================================
*** gcc/tree-vect-data-refs.c   (revision 232261)
--- gcc/tree-vect-data-refs.c   (working copy)
*************** vect_enhance_data_refs_alignment (loop_v
*** 1826,1832 ****
               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);
  
            LOOP_VINFO_UNALIGNED_DR (loop_vinfo) = dr0;
            if (npeel)
--- 1826,1841 ----
               misalignment of DR_i must be set to unknown.  */
          FOR_EACH_VEC_ELT (datarefs, i, dr)
            if (dr != dr0)
!             {
!               /* 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)
Index: gcc/testsuite/gcc.dg/torture/pr69186.c
===================================================================
*** gcc/testsuite/gcc.dg/torture/pr69186.c      (revision 0)
--- gcc/testsuite/gcc.dg/torture/pr69186.c      (working copy)
***************
*** 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;
+ }

Reply via email to