Skip to main content

luaur_code_gen/functions/
remove_block_use.rs

1use crate::functions::kill_ir_utils_alt_c::kill_ir_function_ir_block;
2use crate::macros::codegen_assert::CODEGEN_ASSERT;
3use crate::records::ir_block::IrBlock;
4use crate::records::ir_function::IrFunction;
5
6pub fn remove_block_use(function: &mut IrFunction, block_idx: u32) {
7    let block: *mut IrBlock = &mut function.blocks[block_idx as usize];
8
9    CODEGEN_ASSERT!(unsafe { (*block).use_count } != 0);
10    unsafe {
11        (*block).use_count -= 1;
12    }
13
14    // Entry block is never removed because is has an implicit use
15    if unsafe { (*block).use_count } == 0 && block_idx != 0 {
16        kill_ir_function_ir_block(function, unsafe { &mut *block });
17    }
18}