diff --git a/nac3artiq/src/codegen.rs b/nac3artiq/src/codegen.rs index 1ac9d407..d70f249a 100644 --- a/nac3artiq/src/codegen.rs +++ b/nac3artiq/src/codegen.rs @@ -549,6 +549,8 @@ fn rpc_codegen_callback_fn<'ctx>( ctx.builder.build_store(arg_slot, *arg).unwrap(); let arg_slot = if matches!(&*ctx.unifier.get_ty_immutable(*arg_ty), TypeEnum::TObj { obj_id, .. } if *obj_id == PrimDef::NDArray.id()) { + println!("Codegen for ndarray RPC"); + let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, *arg_ty); let llvm_arg_ty = NDArrayType::new(generator, ctx.ctx, ctx.get_llvm_type(generator, elem_ty)); @@ -557,6 +559,8 @@ fn rpc_codegen_callback_fn<'ctx>( let llvm_usize_sizeof = llvm_arg_ty.size_type().size_of(); let llvm_elem_sizeof = llvm_arg_ty.element_type().size_of().unwrap(); + println!("Calc required buffer size"); + let dims_buf_sz = ctx.builder.build_int_mul(llvm_arg.load_ndims(ctx), llvm_usize_sizeof, "").unwrap(); let data_buf_sz = ctx @@ -570,9 +574,13 @@ fn rpc_codegen_callback_fn<'ctx>( let buffer_size = ctx.builder.build_int_add(dims_buf_sz, data_buf_sz, "").unwrap(); + println!("Alloc buffer"); + let buffer = generator.gen_array_var_alloc(ctx, int8.into(), buffer_size, None).unwrap(); + println!("memcpy dim_sizes"); + llvm_intrinsics::call_memcpy_generic( ctx, buffer.base_ptr(ctx, generator), @@ -581,6 +589,8 @@ fn rpc_codegen_callback_fn<'ctx>( int1.const_zero(), ); + println!("memcpy data"); + let pbuffer_data_begin = unsafe { buffer.ptr_offset_unchecked(ctx, generator, &dims_buf_sz, None) }; llvm_intrinsics::call_memcpy_generic( @@ -591,6 +601,8 @@ fn rpc_codegen_callback_fn<'ctx>( int1.const_zero(), ); + println!("done"); + buffer.base_ptr(ctx, generator) } else { ctx.builder