WIP - [artiq] Nope

This commit is contained in:
David Mak 2024-08-14 18:12:13 +08:00
parent 2b2cc06776
commit 6afcd37b83
1 changed files with 111 additions and 111 deletions

View File

@ -567,117 +567,117 @@ 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 (elem_ty, ndims) = unpack_ndarray_var_tys(&mut ctx.unifier, ret_ty);
let llvm_ret_ty =
NDArrayType::new(generator, ctx.ctx, ctx.get_llvm_type(generator, elem_ty));
let llvm_usize_sizeof = ctx
.builder
.build_int_truncate_or_bit_cast(llvm_ret_ty.size_type().size_of(), llvm_usize, "")
.unwrap();
let llvm_pdata_sizeof = ctx
.builder
.build_int_truncate_or_bit_cast(
llvm_ret_ty.element_type().ptr_type(AddressSpace::default()).size_of(),
llvm_usize,
"",
)
.unwrap();
let slot_addr = ctx.builder.build_alloca(llvm_ret_ty.as_base_type(), "rpc.ret.slot.addr").unwrap();
let slot = ctx.builder.build_load(slot_addr, "rpc.ret.slot").map(BasicValueEnum::into_pointer_value).unwrap();
let llvm_ndarray = NDArrayValue::from_ptr_val(slot, llvm_usize, None);
let ndims = if let TypeEnum::TLiteral { values, .. } = &*ctx.unifier.get_ty_immutable(ndims) {
assert_eq!(values.len(), 1);
u64::try_from(values[0].clone()).unwrap()
} else {
unreachable!();
};
llvm_ndarray.store_ndims(ctx, generator, llvm_usize.const_int(ndims, false));
llvm_ndarray.create_dim_sizes(ctx, llvm_usize, llvm_ndarray.load_ndims(ctx));
unsafe {
llvm_ndarray.dim_sizes().set_typed_unchecked(ctx, generator, &llvm_usize.const_zero(), llvm_usize.const_int(1, false));
}
ctx.builder.build_unconditional_branch(tail_bb).unwrap();
// let dims_buf_sz =
// ctx.builder.build_int_mul(llvm_ndarray.load_ndims(ctx), llvm_usize_sizeof, "").unwrap();
// //
// let buffer_size = // let (elem_ty, ndims) = unpack_ndarray_var_tys(&mut ctx.unifier, ret_ty);
// ctx.builder.build_int_add(dims_buf_sz, llvm_pdata_sizeof, "").unwrap(); // let llvm_ret_ty =
// NDArrayType::new(generator, ctx.ctx, ctx.get_llvm_type(generator, elem_ty));
// //
// let buffer = ctx.builder.build_array_alloca(llvm_i8, buffer_size, "rpc.buffer").unwrap(); // let llvm_usize_sizeof = ctx
// let buffer = ArraySliceValue::from_ptr_val(buffer, buffer_size, Some("rpc.buffer"));
//
// // recv [*data, dim_sz[..]]
// let alloc_size = ctx
// .build_call_or_invoke(rpc_recv, &[buffer.base_ptr(ctx, generator).into()], "rpc.size.next")
// .map(BasicValueEnum::into_int_value)
// .unwrap();
//
// let ppdata = generator.gen_var_alloc(ctx, llvm_ret_ty.element_type(), None).unwrap();
// ctx.builder.build_store(ppdata, llvm_ndarray.data().base_ptr(ctx, generator)).unwrap();
// call_memcpy_generic(
// ctx,
// ppdata,
// buffer.base_ptr(ctx, generator),
// llvm_pdata_sizeof,
// llvm_i1.const_zero(),
// );
//
// let pbuffer_dims_begin =
// unsafe { buffer.ptr_offset_unchecked(ctx, generator, &llvm_pdata_sizeof, None) };
// call_memcpy_generic(
// ctx,
// llvm_ndarray.dim_sizes().base_ptr(ctx, generator),
// pbuffer_dims_begin,
// dims_buf_sz,
// llvm_i1.const_zero(),
// );
//
// let is_done = ctx
// .builder // .builder
// .build_int_compare(IntPredicate::EQ, llvm_i32.const_zero(), alloc_size, "rpc.done") // .build_int_truncate_or_bit_cast(llvm_ret_ty.size_type().size_of(), llvm_usize, "")
// .unwrap(); // .unwrap();
// // let llvm_pdata_sizeof = ctx
// let alloc_ptr = ctx.builder.build_array_alloca(llvm_pi8, alloc_size, "rpc.alloc").unwrap();
// let alloc_ptr = ctx.builder.build_bitcast(alloc_ptr, llvm_pi8, "rpc.alloc.ptr").map(BasicValueEnum::into_pointer_value).unwrap();
//
// ctx.builder.build_conditional_branch(is_done, tail_bb, head_bb).unwrap();
//
ctx.builder.position_at_end(head_bb);
ctx.builder.build_unreachable().unwrap();
// let phi = ctx.builder.build_phi(llvm_pi8, "rpc.ptr").unwrap();
// phi.add_incoming(&[(&alloc_ptr, prehead_bb)]);
// let alloc_size = ctx
// .build_call_or_invoke(rpc_recv, &[phi.as_basic_value()], "rpc.size.next")
// .unwrap()
// .into_int_value();
// let is_done = ctx
// .builder // .builder
// .build_int_compare(IntPredicate::EQ, llvm_i32.const_zero(), alloc_size, "rpc.done") // .build_int_truncate_or_bit_cast(
// llvm_ret_ty.element_type().ptr_type(AddressSpace::default()).size_of(),
// llvm_usize,
// "",
// )
// .unwrap(); // .unwrap();
// ctx.builder.build_conditional_branch(is_done, tail_bb, alloc_bb).unwrap();
// //
ctx.builder.position_at_end(alloc_bb); // let slot_addr = ctx.builder.build_alloca(llvm_ret_ty.as_base_type(), "rpc.ret.slot.addr").unwrap();
ctx.builder.build_unreachable().unwrap(); // let slot = ctx.builder.build_load(slot_addr, "rpc.ret.slot").map(BasicValueEnum::into_pointer_value).unwrap();
// let alloc_ptr = ctx.builder.build_array_alloca(llvm_pi8, alloc_size, "rpc.alloc").unwrap(); // let llvm_ndarray = NDArrayValue::from_ptr_val(slot, llvm_usize, None);
// let alloc_ptr = ctx.builder.build_bitcast(alloc_ptr, llvm_pi8, "rpc.alloc.ptr").unwrap();
// phi.add_incoming(&[(&alloc_ptr, alloc_bb)]);
// ctx.builder.build_unconditional_branch(head_bb).unwrap();
// //
ctx.builder.position_at_end(tail_bb); // let ndims = if let TypeEnum::TLiteral { values, .. } = &*ctx.unifier.get_ty_immutable(ndims) {
// assert_eq!(values.len(), 1);
ctx.builder.build_load(slot_addr, "rpc.result").unwrap() //
} // u64::try_from(values[0].clone()).unwrap()
// } else {
// unreachable!();
// };
// llvm_ndarray.store_ndims(ctx, generator, llvm_usize.const_int(ndims, false));
// llvm_ndarray.create_dim_sizes(ctx, llvm_usize, llvm_ndarray.load_ndims(ctx));
//
// unsafe {
// llvm_ndarray.dim_sizes().set_typed_unchecked(ctx, generator, &llvm_usize.const_zero(), llvm_usize.const_int(1, false));
// }
//
// ctx.builder.build_unconditional_branch(tail_bb).unwrap();
//
// // let dims_buf_sz =
// // ctx.builder.build_int_mul(llvm_ndarray.load_ndims(ctx), llvm_usize_sizeof, "").unwrap();
// //
// // let buffer_size =
// // ctx.builder.build_int_add(dims_buf_sz, llvm_pdata_sizeof, "").unwrap();
// //
// // let buffer = ctx.builder.build_array_alloca(llvm_i8, buffer_size, "rpc.buffer").unwrap();
// // let buffer = ArraySliceValue::from_ptr_val(buffer, buffer_size, Some("rpc.buffer"));
// //
// // // recv [*data, dim_sz[..]]
// // let alloc_size = ctx
// // .build_call_or_invoke(rpc_recv, &[buffer.base_ptr(ctx, generator).into()], "rpc.size.next")
// // .map(BasicValueEnum::into_int_value)
// // .unwrap();
// //
// // let ppdata = generator.gen_var_alloc(ctx, llvm_ret_ty.element_type(), None).unwrap();
// // ctx.builder.build_store(ppdata, llvm_ndarray.data().base_ptr(ctx, generator)).unwrap();
// // call_memcpy_generic(
// // ctx,
// // ppdata,
// // buffer.base_ptr(ctx, generator),
// // llvm_pdata_sizeof,
// // llvm_i1.const_zero(),
// // );
// //
// // let pbuffer_dims_begin =
// // unsafe { buffer.ptr_offset_unchecked(ctx, generator, &llvm_pdata_sizeof, None) };
// // call_memcpy_generic(
// // ctx,
// // llvm_ndarray.dim_sizes().base_ptr(ctx, generator),
// // pbuffer_dims_begin,
// // dims_buf_sz,
// // llvm_i1.const_zero(),
// // );
// //
// // let is_done = ctx
// // .builder
// // .build_int_compare(IntPredicate::EQ, llvm_i32.const_zero(), alloc_size, "rpc.done")
// // .unwrap();
// //
// // let alloc_ptr = ctx.builder.build_array_alloca(llvm_pi8, alloc_size, "rpc.alloc").unwrap();
// // let alloc_ptr = ctx.builder.build_bitcast(alloc_ptr, llvm_pi8, "rpc.alloc.ptr").map(BasicValueEnum::into_pointer_value).unwrap();
// //
// // ctx.builder.build_conditional_branch(is_done, tail_bb, head_bb).unwrap();
// //
// ctx.builder.position_at_end(head_bb);
// ctx.builder.build_unreachable().unwrap();
// // let phi = ctx.builder.build_phi(llvm_pi8, "rpc.ptr").unwrap();
// // phi.add_incoming(&[(&alloc_ptr, prehead_bb)]);
// // let alloc_size = ctx
// // .build_call_or_invoke(rpc_recv, &[phi.as_basic_value()], "rpc.size.next")
// // .unwrap()
// // .into_int_value();
// // let is_done = ctx
// // .builder
// // .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);
// ctx.builder.build_unreachable().unwrap();
// // let alloc_ptr = ctx.builder.build_array_alloca(llvm_pi8, alloc_size, "rpc.alloc").unwrap();
// // let alloc_ptr = ctx.builder.build_bitcast(alloc_ptr, llvm_pi8, "rpc.alloc.ptr").unwrap();
// // phi.add_incoming(&[(&alloc_ptr, alloc_bb)]);
// // ctx.builder.build_unconditional_branch(head_bb).unwrap();
// //
// ctx.builder.position_at_end(tail_bb);
//
// ctx.builder.build_load(slot_addr, "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();