xref: /llvm-project/llvm/test/CodeGen/AMDGPU/divergence-driven-bitreverse.ll (revision 7652a59407018c057cdc1163c9f64b5b6f0954eb)
1; RUN: llc -mtriple=amdgcn -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GCN %s
2; RUN: llc -mtriple=amdgcn -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GCN %s
3
4; GCN-LABEL: name: uniform_bitreverse_i32
5; GCN: S_BREV_B32
6define amdgpu_kernel void @uniform_bitreverse_i32(i32 %val, ptr addrspace(1) %out) {
7  %res = call i32 @llvm.bitreverse.i32(i32 %val)
8  store i32 %res, ptr addrspace(1) %out
9  ret void
10}
11
12; GCN-LABEL: name: divergent_bitreverse_i32
13; GCN: V_BFREV_B32
14define amdgpu_kernel void @divergent_bitreverse_i32(i32 %val, ptr addrspace(1) %out) {
15  %tid = call i32 @llvm.amdgcn.workitem.id.x()
16  %divergent = add i32 %val, %tid
17  %res = call i32 @llvm.bitreverse.i32(i32 %divergent)
18  store i32 %res, ptr addrspace(1) %out
19  ret void
20}
21
22; GCN-LABEL: name: uniform_bitreverse_i64
23; GCN: S_BREV_B64
24define amdgpu_kernel void @uniform_bitreverse_i64(i64 %val, ptr addrspace(1) %out) {
25  %res = call i64 @llvm.bitreverse.i64(i64 %val)
26  store i64 %res, ptr addrspace(1) %out
27  ret void
28}
29
30; GCN-LABEL: name: divergent_bitreverse_i64
31; GCN: V_BFREV_B32
32; GCN: V_BFREV_B32
33define amdgpu_kernel void @divergent_bitreverse_i64(i64 %val, ptr addrspace(1) %out) {
34  %tid = call i32 @llvm.amdgcn.workitem.id.x()
35  %ext = zext i32 %tid to i64
36  %divergent = add i64 %val, %ext
37  %res = call i64 @llvm.bitreverse.i64(i64 %divergent)
38  store i64 %res, ptr addrspace(1) %out
39  ret void
40}
41
42declare i32 @llvm.amdgcn.workitem.id.x()
43declare i32 @llvm.bitreverse.i32(i32)
44declare i64 @llvm.bitreverse.i64(i64)
45