[gn build] Port 0154dce8d39d
[llvm-project.git] / llvm / test / CodeGen / M68k / CodeModel / Large / Atomics / load-store.ll
bloba59a40d8e9fd23212f9f3c7c507ec4ec998da7f3
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC
3 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC
4 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC
5 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC
6 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 --code-model=large | FileCheck %s --check-prefix=ATOMIC
7 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 --code-model=large | FileCheck %s --check-prefix=ATOMIC
8 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 --code-model=large | FileCheck %s --check-prefix=ATOMIC
9 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC
10 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC
11 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC
13 define i8 @atomic_load_i8_unordered(ptr %a) nounwind {
14 ; NO-ATOMIC-LABEL: atomic_load_i8_unordered:
15 ; NO-ATOMIC:       ; %bb.0:
16 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
17 ; NO-ATOMIC-NEXT:    move.b (%a0), %d0
18 ; NO-ATOMIC-NEXT:    rts
20 ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_unordered:
21 ; NO-ATOMIC-PIC:       ; %bb.0:
22 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
23 ; NO-ATOMIC-PIC-NEXT:    move.b (%a0), %d0
24 ; NO-ATOMIC-PIC-NEXT:    rts
26 ; ATOMIC-LABEL: atomic_load_i8_unordered:
27 ; ATOMIC:       ; %bb.0:
28 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
29 ; ATOMIC-NEXT:    move.b (%a0), %d0
30 ; ATOMIC-NEXT:    rts
32 ; ATOMIC-PIC-LABEL: atomic_load_i8_unordered:
33 ; ATOMIC-PIC:       ; %bb.0:
34 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
35 ; ATOMIC-PIC-NEXT:    move.b (%a0), %d0
36 ; ATOMIC-PIC-NEXT:    rts
37   %1 = load atomic i8, ptr %a unordered, align 1
38   ret i8 %1
41 define i8 @atomic_load_i8_monotonic(ptr %a) nounwind {
42 ; NO-ATOMIC-LABEL: atomic_load_i8_monotonic:
43 ; NO-ATOMIC:       ; %bb.0:
44 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
45 ; NO-ATOMIC-NEXT:    move.b (%a0), %d0
46 ; NO-ATOMIC-NEXT:    rts
48 ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_monotonic:
49 ; NO-ATOMIC-PIC:       ; %bb.0:
50 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
51 ; NO-ATOMIC-PIC-NEXT:    move.b (%a0), %d0
52 ; NO-ATOMIC-PIC-NEXT:    rts
54 ; ATOMIC-LABEL: atomic_load_i8_monotonic:
55 ; ATOMIC:       ; %bb.0:
56 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
57 ; ATOMIC-NEXT:    move.b (%a0), %d0
58 ; ATOMIC-NEXT:    rts
60 ; ATOMIC-PIC-LABEL: atomic_load_i8_monotonic:
61 ; ATOMIC-PIC:       ; %bb.0:
62 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
63 ; ATOMIC-PIC-NEXT:    move.b (%a0), %d0
64 ; ATOMIC-PIC-NEXT:    rts
65   %1 = load atomic i8, ptr %a monotonic, align 1
66   ret i8 %1
69 define i8 @atomic_load_i8_acquire(ptr %a) nounwind {
70 ; NO-ATOMIC-LABEL: atomic_load_i8_acquire:
71 ; NO-ATOMIC:       ; %bb.0:
72 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
73 ; NO-ATOMIC-NEXT:    move.b (%a0), %d0
74 ; NO-ATOMIC-NEXT:    rts
76 ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_acquire:
77 ; NO-ATOMIC-PIC:       ; %bb.0:
78 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
79 ; NO-ATOMIC-PIC-NEXT:    move.b (%a0), %d0
80 ; NO-ATOMIC-PIC-NEXT:    rts
82 ; ATOMIC-LABEL: atomic_load_i8_acquire:
83 ; ATOMIC:       ; %bb.0:
84 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
85 ; ATOMIC-NEXT:    move.b (%a0), %d0
86 ; ATOMIC-NEXT:    rts
88 ; ATOMIC-PIC-LABEL: atomic_load_i8_acquire:
89 ; ATOMIC-PIC:       ; %bb.0:
90 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
91 ; ATOMIC-PIC-NEXT:    move.b (%a0), %d0
92 ; ATOMIC-PIC-NEXT:    rts
93   %1 = load atomic i8, ptr %a acquire, align 1
94   ret i8 %1
97 define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind {
98 ; NO-ATOMIC-LABEL: atomic_load_i8_seq_cst:
99 ; NO-ATOMIC:       ; %bb.0:
100 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
101 ; NO-ATOMIC-NEXT:    move.b (%a0), %d0
102 ; NO-ATOMIC-NEXT:    rts
104 ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_seq_cst:
105 ; NO-ATOMIC-PIC:       ; %bb.0:
106 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
107 ; NO-ATOMIC-PIC-NEXT:    move.b (%a0), %d0
108 ; NO-ATOMIC-PIC-NEXT:    rts
110 ; ATOMIC-LABEL: atomic_load_i8_seq_cst:
111 ; ATOMIC:       ; %bb.0:
112 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
113 ; ATOMIC-NEXT:    move.b (%a0), %d0
114 ; ATOMIC-NEXT:    rts
116 ; ATOMIC-PIC-LABEL: atomic_load_i8_seq_cst:
117 ; ATOMIC-PIC:       ; %bb.0:
118 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
119 ; ATOMIC-PIC-NEXT:    move.b (%a0), %d0
120 ; ATOMIC-PIC-NEXT:    rts
121   %1 = load atomic i8, ptr %a seq_cst, align 1
122   ret i8 %1
125 define i16 @atomic_load_i16_unordered(ptr %a) nounwind {
126 ; NO-ATOMIC-LABEL: atomic_load_i16_unordered:
127 ; NO-ATOMIC:       ; %bb.0:
128 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
129 ; NO-ATOMIC-NEXT:    move.w (%a0), %d0
130 ; NO-ATOMIC-NEXT:    rts
132 ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_unordered:
133 ; NO-ATOMIC-PIC:       ; %bb.0:
134 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
135 ; NO-ATOMIC-PIC-NEXT:    move.w (%a0), %d0
136 ; NO-ATOMIC-PIC-NEXT:    rts
138 ; ATOMIC-LABEL: atomic_load_i16_unordered:
139 ; ATOMIC:       ; %bb.0:
140 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
141 ; ATOMIC-NEXT:    move.w (%a0), %d0
142 ; ATOMIC-NEXT:    rts
144 ; ATOMIC-PIC-LABEL: atomic_load_i16_unordered:
145 ; ATOMIC-PIC:       ; %bb.0:
146 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
147 ; ATOMIC-PIC-NEXT:    move.w (%a0), %d0
148 ; ATOMIC-PIC-NEXT:    rts
149   %1 = load atomic i16, ptr %a unordered, align 2
150   ret i16 %1
153 define i16 @atomic_load_i16_monotonic(ptr %a) nounwind {
154 ; NO-ATOMIC-LABEL: atomic_load_i16_monotonic:
155 ; NO-ATOMIC:       ; %bb.0:
156 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
157 ; NO-ATOMIC-NEXT:    move.w (%a0), %d0
158 ; NO-ATOMIC-NEXT:    rts
160 ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_monotonic:
161 ; NO-ATOMIC-PIC:       ; %bb.0:
162 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
163 ; NO-ATOMIC-PIC-NEXT:    move.w (%a0), %d0
164 ; NO-ATOMIC-PIC-NEXT:    rts
166 ; ATOMIC-LABEL: atomic_load_i16_monotonic:
167 ; ATOMIC:       ; %bb.0:
168 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
169 ; ATOMIC-NEXT:    move.w (%a0), %d0
170 ; ATOMIC-NEXT:    rts
172 ; ATOMIC-PIC-LABEL: atomic_load_i16_monotonic:
173 ; ATOMIC-PIC:       ; %bb.0:
174 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
175 ; ATOMIC-PIC-NEXT:    move.w (%a0), %d0
176 ; ATOMIC-PIC-NEXT:    rts
177   %1 = load atomic i16, ptr %a monotonic, align 2
178   ret i16 %1
181 define i16 @atomic_load_i16_acquire(ptr %a) nounwind {
182 ; NO-ATOMIC-LABEL: atomic_load_i16_acquire:
183 ; NO-ATOMIC:       ; %bb.0:
184 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
185 ; NO-ATOMIC-NEXT:    move.w (%a0), %d0
186 ; NO-ATOMIC-NEXT:    rts
188 ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_acquire:
189 ; NO-ATOMIC-PIC:       ; %bb.0:
190 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
191 ; NO-ATOMIC-PIC-NEXT:    move.w (%a0), %d0
192 ; NO-ATOMIC-PIC-NEXT:    rts
194 ; ATOMIC-LABEL: atomic_load_i16_acquire:
195 ; ATOMIC:       ; %bb.0:
196 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
197 ; ATOMIC-NEXT:    move.w (%a0), %d0
198 ; ATOMIC-NEXT:    rts
200 ; ATOMIC-PIC-LABEL: atomic_load_i16_acquire:
201 ; ATOMIC-PIC:       ; %bb.0:
202 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
203 ; ATOMIC-PIC-NEXT:    move.w (%a0), %d0
204 ; ATOMIC-PIC-NEXT:    rts
205   %1 = load atomic i16, ptr %a acquire, align 2
206   ret i16 %1
209 define i16 @atomic_load_i16_seq_cst(ptr %a) nounwind {
210 ; NO-ATOMIC-LABEL: atomic_load_i16_seq_cst:
211 ; NO-ATOMIC:       ; %bb.0:
212 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
213 ; NO-ATOMIC-NEXT:    move.w (%a0), %d0
214 ; NO-ATOMIC-NEXT:    rts
216 ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_seq_cst:
217 ; NO-ATOMIC-PIC:       ; %bb.0:
218 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
219 ; NO-ATOMIC-PIC-NEXT:    move.w (%a0), %d0
220 ; NO-ATOMIC-PIC-NEXT:    rts
222 ; ATOMIC-LABEL: atomic_load_i16_seq_cst:
223 ; ATOMIC:       ; %bb.0:
224 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
225 ; ATOMIC-NEXT:    move.w (%a0), %d0
226 ; ATOMIC-NEXT:    rts
228 ; ATOMIC-PIC-LABEL: atomic_load_i16_seq_cst:
229 ; ATOMIC-PIC:       ; %bb.0:
230 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
231 ; ATOMIC-PIC-NEXT:    move.w (%a0), %d0
232 ; ATOMIC-PIC-NEXT:    rts
233   %1 = load atomic i16, ptr %a seq_cst, align 2
234   ret i16 %1
237 define i32 @atomic_load_i32_unordered(ptr %a) nounwind {
238 ; NO-ATOMIC-LABEL: atomic_load_i32_unordered:
239 ; NO-ATOMIC:       ; %bb.0:
240 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
241 ; NO-ATOMIC-NEXT:    move.l (%a0), %d0
242 ; NO-ATOMIC-NEXT:    rts
244 ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_unordered:
245 ; NO-ATOMIC-PIC:       ; %bb.0:
246 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
247 ; NO-ATOMIC-PIC-NEXT:    move.l (%a0), %d0
248 ; NO-ATOMIC-PIC-NEXT:    rts
250 ; ATOMIC-LABEL: atomic_load_i32_unordered:
251 ; ATOMIC:       ; %bb.0:
252 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
253 ; ATOMIC-NEXT:    move.l (%a0), %d0
254 ; ATOMIC-NEXT:    rts
256 ; ATOMIC-PIC-LABEL: atomic_load_i32_unordered:
257 ; ATOMIC-PIC:       ; %bb.0:
258 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
259 ; ATOMIC-PIC-NEXT:    move.l (%a0), %d0
260 ; ATOMIC-PIC-NEXT:    rts
261   %1 = load atomic i32, ptr %a unordered, align 4
262   ret i32 %1
265 define i32 @atomic_load_i32_monotonic(ptr %a) nounwind {
266 ; NO-ATOMIC-LABEL: atomic_load_i32_monotonic:
267 ; NO-ATOMIC:       ; %bb.0:
268 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
269 ; NO-ATOMIC-NEXT:    move.l (%a0), %d0
270 ; NO-ATOMIC-NEXT:    rts
272 ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_monotonic:
273 ; NO-ATOMIC-PIC:       ; %bb.0:
274 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
275 ; NO-ATOMIC-PIC-NEXT:    move.l (%a0), %d0
276 ; NO-ATOMIC-PIC-NEXT:    rts
278 ; ATOMIC-LABEL: atomic_load_i32_monotonic:
279 ; ATOMIC:       ; %bb.0:
280 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
281 ; ATOMIC-NEXT:    move.l (%a0), %d0
282 ; ATOMIC-NEXT:    rts
284 ; ATOMIC-PIC-LABEL: atomic_load_i32_monotonic:
285 ; ATOMIC-PIC:       ; %bb.0:
286 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
287 ; ATOMIC-PIC-NEXT:    move.l (%a0), %d0
288 ; ATOMIC-PIC-NEXT:    rts
289   %1 = load atomic i32, ptr %a monotonic, align 4
290   ret i32 %1
293 define i32 @atomic_load_i32_acquire(ptr %a) nounwind {
294 ; NO-ATOMIC-LABEL: atomic_load_i32_acquire:
295 ; NO-ATOMIC:       ; %bb.0:
296 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
297 ; NO-ATOMIC-NEXT:    move.l (%a0), %d0
298 ; NO-ATOMIC-NEXT:    rts
300 ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_acquire:
301 ; NO-ATOMIC-PIC:       ; %bb.0:
302 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
303 ; NO-ATOMIC-PIC-NEXT:    move.l (%a0), %d0
304 ; NO-ATOMIC-PIC-NEXT:    rts
306 ; ATOMIC-LABEL: atomic_load_i32_acquire:
307 ; ATOMIC:       ; %bb.0:
308 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
309 ; ATOMIC-NEXT:    move.l (%a0), %d0
310 ; ATOMIC-NEXT:    rts
312 ; ATOMIC-PIC-LABEL: atomic_load_i32_acquire:
313 ; ATOMIC-PIC:       ; %bb.0:
314 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
315 ; ATOMIC-PIC-NEXT:    move.l (%a0), %d0
316 ; ATOMIC-PIC-NEXT:    rts
317   %1 = load atomic i32, ptr %a acquire, align 4
318   ret i32 %1
321 define i32 @atomic_load_i32_seq_cst(ptr %a) nounwind {
322 ; NO-ATOMIC-LABEL: atomic_load_i32_seq_cst:
323 ; NO-ATOMIC:       ; %bb.0:
324 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
325 ; NO-ATOMIC-NEXT:    move.l (%a0), %d0
326 ; NO-ATOMIC-NEXT:    rts
328 ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_seq_cst:
329 ; NO-ATOMIC-PIC:       ; %bb.0:
330 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
331 ; NO-ATOMIC-PIC-NEXT:    move.l (%a0), %d0
332 ; NO-ATOMIC-PIC-NEXT:    rts
334 ; ATOMIC-LABEL: atomic_load_i32_seq_cst:
335 ; ATOMIC:       ; %bb.0:
336 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
337 ; ATOMIC-NEXT:    move.l (%a0), %d0
338 ; ATOMIC-NEXT:    rts
340 ; ATOMIC-PIC-LABEL: atomic_load_i32_seq_cst:
341 ; ATOMIC-PIC:       ; %bb.0:
342 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
343 ; ATOMIC-PIC-NEXT:    move.l (%a0), %d0
344 ; ATOMIC-PIC-NEXT:    rts
345   %1 = load atomic i32, ptr %a seq_cst, align 4
346   ret i32 %1
349 define i64 @atomic_load_i64_unordered(ptr %a) nounwind {
350 ; NO-ATOMIC-LABEL: atomic_load_i64_unordered:
351 ; NO-ATOMIC:       ; %bb.0:
352 ; NO-ATOMIC-NEXT:    suba.l #12, %sp
353 ; NO-ATOMIC-NEXT:    move.l #0, (4,%sp)
354 ; NO-ATOMIC-NEXT:    move.l (16,%sp), (%sp)
355 ; NO-ATOMIC-NEXT:    jsr __atomic_load_8
356 ; NO-ATOMIC-NEXT:    adda.l #12, %sp
357 ; NO-ATOMIC-NEXT:    rts
359 ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_unordered:
360 ; NO-ATOMIC-PIC:       ; %bb.0:
361 ; NO-ATOMIC-PIC-NEXT:    suba.l #12, %sp
362 ; NO-ATOMIC-PIC-NEXT:    move.l #0, (4,%sp)
363 ; NO-ATOMIC-PIC-NEXT:    move.l (16,%sp), (%sp)
364 ; NO-ATOMIC-PIC-NEXT:    jsr (__atomic_load_8@PLT,%pc)
365 ; NO-ATOMIC-PIC-NEXT:    adda.l #12, %sp
366 ; NO-ATOMIC-PIC-NEXT:    rts
368 ; ATOMIC-LABEL: atomic_load_i64_unordered:
369 ; ATOMIC:       ; %bb.0:
370 ; ATOMIC-NEXT:    suba.l #12, %sp
371 ; ATOMIC-NEXT:    move.l #0, (4,%sp)
372 ; ATOMIC-NEXT:    move.l (16,%sp), (%sp)
373 ; ATOMIC-NEXT:    jsr __atomic_load_8
374 ; ATOMIC-NEXT:    adda.l #12, %sp
375 ; ATOMIC-NEXT:    rts
377 ; ATOMIC-PIC-LABEL: atomic_load_i64_unordered:
378 ; ATOMIC-PIC:       ; %bb.0:
379 ; ATOMIC-PIC-NEXT:    suba.l #12, %sp
380 ; ATOMIC-PIC-NEXT:    move.l #0, (4,%sp)
381 ; ATOMIC-PIC-NEXT:    move.l (16,%sp), (%sp)
382 ; ATOMIC-PIC-NEXT:    jsr (__atomic_load_8@PLT,%pc)
383 ; ATOMIC-PIC-NEXT:    adda.l #12, %sp
384 ; ATOMIC-PIC-NEXT:    rts
385   %1 = load atomic i64, ptr %a unordered, align 8
386   ret i64 %1
389 define i64 @atomic_load_i64_monotonic(ptr %a) nounwind {
390 ; NO-ATOMIC-LABEL: atomic_load_i64_monotonic:
391 ; NO-ATOMIC:       ; %bb.0:
392 ; NO-ATOMIC-NEXT:    suba.l #12, %sp
393 ; NO-ATOMIC-NEXT:    move.l #0, (4,%sp)
394 ; NO-ATOMIC-NEXT:    move.l (16,%sp), (%sp)
395 ; NO-ATOMIC-NEXT:    jsr __atomic_load_8
396 ; NO-ATOMIC-NEXT:    adda.l #12, %sp
397 ; NO-ATOMIC-NEXT:    rts
399 ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_monotonic:
400 ; NO-ATOMIC-PIC:       ; %bb.0:
401 ; NO-ATOMIC-PIC-NEXT:    suba.l #12, %sp
402 ; NO-ATOMIC-PIC-NEXT:    move.l #0, (4,%sp)
403 ; NO-ATOMIC-PIC-NEXT:    move.l (16,%sp), (%sp)
404 ; NO-ATOMIC-PIC-NEXT:    jsr (__atomic_load_8@PLT,%pc)
405 ; NO-ATOMIC-PIC-NEXT:    adda.l #12, %sp
406 ; NO-ATOMIC-PIC-NEXT:    rts
408 ; ATOMIC-LABEL: atomic_load_i64_monotonic:
409 ; ATOMIC:       ; %bb.0:
410 ; ATOMIC-NEXT:    suba.l #12, %sp
411 ; ATOMIC-NEXT:    move.l #0, (4,%sp)
412 ; ATOMIC-NEXT:    move.l (16,%sp), (%sp)
413 ; ATOMIC-NEXT:    jsr __atomic_load_8
414 ; ATOMIC-NEXT:    adda.l #12, %sp
415 ; ATOMIC-NEXT:    rts
417 ; ATOMIC-PIC-LABEL: atomic_load_i64_monotonic:
418 ; ATOMIC-PIC:       ; %bb.0:
419 ; ATOMIC-PIC-NEXT:    suba.l #12, %sp
420 ; ATOMIC-PIC-NEXT:    move.l #0, (4,%sp)
421 ; ATOMIC-PIC-NEXT:    move.l (16,%sp), (%sp)
422 ; ATOMIC-PIC-NEXT:    jsr (__atomic_load_8@PLT,%pc)
423 ; ATOMIC-PIC-NEXT:    adda.l #12, %sp
424 ; ATOMIC-PIC-NEXT:    rts
425   %1 = load atomic i64, ptr %a monotonic, align 8
426   ret i64 %1
429 define i64 @atomic_load_i64_acquire(ptr %a) nounwind {
430 ; NO-ATOMIC-LABEL: atomic_load_i64_acquire:
431 ; NO-ATOMIC:       ; %bb.0:
432 ; NO-ATOMIC-NEXT:    suba.l #12, %sp
433 ; NO-ATOMIC-NEXT:    move.l #2, (4,%sp)
434 ; NO-ATOMIC-NEXT:    move.l (16,%sp), (%sp)
435 ; NO-ATOMIC-NEXT:    jsr __atomic_load_8
436 ; NO-ATOMIC-NEXT:    adda.l #12, %sp
437 ; NO-ATOMIC-NEXT:    rts
439 ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_acquire:
440 ; NO-ATOMIC-PIC:       ; %bb.0:
441 ; NO-ATOMIC-PIC-NEXT:    suba.l #12, %sp
442 ; NO-ATOMIC-PIC-NEXT:    move.l #2, (4,%sp)
443 ; NO-ATOMIC-PIC-NEXT:    move.l (16,%sp), (%sp)
444 ; NO-ATOMIC-PIC-NEXT:    jsr (__atomic_load_8@PLT,%pc)
445 ; NO-ATOMIC-PIC-NEXT:    adda.l #12, %sp
446 ; NO-ATOMIC-PIC-NEXT:    rts
448 ; ATOMIC-LABEL: atomic_load_i64_acquire:
449 ; ATOMIC:       ; %bb.0:
450 ; ATOMIC-NEXT:    suba.l #12, %sp
451 ; ATOMIC-NEXT:    move.l #2, (4,%sp)
452 ; ATOMIC-NEXT:    move.l (16,%sp), (%sp)
453 ; ATOMIC-NEXT:    jsr __atomic_load_8
454 ; ATOMIC-NEXT:    adda.l #12, %sp
455 ; ATOMIC-NEXT:    rts
457 ; ATOMIC-PIC-LABEL: atomic_load_i64_acquire:
458 ; ATOMIC-PIC:       ; %bb.0:
459 ; ATOMIC-PIC-NEXT:    suba.l #12, %sp
460 ; ATOMIC-PIC-NEXT:    move.l #2, (4,%sp)
461 ; ATOMIC-PIC-NEXT:    move.l (16,%sp), (%sp)
462 ; ATOMIC-PIC-NEXT:    jsr (__atomic_load_8@PLT,%pc)
463 ; ATOMIC-PIC-NEXT:    adda.l #12, %sp
464 ; ATOMIC-PIC-NEXT:    rts
465   %1 = load atomic i64, ptr %a acquire, align 8
466   ret i64 %1
469 define i64 @atomic_load_i64_seq_cst(ptr %a) nounwind {
470 ; NO-ATOMIC-LABEL: atomic_load_i64_seq_cst:
471 ; NO-ATOMIC:       ; %bb.0:
472 ; NO-ATOMIC-NEXT:    suba.l #12, %sp
473 ; NO-ATOMIC-NEXT:    move.l #5, (4,%sp)
474 ; NO-ATOMIC-NEXT:    move.l (16,%sp), (%sp)
475 ; NO-ATOMIC-NEXT:    jsr __atomic_load_8
476 ; NO-ATOMIC-NEXT:    adda.l #12, %sp
477 ; NO-ATOMIC-NEXT:    rts
479 ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_seq_cst:
480 ; NO-ATOMIC-PIC:       ; %bb.0:
481 ; NO-ATOMIC-PIC-NEXT:    suba.l #12, %sp
482 ; NO-ATOMIC-PIC-NEXT:    move.l #5, (4,%sp)
483 ; NO-ATOMIC-PIC-NEXT:    move.l (16,%sp), (%sp)
484 ; NO-ATOMIC-PIC-NEXT:    jsr (__atomic_load_8@PLT,%pc)
485 ; NO-ATOMIC-PIC-NEXT:    adda.l #12, %sp
486 ; NO-ATOMIC-PIC-NEXT:    rts
488 ; ATOMIC-LABEL: atomic_load_i64_seq_cst:
489 ; ATOMIC:       ; %bb.0:
490 ; ATOMIC-NEXT:    suba.l #12, %sp
491 ; ATOMIC-NEXT:    move.l #5, (4,%sp)
492 ; ATOMIC-NEXT:    move.l (16,%sp), (%sp)
493 ; ATOMIC-NEXT:    jsr __atomic_load_8
494 ; ATOMIC-NEXT:    adda.l #12, %sp
495 ; ATOMIC-NEXT:    rts
497 ; ATOMIC-PIC-LABEL: atomic_load_i64_seq_cst:
498 ; ATOMIC-PIC:       ; %bb.0:
499 ; ATOMIC-PIC-NEXT:    suba.l #12, %sp
500 ; ATOMIC-PIC-NEXT:    move.l #5, (4,%sp)
501 ; ATOMIC-PIC-NEXT:    move.l (16,%sp), (%sp)
502 ; ATOMIC-PIC-NEXT:    jsr (__atomic_load_8@PLT,%pc)
503 ; ATOMIC-PIC-NEXT:    adda.l #12, %sp
504 ; ATOMIC-PIC-NEXT:    rts
505   %1 = load atomic i64, ptr %a seq_cst, align 8
506   ret i64 %1
509 define void @atomic_store_i8_unordered(ptr %a, i8 %val) nounwind {
510 ; NO-ATOMIC-LABEL: atomic_store_i8_unordered:
511 ; NO-ATOMIC:       ; %bb.0:
512 ; NO-ATOMIC-NEXT:    move.b (11,%sp), %d0
513 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
514 ; NO-ATOMIC-NEXT:    move.b %d0, (%a0)
515 ; NO-ATOMIC-NEXT:    rts
517 ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_unordered:
518 ; NO-ATOMIC-PIC:       ; %bb.0:
519 ; NO-ATOMIC-PIC-NEXT:    move.b (11,%sp), %d0
520 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
521 ; NO-ATOMIC-PIC-NEXT:    move.b %d0, (%a0)
522 ; NO-ATOMIC-PIC-NEXT:    rts
524 ; ATOMIC-LABEL: atomic_store_i8_unordered:
525 ; ATOMIC:       ; %bb.0:
526 ; ATOMIC-NEXT:    move.b (11,%sp), %d0
527 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
528 ; ATOMIC-NEXT:    move.b %d0, (%a0)
529 ; ATOMIC-NEXT:    rts
531 ; ATOMIC-PIC-LABEL: atomic_store_i8_unordered:
532 ; ATOMIC-PIC:       ; %bb.0:
533 ; ATOMIC-PIC-NEXT:    move.b (11,%sp), %d0
534 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
535 ; ATOMIC-PIC-NEXT:    move.b %d0, (%a0)
536 ; ATOMIC-PIC-NEXT:    rts
537   store atomic i8 %val, ptr %a unordered, align 1
538   ret void
541 define void @atomic_store_i8_monotonic(ptr %a, i8 %val) nounwind {
542 ; NO-ATOMIC-LABEL: atomic_store_i8_monotonic:
543 ; NO-ATOMIC:       ; %bb.0:
544 ; NO-ATOMIC-NEXT:    move.b (11,%sp), %d0
545 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
546 ; NO-ATOMIC-NEXT:    move.b %d0, (%a0)
547 ; NO-ATOMIC-NEXT:    rts
549 ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_monotonic:
550 ; NO-ATOMIC-PIC:       ; %bb.0:
551 ; NO-ATOMIC-PIC-NEXT:    move.b (11,%sp), %d0
552 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
553 ; NO-ATOMIC-PIC-NEXT:    move.b %d0, (%a0)
554 ; NO-ATOMIC-PIC-NEXT:    rts
556 ; ATOMIC-LABEL: atomic_store_i8_monotonic:
557 ; ATOMIC:       ; %bb.0:
558 ; ATOMIC-NEXT:    move.b (11,%sp), %d0
559 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
560 ; ATOMIC-NEXT:    move.b %d0, (%a0)
561 ; ATOMIC-NEXT:    rts
563 ; ATOMIC-PIC-LABEL: atomic_store_i8_monotonic:
564 ; ATOMIC-PIC:       ; %bb.0:
565 ; ATOMIC-PIC-NEXT:    move.b (11,%sp), %d0
566 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
567 ; ATOMIC-PIC-NEXT:    move.b %d0, (%a0)
568 ; ATOMIC-PIC-NEXT:    rts
569   store atomic i8 %val, ptr %a monotonic, align 1
570   ret void
573 define void @atomic_store_i8_release(ptr %a, i8 %val) nounwind {
574 ; NO-ATOMIC-LABEL: atomic_store_i8_release:
575 ; NO-ATOMIC:       ; %bb.0:
576 ; NO-ATOMIC-NEXT:    move.b (11,%sp), %d0
577 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
578 ; NO-ATOMIC-NEXT:    move.b %d0, (%a0)
579 ; NO-ATOMIC-NEXT:    rts
581 ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_release:
582 ; NO-ATOMIC-PIC:       ; %bb.0:
583 ; NO-ATOMIC-PIC-NEXT:    move.b (11,%sp), %d0
584 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
585 ; NO-ATOMIC-PIC-NEXT:    move.b %d0, (%a0)
586 ; NO-ATOMIC-PIC-NEXT:    rts
588 ; ATOMIC-LABEL: atomic_store_i8_release:
589 ; ATOMIC:       ; %bb.0:
590 ; ATOMIC-NEXT:    move.b (11,%sp), %d0
591 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
592 ; ATOMIC-NEXT:    move.b %d0, (%a0)
593 ; ATOMIC-NEXT:    rts
595 ; ATOMIC-PIC-LABEL: atomic_store_i8_release:
596 ; ATOMIC-PIC:       ; %bb.0:
597 ; ATOMIC-PIC-NEXT:    move.b (11,%sp), %d0
598 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
599 ; ATOMIC-PIC-NEXT:    move.b %d0, (%a0)
600 ; ATOMIC-PIC-NEXT:    rts
601   store atomic i8 %val, ptr %a release, align 1
602   ret void
605 define void @atomic_store_i8_seq_cst(ptr %a, i8 %val) nounwind {
606 ; NO-ATOMIC-LABEL: atomic_store_i8_seq_cst:
607 ; NO-ATOMIC:       ; %bb.0:
608 ; NO-ATOMIC-NEXT:    move.b (11,%sp), %d0
609 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
610 ; NO-ATOMIC-NEXT:    move.b %d0, (%a0)
611 ; NO-ATOMIC-NEXT:    rts
613 ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_seq_cst:
614 ; NO-ATOMIC-PIC:       ; %bb.0:
615 ; NO-ATOMIC-PIC-NEXT:    move.b (11,%sp), %d0
616 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
617 ; NO-ATOMIC-PIC-NEXT:    move.b %d0, (%a0)
618 ; NO-ATOMIC-PIC-NEXT:    rts
620 ; ATOMIC-LABEL: atomic_store_i8_seq_cst:
621 ; ATOMIC:       ; %bb.0:
622 ; ATOMIC-NEXT:    move.b (11,%sp), %d0
623 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
624 ; ATOMIC-NEXT:    move.b %d0, (%a0)
625 ; ATOMIC-NEXT:    rts
627 ; ATOMIC-PIC-LABEL: atomic_store_i8_seq_cst:
628 ; ATOMIC-PIC:       ; %bb.0:
629 ; ATOMIC-PIC-NEXT:    move.b (11,%sp), %d0
630 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
631 ; ATOMIC-PIC-NEXT:    move.b %d0, (%a0)
632 ; ATOMIC-PIC-NEXT:    rts
633   store atomic i8 %val, ptr %a seq_cst, align 1
634   ret void
637 define void @atomic_store_i16_unordered(ptr %a, i16 %val) nounwind {
638 ; NO-ATOMIC-LABEL: atomic_store_i16_unordered:
639 ; NO-ATOMIC:       ; %bb.0:
640 ; NO-ATOMIC-NEXT:    move.w (10,%sp), %d0
641 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
642 ; NO-ATOMIC-NEXT:    move.w %d0, (%a0)
643 ; NO-ATOMIC-NEXT:    rts
645 ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_unordered:
646 ; NO-ATOMIC-PIC:       ; %bb.0:
647 ; NO-ATOMIC-PIC-NEXT:    move.w (10,%sp), %d0
648 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
649 ; NO-ATOMIC-PIC-NEXT:    move.w %d0, (%a0)
650 ; NO-ATOMIC-PIC-NEXT:    rts
652 ; ATOMIC-LABEL: atomic_store_i16_unordered:
653 ; ATOMIC:       ; %bb.0:
654 ; ATOMIC-NEXT:    move.w (10,%sp), %d0
655 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
656 ; ATOMIC-NEXT:    move.w %d0, (%a0)
657 ; ATOMIC-NEXT:    rts
659 ; ATOMIC-PIC-LABEL: atomic_store_i16_unordered:
660 ; ATOMIC-PIC:       ; %bb.0:
661 ; ATOMIC-PIC-NEXT:    move.w (10,%sp), %d0
662 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
663 ; ATOMIC-PIC-NEXT:    move.w %d0, (%a0)
664 ; ATOMIC-PIC-NEXT:    rts
665   store atomic i16 %val, ptr %a unordered, align 2
666   ret void
669 define void @atomic_store_i16_monotonic(ptr %a, i16 %val) nounwind {
670 ; NO-ATOMIC-LABEL: atomic_store_i16_monotonic:
671 ; NO-ATOMIC:       ; %bb.0:
672 ; NO-ATOMIC-NEXT:    move.w (10,%sp), %d0
673 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
674 ; NO-ATOMIC-NEXT:    move.w %d0, (%a0)
675 ; NO-ATOMIC-NEXT:    rts
677 ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_monotonic:
678 ; NO-ATOMIC-PIC:       ; %bb.0:
679 ; NO-ATOMIC-PIC-NEXT:    move.w (10,%sp), %d0
680 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
681 ; NO-ATOMIC-PIC-NEXT:    move.w %d0, (%a0)
682 ; NO-ATOMIC-PIC-NEXT:    rts
684 ; ATOMIC-LABEL: atomic_store_i16_monotonic:
685 ; ATOMIC:       ; %bb.0:
686 ; ATOMIC-NEXT:    move.w (10,%sp), %d0
687 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
688 ; ATOMIC-NEXT:    move.w %d0, (%a0)
689 ; ATOMIC-NEXT:    rts
691 ; ATOMIC-PIC-LABEL: atomic_store_i16_monotonic:
692 ; ATOMIC-PIC:       ; %bb.0:
693 ; ATOMIC-PIC-NEXT:    move.w (10,%sp), %d0
694 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
695 ; ATOMIC-PIC-NEXT:    move.w %d0, (%a0)
696 ; ATOMIC-PIC-NEXT:    rts
697   store atomic i16 %val, ptr %a monotonic, align 2
698   ret void
701 define void @atomic_store_i16_release(ptr %a, i16 %val) nounwind {
702 ; NO-ATOMIC-LABEL: atomic_store_i16_release:
703 ; NO-ATOMIC:       ; %bb.0:
704 ; NO-ATOMIC-NEXT:    move.w (10,%sp), %d0
705 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
706 ; NO-ATOMIC-NEXT:    move.w %d0, (%a0)
707 ; NO-ATOMIC-NEXT:    rts
709 ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_release:
710 ; NO-ATOMIC-PIC:       ; %bb.0:
711 ; NO-ATOMIC-PIC-NEXT:    move.w (10,%sp), %d0
712 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
713 ; NO-ATOMIC-PIC-NEXT:    move.w %d0, (%a0)
714 ; NO-ATOMIC-PIC-NEXT:    rts
716 ; ATOMIC-LABEL: atomic_store_i16_release:
717 ; ATOMIC:       ; %bb.0:
718 ; ATOMIC-NEXT:    move.w (10,%sp), %d0
719 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
720 ; ATOMIC-NEXT:    move.w %d0, (%a0)
721 ; ATOMIC-NEXT:    rts
723 ; ATOMIC-PIC-LABEL: atomic_store_i16_release:
724 ; ATOMIC-PIC:       ; %bb.0:
725 ; ATOMIC-PIC-NEXT:    move.w (10,%sp), %d0
726 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
727 ; ATOMIC-PIC-NEXT:    move.w %d0, (%a0)
728 ; ATOMIC-PIC-NEXT:    rts
729   store atomic i16 %val, ptr %a release, align 2
730   ret void
733 define void @atomic_store_i16_seq_cst(ptr %a, i16 %val) nounwind {
734 ; NO-ATOMIC-LABEL: atomic_store_i16_seq_cst:
735 ; NO-ATOMIC:       ; %bb.0:
736 ; NO-ATOMIC-NEXT:    move.w (10,%sp), %d0
737 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
738 ; NO-ATOMIC-NEXT:    move.w %d0, (%a0)
739 ; NO-ATOMIC-NEXT:    rts
741 ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_seq_cst:
742 ; NO-ATOMIC-PIC:       ; %bb.0:
743 ; NO-ATOMIC-PIC-NEXT:    move.w (10,%sp), %d0
744 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
745 ; NO-ATOMIC-PIC-NEXT:    move.w %d0, (%a0)
746 ; NO-ATOMIC-PIC-NEXT:    rts
748 ; ATOMIC-LABEL: atomic_store_i16_seq_cst:
749 ; ATOMIC:       ; %bb.0:
750 ; ATOMIC-NEXT:    move.w (10,%sp), %d0
751 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
752 ; ATOMIC-NEXT:    move.w %d0, (%a0)
753 ; ATOMIC-NEXT:    rts
755 ; ATOMIC-PIC-LABEL: atomic_store_i16_seq_cst:
756 ; ATOMIC-PIC:       ; %bb.0:
757 ; ATOMIC-PIC-NEXT:    move.w (10,%sp), %d0
758 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
759 ; ATOMIC-PIC-NEXT:    move.w %d0, (%a0)
760 ; ATOMIC-PIC-NEXT:    rts
761   store atomic i16 %val, ptr %a seq_cst, align 2
762   ret void
765 define void @atomic_store_i32_unordered(ptr %a, i32 %val) nounwind {
766 ; NO-ATOMIC-LABEL: atomic_store_i32_unordered:
767 ; NO-ATOMIC:       ; %bb.0:
768 ; NO-ATOMIC-NEXT:    move.l (8,%sp), %d0
769 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
770 ; NO-ATOMIC-NEXT:    move.l %d0, (%a0)
771 ; NO-ATOMIC-NEXT:    rts
773 ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_unordered:
774 ; NO-ATOMIC-PIC:       ; %bb.0:
775 ; NO-ATOMIC-PIC-NEXT:    move.l (8,%sp), %d0
776 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
777 ; NO-ATOMIC-PIC-NEXT:    move.l %d0, (%a0)
778 ; NO-ATOMIC-PIC-NEXT:    rts
780 ; ATOMIC-LABEL: atomic_store_i32_unordered:
781 ; ATOMIC:       ; %bb.0:
782 ; ATOMIC-NEXT:    move.l (8,%sp), %d0
783 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
784 ; ATOMIC-NEXT:    move.l %d0, (%a0)
785 ; ATOMIC-NEXT:    rts
787 ; ATOMIC-PIC-LABEL: atomic_store_i32_unordered:
788 ; ATOMIC-PIC:       ; %bb.0:
789 ; ATOMIC-PIC-NEXT:    move.l (8,%sp), %d0
790 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
791 ; ATOMIC-PIC-NEXT:    move.l %d0, (%a0)
792 ; ATOMIC-PIC-NEXT:    rts
793   store atomic i32 %val, ptr %a unordered, align 4
794   ret void
797 define void @atomic_store_i32_monotonic(ptr %a, i32 %val) nounwind {
798 ; NO-ATOMIC-LABEL: atomic_store_i32_monotonic:
799 ; NO-ATOMIC:       ; %bb.0:
800 ; NO-ATOMIC-NEXT:    move.l (8,%sp), %d0
801 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
802 ; NO-ATOMIC-NEXT:    move.l %d0, (%a0)
803 ; NO-ATOMIC-NEXT:    rts
805 ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_monotonic:
806 ; NO-ATOMIC-PIC:       ; %bb.0:
807 ; NO-ATOMIC-PIC-NEXT:    move.l (8,%sp), %d0
808 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
809 ; NO-ATOMIC-PIC-NEXT:    move.l %d0, (%a0)
810 ; NO-ATOMIC-PIC-NEXT:    rts
812 ; ATOMIC-LABEL: atomic_store_i32_monotonic:
813 ; ATOMIC:       ; %bb.0:
814 ; ATOMIC-NEXT:    move.l (8,%sp), %d0
815 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
816 ; ATOMIC-NEXT:    move.l %d0, (%a0)
817 ; ATOMIC-NEXT:    rts
819 ; ATOMIC-PIC-LABEL: atomic_store_i32_monotonic:
820 ; ATOMIC-PIC:       ; %bb.0:
821 ; ATOMIC-PIC-NEXT:    move.l (8,%sp), %d0
822 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
823 ; ATOMIC-PIC-NEXT:    move.l %d0, (%a0)
824 ; ATOMIC-PIC-NEXT:    rts
825   store atomic i32 %val, ptr %a monotonic, align 4
826   ret void
829 define void @atomic_store_i32_release(ptr %a, i32 %val) nounwind {
830 ; NO-ATOMIC-LABEL: atomic_store_i32_release:
831 ; NO-ATOMIC:       ; %bb.0:
832 ; NO-ATOMIC-NEXT:    move.l (8,%sp), %d0
833 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
834 ; NO-ATOMIC-NEXT:    move.l %d0, (%a0)
835 ; NO-ATOMIC-NEXT:    rts
837 ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_release:
838 ; NO-ATOMIC-PIC:       ; %bb.0:
839 ; NO-ATOMIC-PIC-NEXT:    move.l (8,%sp), %d0
840 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
841 ; NO-ATOMIC-PIC-NEXT:    move.l %d0, (%a0)
842 ; NO-ATOMIC-PIC-NEXT:    rts
844 ; ATOMIC-LABEL: atomic_store_i32_release:
845 ; ATOMIC:       ; %bb.0:
846 ; ATOMIC-NEXT:    move.l (8,%sp), %d0
847 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
848 ; ATOMIC-NEXT:    move.l %d0, (%a0)
849 ; ATOMIC-NEXT:    rts
851 ; ATOMIC-PIC-LABEL: atomic_store_i32_release:
852 ; ATOMIC-PIC:       ; %bb.0:
853 ; ATOMIC-PIC-NEXT:    move.l (8,%sp), %d0
854 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
855 ; ATOMIC-PIC-NEXT:    move.l %d0, (%a0)
856 ; ATOMIC-PIC-NEXT:    rts
857   store atomic i32 %val, ptr %a release, align 4
858   ret void
861 define void @atomic_store_i32_seq_cst(ptr %a, i32 %val) nounwind {
862 ; NO-ATOMIC-LABEL: atomic_store_i32_seq_cst:
863 ; NO-ATOMIC:       ; %bb.0:
864 ; NO-ATOMIC-NEXT:    move.l (8,%sp), %d0
865 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
866 ; NO-ATOMIC-NEXT:    move.l %d0, (%a0)
867 ; NO-ATOMIC-NEXT:    rts
869 ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_seq_cst:
870 ; NO-ATOMIC-PIC:       ; %bb.0:
871 ; NO-ATOMIC-PIC-NEXT:    move.l (8,%sp), %d0
872 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
873 ; NO-ATOMIC-PIC-NEXT:    move.l %d0, (%a0)
874 ; NO-ATOMIC-PIC-NEXT:    rts
876 ; ATOMIC-LABEL: atomic_store_i32_seq_cst:
877 ; ATOMIC:       ; %bb.0:
878 ; ATOMIC-NEXT:    move.l (8,%sp), %d0
879 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
880 ; ATOMIC-NEXT:    move.l %d0, (%a0)
881 ; ATOMIC-NEXT:    rts
883 ; ATOMIC-PIC-LABEL: atomic_store_i32_seq_cst:
884 ; ATOMIC-PIC:       ; %bb.0:
885 ; ATOMIC-PIC-NEXT:    move.l (8,%sp), %d0
886 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
887 ; ATOMIC-PIC-NEXT:    move.l %d0, (%a0)
888 ; ATOMIC-PIC-NEXT:    rts
889   store atomic i32 %val, ptr %a seq_cst, align 4
890   ret void
893 define void @atomic_store_i64_unordered(ptr %a, i64 %val) nounwind {
894 ; NO-ATOMIC-LABEL: atomic_store_i64_unordered:
895 ; NO-ATOMIC:       ; %bb.0:
896 ; NO-ATOMIC-NEXT:    suba.l #20, %sp
897 ; NO-ATOMIC-NEXT:    move.l #0, (12,%sp)
898 ; NO-ATOMIC-NEXT:    move.l (32,%sp), (8,%sp)
899 ; NO-ATOMIC-NEXT:    move.l (28,%sp), (4,%sp)
900 ; NO-ATOMIC-NEXT:    move.l (24,%sp), (%sp)
901 ; NO-ATOMIC-NEXT:    jsr __atomic_store_8
902 ; NO-ATOMIC-NEXT:    adda.l #20, %sp
903 ; NO-ATOMIC-NEXT:    rts
905 ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_unordered:
906 ; NO-ATOMIC-PIC:       ; %bb.0:
907 ; NO-ATOMIC-PIC-NEXT:    suba.l #20, %sp
908 ; NO-ATOMIC-PIC-NEXT:    move.l #0, (12,%sp)
909 ; NO-ATOMIC-PIC-NEXT:    move.l (32,%sp), (8,%sp)
910 ; NO-ATOMIC-PIC-NEXT:    move.l (28,%sp), (4,%sp)
911 ; NO-ATOMIC-PIC-NEXT:    move.l (24,%sp), (%sp)
912 ; NO-ATOMIC-PIC-NEXT:    jsr (__atomic_store_8@PLT,%pc)
913 ; NO-ATOMIC-PIC-NEXT:    adda.l #20, %sp
914 ; NO-ATOMIC-PIC-NEXT:    rts
916 ; ATOMIC-LABEL: atomic_store_i64_unordered:
917 ; ATOMIC:       ; %bb.0:
918 ; ATOMIC-NEXT:    suba.l #20, %sp
919 ; ATOMIC-NEXT:    move.l #0, (12,%sp)
920 ; ATOMIC-NEXT:    move.l (32,%sp), (8,%sp)
921 ; ATOMIC-NEXT:    move.l (28,%sp), (4,%sp)
922 ; ATOMIC-NEXT:    move.l (24,%sp), (%sp)
923 ; ATOMIC-NEXT:    jsr __atomic_store_8
924 ; ATOMIC-NEXT:    adda.l #20, %sp
925 ; ATOMIC-NEXT:    rts
927 ; ATOMIC-PIC-LABEL: atomic_store_i64_unordered:
928 ; ATOMIC-PIC:       ; %bb.0:
929 ; ATOMIC-PIC-NEXT:    suba.l #20, %sp
930 ; ATOMIC-PIC-NEXT:    move.l #0, (12,%sp)
931 ; ATOMIC-PIC-NEXT:    move.l (32,%sp), (8,%sp)
932 ; ATOMIC-PIC-NEXT:    move.l (28,%sp), (4,%sp)
933 ; ATOMIC-PIC-NEXT:    move.l (24,%sp), (%sp)
934 ; ATOMIC-PIC-NEXT:    jsr (__atomic_store_8@PLT,%pc)
935 ; ATOMIC-PIC-NEXT:    adda.l #20, %sp
936 ; ATOMIC-PIC-NEXT:    rts
937   store atomic i64 %val, ptr %a unordered, align 8
938   ret void
941 define void @atomic_store_i64_monotonic(ptr %a, i64 %val) nounwind {
942 ; NO-ATOMIC-LABEL: atomic_store_i64_monotonic:
943 ; NO-ATOMIC:       ; %bb.0:
944 ; NO-ATOMIC-NEXT:    suba.l #20, %sp
945 ; NO-ATOMIC-NEXT:    move.l #0, (12,%sp)
946 ; NO-ATOMIC-NEXT:    move.l (32,%sp), (8,%sp)
947 ; NO-ATOMIC-NEXT:    move.l (28,%sp), (4,%sp)
948 ; NO-ATOMIC-NEXT:    move.l (24,%sp), (%sp)
949 ; NO-ATOMIC-NEXT:    jsr __atomic_store_8
950 ; NO-ATOMIC-NEXT:    adda.l #20, %sp
951 ; NO-ATOMIC-NEXT:    rts
953 ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_monotonic:
954 ; NO-ATOMIC-PIC:       ; %bb.0:
955 ; NO-ATOMIC-PIC-NEXT:    suba.l #20, %sp
956 ; NO-ATOMIC-PIC-NEXT:    move.l #0, (12,%sp)
957 ; NO-ATOMIC-PIC-NEXT:    move.l (32,%sp), (8,%sp)
958 ; NO-ATOMIC-PIC-NEXT:    move.l (28,%sp), (4,%sp)
959 ; NO-ATOMIC-PIC-NEXT:    move.l (24,%sp), (%sp)
960 ; NO-ATOMIC-PIC-NEXT:    jsr (__atomic_store_8@PLT,%pc)
961 ; NO-ATOMIC-PIC-NEXT:    adda.l #20, %sp
962 ; NO-ATOMIC-PIC-NEXT:    rts
964 ; ATOMIC-LABEL: atomic_store_i64_monotonic:
965 ; ATOMIC:       ; %bb.0:
966 ; ATOMIC-NEXT:    suba.l #20, %sp
967 ; ATOMIC-NEXT:    move.l #0, (12,%sp)
968 ; ATOMIC-NEXT:    move.l (32,%sp), (8,%sp)
969 ; ATOMIC-NEXT:    move.l (28,%sp), (4,%sp)
970 ; ATOMIC-NEXT:    move.l (24,%sp), (%sp)
971 ; ATOMIC-NEXT:    jsr __atomic_store_8
972 ; ATOMIC-NEXT:    adda.l #20, %sp
973 ; ATOMIC-NEXT:    rts
975 ; ATOMIC-PIC-LABEL: atomic_store_i64_monotonic:
976 ; ATOMIC-PIC:       ; %bb.0:
977 ; ATOMIC-PIC-NEXT:    suba.l #20, %sp
978 ; ATOMIC-PIC-NEXT:    move.l #0, (12,%sp)
979 ; ATOMIC-PIC-NEXT:    move.l (32,%sp), (8,%sp)
980 ; ATOMIC-PIC-NEXT:    move.l (28,%sp), (4,%sp)
981 ; ATOMIC-PIC-NEXT:    move.l (24,%sp), (%sp)
982 ; ATOMIC-PIC-NEXT:    jsr (__atomic_store_8@PLT,%pc)
983 ; ATOMIC-PIC-NEXT:    adda.l #20, %sp
984 ; ATOMIC-PIC-NEXT:    rts
985   store atomic i64 %val, ptr %a monotonic, align 8
986   ret void
989 define void @atomic_store_i64_release(ptr %a, i64 %val) nounwind {
990 ; NO-ATOMIC-LABEL: atomic_store_i64_release:
991 ; NO-ATOMIC:       ; %bb.0:
992 ; NO-ATOMIC-NEXT:    suba.l #20, %sp
993 ; NO-ATOMIC-NEXT:    move.l #3, (12,%sp)
994 ; NO-ATOMIC-NEXT:    move.l (32,%sp), (8,%sp)
995 ; NO-ATOMIC-NEXT:    move.l (28,%sp), (4,%sp)
996 ; NO-ATOMIC-NEXT:    move.l (24,%sp), (%sp)
997 ; NO-ATOMIC-NEXT:    jsr __atomic_store_8
998 ; NO-ATOMIC-NEXT:    adda.l #20, %sp
999 ; NO-ATOMIC-NEXT:    rts
1001 ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_release:
1002 ; NO-ATOMIC-PIC:       ; %bb.0:
1003 ; NO-ATOMIC-PIC-NEXT:    suba.l #20, %sp
1004 ; NO-ATOMIC-PIC-NEXT:    move.l #3, (12,%sp)
1005 ; NO-ATOMIC-PIC-NEXT:    move.l (32,%sp), (8,%sp)
1006 ; NO-ATOMIC-PIC-NEXT:    move.l (28,%sp), (4,%sp)
1007 ; NO-ATOMIC-PIC-NEXT:    move.l (24,%sp), (%sp)
1008 ; NO-ATOMIC-PIC-NEXT:    jsr (__atomic_store_8@PLT,%pc)
1009 ; NO-ATOMIC-PIC-NEXT:    adda.l #20, %sp
1010 ; NO-ATOMIC-PIC-NEXT:    rts
1012 ; ATOMIC-LABEL: atomic_store_i64_release:
1013 ; ATOMIC:       ; %bb.0:
1014 ; ATOMIC-NEXT:    suba.l #20, %sp
1015 ; ATOMIC-NEXT:    move.l #3, (12,%sp)
1016 ; ATOMIC-NEXT:    move.l (32,%sp), (8,%sp)
1017 ; ATOMIC-NEXT:    move.l (28,%sp), (4,%sp)
1018 ; ATOMIC-NEXT:    move.l (24,%sp), (%sp)
1019 ; ATOMIC-NEXT:    jsr __atomic_store_8
1020 ; ATOMIC-NEXT:    adda.l #20, %sp
1021 ; ATOMIC-NEXT:    rts
1023 ; ATOMIC-PIC-LABEL: atomic_store_i64_release:
1024 ; ATOMIC-PIC:       ; %bb.0:
1025 ; ATOMIC-PIC-NEXT:    suba.l #20, %sp
1026 ; ATOMIC-PIC-NEXT:    move.l #3, (12,%sp)
1027 ; ATOMIC-PIC-NEXT:    move.l (32,%sp), (8,%sp)
1028 ; ATOMIC-PIC-NEXT:    move.l (28,%sp), (4,%sp)
1029 ; ATOMIC-PIC-NEXT:    move.l (24,%sp), (%sp)
1030 ; ATOMIC-PIC-NEXT:    jsr (__atomic_store_8@PLT,%pc)
1031 ; ATOMIC-PIC-NEXT:    adda.l #20, %sp
1032 ; ATOMIC-PIC-NEXT:    rts
1033   store atomic i64 %val, ptr %a release, align 8
1034   ret void
1037 define void @atomic_store_i64_seq_cst(ptr %a, i64 %val) nounwind {
1038 ; NO-ATOMIC-LABEL: atomic_store_i64_seq_cst:
1039 ; NO-ATOMIC:       ; %bb.0:
1040 ; NO-ATOMIC-NEXT:    suba.l #20, %sp
1041 ; NO-ATOMIC-NEXT:    move.l #5, (12,%sp)
1042 ; NO-ATOMIC-NEXT:    move.l (32,%sp), (8,%sp)
1043 ; NO-ATOMIC-NEXT:    move.l (28,%sp), (4,%sp)
1044 ; NO-ATOMIC-NEXT:    move.l (24,%sp), (%sp)
1045 ; NO-ATOMIC-NEXT:    jsr __atomic_store_8
1046 ; NO-ATOMIC-NEXT:    adda.l #20, %sp
1047 ; NO-ATOMIC-NEXT:    rts
1049 ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_seq_cst:
1050 ; NO-ATOMIC-PIC:       ; %bb.0:
1051 ; NO-ATOMIC-PIC-NEXT:    suba.l #20, %sp
1052 ; NO-ATOMIC-PIC-NEXT:    move.l #5, (12,%sp)
1053 ; NO-ATOMIC-PIC-NEXT:    move.l (32,%sp), (8,%sp)
1054 ; NO-ATOMIC-PIC-NEXT:    move.l (28,%sp), (4,%sp)
1055 ; NO-ATOMIC-PIC-NEXT:    move.l (24,%sp), (%sp)
1056 ; NO-ATOMIC-PIC-NEXT:    jsr (__atomic_store_8@PLT,%pc)
1057 ; NO-ATOMIC-PIC-NEXT:    adda.l #20, %sp
1058 ; NO-ATOMIC-PIC-NEXT:    rts
1060 ; ATOMIC-LABEL: atomic_store_i64_seq_cst:
1061 ; ATOMIC:       ; %bb.0:
1062 ; ATOMIC-NEXT:    suba.l #20, %sp
1063 ; ATOMIC-NEXT:    move.l #5, (12,%sp)
1064 ; ATOMIC-NEXT:    move.l (32,%sp), (8,%sp)
1065 ; ATOMIC-NEXT:    move.l (28,%sp), (4,%sp)
1066 ; ATOMIC-NEXT:    move.l (24,%sp), (%sp)
1067 ; ATOMIC-NEXT:    jsr __atomic_store_8
1068 ; ATOMIC-NEXT:    adda.l #20, %sp
1069 ; ATOMIC-NEXT:    rts
1071 ; ATOMIC-PIC-LABEL: atomic_store_i64_seq_cst:
1072 ; ATOMIC-PIC:       ; %bb.0:
1073 ; ATOMIC-PIC-NEXT:    suba.l #20, %sp
1074 ; ATOMIC-PIC-NEXT:    move.l #5, (12,%sp)
1075 ; ATOMIC-PIC-NEXT:    move.l (32,%sp), (8,%sp)
1076 ; ATOMIC-PIC-NEXT:    move.l (28,%sp), (4,%sp)
1077 ; ATOMIC-PIC-NEXT:    move.l (24,%sp), (%sp)
1078 ; ATOMIC-PIC-NEXT:    jsr (__atomic_store_8@PLT,%pc)
1079 ; ATOMIC-PIC-NEXT:    adda.l #20, %sp
1080 ; ATOMIC-PIC-NEXT:    rts
1081   store atomic i64 %val, ptr %a seq_cst, align 8
1082   ret void
1085 define void @store_arid(ptr nonnull align 4 %a) {
1086 ; NO-ATOMIC-LABEL: store_arid:
1087 ; NO-ATOMIC:         .cfi_startproc
1088 ; NO-ATOMIC-NEXT:  ; %bb.0: ; %start
1089 ; NO-ATOMIC-NEXT:    moveq #1, %d0
1090 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
1091 ; NO-ATOMIC-NEXT:    move.l %d0, (32,%a0)
1092 ; NO-ATOMIC-NEXT:    rts
1094 ; NO-ATOMIC-PIC-LABEL: store_arid:
1095 ; NO-ATOMIC-PIC:         .cfi_startproc
1096 ; NO-ATOMIC-PIC-NEXT:  ; %bb.0: ; %start
1097 ; NO-ATOMIC-PIC-NEXT:    moveq #1, %d0
1098 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
1099 ; NO-ATOMIC-PIC-NEXT:    move.l %d0, (32,%a0)
1100 ; NO-ATOMIC-PIC-NEXT:    rts
1102 ; ATOMIC-LABEL: store_arid:
1103 ; ATOMIC:         .cfi_startproc
1104 ; ATOMIC-NEXT:  ; %bb.0: ; %start
1105 ; ATOMIC-NEXT:    moveq #1, %d0
1106 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
1107 ; ATOMIC-NEXT:    move.l %d0, (32,%a0)
1108 ; ATOMIC-NEXT:    rts
1110 ; ATOMIC-PIC-LABEL: store_arid:
1111 ; ATOMIC-PIC:         .cfi_startproc
1112 ; ATOMIC-PIC-NEXT:  ; %bb.0: ; %start
1113 ; ATOMIC-PIC-NEXT:    moveq #1, %d0
1114 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
1115 ; ATOMIC-PIC-NEXT:    move.l %d0, (32,%a0)
1116 ; ATOMIC-PIC-NEXT:    rts
1117 start:
1118   %1 = getelementptr inbounds i32, ptr %a, i32 8
1119   store atomic i32 1, ptr %1 seq_cst, align 4
1120   br label %exit
1122 exit:                                              ; preds = %start
1123   ret void
1126 define i32 @load_arid(ptr nonnull align 4 %a) {
1127 ; NO-ATOMIC-LABEL: load_arid:
1128 ; NO-ATOMIC:         .cfi_startproc
1129 ; NO-ATOMIC-NEXT:  ; %bb.0: ; %start
1130 ; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
1131 ; NO-ATOMIC-NEXT:    move.l (32,%a0), %d0
1132 ; NO-ATOMIC-NEXT:    rts
1134 ; NO-ATOMIC-PIC-LABEL: load_arid:
1135 ; NO-ATOMIC-PIC:         .cfi_startproc
1136 ; NO-ATOMIC-PIC-NEXT:  ; %bb.0: ; %start
1137 ; NO-ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
1138 ; NO-ATOMIC-PIC-NEXT:    move.l (32,%a0), %d0
1139 ; NO-ATOMIC-PIC-NEXT:    rts
1141 ; ATOMIC-LABEL: load_arid:
1142 ; ATOMIC:         .cfi_startproc
1143 ; ATOMIC-NEXT:  ; %bb.0: ; %start
1144 ; ATOMIC-NEXT:    move.l (4,%sp), %a0
1145 ; ATOMIC-NEXT:    move.l (32,%a0), %d0
1146 ; ATOMIC-NEXT:    rts
1148 ; ATOMIC-PIC-LABEL: load_arid:
1149 ; ATOMIC-PIC:         .cfi_startproc
1150 ; ATOMIC-PIC-NEXT:  ; %bb.0: ; %start
1151 ; ATOMIC-PIC-NEXT:    move.l (4,%sp), %a0
1152 ; ATOMIC-PIC-NEXT:    move.l (32,%a0), %d0
1153 ; ATOMIC-PIC-NEXT:    rts
1154 start:
1155   %1 = getelementptr inbounds i32, ptr %a, i32 8
1156   %2 = load atomic i32, ptr %1 seq_cst, align 4
1157   br label %exit
1159 exit:                                              ; preds = %start
1160   ret i32 %2