1 // REQUIRES
: amdgpu-registered-target
2 // RUN
: %clang_cc1 -cl-std
=CL2.0 -triple amdgcn-unknown-unknown -D__AMDGCN_WAVEFRONT_SIZE
=32 -target-feature
+wavefrontsize32 -emit-llvm -o - %s | FileCheck -enable-var-scope %s
3 // RUN
: %clang_cc1 -cl-std
=CL2.0 -triple amdgcn-unknown-unknown -target-cpu gfx1010 -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
+wavefrontsize32 -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
+wavefrontsize32 -emit-llvm -o - %s | FileCheck -enable-var-scope %s
7 typedef unsigned int uint
;
10 // CHECK-LABEL
: @test_ballot_wave32
(
11 // CHECK
: call i32
@llvm.amdgcn.ballot.i32
(i1 %
{{.
+}})
12 void test_ballot_wave32
(global uint
* out
, int a
, int b
)
14 *out
= __builtin_amdgcn_ballot_w32
(a == b
);
17 // CHECK
: declare i32
@llvm.amdgcn.ballot.i32
(i1) #[[$NOUNWIND_READONLY
:[0-
9]+]]
19 // CHECK-LABEL
: @test_ballot_wave32_target_attr
(
20 // CHECK
: call i32
@llvm.amdgcn.ballot.i32
(i1 %
{{.
+}})
21 __attribute__
((target("wavefrontsize32")))
22 void test_ballot_wave32_target_attr
(global uint
* out
, int a
, int b
)
24 *out
= __builtin_amdgcn_ballot_w32
(a == b
);
27 // CHECK-LABEL
: @test_read_exec
(
28 // CHECK
: call i32
@llvm.amdgcn.ballot.i32
(i1 true
)
29 void test_read_exec
(global uint
* out
) {
30 *out
= __builtin_amdgcn_read_exec
();
33 // CHECK-LABEL
: @test_read_exec_lo
(
34 // CHECK
: call i32
@llvm.amdgcn.ballot.i32
(i1 true
)
35 void test_read_exec_lo
(global uint
* out
) {
36 *out
= __builtin_amdgcn_read_exec_lo
();
39 // CHECK-LABEL
: @test_read_exec_hi
(
40 // CHECK
: store i32
0, ptr addrspace
(1) %out
41 void test_read_exec_hi
(global uint
* out
) {
42 *out
= __builtin_amdgcn_read_exec_hi
();
45 #if __AMDGCN_WAVEFRONT_SIZE
!= 32
46 #error Wrong wavesize detected