37 lines
1.2 KiB
Rust
37 lines
1.2 KiB
Rust
//@ compile-flags: -Zoffload=Test -Zunstable-options -C opt-level=1 -Clto=fat
|
|
//@ no-prefer-dynamic
|
|
//@ needs-offload
|
|
|
|
// This test verifies that the offload intrinsic is properly handling scalar args, passing them to
|
|
// the kernel as i64
|
|
|
|
#![feature(abi_gpu_kernel)]
|
|
#![feature(rustc_attrs)]
|
|
#![feature(core_intrinsics)]
|
|
#![no_main]
|
|
|
|
// CHECK: define{{( dso_local)?}} void @main()
|
|
// CHECK-NOT: define
|
|
// CHECK: %addr = alloca i64, align 8
|
|
// CHECK: store double 4.200000e+01, ptr %0, align 8
|
|
// CHECK: %_0.i = load double, ptr %0, align 8
|
|
// CHECK: store double %_0.i, ptr %addr, align 8
|
|
// CHECK: %1 = getelementptr inbounds nuw i8, ptr %.offload_baseptrs, i64 8
|
|
// CHECK-NEXT: store double %_0.i, ptr %1, align 8
|
|
// CHECK-NEXT: %2 = getelementptr inbounds nuw i8, ptr %.offload_ptrs, i64 8
|
|
// CHECK-NEXT: store ptr %addr, ptr %2, align 8
|
|
// CHECK-NEXT: %3 = getelementptr inbounds nuw i8, ptr %.offload_sizes, i64 8
|
|
// CHECK-NEXT: store i64 4, ptr %3, align 8
|
|
// CHECK-NEXT: call void @__tgt_target_data_begin_mapper
|
|
|
|
#[unsafe(no_mangle)]
|
|
fn main() {
|
|
let mut x = 0.0;
|
|
let k = core::hint::black_box(42.0);
|
|
|
|
core::intrinsics::offload::<_, _, ()>(foo, [1, 1, 1], [1, 1, 1], (&mut x, k));
|
|
}
|
|
|
|
unsafe extern "C" {
|
|
pub fn foo(x: *mut f32, k: f32);
|
|
}
|