WIP - [artiq] Test

This commit is contained in:
David Mak 2024-08-15 04:08:46 +08:00
parent b3d86f7187
commit 27aada4d59
1 changed files with 181 additions and 151 deletions

View File

@ -568,157 +568,187 @@ fn format_rpc_ret<'ctx>(
let llvm_ret_ty = ctx.get_llvm_abi_type(generator, ret_ty); let llvm_ret_ty = ctx.get_llvm_abi_type(generator, ret_ty);
let result = match &*ctx.unifier.get_ty_immutable(ret_ty) { let result = match &*ctx.unifier.get_ty_immutable(ret_ty) {
// TypeEnum::TObj { obj_id, .. } if *obj_id == PrimDef::NDArray.id() => { TypeEnum::TObj { obj_id, .. } if *obj_id == PrimDef::NDArray.id() => {
// let llvm_i1 = ctx.ctx.bool_type(); let llvm_i1 = ctx.ctx.bool_type();
// let llvm_usize = generator.get_size_type(ctx.ctx); let llvm_usize = generator.get_size_type(ctx.ctx);
//
// let slot = ctx.builder.build_alloca(llvm_ret_ty, "rpc.ret.slot").unwrap(); let slot = ctx.builder.build_alloca(llvm_ret_ty, "rpc.ret.slot").unwrap();
// let (elem_ty, ndims) = unpack_ndarray_var_tys(&mut ctx.unifier, ret_ty); let (elem_ty, ndims) = unpack_ndarray_var_tys(&mut ctx.unifier, ret_ty);
// let llvm_ret_ty = let llvm_ret_ty =
// NDArrayType::new(generator, ctx.ctx, ctx.get_llvm_type(generator, elem_ty)); NDArrayType::new(generator, ctx.ctx, ctx.get_llvm_type(generator, elem_ty));
// let ndarray = llvm_ret_ty.new_value(generator, ctx, None); let ndarray = llvm_ret_ty.new_value(generator, ctx, None);
// ctx.builder.build_store(slot, ndarray.as_base_value()).unwrap();
// let ndims =
// let ndims = if let TypeEnum::TLiteral { values, .. } = &*ctx.unifier.get_ty_immutable(ndims) {
// if let TypeEnum::TLiteral { values, .. } = &*ctx.unifier.get_ty_immutable(ndims) { assert_eq!(values.len(), 1);
// assert_eq!(values.len(), 1);
// u64::try_from(values[0].clone()).unwrap()
// u64::try_from(values[0].clone()).unwrap() } else {
// } else { unreachable!();
// unreachable!(); };
// }; ndarray.store_ndims(ctx, generator, llvm_usize.const_int(ndims, false));
// ndarray.store_ndims(ctx, generator, llvm_usize.const_int(ndims, false)); ndarray.create_dim_sizes(ctx, llvm_usize, ndarray.load_ndims(ctx));
// ndarray.create_dim_sizes(ctx, llvm_usize, ndarray.load_ndims(ctx));
// let buffer = ctx.builder.build_alloca(llvm_ret_ty.as_base_type(), "rpc.ret.slot").unwrap();
// let llvm_usize_sizeof = ctx let slotgen = ctx.builder.build_bitcast(buffer, llvm_pi8, "rpc.ret.ptr").unwrap();
// .builder ctx.builder.build_unconditional_branch(head_bb).unwrap();
// .build_int_truncate_or_bit_cast(llvm_ret_ty.size_type().size_of(), llvm_usize, "") ctx.builder.position_at_end(head_bb);
// .unwrap();
// let llvm_pdata_sizeof = ctx let phi = ctx.builder.build_phi(llvm_pi8, "rpc.ptr").unwrap();
// .builder phi.add_incoming(&[(&slotgen, prehead_bb)]);
// .build_int_truncate_or_bit_cast( let alloc_size = ctx
// llvm_ret_ty.element_type().size_of().unwrap(), .build_call_or_invoke(rpc_recv, &[phi.as_basic_value()], "rpc.size.next")
// llvm_usize, .unwrap()
// "", .into_int_value();
// ) let is_done = ctx
// .unwrap(); .builder
// .build_int_compare(IntPredicate::EQ, llvm_i32.const_zero(), alloc_size, "rpc.done")
// let dims_buf_sz = .unwrap();
// ctx.builder.build_int_mul(ndarray.load_ndims(ctx), llvm_usize_sizeof, "").unwrap();
// ctx.builder.build_conditional_branch(is_done, tail_bb, alloc_bb).unwrap();
// let buffer_size = ctx.builder.position_at_end(alloc_bb);
// ctx.builder.build_int_add(dims_buf_sz, llvm_pdata_sizeof, "").unwrap();
// let buffer_size = ctx.builder.build_left_shift( let alloc_ptr =
// ctx.builder.build_int_add( ctx.builder.build_array_alloca(llvm_pi8, alloc_size, "rpc.alloc").unwrap();
// ctx.builder.build_right_shift( let alloc_ptr =
// buffer_size, ctx.builder.build_bitcast(alloc_ptr, llvm_pi8, "rpc.alloc.ptr").unwrap();
// llvm_usize.const_int(2, false), phi.add_incoming(&[(&alloc_ptr, alloc_bb)]);
// false, ctx.builder.build_unconditional_branch(head_bb).unwrap();
// "",
// ).unwrap(), ctx.builder.position_at_end(tail_bb);
// llvm_usize.const_int(1, false),
// "", ctx.builder.build_store(slot, ndarray.as_base_value()).unwrap();
// ).unwrap(), ctx.builder.build_load(slot, "rpc.result").unwrap()
// llvm_usize.const_int(2, false),
// "", // let llvm_usize_sizeof = ctx
// ).unwrap(); // .builder
// // .build_int_truncate_or_bit_cast(llvm_ret_ty.size_type().size_of(), llvm_usize, "")
// let buffer = // .unwrap();
// ctx.builder.build_array_alloca(llvm_i8, buffer_size, "rpc.buffer").unwrap(); // let llvm_pdata_sizeof = ctx
// let buffer = ArraySliceValue::from_ptr_val(buffer, buffer_size, Some("rpc.buffer")); // .builder
// // .build_int_truncate_or_bit_cast(
// let i_addr = ctx.builder.build_alloca(llvm_usize, "i.addr").unwrap(); // llvm_ret_ty.element_type().size_of().unwrap(),
// ctx.builder.build_unconditional_branch(head_bb).unwrap(); // llvm_usize,
// // "",
// ctx.builder.position_at_end(head_bb); // )
// let phi = ctx.builder.build_phi(llvm_pi8, "rpc.ptr").unwrap(); // .unwrap();
// phi.add_incoming(&[(&buffer.base_ptr(ctx, generator), prehead_bb)]); //
// let alloc_size = ctx // let dims_buf_sz =
// .build_call_or_invoke(rpc_recv, &[phi.as_basic_value()], "rpc.size.next") // ctx.builder.build_int_mul(ndarray.load_ndims(ctx), llvm_usize_sizeof, "").unwrap();
// .map(BasicValueEnum::into_int_value) //
// .unwrap(); // let buffer_size =
// // ctx.builder.build_int_add(dims_buf_sz, llvm_pdata_sizeof, "").unwrap();
// // Parse metadata block(s) for ndarrays // let buffer_size = ctx.builder.build_left_shift(
// gen_if_callback( // ctx.builder.build_int_add(
// generator, // ctx.builder.build_right_shift(
// ctx, // buffer_size,
// |_, ctx| { // llvm_usize.const_int(2, false),
// let i = ctx // false,
// .builder // "",
// .build_load(i_addr, "") // ).unwrap(),
// .map(BasicValueEnum::into_int_value) // llvm_usize.const_int(1, false),
// .unwrap(); // "",
// // ).unwrap(),
// Ok(ctx // llvm_usize.const_int(2, false),
// .builder // "",
// .build_int_compare(IntPredicate::EQ, i, llvm_usize.const_zero(), "") // ).unwrap();
// .unwrap()) //
// }, // let buffer =
// |generator, ctx| { // ctx.builder.build_array_alloca(llvm_i8, buffer_size, "rpc.buffer").unwrap();
// let ppdata = // let buffer = ArraySliceValue::from_ptr_val(buffer, buffer_size, Some("rpc.buffer"));
// generator.gen_var_alloc(ctx, llvm_ret_ty.element_type(), None).unwrap(); //
// ctx.builder // let i_addr = ctx.builder.build_alloca(llvm_usize, "i.addr").unwrap();
// .build_store(ppdata, ndarray.data().base_ptr(ctx, generator)) // ctx.builder.build_unconditional_branch(head_bb).unwrap();
// .unwrap(); //
// call_memcpy_generic( // ctx.builder.position_at_end(head_bb);
// ctx, // let phi = ctx.builder.build_phi(llvm_pi8, "rpc.ptr").unwrap();
// ppdata, // phi.add_incoming(&[(&buffer.base_ptr(ctx, generator), prehead_bb)]);
// buffer.base_ptr(ctx, generator), // let alloc_size = ctx
// llvm_pdata_sizeof, // .build_call_or_invoke(rpc_recv, &[phi.as_basic_value()], "rpc.size.next")
// llvm_i1.const_zero(), // .map(BasicValueEnum::into_int_value)
// ); // .unwrap();
// //
// let pbuffer_dims_begin = unsafe { // // Parse metadata block(s) for ndarrays
// buffer.ptr_offset_unchecked(ctx, generator, &llvm_pdata_sizeof, None) // gen_if_callback(
// }; // generator,
// call_memcpy_generic( // ctx,
// ctx, // |_, ctx| {
// ndarray.dim_sizes().base_ptr(ctx, generator), // let i = ctx
// pbuffer_dims_begin, // .builder
// dims_buf_sz, // .build_load(i_addr, "")
// llvm_i1.const_zero(), // .map(BasicValueEnum::into_int_value)
// ); // .unwrap();
// //
// Ok(()) // Ok(ctx
// }, // .builder
// |_, _| Ok(()), // .build_int_compare(IntPredicate::EQ, i, llvm_usize.const_zero(), "")
// ) // .unwrap())
// .unwrap(); // },
// // |generator, ctx| {
// let is_done = ctx // let ppdata =
// .builder // generator.gen_var_alloc(ctx, llvm_ret_ty.element_type(), None).unwrap();
// .build_int_compare(IntPredicate::EQ, llvm_i32.const_zero(), alloc_size, "rpc.done") // ctx.builder
// .unwrap(); // .build_store(ppdata, ndarray.data().base_ptr(ctx, generator))
// // .unwrap();
// ctx.builder.build_conditional_branch(is_done, tail_bb, alloc_bb).unwrap(); // call_memcpy_generic(
// ctx.builder.position_at_end(alloc_bb); // ctx,
// // ppdata,
// let alloc_size = ctx.builder.build_left_shift( // buffer.base_ptr(ctx, generator),
// ctx.builder.build_int_add( // llvm_pdata_sizeof,
// ctx.builder.build_right_shift( // llvm_i1.const_zero(),
// alloc_size, // );
// llvm_usize.const_int(2, false), //
// false, // let pbuffer_dims_begin = unsafe {
// "", // buffer.ptr_offset_unchecked(ctx, generator, &llvm_pdata_sizeof, None)
// ).unwrap(), // };
// llvm_usize.const_int(1, false), // call_memcpy_generic(
// "", // ctx,
// ).unwrap(), // ndarray.dim_sizes().base_ptr(ctx, generator),
// llvm_usize.const_int(2, false), // pbuffer_dims_begin,
// "", // dims_buf_sz,
// ).unwrap(); // llvm_i1.const_zero(),
// let alloc_ptr = // );
// ctx.builder.build_array_alloca(llvm_i8, alloc_size, "rpc.alloc").unwrap(); //
// phi.add_incoming(&[(&alloc_ptr, alloc_bb)]); // Ok(())
// let i = // },
// ctx.builder.build_load(i_addr, "i").map(BasicValueEnum::into_int_value).unwrap(); // |_, _| Ok(()),
// let i = ctx.builder.build_int_add(i, llvm_usize.const_int(1, false), "").unwrap(); // )
// ctx.builder.build_store(i_addr, i).unwrap(); // .unwrap();
// ctx.builder.build_unconditional_branch(head_bb).unwrap(); //
// // let is_done = ctx
// ctx.builder.position_at_end(tail_bb); // .builder
// ctx.builder.build_load(slot, "rpc.result").unwrap() // .build_int_compare(IntPredicate::EQ, llvm_i32.const_zero(), alloc_size, "rpc.done")
// } // .unwrap();
//
// ctx.builder.build_conditional_branch(is_done, tail_bb, alloc_bb).unwrap();
// ctx.builder.position_at_end(alloc_bb);
//
// let alloc_size = ctx.builder.build_left_shift(
// ctx.builder.build_int_add(
// ctx.builder.build_right_shift(
// alloc_size,
// llvm_usize.const_int(2, false),
// false,
// "",
// ).unwrap(),
// llvm_usize.const_int(1, false),
// "",
// ).unwrap(),
// llvm_usize.const_int(2, false),
// "",
// ).unwrap();
// let alloc_ptr =
// ctx.builder.build_array_alloca(llvm_i8, alloc_size, "rpc.alloc").unwrap();
// phi.add_incoming(&[(&alloc_ptr, alloc_bb)]);
// let i =
// ctx.builder.build_load(i_addr, "i").map(BasicValueEnum::into_int_value).unwrap();
// let i = ctx.builder.build_int_add(i, llvm_usize.const_int(1, false), "").unwrap();
// ctx.builder.build_store(i_addr, i).unwrap();
// ctx.builder.build_unconditional_branch(head_bb).unwrap();
//
// ctx.builder.position_at_end(tail_bb);
// ctx.builder.build_load(slot, "rpc.result").unwrap()
}
_ => { _ => {
let slot = ctx.builder.build_alloca(llvm_ret_ty, "rpc.ret.slot").unwrap(); let slot = ctx.builder.build_alloca(llvm_ret_ty, "rpc.ret.slot").unwrap();