Skip to content

Commit f7ac23e

Browse files
committed
cleanup
1 parent 5266b7c commit f7ac23e

File tree

1 file changed

+21
-29
lines changed
  • compiler/rustc_codegen_llvm/src/back

1 file changed

+21
-29
lines changed

compiler/rustc_codegen_llvm/src/back/lto.rs

Lines changed: 21 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,16 @@ use rustc_middle::middle::exported_symbols::{SymbolExportInfo, SymbolExportLevel
2222
use rustc_session::config::{self, CrateType, Lto};
2323
use tracing::{debug, info};
2424

25+
use llvm::Linkage::*;
26+
2527
use crate::back::write::{
2628
self, CodegenDiagnosticsStage, DiagnosticHandlers, bitcode_section_name, save_temp_bitcode,
2729
};
2830
use crate::errors::{
2931
DynamicLinkingWithLTO, LlvmError, LtoBitcodeFromRlib, LtoDisallowed, LtoDylib, LtoProcMacro,
3032
};
3133
use crate::llvm::AttributePlace::Function;
32-
use crate::llvm::{self, build_string};
34+
use crate::llvm::{self, build_string, Linkage};
3335
use crate::{LlvmCodegenBackend, ModuleLlvm, SimpleCx, attributes};
3436

3537
/// We keep track of the computed LTO cache keys from the previous
@@ -701,28 +703,31 @@ pub(crate) fn run_pass_manager(
701703
continue;
702704
}
703705

704-
fn add_priv_unnamed_arr(cx: &SimpleCx<'_>, name: &str, vals: &[u64]) {
706+
fn add_priv_unnamed_arr<'ll>(cx: &SimpleCx<'ll>, name: &str, vals: &[u64]) -> &'ll llvm::Value{
705707
let ti64 = cx.type_i64();
706708
let size_ty = cx.type_array(ti64, vals.len() as u64);
707709
let mut size_val = Vec::with_capacity(vals.len());
708710
for &val in vals {
709711
size_val.push(cx.get_const_i64(val));
710712
}
711713
let initializer = cx.const_array(ti64, &size_val);
712-
let c_name = CString::new(name).unwrap();
713-
let array = llvm::add_global(cx.llmod, cx.val_ty(initializer), &c_name );
714-
llvm::set_global_constant(array, true);
715-
unsafe {llvm::LLVMSetUnnamedAddress(array, llvm::UnnamedAddr::Global)};
716-
llvm::set_linkage(array, llvm::Linkage::PrivateLinkage);
717-
llvm::set_initializer(array, initializer);
714+
add_global(cx, name, initializer, PrivateLinkage)
715+
}
718716

717+
fn add_global<'ll>(cx: &SimpleCx<'ll>, name: &str, initializer: &'ll llvm::Value, l: Linkage) -> &'ll llvm::Value {
718+
let c_name = CString::new(name).unwrap();
719+
let llglobal: &'ll llvm::Value = llvm::add_global(cx.llmod, cx.val_ty(initializer), &c_name);
720+
llvm::set_global_constant(llglobal, true);
721+
unsafe {llvm::LLVMSetUnnamedAddress(llglobal, llvm::UnnamedAddr::Global)};
722+
llvm::set_linkage(llglobal, l);
723+
llvm::set_initializer(llglobal, initializer);
724+
llglobal
719725
}
720726

721727
// We add a pair of sizes and maptypes per offloadable function.
722728
// @.offload_maptypes = private unnamed_addr constant [4 x i64] [i64 800, i64 544, i64 547, i64 544]
723-
let array = add_priv_unnamed_arr(&cx, &format!(".offload_sizes.{num}"), &vec![8u64,0,16,0]);
724-
let maptypes = add_priv_unnamed_arr(&cx, &format!(".offload_maptypes.{num}"), &vec![800u64, 544, 547, 544]);
725-
dbg!(&array);
729+
let o_sizes = add_priv_unnamed_arr(&cx, &format!(".offload_sizes.{num}"), &vec![8u64,0,16,0]);
730+
let o_types = add_priv_unnamed_arr(&cx, &format!(".offload_maptypes.{num}"), &vec![800u64, 544, 547, 544]);
726731
// TODO: We should add another pair per call to offloadable functions
727732
// @.offload_sizes.5 = private unnamed_addr constant [2 x i64] [i64 16384, i64 16384]
728733
// @.offload_maptypes.6 = private unnamed_addr constant [2 x i64] [i64 1, i64 3]
@@ -732,32 +737,19 @@ pub(crate) fn run_pass_manager(
732737

733738
// @.__omp_offloading_86fafab6_c40006a1__Z3fooPSt7complexIdES1_S0_m_l7.region_id = weak constant i8 0
734739
let name = format!(".kernel_{num}.region_id");
735-
let name = CString::new(name).unwrap();
736-
let entry = llvm::add_global(cx.llmod, cx.type_i8(), &name);
737-
llvm::set_global_constant(entry, true);
738-
llvm::set_linkage(entry, llvm::Linkage::WeakAnyLinkage);
739-
llvm::set_initializer(entry, cx.get_const_i8(0));
740-
741-
742-
let section_name = format!(".llvm.rodata.offloading");
743-
let c_section_name = CString::new(section_name).unwrap();
740+
let initializer = cx.get_const_i8(0);
741+
add_global(&cx, &name, initializer, WeakAnyLinkage);
744742

745743
let entry_name = format!("kernel_{num}");
746744
let c_entry_name = CString::new(entry_name).unwrap();
747745
let c_val = c_entry_name.as_bytes_with_nul();
748746
let foo = format!(".offloading.entry_name.{num}");
749-
let c_foo = CString::new(foo).unwrap();
750747

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);
748+
let initializer = crate::common::bytes_in_context(cx.llcx, c_val);
749+
let llglobal = add_global(&cx, &foo, initializer, InternalLinkage);
754750
llvm::set_alignment(llglobal, rustc_abi::Align::ONE);
751+
let c_section_name = CString::new(".llvm.rodata.offloading").unwrap();
755752
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);
761753
// @.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
762754
// @.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
763755

0 commit comments

Comments
 (0)