xref: /llvm-project/clang/test/CodeGenOpenCL/builtins-amdgcn-wave64.cl (revision c5de4dd1eab00df76c1a68c5f397304ceacb71f2)
1// RUN: %clang_cc1 -cl-std=CL2.0 -triple amdgcn-unknown-unknown -target-feature +wavefrontsize64 -emit-llvm -o - %s | FileCheck -enable-var-scope %s
2// RUN: %clang_cc1 -cl-std=CL2.0 -triple amdgcn-unknown-unknown -target-cpu gfx900 -emit-llvm -o - %s | FileCheck -enable-var-scope %s
3// RUN: %clang_cc1 -cl-std=CL2.0 -triple amdgcn-unknown-unknown -target-cpu gfx900 -target-feature +wavefrontsize64 -emit-llvm -o - %s | FileCheck -enable-var-scope %s
4// RUN: %clang_cc1 -cl-std=CL2.0 -triple amdgcn-unknown-unknown -target-cpu gfx1010 -target-feature +wavefrontsize64 -emit-llvm -o - %s | FileCheck -enable-var-scope %s
5// RUN: %clang_cc1 -cl-std=CL2.0 -triple amdgcn-unknown-unknown -target-cpu gfx1100 -target-feature +wavefrontsize64 -emit-llvm -o - %s | FileCheck -enable-var-scope %s
6
7typedef unsigned long ulong;
8
9// CHECK-LABEL: @test_ballot_wave64(
10// CHECK: call i64 @llvm.amdgcn.ballot.i64(i1 %{{.+}})
11void test_ballot_wave64(global ulong* out, int a, int b)
12{
13  *out = __builtin_amdgcn_ballot_w64(a == b);
14}
15
16// CHECK: declare i64 @llvm.amdgcn.ballot.i64(i1) #[[$NOUNWIND_READONLY:[0-9]+]]
17
18// CHECK-LABEL: @test_ballot_wave64_target_attr(
19// CHECK: call i64 @llvm.amdgcn.ballot.i64(i1 %{{.+}})
20__attribute__((target("wavefrontsize64")))
21void test_ballot_wave64_target_attr(global ulong* out, int a, int b)
22{
23  *out = __builtin_amdgcn_ballot_w64(a == b);
24}
25
26// CHECK-LABEL: @test_read_exec(
27// CHECK: call i64 @llvm.amdgcn.ballot.i64(i1 true)
28void test_read_exec(global ulong* out) {
29  *out = __builtin_amdgcn_read_exec();
30}
31
32// CHECK-LABEL: @test_read_exec_lo(
33// CHECK: call i32 @llvm.amdgcn.ballot.i32(i1 true)
34void test_read_exec_lo(global ulong* out) {
35  *out = __builtin_amdgcn_read_exec_lo();
36}
37
38// CHECK: declare i32 @llvm.amdgcn.ballot.i32(i1) #[[$NOUNWIND_READONLY:[0-9]+]]
39
40// CHECK-LABEL: @test_read_exec_hi(
41// CHECK: call i64 @llvm.amdgcn.ballot.i64(i1 true)
42// CHECK: lshr i64 [[A:%.*]], 32
43void test_read_exec_hi(global ulong* out) {
44  *out = __builtin_amdgcn_read_exec_hi();
45}
46
47#if defined(__AMDGCN_WAVEFRONT_SIZE__) && __AMDGCN_WAVEFRONT_SIZE__ != 64
48#error Wrong wavesize detected
49#endif
50