xref: /llvm-project/llvm/test/CodeGen/AArch64/Atomics/aarch64-cmpxchg-outline_atomics.ll (revision ce61b0e9a41fb55beaef04610967ccc7b69307f8)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st[^r]|swp|cas|bl|add|and|eor|orn|orr|sub|mvn|sxt|cmp|ccmp|csel|dmb)"
2; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py
3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+outline-atomics -O0 | FileCheck %s --check-prefixes=CHECK,-O0
4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+outline-atomics -O1 | FileCheck %s --check-prefixes=CHECK,-O1
5
6define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {
7; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_monotonic:
8; CHECK:    bl __aarch64_cas1_relax
9    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
10    %r = extractvalue { i8, i1 } %pair, 0
11    ret i8 %r
12}
13
14define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
15; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak:
16; CHECK:    bl __aarch64_cas1_relax
17    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
18    %r = extractvalue { i8, i1 } %pair, 0
19    ret i8 %r
20}
21
22define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {
23; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_acquire:
24; CHECK:    bl __aarch64_cas1_acq
25    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
26    %r = extractvalue { i8, i1 } %pair, 0
27    ret i8 %r
28}
29
30define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
31; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak:
32; CHECK:    bl __aarch64_cas1_acq
33    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
34    %r = extractvalue { i8, i1 } %pair, 0
35    ret i8 %r
36}
37
38define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
39; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst:
40; CHECK:    bl __aarch64_cas1_acq_rel
41    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
42    %r = extractvalue { i8, i1 } %pair, 0
43    ret i8 %r
44}
45
46define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
47; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak:
48; CHECK:    bl __aarch64_cas1_acq_rel
49    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
50    %r = extractvalue { i8, i1 } %pair, 0
51    ret i8 %r
52}
53
54define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {
55; CHECK-LABEL: cmpxchg_i8_aligned_acquire_monotonic:
56; CHECK:    bl __aarch64_cas1_acq
57    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
58    %r = extractvalue { i8, i1 } %pair, 0
59    ret i8 %r
60}
61
62define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
63; CHECK-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak:
64; CHECK:    bl __aarch64_cas1_acq
65    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
66    %r = extractvalue { i8, i1 } %pair, 0
67    ret i8 %r
68}
69
70define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {
71; CHECK-LABEL: cmpxchg_i8_aligned_acquire_acquire:
72; CHECK:    bl __aarch64_cas1_acq
73    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
74    %r = extractvalue { i8, i1 } %pair, 0
75    ret i8 %r
76}
77
78define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
79; CHECK-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak:
80; CHECK:    bl __aarch64_cas1_acq
81    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
82    %r = extractvalue { i8, i1 } %pair, 0
83    ret i8 %r
84}
85
86define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
87; CHECK-LABEL: cmpxchg_i8_aligned_acquire_seq_cst:
88; CHECK:    bl __aarch64_cas1_acq_rel
89    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
90    %r = extractvalue { i8, i1 } %pair, 0
91    ret i8 %r
92}
93
94define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
95; CHECK-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak:
96; CHECK:    bl __aarch64_cas1_acq_rel
97    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
98    %r = extractvalue { i8, i1 } %pair, 0
99    ret i8 %r
100}
101
102define dso_local i8 @cmpxchg_i8_aligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {
103; CHECK-LABEL: cmpxchg_i8_aligned_release_monotonic:
104; CHECK:    bl __aarch64_cas1_rel
105    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
106    %r = extractvalue { i8, i1 } %pair, 0
107    ret i8 %r
108}
109
110define dso_local i8 @cmpxchg_i8_aligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
111; CHECK-LABEL: cmpxchg_i8_aligned_release_monotonic_weak:
112; CHECK:    bl __aarch64_cas1_rel
113    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
114    %r = extractvalue { i8, i1 } %pair, 0
115    ret i8 %r
116}
117
118define dso_local i8 @cmpxchg_i8_aligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {
119; CHECK-LABEL: cmpxchg_i8_aligned_release_acquire:
120; CHECK:    bl __aarch64_cas1_acq_rel
121    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1
122    %r = extractvalue { i8, i1 } %pair, 0
123    ret i8 %r
124}
125
126define dso_local i8 @cmpxchg_i8_aligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
127; CHECK-LABEL: cmpxchg_i8_aligned_release_acquire_weak:
128; CHECK:    bl __aarch64_cas1_acq_rel
129    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1
130    %r = extractvalue { i8, i1 } %pair, 0
131    ret i8 %r
132}
133
134define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
135; CHECK-LABEL: cmpxchg_i8_aligned_release_seq_cst:
136; CHECK:    bl __aarch64_cas1_acq_rel
137    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
138    %r = extractvalue { i8, i1 } %pair, 0
139    ret i8 %r
140}
141
142define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
143; CHECK-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak:
144; CHECK:    bl __aarch64_cas1_acq_rel
145    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
146    %r = extractvalue { i8, i1 } %pair, 0
147    ret i8 %r
148}
149
150define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {
151; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic:
152; CHECK:    bl __aarch64_cas1_acq_rel
153    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
154    %r = extractvalue { i8, i1 } %pair, 0
155    ret i8 %r
156}
157
158define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
159; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak:
160; CHECK:    bl __aarch64_cas1_acq_rel
161    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
162    %r = extractvalue { i8, i1 } %pair, 0
163    ret i8 %r
164}
165
166define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {
167; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_acquire:
168; CHECK:    bl __aarch64_cas1_acq_rel
169    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
170    %r = extractvalue { i8, i1 } %pair, 0
171    ret i8 %r
172}
173
174define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
175; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak:
176; CHECK:    bl __aarch64_cas1_acq_rel
177    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
178    %r = extractvalue { i8, i1 } %pair, 0
179    ret i8 %r
180}
181
182define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
183; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst:
184; CHECK:    bl __aarch64_cas1_acq_rel
185    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
186    %r = extractvalue { i8, i1 } %pair, 0
187    ret i8 %r
188}
189
190define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
191; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak:
192; CHECK:    bl __aarch64_cas1_acq_rel
193    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
194    %r = extractvalue { i8, i1 } %pair, 0
195    ret i8 %r
196}
197
198define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {
199; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic:
200; CHECK:    bl __aarch64_cas1_acq_rel
201    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
202    %r = extractvalue { i8, i1 } %pair, 0
203    ret i8 %r
204}
205
206define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
207; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak:
208; CHECK:    bl __aarch64_cas1_acq_rel
209    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
210    %r = extractvalue { i8, i1 } %pair, 0
211    ret i8 %r
212}
213
214define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {
215; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_acquire:
216; CHECK:    bl __aarch64_cas1_acq_rel
217    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
218    %r = extractvalue { i8, i1 } %pair, 0
219    ret i8 %r
220}
221
222define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
223; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak:
224; CHECK:    bl __aarch64_cas1_acq_rel
225    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
226    %r = extractvalue { i8, i1 } %pair, 0
227    ret i8 %r
228}
229
230define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
231; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst:
232; CHECK:    bl __aarch64_cas1_acq_rel
233    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
234    %r = extractvalue { i8, i1 } %pair, 0
235    ret i8 %r
236}
237
238define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
239; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak:
240; CHECK:    bl __aarch64_cas1_acq_rel
241    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
242    %r = extractvalue { i8, i1 } %pair, 0
243    ret i8 %r
244}
245
246define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {
247; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_monotonic:
248; CHECK:    bl __aarch64_cas2_relax
249    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2
250    %r = extractvalue { i16, i1 } %pair, 0
251    ret i16 %r
252}
253
254define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
255; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak:
256; CHECK:    bl __aarch64_cas2_relax
257    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2
258    %r = extractvalue { i16, i1 } %pair, 0
259    ret i16 %r
260}
261
262define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {
263; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_acquire:
264; CHECK:    bl __aarch64_cas2_acq
265    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2
266    %r = extractvalue { i16, i1 } %pair, 0
267    ret i16 %r
268}
269
270define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
271; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak:
272; CHECK:    bl __aarch64_cas2_acq
273    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2
274    %r = extractvalue { i16, i1 } %pair, 0
275    ret i16 %r
276}
277
278define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
279; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst:
280; CHECK:    bl __aarch64_cas2_acq_rel
281    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2
282    %r = extractvalue { i16, i1 } %pair, 0
283    ret i16 %r
284}
285
286define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
287; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak:
288; CHECK:    bl __aarch64_cas2_acq_rel
289    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2
290    %r = extractvalue { i16, i1 } %pair, 0
291    ret i16 %r
292}
293
294define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {
295; CHECK-LABEL: cmpxchg_i16_aligned_acquire_monotonic:
296; CHECK:    bl __aarch64_cas2_acq
297    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2
298    %r = extractvalue { i16, i1 } %pair, 0
299    ret i16 %r
300}
301
302define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
303; CHECK-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak:
304; CHECK:    bl __aarch64_cas2_acq
305    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2
306    %r = extractvalue { i16, i1 } %pair, 0
307    ret i16 %r
308}
309
310define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {
311; CHECK-LABEL: cmpxchg_i16_aligned_acquire_acquire:
312; CHECK:    bl __aarch64_cas2_acq
313    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2
314    %r = extractvalue { i16, i1 } %pair, 0
315    ret i16 %r
316}
317
318define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
319; CHECK-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak:
320; CHECK:    bl __aarch64_cas2_acq
321    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2
322    %r = extractvalue { i16, i1 } %pair, 0
323    ret i16 %r
324}
325
326define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
327; CHECK-LABEL: cmpxchg_i16_aligned_acquire_seq_cst:
328; CHECK:    bl __aarch64_cas2_acq_rel
329    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2
330    %r = extractvalue { i16, i1 } %pair, 0
331    ret i16 %r
332}
333
334define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
335; CHECK-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak:
336; CHECK:    bl __aarch64_cas2_acq_rel
337    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2
338    %r = extractvalue { i16, i1 } %pair, 0
339    ret i16 %r
340}
341
342define dso_local i16 @cmpxchg_i16_aligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {
343; CHECK-LABEL: cmpxchg_i16_aligned_release_monotonic:
344; CHECK:    bl __aarch64_cas2_rel
345    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 2
346    %r = extractvalue { i16, i1 } %pair, 0
347    ret i16 %r
348}
349
350define dso_local i16 @cmpxchg_i16_aligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
351; CHECK-LABEL: cmpxchg_i16_aligned_release_monotonic_weak:
352; CHECK:    bl __aarch64_cas2_rel
353    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 2
354    %r = extractvalue { i16, i1 } %pair, 0
355    ret i16 %r
356}
357
358define dso_local i16 @cmpxchg_i16_aligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {
359; CHECK-LABEL: cmpxchg_i16_aligned_release_acquire:
360; CHECK:    bl __aarch64_cas2_acq_rel
361    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 2
362    %r = extractvalue { i16, i1 } %pair, 0
363    ret i16 %r
364}
365
366define dso_local i16 @cmpxchg_i16_aligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
367; CHECK-LABEL: cmpxchg_i16_aligned_release_acquire_weak:
368; CHECK:    bl __aarch64_cas2_acq_rel
369    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 2
370    %r = extractvalue { i16, i1 } %pair, 0
371    ret i16 %r
372}
373
374define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
375; CHECK-LABEL: cmpxchg_i16_aligned_release_seq_cst:
376; CHECK:    bl __aarch64_cas2_acq_rel
377    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2
378    %r = extractvalue { i16, i1 } %pair, 0
379    ret i16 %r
380}
381
382define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
383; CHECK-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak:
384; CHECK:    bl __aarch64_cas2_acq_rel
385    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2
386    %r = extractvalue { i16, i1 } %pair, 0
387    ret i16 %r
388}
389
390define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {
391; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic:
392; CHECK:    bl __aarch64_cas2_acq_rel
393    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2
394    %r = extractvalue { i16, i1 } %pair, 0
395    ret i16 %r
396}
397
398define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
399; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak:
400; CHECK:    bl __aarch64_cas2_acq_rel
401    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2
402    %r = extractvalue { i16, i1 } %pair, 0
403    ret i16 %r
404}
405
406define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {
407; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_acquire:
408; CHECK:    bl __aarch64_cas2_acq_rel
409    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2
410    %r = extractvalue { i16, i1 } %pair, 0
411    ret i16 %r
412}
413
414define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
415; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak:
416; CHECK:    bl __aarch64_cas2_acq_rel
417    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2
418    %r = extractvalue { i16, i1 } %pair, 0
419    ret i16 %r
420}
421
422define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
423; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst:
424; CHECK:    bl __aarch64_cas2_acq_rel
425    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2
426    %r = extractvalue { i16, i1 } %pair, 0
427    ret i16 %r
428}
429
430define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
431; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak:
432; CHECK:    bl __aarch64_cas2_acq_rel
433    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2
434    %r = extractvalue { i16, i1 } %pair, 0
435    ret i16 %r
436}
437
438define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {
439; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic:
440; CHECK:    bl __aarch64_cas2_acq_rel
441    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2
442    %r = extractvalue { i16, i1 } %pair, 0
443    ret i16 %r
444}
445
446define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
447; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak:
448; CHECK:    bl __aarch64_cas2_acq_rel
449    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2
450    %r = extractvalue { i16, i1 } %pair, 0
451    ret i16 %r
452}
453
454define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {
455; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_acquire:
456; CHECK:    bl __aarch64_cas2_acq_rel
457    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2
458    %r = extractvalue { i16, i1 } %pair, 0
459    ret i16 %r
460}
461
462define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
463; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak:
464; CHECK:    bl __aarch64_cas2_acq_rel
465    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2
466    %r = extractvalue { i16, i1 } %pair, 0
467    ret i16 %r
468}
469
470define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
471; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst:
472; CHECK:    bl __aarch64_cas2_acq_rel
473    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2
474    %r = extractvalue { i16, i1 } %pair, 0
475    ret i16 %r
476}
477
478define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
479; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak:
480; CHECK:    bl __aarch64_cas2_acq_rel
481    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2
482    %r = extractvalue { i16, i1 } %pair, 0
483    ret i16 %r
484}
485
486define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {
487; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_monotonic:
488; CHECK:    bl __aarch64_cas4_relax
489    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4
490    %r = extractvalue { i32, i1 } %pair, 0
491    ret i32 %r
492}
493
494define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
495; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak:
496; CHECK:    bl __aarch64_cas4_relax
497    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4
498    %r = extractvalue { i32, i1 } %pair, 0
499    ret i32 %r
500}
501
502define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {
503; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_acquire:
504; CHECK:    bl __aarch64_cas4_acq
505    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4
506    %r = extractvalue { i32, i1 } %pair, 0
507    ret i32 %r
508}
509
510define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
511; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak:
512; CHECK:    bl __aarch64_cas4_acq
513    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4
514    %r = extractvalue { i32, i1 } %pair, 0
515    ret i32 %r
516}
517
518define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
519; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst:
520; CHECK:    bl __aarch64_cas4_acq_rel
521    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4
522    %r = extractvalue { i32, i1 } %pair, 0
523    ret i32 %r
524}
525
526define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
527; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak:
528; CHECK:    bl __aarch64_cas4_acq_rel
529    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4
530    %r = extractvalue { i32, i1 } %pair, 0
531    ret i32 %r
532}
533
534define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {
535; CHECK-LABEL: cmpxchg_i32_aligned_acquire_monotonic:
536; CHECK:    bl __aarch64_cas4_acq
537    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4
538    %r = extractvalue { i32, i1 } %pair, 0
539    ret i32 %r
540}
541
542define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
543; CHECK-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak:
544; CHECK:    bl __aarch64_cas4_acq
545    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4
546    %r = extractvalue { i32, i1 } %pair, 0
547    ret i32 %r
548}
549
550define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {
551; CHECK-LABEL: cmpxchg_i32_aligned_acquire_acquire:
552; CHECK:    bl __aarch64_cas4_acq
553    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4
554    %r = extractvalue { i32, i1 } %pair, 0
555    ret i32 %r
556}
557
558define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
559; CHECK-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak:
560; CHECK:    bl __aarch64_cas4_acq
561    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4
562    %r = extractvalue { i32, i1 } %pair, 0
563    ret i32 %r
564}
565
566define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
567; CHECK-LABEL: cmpxchg_i32_aligned_acquire_seq_cst:
568; CHECK:    bl __aarch64_cas4_acq_rel
569    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4
570    %r = extractvalue { i32, i1 } %pair, 0
571    ret i32 %r
572}
573
574define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
575; CHECK-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak:
576; CHECK:    bl __aarch64_cas4_acq_rel
577    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4
578    %r = extractvalue { i32, i1 } %pair, 0
579    ret i32 %r
580}
581
582define dso_local i32 @cmpxchg_i32_aligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {
583; CHECK-LABEL: cmpxchg_i32_aligned_release_monotonic:
584; CHECK:    bl __aarch64_cas4_rel
585    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 4
586    %r = extractvalue { i32, i1 } %pair, 0
587    ret i32 %r
588}
589
590define dso_local i32 @cmpxchg_i32_aligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
591; CHECK-LABEL: cmpxchg_i32_aligned_release_monotonic_weak:
592; CHECK:    bl __aarch64_cas4_rel
593    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 4
594    %r = extractvalue { i32, i1 } %pair, 0
595    ret i32 %r
596}
597
598define dso_local i32 @cmpxchg_i32_aligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {
599; CHECK-LABEL: cmpxchg_i32_aligned_release_acquire:
600; CHECK:    bl __aarch64_cas4_acq_rel
601    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 4
602    %r = extractvalue { i32, i1 } %pair, 0
603    ret i32 %r
604}
605
606define dso_local i32 @cmpxchg_i32_aligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
607; CHECK-LABEL: cmpxchg_i32_aligned_release_acquire_weak:
608; CHECK:    bl __aarch64_cas4_acq_rel
609    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 4
610    %r = extractvalue { i32, i1 } %pair, 0
611    ret i32 %r
612}
613
614define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
615; CHECK-LABEL: cmpxchg_i32_aligned_release_seq_cst:
616; CHECK:    bl __aarch64_cas4_acq_rel
617    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4
618    %r = extractvalue { i32, i1 } %pair, 0
619    ret i32 %r
620}
621
622define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
623; CHECK-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak:
624; CHECK:    bl __aarch64_cas4_acq_rel
625    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4
626    %r = extractvalue { i32, i1 } %pair, 0
627    ret i32 %r
628}
629
630define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {
631; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic:
632; CHECK:    bl __aarch64_cas4_acq_rel
633    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4
634    %r = extractvalue { i32, i1 } %pair, 0
635    ret i32 %r
636}
637
638define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
639; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak:
640; CHECK:    bl __aarch64_cas4_acq_rel
641    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4
642    %r = extractvalue { i32, i1 } %pair, 0
643    ret i32 %r
644}
645
646define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {
647; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_acquire:
648; CHECK:    bl __aarch64_cas4_acq_rel
649    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4
650    %r = extractvalue { i32, i1 } %pair, 0
651    ret i32 %r
652}
653
654define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
655; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak:
656; CHECK:    bl __aarch64_cas4_acq_rel
657    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4
658    %r = extractvalue { i32, i1 } %pair, 0
659    ret i32 %r
660}
661
662define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
663; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst:
664; CHECK:    bl __aarch64_cas4_acq_rel
665    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4
666    %r = extractvalue { i32, i1 } %pair, 0
667    ret i32 %r
668}
669
670define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
671; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak:
672; CHECK:    bl __aarch64_cas4_acq_rel
673    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4
674    %r = extractvalue { i32, i1 } %pair, 0
675    ret i32 %r
676}
677
678define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {
679; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic:
680; CHECK:    bl __aarch64_cas4_acq_rel
681    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4
682    %r = extractvalue { i32, i1 } %pair, 0
683    ret i32 %r
684}
685
686define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
687; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak:
688; CHECK:    bl __aarch64_cas4_acq_rel
689    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4
690    %r = extractvalue { i32, i1 } %pair, 0
691    ret i32 %r
692}
693
694define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {
695; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_acquire:
696; CHECK:    bl __aarch64_cas4_acq_rel
697    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4
698    %r = extractvalue { i32, i1 } %pair, 0
699    ret i32 %r
700}
701
702define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
703; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak:
704; CHECK:    bl __aarch64_cas4_acq_rel
705    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4
706    %r = extractvalue { i32, i1 } %pair, 0
707    ret i32 %r
708}
709
710define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
711; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst:
712; CHECK:    bl __aarch64_cas4_acq_rel
713    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4
714    %r = extractvalue { i32, i1 } %pair, 0
715    ret i32 %r
716}
717
718define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
719; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak:
720; CHECK:    bl __aarch64_cas4_acq_rel
721    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4
722    %r = extractvalue { i32, i1 } %pair, 0
723    ret i32 %r
724}
725
726define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {
727; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_monotonic:
728; CHECK:    bl __aarch64_cas8_relax
729    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8
730    %r = extractvalue { i64, i1 } %pair, 0
731    ret i64 %r
732}
733
734define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
735; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak:
736; CHECK:    bl __aarch64_cas8_relax
737    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8
738    %r = extractvalue { i64, i1 } %pair, 0
739    ret i64 %r
740}
741
742define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {
743; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_acquire:
744; CHECK:    bl __aarch64_cas8_acq
745    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8
746    %r = extractvalue { i64, i1 } %pair, 0
747    ret i64 %r
748}
749
750define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
751; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak:
752; CHECK:    bl __aarch64_cas8_acq
753    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8
754    %r = extractvalue { i64, i1 } %pair, 0
755    ret i64 %r
756}
757
758define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
759; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst:
760; CHECK:    bl __aarch64_cas8_acq_rel
761    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8
762    %r = extractvalue { i64, i1 } %pair, 0
763    ret i64 %r
764}
765
766define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
767; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak:
768; CHECK:    bl __aarch64_cas8_acq_rel
769    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8
770    %r = extractvalue { i64, i1 } %pair, 0
771    ret i64 %r
772}
773
774define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {
775; CHECK-LABEL: cmpxchg_i64_aligned_acquire_monotonic:
776; CHECK:    bl __aarch64_cas8_acq
777    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8
778    %r = extractvalue { i64, i1 } %pair, 0
779    ret i64 %r
780}
781
782define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
783; CHECK-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak:
784; CHECK:    bl __aarch64_cas8_acq
785    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8
786    %r = extractvalue { i64, i1 } %pair, 0
787    ret i64 %r
788}
789
790define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {
791; CHECK-LABEL: cmpxchg_i64_aligned_acquire_acquire:
792; CHECK:    bl __aarch64_cas8_acq
793    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8
794    %r = extractvalue { i64, i1 } %pair, 0
795    ret i64 %r
796}
797
798define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
799; CHECK-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak:
800; CHECK:    bl __aarch64_cas8_acq
801    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8
802    %r = extractvalue { i64, i1 } %pair, 0
803    ret i64 %r
804}
805
806define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
807; CHECK-LABEL: cmpxchg_i64_aligned_acquire_seq_cst:
808; CHECK:    bl __aarch64_cas8_acq_rel
809    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8
810    %r = extractvalue { i64, i1 } %pair, 0
811    ret i64 %r
812}
813
814define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
815; CHECK-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak:
816; CHECK:    bl __aarch64_cas8_acq_rel
817    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8
818    %r = extractvalue { i64, i1 } %pair, 0
819    ret i64 %r
820}
821
822define dso_local i64 @cmpxchg_i64_aligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {
823; CHECK-LABEL: cmpxchg_i64_aligned_release_monotonic:
824; CHECK:    bl __aarch64_cas8_rel
825    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 8
826    %r = extractvalue { i64, i1 } %pair, 0
827    ret i64 %r
828}
829
830define dso_local i64 @cmpxchg_i64_aligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
831; CHECK-LABEL: cmpxchg_i64_aligned_release_monotonic_weak:
832; CHECK:    bl __aarch64_cas8_rel
833    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 8
834    %r = extractvalue { i64, i1 } %pair, 0
835    ret i64 %r
836}
837
838define dso_local i64 @cmpxchg_i64_aligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {
839; CHECK-LABEL: cmpxchg_i64_aligned_release_acquire:
840; CHECK:    bl __aarch64_cas8_acq_rel
841    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 8
842    %r = extractvalue { i64, i1 } %pair, 0
843    ret i64 %r
844}
845
846define dso_local i64 @cmpxchg_i64_aligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
847; CHECK-LABEL: cmpxchg_i64_aligned_release_acquire_weak:
848; CHECK:    bl __aarch64_cas8_acq_rel
849    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 8
850    %r = extractvalue { i64, i1 } %pair, 0
851    ret i64 %r
852}
853
854define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
855; CHECK-LABEL: cmpxchg_i64_aligned_release_seq_cst:
856; CHECK:    bl __aarch64_cas8_acq_rel
857    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8
858    %r = extractvalue { i64, i1 } %pair, 0
859    ret i64 %r
860}
861
862define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
863; CHECK-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak:
864; CHECK:    bl __aarch64_cas8_acq_rel
865    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8
866    %r = extractvalue { i64, i1 } %pair, 0
867    ret i64 %r
868}
869
870define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {
871; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic:
872; CHECK:    bl __aarch64_cas8_acq_rel
873    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8
874    %r = extractvalue { i64, i1 } %pair, 0
875    ret i64 %r
876}
877
878define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
879; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak:
880; CHECK:    bl __aarch64_cas8_acq_rel
881    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8
882    %r = extractvalue { i64, i1 } %pair, 0
883    ret i64 %r
884}
885
886define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {
887; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_acquire:
888; CHECK:    bl __aarch64_cas8_acq_rel
889    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8
890    %r = extractvalue { i64, i1 } %pair, 0
891    ret i64 %r
892}
893
894define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
895; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak:
896; CHECK:    bl __aarch64_cas8_acq_rel
897    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8
898    %r = extractvalue { i64, i1 } %pair, 0
899    ret i64 %r
900}
901
902define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
903; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst:
904; CHECK:    bl __aarch64_cas8_acq_rel
905    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8
906    %r = extractvalue { i64, i1 } %pair, 0
907    ret i64 %r
908}
909
910define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
911; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak:
912; CHECK:    bl __aarch64_cas8_acq_rel
913    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8
914    %r = extractvalue { i64, i1 } %pair, 0
915    ret i64 %r
916}
917
918define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {
919; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic:
920; CHECK:    bl __aarch64_cas8_acq_rel
921    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8
922    %r = extractvalue { i64, i1 } %pair, 0
923    ret i64 %r
924}
925
926define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
927; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak:
928; CHECK:    bl __aarch64_cas8_acq_rel
929    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8
930    %r = extractvalue { i64, i1 } %pair, 0
931    ret i64 %r
932}
933
934define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {
935; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_acquire:
936; CHECK:    bl __aarch64_cas8_acq_rel
937    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8
938    %r = extractvalue { i64, i1 } %pair, 0
939    ret i64 %r
940}
941
942define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
943; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak:
944; CHECK:    bl __aarch64_cas8_acq_rel
945    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8
946    %r = extractvalue { i64, i1 } %pair, 0
947    ret i64 %r
948}
949
950define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
951; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst:
952; CHECK:    bl __aarch64_cas8_acq_rel
953    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8
954    %r = extractvalue { i64, i1 } %pair, 0
955    ret i64 %r
956}
957
958define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
959; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak:
960; CHECK:    bl __aarch64_cas8_acq_rel
961    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8
962    %r = extractvalue { i64, i1 } %pair, 0
963    ret i64 %r
964}
965
966define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {
967; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_monotonic:
968; CHECK:    bl __aarch64_cas16_relax
969    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16
970    %r = extractvalue { i128, i1 } %pair, 0
971    ret i128 %r
972}
973
974define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
975; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak:
976; CHECK:    bl __aarch64_cas16_relax
977    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16
978    %r = extractvalue { i128, i1 } %pair, 0
979    ret i128 %r
980}
981
982define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {
983; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_acquire:
984; CHECK:    bl __aarch64_cas16_acq
985    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16
986    %r = extractvalue { i128, i1 } %pair, 0
987    ret i128 %r
988}
989
990define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
991; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak:
992; CHECK:    bl __aarch64_cas16_acq
993    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16
994    %r = extractvalue { i128, i1 } %pair, 0
995    ret i128 %r
996}
997
998define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
999; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst:
1000; CHECK:    bl __aarch64_cas16_acq_rel
1001    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16
1002    %r = extractvalue { i128, i1 } %pair, 0
1003    ret i128 %r
1004}
1005
1006define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1007; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak:
1008; CHECK:    bl __aarch64_cas16_acq_rel
1009    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16
1010    %r = extractvalue { i128, i1 } %pair, 0
1011    ret i128 %r
1012}
1013
1014define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1015; CHECK-LABEL: cmpxchg_i128_aligned_acquire_monotonic:
1016; CHECK:    bl __aarch64_cas16_acq
1017    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16
1018    %r = extractvalue { i128, i1 } %pair, 0
1019    ret i128 %r
1020}
1021
1022define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1023; CHECK-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak:
1024; CHECK:    bl __aarch64_cas16_acq
1025    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16
1026    %r = extractvalue { i128, i1 } %pair, 0
1027    ret i128 %r
1028}
1029
1030define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {
1031; CHECK-LABEL: cmpxchg_i128_aligned_acquire_acquire:
1032; CHECK:    bl __aarch64_cas16_acq
1033    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16
1034    %r = extractvalue { i128, i1 } %pair, 0
1035    ret i128 %r
1036}
1037
1038define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1039; CHECK-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak:
1040; CHECK:    bl __aarch64_cas16_acq
1041    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16
1042    %r = extractvalue { i128, i1 } %pair, 0
1043    ret i128 %r
1044}
1045
1046define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1047; CHECK-LABEL: cmpxchg_i128_aligned_acquire_seq_cst:
1048; CHECK:    bl __aarch64_cas16_acq_rel
1049    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16
1050    %r = extractvalue { i128, i1 } %pair, 0
1051    ret i128 %r
1052}
1053
1054define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1055; CHECK-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak:
1056; CHECK:    bl __aarch64_cas16_acq_rel
1057    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16
1058    %r = extractvalue { i128, i1 } %pair, 0
1059    ret i128 %r
1060}
1061
1062define dso_local i128 @cmpxchg_i128_aligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1063; CHECK-LABEL: cmpxchg_i128_aligned_release_monotonic:
1064; CHECK:    bl __aarch64_cas16_rel
1065    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 16
1066    %r = extractvalue { i128, i1 } %pair, 0
1067    ret i128 %r
1068}
1069
1070define dso_local i128 @cmpxchg_i128_aligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1071; CHECK-LABEL: cmpxchg_i128_aligned_release_monotonic_weak:
1072; CHECK:    bl __aarch64_cas16_rel
1073    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 16
1074    %r = extractvalue { i128, i1 } %pair, 0
1075    ret i128 %r
1076}
1077
1078define dso_local i128 @cmpxchg_i128_aligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {
1079; CHECK-LABEL: cmpxchg_i128_aligned_release_acquire:
1080; CHECK:    bl __aarch64_cas16_acq_rel
1081    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 16
1082    %r = extractvalue { i128, i1 } %pair, 0
1083    ret i128 %r
1084}
1085
1086define dso_local i128 @cmpxchg_i128_aligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1087; CHECK-LABEL: cmpxchg_i128_aligned_release_acquire_weak:
1088; CHECK:    bl __aarch64_cas16_acq_rel
1089    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 16
1090    %r = extractvalue { i128, i1 } %pair, 0
1091    ret i128 %r
1092}
1093
1094define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1095; CHECK-LABEL: cmpxchg_i128_aligned_release_seq_cst:
1096; CHECK:    bl __aarch64_cas16_acq_rel
1097    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16
1098    %r = extractvalue { i128, i1 } %pair, 0
1099    ret i128 %r
1100}
1101
1102define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1103; CHECK-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak:
1104; CHECK:    bl __aarch64_cas16_acq_rel
1105    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16
1106    %r = extractvalue { i128, i1 } %pair, 0
1107    ret i128 %r
1108}
1109
1110define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1111; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic:
1112; CHECK:    bl __aarch64_cas16_acq_rel
1113    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16
1114    %r = extractvalue { i128, i1 } %pair, 0
1115    ret i128 %r
1116}
1117
1118define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1119; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak:
1120; CHECK:    bl __aarch64_cas16_acq_rel
1121    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16
1122    %r = extractvalue { i128, i1 } %pair, 0
1123    ret i128 %r
1124}
1125
1126define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {
1127; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_acquire:
1128; CHECK:    bl __aarch64_cas16_acq_rel
1129    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16
1130    %r = extractvalue { i128, i1 } %pair, 0
1131    ret i128 %r
1132}
1133
1134define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1135; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak:
1136; CHECK:    bl __aarch64_cas16_acq_rel
1137    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16
1138    %r = extractvalue { i128, i1 } %pair, 0
1139    ret i128 %r
1140}
1141
1142define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1143; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst:
1144; CHECK:    bl __aarch64_cas16_acq_rel
1145    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16
1146    %r = extractvalue { i128, i1 } %pair, 0
1147    ret i128 %r
1148}
1149
1150define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1151; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak:
1152; CHECK:    bl __aarch64_cas16_acq_rel
1153    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16
1154    %r = extractvalue { i128, i1 } %pair, 0
1155    ret i128 %r
1156}
1157
1158define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1159; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic:
1160; CHECK:    bl __aarch64_cas16_acq_rel
1161    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16
1162    %r = extractvalue { i128, i1 } %pair, 0
1163    ret i128 %r
1164}
1165
1166define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1167; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak:
1168; CHECK:    bl __aarch64_cas16_acq_rel
1169    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16
1170    %r = extractvalue { i128, i1 } %pair, 0
1171    ret i128 %r
1172}
1173
1174define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {
1175; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_acquire:
1176; CHECK:    bl __aarch64_cas16_acq_rel
1177    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16
1178    %r = extractvalue { i128, i1 } %pair, 0
1179    ret i128 %r
1180}
1181
1182define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1183; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak:
1184; CHECK:    bl __aarch64_cas16_acq_rel
1185    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16
1186    %r = extractvalue { i128, i1 } %pair, 0
1187    ret i128 %r
1188}
1189
1190define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1191; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst:
1192; CHECK:    bl __aarch64_cas16_acq_rel
1193    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16
1194    %r = extractvalue { i128, i1 } %pair, 0
1195    ret i128 %r
1196}
1197
1198define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1199; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak:
1200; CHECK:    bl __aarch64_cas16_acq_rel
1201    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16
1202    %r = extractvalue { i128, i1 } %pair, 0
1203    ret i128 %r
1204}
1205
1206define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1207; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic:
1208; CHECK:    bl __aarch64_cas1_relax
1209    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
1210    %r = extractvalue { i8, i1 } %pair, 0
1211    ret i8 %r
1212}
1213
1214define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1215; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak:
1216; CHECK:    bl __aarch64_cas1_relax
1217    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
1218    %r = extractvalue { i8, i1 } %pair, 0
1219    ret i8 %r
1220}
1221
1222define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {
1223; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire:
1224; CHECK:    bl __aarch64_cas1_acq
1225    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
1226    %r = extractvalue { i8, i1 } %pair, 0
1227    ret i8 %r
1228}
1229
1230define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1231; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak:
1232; CHECK:    bl __aarch64_cas1_acq
1233    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
1234    %r = extractvalue { i8, i1 } %pair, 0
1235    ret i8 %r
1236}
1237
1238define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1239; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst:
1240; CHECK:    bl __aarch64_cas1_acq_rel
1241    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
1242    %r = extractvalue { i8, i1 } %pair, 0
1243    ret i8 %r
1244}
1245
1246define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1247; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak:
1248; CHECK:    bl __aarch64_cas1_acq_rel
1249    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
1250    %r = extractvalue { i8, i1 } %pair, 0
1251    ret i8 %r
1252}
1253
1254define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1255; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic:
1256; CHECK:    bl __aarch64_cas1_acq
1257    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
1258    %r = extractvalue { i8, i1 } %pair, 0
1259    ret i8 %r
1260}
1261
1262define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1263; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak:
1264; CHECK:    bl __aarch64_cas1_acq
1265    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
1266    %r = extractvalue { i8, i1 } %pair, 0
1267    ret i8 %r
1268}
1269
1270define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {
1271; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire:
1272; CHECK:    bl __aarch64_cas1_acq
1273    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
1274    %r = extractvalue { i8, i1 } %pair, 0
1275    ret i8 %r
1276}
1277
1278define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1279; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak:
1280; CHECK:    bl __aarch64_cas1_acq
1281    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
1282    %r = extractvalue { i8, i1 } %pair, 0
1283    ret i8 %r
1284}
1285
1286define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1287; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst:
1288; CHECK:    bl __aarch64_cas1_acq_rel
1289    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
1290    %r = extractvalue { i8, i1 } %pair, 0
1291    ret i8 %r
1292}
1293
1294define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1295; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak:
1296; CHECK:    bl __aarch64_cas1_acq_rel
1297    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
1298    %r = extractvalue { i8, i1 } %pair, 0
1299    ret i8 %r
1300}
1301
1302define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1303; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic:
1304; CHECK:    bl __aarch64_cas1_rel
1305    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
1306    %r = extractvalue { i8, i1 } %pair, 0
1307    ret i8 %r
1308}
1309
1310define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1311; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak:
1312; CHECK:    bl __aarch64_cas1_rel
1313    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
1314    %r = extractvalue { i8, i1 } %pair, 0
1315    ret i8 %r
1316}
1317
1318define dso_local i8 @cmpxchg_i8_unaligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {
1319; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire:
1320; CHECK:    bl __aarch64_cas1_acq_rel
1321    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1
1322    %r = extractvalue { i8, i1 } %pair, 0
1323    ret i8 %r
1324}
1325
1326define dso_local i8 @cmpxchg_i8_unaligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1327; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire_weak:
1328; CHECK:    bl __aarch64_cas1_acq_rel
1329    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1
1330    %r = extractvalue { i8, i1 } %pair, 0
1331    ret i8 %r
1332}
1333
1334define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1335; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst:
1336; CHECK:    bl __aarch64_cas1_acq_rel
1337    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
1338    %r = extractvalue { i8, i1 } %pair, 0
1339    ret i8 %r
1340}
1341
1342define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1343; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak:
1344; CHECK:    bl __aarch64_cas1_acq_rel
1345    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
1346    %r = extractvalue { i8, i1 } %pair, 0
1347    ret i8 %r
1348}
1349
1350define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1351; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic:
1352; CHECK:    bl __aarch64_cas1_acq_rel
1353    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
1354    %r = extractvalue { i8, i1 } %pair, 0
1355    ret i8 %r
1356}
1357
1358define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1359; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak:
1360; CHECK:    bl __aarch64_cas1_acq_rel
1361    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
1362    %r = extractvalue { i8, i1 } %pair, 0
1363    ret i8 %r
1364}
1365
1366define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {
1367; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire:
1368; CHECK:    bl __aarch64_cas1_acq_rel
1369    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
1370    %r = extractvalue { i8, i1 } %pair, 0
1371    ret i8 %r
1372}
1373
1374define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1375; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak:
1376; CHECK:    bl __aarch64_cas1_acq_rel
1377    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
1378    %r = extractvalue { i8, i1 } %pair, 0
1379    ret i8 %r
1380}
1381
1382define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1383; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst:
1384; CHECK:    bl __aarch64_cas1_acq_rel
1385    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
1386    %r = extractvalue { i8, i1 } %pair, 0
1387    ret i8 %r
1388}
1389
1390define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1391; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak:
1392; CHECK:    bl __aarch64_cas1_acq_rel
1393    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
1394    %r = extractvalue { i8, i1 } %pair, 0
1395    ret i8 %r
1396}
1397
1398define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1399; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic:
1400; CHECK:    bl __aarch64_cas1_acq_rel
1401    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
1402    %r = extractvalue { i8, i1 } %pair, 0
1403    ret i8 %r
1404}
1405
1406define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1407; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak:
1408; CHECK:    bl __aarch64_cas1_acq_rel
1409    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
1410    %r = extractvalue { i8, i1 } %pair, 0
1411    ret i8 %r
1412}
1413
1414define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {
1415; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire:
1416; CHECK:    bl __aarch64_cas1_acq_rel
1417    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
1418    %r = extractvalue { i8, i1 } %pair, 0
1419    ret i8 %r
1420}
1421
1422define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1423; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak:
1424; CHECK:    bl __aarch64_cas1_acq_rel
1425    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
1426    %r = extractvalue { i8, i1 } %pair, 0
1427    ret i8 %r
1428}
1429
1430define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1431; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst:
1432; CHECK:    bl __aarch64_cas1_acq_rel
1433    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
1434    %r = extractvalue { i8, i1 } %pair, 0
1435    ret i8 %r
1436}
1437
1438define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1439; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak:
1440; CHECK:    bl __aarch64_cas1_acq_rel
1441    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
1442    %r = extractvalue { i8, i1 } %pair, 0
1443    ret i8 %r
1444}
1445
1446define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1447; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic:
1448; CHECK:    bl __atomic_compare_exchange
1449    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1
1450    %r = extractvalue { i16, i1 } %pair, 0
1451    ret i16 %r
1452}
1453
1454define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1455; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic_weak:
1456; CHECK:    bl __atomic_compare_exchange
1457    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1
1458    %r = extractvalue { i16, i1 } %pair, 0
1459    ret i16 %r
1460}
1461
1462define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {
1463; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire:
1464; CHECK:    bl __atomic_compare_exchange
1465    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1
1466    %r = extractvalue { i16, i1 } %pair, 0
1467    ret i16 %r
1468}
1469
1470define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1471; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire_weak:
1472; CHECK:    bl __atomic_compare_exchange
1473    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1
1474    %r = extractvalue { i16, i1 } %pair, 0
1475    ret i16 %r
1476}
1477
1478define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1479; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst:
1480; CHECK:    bl __atomic_compare_exchange
1481    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1
1482    %r = extractvalue { i16, i1 } %pair, 0
1483    ret i16 %r
1484}
1485
1486define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1487; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst_weak:
1488; CHECK:    bl __atomic_compare_exchange
1489    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1
1490    %r = extractvalue { i16, i1 } %pair, 0
1491    ret i16 %r
1492}
1493
1494define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1495; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic:
1496; CHECK:    bl __atomic_compare_exchange
1497    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1
1498    %r = extractvalue { i16, i1 } %pair, 0
1499    ret i16 %r
1500}
1501
1502define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1503; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic_weak:
1504; CHECK:    bl __atomic_compare_exchange
1505    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1
1506    %r = extractvalue { i16, i1 } %pair, 0
1507    ret i16 %r
1508}
1509
1510define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {
1511; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire:
1512; CHECK:    bl __atomic_compare_exchange
1513    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1
1514    %r = extractvalue { i16, i1 } %pair, 0
1515    ret i16 %r
1516}
1517
1518define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1519; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire_weak:
1520; CHECK:    bl __atomic_compare_exchange
1521    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1
1522    %r = extractvalue { i16, i1 } %pair, 0
1523    ret i16 %r
1524}
1525
1526define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1527; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst:
1528; CHECK:    bl __atomic_compare_exchange
1529    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1
1530    %r = extractvalue { i16, i1 } %pair, 0
1531    ret i16 %r
1532}
1533
1534define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1535; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst_weak:
1536; CHECK:    bl __atomic_compare_exchange
1537    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1
1538    %r = extractvalue { i16, i1 } %pair, 0
1539    ret i16 %r
1540}
1541
1542define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1543; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic:
1544; CHECK:    bl __atomic_compare_exchange
1545    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 1
1546    %r = extractvalue { i16, i1 } %pair, 0
1547    ret i16 %r
1548}
1549
1550define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1551; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic_weak:
1552; CHECK:    bl __atomic_compare_exchange
1553    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 1
1554    %r = extractvalue { i16, i1 } %pair, 0
1555    ret i16 %r
1556}
1557
1558define dso_local i16 @cmpxchg_i16_unaligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {
1559; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire:
1560; CHECK:    bl __atomic_compare_exchange
1561    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 1
1562    %r = extractvalue { i16, i1 } %pair, 0
1563    ret i16 %r
1564}
1565
1566define dso_local i16 @cmpxchg_i16_unaligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1567; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire_weak:
1568; CHECK:    bl __atomic_compare_exchange
1569    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 1
1570    %r = extractvalue { i16, i1 } %pair, 0
1571    ret i16 %r
1572}
1573
1574define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1575; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst:
1576; CHECK:    bl __atomic_compare_exchange
1577    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1
1578    %r = extractvalue { i16, i1 } %pair, 0
1579    ret i16 %r
1580}
1581
1582define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1583; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst_weak:
1584; CHECK:    bl __atomic_compare_exchange
1585    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1
1586    %r = extractvalue { i16, i1 } %pair, 0
1587    ret i16 %r
1588}
1589
1590define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1591; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic:
1592; CHECK:    bl __atomic_compare_exchange
1593    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1
1594    %r = extractvalue { i16, i1 } %pair, 0
1595    ret i16 %r
1596}
1597
1598define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1599; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic_weak:
1600; CHECK:    bl __atomic_compare_exchange
1601    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1
1602    %r = extractvalue { i16, i1 } %pair, 0
1603    ret i16 %r
1604}
1605
1606define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {
1607; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire:
1608; CHECK:    bl __atomic_compare_exchange
1609    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1
1610    %r = extractvalue { i16, i1 } %pair, 0
1611    ret i16 %r
1612}
1613
1614define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1615; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire_weak:
1616; CHECK:    bl __atomic_compare_exchange
1617    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1
1618    %r = extractvalue { i16, i1 } %pair, 0
1619    ret i16 %r
1620}
1621
1622define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1623; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst:
1624; CHECK:    bl __atomic_compare_exchange
1625    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1
1626    %r = extractvalue { i16, i1 } %pair, 0
1627    ret i16 %r
1628}
1629
1630define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1631; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst_weak:
1632; CHECK:    bl __atomic_compare_exchange
1633    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1
1634    %r = extractvalue { i16, i1 } %pair, 0
1635    ret i16 %r
1636}
1637
1638define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1639; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic:
1640; CHECK:    bl __atomic_compare_exchange
1641    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1
1642    %r = extractvalue { i16, i1 } %pair, 0
1643    ret i16 %r
1644}
1645
1646define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1647; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic_weak:
1648; CHECK:    bl __atomic_compare_exchange
1649    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1
1650    %r = extractvalue { i16, i1 } %pair, 0
1651    ret i16 %r
1652}
1653
1654define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {
1655; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire:
1656; CHECK:    bl __atomic_compare_exchange
1657    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1
1658    %r = extractvalue { i16, i1 } %pair, 0
1659    ret i16 %r
1660}
1661
1662define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1663; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire_weak:
1664; CHECK:    bl __atomic_compare_exchange
1665    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1
1666    %r = extractvalue { i16, i1 } %pair, 0
1667    ret i16 %r
1668}
1669
1670define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1671; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst:
1672; CHECK:    bl __atomic_compare_exchange
1673    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1
1674    %r = extractvalue { i16, i1 } %pair, 0
1675    ret i16 %r
1676}
1677
1678define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1679; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst_weak:
1680; CHECK:    bl __atomic_compare_exchange
1681    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1
1682    %r = extractvalue { i16, i1 } %pair, 0
1683    ret i16 %r
1684}
1685
1686define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1687; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic:
1688; CHECK:    bl __atomic_compare_exchange
1689    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1
1690    %r = extractvalue { i32, i1 } %pair, 0
1691    ret i32 %r
1692}
1693
1694define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1695; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic_weak:
1696; CHECK:    bl __atomic_compare_exchange
1697    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1
1698    %r = extractvalue { i32, i1 } %pair, 0
1699    ret i32 %r
1700}
1701
1702define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {
1703; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire:
1704; CHECK:    bl __atomic_compare_exchange
1705    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1
1706    %r = extractvalue { i32, i1 } %pair, 0
1707    ret i32 %r
1708}
1709
1710define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1711; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire_weak:
1712; CHECK:    bl __atomic_compare_exchange
1713    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1
1714    %r = extractvalue { i32, i1 } %pair, 0
1715    ret i32 %r
1716}
1717
1718define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1719; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst:
1720; CHECK:    bl __atomic_compare_exchange
1721    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1
1722    %r = extractvalue { i32, i1 } %pair, 0
1723    ret i32 %r
1724}
1725
1726define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1727; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst_weak:
1728; CHECK:    bl __atomic_compare_exchange
1729    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1
1730    %r = extractvalue { i32, i1 } %pair, 0
1731    ret i32 %r
1732}
1733
1734define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1735; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic:
1736; CHECK:    bl __atomic_compare_exchange
1737    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1
1738    %r = extractvalue { i32, i1 } %pair, 0
1739    ret i32 %r
1740}
1741
1742define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1743; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic_weak:
1744; CHECK:    bl __atomic_compare_exchange
1745    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1
1746    %r = extractvalue { i32, i1 } %pair, 0
1747    ret i32 %r
1748}
1749
1750define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {
1751; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire:
1752; CHECK:    bl __atomic_compare_exchange
1753    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1
1754    %r = extractvalue { i32, i1 } %pair, 0
1755    ret i32 %r
1756}
1757
1758define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1759; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire_weak:
1760; CHECK:    bl __atomic_compare_exchange
1761    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1
1762    %r = extractvalue { i32, i1 } %pair, 0
1763    ret i32 %r
1764}
1765
1766define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1767; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst:
1768; CHECK:    bl __atomic_compare_exchange
1769    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1
1770    %r = extractvalue { i32, i1 } %pair, 0
1771    ret i32 %r
1772}
1773
1774define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1775; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst_weak:
1776; CHECK:    bl __atomic_compare_exchange
1777    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1
1778    %r = extractvalue { i32, i1 } %pair, 0
1779    ret i32 %r
1780}
1781
1782define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1783; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic:
1784; CHECK:    bl __atomic_compare_exchange
1785    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 1
1786    %r = extractvalue { i32, i1 } %pair, 0
1787    ret i32 %r
1788}
1789
1790define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1791; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic_weak:
1792; CHECK:    bl __atomic_compare_exchange
1793    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 1
1794    %r = extractvalue { i32, i1 } %pair, 0
1795    ret i32 %r
1796}
1797
1798define dso_local i32 @cmpxchg_i32_unaligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {
1799; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire:
1800; CHECK:    bl __atomic_compare_exchange
1801    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 1
1802    %r = extractvalue { i32, i1 } %pair, 0
1803    ret i32 %r
1804}
1805
1806define dso_local i32 @cmpxchg_i32_unaligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1807; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire_weak:
1808; CHECK:    bl __atomic_compare_exchange
1809    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 1
1810    %r = extractvalue { i32, i1 } %pair, 0
1811    ret i32 %r
1812}
1813
1814define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1815; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst:
1816; CHECK:    bl __atomic_compare_exchange
1817    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1
1818    %r = extractvalue { i32, i1 } %pair, 0
1819    ret i32 %r
1820}
1821
1822define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1823; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst_weak:
1824; CHECK:    bl __atomic_compare_exchange
1825    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1
1826    %r = extractvalue { i32, i1 } %pair, 0
1827    ret i32 %r
1828}
1829
1830define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1831; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic:
1832; CHECK:    bl __atomic_compare_exchange
1833    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1
1834    %r = extractvalue { i32, i1 } %pair, 0
1835    ret i32 %r
1836}
1837
1838define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1839; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic_weak:
1840; CHECK:    bl __atomic_compare_exchange
1841    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1
1842    %r = extractvalue { i32, i1 } %pair, 0
1843    ret i32 %r
1844}
1845
1846define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {
1847; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire:
1848; CHECK:    bl __atomic_compare_exchange
1849    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1
1850    %r = extractvalue { i32, i1 } %pair, 0
1851    ret i32 %r
1852}
1853
1854define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1855; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire_weak:
1856; CHECK:    bl __atomic_compare_exchange
1857    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1
1858    %r = extractvalue { i32, i1 } %pair, 0
1859    ret i32 %r
1860}
1861
1862define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1863; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst:
1864; CHECK:    bl __atomic_compare_exchange
1865    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1
1866    %r = extractvalue { i32, i1 } %pair, 0
1867    ret i32 %r
1868}
1869
1870define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1871; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst_weak:
1872; CHECK:    bl __atomic_compare_exchange
1873    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1
1874    %r = extractvalue { i32, i1 } %pair, 0
1875    ret i32 %r
1876}
1877
1878define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1879; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic:
1880; CHECK:    bl __atomic_compare_exchange
1881    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1
1882    %r = extractvalue { i32, i1 } %pair, 0
1883    ret i32 %r
1884}
1885
1886define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1887; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic_weak:
1888; CHECK:    bl __atomic_compare_exchange
1889    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1
1890    %r = extractvalue { i32, i1 } %pair, 0
1891    ret i32 %r
1892}
1893
1894define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {
1895; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire:
1896; CHECK:    bl __atomic_compare_exchange
1897    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1
1898    %r = extractvalue { i32, i1 } %pair, 0
1899    ret i32 %r
1900}
1901
1902define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1903; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire_weak:
1904; CHECK:    bl __atomic_compare_exchange
1905    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1
1906    %r = extractvalue { i32, i1 } %pair, 0
1907    ret i32 %r
1908}
1909
1910define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1911; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst:
1912; CHECK:    bl __atomic_compare_exchange
1913    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1
1914    %r = extractvalue { i32, i1 } %pair, 0
1915    ret i32 %r
1916}
1917
1918define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1919; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst_weak:
1920; CHECK:    bl __atomic_compare_exchange
1921    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1
1922    %r = extractvalue { i32, i1 } %pair, 0
1923    ret i32 %r
1924}
1925
1926define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {
1927; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic:
1928; CHECK:    bl __atomic_compare_exchange
1929    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1
1930    %r = extractvalue { i64, i1 } %pair, 0
1931    ret i64 %r
1932}
1933
1934define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
1935; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic_weak:
1936; CHECK:    bl __atomic_compare_exchange
1937    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1
1938    %r = extractvalue { i64, i1 } %pair, 0
1939    ret i64 %r
1940}
1941
1942define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {
1943; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire:
1944; CHECK:    bl __atomic_compare_exchange
1945    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1
1946    %r = extractvalue { i64, i1 } %pair, 0
1947    ret i64 %r
1948}
1949
1950define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
1951; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire_weak:
1952; CHECK:    bl __atomic_compare_exchange
1953    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1
1954    %r = extractvalue { i64, i1 } %pair, 0
1955    ret i64 %r
1956}
1957
1958define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
1959; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst:
1960; CHECK:    bl __atomic_compare_exchange
1961    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1
1962    %r = extractvalue { i64, i1 } %pair, 0
1963    ret i64 %r
1964}
1965
1966define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
1967; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst_weak:
1968; CHECK:    bl __atomic_compare_exchange
1969    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1
1970    %r = extractvalue { i64, i1 } %pair, 0
1971    ret i64 %r
1972}
1973
1974define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {
1975; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic:
1976; CHECK:    bl __atomic_compare_exchange
1977    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1
1978    %r = extractvalue { i64, i1 } %pair, 0
1979    ret i64 %r
1980}
1981
1982define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
1983; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic_weak:
1984; CHECK:    bl __atomic_compare_exchange
1985    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1
1986    %r = extractvalue { i64, i1 } %pair, 0
1987    ret i64 %r
1988}
1989
1990define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {
1991; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire:
1992; CHECK:    bl __atomic_compare_exchange
1993    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1
1994    %r = extractvalue { i64, i1 } %pair, 0
1995    ret i64 %r
1996}
1997
1998define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
1999; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire_weak:
2000; CHECK:    bl __atomic_compare_exchange
2001    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1
2002    %r = extractvalue { i64, i1 } %pair, 0
2003    ret i64 %r
2004}
2005
2006define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
2007; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst:
2008; CHECK:    bl __atomic_compare_exchange
2009    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1
2010    %r = extractvalue { i64, i1 } %pair, 0
2011    ret i64 %r
2012}
2013
2014define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
2015; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst_weak:
2016; CHECK:    bl __atomic_compare_exchange
2017    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1
2018    %r = extractvalue { i64, i1 } %pair, 0
2019    ret i64 %r
2020}
2021
2022define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {
2023; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic:
2024; CHECK:    bl __atomic_compare_exchange
2025    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 1
2026    %r = extractvalue { i64, i1 } %pair, 0
2027    ret i64 %r
2028}
2029
2030define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
2031; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic_weak:
2032; CHECK:    bl __atomic_compare_exchange
2033    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 1
2034    %r = extractvalue { i64, i1 } %pair, 0
2035    ret i64 %r
2036}
2037
2038define dso_local i64 @cmpxchg_i64_unaligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {
2039; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire:
2040; CHECK:    bl __atomic_compare_exchange
2041    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 1
2042    %r = extractvalue { i64, i1 } %pair, 0
2043    ret i64 %r
2044}
2045
2046define dso_local i64 @cmpxchg_i64_unaligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
2047; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire_weak:
2048; CHECK:    bl __atomic_compare_exchange
2049    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 1
2050    %r = extractvalue { i64, i1 } %pair, 0
2051    ret i64 %r
2052}
2053
2054define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
2055; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst:
2056; CHECK:    bl __atomic_compare_exchange
2057    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1
2058    %r = extractvalue { i64, i1 } %pair, 0
2059    ret i64 %r
2060}
2061
2062define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
2063; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst_weak:
2064; CHECK:    bl __atomic_compare_exchange
2065    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1
2066    %r = extractvalue { i64, i1 } %pair, 0
2067    ret i64 %r
2068}
2069
2070define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {
2071; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic:
2072; CHECK:    bl __atomic_compare_exchange
2073    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1
2074    %r = extractvalue { i64, i1 } %pair, 0
2075    ret i64 %r
2076}
2077
2078define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
2079; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic_weak:
2080; CHECK:    bl __atomic_compare_exchange
2081    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1
2082    %r = extractvalue { i64, i1 } %pair, 0
2083    ret i64 %r
2084}
2085
2086define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {
2087; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire:
2088; CHECK:    bl __atomic_compare_exchange
2089    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1
2090    %r = extractvalue { i64, i1 } %pair, 0
2091    ret i64 %r
2092}
2093
2094define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
2095; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire_weak:
2096; CHECK:    bl __atomic_compare_exchange
2097    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1
2098    %r = extractvalue { i64, i1 } %pair, 0
2099    ret i64 %r
2100}
2101
2102define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
2103; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst:
2104; CHECK:    bl __atomic_compare_exchange
2105    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1
2106    %r = extractvalue { i64, i1 } %pair, 0
2107    ret i64 %r
2108}
2109
2110define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
2111; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst_weak:
2112; CHECK:    bl __atomic_compare_exchange
2113    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1
2114    %r = extractvalue { i64, i1 } %pair, 0
2115    ret i64 %r
2116}
2117
2118define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {
2119; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic:
2120; CHECK:    bl __atomic_compare_exchange
2121    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1
2122    %r = extractvalue { i64, i1 } %pair, 0
2123    ret i64 %r
2124}
2125
2126define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
2127; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic_weak:
2128; CHECK:    bl __atomic_compare_exchange
2129    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1
2130    %r = extractvalue { i64, i1 } %pair, 0
2131    ret i64 %r
2132}
2133
2134define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {
2135; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire:
2136; CHECK:    bl __atomic_compare_exchange
2137    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1
2138    %r = extractvalue { i64, i1 } %pair, 0
2139    ret i64 %r
2140}
2141
2142define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
2143; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire_weak:
2144; CHECK:    bl __atomic_compare_exchange
2145    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1
2146    %r = extractvalue { i64, i1 } %pair, 0
2147    ret i64 %r
2148}
2149
2150define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
2151; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst:
2152; CHECK:    bl __atomic_compare_exchange
2153    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1
2154    %r = extractvalue { i64, i1 } %pair, 0
2155    ret i64 %r
2156}
2157
2158define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
2159; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst_weak:
2160; CHECK:    bl __atomic_compare_exchange
2161    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1
2162    %r = extractvalue { i64, i1 } %pair, 0
2163    ret i64 %r
2164}
2165
2166define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2167; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic:
2168; CHECK:    bl __atomic_compare_exchange
2169    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1
2170    %r = extractvalue { i128, i1 } %pair, 0
2171    ret i128 %r
2172}
2173
2174define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2175; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic_weak:
2176; CHECK:    bl __atomic_compare_exchange
2177    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1
2178    %r = extractvalue { i128, i1 } %pair, 0
2179    ret i128 %r
2180}
2181
2182define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {
2183; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire:
2184; CHECK:    bl __atomic_compare_exchange
2185    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1
2186    %r = extractvalue { i128, i1 } %pair, 0
2187    ret i128 %r
2188}
2189
2190define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2191; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire_weak:
2192; CHECK:    bl __atomic_compare_exchange
2193    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1
2194    %r = extractvalue { i128, i1 } %pair, 0
2195    ret i128 %r
2196}
2197
2198define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2199; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst:
2200; CHECK:    bl __atomic_compare_exchange
2201    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1
2202    %r = extractvalue { i128, i1 } %pair, 0
2203    ret i128 %r
2204}
2205
2206define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2207; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst_weak:
2208; CHECK:    bl __atomic_compare_exchange
2209    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1
2210    %r = extractvalue { i128, i1 } %pair, 0
2211    ret i128 %r
2212}
2213
2214define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2215; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic:
2216; CHECK:    bl __atomic_compare_exchange
2217    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1
2218    %r = extractvalue { i128, i1 } %pair, 0
2219    ret i128 %r
2220}
2221
2222define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2223; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic_weak:
2224; CHECK:    bl __atomic_compare_exchange
2225    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1
2226    %r = extractvalue { i128, i1 } %pair, 0
2227    ret i128 %r
2228}
2229
2230define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {
2231; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire:
2232; CHECK:    bl __atomic_compare_exchange
2233    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1
2234    %r = extractvalue { i128, i1 } %pair, 0
2235    ret i128 %r
2236}
2237
2238define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2239; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire_weak:
2240; CHECK:    bl __atomic_compare_exchange
2241    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1
2242    %r = extractvalue { i128, i1 } %pair, 0
2243    ret i128 %r
2244}
2245
2246define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2247; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst:
2248; CHECK:    bl __atomic_compare_exchange
2249    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1
2250    %r = extractvalue { i128, i1 } %pair, 0
2251    ret i128 %r
2252}
2253
2254define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2255; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst_weak:
2256; CHECK:    bl __atomic_compare_exchange
2257    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1
2258    %r = extractvalue { i128, i1 } %pair, 0
2259    ret i128 %r
2260}
2261
2262define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2263; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic:
2264; CHECK:    bl __atomic_compare_exchange
2265    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 1
2266    %r = extractvalue { i128, i1 } %pair, 0
2267    ret i128 %r
2268}
2269
2270define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2271; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic_weak:
2272; CHECK:    bl __atomic_compare_exchange
2273    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 1
2274    %r = extractvalue { i128, i1 } %pair, 0
2275    ret i128 %r
2276}
2277
2278define dso_local i128 @cmpxchg_i128_unaligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {
2279; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire:
2280; CHECK:    bl __atomic_compare_exchange
2281    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 1
2282    %r = extractvalue { i128, i1 } %pair, 0
2283    ret i128 %r
2284}
2285
2286define dso_local i128 @cmpxchg_i128_unaligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2287; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire_weak:
2288; CHECK:    bl __atomic_compare_exchange
2289    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 1
2290    %r = extractvalue { i128, i1 } %pair, 0
2291    ret i128 %r
2292}
2293
2294define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2295; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst:
2296; CHECK:    bl __atomic_compare_exchange
2297    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1
2298    %r = extractvalue { i128, i1 } %pair, 0
2299    ret i128 %r
2300}
2301
2302define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2303; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst_weak:
2304; CHECK:    bl __atomic_compare_exchange
2305    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1
2306    %r = extractvalue { i128, i1 } %pair, 0
2307    ret i128 %r
2308}
2309
2310define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2311; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic:
2312; CHECK:    bl __atomic_compare_exchange
2313    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1
2314    %r = extractvalue { i128, i1 } %pair, 0
2315    ret i128 %r
2316}
2317
2318define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2319; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic_weak:
2320; CHECK:    bl __atomic_compare_exchange
2321    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1
2322    %r = extractvalue { i128, i1 } %pair, 0
2323    ret i128 %r
2324}
2325
2326define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {
2327; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire:
2328; CHECK:    bl __atomic_compare_exchange
2329    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1
2330    %r = extractvalue { i128, i1 } %pair, 0
2331    ret i128 %r
2332}
2333
2334define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2335; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire_weak:
2336; CHECK:    bl __atomic_compare_exchange
2337    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1
2338    %r = extractvalue { i128, i1 } %pair, 0
2339    ret i128 %r
2340}
2341
2342define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2343; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst:
2344; CHECK:    bl __atomic_compare_exchange
2345    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1
2346    %r = extractvalue { i128, i1 } %pair, 0
2347    ret i128 %r
2348}
2349
2350define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2351; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst_weak:
2352; CHECK:    bl __atomic_compare_exchange
2353    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1
2354    %r = extractvalue { i128, i1 } %pair, 0
2355    ret i128 %r
2356}
2357
2358define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2359; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic:
2360; CHECK:    bl __atomic_compare_exchange
2361    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1
2362    %r = extractvalue { i128, i1 } %pair, 0
2363    ret i128 %r
2364}
2365
2366define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2367; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic_weak:
2368; CHECK:    bl __atomic_compare_exchange
2369    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1
2370    %r = extractvalue { i128, i1 } %pair, 0
2371    ret i128 %r
2372}
2373
2374define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {
2375; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire:
2376; CHECK:    bl __atomic_compare_exchange
2377    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1
2378    %r = extractvalue { i128, i1 } %pair, 0
2379    ret i128 %r
2380}
2381
2382define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2383; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire_weak:
2384; CHECK:    bl __atomic_compare_exchange
2385    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1
2386    %r = extractvalue { i128, i1 } %pair, 0
2387    ret i128 %r
2388}
2389
2390define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2391; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst:
2392; CHECK:    bl __atomic_compare_exchange
2393    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1
2394    %r = extractvalue { i128, i1 } %pair, 0
2395    ret i128 %r
2396}
2397
2398define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2399; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst_weak:
2400; CHECK:    bl __atomic_compare_exchange
2401    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1
2402    %r = extractvalue { i128, i1 } %pair, 0
2403    ret i128 %r
2404}
2405;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
2406; -O0: {{.*}}
2407; -O1: {{.*}}
2408