aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop-manip.c
diff options
context:
space:
mode:
authorKewen Lin <linkw@linux.ibm.com>2021-10-25 21:05:02 -0500
committerKewen Lin <linkw@linux.ibm.com>2021-10-25 21:05:02 -0500
commitf3dbd3f36d55178d0a9e4431043cbc950524969a (patch)
tree89e0233e32b3b00f3e6a1d7413ae579decb6f880 /gcc/tree-vect-loop-manip.c
parentb621508d6fa97a6fd8f528cc0614837718b54363 (diff)
downloadgcc-f3dbd3f36d55178d0a9e4431043cbc950524969a.zip
gcc-f3dbd3f36d55178d0a9e4431043cbc950524969a.tar.gz
gcc-f3dbd3f36d55178d0a9e4431043cbc950524969a.tar.bz2
vect: Don't update inits for simd_lane_access DRs [PR102789]
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.
Diffstat (limited to 'gcc/tree-vect-loop-manip.c')
-rw-r--r--gcc/tree-vect-loop-manip.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index 4988c93..378b102 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -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);
}
}