diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index ecce7a982dd..ef62c2dff2e 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)