aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-patterns.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2021-07-19 13:29:16 +0200
committerRichard Biener <rguenther@suse.de>2021-07-19 14:21:42 +0200
commit8df3ee8f7d85d0708f3c3ca96b55c9230c2ae9f0 (patch)
treef00c8a35a0c22853e651aacd0b5128dadd0fd31b /gcc/tree-vect-patterns.c
parent9f2bc5077debef2b046b6c10d38591ac324ad8b5 (diff)
downloadgcc-8df3ee8f7d85d0708f3c3ca96b55c9230c2ae9f0.zip
gcc-8df3ee8f7d85d0708f3c3ca96b55c9230c2ae9f0.tar.gz
gcc-8df3ee8f7d85d0708f3c3ca96b55c9230c2ae9f0.tar.bz2
tree-optimization/101505 - properly determine stmt precision for PHIs
Loop vectorization pattern recog fails to walk PHIs when determining stmt precisions. This fails to recognize non-mask uses for bools in PHIs and outer loop vectorization. 2021-07-19 Richard Biener <rguenther@suse.de> PR tree-optimization/101505 * tree-vect-patterns.c (vect_determine_precisions): Walk PHIs also for loop vectorization. * gcc.dg/vect/pr101505.c: New testcase.
Diffstat (limited to 'gcc/tree-vect-patterns.c')
-rw-r--r--gcc/tree-vect-patterns.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index c249444..44f6c9b 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -5355,6 +5355,13 @@ vect_determine_precisions (vec_info *vinfo)
for (unsigned int i = 0; i < nbbs; i++)
{
basic_block bb = bbs[i];
+ for (auto gsi = gsi_start_phis (bb);
+ !gsi_end_p (gsi); gsi_next (&gsi))
+ {
+ stmt_vec_info stmt_info = vinfo->lookup_stmt (gsi.phi ());
+ if (stmt_info)
+ vect_determine_mask_precision (vinfo, stmt_info);
+ }
for (auto si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
if (!is_gimple_debug (gsi_stmt (si)))
vect_determine_mask_precision
@@ -5368,6 +5375,13 @@ vect_determine_precisions (vec_info *vinfo)
if (!is_gimple_debug (gsi_stmt (si)))
vect_determine_stmt_precisions
(vinfo, vinfo->lookup_stmt (gsi_stmt (si)));
+ for (auto gsi = gsi_start_phis (bb);
+ !gsi_end_p (gsi); gsi_next (&gsi))
+ {
+ stmt_vec_info stmt_info = vinfo->lookup_stmt (gsi.phi ());
+ if (stmt_info)
+ vect_determine_stmt_precisions (vinfo, stmt_info);
+ }
}
}
else