From ad1b2dfd8803c612919878f4a6a37dbc6600b498 Mon Sep 17 00:00:00 2001 From: David Mak Date: Wed, 14 Aug 2024 18:17:25 +0800 Subject: [PATCH] WIP - [artiq] only change slot --- nac3artiq/src/codegen.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/nac3artiq/src/codegen.rs b/nac3artiq/src/codegen.rs index 2046b685..f9e73d0c 100644 --- a/nac3artiq/src/codegen.rs +++ b/nac3artiq/src/codegen.rs @@ -680,7 +680,14 @@ fn format_rpc_ret<'ctx>( // } _ => { - let slot = ctx.builder.build_alloca(llvm_ret_ty, "rpc.ret.slot").unwrap(); + let llvm_usize = generator.get_size_type(ctx.ctx); + + let _slot = ctx.builder.build_alloca(llvm_ret_ty, "rpc.ret.slot").unwrap(); + let slot = if matches!(&*ctx.unifier.get_ty_immutable(ret_ty), TypeEnum::TObj { obj_id, .. } if *obj_id == PrimDef::NDArray.id()) { + ctx.builder.build_array_alloca(llvm_i8, llvm_usize.const_int(8, false), "").unwrap() + } else { + _slot + }; let slotgen = ctx.builder.build_bitcast(slot, llvm_pi8, "rpc.ret.ptr").unwrap(); ctx.builder.build_unconditional_branch(head_bb).unwrap(); ctx.builder.position_at_end(head_bb); @@ -706,7 +713,7 @@ fn format_rpc_ret<'ctx>( ctx.builder.position_at_end(tail_bb); - ctx.builder.build_load(slot, "rpc.result").unwrap() + ctx.builder.build_load(_slot, "rpc.result").unwrap() } };