Skip to content

Commit 9a17612

Browse files
committed
AMDGPU: Add baseline test for gws handling with AGPR inputs
1 parent 38a5dd5 commit 9a17612

File tree

1 file changed

+395
-0
lines changed

1 file changed

+395
-0
lines changed
Lines changed: 395 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,395 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=CHECK,SDAG %s
3+
; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=CHECK,GISEL %s
4+
5+
define void @gws_init_offset0() #0 {
6+
; SDAG-LABEL: gws_init_offset0:
7+
; SDAG: ; %bb.0:
8+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9+
; SDAG-NEXT: ;;#ASMSTART
10+
; SDAG-NEXT: ; def a0
11+
; SDAG-NEXT: ;;#ASMEND
12+
; SDAG-NEXT: s_mov_b32 m0, 0
13+
; SDAG-NEXT: s_nop 0
14+
; SDAG-NEXT: ds_gws_init a0 gds
15+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16+
; SDAG-NEXT: s_setpc_b64 s[30:31]
17+
;
18+
; GISEL-LABEL: gws_init_offset0:
19+
; GISEL: ; %bb.0:
20+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21+
; GISEL-NEXT: ;;#ASMSTART
22+
; GISEL-NEXT: ; def a0
23+
; GISEL-NEXT: ;;#ASMEND
24+
; GISEL-NEXT: v_accvgpr_read_b32 v0, a0
25+
; GISEL-NEXT: s_mov_b32 m0, 0
26+
; GISEL-NEXT: s_nop 0
27+
; GISEL-NEXT: ds_gws_init v0 gds
28+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29+
; GISEL-NEXT: s_setpc_b64 s[30:31]
30+
%val = call i32 asm "; def $0", "=a"()
31+
call void @llvm.amdgcn.ds.gws.init(i32 %val, i32 0)
32+
ret void
33+
}
34+
35+
define void @gws_init_offset63() #0 {
36+
; SDAG-LABEL: gws_init_offset63:
37+
; SDAG: ; %bb.0:
38+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39+
; SDAG-NEXT: ;;#ASMSTART
40+
; SDAG-NEXT: ; def a0
41+
; SDAG-NEXT: ;;#ASMEND
42+
; SDAG-NEXT: s_mov_b32 m0, 0
43+
; SDAG-NEXT: s_nop 0
44+
; SDAG-NEXT: ds_gws_init a0 offset:63 gds
45+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
46+
; SDAG-NEXT: s_setpc_b64 s[30:31]
47+
;
48+
; GISEL-LABEL: gws_init_offset63:
49+
; GISEL: ; %bb.0:
50+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
51+
; GISEL-NEXT: ;;#ASMSTART
52+
; GISEL-NEXT: ; def a0
53+
; GISEL-NEXT: ;;#ASMEND
54+
; GISEL-NEXT: v_accvgpr_read_b32 v0, a0
55+
; GISEL-NEXT: s_mov_b32 m0, 0
56+
; GISEL-NEXT: s_nop 0
57+
; GISEL-NEXT: ds_gws_init v0 offset:63 gds
58+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
59+
; GISEL-NEXT: s_setpc_b64 s[30:31]
60+
%val = call i32 asm "; def $0", "=a"()
61+
call void @llvm.amdgcn.ds.gws.init(i32 %val, i32 63)
62+
ret void
63+
}
64+
65+
define void @gws_init_sgpr_offset(i32 inreg %offset) #0 {
66+
; SDAG-LABEL: gws_init_sgpr_offset:
67+
; SDAG: ; %bb.0:
68+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
69+
; SDAG-NEXT: ;;#ASMSTART
70+
; SDAG-NEXT: ; def a0
71+
; SDAG-NEXT: ;;#ASMEND
72+
; SDAG-NEXT: s_lshl_b32 m0, s16, 16
73+
; SDAG-NEXT: s_nop 0
74+
; SDAG-NEXT: ds_gws_init a0 gds
75+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
76+
; SDAG-NEXT: s_setpc_b64 s[30:31]
77+
;
78+
; GISEL-LABEL: gws_init_sgpr_offset:
79+
; GISEL: ; %bb.0:
80+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
81+
; GISEL-NEXT: ;;#ASMSTART
82+
; GISEL-NEXT: ; def a0
83+
; GISEL-NEXT: ;;#ASMEND
84+
; GISEL-NEXT: v_accvgpr_read_b32 v0, a0
85+
; GISEL-NEXT: s_lshl_b32 m0, s16, 16
86+
; GISEL-NEXT: s_nop 0
87+
; GISEL-NEXT: ds_gws_init v0 gds
88+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
89+
; GISEL-NEXT: s_setpc_b64 s[30:31]
90+
%val = call i32 asm "; def $0", "=a"()
91+
call void @llvm.amdgcn.ds.gws.init(i32 %val, i32 %offset)
92+
ret void
93+
}
94+
95+
define amdgpu_kernel void @gws_init_agpr_offset() #0 {
96+
; SDAG-LABEL: gws_init_agpr_offset:
97+
; SDAG: ; %bb.0:
98+
; SDAG-NEXT: ;;#ASMSTART
99+
; SDAG-NEXT: ; def a1
100+
; SDAG-NEXT: ;;#ASMEND
101+
; SDAG-NEXT: v_accvgpr_read_b32 v0, a1
102+
; SDAG-NEXT: v_readfirstlane_b32 s0, v0
103+
; SDAG-NEXT: ;;#ASMSTART
104+
; SDAG-NEXT: ; def a0
105+
; SDAG-NEXT: ;;#ASMEND
106+
; SDAG-NEXT: s_lshl_b32 m0, s0, 16
107+
; SDAG-NEXT: s_nop 0
108+
; SDAG-NEXT: ds_gws_init a0 gds
109+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
110+
; SDAG-NEXT: s_endpgm
111+
;
112+
; GISEL-LABEL: gws_init_agpr_offset:
113+
; GISEL: ; %bb.0:
114+
; GISEL-NEXT: ;;#ASMSTART
115+
; GISEL-NEXT: ; def a1
116+
; GISEL-NEXT: ;;#ASMEND
117+
; GISEL-NEXT: v_accvgpr_read_b32 v0, a1
118+
; GISEL-NEXT: v_readfirstlane_b32 s0, v0
119+
; GISEL-NEXT: ;;#ASMSTART
120+
; GISEL-NEXT: ; def a0
121+
; GISEL-NEXT: ;;#ASMEND
122+
; GISEL-NEXT: v_accvgpr_read_b32 v2, a0
123+
; GISEL-NEXT: s_lshl_b32 m0, s0, 16
124+
; GISEL-NEXT: s_nop 0
125+
; GISEL-NEXT: ds_gws_init v2 gds
126+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
127+
; GISEL-NEXT: s_endpgm
128+
%val = call i32 asm "; def $0", "=a"()
129+
%offset = call i32 asm "; def $0", "=a"()
130+
call void @llvm.amdgcn.ds.gws.init(i32 %val, i32 %offset)
131+
ret void
132+
}
133+
134+
define void @gws_init_agpr_offset_add1() #0 {
135+
; SDAG-LABEL: gws_init_agpr_offset_add1:
136+
; SDAG: ; %bb.0:
137+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
138+
; SDAG-NEXT: ;;#ASMSTART
139+
; SDAG-NEXT: ; def a1
140+
; SDAG-NEXT: ;;#ASMEND
141+
; SDAG-NEXT: v_accvgpr_read_b32 v0, a1
142+
; SDAG-NEXT: v_readfirstlane_b32 s4, v0
143+
; SDAG-NEXT: ;;#ASMSTART
144+
; SDAG-NEXT: ; def a0
145+
; SDAG-NEXT: ;;#ASMEND
146+
; SDAG-NEXT: s_lshl_b32 m0, s4, 16
147+
; SDAG-NEXT: s_nop 0
148+
; SDAG-NEXT: ds_gws_init a0 offset:1 gds
149+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
150+
; SDAG-NEXT: s_setpc_b64 s[30:31]
151+
;
152+
; GISEL-LABEL: gws_init_agpr_offset_add1:
153+
; GISEL: ; %bb.0:
154+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
155+
; GISEL-NEXT: ;;#ASMSTART
156+
; GISEL-NEXT: ; def a1
157+
; GISEL-NEXT: ;;#ASMEND
158+
; GISEL-NEXT: v_accvgpr_read_b32 v0, a1
159+
; GISEL-NEXT: v_readfirstlane_b32 s4, v0
160+
; GISEL-NEXT: ;;#ASMSTART
161+
; GISEL-NEXT: ; def a0
162+
; GISEL-NEXT: ;;#ASMEND
163+
; GISEL-NEXT: v_accvgpr_read_b32 v2, a0
164+
; GISEL-NEXT: s_lshl_b32 m0, s4, 16
165+
; GISEL-NEXT: s_nop 0
166+
; GISEL-NEXT: ds_gws_init v2 offset:1 gds
167+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
168+
; GISEL-NEXT: s_setpc_b64 s[30:31]
169+
%val = call i32 asm "; def $0", "=a"()
170+
%offset.base = call i32 asm "; def $0", "=a"()
171+
%offset = add i32 %offset.base, 1
172+
call void @llvm.amdgcn.ds.gws.init(i32 %val, i32 %offset)
173+
ret void
174+
}
175+
176+
define amdgpu_kernel void @gws_init_vgpr_offset_add(i32 %val) #0 {
177+
; CHECK-LABEL: gws_init_vgpr_offset_add:
178+
; CHECK: ; %bb.0:
179+
; CHECK-NEXT: s_load_dword s0, s[8:9], 0x0
180+
; CHECK-NEXT: ;;#ASMSTART
181+
; CHECK-NEXT: ; def a0
182+
; CHECK-NEXT: ;;#ASMEND
183+
; CHECK-NEXT: v_accvgpr_read_b32 v0, a0
184+
; CHECK-NEXT: v_readfirstlane_b32 s1, v0
185+
; CHECK-NEXT: s_lshl_b32 m0, s1, 16
186+
; CHECK-NEXT: s_waitcnt lgkmcnt(0)
187+
; CHECK-NEXT: v_mov_b32_e32 v0, s0
188+
; CHECK-NEXT: ds_gws_init v0 offset:3 gds
189+
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
190+
; CHECK-NEXT: s_endpgm
191+
%agpr.offset.base = call i32 asm "; def $0", "=a"()
192+
%agpr.offset = add i32 %agpr.offset.base, 3
193+
call void @llvm.amdgcn.ds.gws.init(i32 %val, i32 %agpr.offset)
194+
ret void
195+
}
196+
197+
define void @gws_barrier_offset0() #0 {
198+
; SDAG-LABEL: gws_barrier_offset0:
199+
; SDAG: ; %bb.0:
200+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
201+
; SDAG-NEXT: ;;#ASMSTART
202+
; SDAG-NEXT: ; def a0
203+
; SDAG-NEXT: ;;#ASMEND
204+
; SDAG-NEXT: s_mov_b32 m0, 0
205+
; SDAG-NEXT: s_nop 0
206+
; SDAG-NEXT: ds_gws_barrier a0 gds
207+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
208+
; SDAG-NEXT: s_setpc_b64 s[30:31]
209+
;
210+
; GISEL-LABEL: gws_barrier_offset0:
211+
; GISEL: ; %bb.0:
212+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
213+
; GISEL-NEXT: ;;#ASMSTART
214+
; GISEL-NEXT: ; def a0
215+
; GISEL-NEXT: ;;#ASMEND
216+
; GISEL-NEXT: v_accvgpr_read_b32 v0, a0
217+
; GISEL-NEXT: s_mov_b32 m0, 0
218+
; GISEL-NEXT: s_nop 0
219+
; GISEL-NEXT: ds_gws_barrier v0 gds
220+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
221+
; GISEL-NEXT: s_setpc_b64 s[30:31]
222+
%val = call i32 asm "; def $0", "=a"()
223+
call void @llvm.amdgcn.ds.gws.barrier(i32 %val, i32 0)
224+
ret void
225+
}
226+
227+
define void @gws_barrier_offset63() #0 {
228+
; SDAG-LABEL: gws_barrier_offset63:
229+
; SDAG: ; %bb.0:
230+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
231+
; SDAG-NEXT: ;;#ASMSTART
232+
; SDAG-NEXT: ; def a0
233+
; SDAG-NEXT: ;;#ASMEND
234+
; SDAG-NEXT: s_mov_b32 m0, 0
235+
; SDAG-NEXT: s_nop 0
236+
; SDAG-NEXT: ds_gws_barrier a0 offset:63 gds
237+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
238+
; SDAG-NEXT: s_setpc_b64 s[30:31]
239+
;
240+
; GISEL-LABEL: gws_barrier_offset63:
241+
; GISEL: ; %bb.0:
242+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
243+
; GISEL-NEXT: ;;#ASMSTART
244+
; GISEL-NEXT: ; def a0
245+
; GISEL-NEXT: ;;#ASMEND
246+
; GISEL-NEXT: v_accvgpr_read_b32 v0, a0
247+
; GISEL-NEXT: s_mov_b32 m0, 0
248+
; GISEL-NEXT: s_nop 0
249+
; GISEL-NEXT: ds_gws_barrier v0 offset:63 gds
250+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
251+
; GISEL-NEXT: s_setpc_b64 s[30:31]
252+
%val = call i32 asm "; def $0", "=a"()
253+
call void @llvm.amdgcn.ds.gws.barrier(i32 %val, i32 63)
254+
ret void
255+
}
256+
257+
define void @gws_barrier_sgpr_offset(i32 inreg %offset) #0 {
258+
; SDAG-LABEL: gws_barrier_sgpr_offset:
259+
; SDAG: ; %bb.0:
260+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
261+
; SDAG-NEXT: ;;#ASMSTART
262+
; SDAG-NEXT: ; def a0
263+
; SDAG-NEXT: ;;#ASMEND
264+
; SDAG-NEXT: s_lshl_b32 m0, s16, 16
265+
; SDAG-NEXT: s_nop 0
266+
; SDAG-NEXT: ds_gws_barrier a0 gds
267+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
268+
; SDAG-NEXT: s_setpc_b64 s[30:31]
269+
;
270+
; GISEL-LABEL: gws_barrier_sgpr_offset:
271+
; GISEL: ; %bb.0:
272+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
273+
; GISEL-NEXT: ;;#ASMSTART
274+
; GISEL-NEXT: ; def a0
275+
; GISEL-NEXT: ;;#ASMEND
276+
; GISEL-NEXT: v_accvgpr_read_b32 v0, a0
277+
; GISEL-NEXT: s_lshl_b32 m0, s16, 16
278+
; GISEL-NEXT: s_nop 0
279+
; GISEL-NEXT: ds_gws_barrier v0 gds
280+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
281+
; GISEL-NEXT: s_setpc_b64 s[30:31]
282+
%val = call i32 asm "; def $0", "=a"()
283+
call void @llvm.amdgcn.ds.gws.barrier(i32 %val, i32 %offset)
284+
ret void
285+
}
286+
287+
define void @gws_sema_v_offset0() #0 {
288+
; SDAG-LABEL: gws_sema_v_offset0:
289+
; SDAG: ; %bb.0:
290+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
291+
; SDAG-NEXT: s_mov_b32 m0, 0
292+
; SDAG-NEXT: s_nop 0
293+
; SDAG-NEXT: ds_gws_sema_v gds
294+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
295+
; SDAG-NEXT: s_setpc_b64 s[30:31]
296+
;
297+
; GISEL-LABEL: gws_sema_v_offset0:
298+
; GISEL: ; %bb.0:
299+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
300+
; GISEL-NEXT: s_mov_b32 m0, 0
301+
; GISEL-NEXT: s_nop 0
302+
; GISEL-NEXT: ds_gws_sema_v gds
303+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
304+
; GISEL-NEXT: ;;#ASMSTART
305+
; GISEL-NEXT: ; def a0
306+
; GISEL-NEXT: ;;#ASMEND
307+
; GISEL-NEXT: s_setpc_b64 s[30:31]
308+
%val = call i32 asm "; def $0", "=a"()
309+
call void @llvm.amdgcn.ds.gws.sema.v(i32 0)
310+
ret void
311+
}
312+
313+
define void @gws_sema_br_offset0() #0 {
314+
; SDAG-LABEL: gws_sema_br_offset0:
315+
; SDAG: ; %bb.0:
316+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
317+
; SDAG-NEXT: ;;#ASMSTART
318+
; SDAG-NEXT: ; def a0
319+
; SDAG-NEXT: ;;#ASMEND
320+
; SDAG-NEXT: s_mov_b32 m0, 0
321+
; SDAG-NEXT: s_nop 0
322+
; SDAG-NEXT: ds_gws_sema_br a0 gds
323+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
324+
; SDAG-NEXT: s_setpc_b64 s[30:31]
325+
;
326+
; GISEL-LABEL: gws_sema_br_offset0:
327+
; GISEL: ; %bb.0:
328+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
329+
; GISEL-NEXT: ;;#ASMSTART
330+
; GISEL-NEXT: ; def a0
331+
; GISEL-NEXT: ;;#ASMEND
332+
; GISEL-NEXT: v_accvgpr_read_b32 v0, a0
333+
; GISEL-NEXT: s_mov_b32 m0, 0
334+
; GISEL-NEXT: s_nop 0
335+
; GISEL-NEXT: ds_gws_sema_br v0 gds
336+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
337+
; GISEL-NEXT: s_setpc_b64 s[30:31]
338+
%val = call i32 asm "; def $0", "=a"()
339+
call void @llvm.amdgcn.ds.gws.sema.br(i32 %val, i32 0)
340+
ret void
341+
}
342+
343+
define void @gws_sema_p_offset0() #0 {
344+
; SDAG-LABEL: gws_sema_p_offset0:
345+
; SDAG: ; %bb.0:
346+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
347+
; SDAG-NEXT: s_mov_b32 m0, 0
348+
; SDAG-NEXT: s_nop 0
349+
; SDAG-NEXT: ds_gws_sema_p gds
350+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
351+
; SDAG-NEXT: s_setpc_b64 s[30:31]
352+
;
353+
; GISEL-LABEL: gws_sema_p_offset0:
354+
; GISEL: ; %bb.0:
355+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
356+
; GISEL-NEXT: s_mov_b32 m0, 0
357+
; GISEL-NEXT: s_nop 0
358+
; GISEL-NEXT: ds_gws_sema_p gds
359+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
360+
; GISEL-NEXT: ;;#ASMSTART
361+
; GISEL-NEXT: ; def a0
362+
; GISEL-NEXT: ;;#ASMEND
363+
; GISEL-NEXT: s_setpc_b64 s[30:31]
364+
%val = call i32 asm "; def $0", "=a"()
365+
call void @llvm.amdgcn.ds.gws.sema.p(i32 0)
366+
ret void
367+
}
368+
369+
define void @gws_sema_release_all_offset0() #0 {
370+
; SDAG-LABEL: gws_sema_release_all_offset0:
371+
; SDAG: ; %bb.0:
372+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
373+
; SDAG-NEXT: s_mov_b32 m0, 0
374+
; SDAG-NEXT: s_nop 0
375+
; SDAG-NEXT: ds_gws_sema_release_all gds
376+
; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
377+
; SDAG-NEXT: s_setpc_b64 s[30:31]
378+
;
379+
; GISEL-LABEL: gws_sema_release_all_offset0:
380+
; GISEL: ; %bb.0:
381+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
382+
; GISEL-NEXT: s_mov_b32 m0, 0
383+
; GISEL-NEXT: s_nop 0
384+
; GISEL-NEXT: ds_gws_sema_release_all gds
385+
; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
386+
; GISEL-NEXT: ;;#ASMSTART
387+
; GISEL-NEXT: ; def a0
388+
; GISEL-NEXT: ;;#ASMEND
389+
; GISEL-NEXT: s_setpc_b64 s[30:31]
390+
%val = call i32 asm "; def $0", "=a"()
391+
call void @llvm.amdgcn.ds.gws.sema.release.all(i32 0)
392+
ret void
393+
}
394+
395+
attributes #0 = { nounwind }

0 commit comments

Comments
 (0)