struct CfgInfo {
pub cfg: DiGraphMap<BlockId, ()>,
pub fwd_cfg: DiGraphMap<BlockId, ()>,
pub loop_entries: HashSet<BlockId>,
pub switch_blocks: HashSet<BlockId>,
pub dominator_tree: Dominators<BlockId>,
pub block_data: Vector<BlockId, BlockData>,
}Expand description
Information precomputed about a function’s CFG.
Fields§
§cfg: DiGraphMap<BlockId, ()>The CFG
fwd_cfg: DiGraphMap<BlockId, ()>The CFG where all the backward edges have been removed. Aka “forward CFG”.
loop_entries: HashSet<BlockId>We consider the destination of the backward edges to be loop entries and store them here.
switch_blocks: HashSet<BlockId>The blocks whose terminators are a switch are stored here.
dominator_tree: Dominators<BlockId>Tree of which nodes dominates which other nodes.
block_data: Vector<BlockId, BlockData>Computed data about each block.
Implementations§
Source§impl CfgInfo
impl CfgInfo
Sourcefn build(body: &BodyContents) -> Result<Self, Irreducible>
fn build(body: &BodyContents) -> Result<Self, Irreducible>
Build the CFGs (the “regular” CFG and the CFG without backward edges) and compute some information like the loop entries and the switch blocks.
fn block_data(&self, block_id: BlockId) -> &BlockData
fn topo_rank(&self, block_id: BlockId) -> u32
Sourcefn make_ord_block_id(&self, block_id: BlockId) -> BlockWithRank<u32>
fn make_ord_block_id(&self, block_id: BlockId) -> BlockWithRank<u32>
Create an OrdBlockId from a block id and a rank given by a map giving a sort (topological in our use cases) over the graph.
fn is_backward_edge(&self, src: BlockId, tgt: BlockId) -> bool
Trait Implementations§
Auto Trait Implementations§
impl Freeze for CfgInfo
impl RefUnwindSafe for CfgInfo
impl Send for CfgInfo
impl Sync for CfgInfo
impl Unpin for CfgInfo
impl UnwindSafe for CfgInfo
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<I, T> ExtractContext<I, ()> for T
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
fn extract_context(self, _original_input: I)
Given the context attached to a nom error, and given the original
input to the nom parser, extract more the useful context information. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<I> RecreateContext<I> for I
impl<I> RecreateContext<I> for I
§fn recreate_context(_original_input: I, tail: I) -> I
fn recreate_context(_original_input: I, tail: I) -> I
Given the original input, as well as the context reported by nom,
recreate a context in the original string where the error occurred. Read more