luaur_code_gen/functions/
create_linear_blocks.rs1use crate::enums::ir_block_kind::IrBlockKind;
2use crate::functions::try_create_linear_block::try_create_linear_block;
3use crate::records::const_prop_state::ConstPropState;
4use crate::records::ir_block::IrBlock;
5use crate::records::ir_builder::IrBuilder;
6use crate::records::ir_function::IrFunction;
7
8pub fn create_linear_blocks(build: &mut IrBuilder) {
9 let function: *mut IrFunction = &mut build.function;
10 let mut state =
11 unsafe { ConstPropState::const_prop_state_const_prop_state(build, &mut *function) };
12 let mut visited = unsafe { vec![0u8; (&(*function).blocks).len()] };
13
14 let original_block_count = unsafe { (&(*function).blocks).len() };
15
16 for i in 0..original_block_count {
17 let block: *mut IrBlock = unsafe { &mut (&mut (*function).blocks)[i] };
18
19 unsafe {
20 if (*block).kind == IrBlockKind::Fallback || (*block).kind == IrBlockKind::Dead {
21 continue;
22 }
23 }
24
25 if visited[i] != 0 {
26 continue;
27 }
28
29 try_create_linear_block(build, &mut visited, block, &mut state);
30 }
31}