xref: /llvm-project/llvm/test/CodeGen/AArch64/Atomics/aarch64-cmpxchg-v8a.ll (revision a701b7e368b70688bb4b84dafcaa43fa7c9a3649)
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=+v8a -O0 | FileCheck %s --check-prefixes=CHECK,-O0
4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+v8a -O1 | FileCheck %s --check-prefixes=CHECK,-O1
5
6define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {
7; -O0-LABEL: cmpxchg_i8_aligned_monotonic_monotonic:
8; -O0:    ldaxrb w0, [x2]
9; -O0:    cmp w0, w9, uxtb
10; -O0:    stlxrb w8, w1, [x2]
11;
12; -O1-LABEL: cmpxchg_i8_aligned_monotonic_monotonic:
13; -O1:    and w8, w0, #0xff
14; -O1:    ldxrb w0, [x2]
15; -O1:    cmp w0, w8
16; -O1:    stxrb w9, w1, [x2]
17    %pair = cmpxchg 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_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
23; -O0-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak:
24; -O0:    ldaxrb w0, [x2]
25; -O0:    cmp w0, w9, uxtb
26; -O0:    stlxrb w8, w1, [x2]
27;
28; -O1-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak:
29; -O1:    ldxrb w8, [x2]
30; -O1:    cmp w8, w0, uxtb
31; -O1:    stxrb wzr, w1, [x2]
32    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
33    %r = extractvalue { i8, i1 } %pair, 0
34    ret i8 %r
35}
36
37define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {
38; -O0-LABEL: cmpxchg_i8_aligned_monotonic_acquire:
39; -O0:    ldaxrb w0, [x2]
40; -O0:    cmp w0, w9, uxtb
41; -O0:    stlxrb w8, w1, [x2]
42;
43; -O1-LABEL: cmpxchg_i8_aligned_monotonic_acquire:
44; -O1:    and w8, w0, #0xff
45; -O1:    ldaxrb w0, [x2]
46; -O1:    cmp w0, w8
47; -O1:    stxrb w9, w1, [x2]
48    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
49    %r = extractvalue { i8, i1 } %pair, 0
50    ret i8 %r
51}
52
53define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
54; -O0-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak:
55; -O0:    ldaxrb w0, [x2]
56; -O0:    cmp w0, w9, uxtb
57; -O0:    stlxrb w8, w1, [x2]
58;
59; -O1-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak:
60; -O1:    ldaxrb w8, [x2]
61; -O1:    cmp w8, w0, uxtb
62; -O1:    stxrb wzr, w1, [x2]
63    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
64    %r = extractvalue { i8, i1 } %pair, 0
65    ret i8 %r
66}
67
68define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
69; -O0-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst:
70; -O0:    ldaxrb w0, [x2]
71; -O0:    cmp w0, w9, uxtb
72; -O0:    stlxrb w8, w1, [x2]
73;
74; -O1-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst:
75; -O1:    and w8, w0, #0xff
76; -O1:    ldaxrb w0, [x2]
77; -O1:    cmp w0, w8
78; -O1:    stlxrb w9, w1, [x2]
79    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
80    %r = extractvalue { i8, i1 } %pair, 0
81    ret i8 %r
82}
83
84define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
85; -O0-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak:
86; -O0:    ldaxrb w0, [x2]
87; -O0:    cmp w0, w9, uxtb
88; -O0:    stlxrb w8, w1, [x2]
89;
90; -O1-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak:
91; -O1:    ldaxrb w8, [x2]
92; -O1:    cmp w8, w0, uxtb
93; -O1:    stlxrb wzr, w1, [x2]
94    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
95    %r = extractvalue { i8, i1 } %pair, 0
96    ret i8 %r
97}
98
99define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {
100; -O0-LABEL: cmpxchg_i8_aligned_acquire_monotonic:
101; -O0:    ldaxrb w0, [x2]
102; -O0:    cmp w0, w9, uxtb
103; -O0:    stlxrb w8, w1, [x2]
104;
105; -O1-LABEL: cmpxchg_i8_aligned_acquire_monotonic:
106; -O1:    and w8, w0, #0xff
107; -O1:    ldaxrb w0, [x2]
108; -O1:    cmp w0, w8
109; -O1:    stxrb w9, w1, [x2]
110    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
111    %r = extractvalue { i8, i1 } %pair, 0
112    ret i8 %r
113}
114
115define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
116; -O0-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak:
117; -O0:    ldaxrb w0, [x2]
118; -O0:    cmp w0, w9, uxtb
119; -O0:    stlxrb w8, w1, [x2]
120;
121; -O1-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak:
122; -O1:    ldaxrb w8, [x2]
123; -O1:    cmp w8, w0, uxtb
124; -O1:    stxrb wzr, w1, [x2]
125    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
126    %r = extractvalue { i8, i1 } %pair, 0
127    ret i8 %r
128}
129
130define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {
131; -O0-LABEL: cmpxchg_i8_aligned_acquire_acquire:
132; -O0:    ldaxrb w0, [x2]
133; -O0:    cmp w0, w9, uxtb
134; -O0:    stlxrb w8, w1, [x2]
135;
136; -O1-LABEL: cmpxchg_i8_aligned_acquire_acquire:
137; -O1:    and w8, w0, #0xff
138; -O1:    ldaxrb w0, [x2]
139; -O1:    cmp w0, w8
140; -O1:    stxrb w9, w1, [x2]
141    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
142    %r = extractvalue { i8, i1 } %pair, 0
143    ret i8 %r
144}
145
146define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
147; -O0-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak:
148; -O0:    ldaxrb w0, [x2]
149; -O0:    cmp w0, w9, uxtb
150; -O0:    stlxrb w8, w1, [x2]
151;
152; -O1-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak:
153; -O1:    ldaxrb w8, [x2]
154; -O1:    cmp w8, w0, uxtb
155; -O1:    stxrb wzr, w1, [x2]
156    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
157    %r = extractvalue { i8, i1 } %pair, 0
158    ret i8 %r
159}
160
161define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
162; -O0-LABEL: cmpxchg_i8_aligned_acquire_seq_cst:
163; -O0:    ldaxrb w0, [x2]
164; -O0:    cmp w0, w9, uxtb
165; -O0:    stlxrb w8, w1, [x2]
166;
167; -O1-LABEL: cmpxchg_i8_aligned_acquire_seq_cst:
168; -O1:    and w8, w0, #0xff
169; -O1:    ldaxrb w0, [x2]
170; -O1:    cmp w0, w8
171; -O1:    stlxrb w9, w1, [x2]
172    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
173    %r = extractvalue { i8, i1 } %pair, 0
174    ret i8 %r
175}
176
177define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
178; -O0-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak:
179; -O0:    ldaxrb w0, [x2]
180; -O0:    cmp w0, w9, uxtb
181; -O0:    stlxrb w8, w1, [x2]
182;
183; -O1-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak:
184; -O1:    ldaxrb w8, [x2]
185; -O1:    cmp w8, w0, uxtb
186; -O1:    stlxrb wzr, w1, [x2]
187    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
188    %r = extractvalue { i8, i1 } %pair, 0
189    ret i8 %r
190}
191
192define dso_local i8 @cmpxchg_i8_aligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {
193; -O0-LABEL: cmpxchg_i8_aligned_release_monotonic:
194; -O0:    ldaxrb w0, [x2]
195; -O0:    cmp w0, w9, uxtb
196; -O0:    stlxrb w8, w1, [x2]
197;
198; -O1-LABEL: cmpxchg_i8_aligned_release_monotonic:
199; -O1:    and w8, w0, #0xff
200; -O1:    ldxrb w0, [x2]
201; -O1:    cmp w0, w8
202; -O1:    stlxrb w9, w1, [x2]
203    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
204    %r = extractvalue { i8, i1 } %pair, 0
205    ret i8 %r
206}
207
208define dso_local i8 @cmpxchg_i8_aligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
209; -O0-LABEL: cmpxchg_i8_aligned_release_monotonic_weak:
210; -O0:    ldaxrb w0, [x2]
211; -O0:    cmp w0, w9, uxtb
212; -O0:    stlxrb w8, w1, [x2]
213;
214; -O1-LABEL: cmpxchg_i8_aligned_release_monotonic_weak:
215; -O1:    ldxrb w8, [x2]
216; -O1:    cmp w8, w0, uxtb
217; -O1:    stlxrb wzr, w1, [x2]
218    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
219    %r = extractvalue { i8, i1 } %pair, 0
220    ret i8 %r
221}
222
223define dso_local i8 @cmpxchg_i8_aligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {
224; -O0-LABEL: cmpxchg_i8_aligned_release_acquire:
225; -O0:    ldaxrb w0, [x2]
226; -O0:    cmp w0, w9, uxtb
227; -O0:    stlxrb w8, w1, [x2]
228;
229; -O1-LABEL: cmpxchg_i8_aligned_release_acquire:
230; -O1:    and w8, w0, #0xff
231; -O1:    ldaxrb w0, [x2]
232; -O1:    cmp w0, w8
233; -O1:    stlxrb w9, w1, [x2]
234    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1
235    %r = extractvalue { i8, i1 } %pair, 0
236    ret i8 %r
237}
238
239define dso_local i8 @cmpxchg_i8_aligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
240; -O0-LABEL: cmpxchg_i8_aligned_release_acquire_weak:
241; -O0:    ldaxrb w0, [x2]
242; -O0:    cmp w0, w9, uxtb
243; -O0:    stlxrb w8, w1, [x2]
244;
245; -O1-LABEL: cmpxchg_i8_aligned_release_acquire_weak:
246; -O1:    ldaxrb w8, [x2]
247; -O1:    cmp w8, w0, uxtb
248; -O1:    stlxrb wzr, w1, [x2]
249    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1
250    %r = extractvalue { i8, i1 } %pair, 0
251    ret i8 %r
252}
253
254define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
255; -O0-LABEL: cmpxchg_i8_aligned_release_seq_cst:
256; -O0:    ldaxrb w0, [x2]
257; -O0:    cmp w0, w9, uxtb
258; -O0:    stlxrb w8, w1, [x2]
259;
260; -O1-LABEL: cmpxchg_i8_aligned_release_seq_cst:
261; -O1:    and w8, w0, #0xff
262; -O1:    ldaxrb w0, [x2]
263; -O1:    cmp w0, w8
264; -O1:    stlxrb w9, w1, [x2]
265    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
266    %r = extractvalue { i8, i1 } %pair, 0
267    ret i8 %r
268}
269
270define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
271; -O0-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak:
272; -O0:    ldaxrb w0, [x2]
273; -O0:    cmp w0, w9, uxtb
274; -O0:    stlxrb w8, w1, [x2]
275;
276; -O1-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak:
277; -O1:    ldaxrb w8, [x2]
278; -O1:    cmp w8, w0, uxtb
279; -O1:    stlxrb wzr, w1, [x2]
280    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
281    %r = extractvalue { i8, i1 } %pair, 0
282    ret i8 %r
283}
284
285define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {
286; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic:
287; -O0:    ldaxrb w0, [x2]
288; -O0:    cmp w0, w9, uxtb
289; -O0:    stlxrb w8, w1, [x2]
290;
291; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic:
292; -O1:    and w8, w0, #0xff
293; -O1:    ldaxrb w0, [x2]
294; -O1:    cmp w0, w8
295; -O1:    stlxrb w9, w1, [x2]
296    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
297    %r = extractvalue { i8, i1 } %pair, 0
298    ret i8 %r
299}
300
301define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
302; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak:
303; -O0:    ldaxrb w0, [x2]
304; -O0:    cmp w0, w9, uxtb
305; -O0:    stlxrb w8, w1, [x2]
306;
307; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak:
308; -O1:    ldaxrb w8, [x2]
309; -O1:    cmp w8, w0, uxtb
310; -O1:    stlxrb wzr, w1, [x2]
311    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
312    %r = extractvalue { i8, i1 } %pair, 0
313    ret i8 %r
314}
315
316define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {
317; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_acquire:
318; -O0:    ldaxrb w0, [x2]
319; -O0:    cmp w0, w9, uxtb
320; -O0:    stlxrb w8, w1, [x2]
321;
322; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_acquire:
323; -O1:    and w8, w0, #0xff
324; -O1:    ldaxrb w0, [x2]
325; -O1:    cmp w0, w8
326; -O1:    stlxrb w9, w1, [x2]
327    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
328    %r = extractvalue { i8, i1 } %pair, 0
329    ret i8 %r
330}
331
332define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
333; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak:
334; -O0:    ldaxrb w0, [x2]
335; -O0:    cmp w0, w9, uxtb
336; -O0:    stlxrb w8, w1, [x2]
337;
338; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak:
339; -O1:    ldaxrb w8, [x2]
340; -O1:    cmp w8, w0, uxtb
341; -O1:    stlxrb wzr, w1, [x2]
342    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
343    %r = extractvalue { i8, i1 } %pair, 0
344    ret i8 %r
345}
346
347define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
348; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst:
349; -O0:    ldaxrb w0, [x2]
350; -O0:    cmp w0, w9, uxtb
351; -O0:    stlxrb w8, w1, [x2]
352;
353; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst:
354; -O1:    and w8, w0, #0xff
355; -O1:    ldaxrb w0, [x2]
356; -O1:    cmp w0, w8
357; -O1:    stlxrb w9, w1, [x2]
358    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
359    %r = extractvalue { i8, i1 } %pair, 0
360    ret i8 %r
361}
362
363define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
364; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak:
365; -O0:    ldaxrb w0, [x2]
366; -O0:    cmp w0, w9, uxtb
367; -O0:    stlxrb w8, w1, [x2]
368;
369; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak:
370; -O1:    ldaxrb w8, [x2]
371; -O1:    cmp w8, w0, uxtb
372; -O1:    stlxrb wzr, w1, [x2]
373    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
374    %r = extractvalue { i8, i1 } %pair, 0
375    ret i8 %r
376}
377
378define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {
379; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic:
380; -O0:    ldaxrb w0, [x2]
381; -O0:    cmp w0, w9, uxtb
382; -O0:    stlxrb w8, w1, [x2]
383;
384; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic:
385; -O1:    and w8, w0, #0xff
386; -O1:    ldaxrb w0, [x2]
387; -O1:    cmp w0, w8
388; -O1:    stlxrb w9, w1, [x2]
389    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
390    %r = extractvalue { i8, i1 } %pair, 0
391    ret i8 %r
392}
393
394define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
395; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak:
396; -O0:    ldaxrb w0, [x2]
397; -O0:    cmp w0, w9, uxtb
398; -O0:    stlxrb w8, w1, [x2]
399;
400; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak:
401; -O1:    ldaxrb w8, [x2]
402; -O1:    cmp w8, w0, uxtb
403; -O1:    stlxrb wzr, w1, [x2]
404    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
405    %r = extractvalue { i8, i1 } %pair, 0
406    ret i8 %r
407}
408
409define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {
410; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_acquire:
411; -O0:    ldaxrb w0, [x2]
412; -O0:    cmp w0, w9, uxtb
413; -O0:    stlxrb w8, w1, [x2]
414;
415; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_acquire:
416; -O1:    and w8, w0, #0xff
417; -O1:    ldaxrb w0, [x2]
418; -O1:    cmp w0, w8
419; -O1:    stlxrb w9, w1, [x2]
420    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
421    %r = extractvalue { i8, i1 } %pair, 0
422    ret i8 %r
423}
424
425define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
426; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak:
427; -O0:    ldaxrb w0, [x2]
428; -O0:    cmp w0, w9, uxtb
429; -O0:    stlxrb w8, w1, [x2]
430;
431; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak:
432; -O1:    ldaxrb w8, [x2]
433; -O1:    cmp w8, w0, uxtb
434; -O1:    stlxrb wzr, w1, [x2]
435    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
436    %r = extractvalue { i8, i1 } %pair, 0
437    ret i8 %r
438}
439
440define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
441; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst:
442; -O0:    ldaxrb w0, [x2]
443; -O0:    cmp w0, w9, uxtb
444; -O0:    stlxrb w8, w1, [x2]
445;
446; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst:
447; -O1:    and w8, w0, #0xff
448; -O1:    ldaxrb w0, [x2]
449; -O1:    cmp w0, w8
450; -O1:    stlxrb w9, w1, [x2]
451    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
452    %r = extractvalue { i8, i1 } %pair, 0
453    ret i8 %r
454}
455
456define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
457; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak:
458; -O0:    ldaxrb w0, [x2]
459; -O0:    cmp w0, w9, uxtb
460; -O0:    stlxrb w8, w1, [x2]
461;
462; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak:
463; -O1:    ldaxrb w8, [x2]
464; -O1:    cmp w8, w0, uxtb
465; -O1:    stlxrb wzr, w1, [x2]
466    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
467    %r = extractvalue { i8, i1 } %pair, 0
468    ret i8 %r
469}
470
471define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {
472; -O0-LABEL: cmpxchg_i16_aligned_monotonic_monotonic:
473; -O0:    ldaxrh w0, [x2]
474; -O0:    cmp w0, w9, uxth
475; -O0:    stlxrh w8, w1, [x2]
476;
477; -O1-LABEL: cmpxchg_i16_aligned_monotonic_monotonic:
478; -O1:    and w8, w0, #0xffff
479; -O1:    ldxrh w0, [x2]
480; -O1:    cmp w0, w8
481; -O1:    stxrh w9, w1, [x2]
482    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2
483    %r = extractvalue { i16, i1 } %pair, 0
484    ret i16 %r
485}
486
487define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
488; -O0-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak:
489; -O0:    ldaxrh w0, [x2]
490; -O0:    cmp w0, w9, uxth
491; -O0:    stlxrh w8, w1, [x2]
492;
493; -O1-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak:
494; -O1:    ldxrh w8, [x2]
495; -O1:    cmp w8, w0, uxth
496; -O1:    stxrh wzr, w1, [x2]
497    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2
498    %r = extractvalue { i16, i1 } %pair, 0
499    ret i16 %r
500}
501
502define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {
503; -O0-LABEL: cmpxchg_i16_aligned_monotonic_acquire:
504; -O0:    ldaxrh w0, [x2]
505; -O0:    cmp w0, w9, uxth
506; -O0:    stlxrh w8, w1, [x2]
507;
508; -O1-LABEL: cmpxchg_i16_aligned_monotonic_acquire:
509; -O1:    and w8, w0, #0xffff
510; -O1:    ldaxrh w0, [x2]
511; -O1:    cmp w0, w8
512; -O1:    stxrh w9, w1, [x2]
513    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2
514    %r = extractvalue { i16, i1 } %pair, 0
515    ret i16 %r
516}
517
518define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
519; -O0-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak:
520; -O0:    ldaxrh w0, [x2]
521; -O0:    cmp w0, w9, uxth
522; -O0:    stlxrh w8, w1, [x2]
523;
524; -O1-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak:
525; -O1:    ldaxrh w8, [x2]
526; -O1:    cmp w8, w0, uxth
527; -O1:    stxrh wzr, w1, [x2]
528    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2
529    %r = extractvalue { i16, i1 } %pair, 0
530    ret i16 %r
531}
532
533define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
534; -O0-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst:
535; -O0:    ldaxrh w0, [x2]
536; -O0:    cmp w0, w9, uxth
537; -O0:    stlxrh w8, w1, [x2]
538;
539; -O1-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst:
540; -O1:    and w8, w0, #0xffff
541; -O1:    ldaxrh w0, [x2]
542; -O1:    cmp w0, w8
543; -O1:    stlxrh w9, w1, [x2]
544    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2
545    %r = extractvalue { i16, i1 } %pair, 0
546    ret i16 %r
547}
548
549define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
550; -O0-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak:
551; -O0:    ldaxrh w0, [x2]
552; -O0:    cmp w0, w9, uxth
553; -O0:    stlxrh w8, w1, [x2]
554;
555; -O1-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak:
556; -O1:    ldaxrh w8, [x2]
557; -O1:    cmp w8, w0, uxth
558; -O1:    stlxrh wzr, w1, [x2]
559    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2
560    %r = extractvalue { i16, i1 } %pair, 0
561    ret i16 %r
562}
563
564define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {
565; -O0-LABEL: cmpxchg_i16_aligned_acquire_monotonic:
566; -O0:    ldaxrh w0, [x2]
567; -O0:    cmp w0, w9, uxth
568; -O0:    stlxrh w8, w1, [x2]
569;
570; -O1-LABEL: cmpxchg_i16_aligned_acquire_monotonic:
571; -O1:    and w8, w0, #0xffff
572; -O1:    ldaxrh w0, [x2]
573; -O1:    cmp w0, w8
574; -O1:    stxrh w9, w1, [x2]
575    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2
576    %r = extractvalue { i16, i1 } %pair, 0
577    ret i16 %r
578}
579
580define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
581; -O0-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak:
582; -O0:    ldaxrh w0, [x2]
583; -O0:    cmp w0, w9, uxth
584; -O0:    stlxrh w8, w1, [x2]
585;
586; -O1-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak:
587; -O1:    ldaxrh w8, [x2]
588; -O1:    cmp w8, w0, uxth
589; -O1:    stxrh wzr, w1, [x2]
590    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2
591    %r = extractvalue { i16, i1 } %pair, 0
592    ret i16 %r
593}
594
595define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {
596; -O0-LABEL: cmpxchg_i16_aligned_acquire_acquire:
597; -O0:    ldaxrh w0, [x2]
598; -O0:    cmp w0, w9, uxth
599; -O0:    stlxrh w8, w1, [x2]
600;
601; -O1-LABEL: cmpxchg_i16_aligned_acquire_acquire:
602; -O1:    and w8, w0, #0xffff
603; -O1:    ldaxrh w0, [x2]
604; -O1:    cmp w0, w8
605; -O1:    stxrh w9, w1, [x2]
606    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2
607    %r = extractvalue { i16, i1 } %pair, 0
608    ret i16 %r
609}
610
611define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
612; -O0-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak:
613; -O0:    ldaxrh w0, [x2]
614; -O0:    cmp w0, w9, uxth
615; -O0:    stlxrh w8, w1, [x2]
616;
617; -O1-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak:
618; -O1:    ldaxrh w8, [x2]
619; -O1:    cmp w8, w0, uxth
620; -O1:    stxrh wzr, w1, [x2]
621    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2
622    %r = extractvalue { i16, i1 } %pair, 0
623    ret i16 %r
624}
625
626define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
627; -O0-LABEL: cmpxchg_i16_aligned_acquire_seq_cst:
628; -O0:    ldaxrh w0, [x2]
629; -O0:    cmp w0, w9, uxth
630; -O0:    stlxrh w8, w1, [x2]
631;
632; -O1-LABEL: cmpxchg_i16_aligned_acquire_seq_cst:
633; -O1:    and w8, w0, #0xffff
634; -O1:    ldaxrh w0, [x2]
635; -O1:    cmp w0, w8
636; -O1:    stlxrh w9, w1, [x2]
637    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2
638    %r = extractvalue { i16, i1 } %pair, 0
639    ret i16 %r
640}
641
642define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
643; -O0-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak:
644; -O0:    ldaxrh w0, [x2]
645; -O0:    cmp w0, w9, uxth
646; -O0:    stlxrh w8, w1, [x2]
647;
648; -O1-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak:
649; -O1:    ldaxrh w8, [x2]
650; -O1:    cmp w8, w0, uxth
651; -O1:    stlxrh wzr, w1, [x2]
652    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2
653    %r = extractvalue { i16, i1 } %pair, 0
654    ret i16 %r
655}
656
657define dso_local i16 @cmpxchg_i16_aligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {
658; -O0-LABEL: cmpxchg_i16_aligned_release_monotonic:
659; -O0:    ldaxrh w0, [x2]
660; -O0:    cmp w0, w9, uxth
661; -O0:    stlxrh w8, w1, [x2]
662;
663; -O1-LABEL: cmpxchg_i16_aligned_release_monotonic:
664; -O1:    and w8, w0, #0xffff
665; -O1:    ldxrh w0, [x2]
666; -O1:    cmp w0, w8
667; -O1:    stlxrh w9, w1, [x2]
668    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 2
669    %r = extractvalue { i16, i1 } %pair, 0
670    ret i16 %r
671}
672
673define dso_local i16 @cmpxchg_i16_aligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
674; -O0-LABEL: cmpxchg_i16_aligned_release_monotonic_weak:
675; -O0:    ldaxrh w0, [x2]
676; -O0:    cmp w0, w9, uxth
677; -O0:    stlxrh w8, w1, [x2]
678;
679; -O1-LABEL: cmpxchg_i16_aligned_release_monotonic_weak:
680; -O1:    ldxrh w8, [x2]
681; -O1:    cmp w8, w0, uxth
682; -O1:    stlxrh wzr, w1, [x2]
683    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 2
684    %r = extractvalue { i16, i1 } %pair, 0
685    ret i16 %r
686}
687
688define dso_local i16 @cmpxchg_i16_aligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {
689; -O0-LABEL: cmpxchg_i16_aligned_release_acquire:
690; -O0:    ldaxrh w0, [x2]
691; -O0:    cmp w0, w9, uxth
692; -O0:    stlxrh w8, w1, [x2]
693;
694; -O1-LABEL: cmpxchg_i16_aligned_release_acquire:
695; -O1:    and w8, w0, #0xffff
696; -O1:    ldaxrh w0, [x2]
697; -O1:    cmp w0, w8
698; -O1:    stlxrh w9, w1, [x2]
699    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 2
700    %r = extractvalue { i16, i1 } %pair, 0
701    ret i16 %r
702}
703
704define dso_local i16 @cmpxchg_i16_aligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
705; -O0-LABEL: cmpxchg_i16_aligned_release_acquire_weak:
706; -O0:    ldaxrh w0, [x2]
707; -O0:    cmp w0, w9, uxth
708; -O0:    stlxrh w8, w1, [x2]
709;
710; -O1-LABEL: cmpxchg_i16_aligned_release_acquire_weak:
711; -O1:    ldaxrh w8, [x2]
712; -O1:    cmp w8, w0, uxth
713; -O1:    stlxrh wzr, w1, [x2]
714    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 2
715    %r = extractvalue { i16, i1 } %pair, 0
716    ret i16 %r
717}
718
719define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
720; -O0-LABEL: cmpxchg_i16_aligned_release_seq_cst:
721; -O0:    ldaxrh w0, [x2]
722; -O0:    cmp w0, w9, uxth
723; -O0:    stlxrh w8, w1, [x2]
724;
725; -O1-LABEL: cmpxchg_i16_aligned_release_seq_cst:
726; -O1:    and w8, w0, #0xffff
727; -O1:    ldaxrh w0, [x2]
728; -O1:    cmp w0, w8
729; -O1:    stlxrh w9, w1, [x2]
730    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2
731    %r = extractvalue { i16, i1 } %pair, 0
732    ret i16 %r
733}
734
735define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
736; -O0-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak:
737; -O0:    ldaxrh w0, [x2]
738; -O0:    cmp w0, w9, uxth
739; -O0:    stlxrh w8, w1, [x2]
740;
741; -O1-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak:
742; -O1:    ldaxrh w8, [x2]
743; -O1:    cmp w8, w0, uxth
744; -O1:    stlxrh wzr, w1, [x2]
745    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2
746    %r = extractvalue { i16, i1 } %pair, 0
747    ret i16 %r
748}
749
750define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {
751; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic:
752; -O0:    ldaxrh w0, [x2]
753; -O0:    cmp w0, w9, uxth
754; -O0:    stlxrh w8, w1, [x2]
755;
756; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic:
757; -O1:    and w8, w0, #0xffff
758; -O1:    ldaxrh w0, [x2]
759; -O1:    cmp w0, w8
760; -O1:    stlxrh w9, w1, [x2]
761    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2
762    %r = extractvalue { i16, i1 } %pair, 0
763    ret i16 %r
764}
765
766define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
767; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak:
768; -O0:    ldaxrh w0, [x2]
769; -O0:    cmp w0, w9, uxth
770; -O0:    stlxrh w8, w1, [x2]
771;
772; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak:
773; -O1:    ldaxrh w8, [x2]
774; -O1:    cmp w8, w0, uxth
775; -O1:    stlxrh wzr, w1, [x2]
776    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2
777    %r = extractvalue { i16, i1 } %pair, 0
778    ret i16 %r
779}
780
781define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {
782; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_acquire:
783; -O0:    ldaxrh w0, [x2]
784; -O0:    cmp w0, w9, uxth
785; -O0:    stlxrh w8, w1, [x2]
786;
787; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_acquire:
788; -O1:    and w8, w0, #0xffff
789; -O1:    ldaxrh w0, [x2]
790; -O1:    cmp w0, w8
791; -O1:    stlxrh w9, w1, [x2]
792    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2
793    %r = extractvalue { i16, i1 } %pair, 0
794    ret i16 %r
795}
796
797define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
798; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak:
799; -O0:    ldaxrh w0, [x2]
800; -O0:    cmp w0, w9, uxth
801; -O0:    stlxrh w8, w1, [x2]
802;
803; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak:
804; -O1:    ldaxrh w8, [x2]
805; -O1:    cmp w8, w0, uxth
806; -O1:    stlxrh wzr, w1, [x2]
807    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2
808    %r = extractvalue { i16, i1 } %pair, 0
809    ret i16 %r
810}
811
812define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
813; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst:
814; -O0:    ldaxrh w0, [x2]
815; -O0:    cmp w0, w9, uxth
816; -O0:    stlxrh w8, w1, [x2]
817;
818; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst:
819; -O1:    and w8, w0, #0xffff
820; -O1:    ldaxrh w0, [x2]
821; -O1:    cmp w0, w8
822; -O1:    stlxrh w9, w1, [x2]
823    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2
824    %r = extractvalue { i16, i1 } %pair, 0
825    ret i16 %r
826}
827
828define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
829; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak:
830; -O0:    ldaxrh w0, [x2]
831; -O0:    cmp w0, w9, uxth
832; -O0:    stlxrh w8, w1, [x2]
833;
834; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak:
835; -O1:    ldaxrh w8, [x2]
836; -O1:    cmp w8, w0, uxth
837; -O1:    stlxrh wzr, w1, [x2]
838    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2
839    %r = extractvalue { i16, i1 } %pair, 0
840    ret i16 %r
841}
842
843define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {
844; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic:
845; -O0:    ldaxrh w0, [x2]
846; -O0:    cmp w0, w9, uxth
847; -O0:    stlxrh w8, w1, [x2]
848;
849; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic:
850; -O1:    and w8, w0, #0xffff
851; -O1:    ldaxrh w0, [x2]
852; -O1:    cmp w0, w8
853; -O1:    stlxrh w9, w1, [x2]
854    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2
855    %r = extractvalue { i16, i1 } %pair, 0
856    ret i16 %r
857}
858
859define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
860; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak:
861; -O0:    ldaxrh w0, [x2]
862; -O0:    cmp w0, w9, uxth
863; -O0:    stlxrh w8, w1, [x2]
864;
865; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak:
866; -O1:    ldaxrh w8, [x2]
867; -O1:    cmp w8, w0, uxth
868; -O1:    stlxrh wzr, w1, [x2]
869    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2
870    %r = extractvalue { i16, i1 } %pair, 0
871    ret i16 %r
872}
873
874define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {
875; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_acquire:
876; -O0:    ldaxrh w0, [x2]
877; -O0:    cmp w0, w9, uxth
878; -O0:    stlxrh w8, w1, [x2]
879;
880; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_acquire:
881; -O1:    and w8, w0, #0xffff
882; -O1:    ldaxrh w0, [x2]
883; -O1:    cmp w0, w8
884; -O1:    stlxrh w9, w1, [x2]
885    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2
886    %r = extractvalue { i16, i1 } %pair, 0
887    ret i16 %r
888}
889
890define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
891; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak:
892; -O0:    ldaxrh w0, [x2]
893; -O0:    cmp w0, w9, uxth
894; -O0:    stlxrh w8, w1, [x2]
895;
896; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak:
897; -O1:    ldaxrh w8, [x2]
898; -O1:    cmp w8, w0, uxth
899; -O1:    stlxrh wzr, w1, [x2]
900    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2
901    %r = extractvalue { i16, i1 } %pair, 0
902    ret i16 %r
903}
904
905define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
906; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst:
907; -O0:    ldaxrh w0, [x2]
908; -O0:    cmp w0, w9, uxth
909; -O0:    stlxrh w8, w1, [x2]
910;
911; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst:
912; -O1:    and w8, w0, #0xffff
913; -O1:    ldaxrh w0, [x2]
914; -O1:    cmp w0, w8
915; -O1:    stlxrh w9, w1, [x2]
916    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2
917    %r = extractvalue { i16, i1 } %pair, 0
918    ret i16 %r
919}
920
921define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
922; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak:
923; -O0:    ldaxrh w0, [x2]
924; -O0:    cmp w0, w9, uxth
925; -O0:    stlxrh w8, w1, [x2]
926;
927; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak:
928; -O1:    ldaxrh w8, [x2]
929; -O1:    cmp w8, w0, uxth
930; -O1:    stlxrh wzr, w1, [x2]
931    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2
932    %r = extractvalue { i16, i1 } %pair, 0
933    ret i16 %r
934}
935
936define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {
937; -O0-LABEL: cmpxchg_i32_aligned_monotonic_monotonic:
938; -O0:    ldaxr w0, [x2]
939; -O0:    cmp w0, w9
940; -O0:    stlxr w8, w1, [x2]
941;
942; -O1-LABEL: cmpxchg_i32_aligned_monotonic_monotonic:
943; -O1:    ldxr w0, [x2]
944; -O1:    cmp w0, w8
945; -O1:    stxr w9, w1, [x2]
946    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4
947    %r = extractvalue { i32, i1 } %pair, 0
948    ret i32 %r
949}
950
951define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
952; -O0-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak:
953; -O0:    ldaxr w0, [x2]
954; -O0:    cmp w0, w9
955; -O0:    stlxr w8, w1, [x2]
956;
957; -O1-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak:
958; -O1:    ldxr w8, [x2]
959; -O1:    cmp w8, w0
960; -O1:    stxr wzr, w1, [x2]
961    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4
962    %r = extractvalue { i32, i1 } %pair, 0
963    ret i32 %r
964}
965
966define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {
967; -O0-LABEL: cmpxchg_i32_aligned_monotonic_acquire:
968; -O0:    ldaxr w0, [x2]
969; -O0:    cmp w0, w9
970; -O0:    stlxr w8, w1, [x2]
971;
972; -O1-LABEL: cmpxchg_i32_aligned_monotonic_acquire:
973; -O1:    ldaxr w0, [x2]
974; -O1:    cmp w0, w8
975; -O1:    stxr w9, w1, [x2]
976    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4
977    %r = extractvalue { i32, i1 } %pair, 0
978    ret i32 %r
979}
980
981define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
982; -O0-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak:
983; -O0:    ldaxr w0, [x2]
984; -O0:    cmp w0, w9
985; -O0:    stlxr w8, w1, [x2]
986;
987; -O1-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak:
988; -O1:    ldaxr w8, [x2]
989; -O1:    cmp w8, w0
990; -O1:    stxr wzr, w1, [x2]
991    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4
992    %r = extractvalue { i32, i1 } %pair, 0
993    ret i32 %r
994}
995
996define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
997; -O0-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst:
998; -O0:    ldaxr w0, [x2]
999; -O0:    cmp w0, w9
1000; -O0:    stlxr w8, w1, [x2]
1001;
1002; -O1-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst:
1003; -O1:    ldaxr w0, [x2]
1004; -O1:    cmp w0, w8
1005; -O1:    stlxr w9, w1, [x2]
1006    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4
1007    %r = extractvalue { i32, i1 } %pair, 0
1008    ret i32 %r
1009}
1010
1011define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1012; -O0-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak:
1013; -O0:    ldaxr w0, [x2]
1014; -O0:    cmp w0, w9
1015; -O0:    stlxr w8, w1, [x2]
1016;
1017; -O1-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak:
1018; -O1:    ldaxr w8, [x2]
1019; -O1:    cmp w8, w0
1020; -O1:    stlxr wzr, w1, [x2]
1021    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4
1022    %r = extractvalue { i32, i1 } %pair, 0
1023    ret i32 %r
1024}
1025
1026define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1027; -O0-LABEL: cmpxchg_i32_aligned_acquire_monotonic:
1028; -O0:    ldaxr w0, [x2]
1029; -O0:    cmp w0, w9
1030; -O0:    stlxr w8, w1, [x2]
1031;
1032; -O1-LABEL: cmpxchg_i32_aligned_acquire_monotonic:
1033; -O1:    ldaxr w0, [x2]
1034; -O1:    cmp w0, w8
1035; -O1:    stxr w9, w1, [x2]
1036    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4
1037    %r = extractvalue { i32, i1 } %pair, 0
1038    ret i32 %r
1039}
1040
1041define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1042; -O0-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak:
1043; -O0:    ldaxr w0, [x2]
1044; -O0:    cmp w0, w9
1045; -O0:    stlxr w8, w1, [x2]
1046;
1047; -O1-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak:
1048; -O1:    ldaxr w8, [x2]
1049; -O1:    cmp w8, w0
1050; -O1:    stxr wzr, w1, [x2]
1051    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4
1052    %r = extractvalue { i32, i1 } %pair, 0
1053    ret i32 %r
1054}
1055
1056define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {
1057; -O0-LABEL: cmpxchg_i32_aligned_acquire_acquire:
1058; -O0:    ldaxr w0, [x2]
1059; -O0:    cmp w0, w9
1060; -O0:    stlxr w8, w1, [x2]
1061;
1062; -O1-LABEL: cmpxchg_i32_aligned_acquire_acquire:
1063; -O1:    ldaxr w0, [x2]
1064; -O1:    cmp w0, w8
1065; -O1:    stxr w9, w1, [x2]
1066    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4
1067    %r = extractvalue { i32, i1 } %pair, 0
1068    ret i32 %r
1069}
1070
1071define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1072; -O0-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak:
1073; -O0:    ldaxr w0, [x2]
1074; -O0:    cmp w0, w9
1075; -O0:    stlxr w8, w1, [x2]
1076;
1077; -O1-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak:
1078; -O1:    ldaxr w8, [x2]
1079; -O1:    cmp w8, w0
1080; -O1:    stxr wzr, w1, [x2]
1081    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4
1082    %r = extractvalue { i32, i1 } %pair, 0
1083    ret i32 %r
1084}
1085
1086define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1087; -O0-LABEL: cmpxchg_i32_aligned_acquire_seq_cst:
1088; -O0:    ldaxr w0, [x2]
1089; -O0:    cmp w0, w9
1090; -O0:    stlxr w8, w1, [x2]
1091;
1092; -O1-LABEL: cmpxchg_i32_aligned_acquire_seq_cst:
1093; -O1:    ldaxr w0, [x2]
1094; -O1:    cmp w0, w8
1095; -O1:    stlxr w9, w1, [x2]
1096    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4
1097    %r = extractvalue { i32, i1 } %pair, 0
1098    ret i32 %r
1099}
1100
1101define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1102; -O0-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak:
1103; -O0:    ldaxr w0, [x2]
1104; -O0:    cmp w0, w9
1105; -O0:    stlxr w8, w1, [x2]
1106;
1107; -O1-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak:
1108; -O1:    ldaxr w8, [x2]
1109; -O1:    cmp w8, w0
1110; -O1:    stlxr wzr, w1, [x2]
1111    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4
1112    %r = extractvalue { i32, i1 } %pair, 0
1113    ret i32 %r
1114}
1115
1116define dso_local i32 @cmpxchg_i32_aligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1117; -O0-LABEL: cmpxchg_i32_aligned_release_monotonic:
1118; -O0:    ldaxr w0, [x2]
1119; -O0:    cmp w0, w9
1120; -O0:    stlxr w8, w1, [x2]
1121;
1122; -O1-LABEL: cmpxchg_i32_aligned_release_monotonic:
1123; -O1:    ldxr w0, [x2]
1124; -O1:    cmp w0, w8
1125; -O1:    stlxr w9, w1, [x2]
1126    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 4
1127    %r = extractvalue { i32, i1 } %pair, 0
1128    ret i32 %r
1129}
1130
1131define dso_local i32 @cmpxchg_i32_aligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1132; -O0-LABEL: cmpxchg_i32_aligned_release_monotonic_weak:
1133; -O0:    ldaxr w0, [x2]
1134; -O0:    cmp w0, w9
1135; -O0:    stlxr w8, w1, [x2]
1136;
1137; -O1-LABEL: cmpxchg_i32_aligned_release_monotonic_weak:
1138; -O1:    ldxr w8, [x2]
1139; -O1:    cmp w8, w0
1140; -O1:    stlxr wzr, w1, [x2]
1141    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 4
1142    %r = extractvalue { i32, i1 } %pair, 0
1143    ret i32 %r
1144}
1145
1146define dso_local i32 @cmpxchg_i32_aligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {
1147; -O0-LABEL: cmpxchg_i32_aligned_release_acquire:
1148; -O0:    ldaxr w0, [x2]
1149; -O0:    cmp w0, w9
1150; -O0:    stlxr w8, w1, [x2]
1151;
1152; -O1-LABEL: cmpxchg_i32_aligned_release_acquire:
1153; -O1:    ldaxr w0, [x2]
1154; -O1:    cmp w0, w8
1155; -O1:    stlxr w9, w1, [x2]
1156    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 4
1157    %r = extractvalue { i32, i1 } %pair, 0
1158    ret i32 %r
1159}
1160
1161define dso_local i32 @cmpxchg_i32_aligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1162; -O0-LABEL: cmpxchg_i32_aligned_release_acquire_weak:
1163; -O0:    ldaxr w0, [x2]
1164; -O0:    cmp w0, w9
1165; -O0:    stlxr w8, w1, [x2]
1166;
1167; -O1-LABEL: cmpxchg_i32_aligned_release_acquire_weak:
1168; -O1:    ldaxr w8, [x2]
1169; -O1:    cmp w8, w0
1170; -O1:    stlxr wzr, w1, [x2]
1171    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 4
1172    %r = extractvalue { i32, i1 } %pair, 0
1173    ret i32 %r
1174}
1175
1176define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1177; -O0-LABEL: cmpxchg_i32_aligned_release_seq_cst:
1178; -O0:    ldaxr w0, [x2]
1179; -O0:    cmp w0, w9
1180; -O0:    stlxr w8, w1, [x2]
1181;
1182; -O1-LABEL: cmpxchg_i32_aligned_release_seq_cst:
1183; -O1:    ldaxr w0, [x2]
1184; -O1:    cmp w0, w8
1185; -O1:    stlxr w9, w1, [x2]
1186    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4
1187    %r = extractvalue { i32, i1 } %pair, 0
1188    ret i32 %r
1189}
1190
1191define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1192; -O0-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak:
1193; -O0:    ldaxr w0, [x2]
1194; -O0:    cmp w0, w9
1195; -O0:    stlxr w8, w1, [x2]
1196;
1197; -O1-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak:
1198; -O1:    ldaxr w8, [x2]
1199; -O1:    cmp w8, w0
1200; -O1:    stlxr wzr, w1, [x2]
1201    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4
1202    %r = extractvalue { i32, i1 } %pair, 0
1203    ret i32 %r
1204}
1205
1206define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1207; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic:
1208; -O0:    ldaxr w0, [x2]
1209; -O0:    cmp w0, w9
1210; -O0:    stlxr w8, w1, [x2]
1211;
1212; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic:
1213; -O1:    ldaxr w0, [x2]
1214; -O1:    cmp w0, w8
1215; -O1:    stlxr w9, w1, [x2]
1216    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4
1217    %r = extractvalue { i32, i1 } %pair, 0
1218    ret i32 %r
1219}
1220
1221define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1222; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak:
1223; -O0:    ldaxr w0, [x2]
1224; -O0:    cmp w0, w9
1225; -O0:    stlxr w8, w1, [x2]
1226;
1227; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak:
1228; -O1:    ldaxr w8, [x2]
1229; -O1:    cmp w8, w0
1230; -O1:    stlxr wzr, w1, [x2]
1231    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4
1232    %r = extractvalue { i32, i1 } %pair, 0
1233    ret i32 %r
1234}
1235
1236define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {
1237; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_acquire:
1238; -O0:    ldaxr w0, [x2]
1239; -O0:    cmp w0, w9
1240; -O0:    stlxr w8, w1, [x2]
1241;
1242; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_acquire:
1243; -O1:    ldaxr w0, [x2]
1244; -O1:    cmp w0, w8
1245; -O1:    stlxr w9, w1, [x2]
1246    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4
1247    %r = extractvalue { i32, i1 } %pair, 0
1248    ret i32 %r
1249}
1250
1251define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1252; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak:
1253; -O0:    ldaxr w0, [x2]
1254; -O0:    cmp w0, w9
1255; -O0:    stlxr w8, w1, [x2]
1256;
1257; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak:
1258; -O1:    ldaxr w8, [x2]
1259; -O1:    cmp w8, w0
1260; -O1:    stlxr wzr, w1, [x2]
1261    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4
1262    %r = extractvalue { i32, i1 } %pair, 0
1263    ret i32 %r
1264}
1265
1266define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1267; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst:
1268; -O0:    ldaxr w0, [x2]
1269; -O0:    cmp w0, w9
1270; -O0:    stlxr w8, w1, [x2]
1271;
1272; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst:
1273; -O1:    ldaxr w0, [x2]
1274; -O1:    cmp w0, w8
1275; -O1:    stlxr w9, w1, [x2]
1276    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4
1277    %r = extractvalue { i32, i1 } %pair, 0
1278    ret i32 %r
1279}
1280
1281define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1282; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak:
1283; -O0:    ldaxr w0, [x2]
1284; -O0:    cmp w0, w9
1285; -O0:    stlxr w8, w1, [x2]
1286;
1287; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak:
1288; -O1:    ldaxr w8, [x2]
1289; -O1:    cmp w8, w0
1290; -O1:    stlxr wzr, w1, [x2]
1291    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4
1292    %r = extractvalue { i32, i1 } %pair, 0
1293    ret i32 %r
1294}
1295
1296define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1297; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic:
1298; -O0:    ldaxr w0, [x2]
1299; -O0:    cmp w0, w9
1300; -O0:    stlxr w8, w1, [x2]
1301;
1302; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic:
1303; -O1:    ldaxr w0, [x2]
1304; -O1:    cmp w0, w8
1305; -O1:    stlxr w9, w1, [x2]
1306    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4
1307    %r = extractvalue { i32, i1 } %pair, 0
1308    ret i32 %r
1309}
1310
1311define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1312; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak:
1313; -O0:    ldaxr w0, [x2]
1314; -O0:    cmp w0, w9
1315; -O0:    stlxr w8, w1, [x2]
1316;
1317; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak:
1318; -O1:    ldaxr w8, [x2]
1319; -O1:    cmp w8, w0
1320; -O1:    stlxr wzr, w1, [x2]
1321    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4
1322    %r = extractvalue { i32, i1 } %pair, 0
1323    ret i32 %r
1324}
1325
1326define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {
1327; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_acquire:
1328; -O0:    ldaxr w0, [x2]
1329; -O0:    cmp w0, w9
1330; -O0:    stlxr w8, w1, [x2]
1331;
1332; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_acquire:
1333; -O1:    ldaxr w0, [x2]
1334; -O1:    cmp w0, w8
1335; -O1:    stlxr w9, w1, [x2]
1336    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4
1337    %r = extractvalue { i32, i1 } %pair, 0
1338    ret i32 %r
1339}
1340
1341define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1342; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak:
1343; -O0:    ldaxr w0, [x2]
1344; -O0:    cmp w0, w9
1345; -O0:    stlxr w8, w1, [x2]
1346;
1347; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak:
1348; -O1:    ldaxr w8, [x2]
1349; -O1:    cmp w8, w0
1350; -O1:    stlxr wzr, w1, [x2]
1351    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4
1352    %r = extractvalue { i32, i1 } %pair, 0
1353    ret i32 %r
1354}
1355
1356define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1357; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst:
1358; -O0:    ldaxr w0, [x2]
1359; -O0:    cmp w0, w9
1360; -O0:    stlxr w8, w1, [x2]
1361;
1362; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst:
1363; -O1:    ldaxr w0, [x2]
1364; -O1:    cmp w0, w8
1365; -O1:    stlxr w9, w1, [x2]
1366    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4
1367    %r = extractvalue { i32, i1 } %pair, 0
1368    ret i32 %r
1369}
1370
1371define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1372; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak:
1373; -O0:    ldaxr w0, [x2]
1374; -O0:    cmp w0, w9
1375; -O0:    stlxr w8, w1, [x2]
1376;
1377; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak:
1378; -O1:    ldaxr w8, [x2]
1379; -O1:    cmp w8, w0
1380; -O1:    stlxr wzr, w1, [x2]
1381    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4
1382    %r = extractvalue { i32, i1 } %pair, 0
1383    ret i32 %r
1384}
1385
1386define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {
1387; -O0-LABEL: cmpxchg_i64_aligned_monotonic_monotonic:
1388; -O0:    ldaxr x0, [x2]
1389; -O0:    cmp x0, x9
1390; -O0:    stlxr w8, x1, [x2]
1391;
1392; -O1-LABEL: cmpxchg_i64_aligned_monotonic_monotonic:
1393; -O1:    ldxr x0, [x2]
1394; -O1:    cmp x0, x8
1395; -O1:    stxr w9, x1, [x2]
1396    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8
1397    %r = extractvalue { i64, i1 } %pair, 0
1398    ret i64 %r
1399}
1400
1401define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
1402; -O0-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak:
1403; -O0:    ldaxr x0, [x2]
1404; -O0:    cmp x0, x9
1405; -O0:    stlxr w8, x1, [x2]
1406;
1407; -O1-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak:
1408; -O1:    ldxr x8, [x2]
1409; -O1:    cmp x8, x0
1410; -O1:    stxr wzr, x1, [x2]
1411    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8
1412    %r = extractvalue { i64, i1 } %pair, 0
1413    ret i64 %r
1414}
1415
1416define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {
1417; -O0-LABEL: cmpxchg_i64_aligned_monotonic_acquire:
1418; -O0:    ldaxr x0, [x2]
1419; -O0:    cmp x0, x9
1420; -O0:    stlxr w8, x1, [x2]
1421;
1422; -O1-LABEL: cmpxchg_i64_aligned_monotonic_acquire:
1423; -O1:    ldaxr x0, [x2]
1424; -O1:    cmp x0, x8
1425; -O1:    stxr w9, x1, [x2]
1426    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8
1427    %r = extractvalue { i64, i1 } %pair, 0
1428    ret i64 %r
1429}
1430
1431define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
1432; -O0-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak:
1433; -O0:    ldaxr x0, [x2]
1434; -O0:    cmp x0, x9
1435; -O0:    stlxr w8, x1, [x2]
1436;
1437; -O1-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak:
1438; -O1:    ldaxr x8, [x2]
1439; -O1:    cmp x8, x0
1440; -O1:    stxr wzr, x1, [x2]
1441    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8
1442    %r = extractvalue { i64, i1 } %pair, 0
1443    ret i64 %r
1444}
1445
1446define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
1447; -O0-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst:
1448; -O0:    ldaxr x0, [x2]
1449; -O0:    cmp x0, x9
1450; -O0:    stlxr w8, x1, [x2]
1451;
1452; -O1-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst:
1453; -O1:    ldaxr x0, [x2]
1454; -O1:    cmp x0, x8
1455; -O1:    stlxr w9, x1, [x2]
1456    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8
1457    %r = extractvalue { i64, i1 } %pair, 0
1458    ret i64 %r
1459}
1460
1461define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
1462; -O0-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak:
1463; -O0:    ldaxr x0, [x2]
1464; -O0:    cmp x0, x9
1465; -O0:    stlxr w8, x1, [x2]
1466;
1467; -O1-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak:
1468; -O1:    ldaxr x8, [x2]
1469; -O1:    cmp x8, x0
1470; -O1:    stlxr wzr, x1, [x2]
1471    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8
1472    %r = extractvalue { i64, i1 } %pair, 0
1473    ret i64 %r
1474}
1475
1476define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {
1477; -O0-LABEL: cmpxchg_i64_aligned_acquire_monotonic:
1478; -O0:    ldaxr x0, [x2]
1479; -O0:    cmp x0, x9
1480; -O0:    stlxr w8, x1, [x2]
1481;
1482; -O1-LABEL: cmpxchg_i64_aligned_acquire_monotonic:
1483; -O1:    ldaxr x0, [x2]
1484; -O1:    cmp x0, x8
1485; -O1:    stxr w9, x1, [x2]
1486    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8
1487    %r = extractvalue { i64, i1 } %pair, 0
1488    ret i64 %r
1489}
1490
1491define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
1492; -O0-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak:
1493; -O0:    ldaxr x0, [x2]
1494; -O0:    cmp x0, x9
1495; -O0:    stlxr w8, x1, [x2]
1496;
1497; -O1-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak:
1498; -O1:    ldaxr x8, [x2]
1499; -O1:    cmp x8, x0
1500; -O1:    stxr wzr, x1, [x2]
1501    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8
1502    %r = extractvalue { i64, i1 } %pair, 0
1503    ret i64 %r
1504}
1505
1506define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {
1507; -O0-LABEL: cmpxchg_i64_aligned_acquire_acquire:
1508; -O0:    ldaxr x0, [x2]
1509; -O0:    cmp x0, x9
1510; -O0:    stlxr w8, x1, [x2]
1511;
1512; -O1-LABEL: cmpxchg_i64_aligned_acquire_acquire:
1513; -O1:    ldaxr x0, [x2]
1514; -O1:    cmp x0, x8
1515; -O1:    stxr w9, x1, [x2]
1516    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8
1517    %r = extractvalue { i64, i1 } %pair, 0
1518    ret i64 %r
1519}
1520
1521define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
1522; -O0-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak:
1523; -O0:    ldaxr x0, [x2]
1524; -O0:    cmp x0, x9
1525; -O0:    stlxr w8, x1, [x2]
1526;
1527; -O1-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak:
1528; -O1:    ldaxr x8, [x2]
1529; -O1:    cmp x8, x0
1530; -O1:    stxr wzr, x1, [x2]
1531    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8
1532    %r = extractvalue { i64, i1 } %pair, 0
1533    ret i64 %r
1534}
1535
1536define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
1537; -O0-LABEL: cmpxchg_i64_aligned_acquire_seq_cst:
1538; -O0:    ldaxr x0, [x2]
1539; -O0:    cmp x0, x9
1540; -O0:    stlxr w8, x1, [x2]
1541;
1542; -O1-LABEL: cmpxchg_i64_aligned_acquire_seq_cst:
1543; -O1:    ldaxr x0, [x2]
1544; -O1:    cmp x0, x8
1545; -O1:    stlxr w9, x1, [x2]
1546    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8
1547    %r = extractvalue { i64, i1 } %pair, 0
1548    ret i64 %r
1549}
1550
1551define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
1552; -O0-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak:
1553; -O0:    ldaxr x0, [x2]
1554; -O0:    cmp x0, x9
1555; -O0:    stlxr w8, x1, [x2]
1556;
1557; -O1-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak:
1558; -O1:    ldaxr x8, [x2]
1559; -O1:    cmp x8, x0
1560; -O1:    stlxr wzr, x1, [x2]
1561    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8
1562    %r = extractvalue { i64, i1 } %pair, 0
1563    ret i64 %r
1564}
1565
1566define dso_local i64 @cmpxchg_i64_aligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {
1567; -O0-LABEL: cmpxchg_i64_aligned_release_monotonic:
1568; -O0:    ldaxr x0, [x2]
1569; -O0:    cmp x0, x9
1570; -O0:    stlxr w8, x1, [x2]
1571;
1572; -O1-LABEL: cmpxchg_i64_aligned_release_monotonic:
1573; -O1:    ldxr x0, [x2]
1574; -O1:    cmp x0, x8
1575; -O1:    stlxr w9, x1, [x2]
1576    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 8
1577    %r = extractvalue { i64, i1 } %pair, 0
1578    ret i64 %r
1579}
1580
1581define dso_local i64 @cmpxchg_i64_aligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
1582; -O0-LABEL: cmpxchg_i64_aligned_release_monotonic_weak:
1583; -O0:    ldaxr x0, [x2]
1584; -O0:    cmp x0, x9
1585; -O0:    stlxr w8, x1, [x2]
1586;
1587; -O1-LABEL: cmpxchg_i64_aligned_release_monotonic_weak:
1588; -O1:    ldxr x8, [x2]
1589; -O1:    cmp x8, x0
1590; -O1:    stlxr wzr, x1, [x2]
1591    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 8
1592    %r = extractvalue { i64, i1 } %pair, 0
1593    ret i64 %r
1594}
1595
1596define dso_local i64 @cmpxchg_i64_aligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {
1597; -O0-LABEL: cmpxchg_i64_aligned_release_acquire:
1598; -O0:    ldaxr x0, [x2]
1599; -O0:    cmp x0, x9
1600; -O0:    stlxr w8, x1, [x2]
1601;
1602; -O1-LABEL: cmpxchg_i64_aligned_release_acquire:
1603; -O1:    ldaxr x0, [x2]
1604; -O1:    cmp x0, x8
1605; -O1:    stlxr w9, x1, [x2]
1606    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 8
1607    %r = extractvalue { i64, i1 } %pair, 0
1608    ret i64 %r
1609}
1610
1611define dso_local i64 @cmpxchg_i64_aligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
1612; -O0-LABEL: cmpxchg_i64_aligned_release_acquire_weak:
1613; -O0:    ldaxr x0, [x2]
1614; -O0:    cmp x0, x9
1615; -O0:    stlxr w8, x1, [x2]
1616;
1617; -O1-LABEL: cmpxchg_i64_aligned_release_acquire_weak:
1618; -O1:    ldaxr x8, [x2]
1619; -O1:    cmp x8, x0
1620; -O1:    stlxr wzr, x1, [x2]
1621    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 8
1622    %r = extractvalue { i64, i1 } %pair, 0
1623    ret i64 %r
1624}
1625
1626define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
1627; -O0-LABEL: cmpxchg_i64_aligned_release_seq_cst:
1628; -O0:    ldaxr x0, [x2]
1629; -O0:    cmp x0, x9
1630; -O0:    stlxr w8, x1, [x2]
1631;
1632; -O1-LABEL: cmpxchg_i64_aligned_release_seq_cst:
1633; -O1:    ldaxr x0, [x2]
1634; -O1:    cmp x0, x8
1635; -O1:    stlxr w9, x1, [x2]
1636    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8
1637    %r = extractvalue { i64, i1 } %pair, 0
1638    ret i64 %r
1639}
1640
1641define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
1642; -O0-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak:
1643; -O0:    ldaxr x0, [x2]
1644; -O0:    cmp x0, x9
1645; -O0:    stlxr w8, x1, [x2]
1646;
1647; -O1-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak:
1648; -O1:    ldaxr x8, [x2]
1649; -O1:    cmp x8, x0
1650; -O1:    stlxr wzr, x1, [x2]
1651    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8
1652    %r = extractvalue { i64, i1 } %pair, 0
1653    ret i64 %r
1654}
1655
1656define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {
1657; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic:
1658; -O0:    ldaxr x0, [x2]
1659; -O0:    cmp x0, x9
1660; -O0:    stlxr w8, x1, [x2]
1661;
1662; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic:
1663; -O1:    ldaxr x0, [x2]
1664; -O1:    cmp x0, x8
1665; -O1:    stlxr w9, x1, [x2]
1666    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8
1667    %r = extractvalue { i64, i1 } %pair, 0
1668    ret i64 %r
1669}
1670
1671define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
1672; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak:
1673; -O0:    ldaxr x0, [x2]
1674; -O0:    cmp x0, x9
1675; -O0:    stlxr w8, x1, [x2]
1676;
1677; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak:
1678; -O1:    ldaxr x8, [x2]
1679; -O1:    cmp x8, x0
1680; -O1:    stlxr wzr, x1, [x2]
1681    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8
1682    %r = extractvalue { i64, i1 } %pair, 0
1683    ret i64 %r
1684}
1685
1686define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {
1687; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_acquire:
1688; -O0:    ldaxr x0, [x2]
1689; -O0:    cmp x0, x9
1690; -O0:    stlxr w8, x1, [x2]
1691;
1692; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_acquire:
1693; -O1:    ldaxr x0, [x2]
1694; -O1:    cmp x0, x8
1695; -O1:    stlxr w9, x1, [x2]
1696    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8
1697    %r = extractvalue { i64, i1 } %pair, 0
1698    ret i64 %r
1699}
1700
1701define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
1702; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak:
1703; -O0:    ldaxr x0, [x2]
1704; -O0:    cmp x0, x9
1705; -O0:    stlxr w8, x1, [x2]
1706;
1707; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak:
1708; -O1:    ldaxr x8, [x2]
1709; -O1:    cmp x8, x0
1710; -O1:    stlxr wzr, x1, [x2]
1711    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8
1712    %r = extractvalue { i64, i1 } %pair, 0
1713    ret i64 %r
1714}
1715
1716define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
1717; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst:
1718; -O0:    ldaxr x0, [x2]
1719; -O0:    cmp x0, x9
1720; -O0:    stlxr w8, x1, [x2]
1721;
1722; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst:
1723; -O1:    ldaxr x0, [x2]
1724; -O1:    cmp x0, x8
1725; -O1:    stlxr w9, x1, [x2]
1726    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8
1727    %r = extractvalue { i64, i1 } %pair, 0
1728    ret i64 %r
1729}
1730
1731define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
1732; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak:
1733; -O0:    ldaxr x0, [x2]
1734; -O0:    cmp x0, x9
1735; -O0:    stlxr w8, x1, [x2]
1736;
1737; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak:
1738; -O1:    ldaxr x8, [x2]
1739; -O1:    cmp x8, x0
1740; -O1:    stlxr wzr, x1, [x2]
1741    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8
1742    %r = extractvalue { i64, i1 } %pair, 0
1743    ret i64 %r
1744}
1745
1746define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {
1747; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic:
1748; -O0:    ldaxr x0, [x2]
1749; -O0:    cmp x0, x9
1750; -O0:    stlxr w8, x1, [x2]
1751;
1752; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic:
1753; -O1:    ldaxr x0, [x2]
1754; -O1:    cmp x0, x8
1755; -O1:    stlxr w9, x1, [x2]
1756    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8
1757    %r = extractvalue { i64, i1 } %pair, 0
1758    ret i64 %r
1759}
1760
1761define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
1762; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak:
1763; -O0:    ldaxr x0, [x2]
1764; -O0:    cmp x0, x9
1765; -O0:    stlxr w8, x1, [x2]
1766;
1767; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak:
1768; -O1:    ldaxr x8, [x2]
1769; -O1:    cmp x8, x0
1770; -O1:    stlxr wzr, x1, [x2]
1771    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8
1772    %r = extractvalue { i64, i1 } %pair, 0
1773    ret i64 %r
1774}
1775
1776define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {
1777; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_acquire:
1778; -O0:    ldaxr x0, [x2]
1779; -O0:    cmp x0, x9
1780; -O0:    stlxr w8, x1, [x2]
1781;
1782; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_acquire:
1783; -O1:    ldaxr x0, [x2]
1784; -O1:    cmp x0, x8
1785; -O1:    stlxr w9, x1, [x2]
1786    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8
1787    %r = extractvalue { i64, i1 } %pair, 0
1788    ret i64 %r
1789}
1790
1791define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
1792; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak:
1793; -O0:    ldaxr x0, [x2]
1794; -O0:    cmp x0, x9
1795; -O0:    stlxr w8, x1, [x2]
1796;
1797; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak:
1798; -O1:    ldaxr x8, [x2]
1799; -O1:    cmp x8, x0
1800; -O1:    stlxr wzr, x1, [x2]
1801    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8
1802    %r = extractvalue { i64, i1 } %pair, 0
1803    ret i64 %r
1804}
1805
1806define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
1807; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst:
1808; -O0:    ldaxr x0, [x2]
1809; -O0:    cmp x0, x9
1810; -O0:    stlxr w8, x1, [x2]
1811;
1812; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst:
1813; -O1:    ldaxr x0, [x2]
1814; -O1:    cmp x0, x8
1815; -O1:    stlxr w9, x1, [x2]
1816    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8
1817    %r = extractvalue { i64, i1 } %pair, 0
1818    ret i64 %r
1819}
1820
1821define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
1822; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak:
1823; -O0:    ldaxr x0, [x2]
1824; -O0:    cmp x0, x9
1825; -O0:    stlxr w8, x1, [x2]
1826;
1827; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak:
1828; -O1:    ldaxr x8, [x2]
1829; -O1:    cmp x8, x0
1830; -O1:    stlxr wzr, x1, [x2]
1831    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8
1832    %r = extractvalue { i64, i1 } %pair, 0
1833    ret i64 %r
1834}
1835
1836define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1837; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic:
1838; -O0:    ldxp x0, x1, [x4]
1839; -O0:    cmp x0, x9
1840; -O0:    cmp x1, x10
1841; -O0:    stxp w8, x2, x3, [x4]
1842; -O0:    stxp w8, x0, x1, [x4]
1843;
1844; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic:
1845; -O1:    ldxp x8, x9, [x4]
1846; -O1:    cmp x8, x0
1847; -O1:    cmp x9, x1
1848; -O1:    stxp w10, x8, x9, [x4]
1849; -O1:    stxp w10, x2, x3, [x4]
1850    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16
1851    %r = extractvalue { i128, i1 } %pair, 0
1852    ret i128 %r
1853}
1854
1855define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1856; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak:
1857; -O0:    ldxp x0, x1, [x4]
1858; -O0:    cmp x0, x9
1859; -O0:    cmp x1, x10
1860; -O0:    stxp w8, x2, x3, [x4]
1861; -O0:    stxp w8, x0, x1, [x4]
1862;
1863; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak:
1864; -O1:    ldxp x8, x9, [x4]
1865; -O1:    cmp x8, x0
1866; -O1:    cmp x9, x1
1867; -O1:    stxp w10, x8, x9, [x4]
1868; -O1:    stxp w10, x2, x3, [x4]
1869    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16
1870    %r = extractvalue { i128, i1 } %pair, 0
1871    ret i128 %r
1872}
1873
1874define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {
1875; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire:
1876; -O0:    ldaxp x0, x1, [x4]
1877; -O0:    cmp x0, x9
1878; -O0:    cmp x1, x10
1879; -O0:    stxp w8, x2, x3, [x4]
1880; -O0:    stxp w8, x0, x1, [x4]
1881;
1882; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire:
1883; -O1:    ldaxp x8, x9, [x4]
1884; -O1:    cmp x8, x0
1885; -O1:    cmp x9, x1
1886; -O1:    stxp w10, x8, x9, [x4]
1887; -O1:    stxp w10, x2, x3, [x4]
1888    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16
1889    %r = extractvalue { i128, i1 } %pair, 0
1890    ret i128 %r
1891}
1892
1893define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1894; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak:
1895; -O0:    ldaxp x0, x1, [x4]
1896; -O0:    cmp x0, x9
1897; -O0:    cmp x1, x10
1898; -O0:    stxp w8, x2, x3, [x4]
1899; -O0:    stxp w8, x0, x1, [x4]
1900;
1901; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak:
1902; -O1:    ldaxp x8, x9, [x4]
1903; -O1:    cmp x8, x0
1904; -O1:    cmp x9, x1
1905; -O1:    stxp w10, x8, x9, [x4]
1906; -O1:    stxp w10, x2, x3, [x4]
1907    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16
1908    %r = extractvalue { i128, i1 } %pair, 0
1909    ret i128 %r
1910}
1911
1912define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1913; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst:
1914; -O0:    ldaxp x0, x1, [x4]
1915; -O0:    cmp x0, x9
1916; -O0:    cmp x1, x10
1917; -O0:    stlxp w8, x2, x3, [x4]
1918; -O0:    stlxp w8, x0, x1, [x4]
1919;
1920; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst:
1921; -O1:    ldaxp x8, x9, [x4]
1922; -O1:    cmp x8, x0
1923; -O1:    cmp x9, x1
1924; -O1:    stlxp w10, x8, x9, [x4]
1925; -O1:    stlxp w10, x2, x3, [x4]
1926    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16
1927    %r = extractvalue { i128, i1 } %pair, 0
1928    ret i128 %r
1929}
1930
1931define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1932; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak:
1933; -O0:    ldaxp x0, x1, [x4]
1934; -O0:    cmp x0, x9
1935; -O0:    cmp x1, x10
1936; -O0:    stlxp w8, x2, x3, [x4]
1937; -O0:    stlxp w8, x0, x1, [x4]
1938;
1939; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak:
1940; -O1:    ldaxp x8, x9, [x4]
1941; -O1:    cmp x8, x0
1942; -O1:    cmp x9, x1
1943; -O1:    stlxp w10, x8, x9, [x4]
1944; -O1:    stlxp w10, x2, x3, [x4]
1945    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16
1946    %r = extractvalue { i128, i1 } %pair, 0
1947    ret i128 %r
1948}
1949
1950define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1951; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic:
1952; -O0:    ldaxp x0, x1, [x4]
1953; -O0:    cmp x0, x9
1954; -O0:    cmp x1, x10
1955; -O0:    stxp w8, x2, x3, [x4]
1956; -O0:    stxp w8, x0, x1, [x4]
1957;
1958; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic:
1959; -O1:    ldaxp x8, x9, [x4]
1960; -O1:    cmp x8, x0
1961; -O1:    cmp x9, x1
1962; -O1:    stxp w10, x8, x9, [x4]
1963; -O1:    stxp w10, x2, x3, [x4]
1964    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16
1965    %r = extractvalue { i128, i1 } %pair, 0
1966    ret i128 %r
1967}
1968
1969define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1970; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak:
1971; -O0:    ldaxp x0, x1, [x4]
1972; -O0:    cmp x0, x9
1973; -O0:    cmp x1, x10
1974; -O0:    stxp w8, x2, x3, [x4]
1975; -O0:    stxp w8, x0, x1, [x4]
1976;
1977; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak:
1978; -O1:    ldaxp x8, x9, [x4]
1979; -O1:    cmp x8, x0
1980; -O1:    cmp x9, x1
1981; -O1:    stxp w10, x8, x9, [x4]
1982; -O1:    stxp w10, x2, x3, [x4]
1983    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16
1984    %r = extractvalue { i128, i1 } %pair, 0
1985    ret i128 %r
1986}
1987
1988define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {
1989; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire:
1990; -O0:    ldaxp x0, x1, [x4]
1991; -O0:    cmp x0, x9
1992; -O0:    cmp x1, x10
1993; -O0:    stxp w8, x2, x3, [x4]
1994; -O0:    stxp w8, x0, x1, [x4]
1995;
1996; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire:
1997; -O1:    ldaxp x8, x9, [x4]
1998; -O1:    cmp x8, x0
1999; -O1:    cmp x9, x1
2000; -O1:    stxp w10, x8, x9, [x4]
2001; -O1:    stxp w10, x2, x3, [x4]
2002    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16
2003    %r = extractvalue { i128, i1 } %pair, 0
2004    ret i128 %r
2005}
2006
2007define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2008; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak:
2009; -O0:    ldaxp x0, x1, [x4]
2010; -O0:    cmp x0, x9
2011; -O0:    cmp x1, x10
2012; -O0:    stxp w8, x2, x3, [x4]
2013; -O0:    stxp w8, x0, x1, [x4]
2014;
2015; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak:
2016; -O1:    ldaxp x8, x9, [x4]
2017; -O1:    cmp x8, x0
2018; -O1:    cmp x9, x1
2019; -O1:    stxp w10, x8, x9, [x4]
2020; -O1:    stxp w10, x2, x3, [x4]
2021    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16
2022    %r = extractvalue { i128, i1 } %pair, 0
2023    ret i128 %r
2024}
2025
2026define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2027; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst:
2028; -O0:    ldaxp x0, x1, [x4]
2029; -O0:    cmp x0, x9
2030; -O0:    cmp x1, x10
2031; -O0:    stlxp w8, x2, x3, [x4]
2032; -O0:    stlxp w8, x0, x1, [x4]
2033;
2034; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst:
2035; -O1:    ldaxp x8, x9, [x4]
2036; -O1:    cmp x8, x0
2037; -O1:    cmp x9, x1
2038; -O1:    stlxp w10, x8, x9, [x4]
2039; -O1:    stlxp w10, x2, x3, [x4]
2040    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16
2041    %r = extractvalue { i128, i1 } %pair, 0
2042    ret i128 %r
2043}
2044
2045define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2046; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak:
2047; -O0:    ldaxp x0, x1, [x4]
2048; -O0:    cmp x0, x9
2049; -O0:    cmp x1, x10
2050; -O0:    stlxp w8, x2, x3, [x4]
2051; -O0:    stlxp w8, x0, x1, [x4]
2052;
2053; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak:
2054; -O1:    ldaxp x8, x9, [x4]
2055; -O1:    cmp x8, x0
2056; -O1:    cmp x9, x1
2057; -O1:    stlxp w10, x8, x9, [x4]
2058; -O1:    stlxp w10, x2, x3, [x4]
2059    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16
2060    %r = extractvalue { i128, i1 } %pair, 0
2061    ret i128 %r
2062}
2063
2064define dso_local i128 @cmpxchg_i128_aligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2065; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic:
2066; -O0:    ldxp x0, x1, [x4]
2067; -O0:    cmp x0, x9
2068; -O0:    cmp x1, x10
2069; -O0:    stlxp w8, x2, x3, [x4]
2070; -O0:    stlxp w8, x0, x1, [x4]
2071;
2072; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic:
2073; -O1:    ldxp x8, x9, [x4]
2074; -O1:    cmp x8, x0
2075; -O1:    cmp x9, x1
2076; -O1:    stlxp w10, x8, x9, [x4]
2077; -O1:    stlxp w10, x2, x3, [x4]
2078    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 16
2079    %r = extractvalue { i128, i1 } %pair, 0
2080    ret i128 %r
2081}
2082
2083define dso_local i128 @cmpxchg_i128_aligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2084; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic_weak:
2085; -O0:    ldxp x0, x1, [x4]
2086; -O0:    cmp x0, x9
2087; -O0:    cmp x1, x10
2088; -O0:    stlxp w8, x2, x3, [x4]
2089; -O0:    stlxp w8, x0, x1, [x4]
2090;
2091; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic_weak:
2092; -O1:    ldxp x8, x9, [x4]
2093; -O1:    cmp x8, x0
2094; -O1:    cmp x9, x1
2095; -O1:    stlxp w10, x8, x9, [x4]
2096; -O1:    stlxp w10, x2, x3, [x4]
2097    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 16
2098    %r = extractvalue { i128, i1 } %pair, 0
2099    ret i128 %r
2100}
2101
2102define dso_local i128 @cmpxchg_i128_aligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {
2103; -O0-LABEL: cmpxchg_i128_aligned_release_acquire:
2104; -O0:    ldaxp x0, x1, [x4]
2105; -O0:    cmp x0, x9
2106; -O0:    cmp x1, x10
2107; -O0:    stlxp w8, x2, x3, [x4]
2108; -O0:    stlxp w8, x0, x1, [x4]
2109;
2110; -O1-LABEL: cmpxchg_i128_aligned_release_acquire:
2111; -O1:    ldaxp x8, x9, [x4]
2112; -O1:    cmp x8, x0
2113; -O1:    cmp x9, x1
2114; -O1:    stlxp w10, x8, x9, [x4]
2115; -O1:    stlxp w10, x2, x3, [x4]
2116    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 16
2117    %r = extractvalue { i128, i1 } %pair, 0
2118    ret i128 %r
2119}
2120
2121define dso_local i128 @cmpxchg_i128_aligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2122; -O0-LABEL: cmpxchg_i128_aligned_release_acquire_weak:
2123; -O0:    ldaxp x0, x1, [x4]
2124; -O0:    cmp x0, x9
2125; -O0:    cmp x1, x10
2126; -O0:    stlxp w8, x2, x3, [x4]
2127; -O0:    stlxp w8, x0, x1, [x4]
2128;
2129; -O1-LABEL: cmpxchg_i128_aligned_release_acquire_weak:
2130; -O1:    ldaxp x8, x9, [x4]
2131; -O1:    cmp x8, x0
2132; -O1:    cmp x9, x1
2133; -O1:    stlxp w10, x8, x9, [x4]
2134; -O1:    stlxp w10, x2, x3, [x4]
2135    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 16
2136    %r = extractvalue { i128, i1 } %pair, 0
2137    ret i128 %r
2138}
2139
2140define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2141; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst:
2142; -O0:    ldaxp x0, x1, [x4]
2143; -O0:    cmp x0, x9
2144; -O0:    cmp x1, x10
2145; -O0:    stlxp w8, x2, x3, [x4]
2146; -O0:    stlxp w8, x0, x1, [x4]
2147;
2148; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst:
2149; -O1:    ldaxp x8, x9, [x4]
2150; -O1:    cmp x8, x0
2151; -O1:    cmp x9, x1
2152; -O1:    stlxp w10, x8, x9, [x4]
2153; -O1:    stlxp w10, x2, x3, [x4]
2154    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16
2155    %r = extractvalue { i128, i1 } %pair, 0
2156    ret i128 %r
2157}
2158
2159define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2160; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak:
2161; -O0:    ldaxp x0, x1, [x4]
2162; -O0:    cmp x0, x9
2163; -O0:    cmp x1, x10
2164; -O0:    stlxp w8, x2, x3, [x4]
2165; -O0:    stlxp w8, x0, x1, [x4]
2166;
2167; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak:
2168; -O1:    ldaxp x8, x9, [x4]
2169; -O1:    cmp x8, x0
2170; -O1:    cmp x9, x1
2171; -O1:    stlxp w10, x8, x9, [x4]
2172; -O1:    stlxp w10, x2, x3, [x4]
2173    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16
2174    %r = extractvalue { i128, i1 } %pair, 0
2175    ret i128 %r
2176}
2177
2178define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2179; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic:
2180; -O0:    ldaxp x0, x1, [x4]
2181; -O0:    cmp x0, x9
2182; -O0:    cmp x1, x10
2183; -O0:    stlxp w8, x2, x3, [x4]
2184; -O0:    stlxp w8, x0, x1, [x4]
2185;
2186; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic:
2187; -O1:    ldaxp x8, x9, [x4]
2188; -O1:    cmp x8, x0
2189; -O1:    cmp x9, x1
2190; -O1:    stlxp w10, x8, x9, [x4]
2191; -O1:    stlxp w10, x2, x3, [x4]
2192    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16
2193    %r = extractvalue { i128, i1 } %pair, 0
2194    ret i128 %r
2195}
2196
2197define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2198; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak:
2199; -O0:    ldaxp x0, x1, [x4]
2200; -O0:    cmp x0, x9
2201; -O0:    cmp x1, x10
2202; -O0:    stlxp w8, x2, x3, [x4]
2203; -O0:    stlxp w8, x0, x1, [x4]
2204;
2205; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak:
2206; -O1:    ldaxp x8, x9, [x4]
2207; -O1:    cmp x8, x0
2208; -O1:    cmp x9, x1
2209; -O1:    stlxp w10, x8, x9, [x4]
2210; -O1:    stlxp w10, x2, x3, [x4]
2211    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16
2212    %r = extractvalue { i128, i1 } %pair, 0
2213    ret i128 %r
2214}
2215
2216define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {
2217; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire:
2218; -O0:    ldaxp x0, x1, [x4]
2219; -O0:    cmp x0, x9
2220; -O0:    cmp x1, x10
2221; -O0:    stlxp w8, x2, x3, [x4]
2222; -O0:    stlxp w8, x0, x1, [x4]
2223;
2224; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire:
2225; -O1:    ldaxp x8, x9, [x4]
2226; -O1:    cmp x8, x0
2227; -O1:    cmp x9, x1
2228; -O1:    stlxp w10, x8, x9, [x4]
2229; -O1:    stlxp w10, x2, x3, [x4]
2230    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16
2231    %r = extractvalue { i128, i1 } %pair, 0
2232    ret i128 %r
2233}
2234
2235define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2236; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak:
2237; -O0:    ldaxp x0, x1, [x4]
2238; -O0:    cmp x0, x9
2239; -O0:    cmp x1, x10
2240; -O0:    stlxp w8, x2, x3, [x4]
2241; -O0:    stlxp w8, x0, x1, [x4]
2242;
2243; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak:
2244; -O1:    ldaxp x8, x9, [x4]
2245; -O1:    cmp x8, x0
2246; -O1:    cmp x9, x1
2247; -O1:    stlxp w10, x8, x9, [x4]
2248; -O1:    stlxp w10, x2, x3, [x4]
2249    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16
2250    %r = extractvalue { i128, i1 } %pair, 0
2251    ret i128 %r
2252}
2253
2254define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2255; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst:
2256; -O0:    ldaxp x0, x1, [x4]
2257; -O0:    cmp x0, x9
2258; -O0:    cmp x1, x10
2259; -O0:    stlxp w8, x2, x3, [x4]
2260; -O0:    stlxp w8, x0, x1, [x4]
2261;
2262; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst:
2263; -O1:    ldaxp x8, x9, [x4]
2264; -O1:    cmp x8, x0
2265; -O1:    cmp x9, x1
2266; -O1:    stlxp w10, x8, x9, [x4]
2267; -O1:    stlxp w10, x2, x3, [x4]
2268    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16
2269    %r = extractvalue { i128, i1 } %pair, 0
2270    ret i128 %r
2271}
2272
2273define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2274; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak:
2275; -O0:    ldaxp x0, x1, [x4]
2276; -O0:    cmp x0, x9
2277; -O0:    cmp x1, x10
2278; -O0:    stlxp w8, x2, x3, [x4]
2279; -O0:    stlxp w8, x0, x1, [x4]
2280;
2281; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak:
2282; -O1:    ldaxp x8, x9, [x4]
2283; -O1:    cmp x8, x0
2284; -O1:    cmp x9, x1
2285; -O1:    stlxp w10, x8, x9, [x4]
2286; -O1:    stlxp w10, x2, x3, [x4]
2287    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16
2288    %r = extractvalue { i128, i1 } %pair, 0
2289    ret i128 %r
2290}
2291
2292define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2293; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic:
2294; -O0:    ldaxp x0, x1, [x4]
2295; -O0:    cmp x0, x9
2296; -O0:    cmp x1, x10
2297; -O0:    stlxp w8, x2, x3, [x4]
2298; -O0:    stlxp w8, x0, x1, [x4]
2299;
2300; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic:
2301; -O1:    ldaxp x8, x9, [x4]
2302; -O1:    cmp x8, x0
2303; -O1:    cmp x9, x1
2304; -O1:    stlxp w10, x8, x9, [x4]
2305; -O1:    stlxp w10, x2, x3, [x4]
2306    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16
2307    %r = extractvalue { i128, i1 } %pair, 0
2308    ret i128 %r
2309}
2310
2311define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2312; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak:
2313; -O0:    ldaxp x0, x1, [x4]
2314; -O0:    cmp x0, x9
2315; -O0:    cmp x1, x10
2316; -O0:    stlxp w8, x2, x3, [x4]
2317; -O0:    stlxp w8, x0, x1, [x4]
2318;
2319; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak:
2320; -O1:    ldaxp x8, x9, [x4]
2321; -O1:    cmp x8, x0
2322; -O1:    cmp x9, x1
2323; -O1:    stlxp w10, x8, x9, [x4]
2324; -O1:    stlxp w10, x2, x3, [x4]
2325    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16
2326    %r = extractvalue { i128, i1 } %pair, 0
2327    ret i128 %r
2328}
2329
2330define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {
2331; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire:
2332; -O0:    ldaxp x0, x1, [x4]
2333; -O0:    cmp x0, x9
2334; -O0:    cmp x1, x10
2335; -O0:    stlxp w8, x2, x3, [x4]
2336; -O0:    stlxp w8, x0, x1, [x4]
2337;
2338; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire:
2339; -O1:    ldaxp x8, x9, [x4]
2340; -O1:    cmp x8, x0
2341; -O1:    cmp x9, x1
2342; -O1:    stlxp w10, x8, x9, [x4]
2343; -O1:    stlxp w10, x2, x3, [x4]
2344    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16
2345    %r = extractvalue { i128, i1 } %pair, 0
2346    ret i128 %r
2347}
2348
2349define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2350; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak:
2351; -O0:    ldaxp x0, x1, [x4]
2352; -O0:    cmp x0, x9
2353; -O0:    cmp x1, x10
2354; -O0:    stlxp w8, x2, x3, [x4]
2355; -O0:    stlxp w8, x0, x1, [x4]
2356;
2357; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak:
2358; -O1:    ldaxp x8, x9, [x4]
2359; -O1:    cmp x8, x0
2360; -O1:    cmp x9, x1
2361; -O1:    stlxp w10, x8, x9, [x4]
2362; -O1:    stlxp w10, x2, x3, [x4]
2363    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16
2364    %r = extractvalue { i128, i1 } %pair, 0
2365    ret i128 %r
2366}
2367
2368define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2369; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst:
2370; -O0:    ldaxp x0, x1, [x4]
2371; -O0:    cmp x0, x9
2372; -O0:    cmp x1, x10
2373; -O0:    stlxp w8, x2, x3, [x4]
2374; -O0:    stlxp w8, x0, x1, [x4]
2375;
2376; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst:
2377; -O1:    ldaxp x8, x9, [x4]
2378; -O1:    cmp x8, x0
2379; -O1:    cmp x9, x1
2380; -O1:    stlxp w10, x8, x9, [x4]
2381; -O1:    stlxp w10, x2, x3, [x4]
2382    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16
2383    %r = extractvalue { i128, i1 } %pair, 0
2384    ret i128 %r
2385}
2386
2387define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2388; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak:
2389; -O0:    ldaxp x0, x1, [x4]
2390; -O0:    cmp x0, x9
2391; -O0:    cmp x1, x10
2392; -O0:    stlxp w8, x2, x3, [x4]
2393; -O0:    stlxp w8, x0, x1, [x4]
2394;
2395; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak:
2396; -O1:    ldaxp x8, x9, [x4]
2397; -O1:    cmp x8, x0
2398; -O1:    cmp x9, x1
2399; -O1:    stlxp w10, x8, x9, [x4]
2400; -O1:    stlxp w10, x2, x3, [x4]
2401    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16
2402    %r = extractvalue { i128, i1 } %pair, 0
2403    ret i128 %r
2404}
2405
2406define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {
2407; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic:
2408; -O0:    ldaxrb w0, [x2]
2409; -O0:    cmp w0, w9, uxtb
2410; -O0:    stlxrb w8, w1, [x2]
2411;
2412; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic:
2413; -O1:    and w8, w0, #0xff
2414; -O1:    ldxrb w0, [x2]
2415; -O1:    cmp w0, w8
2416; -O1:    stxrb w9, w1, [x2]
2417    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
2418    %r = extractvalue { i8, i1 } %pair, 0
2419    ret i8 %r
2420}
2421
2422define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
2423; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak:
2424; -O0:    ldaxrb w0, [x2]
2425; -O0:    cmp w0, w9, uxtb
2426; -O0:    stlxrb w8, w1, [x2]
2427;
2428; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak:
2429; -O1:    ldxrb w8, [x2]
2430; -O1:    cmp w8, w0, uxtb
2431; -O1:    stxrb wzr, w1, [x2]
2432    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
2433    %r = extractvalue { i8, i1 } %pair, 0
2434    ret i8 %r
2435}
2436
2437define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {
2438; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_acquire:
2439; -O0:    ldaxrb w0, [x2]
2440; -O0:    cmp w0, w9, uxtb
2441; -O0:    stlxrb w8, w1, [x2]
2442;
2443; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_acquire:
2444; -O1:    and w8, w0, #0xff
2445; -O1:    ldaxrb w0, [x2]
2446; -O1:    cmp w0, w8
2447; -O1:    stxrb w9, w1, [x2]
2448    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
2449    %r = extractvalue { i8, i1 } %pair, 0
2450    ret i8 %r
2451}
2452
2453define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
2454; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak:
2455; -O0:    ldaxrb w0, [x2]
2456; -O0:    cmp w0, w9, uxtb
2457; -O0:    stlxrb w8, w1, [x2]
2458;
2459; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak:
2460; -O1:    ldaxrb w8, [x2]
2461; -O1:    cmp w8, w0, uxtb
2462; -O1:    stxrb wzr, w1, [x2]
2463    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
2464    %r = extractvalue { i8, i1 } %pair, 0
2465    ret i8 %r
2466}
2467
2468define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
2469; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst:
2470; -O0:    ldaxrb w0, [x2]
2471; -O0:    cmp w0, w9, uxtb
2472; -O0:    stlxrb w8, w1, [x2]
2473;
2474; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst:
2475; -O1:    and w8, w0, #0xff
2476; -O1:    ldaxrb w0, [x2]
2477; -O1:    cmp w0, w8
2478; -O1:    stlxrb w9, w1, [x2]
2479    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
2480    %r = extractvalue { i8, i1 } %pair, 0
2481    ret i8 %r
2482}
2483
2484define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
2485; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak:
2486; -O0:    ldaxrb w0, [x2]
2487; -O0:    cmp w0, w9, uxtb
2488; -O0:    stlxrb w8, w1, [x2]
2489;
2490; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak:
2491; -O1:    ldaxrb w8, [x2]
2492; -O1:    cmp w8, w0, uxtb
2493; -O1:    stlxrb wzr, w1, [x2]
2494    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
2495    %r = extractvalue { i8, i1 } %pair, 0
2496    ret i8 %r
2497}
2498
2499define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {
2500; -O0-LABEL: cmpxchg_i8_unaligned_acquire_monotonic:
2501; -O0:    ldaxrb w0, [x2]
2502; -O0:    cmp w0, w9, uxtb
2503; -O0:    stlxrb w8, w1, [x2]
2504;
2505; -O1-LABEL: cmpxchg_i8_unaligned_acquire_monotonic:
2506; -O1:    and w8, w0, #0xff
2507; -O1:    ldaxrb w0, [x2]
2508; -O1:    cmp w0, w8
2509; -O1:    stxrb w9, w1, [x2]
2510    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
2511    %r = extractvalue { i8, i1 } %pair, 0
2512    ret i8 %r
2513}
2514
2515define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
2516; -O0-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak:
2517; -O0:    ldaxrb w0, [x2]
2518; -O0:    cmp w0, w9, uxtb
2519; -O0:    stlxrb w8, w1, [x2]
2520;
2521; -O1-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak:
2522; -O1:    ldaxrb w8, [x2]
2523; -O1:    cmp w8, w0, uxtb
2524; -O1:    stxrb wzr, w1, [x2]
2525    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
2526    %r = extractvalue { i8, i1 } %pair, 0
2527    ret i8 %r
2528}
2529
2530define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {
2531; -O0-LABEL: cmpxchg_i8_unaligned_acquire_acquire:
2532; -O0:    ldaxrb w0, [x2]
2533; -O0:    cmp w0, w9, uxtb
2534; -O0:    stlxrb w8, w1, [x2]
2535;
2536; -O1-LABEL: cmpxchg_i8_unaligned_acquire_acquire:
2537; -O1:    and w8, w0, #0xff
2538; -O1:    ldaxrb w0, [x2]
2539; -O1:    cmp w0, w8
2540; -O1:    stxrb w9, w1, [x2]
2541    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
2542    %r = extractvalue { i8, i1 } %pair, 0
2543    ret i8 %r
2544}
2545
2546define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
2547; -O0-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak:
2548; -O0:    ldaxrb w0, [x2]
2549; -O0:    cmp w0, w9, uxtb
2550; -O0:    stlxrb w8, w1, [x2]
2551;
2552; -O1-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak:
2553; -O1:    ldaxrb w8, [x2]
2554; -O1:    cmp w8, w0, uxtb
2555; -O1:    stxrb wzr, w1, [x2]
2556    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
2557    %r = extractvalue { i8, i1 } %pair, 0
2558    ret i8 %r
2559}
2560
2561define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
2562; -O0-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst:
2563; -O0:    ldaxrb w0, [x2]
2564; -O0:    cmp w0, w9, uxtb
2565; -O0:    stlxrb w8, w1, [x2]
2566;
2567; -O1-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst:
2568; -O1:    and w8, w0, #0xff
2569; -O1:    ldaxrb w0, [x2]
2570; -O1:    cmp w0, w8
2571; -O1:    stlxrb w9, w1, [x2]
2572    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
2573    %r = extractvalue { i8, i1 } %pair, 0
2574    ret i8 %r
2575}
2576
2577define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
2578; -O0-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak:
2579; -O0:    ldaxrb w0, [x2]
2580; -O0:    cmp w0, w9, uxtb
2581; -O0:    stlxrb w8, w1, [x2]
2582;
2583; -O1-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak:
2584; -O1:    ldaxrb w8, [x2]
2585; -O1:    cmp w8, w0, uxtb
2586; -O1:    stlxrb wzr, w1, [x2]
2587    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
2588    %r = extractvalue { i8, i1 } %pair, 0
2589    ret i8 %r
2590}
2591
2592define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {
2593; -O0-LABEL: cmpxchg_i8_unaligned_release_monotonic:
2594; -O0:    ldaxrb w0, [x2]
2595; -O0:    cmp w0, w9, uxtb
2596; -O0:    stlxrb w8, w1, [x2]
2597;
2598; -O1-LABEL: cmpxchg_i8_unaligned_release_monotonic:
2599; -O1:    and w8, w0, #0xff
2600; -O1:    ldxrb w0, [x2]
2601; -O1:    cmp w0, w8
2602; -O1:    stlxrb w9, w1, [x2]
2603    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
2604    %r = extractvalue { i8, i1 } %pair, 0
2605    ret i8 %r
2606}
2607
2608define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
2609; -O0-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak:
2610; -O0:    ldaxrb w0, [x2]
2611; -O0:    cmp w0, w9, uxtb
2612; -O0:    stlxrb w8, w1, [x2]
2613;
2614; -O1-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak:
2615; -O1:    ldxrb w8, [x2]
2616; -O1:    cmp w8, w0, uxtb
2617; -O1:    stlxrb wzr, w1, [x2]
2618    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
2619    %r = extractvalue { i8, i1 } %pair, 0
2620    ret i8 %r
2621}
2622
2623define dso_local i8 @cmpxchg_i8_unaligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {
2624; -O0-LABEL: cmpxchg_i8_unaligned_release_acquire:
2625; -O0:    ldaxrb w0, [x2]
2626; -O0:    cmp w0, w9, uxtb
2627; -O0:    stlxrb w8, w1, [x2]
2628;
2629; -O1-LABEL: cmpxchg_i8_unaligned_release_acquire:
2630; -O1:    and w8, w0, #0xff
2631; -O1:    ldaxrb w0, [x2]
2632; -O1:    cmp w0, w8
2633; -O1:    stlxrb w9, w1, [x2]
2634    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1
2635    %r = extractvalue { i8, i1 } %pair, 0
2636    ret i8 %r
2637}
2638
2639define dso_local i8 @cmpxchg_i8_unaligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
2640; -O0-LABEL: cmpxchg_i8_unaligned_release_acquire_weak:
2641; -O0:    ldaxrb w0, [x2]
2642; -O0:    cmp w0, w9, uxtb
2643; -O0:    stlxrb w8, w1, [x2]
2644;
2645; -O1-LABEL: cmpxchg_i8_unaligned_release_acquire_weak:
2646; -O1:    ldaxrb w8, [x2]
2647; -O1:    cmp w8, w0, uxtb
2648; -O1:    stlxrb wzr, w1, [x2]
2649    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1
2650    %r = extractvalue { i8, i1 } %pair, 0
2651    ret i8 %r
2652}
2653
2654define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
2655; -O0-LABEL: cmpxchg_i8_unaligned_release_seq_cst:
2656; -O0:    ldaxrb w0, [x2]
2657; -O0:    cmp w0, w9, uxtb
2658; -O0:    stlxrb w8, w1, [x2]
2659;
2660; -O1-LABEL: cmpxchg_i8_unaligned_release_seq_cst:
2661; -O1:    and w8, w0, #0xff
2662; -O1:    ldaxrb w0, [x2]
2663; -O1:    cmp w0, w8
2664; -O1:    stlxrb w9, w1, [x2]
2665    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
2666    %r = extractvalue { i8, i1 } %pair, 0
2667    ret i8 %r
2668}
2669
2670define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
2671; -O0-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak:
2672; -O0:    ldaxrb w0, [x2]
2673; -O0:    cmp w0, w9, uxtb
2674; -O0:    stlxrb w8, w1, [x2]
2675;
2676; -O1-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak:
2677; -O1:    ldaxrb w8, [x2]
2678; -O1:    cmp w8, w0, uxtb
2679; -O1:    stlxrb wzr, w1, [x2]
2680    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
2681    %r = extractvalue { i8, i1 } %pair, 0
2682    ret i8 %r
2683}
2684
2685define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {
2686; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic:
2687; -O0:    ldaxrb w0, [x2]
2688; -O0:    cmp w0, w9, uxtb
2689; -O0:    stlxrb w8, w1, [x2]
2690;
2691; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic:
2692; -O1:    and w8, w0, #0xff
2693; -O1:    ldaxrb w0, [x2]
2694; -O1:    cmp w0, w8
2695; -O1:    stlxrb w9, w1, [x2]
2696    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
2697    %r = extractvalue { i8, i1 } %pair, 0
2698    ret i8 %r
2699}
2700
2701define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
2702; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak:
2703; -O0:    ldaxrb w0, [x2]
2704; -O0:    cmp w0, w9, uxtb
2705; -O0:    stlxrb w8, w1, [x2]
2706;
2707; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak:
2708; -O1:    ldaxrb w8, [x2]
2709; -O1:    cmp w8, w0, uxtb
2710; -O1:    stlxrb wzr, w1, [x2]
2711    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
2712    %r = extractvalue { i8, i1 } %pair, 0
2713    ret i8 %r
2714}
2715
2716define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {
2717; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire:
2718; -O0:    ldaxrb w0, [x2]
2719; -O0:    cmp w0, w9, uxtb
2720; -O0:    stlxrb w8, w1, [x2]
2721;
2722; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire:
2723; -O1:    and w8, w0, #0xff
2724; -O1:    ldaxrb w0, [x2]
2725; -O1:    cmp w0, w8
2726; -O1:    stlxrb w9, w1, [x2]
2727    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
2728    %r = extractvalue { i8, i1 } %pair, 0
2729    ret i8 %r
2730}
2731
2732define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
2733; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak:
2734; -O0:    ldaxrb w0, [x2]
2735; -O0:    cmp w0, w9, uxtb
2736; -O0:    stlxrb w8, w1, [x2]
2737;
2738; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak:
2739; -O1:    ldaxrb w8, [x2]
2740; -O1:    cmp w8, w0, uxtb
2741; -O1:    stlxrb wzr, w1, [x2]
2742    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
2743    %r = extractvalue { i8, i1 } %pair, 0
2744    ret i8 %r
2745}
2746
2747define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
2748; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst:
2749; -O0:    ldaxrb w0, [x2]
2750; -O0:    cmp w0, w9, uxtb
2751; -O0:    stlxrb w8, w1, [x2]
2752;
2753; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst:
2754; -O1:    and w8, w0, #0xff
2755; -O1:    ldaxrb w0, [x2]
2756; -O1:    cmp w0, w8
2757; -O1:    stlxrb w9, w1, [x2]
2758    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
2759    %r = extractvalue { i8, i1 } %pair, 0
2760    ret i8 %r
2761}
2762
2763define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
2764; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak:
2765; -O0:    ldaxrb w0, [x2]
2766; -O0:    cmp w0, w9, uxtb
2767; -O0:    stlxrb w8, w1, [x2]
2768;
2769; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak:
2770; -O1:    ldaxrb w8, [x2]
2771; -O1:    cmp w8, w0, uxtb
2772; -O1:    stlxrb wzr, w1, [x2]
2773    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
2774    %r = extractvalue { i8, i1 } %pair, 0
2775    ret i8 %r
2776}
2777
2778define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {
2779; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic:
2780; -O0:    ldaxrb w0, [x2]
2781; -O0:    cmp w0, w9, uxtb
2782; -O0:    stlxrb w8, w1, [x2]
2783;
2784; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic:
2785; -O1:    and w8, w0, #0xff
2786; -O1:    ldaxrb w0, [x2]
2787; -O1:    cmp w0, w8
2788; -O1:    stlxrb w9, w1, [x2]
2789    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
2790    %r = extractvalue { i8, i1 } %pair, 0
2791    ret i8 %r
2792}
2793
2794define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
2795; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak:
2796; -O0:    ldaxrb w0, [x2]
2797; -O0:    cmp w0, w9, uxtb
2798; -O0:    stlxrb w8, w1, [x2]
2799;
2800; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak:
2801; -O1:    ldaxrb w8, [x2]
2802; -O1:    cmp w8, w0, uxtb
2803; -O1:    stlxrb wzr, w1, [x2]
2804    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
2805    %r = extractvalue { i8, i1 } %pair, 0
2806    ret i8 %r
2807}
2808
2809define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {
2810; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire:
2811; -O0:    ldaxrb w0, [x2]
2812; -O0:    cmp w0, w9, uxtb
2813; -O0:    stlxrb w8, w1, [x2]
2814;
2815; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire:
2816; -O1:    and w8, w0, #0xff
2817; -O1:    ldaxrb w0, [x2]
2818; -O1:    cmp w0, w8
2819; -O1:    stlxrb w9, w1, [x2]
2820    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
2821    %r = extractvalue { i8, i1 } %pair, 0
2822    ret i8 %r
2823}
2824
2825define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
2826; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak:
2827; -O0:    ldaxrb w0, [x2]
2828; -O0:    cmp w0, w9, uxtb
2829; -O0:    stlxrb w8, w1, [x2]
2830;
2831; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak:
2832; -O1:    ldaxrb w8, [x2]
2833; -O1:    cmp w8, w0, uxtb
2834; -O1:    stlxrb wzr, w1, [x2]
2835    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
2836    %r = extractvalue { i8, i1 } %pair, 0
2837    ret i8 %r
2838}
2839
2840define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
2841; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst:
2842; -O0:    ldaxrb w0, [x2]
2843; -O0:    cmp w0, w9, uxtb
2844; -O0:    stlxrb w8, w1, [x2]
2845;
2846; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst:
2847; -O1:    and w8, w0, #0xff
2848; -O1:    ldaxrb w0, [x2]
2849; -O1:    cmp w0, w8
2850; -O1:    stlxrb w9, w1, [x2]
2851    %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
2852    %r = extractvalue { i8, i1 } %pair, 0
2853    ret i8 %r
2854}
2855
2856define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
2857; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak:
2858; -O0:    ldaxrb w0, [x2]
2859; -O0:    cmp w0, w9, uxtb
2860; -O0:    stlxrb w8, w1, [x2]
2861;
2862; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak:
2863; -O1:    ldaxrb w8, [x2]
2864; -O1:    cmp w8, w0, uxtb
2865; -O1:    stlxrb wzr, w1, [x2]
2866    %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
2867    %r = extractvalue { i8, i1 } %pair, 0
2868    ret i8 %r
2869}
2870
2871define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {
2872; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic:
2873; CHECK:    bl __atomic_compare_exchange
2874    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1
2875    %r = extractvalue { i16, i1 } %pair, 0
2876    ret i16 %r
2877}
2878
2879define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
2880; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic_weak:
2881; CHECK:    bl __atomic_compare_exchange
2882    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1
2883    %r = extractvalue { i16, i1 } %pair, 0
2884    ret i16 %r
2885}
2886
2887define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {
2888; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire:
2889; CHECK:    bl __atomic_compare_exchange
2890    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1
2891    %r = extractvalue { i16, i1 } %pair, 0
2892    ret i16 %r
2893}
2894
2895define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
2896; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire_weak:
2897; CHECK:    bl __atomic_compare_exchange
2898    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1
2899    %r = extractvalue { i16, i1 } %pair, 0
2900    ret i16 %r
2901}
2902
2903define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
2904; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst:
2905; CHECK:    bl __atomic_compare_exchange
2906    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1
2907    %r = extractvalue { i16, i1 } %pair, 0
2908    ret i16 %r
2909}
2910
2911define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
2912; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst_weak:
2913; CHECK:    bl __atomic_compare_exchange
2914    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1
2915    %r = extractvalue { i16, i1 } %pair, 0
2916    ret i16 %r
2917}
2918
2919define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {
2920; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic:
2921; CHECK:    bl __atomic_compare_exchange
2922    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1
2923    %r = extractvalue { i16, i1 } %pair, 0
2924    ret i16 %r
2925}
2926
2927define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
2928; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic_weak:
2929; CHECK:    bl __atomic_compare_exchange
2930    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1
2931    %r = extractvalue { i16, i1 } %pair, 0
2932    ret i16 %r
2933}
2934
2935define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {
2936; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire:
2937; CHECK:    bl __atomic_compare_exchange
2938    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1
2939    %r = extractvalue { i16, i1 } %pair, 0
2940    ret i16 %r
2941}
2942
2943define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
2944; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire_weak:
2945; CHECK:    bl __atomic_compare_exchange
2946    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1
2947    %r = extractvalue { i16, i1 } %pair, 0
2948    ret i16 %r
2949}
2950
2951define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
2952; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst:
2953; CHECK:    bl __atomic_compare_exchange
2954    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1
2955    %r = extractvalue { i16, i1 } %pair, 0
2956    ret i16 %r
2957}
2958
2959define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
2960; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst_weak:
2961; CHECK:    bl __atomic_compare_exchange
2962    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1
2963    %r = extractvalue { i16, i1 } %pair, 0
2964    ret i16 %r
2965}
2966
2967define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {
2968; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic:
2969; CHECK:    bl __atomic_compare_exchange
2970    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 1
2971    %r = extractvalue { i16, i1 } %pair, 0
2972    ret i16 %r
2973}
2974
2975define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
2976; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic_weak:
2977; CHECK:    bl __atomic_compare_exchange
2978    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 1
2979    %r = extractvalue { i16, i1 } %pair, 0
2980    ret i16 %r
2981}
2982
2983define dso_local i16 @cmpxchg_i16_unaligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {
2984; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire:
2985; CHECK:    bl __atomic_compare_exchange
2986    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 1
2987    %r = extractvalue { i16, i1 } %pair, 0
2988    ret i16 %r
2989}
2990
2991define dso_local i16 @cmpxchg_i16_unaligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
2992; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire_weak:
2993; CHECK:    bl __atomic_compare_exchange
2994    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 1
2995    %r = extractvalue { i16, i1 } %pair, 0
2996    ret i16 %r
2997}
2998
2999define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
3000; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst:
3001; CHECK:    bl __atomic_compare_exchange
3002    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1
3003    %r = extractvalue { i16, i1 } %pair, 0
3004    ret i16 %r
3005}
3006
3007define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
3008; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst_weak:
3009; CHECK:    bl __atomic_compare_exchange
3010    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1
3011    %r = extractvalue { i16, i1 } %pair, 0
3012    ret i16 %r
3013}
3014
3015define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {
3016; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic:
3017; CHECK:    bl __atomic_compare_exchange
3018    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1
3019    %r = extractvalue { i16, i1 } %pair, 0
3020    ret i16 %r
3021}
3022
3023define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
3024; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic_weak:
3025; CHECK:    bl __atomic_compare_exchange
3026    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1
3027    %r = extractvalue { i16, i1 } %pair, 0
3028    ret i16 %r
3029}
3030
3031define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {
3032; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire:
3033; CHECK:    bl __atomic_compare_exchange
3034    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1
3035    %r = extractvalue { i16, i1 } %pair, 0
3036    ret i16 %r
3037}
3038
3039define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
3040; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire_weak:
3041; CHECK:    bl __atomic_compare_exchange
3042    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1
3043    %r = extractvalue { i16, i1 } %pair, 0
3044    ret i16 %r
3045}
3046
3047define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
3048; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst:
3049; CHECK:    bl __atomic_compare_exchange
3050    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1
3051    %r = extractvalue { i16, i1 } %pair, 0
3052    ret i16 %r
3053}
3054
3055define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
3056; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst_weak:
3057; CHECK:    bl __atomic_compare_exchange
3058    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1
3059    %r = extractvalue { i16, i1 } %pair, 0
3060    ret i16 %r
3061}
3062
3063define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {
3064; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic:
3065; CHECK:    bl __atomic_compare_exchange
3066    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1
3067    %r = extractvalue { i16, i1 } %pair, 0
3068    ret i16 %r
3069}
3070
3071define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
3072; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic_weak:
3073; CHECK:    bl __atomic_compare_exchange
3074    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1
3075    %r = extractvalue { i16, i1 } %pair, 0
3076    ret i16 %r
3077}
3078
3079define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {
3080; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire:
3081; CHECK:    bl __atomic_compare_exchange
3082    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1
3083    %r = extractvalue { i16, i1 } %pair, 0
3084    ret i16 %r
3085}
3086
3087define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
3088; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire_weak:
3089; CHECK:    bl __atomic_compare_exchange
3090    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1
3091    %r = extractvalue { i16, i1 } %pair, 0
3092    ret i16 %r
3093}
3094
3095define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
3096; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst:
3097; CHECK:    bl __atomic_compare_exchange
3098    %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1
3099    %r = extractvalue { i16, i1 } %pair, 0
3100    ret i16 %r
3101}
3102
3103define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
3104; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst_weak:
3105; CHECK:    bl __atomic_compare_exchange
3106    %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1
3107    %r = extractvalue { i16, i1 } %pair, 0
3108    ret i16 %r
3109}
3110
3111define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {
3112; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic:
3113; CHECK:    bl __atomic_compare_exchange
3114    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1
3115    %r = extractvalue { i32, i1 } %pair, 0
3116    ret i32 %r
3117}
3118
3119define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
3120; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic_weak:
3121; CHECK:    bl __atomic_compare_exchange
3122    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1
3123    %r = extractvalue { i32, i1 } %pair, 0
3124    ret i32 %r
3125}
3126
3127define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {
3128; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire:
3129; CHECK:    bl __atomic_compare_exchange
3130    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1
3131    %r = extractvalue { i32, i1 } %pair, 0
3132    ret i32 %r
3133}
3134
3135define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
3136; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire_weak:
3137; CHECK:    bl __atomic_compare_exchange
3138    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1
3139    %r = extractvalue { i32, i1 } %pair, 0
3140    ret i32 %r
3141}
3142
3143define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
3144; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst:
3145; CHECK:    bl __atomic_compare_exchange
3146    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1
3147    %r = extractvalue { i32, i1 } %pair, 0
3148    ret i32 %r
3149}
3150
3151define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
3152; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst_weak:
3153; CHECK:    bl __atomic_compare_exchange
3154    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1
3155    %r = extractvalue { i32, i1 } %pair, 0
3156    ret i32 %r
3157}
3158
3159define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {
3160; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic:
3161; CHECK:    bl __atomic_compare_exchange
3162    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1
3163    %r = extractvalue { i32, i1 } %pair, 0
3164    ret i32 %r
3165}
3166
3167define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
3168; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic_weak:
3169; CHECK:    bl __atomic_compare_exchange
3170    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1
3171    %r = extractvalue { i32, i1 } %pair, 0
3172    ret i32 %r
3173}
3174
3175define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {
3176; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire:
3177; CHECK:    bl __atomic_compare_exchange
3178    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1
3179    %r = extractvalue { i32, i1 } %pair, 0
3180    ret i32 %r
3181}
3182
3183define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
3184; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire_weak:
3185; CHECK:    bl __atomic_compare_exchange
3186    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1
3187    %r = extractvalue { i32, i1 } %pair, 0
3188    ret i32 %r
3189}
3190
3191define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
3192; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst:
3193; CHECK:    bl __atomic_compare_exchange
3194    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1
3195    %r = extractvalue { i32, i1 } %pair, 0
3196    ret i32 %r
3197}
3198
3199define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
3200; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst_weak:
3201; CHECK:    bl __atomic_compare_exchange
3202    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1
3203    %r = extractvalue { i32, i1 } %pair, 0
3204    ret i32 %r
3205}
3206
3207define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {
3208; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic:
3209; CHECK:    bl __atomic_compare_exchange
3210    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 1
3211    %r = extractvalue { i32, i1 } %pair, 0
3212    ret i32 %r
3213}
3214
3215define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
3216; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic_weak:
3217; CHECK:    bl __atomic_compare_exchange
3218    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 1
3219    %r = extractvalue { i32, i1 } %pair, 0
3220    ret i32 %r
3221}
3222
3223define dso_local i32 @cmpxchg_i32_unaligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {
3224; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire:
3225; CHECK:    bl __atomic_compare_exchange
3226    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 1
3227    %r = extractvalue { i32, i1 } %pair, 0
3228    ret i32 %r
3229}
3230
3231define dso_local i32 @cmpxchg_i32_unaligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
3232; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire_weak:
3233; CHECK:    bl __atomic_compare_exchange
3234    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 1
3235    %r = extractvalue { i32, i1 } %pair, 0
3236    ret i32 %r
3237}
3238
3239define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
3240; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst:
3241; CHECK:    bl __atomic_compare_exchange
3242    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1
3243    %r = extractvalue { i32, i1 } %pair, 0
3244    ret i32 %r
3245}
3246
3247define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
3248; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst_weak:
3249; CHECK:    bl __atomic_compare_exchange
3250    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1
3251    %r = extractvalue { i32, i1 } %pair, 0
3252    ret i32 %r
3253}
3254
3255define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {
3256; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic:
3257; CHECK:    bl __atomic_compare_exchange
3258    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1
3259    %r = extractvalue { i32, i1 } %pair, 0
3260    ret i32 %r
3261}
3262
3263define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
3264; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic_weak:
3265; CHECK:    bl __atomic_compare_exchange
3266    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1
3267    %r = extractvalue { i32, i1 } %pair, 0
3268    ret i32 %r
3269}
3270
3271define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {
3272; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire:
3273; CHECK:    bl __atomic_compare_exchange
3274    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1
3275    %r = extractvalue { i32, i1 } %pair, 0
3276    ret i32 %r
3277}
3278
3279define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
3280; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire_weak:
3281; CHECK:    bl __atomic_compare_exchange
3282    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1
3283    %r = extractvalue { i32, i1 } %pair, 0
3284    ret i32 %r
3285}
3286
3287define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
3288; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst:
3289; CHECK:    bl __atomic_compare_exchange
3290    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1
3291    %r = extractvalue { i32, i1 } %pair, 0
3292    ret i32 %r
3293}
3294
3295define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
3296; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst_weak:
3297; CHECK:    bl __atomic_compare_exchange
3298    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1
3299    %r = extractvalue { i32, i1 } %pair, 0
3300    ret i32 %r
3301}
3302
3303define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {
3304; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic:
3305; CHECK:    bl __atomic_compare_exchange
3306    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1
3307    %r = extractvalue { i32, i1 } %pair, 0
3308    ret i32 %r
3309}
3310
3311define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
3312; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic_weak:
3313; CHECK:    bl __atomic_compare_exchange
3314    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1
3315    %r = extractvalue { i32, i1 } %pair, 0
3316    ret i32 %r
3317}
3318
3319define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {
3320; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire:
3321; CHECK:    bl __atomic_compare_exchange
3322    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1
3323    %r = extractvalue { i32, i1 } %pair, 0
3324    ret i32 %r
3325}
3326
3327define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
3328; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire_weak:
3329; CHECK:    bl __atomic_compare_exchange
3330    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1
3331    %r = extractvalue { i32, i1 } %pair, 0
3332    ret i32 %r
3333}
3334
3335define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
3336; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst:
3337; CHECK:    bl __atomic_compare_exchange
3338    %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1
3339    %r = extractvalue { i32, i1 } %pair, 0
3340    ret i32 %r
3341}
3342
3343define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
3344; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst_weak:
3345; CHECK:    bl __atomic_compare_exchange
3346    %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1
3347    %r = extractvalue { i32, i1 } %pair, 0
3348    ret i32 %r
3349}
3350
3351define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {
3352; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic:
3353; CHECK:    bl __atomic_compare_exchange
3354    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1
3355    %r = extractvalue { i64, i1 } %pair, 0
3356    ret i64 %r
3357}
3358
3359define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
3360; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic_weak:
3361; CHECK:    bl __atomic_compare_exchange
3362    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1
3363    %r = extractvalue { i64, i1 } %pair, 0
3364    ret i64 %r
3365}
3366
3367define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {
3368; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire:
3369; CHECK:    bl __atomic_compare_exchange
3370    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1
3371    %r = extractvalue { i64, i1 } %pair, 0
3372    ret i64 %r
3373}
3374
3375define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
3376; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire_weak:
3377; CHECK:    bl __atomic_compare_exchange
3378    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1
3379    %r = extractvalue { i64, i1 } %pair, 0
3380    ret i64 %r
3381}
3382
3383define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
3384; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst:
3385; CHECK:    bl __atomic_compare_exchange
3386    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1
3387    %r = extractvalue { i64, i1 } %pair, 0
3388    ret i64 %r
3389}
3390
3391define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
3392; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst_weak:
3393; CHECK:    bl __atomic_compare_exchange
3394    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1
3395    %r = extractvalue { i64, i1 } %pair, 0
3396    ret i64 %r
3397}
3398
3399define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {
3400; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic:
3401; CHECK:    bl __atomic_compare_exchange
3402    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1
3403    %r = extractvalue { i64, i1 } %pair, 0
3404    ret i64 %r
3405}
3406
3407define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
3408; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic_weak:
3409; CHECK:    bl __atomic_compare_exchange
3410    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1
3411    %r = extractvalue { i64, i1 } %pair, 0
3412    ret i64 %r
3413}
3414
3415define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {
3416; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire:
3417; CHECK:    bl __atomic_compare_exchange
3418    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1
3419    %r = extractvalue { i64, i1 } %pair, 0
3420    ret i64 %r
3421}
3422
3423define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
3424; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire_weak:
3425; CHECK:    bl __atomic_compare_exchange
3426    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1
3427    %r = extractvalue { i64, i1 } %pair, 0
3428    ret i64 %r
3429}
3430
3431define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
3432; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst:
3433; CHECK:    bl __atomic_compare_exchange
3434    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1
3435    %r = extractvalue { i64, i1 } %pair, 0
3436    ret i64 %r
3437}
3438
3439define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
3440; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst_weak:
3441; CHECK:    bl __atomic_compare_exchange
3442    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1
3443    %r = extractvalue { i64, i1 } %pair, 0
3444    ret i64 %r
3445}
3446
3447define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {
3448; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic:
3449; CHECK:    bl __atomic_compare_exchange
3450    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 1
3451    %r = extractvalue { i64, i1 } %pair, 0
3452    ret i64 %r
3453}
3454
3455define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
3456; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic_weak:
3457; CHECK:    bl __atomic_compare_exchange
3458    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 1
3459    %r = extractvalue { i64, i1 } %pair, 0
3460    ret i64 %r
3461}
3462
3463define dso_local i64 @cmpxchg_i64_unaligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {
3464; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire:
3465; CHECK:    bl __atomic_compare_exchange
3466    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 1
3467    %r = extractvalue { i64, i1 } %pair, 0
3468    ret i64 %r
3469}
3470
3471define dso_local i64 @cmpxchg_i64_unaligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
3472; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire_weak:
3473; CHECK:    bl __atomic_compare_exchange
3474    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 1
3475    %r = extractvalue { i64, i1 } %pair, 0
3476    ret i64 %r
3477}
3478
3479define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
3480; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst:
3481; CHECK:    bl __atomic_compare_exchange
3482    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1
3483    %r = extractvalue { i64, i1 } %pair, 0
3484    ret i64 %r
3485}
3486
3487define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
3488; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst_weak:
3489; CHECK:    bl __atomic_compare_exchange
3490    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1
3491    %r = extractvalue { i64, i1 } %pair, 0
3492    ret i64 %r
3493}
3494
3495define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {
3496; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic:
3497; CHECK:    bl __atomic_compare_exchange
3498    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1
3499    %r = extractvalue { i64, i1 } %pair, 0
3500    ret i64 %r
3501}
3502
3503define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
3504; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic_weak:
3505; CHECK:    bl __atomic_compare_exchange
3506    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1
3507    %r = extractvalue { i64, i1 } %pair, 0
3508    ret i64 %r
3509}
3510
3511define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {
3512; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire:
3513; CHECK:    bl __atomic_compare_exchange
3514    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1
3515    %r = extractvalue { i64, i1 } %pair, 0
3516    ret i64 %r
3517}
3518
3519define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
3520; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire_weak:
3521; CHECK:    bl __atomic_compare_exchange
3522    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1
3523    %r = extractvalue { i64, i1 } %pair, 0
3524    ret i64 %r
3525}
3526
3527define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
3528; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst:
3529; CHECK:    bl __atomic_compare_exchange
3530    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1
3531    %r = extractvalue { i64, i1 } %pair, 0
3532    ret i64 %r
3533}
3534
3535define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
3536; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst_weak:
3537; CHECK:    bl __atomic_compare_exchange
3538    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1
3539    %r = extractvalue { i64, i1 } %pair, 0
3540    ret i64 %r
3541}
3542
3543define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {
3544; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic:
3545; CHECK:    bl __atomic_compare_exchange
3546    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1
3547    %r = extractvalue { i64, i1 } %pair, 0
3548    ret i64 %r
3549}
3550
3551define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
3552; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic_weak:
3553; CHECK:    bl __atomic_compare_exchange
3554    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1
3555    %r = extractvalue { i64, i1 } %pair, 0
3556    ret i64 %r
3557}
3558
3559define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {
3560; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire:
3561; CHECK:    bl __atomic_compare_exchange
3562    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1
3563    %r = extractvalue { i64, i1 } %pair, 0
3564    ret i64 %r
3565}
3566
3567define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
3568; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire_weak:
3569; CHECK:    bl __atomic_compare_exchange
3570    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1
3571    %r = extractvalue { i64, i1 } %pair, 0
3572    ret i64 %r
3573}
3574
3575define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
3576; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst:
3577; CHECK:    bl __atomic_compare_exchange
3578    %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1
3579    %r = extractvalue { i64, i1 } %pair, 0
3580    ret i64 %r
3581}
3582
3583define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
3584; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst_weak:
3585; CHECK:    bl __atomic_compare_exchange
3586    %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1
3587    %r = extractvalue { i64, i1 } %pair, 0
3588    ret i64 %r
3589}
3590
3591define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {
3592; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic:
3593; CHECK:    bl __atomic_compare_exchange
3594    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1
3595    %r = extractvalue { i128, i1 } %pair, 0
3596    ret i128 %r
3597}
3598
3599define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
3600; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic_weak:
3601; CHECK:    bl __atomic_compare_exchange
3602    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1
3603    %r = extractvalue { i128, i1 } %pair, 0
3604    ret i128 %r
3605}
3606
3607define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {
3608; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire:
3609; CHECK:    bl __atomic_compare_exchange
3610    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1
3611    %r = extractvalue { i128, i1 } %pair, 0
3612    ret i128 %r
3613}
3614
3615define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
3616; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire_weak:
3617; CHECK:    bl __atomic_compare_exchange
3618    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1
3619    %r = extractvalue { i128, i1 } %pair, 0
3620    ret i128 %r
3621}
3622
3623define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
3624; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst:
3625; CHECK:    bl __atomic_compare_exchange
3626    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1
3627    %r = extractvalue { i128, i1 } %pair, 0
3628    ret i128 %r
3629}
3630
3631define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
3632; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst_weak:
3633; CHECK:    bl __atomic_compare_exchange
3634    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1
3635    %r = extractvalue { i128, i1 } %pair, 0
3636    ret i128 %r
3637}
3638
3639define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {
3640; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic:
3641; CHECK:    bl __atomic_compare_exchange
3642    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1
3643    %r = extractvalue { i128, i1 } %pair, 0
3644    ret i128 %r
3645}
3646
3647define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
3648; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic_weak:
3649; CHECK:    bl __atomic_compare_exchange
3650    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1
3651    %r = extractvalue { i128, i1 } %pair, 0
3652    ret i128 %r
3653}
3654
3655define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {
3656; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire:
3657; CHECK:    bl __atomic_compare_exchange
3658    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1
3659    %r = extractvalue { i128, i1 } %pair, 0
3660    ret i128 %r
3661}
3662
3663define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
3664; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire_weak:
3665; CHECK:    bl __atomic_compare_exchange
3666    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1
3667    %r = extractvalue { i128, i1 } %pair, 0
3668    ret i128 %r
3669}
3670
3671define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
3672; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst:
3673; CHECK:    bl __atomic_compare_exchange
3674    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1
3675    %r = extractvalue { i128, i1 } %pair, 0
3676    ret i128 %r
3677}
3678
3679define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
3680; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst_weak:
3681; CHECK:    bl __atomic_compare_exchange
3682    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1
3683    %r = extractvalue { i128, i1 } %pair, 0
3684    ret i128 %r
3685}
3686
3687define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {
3688; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic:
3689; CHECK:    bl __atomic_compare_exchange
3690    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 1
3691    %r = extractvalue { i128, i1 } %pair, 0
3692    ret i128 %r
3693}
3694
3695define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
3696; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic_weak:
3697; CHECK:    bl __atomic_compare_exchange
3698    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 1
3699    %r = extractvalue { i128, i1 } %pair, 0
3700    ret i128 %r
3701}
3702
3703define dso_local i128 @cmpxchg_i128_unaligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {
3704; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire:
3705; CHECK:    bl __atomic_compare_exchange
3706    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 1
3707    %r = extractvalue { i128, i1 } %pair, 0
3708    ret i128 %r
3709}
3710
3711define dso_local i128 @cmpxchg_i128_unaligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
3712; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire_weak:
3713; CHECK:    bl __atomic_compare_exchange
3714    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 1
3715    %r = extractvalue { i128, i1 } %pair, 0
3716    ret i128 %r
3717}
3718
3719define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
3720; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst:
3721; CHECK:    bl __atomic_compare_exchange
3722    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1
3723    %r = extractvalue { i128, i1 } %pair, 0
3724    ret i128 %r
3725}
3726
3727define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
3728; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst_weak:
3729; CHECK:    bl __atomic_compare_exchange
3730    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1
3731    %r = extractvalue { i128, i1 } %pair, 0
3732    ret i128 %r
3733}
3734
3735define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {
3736; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic:
3737; CHECK:    bl __atomic_compare_exchange
3738    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1
3739    %r = extractvalue { i128, i1 } %pair, 0
3740    ret i128 %r
3741}
3742
3743define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
3744; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic_weak:
3745; CHECK:    bl __atomic_compare_exchange
3746    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1
3747    %r = extractvalue { i128, i1 } %pair, 0
3748    ret i128 %r
3749}
3750
3751define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {
3752; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire:
3753; CHECK:    bl __atomic_compare_exchange
3754    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1
3755    %r = extractvalue { i128, i1 } %pair, 0
3756    ret i128 %r
3757}
3758
3759define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
3760; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire_weak:
3761; CHECK:    bl __atomic_compare_exchange
3762    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1
3763    %r = extractvalue { i128, i1 } %pair, 0
3764    ret i128 %r
3765}
3766
3767define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
3768; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst:
3769; CHECK:    bl __atomic_compare_exchange
3770    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1
3771    %r = extractvalue { i128, i1 } %pair, 0
3772    ret i128 %r
3773}
3774
3775define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
3776; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst_weak:
3777; CHECK:    bl __atomic_compare_exchange
3778    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1
3779    %r = extractvalue { i128, i1 } %pair, 0
3780    ret i128 %r
3781}
3782
3783define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {
3784; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic:
3785; CHECK:    bl __atomic_compare_exchange
3786    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1
3787    %r = extractvalue { i128, i1 } %pair, 0
3788    ret i128 %r
3789}
3790
3791define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
3792; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic_weak:
3793; CHECK:    bl __atomic_compare_exchange
3794    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1
3795    %r = extractvalue { i128, i1 } %pair, 0
3796    ret i128 %r
3797}
3798
3799define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {
3800; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire:
3801; CHECK:    bl __atomic_compare_exchange
3802    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1
3803    %r = extractvalue { i128, i1 } %pair, 0
3804    ret i128 %r
3805}
3806
3807define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
3808; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire_weak:
3809; CHECK:    bl __atomic_compare_exchange
3810    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1
3811    %r = extractvalue { i128, i1 } %pair, 0
3812    ret i128 %r
3813}
3814
3815define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
3816; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst:
3817; CHECK:    bl __atomic_compare_exchange
3818    %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1
3819    %r = extractvalue { i128, i1 } %pair, 0
3820    ret i128 %r
3821}
3822
3823define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
3824; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst_weak:
3825; CHECK:    bl __atomic_compare_exchange
3826    %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1
3827    %r = extractvalue { i128, i1 } %pair, 0
3828    ret i128 %r
3829}
3830