]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Stop backwards thread discovery when leaving a loop
authorRichard Biener <rguenther@suse.de>
Tue, 16 Aug 2022 12:14:55 +0000 (14:14 +0200)
committerRichard Biener <rguenther@suse.de>
Tue, 16 Aug 2022 12:18:39 +0000 (14:18 +0200)
The backward threader copier cannot deal with the situation of
copying blocks belonging to different loops and will reject those
paths late.  The following uses this to prune path discovery,
saving on compile-time.  Note the off-loop block is still considered
as entry edge origin.

* tree-ssa-threadbackward.cc (back_threader::find_paths_to_names):
Do not walk further if we are leaving the current loop.

gcc/tree-ssa-threadbackward.cc

index b886027fccf3089f2ced4aed457b1bbad4d239e9..1c362839fab243023b0903ff8b11c00886a968ce 100644 (file)
@@ -355,6 +355,12 @@ back_threader::find_paths_to_names (basic_block bb, bitmap interesting,
          || maybe_register_path ()))
     ;
 
+  // The backwards thread copier cannot copy blocks that do not belong
+  // to the same loop, so when the new source of the path entry no
+  // longer belongs to it we don't need to search further.
+  else if (m_path[0]->loop_father != bb->loop_father)
+    ;
+
   // Continue looking for ways to extend the path but limit the
   // search space along a branch
   else if ((overall_paths = overall_paths * EDGE_COUNT (bb->preds))