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.