Skip to main content

transfer_liveness

Function transfer_liveness 

Source
fn transfer_liveness(
    live: &mut BitVec,
    opcode: u8,
    h_before: usize,
    inp: usize,
    out: usize,
    imm: Option<DecodedImm>,
    input_snap: &[AbsValue],
    output: Option<AbsValue>,
)
Expand description

Backward liveness transfer for a single instruction.

Updates live to reflect liveness before the instruction executes, given h_before (the stack height before the instruction). All positions are guaranteed in-bounds since live is sized to the block’s max stack height.

imm carries the decoded immediate for DUPN/SWAPN/EXCHANGE; None for all other opcodes.

input_snap and output carry abstract interpretation snapshots. When the output is a known constant, codegen replaces the entire instruction with a constant push and none of the inputs need to be live. When individual inputs are known constants, codegen loads them as immediates (const_operand) so those stack positions don’t need to be live either.