https://gcc.gnu.org/g:9a795b3a5b6a0d8b4b4f38a66ab9782aabead92e
commit r15-3824-g9a795b3a5b6a0d8b4b4f38a66ab9782aabead92e Author: Richard Biener <rguent...@suse.de> Date: Tue Sep 24 12:53:11 2024 +0200 tree-optimization/114855 - more update_ssa speedup The following tackles another source of slow bitmap operations, namely populating blocks_to_update. We already have that in tree view around PHI insertion but also the initial population is slow. There's unfortunately a conditional inbetween list view requirement and the bitmap API doesn't allow opportunistic switching but rejects tree -> tree or list -> list transitions. So the following patch wraps the early population in a tree view section with possibly one redundant tree -> list -> tree view transition. This cuts tree SSA incremental from 228.25s (21%) to 65.05s (7%). PR tree-optimization/114855 * tree-into-ssa.cc (update_ssa): Use tree view for the initial population of blocks_to_update. Diff: --- gcc/tree-into-ssa.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/tree-into-ssa.cc b/gcc/tree-into-ssa.cc index 1cce9d628090..fc61d47ca777 100644 --- a/gcc/tree-into-ssa.cc +++ b/gcc/tree-into-ssa.cc @@ -3445,6 +3445,7 @@ update_ssa (unsigned update_flags) blocks_with_phis_to_rewrite = BITMAP_ALLOC (NULL); bitmap_tree_view (blocks_with_phis_to_rewrite); blocks_to_update = BITMAP_ALLOC (NULL); + bitmap_tree_view (blocks_to_update); insert_phi_p = (update_flags != TODO_update_ssa_no_phi); @@ -3492,6 +3493,8 @@ update_ssa (unsigned update_flags) placement heuristics. */ prepare_block_for_update (start_bb, insert_phi_p); + bitmap_list_view (blocks_to_update); + tree name; if (flag_checking) @@ -3517,6 +3520,8 @@ update_ssa (unsigned update_flags) } else { + bitmap_list_view (blocks_to_update); + /* Otherwise, the entry block to the region is the nearest common dominator for the blocks in BLOCKS. */ start_bb = nearest_common_dominator_for_set (CDI_DOMINATORS,