blob: 67863decf980e4927db75a70de883f81c668a215 [file] [edit]
// 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()