diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:11:37 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:11:37 +0000 |
commit | 461a67fa15370a9ec88f8f8a240bf7c123bb2029 (patch) | |
tree | 6942083d7d56bba40ec790a453ca58ad3baf6832 /test/CodeGen/builtins-nvptx-ptx60.cu | |
parent | 75c3240472ba6ac2669ee72ca67eb72d4e2851fc (diff) |
Vendor import of clang trunk r321017:vendor/clang/clang-trunk-r321017
Notes
Notes:
svn path=/vendor/clang/dist/; revision=326941
svn path=/vendor/clang/clang-trunk-r321017/; revision=326942; tag=vendor/clang/clang-trunk-r321017
Diffstat (limited to 'test/CodeGen/builtins-nvptx-ptx60.cu')
-rw-r--r-- | test/CodeGen/builtins-nvptx-ptx60.cu | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/test/CodeGen/builtins-nvptx-ptx60.cu b/test/CodeGen/builtins-nvptx-ptx60.cu new file mode 100644 index 000000000000..11db9ac46ea5 --- /dev/null +++ b/test/CodeGen/builtins-nvptx-ptx60.cu @@ -0,0 +1,97 @@ +// RUN: %clang_cc1 -triple nvptx64-unknown-unknown -target-cpu sm_60 \ +// RUN: -fcuda-is-device -target-feature +ptx60 \ +// RUN: -S -emit-llvm -o - -x cuda %s \ +// RUN: | FileCheck -check-prefix=CHECK %s +// RUN: %clang_cc1 -triple nvptx-unknown-unknown -target-cpu sm_60 \ +// RUN: -fcuda-is-device -S -o /dev/null -x cuda -verify %s + +#define __device__ __attribute__((device)) +#define __global__ __attribute__((global)) +#define __shared__ __attribute__((shared)) +#define __constant__ __attribute__((constant)) + +typedef unsigned long long uint64_t; + +// We have to keep all builtins that depend on particular target feature in the +// same function, because the codegen will stop after the very first function +// that encounters an error, so -verify will not be able to find errors in +// subsequent functions. + +// CHECK-LABEL: nvvm_sync +__device__ void nvvm_sync(unsigned mask, int i, float f, int a, int b, + bool pred, uint64_t i64) { + + // CHECK: call void @llvm.nvvm.bar.warp.sync(i32 + // expected-error@+1 {{'__nvvm_bar_warp_sync' needs target feature ptx60}} + __nvvm_bar_warp_sync(mask); + // CHECK: call void @llvm.nvvm.barrier.sync(i32 + // expected-error@+1 {{'__nvvm_barrier_sync' needs target feature ptx60}} + __nvvm_barrier_sync(mask); + // CHECK: call void @llvm.nvvm.barrier.sync.cnt(i32 + // expected-error@+1 {{'__nvvm_barrier_sync_cnt' needs target feature ptx60}} + __nvvm_barrier_sync_cnt(mask, i); + + // + // SHFL.SYNC + // + // CHECK: call i32 @llvm.nvvm.shfl.sync.down.i32(i32 {{%[0-9]+}}, i32 + // expected-error@+1 {{'__nvvm_shfl_sync_down_i32' needs target feature ptx60}} + __nvvm_shfl_sync_down_i32(mask, i, a, b); + // CHECK: call float @llvm.nvvm.shfl.sync.down.f32(i32 {{%[0-9]+}}, float + // expected-error@+1 {{'__nvvm_shfl_sync_down_f32' needs target feature ptx60}} + __nvvm_shfl_sync_down_f32(mask, f, a, b); + // CHECK: call i32 @llvm.nvvm.shfl.sync.up.i32(i32 {{%[0-9]+}}, i32 + // expected-error@+1 {{'__nvvm_shfl_sync_up_i32' needs target feature ptx60}} + __nvvm_shfl_sync_up_i32(mask, i, a, b); + // CHECK: call float @llvm.nvvm.shfl.sync.up.f32(i32 {{%[0-9]+}}, float + // expected-error@+1 {{'__nvvm_shfl_sync_up_f32' needs target feature ptx60}} + __nvvm_shfl_sync_up_f32(mask, f, a, b); + // CHECK: call i32 @llvm.nvvm.shfl.sync.bfly.i32(i32 {{%[0-9]+}}, i32 + // expected-error@+1 {{'__nvvm_shfl_sync_bfly_i32' needs target feature ptx60}} + __nvvm_shfl_sync_bfly_i32(mask, i, a, b); + // CHECK: call float @llvm.nvvm.shfl.sync.bfly.f32(i32 {{%[0-9]+}}, float + // expected-error@+1 {{'__nvvm_shfl_sync_bfly_f32' needs target feature ptx60}} + __nvvm_shfl_sync_bfly_f32(mask, f, a, b); + // CHECK: call i32 @llvm.nvvm.shfl.sync.idx.i32(i32 {{%[0-9]+}}, i32 + // expected-error@+1 {{'__nvvm_shfl_sync_idx_i32' needs target feature ptx60}} + __nvvm_shfl_sync_idx_i32(mask, i, a, b); + // CHECK: call float @llvm.nvvm.shfl.sync.idx.f32(i32 {{%[0-9]+}}, float + // expected-error@+1 {{'__nvvm_shfl_sync_idx_f32' needs target feature ptx60}} + __nvvm_shfl_sync_idx_f32(mask, f, a, b); + + // + // VOTE.SYNC + // + + // CHECK: call i1 @llvm.nvvm.vote.all.sync(i32 + // expected-error@+1 {{'__nvvm_vote_all_sync' needs target feature ptx60}} + __nvvm_vote_all_sync(mask, pred); + // CHECK: call i1 @llvm.nvvm.vote.any.sync(i32 + // expected-error@+1 {{'__nvvm_vote_any_sync' needs target feature ptx60}} + __nvvm_vote_any_sync(mask, pred); + // CHECK: call i1 @llvm.nvvm.vote.uni.sync(i32 + // expected-error@+1 {{'__nvvm_vote_uni_sync' needs target feature ptx60}} + __nvvm_vote_uni_sync(mask, pred); + // CHECK: call i32 @llvm.nvvm.vote.ballot.sync(i32 + // expected-error@+1 {{'__nvvm_vote_ballot_sync' needs target feature ptx60}} + __nvvm_vote_ballot_sync(mask, pred); + + // + // MATCH.{ALL,ANY}.SYNC + // + + // CHECK: call i32 @llvm.nvvm.match.any.sync.i32(i32 + // expected-error@+1 {{'__nvvm_match_any_sync_i32' needs target feature ptx60}} + __nvvm_match_any_sync_i32(mask, i); + // CHECK: call i64 @llvm.nvvm.match.any.sync.i64(i32 + // expected-error@+1 {{'__nvvm_match_any_sync_i64' needs target feature ptx60}} + __nvvm_match_any_sync_i64(mask, i64); + // CHECK: call { i32, i1 } @llvm.nvvm.match.all.sync.i32p(i32 + // expected-error@+1 {{'__nvvm_match_all_sync_i32p' needs target feature ptx60}} + __nvvm_match_all_sync_i32p(mask, i, &i); + // CHECK: call { i64, i1 } @llvm.nvvm.match.all.sync.i64p(i32 + // expected-error@+1 {{'__nvvm_match_all_sync_i64p' needs target feature ptx60}} + __nvvm_match_all_sync_i64p(mask, i64, &i); + + // CHECK: ret void +} |