Skip to main content

luaur_code_gen/functions/
update_remaining_uses.rs

1use crate::enums::ir_op_kind::IrOpKind;
2use crate::functions::visit_arguments::visit_arguments;
3use crate::macros::codegen_assert::CODEGEN_ASSERT;
4use crate::records::ir_inst::IrInst;
5use crate::records::remove_dead_store_state::RemoveDeadStoreState;
6use alloc::vec::Vec;
7
8pub fn update_remaining_uses(state: &mut RemoveDeadStoreState, inst: &mut IrInst, index: u32) {
9    let remaining: *mut Vec<u32> = state.remaining_uses;
10
11    unsafe {
12        (&mut *remaining)[index as usize] = inst.use_count as u32;
13    }
14
15    visit_arguments(inst, |op| {
16        if op.kind() == IrOpKind::Inst {
17            unsafe {
18                CODEGEN_ASSERT!((&*remaining)[op.index() as usize] != 0);
19                (&mut *remaining)[op.index() as usize] -= 1;
20            }
21        }
22    });
23}