@@ -745,11 +745,19 @@ pub(crate) fn run_pass_manager(
745745 let entry_name = format ! ( "kernel_{num}" ) ;
746746 let c_entry_name = CString :: new ( entry_name) . unwrap ( ) ;
747747 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);
753761 // @.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
754762 // @.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
755763
0 commit comments