Skip to content

Commit d0e29d2

Browse files
committed
wip
1 parent 51a03d9 commit d0e29d2

File tree

1 file changed

+17
-4
lines changed
  • compiler/rustc_codegen_llvm/src/back

1 file changed

+17
-4
lines changed

compiler/rustc_codegen_llvm/src/back/lto.rs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ pub(crate) fn run_pass_manager(
681681
let ti64 = cx.type_i64();
682682
let ti32 = cx.type_i32();
683683
let ti16 = cx.type_i16();
684-
let ti16 = cx.type_i8();
684+
let ti8 = cx.type_i8();
685685
let tarr = cx.type_array(ti32, 3);
686686

687687
let entry_elements = vec![ti64, ti16, ti16, ti32, tptr, tptr, ti64, ti64, tptr];
@@ -729,17 +729,30 @@ pub(crate) fn run_pass_manager(
729729

730730
// Next: For each function, generate these three entries. A weak constant,
731731
// the llvm.rodata entry name, and the omp_offloading_entries value
732-
// @.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7.region_id = weak constant i8 0
733-
// @.offloading.entry_name = internal unnamed_addr constant [66 x i8] c"__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7\00", section ".llvm.rodata.offloading", align 1
734-
// @.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
735732

733+
// @.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7.region_id = weak constant i8 0
736734
let name = format!(".kernel_{num}.region_id");
737735
let name = CString::new(name).unwrap();
738736
let entry = llvm::add_global(cx.llmod, cx.type_i8(), &name);
739737
llvm::set_global_constant(entry, true);
740738
llvm::set_linkage(entry, llvm::Linkage::WeakAnyLinkage);
741739
llvm::set_initializer(entry, cx.get_const_i8(0));
742740

741+
742+
let section_name = format!(".llvm.rodata.offloading");
743+
let c_section_name = CString::new(section_name).unwrap();
744+
745+
let entry_name = format!("kernel_{num}");
746+
let c_entry_name = CString::new(entry_name).unwrap();
747+
let c_val = c_entry_name.as_bytes_with_nul();
748+
//let const_name = cx.const_bytes(c_val);
749+
let len = u64::try_from(c_val.len()).expect("LLVMConstArray2 elements len overflow");
750+
let foo = unsafe { llvm::LLVMConstArray2(ti8, c_val.as_ptr(), len) };
751+
llvm::set_alignment(foo, rustc_abi::Align::ONE);
752+
dbg!(&foo);
753+
// @.offloading.entry_name = internal unnamed_addr constant [66 x i8] c"__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7\00", section ".llvm.rodata.offloading", align 1
754+
// @.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
755+
743756
// typedef struct {
744757
// uint64_t Reserved;
745758
// uint16_t Version;

0 commit comments

Comments
 (0)