blob: 51e3018ccb84e99f1f31a74a53e6e1bc9fc3db0b [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -global-isel=0 -mtriple=amdgpu13.10 < %s | FileCheck -check-prefixes=GFX13,GFX13-SDAG %s
; RUN: llc -global-isel=1 -mtriple=amdgpu13.10 < %s | FileCheck -check-prefixes=GFX13,GFX13-GISEL %s
define amdgpu_kernel void @v_wave_match_sgpr(ptr addrspace(1) %out, i32 %src1, i32 %src2) {
; GFX13-SDAG-LABEL: v_wave_match_sgpr:
; GFX13-SDAG: ; %bb.0:
; GFX13-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
; GFX13-SDAG-NEXT: v_mov_b32_e32 v0, 0
; GFX13-SDAG-NEXT: s_wait_kmcnt 0x0
; GFX13-SDAG-NEXT: v_wave_match_b32 v1, s2, s3
; GFX13-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]
; GFX13-SDAG-NEXT: s_endpgm
;
; GFX13-GISEL-LABEL: v_wave_match_sgpr:
; GFX13-GISEL: ; %bb.0:
; GFX13-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 nv
; GFX13-GISEL-NEXT: v_mov_b32_e32 v1, 0
; GFX13-GISEL-NEXT: s_wait_kmcnt 0x0
; GFX13-GISEL-NEXT: v_wave_match_b32 v0, s2, s3
; GFX13-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]
; GFX13-GISEL-NEXT: s_endpgm
%v = call i32 @llvm.amdgcn.wave.match.b32(i32 %src1, i32 %src2)
store i32 %v, ptr addrspace(1) %out
ret void
}
define amdgpu_kernel void @v_wave_match_vgpr(ptr addrspace(1) %out) {
; GFX13-LABEL: v_wave_match_vgpr:
; GFX13: ; %bb.0:
; GFX13-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX13-NEXT: v_and_b32_e32 v1, 0x3ff, v0
; GFX13-NEXT: v_bfe_u32 v0, v0, 10, 10
; GFX13-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX13-NEXT: v_wave_match_b32 v0, v1, v0
; GFX13-NEXT: s_wait_kmcnt 0x0
; GFX13-NEXT: global_store_b32 v1, v0, s[0:1] scale_offset
; GFX13-NEXT: s_endpgm
%tidx = call i32 @llvm.amdgcn.workitem.id.x()
%tidy = call i32 @llvm.amdgcn.workitem.id.y()
%v = call i32 @llvm.amdgcn.wave.match.b32(i32 %tidx, i32 %tidy)
%out_ptr = getelementptr i32, ptr addrspace(1) %out, i32 %tidx
store i32 %v, ptr addrspace(1) %out_ptr
ret void
}
define amdgpu_kernel void @v_wave_match_constant(ptr addrspace(1) %out) {
; GFX13-SDAG-LABEL: v_wave_match_constant:
; GFX13-SDAG: ; %bb.0:
; GFX13-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX13-SDAG-NEXT: v_mov_b32_e32 v0, 0
; GFX13-SDAG-NEXT: v_wave_match_b32 v1, 7, 5
; GFX13-SDAG-NEXT: s_wait_kmcnt 0x0
; GFX13-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]
; GFX13-SDAG-NEXT: s_endpgm
;
; GFX13-GISEL-LABEL: v_wave_match_constant:
; GFX13-GISEL: ; %bb.0:
; GFX13-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX13-GISEL-NEXT: v_wave_match_b32 v0, 7, 5
; GFX13-GISEL-NEXT: v_mov_b32_e32 v1, 0
; GFX13-GISEL-NEXT: s_wait_kmcnt 0x0
; GFX13-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]
; GFX13-GISEL-NEXT: s_endpgm
%v = call i32 @llvm.amdgcn.wave.match.b32(i32 7, i32 5)
store i32 %v, ptr addrspace(1) %out
ret void
}
define amdgpu_kernel void @v_wave_match_poison(ptr addrspace(1) %out) {
; GFX13-SDAG-LABEL: v_wave_match_poison:
; GFX13-SDAG: ; %bb.0:
; GFX13-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX13-SDAG-NEXT: v_mov_b32_e32 v0, 0
; GFX13-SDAG-NEXT: s_wait_kmcnt 0x0
; GFX13-SDAG-NEXT: v_wave_match_b32 v1, s0, s0
; GFX13-SDAG-NEXT: global_store_b32 v0, v1, s[0:1]
; GFX13-SDAG-NEXT: s_endpgm
;
; GFX13-GISEL-LABEL: v_wave_match_poison:
; GFX13-GISEL: ; %bb.0:
; GFX13-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 nv
; GFX13-GISEL-NEXT: v_mov_b32_e32 v1, 0
; GFX13-GISEL-NEXT: s_wait_kmcnt 0x0
; GFX13-GISEL-NEXT: v_wave_match_b32 v0, s0, s0
; GFX13-GISEL-NEXT: global_store_b32 v1, v0, s[0:1]
; GFX13-GISEL-NEXT: s_endpgm
%v = call i32 @llvm.amdgcn.wave.match.b32(i32 poison, i32 poison)
store i32 %v, ptr addrspace(1) %out
ret void
}