@@ -32,3 +32,42 @@ define amdgpu_ps void @test(ptr addrspace(1) inreg %ptr) {
32
32
store i32 %id , ptr addrspace (1 ) %ptr
33
33
ret void
34
34
}
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