[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / memory-legalizer-mesa3d.ll
blobfc598a66849a814369d4527f187a3ebd82a9f023
1 ; RUN: llc -mtriple=amdgcn--mesa3d -mcpu=gfx600 -verify-machineinstrs < %s | FileCheck -check-prefixes=FUNC,GCN %s
2 ; RUN: llc -mtriple=amdgcn--mesa3d -mcpu=gfx700 -verify-machineinstrs < %s | FileCheck -check-prefixes=FUNC,GCN %s
3 ; RUN: llc -mtriple=amdgcn--mesa3d -mcpu=gfx803 -verify-machineinstrs < %s | FileCheck -check-prefixes=FUNC,GCN %s
4 ; RUN: llc -mtriple=amdgcn--mesa3d -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=FUNC,GCN %s
6 ; FUNC-LABEL: {{^}}system_one_as_acquire:
7 ; GCN:        %bb.0
8 ; GCN-NOT:    ATOMIC_FENCE
9 ; GCN:        s_waitcnt vmcnt(0){{$}}
10 ; GCN-NEXT:   buffer_wbinvl1{{$}}
11 ; GCN:        s_endpgm
12 define amdgpu_kernel void @system_one_as_acquire() {
13 entry:
14   fence syncscope("one-as") acquire
15   ret void
18 ; FUNC-LABEL: {{^}}system_one_as_release:
19 ; GCN:        %bb.0
20 ; GCN-NOT:    ATOMIC_FENCE
21 ; GCN:        s_waitcnt vmcnt(0){{$}}
22 ; GCN:        s_endpgm
23 define amdgpu_kernel void @system_one_as_release() {
24 entry:
25   fence syncscope("one-as") release
26   ret void
29 ; FUNC-LABEL: {{^}}system_one_as_acq_rel:
30 ; GCN:        %bb.0
31 ; GCN-NOT:    ATOMIC_FENCE
32 ; GCN:        s_waitcnt vmcnt(0){{$}}
33 ; GCN:        buffer_wbinvl1{{$}}
34 ; GCN:        s_endpgm
35 define amdgpu_kernel void @system_one_as_acq_rel() {
36 entry:
37   fence syncscope("one-as") acq_rel
38   ret void
41 ; FUNC-LABEL: {{^}}system_one_as_seq_cst:
42 ; GCN:        %bb.0
43 ; GCN-NOT:    ATOMIC_FENCE
44 ; GCN:        s_waitcnt vmcnt(0){{$}}
45 ; GCN:        buffer_wbinvl1{{$}}
46 ; GCN:        s_endpgm
47 define amdgpu_kernel void @system_one_as_seq_cst() {
48 entry:
49   fence syncscope("one-as") seq_cst
50   ret void
53 ; FUNC-LABEL: {{^}}singlethread_one_as_acquire:
54 ; GCN:        %bb.0
55 ; GCN-NOT:    ATOMIC_FENCE
56 ; GCN:        s_endpgm
57 define amdgpu_kernel void @singlethread_one_as_acquire() {
58 entry:
59   fence syncscope("singlethread-one-as") acquire
60   ret void
63 ; FUNC-LABEL: {{^}}singlethread_one_as_release:
64 ; GCN:        %bb.0
65 ; GCN-NOT:    ATOMIC_FENCE
66 ; GCN:        s_endpgm
67 define amdgpu_kernel void @singlethread_one_as_release() {
68 entry:
69   fence syncscope("singlethread-one-as") release
70   ret void
73 ; FUNC-LABEL: {{^}}singlethread_one_as_acq_rel:
74 ; GCN:        %bb.0
75 ; GCN-NOT:    ATOMIC_FENCE
76 ; GCN:        s_endpgm
77 define amdgpu_kernel void @singlethread_one_as_acq_rel() {
78 entry:
79   fence syncscope("singlethread-one-as") acq_rel
80   ret void
83 ; FUNC-LABEL: {{^}}singlethread_one_as_seq_cst:
84 ; GCN:        %bb.0
85 ; GCN-NOT:    ATOMIC_FENCE
86 ; GCN:        s_endpgm
87 define amdgpu_kernel void @singlethread_one_as_seq_cst() {
88 entry:
89   fence syncscope("singlethread-one-as") seq_cst
90   ret void
93 ; FUNC-LABEL: {{^}}agent_one_as_acquire:
94 ; GCN:        %bb.0
95 ; GCN-NOT:    ATOMIC_FENCE
96 ; GCN:        s_waitcnt vmcnt(0){{$}}
97 ; GCN-NEXT:   buffer_wbinvl1{{$}}
98 ; GCN:        s_endpgm
99 define amdgpu_kernel void @agent_one_as_acquire() {
100 entry:
101   fence syncscope("agent-one-as") acquire
102   ret void
105 ; FUNC-LABEL: {{^}}agent_one_as_release:
106 ; GCN:        %bb.0
107 ; GCN-NOT:    ATOMIC_FENCE
108 ; GCN:        s_waitcnt vmcnt(0){{$}}
109 ; GCN:        s_endpgm
110 define amdgpu_kernel void @agent_one_as_release() {
111 entry:
112   fence syncscope("agent-one-as") release
113   ret void
116 ; FUNC-LABEL: {{^}}agent_one_as_acq_rel:
117 ; GCN:        %bb.0
118 ; GCN-NOT:    ATOMIC_FENCE
119 ; GCN:        s_waitcnt vmcnt(0){{$}}
120 ; GCN:        buffer_wbinvl1{{$}}
121 ; GCN:        s_endpgm
122 define amdgpu_kernel void @agent_one_as_acq_rel() {
123 entry:
124   fence syncscope("agent-one-as") acq_rel
125   ret void
128 ; FUNC-LABEL: {{^}}agent_one_as_seq_cst:
129 ; GCN:        %bb.0
130 ; GCN-NOT:    ATOMIC_FENCE
131 ; GCN:        s_waitcnt vmcnt(0){{$}}
132 ; GCN:        buffer_wbinvl1{{$}}
133 ; GCN:        s_endpgm
134 define amdgpu_kernel void @agent_one_as_seq_cst() {
135 entry:
136   fence syncscope("agent-one-as") seq_cst
137   ret void
140 ; FUNC-LABEL: {{^}}workgroup_one_as_acquire:
141 ; GCN:        %bb.0
142 ; GCN-NOT:    s_waitcnt vmcnt(0){{$}}
143 ; GCN-NOT:    ATOMIC_FENCE
144 ; GCN:        s_endpgm
145 define amdgpu_kernel void @workgroup_one_as_acquire() {
146 entry:
147   fence syncscope("workgroup-one-as") acquire
148   ret void
151 ; FUNC-LABEL: {{^}}workgroup_one_as_release:
152 ; GCN:        %bb.0
153 ; GCN-NOT:    s_waitcnt vmcnt(0){{$}}
154 ; GCN-NOT:    ATOMIC_FENCE
155 ; GCN:        s_endpgm
156 define amdgpu_kernel void @workgroup_one_as_release() {
157 entry:
158   fence syncscope("workgroup-one-as") release
159   ret void
162 ; FUNC-LABEL: {{^}}workgroup_one_as_acq_rel:
163 ; GCN:        %bb.0
164 ; GCN-NOT:    s_waitcnt vmcnt(0){{$}}
165 ; GCN-NOT:    ATOMIC_FENCE
166 ; GCN:        s_endpgm
167 define amdgpu_kernel void @workgroup_one_as_acq_rel() {
168 entry:
169   fence syncscope("workgroup-one-as") acq_rel
170   ret void
173 ; FUNC-LABEL: {{^}}workgroup_one_as_seq_cst:
174 ; GCN:        %bb.0
175 ; GCN-NOT:    s_waitcnt vmcnt(0){{$}}
176 ; GCN-NOT:    ATOMIC_FENCE
177 ; GCN:        s_endpgm
178 define amdgpu_kernel void @workgroup_one_as_seq_cst() {
179 entry:
180   fence syncscope("workgroup-one-as") seq_cst
181   ret void
184 ; FUNC-LABEL: {{^}}wavefront_one_as_acquire:
185 ; GCN:        %bb.0
186 ; GCN-NOT:    ATOMIC_FENCE
187 ; GCN:        s_endpgm
188 define amdgpu_kernel void @wavefront_one_as_acquire() {
189 entry:
190   fence syncscope("wavefront-one-as") acquire
191   ret void
194 ; FUNC-LABEL: {{^}}wavefront_one_as_release:
195 ; GCN:        %bb.0
196 ; GCN-NOT:    ATOMIC_FENCE
197 ; GCN:        s_endpgm
198 define amdgpu_kernel void @wavefront_one_as_release() {
199 entry:
200   fence syncscope("wavefront-one-as") release
201   ret void
204 ; FUNC-LABEL: {{^}}wavefront_one_as_acq_rel:
205 ; GCN:        %bb.0
206 ; GCN-NOT:    ATOMIC_FENCE
207 ; GCN:        s_endpgm
208 define amdgpu_kernel void @wavefront_one_as_acq_rel() {
209 entry:
210   fence syncscope("wavefront-one-as") acq_rel
211   ret void
214 ; FUNC-LABEL: {{^}}wavefront_one_as_seq_cst:
215 ; GCN:        %bb.0
216 ; GCN-NOT:    ATOMIC_FENCE
217 ; GCN:        s_endpgm
218 define amdgpu_kernel void @wavefront_one_as_seq_cst() {
219 entry:
220   fence syncscope("wavefront-one-as") seq_cst
221   ret void
224 ; FUNC-LABEL: {{^}}system_acquire:
225 ; GCN:        %bb.0
226 ; GCN-NOT:    ATOMIC_FENCE
227 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
228 ; GCN-NEXT:   buffer_wbinvl1{{$}}
229 ; GCN:        s_endpgm
230 define amdgpu_kernel void @system_acquire() {
231 entry:
232   fence acquire
233   ret void
236 ; FUNC-LABEL: {{^}}system_release:
237 ; GCN:        %bb.0
238 ; GCN-NOT:    ATOMIC_FENCE
239 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
240 ; GCN:        s_endpgm
241 define amdgpu_kernel void @system_release() {
242 entry:
243   fence release
244   ret void
247 ; FUNC-LABEL: {{^}}system_acq_rel:
248 ; GCN:        %bb.0
249 ; GCN-NOT:    ATOMIC_FENCE
250 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
251 ; GCN:        buffer_wbinvl1{{$}}
252 ; GCN:        s_endpgm
253 define amdgpu_kernel void @system_acq_rel() {
254 entry:
255   fence acq_rel
256   ret void
259 ; FUNC-LABEL: {{^}}system_seq_cst:
260 ; GCN:        %bb.0
261 ; GCN-NOT:    ATOMIC_FENCE
262 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
263 ; GCN:        buffer_wbinvl1{{$}}
264 ; GCN:        s_endpgm
265 define amdgpu_kernel void @system_seq_cst() {
266 entry:
267   fence seq_cst
268   ret void
271 ; FUNC-LABEL: {{^}}singlethread_acquire:
272 ; GCN:        %bb.0
273 ; GCN-NOT:    ATOMIC_FENCE
274 ; GCN:        s_endpgm
275 define amdgpu_kernel void @singlethread_acquire() {
276 entry:
277   fence syncscope("singlethread") acquire
278   ret void
281 ; FUNC-LABEL: {{^}}singlethread_release:
282 ; GCN:        %bb.0
283 ; GCN-NOT:    ATOMIC_FENCE
284 ; GCN:        s_endpgm
285 define amdgpu_kernel void @singlethread_release() {
286 entry:
287   fence syncscope("singlethread") release
288   ret void
291 ; FUNC-LABEL: {{^}}singlethread_acq_rel:
292 ; GCN:        %bb.0
293 ; GCN-NOT:    ATOMIC_FENCE
294 ; GCN:        s_endpgm
295 define amdgpu_kernel void @singlethread_acq_rel() {
296 entry:
297   fence syncscope("singlethread") acq_rel
298   ret void
301 ; FUNC-LABEL: {{^}}singlethread_seq_cst:
302 ; GCN:        %bb.0
303 ; GCN-NOT:    ATOMIC_FENCE
304 ; GCN:        s_endpgm
305 define amdgpu_kernel void @singlethread_seq_cst() {
306 entry:
307   fence syncscope("singlethread") seq_cst
308   ret void
311 ; FUNC-LABEL: {{^}}agent_acquire:
312 ; GCN:        %bb.0
313 ; GCN-NOT:    ATOMIC_FENCE
314 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
315 ; GCN-NEXT:   buffer_wbinvl1{{$}}
316 ; GCN:        s_endpgm
317 define amdgpu_kernel void @agent_acquire() {
318 entry:
319   fence syncscope("agent") acquire
320   ret void
323 ; FUNC-LABEL: {{^}}agent_release:
324 ; GCN:        %bb.0
325 ; GCN-NOT:    ATOMIC_FENCE
326 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
327 ; GCN:        s_endpgm
328 define amdgpu_kernel void @agent_release() {
329 entry:
330   fence syncscope("agent") release
331   ret void
334 ; FUNC-LABEL: {{^}}agent_acq_rel:
335 ; GCN:        %bb.0
336 ; GCN-NOT:    ATOMIC_FENCE
337 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
338 ; GCN:        buffer_wbinvl1{{$}}
339 ; GCN:        s_endpgm
340 define amdgpu_kernel void @agent_acq_rel() {
341 entry:
342   fence syncscope("agent") acq_rel
343   ret void
346 ; FUNC-LABEL: {{^}}agent_seq_cst:
347 ; GCN:        %bb.0
348 ; GCN-NOT:    ATOMIC_FENCE
349 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
350 ; GCN:        buffer_wbinvl1{{$}}
351 ; GCN:        s_endpgm
352 define amdgpu_kernel void @agent_seq_cst() {
353 entry:
354   fence syncscope("agent") seq_cst
355   ret void
358 ; FUNC-LABEL: {{^}}workgroup_acquire:
359 ; GCN:        %bb.0
360 ; GCN-NOT:    s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
361 ; GCN-NOT:    ATOMIC_FENCE
362 ; GCN:        s_endpgm
363 define amdgpu_kernel void @workgroup_acquire() {
364 entry:
365   fence syncscope("workgroup") acquire
366   ret void
369 ; FUNC-LABEL: {{^}}workgroup_release:
370 ; GCN:        %bb.0
371 ; GCN-NOT:    s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
372 ; GCN-NOT:    ATOMIC_FENCE
373 ; GCN:        s_endpgm
374 define amdgpu_kernel void @workgroup_release() {
375 entry:
376   fence syncscope("workgroup") release
377   ret void
380 ; FUNC-LABEL: {{^}}workgroup_acq_rel:
381 ; GCN:        %bb.0
382 ; GCN-NOT:    s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
383 ; GCN-NOT:    ATOMIC_FENCE
384 ; GCN:        s_endpgm
385 define amdgpu_kernel void @workgroup_acq_rel() {
386 entry:
387   fence syncscope("workgroup") acq_rel
388   ret void
391 ; FUNC-LABEL: {{^}}workgroup_seq_cst:
392 ; GCN:        %bb.0
393 ; GCN-NOT:    s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
394 ; GCN-NOT:    ATOMIC_FENCE
395 ; GCN:        s_endpgm
396 define amdgpu_kernel void @workgroup_seq_cst() {
397 entry:
398   fence syncscope("workgroup") seq_cst
399   ret void
402 ; FUNC-LABEL: {{^}}wavefront_acquire:
403 ; GCN:        %bb.0
404 ; GCN-NOT:    ATOMIC_FENCE
405 ; GCN:        s_endpgm
406 define amdgpu_kernel void @wavefront_acquire() {
407 entry:
408   fence syncscope("wavefront") acquire
409   ret void
412 ; FUNC-LABEL: {{^}}wavefront_release:
413 ; GCN:        %bb.0
414 ; GCN-NOT:    ATOMIC_FENCE
415 ; GCN:        s_endpgm
416 define amdgpu_kernel void @wavefront_release() {
417 entry:
418   fence syncscope("wavefront") release
419   ret void
422 ; FUNC-LABEL: {{^}}wavefront_acq_rel:
423 ; GCN:        %bb.0
424 ; GCN-NOT:    ATOMIC_FENCE
425 ; GCN:        s_endpgm
426 define amdgpu_kernel void @wavefront_acq_rel() {
427 entry:
428   fence syncscope("wavefront") acq_rel
429   ret void
432 ; FUNC-LABEL: {{^}}wavefront_seq_cst:
433 ; GCN:        %bb.0
434 ; GCN-NOT:    ATOMIC_FENCE
435 ; GCN:        s_endpgm
436 define amdgpu_kernel void @wavefront_seq_cst() {
437 entry:
438   fence syncscope("wavefront") seq_cst
439   ret void