pub struct Cfg {
pub blocks: HashMap<BlockId, BasicBlock>,
pub entry: BlockId,
pub exit: Option<BlockId>,
pub loops: Vec<Loop>,
}Expand description
Control Flow Graph
Fields§
§blocks: HashMap<BlockId, BasicBlock>All basic blocks
entry: BlockIdEntry block ID
exit: Option<BlockId>Exit block ID (if function has explicit return)
loops: Vec<Loop>Loop information
Implementations§
Source§impl Cfg
impl Cfg
Sourcepub fn block(&self, id: BlockId) -> Option<&BasicBlock>
pub fn block(&self, id: BlockId) -> Option<&BasicBlock>
Get a basic block by ID
Sourcepub fn block_mut(&mut self, id: BlockId) -> Option<&mut BasicBlock>
pub fn block_mut(&mut self, id: BlockId) -> Option<&mut BasicBlock>
Get a mutable basic block by ID
Sourcepub fn blocks_rpo(&self) -> Vec<BlockId> ⓘ
pub fn blocks_rpo(&self) -> Vec<BlockId> ⓘ
Iterate over all blocks in RPO (Reverse Post-Order)
Sourcepub fn dominators(&self) -> HashMap<BlockId, BlockId>
pub fn dominators(&self) -> HashMap<BlockId, BlockId>
Compute dominator tree
Sourcepub fn detect_loops(&mut self)
pub fn detect_loops(&mut self)
Detect natural loops in the CFG
Sourcepub fn reachable_blocks(&self) -> HashSet<BlockId>
pub fn reachable_blocks(&self) -> HashSet<BlockId>
Find all blocks reachable from entry (helper for optimization)
Sourcepub fn merge_blocks(&mut self) -> usize
pub fn merge_blocks(&mut self) -> usize
Merge basic blocks (CFG optimization) Merge block B into block A if:
- A has only one successor (B)
- B has only one predecessor (A)
- B is not the entry block
Returns the number of blocks merged
Sourcepub fn eliminate_unreachable(&mut self) -> usize
pub fn eliminate_unreachable(&mut self) -> usize
Eliminate unreachable blocks (CFG optimization) Removes blocks that cannot be reached from the entry block Returns the number of blocks eliminated
Sourcepub fn simplify_branches(&mut self) -> usize
pub fn simplify_branches(&mut self) -> usize
Simplify branches (CFG optimization) Simplifies control flow by:
- Removing branches to the immediate next block (fall-through)
- Collapsing chains of unconditional branches
Returns the number of branches simplified
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Cfg
impl RefUnwindSafe for Cfg
impl Send for Cfg
impl Sync for Cfg
impl Unpin for Cfg
impl UnsafeUnpin for Cfg
impl UnwindSafe for Cfg
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