From 607f92597c3047d7813a981450a7493bca014324 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 20 Mar 2025 15:08:33 +0100 Subject: [PATCH] tree-optimization/119389 - limit edge processing in dominated_by_p_w_unex The following removes quadraticness when visiting each predecessor of a large CFG merge with dominated_by_p_w_unex. PR tree-optimization/119389 * tree-ssa-sccvn.cc (dominated_by_p_w_unex): Limit the number of predecessors of a CFG merge we try to skip. --- gcc/tree-ssa-sccvn.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc index 40c38fa020a..481ab8b243d 100644 --- a/gcc/tree-ssa-sccvn.cc +++ b/gcc/tree-ssa-sccvn.cc @@ -5172,7 +5172,11 @@ dominated_by_p_w_unex (basic_block bb1, basic_block bb2, bool allow_back) /* Iterate to the single successor of bb2 with only a single executable incoming edge. */ else if (EDGE_COUNT (bb2->succs) == 1 - && EDGE_COUNT (single_succ (bb2)->preds) > 1) + && EDGE_COUNT (single_succ (bb2)->preds) > 1 + /* Limit the number of edges we check, we should bring in + context from the iteration and compute the single + executable incoming edge when visiting a block. */ + && EDGE_COUNT (single_succ (bb2)->preds) < 8) { edge prede = NULL; FOR_EACH_EDGE (e, ei, single_succ (bb2)->preds) -- 2.47.2