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