| ; 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 | |
| } |