Skip to content

Commit 5205619

Browse files
committed
[M68k] add tests for atomics under large code model, with and without pic
1 parent a912c81 commit 5205619

16 files changed

+2902
-0
lines changed
Lines changed: 310 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,310 @@
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
12+
13+
@thread_id = internal global <{ [5 x i8] }> <{ [5 x i8] zeroinitializer}>, align 4
14+
15+
define { i32, i1 } @std_thread_new() {
16+
; NO-ATOMIC-LABEL: std_thread_new:
17+
; NO-ATOMIC: .cfi_startproc
18+
; NO-ATOMIC-NEXT: ; %bb.0: ; %start
19+
; NO-ATOMIC-NEXT: suba.l #12, %sp
20+
; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16
21+
; NO-ATOMIC-NEXT: lea (thread_id,%pc), %a0
22+
; NO-ATOMIC-NEXT: move.l %a0, (%sp)
23+
; NO-ATOMIC-NEXT: move.l #1, (8,%sp)
24+
; NO-ATOMIC-NEXT: move.l #0, (4,%sp)
25+
; NO-ATOMIC-NEXT: jsr __sync_val_compare_and_swap_4
26+
; NO-ATOMIC-NEXT: cmpi.l #0, %d0
27+
; NO-ATOMIC-NEXT: seq %d1
28+
; NO-ATOMIC-NEXT: adda.l #12, %sp
29+
; NO-ATOMIC-NEXT: rts
30+
;
31+
; NO-ATOMIC-PIC-LABEL: std_thread_new:
32+
; NO-ATOMIC-PIC: .cfi_startproc
33+
; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start
34+
; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp
35+
; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16
36+
; NO-ATOMIC-PIC-NEXT: lea (thread_id,%pc), %a0
37+
; NO-ATOMIC-PIC-NEXT: move.l %a0, (%sp)
38+
; NO-ATOMIC-PIC-NEXT: move.l #1, (8,%sp)
39+
; NO-ATOMIC-PIC-NEXT: move.l #0, (4,%sp)
40+
; NO-ATOMIC-PIC-NEXT: jsr (__sync_val_compare_and_swap_4@PLT,%pc)
41+
; NO-ATOMIC-PIC-NEXT: cmpi.l #0, %d0
42+
; NO-ATOMIC-PIC-NEXT: seq %d1
43+
; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp
44+
; NO-ATOMIC-PIC-NEXT: rts
45+
;
46+
; ATOMIC-LABEL: std_thread_new:
47+
; ATOMIC: .cfi_startproc
48+
; ATOMIC-NEXT: ; %bb.0: ; %start
49+
; ATOMIC-NEXT: lea (thread_id,%pc), %a0
50+
; ATOMIC-NEXT: moveq #1, %d1
51+
; ATOMIC-NEXT: moveq #0, %d0
52+
; ATOMIC-NEXT: cas.l %d0, %d1, (%a0)
53+
; ATOMIC-NEXT: cmpi.l #0, %d0
54+
; ATOMIC-NEXT: seq %d1
55+
; ATOMIC-NEXT: rts
56+
;
57+
; ATOMIC-PIC-LABEL: std_thread_new:
58+
; ATOMIC-PIC: .cfi_startproc
59+
; ATOMIC-PIC-NEXT: ; %bb.0: ; %start
60+
; ATOMIC-PIC-NEXT: lea (thread_id,%pc), %a0
61+
; ATOMIC-PIC-NEXT: moveq #1, %d1
62+
; ATOMIC-PIC-NEXT: moveq #0, %d0
63+
; ATOMIC-PIC-NEXT: cas.l %d0, %d1, (%a0)
64+
; ATOMIC-PIC-NEXT: cmpi.l #0, %d0
65+
; ATOMIC-PIC-NEXT: seq %d1
66+
; ATOMIC-PIC-NEXT: rts
67+
start:
68+
%1 = cmpxchg ptr @thread_id, i32 0, i32 1 acquire monotonic, align 4
69+
ret { i32, i1 } %1
70+
}
71+
72+
define i1 @cmpxchg_i8_monotonic_monotonic(i8 %cmp, i8 %new, ptr %mem) nounwind {
73+
; NO-ATOMIC-LABEL: cmpxchg_i8_monotonic_monotonic:
74+
; NO-ATOMIC: ; %bb.0:
75+
; NO-ATOMIC-NEXT: suba.l #20, %sp
76+
; NO-ATOMIC-NEXT: movem.l %d2, (16,%sp) ; 8-byte Folded Spill
77+
; NO-ATOMIC-NEXT: move.b (31,%sp), %d0
78+
; NO-ATOMIC-NEXT: and.l #255, %d0
79+
; NO-ATOMIC-NEXT: move.l %d0, (8,%sp)
80+
; NO-ATOMIC-NEXT: move.b (27,%sp), %d2
81+
; NO-ATOMIC-NEXT: move.l %d2, %d0
82+
; NO-ATOMIC-NEXT: and.l #255, %d0
83+
; NO-ATOMIC-NEXT: move.l %d0, (4,%sp)
84+
; NO-ATOMIC-NEXT: move.l (32,%sp), (%sp)
85+
; NO-ATOMIC-NEXT: jsr __sync_val_compare_and_swap_1
86+
; NO-ATOMIC-NEXT: sub.b %d2, %d0
87+
; NO-ATOMIC-NEXT: seq %d0
88+
; NO-ATOMIC-NEXT: movem.l (16,%sp), %d2 ; 8-byte Folded Reload
89+
; NO-ATOMIC-NEXT: adda.l #20, %sp
90+
; NO-ATOMIC-NEXT: rts
91+
;
92+
; NO-ATOMIC-PIC-LABEL: cmpxchg_i8_monotonic_monotonic:
93+
; NO-ATOMIC-PIC: ; %bb.0:
94+
; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp
95+
; NO-ATOMIC-PIC-NEXT: movem.l %d2, (16,%sp) ; 8-byte Folded Spill
96+
; NO-ATOMIC-PIC-NEXT: move.b (31,%sp), %d0
97+
; NO-ATOMIC-PIC-NEXT: and.l #255, %d0
98+
; NO-ATOMIC-PIC-NEXT: move.l %d0, (8,%sp)
99+
; NO-ATOMIC-PIC-NEXT: move.b (27,%sp), %d2
100+
; NO-ATOMIC-PIC-NEXT: move.l %d2, %d0
101+
; NO-ATOMIC-PIC-NEXT: and.l #255, %d0
102+
; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp)
103+
; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (%sp)
104+
; NO-ATOMIC-PIC-NEXT: jsr (__sync_val_compare_and_swap_1@PLT,%pc)
105+
; NO-ATOMIC-PIC-NEXT: sub.b %d2, %d0
106+
; NO-ATOMIC-PIC-NEXT: seq %d0
107+
; NO-ATOMIC-PIC-NEXT: movem.l (16,%sp), %d2 ; 8-byte Folded Reload
108+
; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp
109+
; NO-ATOMIC-PIC-NEXT: rts
110+
;
111+
; ATOMIC-LABEL: cmpxchg_i8_monotonic_monotonic:
112+
; ATOMIC: ; %bb.0:
113+
; ATOMIC-NEXT: suba.l #4, %sp
114+
; ATOMIC-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill
115+
; ATOMIC-NEXT: move.l (16,%sp), %a0
116+
; ATOMIC-NEXT: move.b (15,%sp), %d0
117+
; ATOMIC-NEXT: move.b (11,%sp), %d1
118+
; ATOMIC-NEXT: move.b %d1, %d2
119+
; ATOMIC-NEXT: cas.b %d2, %d0, (%a0)
120+
; ATOMIC-NEXT: sub.b %d1, %d2
121+
; ATOMIC-NEXT: seq %d0
122+
; ATOMIC-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload
123+
; ATOMIC-NEXT: adda.l #4, %sp
124+
; ATOMIC-NEXT: rts
125+
;
126+
; ATOMIC-PIC-LABEL: cmpxchg_i8_monotonic_monotonic:
127+
; ATOMIC-PIC: ; %bb.0:
128+
; ATOMIC-PIC-NEXT: suba.l #4, %sp
129+
; ATOMIC-PIC-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill
130+
; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0
131+
; ATOMIC-PIC-NEXT: move.b (15,%sp), %d0
132+
; ATOMIC-PIC-NEXT: move.b (11,%sp), %d1
133+
; ATOMIC-PIC-NEXT: move.b %d1, %d2
134+
; ATOMIC-PIC-NEXT: cas.b %d2, %d0, (%a0)
135+
; ATOMIC-PIC-NEXT: sub.b %d1, %d2
136+
; ATOMIC-PIC-NEXT: seq %d0
137+
; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload
138+
; ATOMIC-PIC-NEXT: adda.l #4, %sp
139+
; ATOMIC-PIC-NEXT: rts
140+
%res = cmpxchg ptr %mem, i8 %cmp, i8 %new monotonic monotonic
141+
%val = extractvalue {i8, i1} %res, 1
142+
ret i1 %val
143+
}
144+
145+
define i16 @cmpxchg_i16_release_monotonic(i16 %cmp, i16 %new, ptr %mem) nounwind {
146+
; NO-ATOMIC-LABEL: cmpxchg_i16_release_monotonic:
147+
; NO-ATOMIC: ; %bb.0:
148+
; NO-ATOMIC-NEXT: suba.l #12, %sp
149+
; NO-ATOMIC-NEXT: move.w (22,%sp), %d0
150+
; NO-ATOMIC-NEXT: and.l #65535, %d0
151+
; NO-ATOMIC-NEXT: move.l %d0, (8,%sp)
152+
; NO-ATOMIC-NEXT: move.w (18,%sp), %d0
153+
; NO-ATOMIC-NEXT: and.l #65535, %d0
154+
; NO-ATOMIC-NEXT: move.l %d0, (4,%sp)
155+
; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)
156+
; NO-ATOMIC-NEXT: jsr __sync_val_compare_and_swap_2
157+
; NO-ATOMIC-NEXT: adda.l #12, %sp
158+
; NO-ATOMIC-NEXT: rts
159+
;
160+
; NO-ATOMIC-PIC-LABEL: cmpxchg_i16_release_monotonic:
161+
; NO-ATOMIC-PIC: ; %bb.0:
162+
; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp
163+
; NO-ATOMIC-PIC-NEXT: move.w (22,%sp), %d0
164+
; NO-ATOMIC-PIC-NEXT: and.l #65535, %d0
165+
; NO-ATOMIC-PIC-NEXT: move.l %d0, (8,%sp)
166+
; NO-ATOMIC-PIC-NEXT: move.w (18,%sp), %d0
167+
; NO-ATOMIC-PIC-NEXT: and.l #65535, %d0
168+
; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp)
169+
; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
170+
; NO-ATOMIC-PIC-NEXT: jsr (__sync_val_compare_and_swap_2@PLT,%pc)
171+
; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp
172+
; NO-ATOMIC-PIC-NEXT: rts
173+
;
174+
; ATOMIC-LABEL: cmpxchg_i16_release_monotonic:
175+
; ATOMIC: ; %bb.0:
176+
; ATOMIC-NEXT: move.l (12,%sp), %a0
177+
; ATOMIC-NEXT: move.w (10,%sp), %d1
178+
; ATOMIC-NEXT: move.w (6,%sp), %d0
179+
; ATOMIC-NEXT: cas.w %d0, %d1, (%a0)
180+
; ATOMIC-NEXT: rts
181+
;
182+
; ATOMIC-PIC-LABEL: cmpxchg_i16_release_monotonic:
183+
; ATOMIC-PIC: ; %bb.0:
184+
; ATOMIC-PIC-NEXT: move.l (12,%sp), %a0
185+
; ATOMIC-PIC-NEXT: move.w (10,%sp), %d1
186+
; ATOMIC-PIC-NEXT: move.w (6,%sp), %d0
187+
; ATOMIC-PIC-NEXT: cas.w %d0, %d1, (%a0)
188+
; ATOMIC-PIC-NEXT: rts
189+
%res = cmpxchg ptr %mem, i16 %cmp, i16 %new release monotonic
190+
%val = extractvalue {i16, i1} %res, 0
191+
ret i16 %val
192+
}
193+
194+
define i32 @cmpxchg_i32_release_acquire(i32 %cmp, i32 %new, ptr %mem) nounwind {
195+
; NO-ATOMIC-LABEL: cmpxchg_i32_release_acquire:
196+
; NO-ATOMIC: ; %bb.0:
197+
; NO-ATOMIC-NEXT: suba.l #12, %sp
198+
; NO-ATOMIC-NEXT: move.l (20,%sp), (8,%sp)
199+
; NO-ATOMIC-NEXT: move.l (16,%sp), (4,%sp)
200+
; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)
201+
; NO-ATOMIC-NEXT: jsr __sync_val_compare_and_swap_4
202+
; NO-ATOMIC-NEXT: adda.l #12, %sp
203+
; NO-ATOMIC-NEXT: rts
204+
;
205+
; NO-ATOMIC-PIC-LABEL: cmpxchg_i32_release_acquire:
206+
; NO-ATOMIC-PIC: ; %bb.0:
207+
; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp
208+
; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (8,%sp)
209+
; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (4,%sp)
210+
; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
211+
; NO-ATOMIC-PIC-NEXT: jsr (__sync_val_compare_and_swap_4@PLT,%pc)
212+
; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp
213+
; NO-ATOMIC-PIC-NEXT: rts
214+
;
215+
; ATOMIC-LABEL: cmpxchg_i32_release_acquire:
216+
; ATOMIC: ; %bb.0:
217+
; ATOMIC-NEXT: move.l (12,%sp), %a0
218+
; ATOMIC-NEXT: move.l (8,%sp), %d1
219+
; ATOMIC-NEXT: move.l (4,%sp), %d0
220+
; ATOMIC-NEXT: cas.l %d0, %d1, (%a0)
221+
; ATOMIC-NEXT: rts
222+
;
223+
; ATOMIC-PIC-LABEL: cmpxchg_i32_release_acquire:
224+
; ATOMIC-PIC: ; %bb.0:
225+
; ATOMIC-PIC-NEXT: move.l (12,%sp), %a0
226+
; ATOMIC-PIC-NEXT: move.l (8,%sp), %d1
227+
; ATOMIC-PIC-NEXT: move.l (4,%sp), %d0
228+
; ATOMIC-PIC-NEXT: cas.l %d0, %d1, (%a0)
229+
; ATOMIC-PIC-NEXT: rts
230+
%res = cmpxchg ptr %mem, i32 %cmp, i32 %new release acquire
231+
%val = extractvalue {i32, i1} %res, 0
232+
ret i32 %val
233+
}
234+
235+
define i64 @cmpxchg_i64_seqcst_seqcst(i64 %cmp, i64 %new, ptr %mem) nounwind {
236+
; NO-ATOMIC-LABEL: cmpxchg_i64_seqcst_seqcst:
237+
; NO-ATOMIC: ; %bb.0:
238+
; NO-ATOMIC-NEXT: suba.l #36, %sp
239+
; NO-ATOMIC-NEXT: move.l (44,%sp), (28,%sp)
240+
; NO-ATOMIC-NEXT: move.l (40,%sp), (24,%sp)
241+
; NO-ATOMIC-NEXT: lea (24,%sp), %a0
242+
; NO-ATOMIC-NEXT: move.l %a0, (4,%sp)
243+
; NO-ATOMIC-NEXT: move.l #5, (20,%sp)
244+
; NO-ATOMIC-NEXT: move.l #5, (16,%sp)
245+
; NO-ATOMIC-NEXT: move.l (52,%sp), (12,%sp)
246+
; NO-ATOMIC-NEXT: move.l (48,%sp), (8,%sp)
247+
; NO-ATOMIC-NEXT: move.l (56,%sp), (%sp)
248+
; NO-ATOMIC-NEXT: jsr __atomic_compare_exchange_8
249+
; NO-ATOMIC-NEXT: move.l (28,%sp), %d1
250+
; NO-ATOMIC-NEXT: move.l (24,%sp), %d0
251+
; NO-ATOMIC-NEXT: adda.l #36, %sp
252+
; NO-ATOMIC-NEXT: rts
253+
;
254+
; NO-ATOMIC-PIC-LABEL: cmpxchg_i64_seqcst_seqcst:
255+
; NO-ATOMIC-PIC: ; %bb.0:
256+
; NO-ATOMIC-PIC-NEXT: suba.l #36, %sp
257+
; NO-ATOMIC-PIC-NEXT: move.l (44,%sp), (28,%sp)
258+
; NO-ATOMIC-PIC-NEXT: move.l (40,%sp), (24,%sp)
259+
; NO-ATOMIC-PIC-NEXT: lea (24,%sp), %a0
260+
; NO-ATOMIC-PIC-NEXT: move.l %a0, (4,%sp)
261+
; NO-ATOMIC-PIC-NEXT: move.l #5, (20,%sp)
262+
; NO-ATOMIC-PIC-NEXT: move.l #5, (16,%sp)
263+
; NO-ATOMIC-PIC-NEXT: move.l (52,%sp), (12,%sp)
264+
; NO-ATOMIC-PIC-NEXT: move.l (48,%sp), (8,%sp)
265+
; NO-ATOMIC-PIC-NEXT: move.l (56,%sp), (%sp)
266+
; NO-ATOMIC-PIC-NEXT: jsr (__atomic_compare_exchange_8@PLT,%pc)
267+
; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), %d1
268+
; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), %d0
269+
; NO-ATOMIC-PIC-NEXT: adda.l #36, %sp
270+
; NO-ATOMIC-PIC-NEXT: rts
271+
;
272+
; ATOMIC-LABEL: cmpxchg_i64_seqcst_seqcst:
273+
; ATOMIC: ; %bb.0:
274+
; ATOMIC-NEXT: suba.l #36, %sp
275+
; ATOMIC-NEXT: move.l (44,%sp), (28,%sp)
276+
; ATOMIC-NEXT: move.l (40,%sp), (24,%sp)
277+
; ATOMIC-NEXT: lea (24,%sp), %a0
278+
; ATOMIC-NEXT: move.l %a0, (4,%sp)
279+
; ATOMIC-NEXT: move.l #5, (20,%sp)
280+
; ATOMIC-NEXT: move.l #5, (16,%sp)
281+
; ATOMIC-NEXT: move.l (52,%sp), (12,%sp)
282+
; ATOMIC-NEXT: move.l (48,%sp), (8,%sp)
283+
; ATOMIC-NEXT: move.l (56,%sp), (%sp)
284+
; ATOMIC-NEXT: jsr __atomic_compare_exchange_8
285+
; ATOMIC-NEXT: move.l (28,%sp), %d1
286+
; ATOMIC-NEXT: move.l (24,%sp), %d0
287+
; ATOMIC-NEXT: adda.l #36, %sp
288+
; ATOMIC-NEXT: rts
289+
;
290+
; ATOMIC-PIC-LABEL: cmpxchg_i64_seqcst_seqcst:
291+
; ATOMIC-PIC: ; %bb.0:
292+
; ATOMIC-PIC-NEXT: suba.l #36, %sp
293+
; ATOMIC-PIC-NEXT: move.l (44,%sp), (28,%sp)
294+
; ATOMIC-PIC-NEXT: move.l (40,%sp), (24,%sp)
295+
; ATOMIC-PIC-NEXT: lea (24,%sp), %a0
296+
; ATOMIC-PIC-NEXT: move.l %a0, (4,%sp)
297+
; ATOMIC-PIC-NEXT: move.l #5, (20,%sp)
298+
; ATOMIC-PIC-NEXT: move.l #5, (16,%sp)
299+
; ATOMIC-PIC-NEXT: move.l (52,%sp), (12,%sp)
300+
; ATOMIC-PIC-NEXT: move.l (48,%sp), (8,%sp)
301+
; ATOMIC-PIC-NEXT: move.l (56,%sp), (%sp)
302+
; ATOMIC-PIC-NEXT: jsr (__atomic_compare_exchange_8@PLT,%pc)
303+
; ATOMIC-PIC-NEXT: move.l (28,%sp), %d1
304+
; ATOMIC-PIC-NEXT: move.l (24,%sp), %d0
305+
; ATOMIC-PIC-NEXT: adda.l #36, %sp
306+
; ATOMIC-PIC-NEXT: rts
307+
%res = cmpxchg ptr %mem, i64 %cmp, i64 %new seq_cst seq_cst
308+
%val = extractvalue {i64, i1} %res, 0
309+
ret i64 %val
310+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2+
; RUN: llc -mtriple=m68k-linux-gnu --code-model=large < %s | FileCheck %s
3+
; RUN: llc -mtriple=m68k-linux-gnu --code-model=large --relocation-model=pic < %s | FileCheck %s --check-prefix=PIC
4+
5+
; M68k's libgcc does NOT have __sync_synchronize so we shouldn't
6+
; lower to that.
7+
8+
define void @atomic_fence() {
9+
; CHECK-LABEL: atomic_fence:
10+
; CHECK: .cfi_startproc
11+
; CHECK-NEXT: ; %bb.0: ; %entry
12+
; CHECK-NEXT: ;APP
13+
; CHECK-NEXT: ;NO_APP
14+
; CHECK-NEXT: ;APP
15+
; CHECK-NEXT: ;NO_APP
16+
; CHECK-NEXT: ;APP
17+
; CHECK-NEXT: ;NO_APP
18+
; CHECK-NEXT: ;APP
19+
; CHECK-NEXT: ;NO_APP
20+
; CHECK-NEXT: rts
21+
;
22+
; PIC-LABEL: atomic_fence:
23+
; PIC: .cfi_startproc
24+
; PIC-NEXT: ; %bb.0: ; %entry
25+
; PIC-NEXT: ;APP
26+
; PIC-NEXT: ;NO_APP
27+
; PIC-NEXT: ;APP
28+
; PIC-NEXT: ;NO_APP
29+
; PIC-NEXT: ;APP
30+
; PIC-NEXT: ;NO_APP
31+
; PIC-NEXT: ;APP
32+
; PIC-NEXT: ;NO_APP
33+
; PIC-NEXT: rts
34+
entry:
35+
fence acquire
36+
fence release
37+
fence acq_rel
38+
fence seq_cst
39+
ret void
40+
}
41+

0 commit comments

Comments
 (0)