@@ -681,7 +681,7 @@ pub(crate) fn run_pass_manager(
681
681
let ti64 = cx. type_i64 ( ) ;
682
682
let ti32 = cx. type_i32 ( ) ;
683
683
let ti16 = cx. type_i16 ( ) ;
684
- let ti16 = cx. type_i8 ( ) ;
684
+ let ti8 = cx. type_i8 ( ) ;
685
685
let tarr = cx. type_array ( ti32, 3 ) ;
686
686
687
687
let entry_elements = vec ! [ ti64, ti16, ti16, ti32, tptr, tptr, ti64, ti64, tptr] ;
@@ -729,17 +729,30 @@ pub(crate) fn run_pass_manager(
729
729
730
730
// Next: For each function, generate these three entries. A weak constant,
731
731
// 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
735
732
733
+ // @.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7.region_id = weak constant i8 0
736
734
let name = format ! ( ".kernel_{num}.region_id" ) ;
737
735
let name = CString :: new ( name) . unwrap ( ) ;
738
736
let entry = llvm:: add_global ( cx. llmod , cx. type_i8 ( ) , & name) ;
739
737
llvm:: set_global_constant ( entry, true ) ;
740
738
llvm:: set_linkage ( entry, llvm:: Linkage :: WeakAnyLinkage ) ;
741
739
llvm:: set_initializer ( entry, cx. get_const_i8 ( 0 ) ) ;
742
740
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
+
743
756
// typedef struct {
744
757
// uint64_t Reserved;
745
758
// uint16_t Version;
0 commit comments