diff options
author | Richard Biener <rguenther@suse.de> | 2020-09-18 09:00:12 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-09-18 09:00:12 +0200 |
commit | 080ddd8a81ea39e92542fa7d7e2d7d27ee741710 (patch) | |
tree | 8dddb8e96b9d43976c0bedac97b4014d489fa7ad /gcc | |
parent | f627125855075f7ffde74e48481ee961f0bc4c7b (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-vect-slp.c | 4 |
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) |