xref: /llvm-project/clang/test/Headers/gpuintrin_lang.c (revision da78ac5d331953d3386fd56cd7979022be7400cf)
1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2 // RUN: %clang_cc1 -internal-isystem %S/Inputs/include \
3 // RUN:   -internal-isystem %S/../../lib/Headers/cuda_wrappers \
4 // RUN:   -internal-isystem %S/../../lib/Headers/ \
5 // RUN:   -fcuda-is-device -triple nvptx64 -emit-llvm %s -o - \
6 // RUN: | FileCheck %s --check-prefix=CUDA
7 //
8 // RUN: %clang_cc1 -internal-isystem %S/Inputs/include \
9 // RUN:   -internal-isystem %S/../../lib/Headers/cuda_wrappers \
10 // RUN:   -internal-isystem %S/../../lib/Headers/ \
11 // RUN:   -fcuda-is-device -triple amdgcn -emit-llvm %s -o - \
12 // RUN: | FileCheck %s --check-prefix=HIP
13 //
14 // RUN: %clang_cc1 -internal-isystem %S/Inputs/include \
15 // RUN:   -internal-isystem %S/../../lib/Headers/ \
16 // RUN:   -cl-std=CL3.0 -triple amdgcn -emit-llvm %s -o - \
17 // RUN: | FileCheck %s --check-prefix=OPENCL
18 //
19 // RUN: %clang_cc1 -internal-isystem %S/Inputs/include \
20 // RUN:   -internal-isystem %S/../../lib/Headers/ -cl-std=CL3.0 \
21 // RUN:   -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa \
22 // RUN:   -fopenmp-is-target-device -triple amdgcn -emit-llvm %s -o - \
23 // RUN: | FileCheck %s --check-prefix=OPENMP
24 //
25 // RUN: %clang_cc1 -internal-isystem %S/Inputs/include \
26 // RUN:   -std=c89 -internal-isystem %S/../../lib/Headers/ \
27 // RUN:   -triple amdgcn-amd-amdhsa -emit-llvm %s -o - \
28 // RUN: | FileCheck %s --check-prefix=C89
29 
30 #define _DEFAULT_FN_ATTRS __attribute__((always_inline))
31 #include <gpuintrin.h>
32 
33 #ifdef __device__
34 __device__ int foo() { return __gpu_thread_id_x(); }
35 #else
36 // CUDA-LABEL: define dso_local i32 @foo(
37 // CUDA-SAME: ) #[[ATTR0:[0-9]+]] {
38 // CUDA-NEXT:  [[ENTRY:.*:]]
39 // CUDA-NEXT:    [[TMP0:%.*]] = call {{.*}}i32 @llvm.nvvm.read.ptx.sreg.tid.x()
40 // CUDA-NEXT:    ret i32 [[TMP0]]
41 //
42 // HIP-LABEL: define dso_local i32 @foo(
43 // HIP-SAME: ) #[[ATTR0:[0-9]+]] {
44 // HIP-NEXT:  [[ENTRY:.*:]]
45 // HIP-NEXT:    [[RETVAL_I:%.*]] = alloca i32, align 4, addrspace(5)
46 // HIP-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5)
47 // HIP-NEXT:    [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr
48 // HIP-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
49 // HIP-NEXT:    [[TMP0:%.*]] = call noundef {{.*}}i32 @llvm.amdgcn.workitem.id.x()
50 // HIP-NEXT:    ret i32 [[TMP0]]
51 //
52 // OPENCL-LABEL: define dso_local i32 @foo(
53 // OPENCL-SAME: ) #[[ATTR0:[0-9]+]] {
54 // OPENCL-NEXT:  [[ENTRY:.*:]]
55 // OPENCL-NEXT:    [[TMP0:%.*]] = call noundef {{.*}}i32 @llvm.amdgcn.workitem.id.x()
56 // OPENCL-NEXT:    ret i32 [[TMP0]]
57 //
58 // OPENMP-LABEL: define hidden i32 @foo(
59 // OPENMP-SAME: ) #[[ATTR0:[0-9]+]] {
60 // OPENMP-NEXT:  [[ENTRY:.*:]]
61 // OPENMP-NEXT:    [[TMP0:%.*]] = call noundef {{.*}}i32 @llvm.amdgcn.workitem.id.x()
62 // OPENMP-NEXT:    ret i32 [[TMP0]]
63 //
64 // C89-LABEL: define dso_local i32 @foo(
65 // C89-SAME: ) #[[ATTR2:[0-9]+]] {
66 // C89-NEXT:  [[ENTRY:.*:]]
67 // C89-NEXT:    [[RETVAL_I:%.*]] = alloca i32, align 4, addrspace(5)
68 // C89-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5)
69 // C89-NEXT:    [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr
70 // C89-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
71 // C89-NEXT:    [[TMP0:%.*]] = call noundef {{.*}}i32 @llvm.amdgcn.workitem.id.x()
72 // C89-NEXT:    ret i32 [[TMP0]]
73 //
74 int foo() { return __gpu_thread_id_x(); }
75 #pragma omp declare target to(foo)
76 #endif
77