aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-07-11 12:17:40 +0200
committerRichard Biener <rguenther@suse.de>2022-07-11 13:47:32 +0200
commitf1782a0a8c46a8897923f8e7aaf3846e86434170 (patch)
tree37838953daf5f2ef48c8bdcd9e883ef36c978a3b
parent415d2c38edadf97950eb14b8d7e6b1491c98cdd5 (diff)
downloadgcc-f1782a0a8c46a8897923f8e7aaf3846e86434170.zip
gcc-f1782a0a8c46a8897923f8e7aaf3846e86434170.tar.gz
gcc-f1782a0a8c46a8897923f8e7aaf3846e86434170.tar.bz2
More update-ssa speedup
When working on a smaller region like a loop version copy the main time spent is now dominance fast query recompute which does a full function DFS walk. The dominance queries within the region of interest should be O(log n) without fast queries and we should do on the order of O(n) of them which overall means reasonable complexity. For the artificial testcase I'm looking at this shaves off considerable time again. * tree-into-ssa.cc (update_ssa): Do not forcefully re-compute dominance fast queries for TODO_update_ssa_no_phi.
-rw-r--r--gcc/tree-into-ssa.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/tree-into-ssa.cc b/gcc/tree-into-ssa.cc
index be71b62..d13fb72 100644
--- a/gcc/tree-into-ssa.cc
+++ b/gcc/tree-into-ssa.cc
@@ -3451,11 +3451,13 @@ update_ssa (unsigned update_flags)
phis_to_rewrite.create (last_basic_block_for_fn (cfun) + 1);
blocks_to_update = BITMAP_ALLOC (NULL);
- /* Ensure that the dominance information is up-to-date. */
- calculate_dominance_info (CDI_DOMINATORS);
-
insert_phi_p = (update_flags != TODO_update_ssa_no_phi);
+ /* Ensure that the dominance information is up-to-date and when we
+ are going to compute dominance frontiers fast queries are possible. */
+ if (insert_phi_p || dom_info_state (CDI_DOMINATORS) == DOM_NONE)
+ calculate_dominance_info (CDI_DOMINATORS);
+
/* If there are names defined in the replacement table, prepare
definition and use sites for all the names in NEW_SSA_NAMES and
OLD_SSA_NAMES. */