Rollup merge of #95120 - smoelius:backward-switch-int, r=ecstatic-morse
Implement `apply_switch_int_edge_effects` for backward analyses See #94576 for some discussion. r? `@ecstatic-morse`
This commit is contained in:
commit
a8be562bdf
5 changed files with 153 additions and 8 deletions
|
@ -45,6 +45,7 @@ use std::{iter, mem, option};
|
|||
use self::graph_cyclic_cache::GraphIsCyclicCache;
|
||||
use self::predecessors::{PredecessorCache, Predecessors};
|
||||
pub use self::query::*;
|
||||
use self::switch_sources::{SwitchSourceCache, SwitchSources};
|
||||
|
||||
pub mod coverage;
|
||||
mod generic_graph;
|
||||
|
@ -58,6 +59,7 @@ mod predecessors;
|
|||
pub mod pretty;
|
||||
mod query;
|
||||
pub mod spanview;
|
||||
mod switch_sources;
|
||||
pub mod tcx;
|
||||
pub mod terminator;
|
||||
pub use terminator::*;
|
||||
|
@ -296,6 +298,7 @@ pub struct Body<'tcx> {
|
|||
pub is_polymorphic: bool,
|
||||
|
||||
predecessor_cache: PredecessorCache,
|
||||
switch_source_cache: SwitchSourceCache,
|
||||
is_cyclic: GraphIsCyclicCache,
|
||||
|
||||
pub tainted_by_errors: Option<ErrorGuaranteed>,
|
||||
|
@ -344,6 +347,7 @@ impl<'tcx> Body<'tcx> {
|
|||
required_consts: Vec::new(),
|
||||
is_polymorphic: false,
|
||||
predecessor_cache: PredecessorCache::new(),
|
||||
switch_source_cache: SwitchSourceCache::new(),
|
||||
is_cyclic: GraphIsCyclicCache::new(),
|
||||
tainted_by_errors,
|
||||
};
|
||||
|
@ -372,6 +376,7 @@ impl<'tcx> Body<'tcx> {
|
|||
var_debug_info: Vec::new(),
|
||||
is_polymorphic: false,
|
||||
predecessor_cache: PredecessorCache::new(),
|
||||
switch_source_cache: SwitchSourceCache::new(),
|
||||
is_cyclic: GraphIsCyclicCache::new(),
|
||||
tainted_by_errors: None,
|
||||
};
|
||||
|
@ -392,6 +397,7 @@ impl<'tcx> Body<'tcx> {
|
|||
// FIXME: Use a finer-grained API for this, so only transformations that alter terminators
|
||||
// invalidate the caches.
|
||||
self.predecessor_cache.invalidate();
|
||||
self.switch_source_cache.invalidate();
|
||||
self.is_cyclic.invalidate();
|
||||
&mut self.basic_blocks
|
||||
}
|
||||
|
@ -401,6 +407,7 @@ impl<'tcx> Body<'tcx> {
|
|||
&mut self,
|
||||
) -> (&mut IndexVec<BasicBlock, BasicBlockData<'tcx>>, &mut LocalDecls<'tcx>) {
|
||||
self.predecessor_cache.invalidate();
|
||||
self.switch_source_cache.invalidate();
|
||||
self.is_cyclic.invalidate();
|
||||
(&mut self.basic_blocks, &mut self.local_decls)
|
||||
}
|
||||
|
@ -414,6 +421,7 @@ impl<'tcx> Body<'tcx> {
|
|||
&mut Vec<VarDebugInfo<'tcx>>,
|
||||
) {
|
||||
self.predecessor_cache.invalidate();
|
||||
self.switch_source_cache.invalidate();
|
||||
self.is_cyclic.invalidate();
|
||||
(&mut self.basic_blocks, &mut self.local_decls, &mut self.var_debug_info)
|
||||
}
|
||||
|
@ -541,6 +549,11 @@ impl<'tcx> Body<'tcx> {
|
|||
self.predecessor_cache.compute(&self.basic_blocks)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn switch_sources(&self) -> &SwitchSources {
|
||||
self.switch_source_cache.compute(&self.basic_blocks)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn dominators(&self) -> Dominators<BasicBlock> {
|
||||
dominators(self)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue