// RUN: %clang_cc1 -triple nvptx64-nvidia-cuda -x cuda \ // RUN: -fcuda-is-device -fclangir -emit-cir %s -o %t.cir // RUN: FileCheck --check-prefix=CIR --input-file=%t.cir %s // RUN: %clang_cc1 -triple nvptx64-nvidia-cuda -x cuda \ // RUN: -fcuda-is-device -fclangir -emit-llvm %s -o %t.ll // RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s // RUN: %clang_cc1 -triple nvptx64-nvidia-cuda -x cuda \ // RUN: -fcuda-is-device -emit-llvm %s -o %t.ogcg.ll // RUN: FileCheck --check-prefix=OGCG --input-file=%t.ogcg.ll %s #include "__clang_cuda_builtin_vars.h" __attribute__((global)) void kernel(int *out) { int i = 0; out[i++] = threadIdx.x; out[i++] = threadIdx.y; out[i++] = threadIdx.z; out[i++] = blockIdx.x; out[i++] = blockIdx.y; out[i++] = blockIdx.z; out[i++] = blockDim.x; out[i++] = blockDim.y; out[i++] = blockDim.z; out[i++] = gridDim.x; out[i++] = gridDim.y; out[i++] = gridDim.z; } // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.tid.x" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.tid.y" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.tid.z" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.ctaid.x" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.ctaid.y" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.ctaid.z" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.ntid.x" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.ntid.y" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.ntid.z" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.nctaid.x" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.nctaid.y" // CIR-DAG: cir.call_llvm_intrinsic "nvvm.read.ptx.sreg.nctaid.z" // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.tid.x() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.tid.y() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.tid.z() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.ctaid.x() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.ctaid.y() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.ctaid.z() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.ntid.x() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.ntid.y() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.ntid.z() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.nctaid.x() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.nctaid.y() // LLVM-DAG: call i32 @llvm.nvvm.read.ptx.sreg.nctaid.z() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.tid.x() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.tid.y() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.tid.z() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.ctaid.x() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.ctaid.y() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.ctaid.z() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.ntid.x() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.ntid.y() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.ntid.z() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.nctaid.x() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.nctaid.y() // OGCG-DAG: call noundef i32 @llvm.nvvm.read.ptx.sreg.nctaid.z()