@@ -745,11 +745,19 @@ pub(crate) fn run_pass_manager(
745
745
let entry_name = format ! ( "kernel_{num}" ) ;
746
746
let c_entry_name = CString :: new ( entry_name) . unwrap ( ) ;
747
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) ;
748
+ let foo = format ! ( ".offloading.entry_name.{num}" ) ;
749
+ let c_foo = CString :: new ( foo) . unwrap ( ) ;
750
+
751
+ let llconst = crate :: common:: bytes_in_context ( cx. llcx , c_val) ;
752
+ let llglobal =
753
+ llvm:: add_global ( cx. llmod , crate :: common:: val_ty ( llconst) , & c_foo) ;
754
+ llvm:: set_alignment ( llglobal, rustc_abi:: Align :: ONE ) ;
755
+ llvm:: set_section ( llglobal, & c_section_name) ;
756
+ llvm:: set_global_constant ( llglobal, true ) ;
757
+ llvm:: set_linkage ( llglobal, llvm:: Linkage :: InternalLinkage ) ;
758
+ unsafe { llvm:: LLVMSetUnnamedAddress ( llglobal, llvm:: UnnamedAddr :: Global ) } ;
759
+ llvm:: set_initializer ( llglobal, llconst) ;
760
+ //dbg!(&foo);
753
761
// @.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
762
// @.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
763
0 commit comments