Skip to content

Commit 1fb800e

Browse files
committed
generate tgt_target_data_* fnc declarations
1 parent fe5aaec commit 1fb800e

File tree

1 file changed

+25
-20
lines changed
  • compiler/rustc_codegen_llvm/src/back

1 file changed

+25
-20
lines changed

compiler/rustc_codegen_llvm/src/back/lto.rs

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -705,12 +705,33 @@ pub(crate) fn run_pass_manager(
705705
cx.set_struct_body(kernel_arguments_ty, &kernel_elements, false);
706706
let global = cx.declare_global("my_struct_global", offload_entry_ty);
707707
let global = cx.declare_global("my_struct_global2", kernel_arguments_ty);
708-
//@my_struct_global = external global %struct.__tgt_offload_entry
709-
//@my_struct_global2 = external global %struct.__tgt_kernel_arguments
708+
//@my_struct_global = external global %struct.__tgt_offload_entry
709+
//@my_struct_global2 = external global %struct.__tgt_kernel_arguments
710710
dbg!(&offload_entry_ty);
711711
dbg!(&kernel_arguments_ty);
712712
//LLVMTypeRef elements[9] = {i64Ty, i16Ty, i16Ty, i32Ty, ptrTy, ptrTy, i64Ty, i64Ty, ptrTy};
713713
//LLVMStructSetBody(structTy, elements, 9, 0);
714+
715+
// New, to test memtransfer
716+
// ; Function Attrs: nounwind
717+
// declare void @__tgt_target_data_begin_mapper(ptr, i64, i32, ptr, ptr, ptr, ptr, ptr, ptr) #3
718+
//
719+
// ; Function Attrs: nounwind
720+
// declare void @__tgt_target_data_update_mapper(ptr, i64, i32, ptr, ptr, ptr, ptr, ptr, ptr) #3
721+
//
722+
// ; Function Attrs: nounwind
723+
// declare void @__tgt_target_data_end_mapper(ptr, i64, i32, ptr, ptr, ptr, ptr, ptr, ptr) #3
724+
725+
let mapper_begin = "__tgt_target_data_begin_mapper";
726+
let mapper_update = String::from("__tgt_target_data_update_mapper");
727+
let mapper_end = String::from("__tgt_target_data_end_mapper");
728+
let args = vec![tptr, ti64, ti32, tptr, tptr, tptr, tptr, tptr, tptr];
729+
let mapper_fn_ty = cx.type_func(&args, cx.type_void());
730+
let foo = crate::declare::declare_simple_fn(&cx, &mapper_begin, llvm::CallConv::CCallConv, llvm::UnnamedAddr::No, llvm::Visibility::Default, mapper_fn_ty);
731+
let bar = crate::declare::declare_simple_fn(&cx, &mapper_update, llvm::CallConv::CCallConv, llvm::UnnamedAddr::No, llvm::Visibility::Default, mapper_fn_ty);
732+
let baz = crate::declare::declare_simple_fn(&cx, &mapper_end, llvm::CallConv::CCallConv, llvm::UnnamedAddr::No, llvm::Visibility::Default, mapper_fn_ty);
733+
// TODO: add nounwind
734+
714735
dbg!("created struct");
715736
for num in 0..9 {
716737
if !cx.get_function(&format!("kernel_{num}")).is_some() {
@@ -771,7 +792,7 @@ pub(crate) fn run_pass_manager(
771792
llvm::set_section(llglobal, &c_section_name);
772793

773794

774-
// New, TODO: cleanup
795+
// Not actively used yet, for calling real kernels
775796
let name = format!(".offloading.entry.kernel_{num}");
776797
let ci64_0 = cx.get_const_i64(0);
777798
let ci16_1 = cx.get_const_i16(1);
@@ -791,24 +812,8 @@ pub(crate) fn run_pass_manager(
791812
// clang
792813
// @.offloading.entry.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7 = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 0, ptr @.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7.region_id, ptr @.offloading.entry_name, i64 0, i64 0, ptr null }, section "omp_offloading_entries", align 1
793814

815+
794816
//
795-
// enum Flags {
796-
// OMP_REGISTER_REQUIRES = 0x10,
797-
// };
798-
//
799-
// typedef struct {
800-
// void *ImageStart;
801-
// void *ImageEnd;
802-
// __tgt_offload_entry *EntriesBegin;
803-
// __tgt_offload_entry *EntriesEnd;
804-
// } __tgt_device_image;
805-
//
806-
// typedef struct {
807-
// int32_t NumDeviceImages;
808-
// __tgt_device_image *DeviceImages;
809-
// __tgt_offload_entry *HostEntriesBegin;
810-
// __tgt_offload_entry *HostEntriesEnd;
811-
// } __tgt_bin_desc;
812817
// 1. @.offload_sizes.{num} = private unnamed_addr constant [4 x i64] [i64 8, i64 0, i64 16, i64 0]
813818
// 2. @.offload_maptypes
814819
// 3. @.__omp_offloading_<hash>_fnc_name_<hash> = weak constant i8 0

0 commit comments

Comments
 (0)