Skip to content

Commit 834347a

Browse files
committed
Get types from fn_sig
1 parent c534f99 commit 834347a

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

compiler/rustc_codegen_llvm/src/builder/gpu_offload.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,11 @@ pub(crate) fn add_global<'ll>(
261261
// concatenated into the list of region_ids.
262262
pub(crate) fn gen_define_handling<'ll>(
263263
cx: &SimpleCx<'ll>,
264-
llfn: &'ll llvm::Value,
265264
offload_entry_ty: &'ll llvm::Type,
266265
metadata: &Vec<OffloadMetadata>,
266+
types: &Vec<&Type>,
267267
symbol: &str,
268268
) -> (&'ll llvm::Value, &'ll llvm::Value) {
269-
let types = cx.func_params_types(cx.get_type_of_global(llfn));
270269
// It seems like non-pointer values are automatically mapped. So here, we focus on pointer (or
271270
// reference) types.
272271
let ptr_meta = types
@@ -371,6 +370,7 @@ pub(crate) fn gen_call_handling<'ll>(
371370
memtransfer_types: &[&'ll llvm::Value],
372371
region_ids: &[&'ll llvm::Value],
373372
llfn: &'ll Value,
373+
types: &Vec<&Type>,
374374
metadata: &Vec<OffloadMetadata>,
375375
) {
376376
let (tgt_decl, tgt_target_kernel_ty) = generate_launcher(&cx);
@@ -386,7 +386,6 @@ pub(crate) fn gen_call_handling<'ll>(
386386

387387
let mut builder = SBuilder::build(cx, bb);
388388

389-
let types = cx.func_params_types(cx.get_type_of_global(llfn));
390389
let num_args = types.len() as u64;
391390

392391
// Step 0)

compiler/rustc_codegen_llvm/src/intrinsic.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use rustc_symbol_mangling::{mangle_internal_symbol, symbol_name_for_instance_in_
2121
use rustc_target::callconv::PassMode;
2222
use tracing::debug;
2323

24-
use crate::abi::FnAbiLlvmExt;
24+
use crate::abi::{FnAbiLlvmExt, LlvmType};
2525
use crate::builder::Builder;
2626
use crate::builder::autodiff::{adjust_activity_to_abi, generate_enzyme_call};
2727
use crate::builder::gpu_offload::TgtOffloadEntry;
@@ -1272,12 +1272,14 @@ fn codegen_offload<'ll, 'tcx>(
12721272
let metadata = inputs.iter().map(|ty| OffloadMetadata::from_ty(tcx, *ty)).collect::<Vec<_>>();
12731273
let llfn = bx.llfn();
12741274

1275+
let types = inputs.iter().map(|ty| cx.layout_of(*ty).llvm_type(cx)).collect::<Vec<_>>();
1276+
12751277
// TODO(Sa4dUs): separate globals from call-independent headers and use typetrees to reserve the correct amount of memory
12761278
let (memtransfer_type, region_id) = crate::builder::gpu_offload::gen_define_handling(
12771279
cx,
1278-
llfn,
12791280
offload_entry_ty,
12801281
&metadata,
1282+
&types,
12811283
&target_symbol,
12821284
);
12831285

@@ -1289,6 +1291,7 @@ fn codegen_offload<'ll, 'tcx>(
12891291
&[memtransfer_type],
12901292
&[region_id],
12911293
llfn,
1294+
&types,
12921295
&metadata,
12931296
);
12941297
}

0 commit comments

Comments
 (0)