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