Skip to content

Commit b120fe9

Browse files
Auto merge of #149788 - Sa4dUs:offload-cleanup, r=<try>
Move shared offload globals and define per-kernel globals once
2 parents ed0006a + 37df9e8 commit b120fe9

File tree

7 files changed

+162
-88
lines changed

7 files changed

+162
-88
lines changed

compiler/rustc_codegen_llvm/src/back/write.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -707,8 +707,7 @@ pub(crate) unsafe fn llvm_optimize(
707707
if cgcx.target_is_like_gpu && config.offload.contains(&config::Offload::Enable) {
708708
let cx =
709709
SimpleCx::new(module.module_llvm.llmod(), module.module_llvm.llcx, cgcx.pointer_size);
710-
// For now we only support up to 10 kernels named kernel_0 ... kernel_9, a follow-up PR is
711-
// introducing a proper offload intrinsic to solve this limitation.
710+
712711
for func in cx.get_functions() {
713712
let offload_kernel = "offload-kernel";
714713
if attributes::has_string_attr(func, offload_kernel) {

compiler/rustc_codegen_llvm/src/base.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@ use rustc_middle::dep_graph;
2323
use rustc_middle::middle::codegen_fn_attrs::{CodegenFnAttrs, SanitizerFnAttrs};
2424
use rustc_middle::mir::mono::Visibility;
2525
use rustc_middle::ty::TyCtxt;
26-
use rustc_session::config::DebugInfo;
26+
use rustc_session::config::{DebugInfo, Offload};
2727
use rustc_span::Symbol;
2828
use rustc_target::spec::SanitizerSet;
2929

3030
use super::ModuleLlvm;
3131
use crate::attributes;
3232
use crate::builder::Builder;
33+
use crate::builder::gpu_offload::OffloadGlobals;
3334
use crate::context::CodegenCx;
3435
use crate::llvm::{self, Value};
3536

@@ -85,6 +86,13 @@ pub(crate) fn compile_codegen_unit(
8586
let llvm_module = ModuleLlvm::new(tcx, cgu_name.as_str());
8687
{
8788
let mut cx = CodegenCx::new(tcx, cgu, &llvm_module);
89+
90+
if cx.sess().opts.unstable_opts.offload.contains(&Offload::Enable)
91+
&& !cx.sess().target.is_like_gpu
92+
{
93+
cx.offload_globals.replace(Some(OffloadGlobals::declare(&cx)));
94+
}
95+
8896
let mono_items = cx.codegen_unit.items_in_deterministic_order(cx.tcx);
8997
for &(mono_item, data) in &mono_items {
9098
mono_item.predefine::<Builder<'_, '_, '_>>(

0 commit comments

Comments
 (0)