]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-optimization/106495 - avoid threading to possibly never executed edge
authorRichard Biener <rguenther@suse.de>
Mon, 1 Aug 2022 12:59:08 +0000 (14:59 +0200)
committerRichard Biener <rguenther@suse.de>
Tue, 2 Aug 2022 06:35:01 +0000 (08:35 +0200)
The following builds upon the logic of the PR105679 fix by avoiding
to thread to a known edge that is predicted as probably never executed.

PR tree-optimization/106495
* tree-ssa-threadbackward.cc
(back_threader_profitability::profitable_path_p): If known_edge
is probably never executed avoid threading.

gcc/tree-ssa-threadbackward.cc

index 90f5331c2657ce0b09a517226cc7b5e8a5bdfc84..0519f2a8c4bd61f7bc068723d1f5ae722af58fcf 100644 (file)
@@ -777,6 +777,13 @@ back_threader_profitability::profitable_path_p (const vec<basic_block> &m_path,
                     "exceeds PARAM_MAX_FSM_THREAD_PATH_INSNS.\n");
          return false;
        }
+      if (taken_edge && probably_never_executed_edge_p (cfun, taken_edge))
+       {
+         if (dump_file && (dump_flags & TDF_DETAILS))
+           fprintf (dump_file, "  FAIL: Jump-thread path not considered: "
+                    "path leads to probably never executed edge.\n");
+         return false;
+       }
       edge entry = find_edge (m_path[m_path.length () - 1],
                              m_path[m_path.length () - 2]);
       if (probably_never_executed_edge_p (cfun, entry))