Skip to main content

luaur_code_gen/functions/
kill_ir_utils_alt_b.rs

1use crate::enums::ir_cmd::IrCmd;
2use crate::functions::kill_ir_utils::kill_ir_function_ir_inst;
3use crate::macros::codegen_assert::CODEGEN_ASSERT;
4use crate::records::ir_function::IrFunction;
5use crate::records::ir_inst::IrInst;
6
7pub fn kill_ir_function_u32_u32(function: &mut IrFunction, start: u32, end: u32) {
8    // Kill instructions in reverse order to avoid killing instructions that are still marked as used
9    let mut i = end as i64;
10    while i >= start as i64 {
11        CODEGEN_ASSERT!((i as usize) < function.instructions.len());
12        let curr: *mut IrInst = &mut function.instructions[i as usize];
13
14        if unsafe { (*curr).cmd } == IrCmd::NOP {
15            i -= 1;
16            continue;
17        }
18
19        // Do not force destruction of instructions that are still in use
20        // When the operands are released, the instruction will be released automatically
21        if unsafe { (*curr).use_count } != 0 {
22            i -= 1;
23            continue;
24        }
25
26        kill_ir_function_ir_inst(function, unsafe { &mut *curr });
27        i -= 1;
28    }
29}