tree-optimization/97098 - fix compile-time hog in SLP live
authorRichard Biener <rguenther@suse.de>
Fri, 18 Sep 2020 07:00:12 +0000 (09:00 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 18 Sep 2020 07:00:12 +0000 (09:00 +0200)
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.

gcc/tree-vect-slp.c

index ecce7a982ddbd294b41cf88c44d07d4c929967db..ef62c2dff2e16c46e8ec892483dc47db9c9050b4 100644 (file)
@@ -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)