Skip to main content

luaur_code_gen/functions/
lower_ir_code_gen_lower.rs

1//! @interface-stub
2use crate::functions::lower_impl::lower_impl_x_64;
3use crate::functions::optimize_memory_operands_x_64_optimize_final_x_64_alt_b::optimize_memory_operands_x_64;
4use crate::records::assembly_builder_x_64::AssemblyBuilderX64;
5use crate::records::assembly_options::AssemblyOptions;
6use crate::records::ir_builder::IrBuilder;
7use crate::records::ir_lowering_x_64::IrLoweringX64;
8use crate::records::lowering_stats::LoweringStats;
9use crate::records::module_helpers::ModuleHelpers;
10use luaur_vm::records::proto::Proto;
11
12pub fn lower_ir_x_64_assembly_builder_x_64_ir_builder_vector_u32_module_helpers_proto_assembly_options_lowering_stats(
13    build: &mut AssemblyBuilderX64,
14    ir: &mut IrBuilder,
15    sorted_blocks: &[u32],
16    helpers: &mut ModuleHelpers,
17    proto: *mut Proto,
18    options: AssemblyOptions,
19    stats: *mut LoweringStats,
20) -> bool {
21    optimize_memory_operands_x_64(&mut ir.function);
22
23    let mut lowering =
24        IrLoweringX64::ir_lowering_x_64_ir_lowering_x_64(build, helpers, &mut ir.function, stats);
25    lowering.reset_restore_callback();
26
27    let bytecodeid = unsafe {
28        if proto.is_null() {
29            0
30        } else {
31            (*proto).bytecodeid
32        }
33    };
34
35    unsafe {
36        lower_impl_x_64(
37            build,
38            &mut lowering,
39            &mut ir.function,
40            sorted_blocks,
41            bytecodeid,
42            &options,
43        )
44    }
45}