]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
vect: Don't update inits for simd_lane_access DRs [PR102789]
authorKewen Lin <linkw@linux.ibm.com>
Tue, 26 Oct 2021 02:05:02 +0000 (21:05 -0500)
committerKewen Lin <linkw@linux.ibm.com>
Tue, 26 Oct 2021 02:05:02 +0000 (21:05 -0500)
As PR102789 shows, when vectorizer does some peelings for alignment
in prologues, function vect_update_inits_of_drs would update the
inits of some drs.  But as the failed case, we shouldn't update the
dr for simd_lane_access, it has the fixed-length storage mainly for
the main loop, the update can make the access out of bound and access
the unexpected element.

gcc/ChangeLog:

PR tree-optimization/102789
* tree-vect-loop-manip.c (vect_update_inits_of_drs): Do not
update inits of simd_lane_access.

gcc/tree-vect-loop-manip.c

index 4988c93fdb61507a26430651b416ae61b217793a..378b1026baa8ec26dcaeab5bf80381bfb4b891e6 100644 (file)
@@ -1820,7 +1820,8 @@ vect_update_inits_of_drs (loop_vec_info loop_vinfo, tree niters,
   FOR_EACH_VEC_ELT (datarefs, i, dr)
     {
       dr_vec_info *dr_info = loop_vinfo->lookup_dr (dr);
-      if (!STMT_VINFO_GATHER_SCATTER_P (dr_info->stmt))
+      if (!STMT_VINFO_GATHER_SCATTER_P (dr_info->stmt)
+         && !STMT_VINFO_SIMD_LANE_ACCESS_P (dr_info->stmt))
        vect_update_init_of_dr (dr_info, niters, code);
     }
 }