luaur_code_gen/functions/
lower_ir_code_gen_lower.rs1use 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}