@@ -32,3 +32,42 @@ define amdgpu_ps void @test(ptr addrspace(1) inreg %ptr) {
3232 store i32 %id , ptr addrspace (1 ) %ptr
3333 ret void
3434}
35+
36+ define amdgpu_ps void @test_loop () {
37+ ; SDAG-LABEL: test_loop:
38+ ; SDAG: ; %bb.0:
39+ ; SDAG-NEXT: s_mov_b32 s0, src_pops_exiting_wave_id
40+ ; SDAG-NEXT: .LBB1_1: ; %loop
41+ ; SDAG-NEXT: ; =>This Inner Loop Header: Depth=1
42+ ; SDAG-NEXT: s_cmp_eq_u32 s0, 0
43+ ; SDAG-NEXT: s_cbranch_scc1 .LBB1_1
44+ ; SDAG-NEXT: ; %bb.2: ; %exit
45+ ; SDAG-NEXT: s_endpgm
46+ ;
47+ ; GFX9-GISEL-LABEL: test_loop:
48+ ; GFX9-GISEL: ; %bb.0:
49+ ; GFX9-GISEL-NEXT: s_mov_b32 s0, src_pops_exiting_wave_id
50+ ; GFX9-GISEL-NEXT: .LBB1_1: ; %loop
51+ ; GFX9-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1
52+ ; GFX9-GISEL-NEXT: s_cmp_eq_u32 s0, 0
53+ ; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB1_1
54+ ; GFX9-GISEL-NEXT: ; %bb.2: ; %exit
55+ ; GFX9-GISEL-NEXT: s_endpgm
56+ ;
57+ ; GFX10-GISEL-LABEL: test_loop:
58+ ; GFX10-GISEL: ; %bb.0:
59+ ; GFX10-GISEL-NEXT: s_mov_b32 s0, src_pops_exiting_wave_id
60+ ; GFX10-GISEL-NEXT: .LBB1_1: ; %loop
61+ ; GFX10-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1
62+ ; GFX10-GISEL-NEXT: s_cmp_eq_u32 s0, 0
63+ ; GFX10-GISEL-NEXT: s_cbranch_scc1 .LBB1_1
64+ ; GFX10-GISEL-NEXT: ; %bb.2: ; %exit
65+ ; GFX10-GISEL-NEXT: s_endpgm
66+ br label %loop
67+ loop:
68+ %id = call i32 @llvm.amdgcn.pops.exiting.wave.id ()
69+ %cond = icmp eq i32 %id , 0
70+ br i1 %cond , label %loop , label %exit
71+ exit:
72+ ret void
73+ }
0 commit comments