From aa1267f630e01d19dcd9247ffb3a795aba0df461 Mon Sep 17 00:00:00 2001 From: Tomasz Miąsko Date: Sat, 21 Jan 2023 00:00:00 +0000 Subject: Preprocess dominator tree to answer queries in O(1) --- compiler/rustc_middle/src/mir/basic_blocks.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'compiler/rustc_middle/src') diff --git a/compiler/rustc_middle/src/mir/basic_blocks.rs b/compiler/rustc_middle/src/mir/basic_blocks.rs index 1319ddbb877..f5157e18e6d 100644 --- a/compiler/rustc_middle/src/mir/basic_blocks.rs +++ b/compiler/rustc_middle/src/mir/basic_blocks.rs @@ -3,6 +3,7 @@ use crate::mir::{BasicBlock, BasicBlockData, Successors, Terminator, TerminatorK use rustc_data_structures::fx::FxHashMap; use rustc_data_structures::graph; +use rustc_data_structures::graph::dominators::{dominator_tree, DominatorTree}; use rustc_data_structures::graph::dominators::{dominators, Dominators}; use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; use rustc_data_structures::sync::OnceCell; @@ -41,8 +42,12 @@ impl<'tcx> BasicBlocks<'tcx> { *self.cache.is_cyclic.get_or_init(|| graph::is_cyclic(self)) } + pub fn dominator_tree(&self) -> DominatorTree { + dominator_tree(&self) + } + pub fn dominators(&self) -> Dominators { - dominators(&self) + dominators(&self.dominator_tree()) } /// Returns predecessors for each basic block. -- cgit 1.4.1-3-g733a5