[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / memory-legalizer-amdpal.ll
blob431ca021a77931525ec7094dc3dc8c293b3809ef
1 ; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx600 -verify-machineinstrs < %s | FileCheck -check-prefixes=FUNC,GCN %s
2 ; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx700 -verify-machineinstrs < %s | FileCheck -check-prefixes=FUNC,GCN %s
3 ; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx800 -verify-machineinstrs < %s | FileCheck -check-prefixes=FUNC,GCN %s
4 ; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=FUNC,GCN %s
6 ; FUNC-LABEL: {{^}}system_acquire:
7 ; GCN:        %bb.0
8 ; GCN-NOT:    ATOMIC_FENCE
9 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
10 ; GCN-NEXT:   buffer_wbinvl1{{$}}
11 ; GCN:        s_endpgm
12 define amdgpu_kernel void @system_acquire() {
13 entry:
14   fence acquire
15   ret void
18 ; FUNC-LABEL: {{^}}system_release:
19 ; GCN:        %bb.0
20 ; GCN-NOT:    ATOMIC_FENCE
21 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
22 ; GCN:        s_endpgm
23 define amdgpu_kernel void @system_release() {
24 entry:
25   fence release
26   ret void
29 ; FUNC-LABEL: {{^}}system_acq_rel:
30 ; GCN:        %bb.0
31 ; GCN-NOT:    ATOMIC_FENCE
32 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
33 ; GCN:        buffer_wbinvl1{{$}}
34 ; GCN:        s_endpgm
35 define amdgpu_kernel void @system_acq_rel() {
36 entry:
37   fence acq_rel
38   ret void
41 ; FUNC-LABEL: {{^}}system_seq_cst:
42 ; GCN:        %bb.0
43 ; GCN-NOT:    ATOMIC_FENCE
44 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
45 ; GCN:        buffer_wbinvl1{{$}}
46 ; GCN:        s_endpgm
47 define amdgpu_kernel void @system_seq_cst() {
48 entry:
49   fence seq_cst
50   ret void
53 ; FUNC-LABEL: {{^}}system_one_as_acquire:
54 ; GCN:        %bb.0
55 ; GCN-NOT:    ATOMIC_FENCE
56 ; GCN:        s_waitcnt vmcnt(0){{$}}
57 ; GCN-NEXT:   buffer_wbinvl1{{$}}
58 ; GCN:        s_endpgm
59 define amdgpu_kernel void @system_one_as_acquire() {
60 entry:
61   fence syncscope("one-as") acquire
62   ret void
65 ; FUNC-LABEL: {{^}}system_one_as_release:
66 ; GCN:        %bb.0
67 ; GCN-NOT:    ATOMIC_FENCE
68 ; GCN:        s_waitcnt vmcnt(0){{$}}
69 ; GCN:        s_endpgm
70 define amdgpu_kernel void @system_one_as_release() {
71 entry:
72   fence syncscope("one-as") release
73   ret void
76 ; FUNC-LABEL: {{^}}system_one_as_acq_rel:
77 ; GCN:        %bb.0
78 ; GCN-NOT:    ATOMIC_FENCE
79 ; GCN:        s_waitcnt vmcnt(0){{$}}
80 ; GCN:        buffer_wbinvl1{{$}}
81 ; GCN:        s_endpgm
82 define amdgpu_kernel void @system_one_as_acq_rel() {
83 entry:
84   fence syncscope("one-as") acq_rel
85   ret void
88 ; FUNC-LABEL: {{^}}system_one_as_seq_cst:
89 ; GCN:        %bb.0
90 ; GCN-NOT:    ATOMIC_FENCE
91 ; GCN:        s_waitcnt vmcnt(0){{$}}
92 ; GCN:        buffer_wbinvl1{{$}}
93 ; GCN:        s_endpgm
94 define amdgpu_kernel void @system_one_as_seq_cst() {
95 entry:
96   fence syncscope("one-as") seq_cst
97   ret void
100 ; FUNC-LABEL: {{^}}singlethread_acquire:
101 ; GCN:        %bb.0
102 ; GCN-NOT:    ATOMIC_FENCE
103 ; GCN:        s_endpgm
104 define amdgpu_kernel void @singlethread_acquire() {
105 entry:
106   fence syncscope("singlethread") acquire
107   ret void
110 ; FUNC-LABEL: {{^}}singlethread_release:
111 ; GCN:        %bb.0
112 ; GCN-NOT:    ATOMIC_FENCE
113 ; GCN:        s_endpgm
114 define amdgpu_kernel void @singlethread_release() {
115 entry:
116   fence syncscope("singlethread") release
117   ret void
120 ; FUNC-LABEL: {{^}}singlethread_acq_rel:
121 ; GCN:        %bb.0
122 ; GCN-NOT:    ATOMIC_FENCE
123 ; GCN:        s_endpgm
124 define amdgpu_kernel void @singlethread_acq_rel() {
125 entry:
126   fence syncscope("singlethread") acq_rel
127   ret void
130 ; FUNC-LABEL: {{^}}singlethread_seq_cst:
131 ; GCN:        %bb.0
132 ; GCN-NOT:    ATOMIC_FENCE
133 ; GCN:        s_endpgm
134 define amdgpu_kernel void @singlethread_seq_cst() {
135 entry:
136   fence syncscope("singlethread") seq_cst
137   ret void
140 ; FUNC-LABEL: {{^}}singlethread_one_as_acquire:
141 ; GCN:        %bb.0
142 ; GCN-NOT:    ATOMIC_FENCE
143 ; GCN:        s_endpgm
144 define amdgpu_kernel void @singlethread_one_as_acquire() {
145 entry:
146   fence syncscope("singlethread-one-as") acquire
147   ret void
150 ; FUNC-LABEL: {{^}}singlethread_one_as_release:
151 ; GCN:        %bb.0
152 ; GCN-NOT:    ATOMIC_FENCE
153 ; GCN:        s_endpgm
154 define amdgpu_kernel void @singlethread_one_as_release() {
155 entry:
156   fence syncscope("singlethread-one-as") release
157   ret void
160 ; FUNC-LABEL: {{^}}singlethread_one_as_acq_rel:
161 ; GCN:        %bb.0
162 ; GCN-NOT:    ATOMIC_FENCE
163 ; GCN:        s_endpgm
164 define amdgpu_kernel void @singlethread_one_as_acq_rel() {
165 entry:
166   fence syncscope("singlethread-one-as") acq_rel
167   ret void
170 ; FUNC-LABEL: {{^}}singlethread_one_as_seq_cst:
171 ; GCN:        %bb.0
172 ; GCN-NOT:    ATOMIC_FENCE
173 ; GCN:        s_endpgm
174 define amdgpu_kernel void @singlethread_one_as_seq_cst() {
175 entry:
176   fence syncscope("singlethread-one-as") seq_cst
177   ret void
180 ; FUNC-LABEL: {{^}}agent_acquire:
181 ; GCN:        %bb.0
182 ; GCN-NOT:    ATOMIC_FENCE
183 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
184 ; GCN-NEXT:   buffer_wbinvl1{{$}}
185 ; GCN:        s_endpgm
186 define amdgpu_kernel void @agent_acquire() {
187 entry:
188   fence syncscope("agent") acquire
189   ret void
192 ; FUNC-LABEL: {{^}}agent_release:
193 ; GCN:        %bb.0
194 ; GCN-NOT:    ATOMIC_FENCE
195 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
196 ; GCN:        s_endpgm
197 define amdgpu_kernel void @agent_release() {
198 entry:
199   fence syncscope("agent") release
200   ret void
203 ; FUNC-LABEL: {{^}}agent_acq_rel:
204 ; GCN:        %bb.0
205 ; GCN-NOT:    ATOMIC_FENCE
206 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
207 ; GCN:        buffer_wbinvl1{{$}}
208 ; GCN:        s_endpgm
209 define amdgpu_kernel void @agent_acq_rel() {
210 entry:
211   fence syncscope("agent") acq_rel
212   ret void
215 ; FUNC-LABEL: {{^}}agent_seq_cst:
216 ; GCN:        %bb.0
217 ; GCN-NOT:    ATOMIC_FENCE
218 ; GCN:        s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
219 ; GCN:        buffer_wbinvl1{{$}}
220 ; GCN:        s_endpgm
221 define amdgpu_kernel void @agent_seq_cst() {
222 entry:
223   fence syncscope("agent") seq_cst
224   ret void
227 ; FUNC-LABEL: {{^}}agent_one_as_acquire:
228 ; GCN:        %bb.0
229 ; GCN-NOT:    ATOMIC_FENCE
230 ; GCN:        s_waitcnt vmcnt(0){{$}}
231 ; GCN-NEXT:   buffer_wbinvl1{{$}}
232 ; GCN:        s_endpgm
233 define amdgpu_kernel void @agent_one_as_acquire() {
234 entry:
235   fence syncscope("agent-one-as") acquire
236   ret void
239 ; FUNC-LABEL: {{^}}agent_one_as_release:
240 ; GCN:        %bb.0
241 ; GCN-NOT:    ATOMIC_FENCE
242 ; GCN:        s_waitcnt vmcnt(0){{$}}
243 ; GCN:        s_endpgm
244 define amdgpu_kernel void @agent_one_as_release() {
245 entry:
246   fence syncscope("agent-one-as") release
247   ret void
250 ; FUNC-LABEL: {{^}}agent_one_as_acq_rel:
251 ; GCN:        %bb.0
252 ; GCN-NOT:    ATOMIC_FENCE
253 ; GCN:        s_waitcnt vmcnt(0){{$}}
254 ; GCN:        buffer_wbinvl1{{$}}
255 ; GCN:        s_endpgm
256 define amdgpu_kernel void @agent_one_as_acq_rel() {
257 entry:
258   fence syncscope("agent-one-as") acq_rel
259   ret void
262 ; FUNC-LABEL: {{^}}agent_one_as_seq_cst:
263 ; GCN:        %bb.0
264 ; GCN-NOT:    ATOMIC_FENCE
265 ; GCN:        s_waitcnt vmcnt(0){{$}}
266 ; GCN:        buffer_wbinvl1{{$}}
267 ; GCN:        s_endpgm
268 define amdgpu_kernel void @agent_one_as_seq_cst() {
269 entry:
270   fence syncscope("agent-one-as") seq_cst
271   ret void
274 ; FUNC-LABEL: {{^}}workgroup_acquire:
275 ; GCN:        %bb.0
276 ; GCN-NOT:    s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
277 ; GCN-NOT:    ATOMIC_FENCE
278 ; GCN:        s_endpgm
279 define amdgpu_kernel void @workgroup_acquire() {
280 entry:
281   fence syncscope("workgroup") acquire
282   ret void
285 ; FUNC-LABEL: {{^}}workgroup_release:
286 ; GCN:        %bb.0
287 ; GCN-NOT:    s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
288 ; GCN-NOT:    ATOMIC_FENCE
289 ; GCN:        s_endpgm
290 define amdgpu_kernel void @workgroup_release() {
291 entry:
292   fence syncscope("workgroup") release
293   ret void
296 ; FUNC-LABEL: {{^}}workgroup_acq_rel:
297 ; GCN:        %bb.0
298 ; GCN-NOT:    s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
299 ; GCN-NOT:    ATOMIC_FENCE
300 ; GCN:        s_endpgm
301 define amdgpu_kernel void @workgroup_acq_rel() {
302 entry:
303   fence syncscope("workgroup") acq_rel
304   ret void
307 ; FUNC-LABEL: {{^}}workgroup_seq_cst:
308 ; GCN:        %bb.0
309 ; GCN-NOT:    s_waitcnt vmcnt(0) lgkmcnt(0){{$}}
310 ; GCN-NOT:    ATOMIC_FENCE
311 ; GCN:        s_endpgm
312 define amdgpu_kernel void @workgroup_seq_cst() {
313 entry:
314   fence syncscope("workgroup") seq_cst
315   ret void
318 ; FUNC-LABEL: {{^}}workgroup_one_as_acquire:
319 ; GCN:        %bb.0
320 ; GCN-NOT:    s_waitcnt vmcnt(0){{$}}
321 ; GCN-NOT:    ATOMIC_FENCE
322 ; GCN:        s_endpgm
323 define amdgpu_kernel void @workgroup_one_as_acquire() {
324 entry:
325   fence syncscope("workgroup-one-as") acquire
326   ret void
329 ; FUNC-LABEL: {{^}}workgroup_one_as_release:
330 ; GCN:        %bb.0
331 ; GCN-NOT:    s_waitcnt vmcnt(0){{$}}
332 ; GCN-NOT:    ATOMIC_FENCE
333 ; GCN:        s_endpgm
334 define amdgpu_kernel void @workgroup_one_as_release() {
335 entry:
336   fence syncscope("workgroup-one-as") release
337   ret void
340 ; FUNC-LABEL: {{^}}workgroup_one_as_acq_rel:
341 ; GCN:        %bb.0
342 ; GCN-NOT:    s_waitcnt vmcnt(0){{$}}
343 ; GCN-NOT:    ATOMIC_FENCE
344 ; GCN:        s_endpgm
345 define amdgpu_kernel void @workgroup_one_as_acq_rel() {
346 entry:
347   fence syncscope("workgroup-one-as") acq_rel
348   ret void
351 ; FUNC-LABEL: {{^}}workgroup_one_as_seq_cst:
352 ; GCN:        %bb.0
353 ; GCN-NOT:    s_waitcnt vmcnt(0){{$}}
354 ; GCN-NOT:    ATOMIC_FENCE
355 ; GCN:        s_endpgm
356 define amdgpu_kernel void @workgroup_one_as_seq_cst() {
357 entry:
358   fence syncscope("workgroup-one-as") seq_cst
359   ret void
362 ; FUNC-LABEL: {{^}}wavefront_acquire:
363 ; GCN:        %bb.0
364 ; GCN-NOT:    ATOMIC_FENCE
365 ; GCN:        s_endpgm
366 define amdgpu_kernel void @wavefront_acquire() {
367 entry:
368   fence syncscope("wavefront") acquire
369   ret void
372 ; FUNC-LABEL: {{^}}wavefront_release:
373 ; GCN:        %bb.0
374 ; GCN-NOT:    ATOMIC_FENCE
375 ; GCN:        s_endpgm
376 define amdgpu_kernel void @wavefront_release() {
377 entry:
378   fence syncscope("wavefront") release
379   ret void
382 ; FUNC-LABEL: {{^}}wavefront_acq_rel:
383 ; GCN:        %bb.0
384 ; GCN-NOT:    ATOMIC_FENCE
385 ; GCN:        s_endpgm
386 define amdgpu_kernel void @wavefront_acq_rel() {
387 entry:
388   fence syncscope("wavefront") acq_rel
389   ret void
392 ; FUNC-LABEL: {{^}}wavefront_seq_cst:
393 ; GCN:        %bb.0
394 ; GCN-NOT:    ATOMIC_FENCE
395 ; GCN:        s_endpgm
396 define amdgpu_kernel void @wavefront_seq_cst() {
397 entry:
398   fence syncscope("wavefront") seq_cst
399   ret void
402 ; FUNC-LABEL: {{^}}wavefront_one_as_acquire:
403 ; GCN:        %bb.0
404 ; GCN-NOT:    ATOMIC_FENCE
405 ; GCN:        s_endpgm
406 define amdgpu_kernel void @wavefront_one_as_acquire() {
407 entry:
408   fence syncscope("wavefront-one-as") acquire
409   ret void
412 ; FUNC-LABEL: {{^}}wavefront_one_as_release:
413 ; GCN:        %bb.0
414 ; GCN-NOT:    ATOMIC_FENCE
415 ; GCN:        s_endpgm
416 define amdgpu_kernel void @wavefront_one_as_release() {
417 entry:
418   fence syncscope("wavefront-one-as") release
419   ret void
422 ; FUNC-LABEL: {{^}}wavefront_one_as_acq_rel:
423 ; GCN:        %bb.0
424 ; GCN-NOT:    ATOMIC_FENCE
425 ; GCN:        s_endpgm
426 define amdgpu_kernel void @wavefront_one_as_acq_rel() {
427 entry:
428   fence syncscope("wavefront-one-as") acq_rel
429   ret void
432 ; FUNC-LABEL: {{^}}wavefront_one_as_seq_cst:
433 ; GCN:        %bb.0
434 ; GCN-NOT:    ATOMIC_FENCE
435 ; GCN:        s_endpgm
436 define amdgpu_kernel void @wavefront_one_as_seq_cst() {
437 entry:
438   fence syncscope("wavefront-one-as") seq_cst
439   ret void