tree-optimization/106881 - fix simple_control_dep_chain part
authorRichard Biener <rguenther@suse.de>
Fri, 9 Sep 2022 07:56:45 +0000 (09:56 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 9 Sep 2022 09:48:09 +0000 (11:48 +0200)
This adjusts simple_control_dep_chain in the same way I adjusted
compute_control_dep_chain_pdom to avoid adding fallthru edges to
the predicate chain.

PR tree-optimization/106881
* gimple-predicate-analysis.cc (simple_control_dep_chain):
Add only non-fallthru edges and avoid the same set of edges
as compute_control_dep_chain_pdom does.

gcc/gimple-predicate-analysis.cc

index 910ab97..bc9ed84 100644 (file)
@@ -926,10 +926,14 @@ simple_control_dep_chain (vec<edge>& chain, basic_block from, basic_block to)
     {
       basic_block dest = src;
       src = get_immediate_dominator (CDI_DOMINATORS, src);
-      edge pred_e;
-      if (single_pred_p (dest)
-         && (pred_e = find_edge (src, dest)))
-       chain.safe_push (pred_e);
+      if (single_pred_p (dest))
+       {
+         edge pred_e = single_pred_edge (dest);
+         gcc_assert (pred_e->src == src);
+         if (!(pred_e->flags & ((EDGE_FAKE | EDGE_ABNORMAL | EDGE_DFS_BACK)))
+             && !single_succ_p (src))
+           chain.safe_push (pred_e);
+       }
     }
 }