Skip to main content

luaur_code_gen/functions/
update_last_use_for_op.rs

1use crate::enums::ir_block_kind::IrBlockKind;
2use crate::enums::ir_op_kind::IrOpKind;
3use crate::records::ir_function::IrFunction;
4use crate::records::ir_op::IrOp;
5
6pub fn update_last_use_for_op(function: &mut IrFunction, inst_idx: u32, op: IrOp) {
7    if op.kind() == IrOpKind::Inst {
8        function.instructions[op.index() as usize].last_use = inst_idx;
9    } else if op.kind() == IrOpKind::Block {
10        let block = &function.blocks[op.index() as usize];
11        if block.kind == IrBlockKind::ExitSync {
12            if let Some(sync_info) = function.vm_exit_info.find(&inst_idx) {
13                let arg_ops = sync_info.arg_ops.clone();
14                for arg_op in arg_ops.iter() {
15                    update_last_use_for_op(function, inst_idx, *arg_op);
16                }
17            }
18        }
19    }
20}