; RUN: llc -march=amdgcn -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GCN %s ; GCN-FUNC: uniform_bitreverse_i32 ; GCN: S_BREV_B32 define amdgpu_kernel void @uniform_bitreverse_i32(i32 %val, i32 addrspace(1)* %out) { %res = call i32 @llvm.bitreverse.i32(i32 %val) store i32 %res, i32 addrspace(1)* %out ret void } ; GCN-FUNC: divergent_bitreverse_i32 ; GCN: V_BFREV_B32 define amdgpu_kernel void @divergent_bitreverse_i32(i32 %val, i32 addrspace(1)* %out) { %tid = call i32 @llvm.amdgcn.workitem.id.x() %divergent = add i32 %val, %tid %res = call i32 @llvm.bitreverse.i32(i32 %divergent) store i32 %res, i32 addrspace(1)* %out ret void } ; GCN-FUNC: uniform_bitreverse_i64 ; GCN: S_BREV_B64 define amdgpu_kernel void @uniform_bitreverse_i64(i64 %val, i64 addrspace(1)* %out) { %res = call i64 @llvm.bitreverse.i64(i64 %val) store i64 %res, i64 addrspace(1)* %out ret void } ; GCN-FUNC: divergent_bitreverse_i64 ; GCN: V_BFREV_B32 ; GCN: V_BFREV_B32 define amdgpu_kernel void @divergent_bitreverse_i64(i64 %val, i64 addrspace(1)* %out) { %tid = call i32 @llvm.amdgcn.workitem.id.x() %ext = zext i32 %tid to i64 %divergent = add i64 %val, %ext %res = call i64 @llvm.bitreverse.i64(i64 %divergent) store i64 %res, i64 addrspace(1)* %out ret void } declare i32 @llvm.amdgcn.workitem.id.x() declare i32 @llvm.bitreverse.i32(i32) declare i64 @llvm.bitreverse.i64(i64)