aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-09-18 09:00:12 +0200
committerRichard Biener <rguenther@suse.de>2020-09-18 09:00:12 +0200
commit080ddd8a81ea39e92542fa7d7e2d7d27ee741710 (patch)
tree8dddb8e96b9d43976c0bedac97b4014d489fa7ad
parentf627125855075f7ffde74e48481ee961f0bc4c7b (diff)
downloadgcc-080ddd8a81ea39e92542fa7d7e2d7d27ee741710.zip
gcc-080ddd8a81ea39e92542fa7d7e2d7d27ee741710.tar.gz
gcc-080ddd8a81ea39e92542fa7d7e2d7d27ee741710.tar.bz2
tree-optimization/97098 - fix compile-time hog in SLP live
This fixes a missed early-out in SLP live stmt marking when all scalar stmts were already visited (oops). 2020-09-18 Richard Biener <rguenther@suse.de> PR tree-optimization/97098 * tree-vect-slp.c (vect_bb_slp_mark_live_stmts): Do not recurse to children when all stmts were already visited.
-rw-r--r--gcc/tree-vect-slp.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index ecce7a9..ef62c2d 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -3018,11 +3018,13 @@ vect_bb_slp_mark_live_stmts (bb_vec_info bb_vinfo, slp_tree node,
unsigned i;
stmt_vec_info stmt_info;
stmt_vec_info last_stmt = vect_find_last_scalar_stmt_in_slp (node);
+ bool all_visited = true;
FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, stmt_info)
{
stmt_vec_info orig_stmt_info = vect_orig_stmt (stmt_info);
if (svisited.contains (orig_stmt_info))
continue;
+ all_visited = false;
bool mark_visited = true;
gimple *orig_stmt = orig_stmt_info->stmt;
ssa_op_iter op_iter;
@@ -3091,6 +3093,8 @@ vect_bb_slp_mark_live_stmts (bb_vec_info bb_vinfo, slp_tree node,
if (mark_visited)
svisited.add (orig_stmt_info);
}
+ if (all_visited)
+ return;
slp_tree child;
FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child)