luaur-code-gen 0.1.0

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::ir_block_kind::IrBlockKind;
use crate::functions::generate_vm_exit_blocks::generate_vm_exit_blocks;
use crate::functions::mark_dead_stores_in_block_chain::mark_dead_stores_in_block_chain;
use crate::records::ir_builder::IrBuilder;
use alloc::vec;
use alloc::vec::Vec;

pub fn mark_dead_stores_in_block_chains(build: &mut IrBuilder) {
    let num_blocks = build.function.blocks.len();
    let num_insts = build.function.instructions.len();

    let mut visited: Vec<u8> = vec![0u8; num_blocks];
    let mut remaining_uses: Vec<u32> = vec![0u32; num_insts];
    let mut block_idx_chain: Vec<u32> = Vec::new();
    let mut recorded_vm_exit_syncs: Vec<u32> = Vec::new();

    for block_idx in 0..num_blocks {
        let kind = build.function.blocks[block_idx].kind;

        if kind == IrBlockKind::Fallback || kind == IrBlockKind::Dead {
            continue;
        }

        if visited[block_idx] != 0 {
            continue;
        }

        mark_dead_stores_in_block_chain(
            build,
            &mut visited,
            &mut remaining_uses,
            &mut block_idx_chain,
            &mut recorded_vm_exit_syncs,
            block_idx as u32,
        );
    }

    if luaur_common::FFlag::LuauCodegenVmExitSync.get() {
        generate_vm_exit_blocks(build, &recorded_vm_exit_syncs);
    }
}