@@ -88,6 +88,182 @@ main_body:
8888 ret float %r
8989}
9090
91+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.swap.i32(
92+ define float @raw_buffer_atomic_swap (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
93+ main_body:
94+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.swap.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
95+ %r = bitcast i32 %orig to float
96+ ret float %r
97+ }
98+
99+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.add.i32(
100+ define float @raw_buffer_atomic_add (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
101+ main_body:
102+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.add.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
103+ %r = bitcast i32 %orig to float
104+ ret float %r
105+ }
106+
107+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.sub.i32(
108+ define float @raw_buffer_atomic_sub (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
109+ main_body:
110+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.sub.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
111+ %r = bitcast i32 %orig to float
112+ ret float %r
113+ }
114+
115+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.smin.i32(
116+ define float @raw_buffer_atomic_smin (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
117+ main_body:
118+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.smin.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
119+ %r = bitcast i32 %orig to float
120+ ret float %r
121+ }
122+
123+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.umin.i32(
124+ define float @raw_buffer_atomic_umin (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
125+ main_body:
126+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.umin.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
127+ %r = bitcast i32 %orig to float
128+ ret float %r
129+ }
130+
131+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.smax.i32(
132+ define float @raw_buffer_atomic_smax (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
133+ main_body:
134+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.smax.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
135+ %r = bitcast i32 %orig to float
136+ ret float %r
137+ }
138+
139+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.umax.i32(
140+ define float @raw_buffer_atomic_umax (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
141+ main_body:
142+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.umax.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
143+ %r = bitcast i32 %orig to float
144+ ret float %r
145+ }
146+
147+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.and.i32(
148+ define float @raw_buffer_atomic_and (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
149+ main_body:
150+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.and.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
151+ %r = bitcast i32 %orig to float
152+ ret float %r
153+ }
154+
155+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.or.i32(
156+ define float @raw_buffer_atomic_or (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
157+ main_body:
158+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.or.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
159+ %r = bitcast i32 %orig to float
160+ ret float %r
161+ }
162+
163+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.xor.i32(
164+ define float @raw_buffer_atomic_xor (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
165+ main_body:
166+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.xor.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
167+ %r = bitcast i32 %orig to float
168+ ret float %r
169+ }
170+
171+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.cmpswap.i32(
172+ define float @raw_buffer_atomic_cmpswap (<4 x i32 > inreg %rsrc , i32 inreg %data , i32 inreg %cmp ) #0 {
173+ main_body:
174+ %orig = call i32 @llvm.amdgcn.raw.buffer.atomic.cmpswap.i32 (i32 %data , i32 %cmp , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 )
175+ %r = bitcast i32 %orig to float
176+ ret float %r
177+ }
178+
179+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.swap.i32(
180+ define float @struct_buffer_atomic_swap (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
181+ main_body:
182+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.swap.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
183+ %r = bitcast i32 %orig to float
184+ ret float %r
185+ }
186+
187+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.add.i32(
188+ define float @struct_buffer_atomic_add (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
189+ main_body:
190+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.add.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
191+ %r = bitcast i32 %orig to float
192+ ret float %r
193+ }
194+
195+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.sub.i32(
196+ define float @struct_buffer_atomic_sub (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
197+ main_body:
198+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.sub.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
199+ %r = bitcast i32 %orig to float
200+ ret float %r
201+ }
202+
203+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.smin.i32(
204+ define float @struct_buffer_atomic_smin (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
205+ main_body:
206+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.smin.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
207+ %r = bitcast i32 %orig to float
208+ ret float %r
209+ }
210+
211+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.umin.i32(
212+ define float @struct_buffer_atomic_umin (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
213+ main_body:
214+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.umin.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
215+ %r = bitcast i32 %orig to float
216+ ret float %r
217+ }
218+
219+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.smax.i32(
220+ define float @struct_buffer_atomic_smax (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
221+ main_body:
222+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.smax.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
223+ %r = bitcast i32 %orig to float
224+ ret float %r
225+ }
226+
227+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.umax.i32(
228+ define float @struct_buffer_atomic_umax (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
229+ main_body:
230+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.umax.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
231+ %r = bitcast i32 %orig to float
232+ ret float %r
233+ }
234+
235+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.and.i32(
236+ define float @struct_buffer_atomic_and (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
237+ main_body:
238+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.and.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
239+ %r = bitcast i32 %orig to float
240+ ret float %r
241+ }
242+
243+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.or.i32(
244+ define float @struct_buffer_atomic_or (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
245+ main_body:
246+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.or.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
247+ %r = bitcast i32 %orig to float
248+ ret float %r
249+ }
250+
251+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.xor.i32(
252+ define float @struct_buffer_atomic_xor (<4 x i32 > inreg %rsrc , i32 inreg %data ) #0 {
253+ main_body:
254+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.xor.i32 (i32 %data , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
255+ %r = bitcast i32 %orig to float
256+ ret float %r
257+ }
258+
259+ ;CHECK: DIVERGENT: %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.cmpswap.i32(
260+ define float @struct_buffer_atomic_cmpswap (<4 x i32 > inreg %rsrc , i32 inreg %data , i32 inreg %cmp ) #0 {
261+ main_body:
262+ %orig = call i32 @llvm.amdgcn.struct.buffer.atomic.cmpswap.i32 (i32 %data , i32 %cmp , <4 x i32 > %rsrc , i32 0 , i32 0 , i32 0 , i32 0 )
263+ %r = bitcast i32 %orig to float
264+ ret float %r
265+ }
266+
91267declare i32 @llvm.amdgcn.buffer.atomic.swap.i32 (i32 , <4 x i32 >, i32 , i32 , i1 ) #0
92268declare i32 @llvm.amdgcn.buffer.atomic.add.i32 (i32 , <4 x i32 >, i32 , i32 , i1 ) #0
93269declare i32 @llvm.amdgcn.buffer.atomic.sub.i32 (i32 , <4 x i32 >, i32 , i32 , i1 ) #0
@@ -100,4 +276,28 @@ declare i32 @llvm.amdgcn.buffer.atomic.or.i32(i32, <4 x i32>, i32, i32, i1) #0
100276declare i32 @llvm.amdgcn.buffer.atomic.xor.i32 (i32 , <4 x i32 >, i32 , i32 , i1 ) #0
101277declare i32 @llvm.amdgcn.buffer.atomic.cmpswap (i32 , i32 , <4 x i32 >, i32 , i32 , i1 ) #0
102278
279+ declare i32 @llvm.amdgcn.raw.buffer.atomic.swap.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
280+ declare i32 @llvm.amdgcn.raw.buffer.atomic.add.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
281+ declare i32 @llvm.amdgcn.raw.buffer.atomic.sub.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
282+ declare i32 @llvm.amdgcn.raw.buffer.atomic.smin.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
283+ declare i32 @llvm.amdgcn.raw.buffer.atomic.umin.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
284+ declare i32 @llvm.amdgcn.raw.buffer.atomic.smax.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
285+ declare i32 @llvm.amdgcn.raw.buffer.atomic.umax.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
286+ declare i32 @llvm.amdgcn.raw.buffer.atomic.and.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
287+ declare i32 @llvm.amdgcn.raw.buffer.atomic.or.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
288+ declare i32 @llvm.amdgcn.raw.buffer.atomic.xor.i32 (i32 , <4 x i32 >, i32 , i32 , i32 ) #0
289+ declare i32 @llvm.amdgcn.raw.buffer.atomic.cmpswap.i32 (i32 , i32 , <4 x i32 >, i32 , i32 , i32 ) #0
290+
291+ declare i32 @llvm.amdgcn.struct.buffer.atomic.swap.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
292+ declare i32 @llvm.amdgcn.struct.buffer.atomic.add.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
293+ declare i32 @llvm.amdgcn.struct.buffer.atomic.sub.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
294+ declare i32 @llvm.amdgcn.struct.buffer.atomic.smin.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
295+ declare i32 @llvm.amdgcn.struct.buffer.atomic.umin.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
296+ declare i32 @llvm.amdgcn.struct.buffer.atomic.smax.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
297+ declare i32 @llvm.amdgcn.struct.buffer.atomic.umax.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
298+ declare i32 @llvm.amdgcn.struct.buffer.atomic.and.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
299+ declare i32 @llvm.amdgcn.struct.buffer.atomic.or.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
300+ declare i32 @llvm.amdgcn.struct.buffer.atomic.xor.i32 (i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
301+ declare i32 @llvm.amdgcn.struct.buffer.atomic.cmpswap.i32 (i32 , i32 , <4 x i32 >, i32 , i32 , i32 , i32 ) #0
302+
103303attributes #0 = { nounwind }
0 commit comments