Struct rustc_middle::mir::BasicBlock
source · [−]pub struct BasicBlock {
private: u32,
}Expand description
A node in the MIR control-flow graph.
There are no branches (e.g., ifs, function calls, etc.) within a basic block, which makes
it easier to do data-flow analyses and optimizations. Instead, branches are represented
as an edge in a graph between basic blocks.
Basic blocks consist of a series of statements, ending with a
terminator. Basic blocks can have multiple predecessors and successors,
however there is a MIR pass (CriticalCallEdges) that removes critical edges, which
are edges that go from a multi-successor node to a multi-predecessor node. This pass is
needed because some analyses require that there are no critical edges in the CFG.
Note that this type is just an index into Body.basic_blocks;
the actual data that a basic block holds is in BasicBlockData.
Read more about basic blocks in the rustc-dev-guide.
Fields
private: u32Implementations
sourceimpl BasicBlock
impl BasicBlock
sourcepub const MAX_AS_U32: u32 = 4_294_967_040u32
pub const MAX_AS_U32: u32 = 4_294_967_040u32
Maximum value the index can take, as a u32.
sourcepub const fn from_usize(value: usize) -> Self
pub const fn from_usize(value: usize) -> Self
sourcepub const unsafe fn from_u32_unchecked(value: u32) -> Self
pub const unsafe fn from_u32_unchecked(value: u32) -> Self
Creates a new index from a given u32.
Safety
The provided value must be less than or equal to the maximum value for the newtype. Providing a value outside this range is undefined due to layout restrictions.
Prefer using from_u32.
sourceimpl BasicBlock
impl BasicBlock
pub fn start_location(self) -> Location
Trait Implementations
sourceimpl Add<usize> for BasicBlock
impl Add<usize> for BasicBlock
sourceimpl Clone for BasicBlock
impl Clone for BasicBlock
sourcefn clone(&self) -> BasicBlock
fn clone(&self) -> BasicBlock
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source. Read more
sourceimpl Debug for BasicBlock
impl Debug for BasicBlock
sourceimpl From<BasicBlock> for u32
impl From<BasicBlock> for u32
sourcefn from(v: BasicBlock) -> u32
fn from(v: BasicBlock) -> u32
Converts to this type from the input type.
sourceimpl From<BasicBlock> for usize
impl From<BasicBlock> for usize
sourcefn from(v: BasicBlock) -> usize
fn from(v: BasicBlock) -> usize
Converts to this type from the input type.
sourceimpl From<u32> for BasicBlock
impl From<u32> for BasicBlock
sourceimpl From<usize> for BasicBlock
impl From<usize> for BasicBlock
sourceimpl Hash for BasicBlock
impl Hash for BasicBlock
sourceimpl<'__ctx> HashStable<StableHashingContext<'__ctx>> for BasicBlock
impl<'__ctx> HashStable<StableHashingContext<'__ctx>> for BasicBlock
fn hash_stable(
&self,
__hcx: &mut StableHashingContext<'__ctx>,
__hasher: &mut StableHasher
)
sourceimpl Idx for BasicBlock
impl Idx for BasicBlock
sourceimpl<'tcx> Index<BasicBlock> for Body<'tcx>
impl<'tcx> Index<BasicBlock> for Body<'tcx>
type Output = BasicBlockData<'tcx>
type Output = BasicBlockData<'tcx>
The returned type after indexing.
sourcefn index(&self, index: BasicBlock) -> &BasicBlockData<'tcx>
fn index(&self, index: BasicBlock) -> &BasicBlockData<'tcx>
Performs the indexing (container[index]) operation. Read more
sourceimpl<'tcx> IndexMut<BasicBlock> for Body<'tcx>
impl<'tcx> IndexMut<BasicBlock> for Body<'tcx>
sourcefn index_mut(&mut self, index: BasicBlock) -> &mut BasicBlockData<'tcx>
fn index_mut(&mut self, index: BasicBlock) -> &mut BasicBlockData<'tcx>
Performs the mutable indexing (container[index]) operation. Read more
sourceimpl Ord for BasicBlock
impl Ord for BasicBlock
sourceimpl PartialEq<BasicBlock> for BasicBlock
impl PartialEq<BasicBlock> for BasicBlock
sourcefn eq(&self, other: &BasicBlock) -> bool
fn eq(&self, other: &BasicBlock) -> bool
This method tests for self and other values to be equal, and is used
by ==. Read more
sourcefn ne(&self, other: &BasicBlock) -> bool
fn ne(&self, other: &BasicBlock) -> bool
This method tests for !=.
sourceimpl PartialOrd<BasicBlock> for BasicBlock
impl PartialOrd<BasicBlock> for BasicBlock
sourcefn partial_cmp(&self, other: &BasicBlock) -> Option<Ordering>
fn partial_cmp(&self, other: &BasicBlock) -> Option<Ordering>
This method returns an ordering between self and other values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self and other) and is used by the <=
operator. Read more
sourceimpl Step for BasicBlock
impl Step for BasicBlock
sourcefn steps_between(start: &Self, end: &Self) -> Option<usize>
fn steps_between(start: &Self, end: &Self) -> Option<usize>
step_trait)Returns the number of successor steps required to get from start to end. Read more
sourcefn forward_checked(start: Self, u: usize) -> Option<Self>
fn forward_checked(start: Self, u: usize) -> Option<Self>
step_trait)Returns the value that would be obtained by taking the successor
of self count times. Read more
sourcefn backward_checked(start: Self, u: usize) -> Option<Self>
fn backward_checked(start: Self, u: usize) -> Option<Self>
step_trait)Returns the value that would be obtained by taking the predecessor
of self count times. Read more
sourcefn forward(start: Self, count: usize) -> Self
fn forward(start: Self, count: usize) -> Self
step_trait)Returns the value that would be obtained by taking the successor
of self count times. Read more
sourceunsafe fn forward_unchecked(start: Self, count: usize) -> Self
unsafe fn forward_unchecked(start: Self, count: usize) -> Self
step_trait)Returns the value that would be obtained by taking the successor
of self count times. Read more
sourcefn backward(start: Self, count: usize) -> Self
fn backward(start: Self, count: usize) -> Self
step_trait)Returns the value that would be obtained by taking the predecessor
of self count times. Read more
sourceunsafe fn backward_unchecked(start: Self, count: usize) -> Self
unsafe fn backward_unchecked(start: Self, count: usize) -> Self
step_trait)Returns the value that would be obtained by taking the predecessor
of self count times. Read more
impl Copy for BasicBlock
impl Eq for BasicBlock
impl StructuralEq for BasicBlock
impl StructuralPartialEq for BasicBlock
impl TrustedStep for BasicBlock
Auto Trait Implementations
impl RefUnwindSafe for BasicBlock
impl Send for BasicBlock
impl Sync for BasicBlock
impl Unpin for BasicBlock
impl UnwindSafe for BasicBlock
Blanket Implementations
sourceimpl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for T where
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for T where
T: Copy,
fn allocate_on(self, arena: &'a Arena<'tcx>) -> &'a mut T
fn allocate_from_iter(
arena: &'a Arena<'tcx>,
iter: impl IntoIterator<Item = T>
) -> &'a mut [T]ⓘNotable traits for &mut [u8]impl Write for &mut [u8]impl Read for &[u8]
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<Ctxt, T> DepNodeParams<Ctxt> for T where
Ctxt: DepContext,
T: for<'a> HashStable<StableHashingContext<'a>> + Debug,
impl<Ctxt, T> DepNodeParams<Ctxt> for T where
Ctxt: DepContext,
T: for<'a> HashStable<StableHashingContext<'a>> + Debug,
default fn fingerprint_style() -> FingerprintStyle
sourcedefault fn to_fingerprint(&self, tcx: Ctxt) -> Fingerprint
default fn to_fingerprint(&self, tcx: Ctxt) -> Fingerprint
This method turns the parameters of a DepNodeConstructor into an opaque Fingerprint to be used in DepNode. Not all DepNodeParams support being turned into a Fingerprint (they don’t need to if the corresponding DepNode is anonymous). Read more
default fn to_debug_str(&self, Ctxt) -> String
sourcedefault fn recover(Ctxt, &DepNode<<Ctxt as DepContext>::DepKind>) -> Option<T>
default fn recover(Ctxt, &DepNode<<Ctxt as DepContext>::DepKind>) -> Option<T>
This method tries to recover the query key from the given DepNode,
something which is needed when forcing DepNodes during red-green
evaluation. The query system will only call this method if
fingerprint_style() is not FingerprintStyle::Opaque.
It is always valid to return None here, in which case incremental
compilation will treat the query as having changed instead of forcing it. Read more
sourceimpl<T, R> InternIteratorElement<T, R> for T
impl<T, R> InternIteratorElement<T, R> for T
type Output = R
fn intern_with<I, F>(iter: I, f: F) -> <T as InternIteratorElement<T, R>>::Output where
I: Iterator<Item = T>,
F: FnOnce(&[T]) -> R,
sourceimpl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
impl<'a, T> Captures<'a> for T where
T: ?Sized,
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: 4 bytes