| // Checks that the GPU intrinsic to get launch-sized workgroup memory works |
| // and correctly aligns the `external addrspace(...) global`s over multiple calls. |
| |
| //@ revisions: amdgpu nvptx-pre-llvm-23 nvptx-post-llvm-23 |
| //@ compile-flags: --crate-type=rlib -Copt-level=1 |
| // |
| //@ [amdgpu] compile-flags: --target amdgcn-amd-amdhsa -Ctarget-cpu=gfx900 |
| //@ [amdgpu] needs-llvm-components: amdgpu |
| |
| //@ [nvptx-pre-llvm-23] compile-flags: --target nvptx64-nvidia-cuda |
| //@ [nvptx-pre-llvm-23] needs-llvm-components: nvptx |
| //@ [nvptx-pre-llvm-23] max-llvm-major-version: 22 |
| //@ [nvptx-post-llvm-23] compile-flags: --target nvptx64-nvidia-cuda |
| //@ [nvptx-post-llvm-23] needs-llvm-components: nvptx |
| //@ [nvptx-post-llvm-23] min-llvm-version: 23 |
| //@ add-minicore |
| #![feature(intrinsics, no_core, rustc_attrs)] |
| #![no_core] |
| |
| extern crate minicore; |
| |
| #[rustc_intrinsic] |
| #[rustc_nounwind] |
| fn gpu_launch_sized_workgroup_mem<T>() -> *mut T; |
| |
| // amdgpu-DAG: @[[SMALL:[^ ]+]] = external addrspace(3) global [0 x i8], align 4 |
| // amdgpu-DAG: @[[BIG:[^ ]+]] = external addrspace(3) global [0 x i8], align 8 |
| // amdgpu: ret { ptr, ptr } { ptr addrspacecast (ptr addrspace(3) @[[SMALL]] to ptr), ptr addrspacecast (ptr addrspace(3) @[[BIG]] to ptr) } |
| |
| // nvptx-pre-llvm-23: @[[BIG:[^ ]+]] = external addrspace(3) global [0 x i8], align 8 |
| // nvptx-pre-llvm-23: ret { ptr, ptr } { ptr addrspacecast (ptr addrspace(3) @[[BIG]] to ptr), ptr addrspacecast (ptr addrspace(3) @[[BIG]] to ptr) } |
| |
| // nvptx-post-llvm-23-DAG: @[[SMALL:[^ ]+]] = external addrspace(3) global [0 x i8], align 4 |
| // nvptx-post-llvm-23-DAG: @[[BIG:[^ ]+]] = external addrspace(3) global [0 x i8], align 8 |
| // nvptx-post-llvm-23: ret { ptr, ptr } { ptr addrspacecast (ptr addrspace(3) @[[SMALL]] to ptr), ptr addrspacecast (ptr addrspace(3) @[[BIG]] to ptr) } |
| #[unsafe(no_mangle)] |
| pub fn fun() -> (*mut i32, *mut f64) { |
| let small = gpu_launch_sized_workgroup_mem::<i32>(); |
| let big = gpu_launch_sized_workgroup_mem::<f64>(); // Increase alignment to 8 |
| (small, big) |
| } |