Struct rustc_mir_transform::ssa::SsaLocals
source · pub struct SsaLocals {
assignments: IndexVec<Local, Set1<LocationExtended>>,
assignment_order: Vec<Local>,
copy_classes: IndexVec<Local, Local>,
}Fields§
§assignments: IndexVec<Local, Set1<LocationExtended>>Assignments to each local. This defines whether the local is SSA.
assignment_order: Vec<Local>We visit the body in reverse postorder, to ensure each local is assigned before it is used. We remember the order in which we saw the assignments to compute the SSA values in a single pass.
copy_classes: IndexVec<Local, Local>Copy equivalence classes between locals. See copy_classes for documentation.
Implementations§
source§impl SsaLocals
impl SsaLocals
pub fn new<'tcx>( tcx: TyCtxt<'tcx>, param_env: ParamEnv<'tcx>, body: &Body<'tcx>, borrowed_locals: &BitSet<Local> ) -> SsaLocals
pub fn is_ssa(&self, local: Local) -> bool
pub fn assignments<'a, 'tcx>( &'a self, body: &'a Body<'tcx> ) -> impl Iterator<Item = (Local, &'a Rvalue<'tcx>)> + 'a
sourcepub fn copy_classes(&self) -> &IndexSlice<Local, Local>
pub fn copy_classes(&self) -> &IndexSlice<Local, Local>
Compute the equivalence classes for locals, based on copy statements.
The returned vector maps each local to the one it copies. In the following case: _a = &mut _0 _b = move? _a _c = move? _a _d = move? _c We return the mapping _a => _a // not a copy so, represented by itself _b => _a _c => _a _d => _a // transitively through _c
Exception: we do not see through the return place, as it cannot be substituted.
sourcepub fn meet_copy_equivalence(&self, property: &mut BitSet<Local>)
pub fn meet_copy_equivalence(&self, property: &mut BitSet<Local>)
Make a property uniform on a copy equivalence class by removing elements.
Trait Implementations§
Auto Trait Implementations§
impl RefUnwindSafe for SsaLocals
impl Send for SsaLocals
impl Sync for SsaLocals
impl Unpin for SsaLocals
impl UnwindSafe for SsaLocals
Blanket Implementations§
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 72 bytes