2408 lines · plain
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.py3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+outline-atomics -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+outline-atomics -O1 | FileCheck %s --check-prefixes=CHECK,-O15 6define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {7; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_monotonic:8; CHECK: bl __aarch64_cas1_relax9 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 110 %r = extractvalue { i8, i1 } %pair, 011 ret i8 %r12}13 14define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {15; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak:16; CHECK: bl __aarch64_cas1_relax17 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 118 %r = extractvalue { i8, i1 } %pair, 019 ret i8 %r20}21 22define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {23; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_acquire:24; CHECK: bl __aarch64_cas1_acq25 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 126 %r = extractvalue { i8, i1 } %pair, 027 ret i8 %r28}29 30define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {31; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak:32; CHECK: bl __aarch64_cas1_acq33 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 134 %r = extractvalue { i8, i1 } %pair, 035 ret i8 %r36}37 38define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {39; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst:40; CHECK: bl __aarch64_cas1_acq_rel41 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 142 %r = extractvalue { i8, i1 } %pair, 043 ret i8 %r44}45 46define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {47; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak:48; CHECK: bl __aarch64_cas1_acq_rel49 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 150 %r = extractvalue { i8, i1 } %pair, 051 ret i8 %r52}53 54define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {55; CHECK-LABEL: cmpxchg_i8_aligned_acquire_monotonic:56; CHECK: bl __aarch64_cas1_acq57 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 158 %r = extractvalue { i8, i1 } %pair, 059 ret i8 %r60}61 62define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {63; CHECK-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak:64; CHECK: bl __aarch64_cas1_acq65 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 166 %r = extractvalue { i8, i1 } %pair, 067 ret i8 %r68}69 70define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {71; CHECK-LABEL: cmpxchg_i8_aligned_acquire_acquire:72; CHECK: bl __aarch64_cas1_acq73 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 174 %r = extractvalue { i8, i1 } %pair, 075 ret i8 %r76}77 78define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {79; CHECK-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak:80; CHECK: bl __aarch64_cas1_acq81 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 182 %r = extractvalue { i8, i1 } %pair, 083 ret i8 %r84}85 86define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {87; CHECK-LABEL: cmpxchg_i8_aligned_acquire_seq_cst:88; CHECK: bl __aarch64_cas1_acq_rel89 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 190 %r = extractvalue { i8, i1 } %pair, 091 ret i8 %r92}93 94define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {95; CHECK-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak:96; CHECK: bl __aarch64_cas1_acq_rel97 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 198 %r = extractvalue { i8, i1 } %pair, 099 ret i8 %r100}101 102define dso_local i8 @cmpxchg_i8_aligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {103; CHECK-LABEL: cmpxchg_i8_aligned_release_monotonic:104; CHECK: bl __aarch64_cas1_rel105 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1106 %r = extractvalue { i8, i1 } %pair, 0107 ret i8 %r108}109 110define dso_local i8 @cmpxchg_i8_aligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {111; CHECK-LABEL: cmpxchg_i8_aligned_release_monotonic_weak:112; CHECK: bl __aarch64_cas1_rel113 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1114 %r = extractvalue { i8, i1 } %pair, 0115 ret i8 %r116}117 118define dso_local i8 @cmpxchg_i8_aligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {119; CHECK-LABEL: cmpxchg_i8_aligned_release_acquire:120; CHECK: bl __aarch64_cas1_acq_rel121 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1122 %r = extractvalue { i8, i1 } %pair, 0123 ret i8 %r124}125 126define dso_local i8 @cmpxchg_i8_aligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {127; CHECK-LABEL: cmpxchg_i8_aligned_release_acquire_weak:128; CHECK: bl __aarch64_cas1_acq_rel129 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1130 %r = extractvalue { i8, i1 } %pair, 0131 ret i8 %r132}133 134define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {135; CHECK-LABEL: cmpxchg_i8_aligned_release_seq_cst:136; CHECK: bl __aarch64_cas1_acq_rel137 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1138 %r = extractvalue { i8, i1 } %pair, 0139 ret i8 %r140}141 142define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {143; CHECK-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak:144; CHECK: bl __aarch64_cas1_acq_rel145 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1146 %r = extractvalue { i8, i1 } %pair, 0147 ret i8 %r148}149 150define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {151; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic:152; CHECK: bl __aarch64_cas1_acq_rel153 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1154 %r = extractvalue { i8, i1 } %pair, 0155 ret i8 %r156}157 158define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {159; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak:160; CHECK: bl __aarch64_cas1_acq_rel161 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1162 %r = extractvalue { i8, i1 } %pair, 0163 ret i8 %r164}165 166define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {167; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_acquire:168; CHECK: bl __aarch64_cas1_acq_rel169 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1170 %r = extractvalue { i8, i1 } %pair, 0171 ret i8 %r172}173 174define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {175; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak:176; CHECK: bl __aarch64_cas1_acq_rel177 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1178 %r = extractvalue { i8, i1 } %pair, 0179 ret i8 %r180}181 182define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {183; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst:184; CHECK: bl __aarch64_cas1_acq_rel185 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1186 %r = extractvalue { i8, i1 } %pair, 0187 ret i8 %r188}189 190define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {191; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak:192; CHECK: bl __aarch64_cas1_acq_rel193 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1194 %r = extractvalue { i8, i1 } %pair, 0195 ret i8 %r196}197 198define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {199; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic:200; CHECK: bl __aarch64_cas1_acq_rel201 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1202 %r = extractvalue { i8, i1 } %pair, 0203 ret i8 %r204}205 206define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {207; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak:208; CHECK: bl __aarch64_cas1_acq_rel209 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1210 %r = extractvalue { i8, i1 } %pair, 0211 ret i8 %r212}213 214define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {215; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_acquire:216; CHECK: bl __aarch64_cas1_acq_rel217 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1218 %r = extractvalue { i8, i1 } %pair, 0219 ret i8 %r220}221 222define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {223; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak:224; CHECK: bl __aarch64_cas1_acq_rel225 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1226 %r = extractvalue { i8, i1 } %pair, 0227 ret i8 %r228}229 230define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {231; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst:232; CHECK: bl __aarch64_cas1_acq_rel233 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1234 %r = extractvalue { i8, i1 } %pair, 0235 ret i8 %r236}237 238define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {239; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak:240; CHECK: bl __aarch64_cas1_acq_rel241 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1242 %r = extractvalue { i8, i1 } %pair, 0243 ret i8 %r244}245 246define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {247; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_monotonic:248; CHECK: bl __aarch64_cas2_relax249 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2250 %r = extractvalue { i16, i1 } %pair, 0251 ret i16 %r252}253 254define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {255; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak:256; CHECK: bl __aarch64_cas2_relax257 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2258 %r = extractvalue { i16, i1 } %pair, 0259 ret i16 %r260}261 262define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {263; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_acquire:264; CHECK: bl __aarch64_cas2_acq265 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2266 %r = extractvalue { i16, i1 } %pair, 0267 ret i16 %r268}269 270define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {271; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak:272; CHECK: bl __aarch64_cas2_acq273 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2274 %r = extractvalue { i16, i1 } %pair, 0275 ret i16 %r276}277 278define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {279; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst:280; CHECK: bl __aarch64_cas2_acq_rel281 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2282 %r = extractvalue { i16, i1 } %pair, 0283 ret i16 %r284}285 286define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {287; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak:288; CHECK: bl __aarch64_cas2_acq_rel289 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2290 %r = extractvalue { i16, i1 } %pair, 0291 ret i16 %r292}293 294define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {295; CHECK-LABEL: cmpxchg_i16_aligned_acquire_monotonic:296; CHECK: bl __aarch64_cas2_acq297 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2298 %r = extractvalue { i16, i1 } %pair, 0299 ret i16 %r300}301 302define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {303; CHECK-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak:304; CHECK: bl __aarch64_cas2_acq305 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2306 %r = extractvalue { i16, i1 } %pair, 0307 ret i16 %r308}309 310define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {311; CHECK-LABEL: cmpxchg_i16_aligned_acquire_acquire:312; CHECK: bl __aarch64_cas2_acq313 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2314 %r = extractvalue { i16, i1 } %pair, 0315 ret i16 %r316}317 318define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {319; CHECK-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak:320; CHECK: bl __aarch64_cas2_acq321 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2322 %r = extractvalue { i16, i1 } %pair, 0323 ret i16 %r324}325 326define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {327; CHECK-LABEL: cmpxchg_i16_aligned_acquire_seq_cst:328; CHECK: bl __aarch64_cas2_acq_rel329 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2330 %r = extractvalue { i16, i1 } %pair, 0331 ret i16 %r332}333 334define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {335; CHECK-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak:336; CHECK: bl __aarch64_cas2_acq_rel337 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2338 %r = extractvalue { i16, i1 } %pair, 0339 ret i16 %r340}341 342define dso_local i16 @cmpxchg_i16_aligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {343; CHECK-LABEL: cmpxchg_i16_aligned_release_monotonic:344; CHECK: bl __aarch64_cas2_rel345 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 2346 %r = extractvalue { i16, i1 } %pair, 0347 ret i16 %r348}349 350define dso_local i16 @cmpxchg_i16_aligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {351; CHECK-LABEL: cmpxchg_i16_aligned_release_monotonic_weak:352; CHECK: bl __aarch64_cas2_rel353 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 2354 %r = extractvalue { i16, i1 } %pair, 0355 ret i16 %r356}357 358define dso_local i16 @cmpxchg_i16_aligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {359; CHECK-LABEL: cmpxchg_i16_aligned_release_acquire:360; CHECK: bl __aarch64_cas2_acq_rel361 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 2362 %r = extractvalue { i16, i1 } %pair, 0363 ret i16 %r364}365 366define dso_local i16 @cmpxchg_i16_aligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {367; CHECK-LABEL: cmpxchg_i16_aligned_release_acquire_weak:368; CHECK: bl __aarch64_cas2_acq_rel369 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 2370 %r = extractvalue { i16, i1 } %pair, 0371 ret i16 %r372}373 374define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {375; CHECK-LABEL: cmpxchg_i16_aligned_release_seq_cst:376; CHECK: bl __aarch64_cas2_acq_rel377 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2378 %r = extractvalue { i16, i1 } %pair, 0379 ret i16 %r380}381 382define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {383; CHECK-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak:384; CHECK: bl __aarch64_cas2_acq_rel385 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2386 %r = extractvalue { i16, i1 } %pair, 0387 ret i16 %r388}389 390define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {391; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic:392; CHECK: bl __aarch64_cas2_acq_rel393 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2394 %r = extractvalue { i16, i1 } %pair, 0395 ret i16 %r396}397 398define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {399; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak:400; CHECK: bl __aarch64_cas2_acq_rel401 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2402 %r = extractvalue { i16, i1 } %pair, 0403 ret i16 %r404}405 406define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {407; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_acquire:408; CHECK: bl __aarch64_cas2_acq_rel409 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2410 %r = extractvalue { i16, i1 } %pair, 0411 ret i16 %r412}413 414define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {415; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak:416; CHECK: bl __aarch64_cas2_acq_rel417 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2418 %r = extractvalue { i16, i1 } %pair, 0419 ret i16 %r420}421 422define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {423; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst:424; CHECK: bl __aarch64_cas2_acq_rel425 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2426 %r = extractvalue { i16, i1 } %pair, 0427 ret i16 %r428}429 430define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {431; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak:432; CHECK: bl __aarch64_cas2_acq_rel433 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2434 %r = extractvalue { i16, i1 } %pair, 0435 ret i16 %r436}437 438define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {439; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic:440; CHECK: bl __aarch64_cas2_acq_rel441 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2442 %r = extractvalue { i16, i1 } %pair, 0443 ret i16 %r444}445 446define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {447; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak:448; CHECK: bl __aarch64_cas2_acq_rel449 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2450 %r = extractvalue { i16, i1 } %pair, 0451 ret i16 %r452}453 454define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {455; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_acquire:456; CHECK: bl __aarch64_cas2_acq_rel457 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2458 %r = extractvalue { i16, i1 } %pair, 0459 ret i16 %r460}461 462define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {463; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak:464; CHECK: bl __aarch64_cas2_acq_rel465 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2466 %r = extractvalue { i16, i1 } %pair, 0467 ret i16 %r468}469 470define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {471; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst:472; CHECK: bl __aarch64_cas2_acq_rel473 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2474 %r = extractvalue { i16, i1 } %pair, 0475 ret i16 %r476}477 478define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {479; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak:480; CHECK: bl __aarch64_cas2_acq_rel481 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2482 %r = extractvalue { i16, i1 } %pair, 0483 ret i16 %r484}485 486define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {487; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_monotonic:488; CHECK: bl __aarch64_cas4_relax489 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4490 %r = extractvalue { i32, i1 } %pair, 0491 ret i32 %r492}493 494define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {495; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak:496; CHECK: bl __aarch64_cas4_relax497 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4498 %r = extractvalue { i32, i1 } %pair, 0499 ret i32 %r500}501 502define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {503; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_acquire:504; CHECK: bl __aarch64_cas4_acq505 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4506 %r = extractvalue { i32, i1 } %pair, 0507 ret i32 %r508}509 510define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {511; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak:512; CHECK: bl __aarch64_cas4_acq513 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4514 %r = extractvalue { i32, i1 } %pair, 0515 ret i32 %r516}517 518define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {519; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst:520; CHECK: bl __aarch64_cas4_acq_rel521 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4522 %r = extractvalue { i32, i1 } %pair, 0523 ret i32 %r524}525 526define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {527; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak:528; CHECK: bl __aarch64_cas4_acq_rel529 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4530 %r = extractvalue { i32, i1 } %pair, 0531 ret i32 %r532}533 534define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {535; CHECK-LABEL: cmpxchg_i32_aligned_acquire_monotonic:536; CHECK: bl __aarch64_cas4_acq537 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4538 %r = extractvalue { i32, i1 } %pair, 0539 ret i32 %r540}541 542define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {543; CHECK-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak:544; CHECK: bl __aarch64_cas4_acq545 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4546 %r = extractvalue { i32, i1 } %pair, 0547 ret i32 %r548}549 550define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {551; CHECK-LABEL: cmpxchg_i32_aligned_acquire_acquire:552; CHECK: bl __aarch64_cas4_acq553 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4554 %r = extractvalue { i32, i1 } %pair, 0555 ret i32 %r556}557 558define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {559; CHECK-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak:560; CHECK: bl __aarch64_cas4_acq561 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4562 %r = extractvalue { i32, i1 } %pair, 0563 ret i32 %r564}565 566define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {567; CHECK-LABEL: cmpxchg_i32_aligned_acquire_seq_cst:568; CHECK: bl __aarch64_cas4_acq_rel569 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4570 %r = extractvalue { i32, i1 } %pair, 0571 ret i32 %r572}573 574define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {575; CHECK-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak:576; CHECK: bl __aarch64_cas4_acq_rel577 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4578 %r = extractvalue { i32, i1 } %pair, 0579 ret i32 %r580}581 582define dso_local i32 @cmpxchg_i32_aligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {583; CHECK-LABEL: cmpxchg_i32_aligned_release_monotonic:584; CHECK: bl __aarch64_cas4_rel585 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 4586 %r = extractvalue { i32, i1 } %pair, 0587 ret i32 %r588}589 590define dso_local i32 @cmpxchg_i32_aligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {591; CHECK-LABEL: cmpxchg_i32_aligned_release_monotonic_weak:592; CHECK: bl __aarch64_cas4_rel593 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 4594 %r = extractvalue { i32, i1 } %pair, 0595 ret i32 %r596}597 598define dso_local i32 @cmpxchg_i32_aligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {599; CHECK-LABEL: cmpxchg_i32_aligned_release_acquire:600; CHECK: bl __aarch64_cas4_acq_rel601 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 4602 %r = extractvalue { i32, i1 } %pair, 0603 ret i32 %r604}605 606define dso_local i32 @cmpxchg_i32_aligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {607; CHECK-LABEL: cmpxchg_i32_aligned_release_acquire_weak:608; CHECK: bl __aarch64_cas4_acq_rel609 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 4610 %r = extractvalue { i32, i1 } %pair, 0611 ret i32 %r612}613 614define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {615; CHECK-LABEL: cmpxchg_i32_aligned_release_seq_cst:616; CHECK: bl __aarch64_cas4_acq_rel617 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4618 %r = extractvalue { i32, i1 } %pair, 0619 ret i32 %r620}621 622define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {623; CHECK-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak:624; CHECK: bl __aarch64_cas4_acq_rel625 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4626 %r = extractvalue { i32, i1 } %pair, 0627 ret i32 %r628}629 630define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {631; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic:632; CHECK: bl __aarch64_cas4_acq_rel633 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4634 %r = extractvalue { i32, i1 } %pair, 0635 ret i32 %r636}637 638define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {639; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak:640; CHECK: bl __aarch64_cas4_acq_rel641 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4642 %r = extractvalue { i32, i1 } %pair, 0643 ret i32 %r644}645 646define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {647; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_acquire:648; CHECK: bl __aarch64_cas4_acq_rel649 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4650 %r = extractvalue { i32, i1 } %pair, 0651 ret i32 %r652}653 654define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {655; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak:656; CHECK: bl __aarch64_cas4_acq_rel657 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4658 %r = extractvalue { i32, i1 } %pair, 0659 ret i32 %r660}661 662define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {663; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst:664; CHECK: bl __aarch64_cas4_acq_rel665 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4666 %r = extractvalue { i32, i1 } %pair, 0667 ret i32 %r668}669 670define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {671; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak:672; CHECK: bl __aarch64_cas4_acq_rel673 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4674 %r = extractvalue { i32, i1 } %pair, 0675 ret i32 %r676}677 678define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {679; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic:680; CHECK: bl __aarch64_cas4_acq_rel681 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4682 %r = extractvalue { i32, i1 } %pair, 0683 ret i32 %r684}685 686define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {687; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak:688; CHECK: bl __aarch64_cas4_acq_rel689 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4690 %r = extractvalue { i32, i1 } %pair, 0691 ret i32 %r692}693 694define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {695; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_acquire:696; CHECK: bl __aarch64_cas4_acq_rel697 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4698 %r = extractvalue { i32, i1 } %pair, 0699 ret i32 %r700}701 702define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {703; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak:704; CHECK: bl __aarch64_cas4_acq_rel705 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4706 %r = extractvalue { i32, i1 } %pair, 0707 ret i32 %r708}709 710define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {711; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst:712; CHECK: bl __aarch64_cas4_acq_rel713 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4714 %r = extractvalue { i32, i1 } %pair, 0715 ret i32 %r716}717 718define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {719; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak:720; CHECK: bl __aarch64_cas4_acq_rel721 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4722 %r = extractvalue { i32, i1 } %pair, 0723 ret i32 %r724}725 726define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {727; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_monotonic:728; CHECK: bl __aarch64_cas8_relax729 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8730 %r = extractvalue { i64, i1 } %pair, 0731 ret i64 %r732}733 734define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {735; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak:736; CHECK: bl __aarch64_cas8_relax737 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8738 %r = extractvalue { i64, i1 } %pair, 0739 ret i64 %r740}741 742define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {743; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_acquire:744; CHECK: bl __aarch64_cas8_acq745 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8746 %r = extractvalue { i64, i1 } %pair, 0747 ret i64 %r748}749 750define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {751; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak:752; CHECK: bl __aarch64_cas8_acq753 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8754 %r = extractvalue { i64, i1 } %pair, 0755 ret i64 %r756}757 758define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {759; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst:760; CHECK: bl __aarch64_cas8_acq_rel761 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8762 %r = extractvalue { i64, i1 } %pair, 0763 ret i64 %r764}765 766define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {767; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak:768; CHECK: bl __aarch64_cas8_acq_rel769 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8770 %r = extractvalue { i64, i1 } %pair, 0771 ret i64 %r772}773 774define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {775; CHECK-LABEL: cmpxchg_i64_aligned_acquire_monotonic:776; CHECK: bl __aarch64_cas8_acq777 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8778 %r = extractvalue { i64, i1 } %pair, 0779 ret i64 %r780}781 782define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {783; CHECK-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak:784; CHECK: bl __aarch64_cas8_acq785 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8786 %r = extractvalue { i64, i1 } %pair, 0787 ret i64 %r788}789 790define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {791; CHECK-LABEL: cmpxchg_i64_aligned_acquire_acquire:792; CHECK: bl __aarch64_cas8_acq793 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8794 %r = extractvalue { i64, i1 } %pair, 0795 ret i64 %r796}797 798define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {799; CHECK-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak:800; CHECK: bl __aarch64_cas8_acq801 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8802 %r = extractvalue { i64, i1 } %pair, 0803 ret i64 %r804}805 806define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {807; CHECK-LABEL: cmpxchg_i64_aligned_acquire_seq_cst:808; CHECK: bl __aarch64_cas8_acq_rel809 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8810 %r = extractvalue { i64, i1 } %pair, 0811 ret i64 %r812}813 814define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {815; CHECK-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak:816; CHECK: bl __aarch64_cas8_acq_rel817 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8818 %r = extractvalue { i64, i1 } %pair, 0819 ret i64 %r820}821 822define dso_local i64 @cmpxchg_i64_aligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {823; CHECK-LABEL: cmpxchg_i64_aligned_release_monotonic:824; CHECK: bl __aarch64_cas8_rel825 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 8826 %r = extractvalue { i64, i1 } %pair, 0827 ret i64 %r828}829 830define dso_local i64 @cmpxchg_i64_aligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {831; CHECK-LABEL: cmpxchg_i64_aligned_release_monotonic_weak:832; CHECK: bl __aarch64_cas8_rel833 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 8834 %r = extractvalue { i64, i1 } %pair, 0835 ret i64 %r836}837 838define dso_local i64 @cmpxchg_i64_aligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {839; CHECK-LABEL: cmpxchg_i64_aligned_release_acquire:840; CHECK: bl __aarch64_cas8_acq_rel841 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 8842 %r = extractvalue { i64, i1 } %pair, 0843 ret i64 %r844}845 846define dso_local i64 @cmpxchg_i64_aligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {847; CHECK-LABEL: cmpxchg_i64_aligned_release_acquire_weak:848; CHECK: bl __aarch64_cas8_acq_rel849 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 8850 %r = extractvalue { i64, i1 } %pair, 0851 ret i64 %r852}853 854define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {855; CHECK-LABEL: cmpxchg_i64_aligned_release_seq_cst:856; CHECK: bl __aarch64_cas8_acq_rel857 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8858 %r = extractvalue { i64, i1 } %pair, 0859 ret i64 %r860}861 862define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {863; CHECK-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak:864; CHECK: bl __aarch64_cas8_acq_rel865 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8866 %r = extractvalue { i64, i1 } %pair, 0867 ret i64 %r868}869 870define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {871; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic:872; CHECK: bl __aarch64_cas8_acq_rel873 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8874 %r = extractvalue { i64, i1 } %pair, 0875 ret i64 %r876}877 878define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {879; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak:880; CHECK: bl __aarch64_cas8_acq_rel881 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8882 %r = extractvalue { i64, i1 } %pair, 0883 ret i64 %r884}885 886define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {887; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_acquire:888; CHECK: bl __aarch64_cas8_acq_rel889 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8890 %r = extractvalue { i64, i1 } %pair, 0891 ret i64 %r892}893 894define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {895; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak:896; CHECK: bl __aarch64_cas8_acq_rel897 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8898 %r = extractvalue { i64, i1 } %pair, 0899 ret i64 %r900}901 902define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {903; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst:904; CHECK: bl __aarch64_cas8_acq_rel905 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8906 %r = extractvalue { i64, i1 } %pair, 0907 ret i64 %r908}909 910define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {911; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak:912; CHECK: bl __aarch64_cas8_acq_rel913 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8914 %r = extractvalue { i64, i1 } %pair, 0915 ret i64 %r916}917 918define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {919; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic:920; CHECK: bl __aarch64_cas8_acq_rel921 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8922 %r = extractvalue { i64, i1 } %pair, 0923 ret i64 %r924}925 926define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {927; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak:928; CHECK: bl __aarch64_cas8_acq_rel929 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8930 %r = extractvalue { i64, i1 } %pair, 0931 ret i64 %r932}933 934define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {935; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_acquire:936; CHECK: bl __aarch64_cas8_acq_rel937 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8938 %r = extractvalue { i64, i1 } %pair, 0939 ret i64 %r940}941 942define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {943; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak:944; CHECK: bl __aarch64_cas8_acq_rel945 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8946 %r = extractvalue { i64, i1 } %pair, 0947 ret i64 %r948}949 950define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {951; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst:952; CHECK: bl __aarch64_cas8_acq_rel953 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8954 %r = extractvalue { i64, i1 } %pair, 0955 ret i64 %r956}957 958define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {959; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak:960; CHECK: bl __aarch64_cas8_acq_rel961 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8962 %r = extractvalue { i64, i1 } %pair, 0963 ret i64 %r964}965 966define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {967; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_monotonic:968; CHECK: bl __aarch64_cas16_relax969 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16970 %r = extractvalue { i128, i1 } %pair, 0971 ret i128 %r972}973 974define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {975; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak:976; CHECK: bl __aarch64_cas16_relax977 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16978 %r = extractvalue { i128, i1 } %pair, 0979 ret i128 %r980}981 982define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {983; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_acquire:984; CHECK: bl __aarch64_cas16_acq985 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16986 %r = extractvalue { i128, i1 } %pair, 0987 ret i128 %r988}989 990define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {991; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak:992; CHECK: bl __aarch64_cas16_acq993 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16994 %r = extractvalue { i128, i1 } %pair, 0995 ret i128 %r996}997 998define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {999; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst:1000; CHECK: bl __aarch64_cas16_acq_rel1001 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 161002 %r = extractvalue { i128, i1 } %pair, 01003 ret i128 %r1004}1005 1006define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {1007; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak:1008; CHECK: bl __aarch64_cas16_acq_rel1009 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 161010 %r = extractvalue { i128, i1 } %pair, 01011 ret i128 %r1012}1013 1014define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {1015; CHECK-LABEL: cmpxchg_i128_aligned_acquire_monotonic:1016; CHECK: bl __aarch64_cas16_acq1017 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 161018 %r = extractvalue { i128, i1 } %pair, 01019 ret i128 %r1020}1021 1022define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {1023; CHECK-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak:1024; CHECK: bl __aarch64_cas16_acq1025 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 161026 %r = extractvalue { i128, i1 } %pair, 01027 ret i128 %r1028}1029 1030define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {1031; CHECK-LABEL: cmpxchg_i128_aligned_acquire_acquire:1032; CHECK: bl __aarch64_cas16_acq1033 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 161034 %r = extractvalue { i128, i1 } %pair, 01035 ret i128 %r1036}1037 1038define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {1039; CHECK-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak:1040; CHECK: bl __aarch64_cas16_acq1041 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 161042 %r = extractvalue { i128, i1 } %pair, 01043 ret i128 %r1044}1045 1046define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {1047; CHECK-LABEL: cmpxchg_i128_aligned_acquire_seq_cst:1048; CHECK: bl __aarch64_cas16_acq_rel1049 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 161050 %r = extractvalue { i128, i1 } %pair, 01051 ret i128 %r1052}1053 1054define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {1055; CHECK-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak:1056; CHECK: bl __aarch64_cas16_acq_rel1057 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 161058 %r = extractvalue { i128, i1 } %pair, 01059 ret i128 %r1060}1061 1062define dso_local i128 @cmpxchg_i128_aligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {1063; CHECK-LABEL: cmpxchg_i128_aligned_release_monotonic:1064; CHECK: bl __aarch64_cas16_rel1065 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 161066 %r = extractvalue { i128, i1 } %pair, 01067 ret i128 %r1068}1069 1070define dso_local i128 @cmpxchg_i128_aligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {1071; CHECK-LABEL: cmpxchg_i128_aligned_release_monotonic_weak:1072; CHECK: bl __aarch64_cas16_rel1073 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 161074 %r = extractvalue { i128, i1 } %pair, 01075 ret i128 %r1076}1077 1078define dso_local i128 @cmpxchg_i128_aligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {1079; CHECK-LABEL: cmpxchg_i128_aligned_release_acquire:1080; CHECK: bl __aarch64_cas16_acq_rel1081 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 161082 %r = extractvalue { i128, i1 } %pair, 01083 ret i128 %r1084}1085 1086define dso_local i128 @cmpxchg_i128_aligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {1087; CHECK-LABEL: cmpxchg_i128_aligned_release_acquire_weak:1088; CHECK: bl __aarch64_cas16_acq_rel1089 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 161090 %r = extractvalue { i128, i1 } %pair, 01091 ret i128 %r1092}1093 1094define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {1095; CHECK-LABEL: cmpxchg_i128_aligned_release_seq_cst:1096; CHECK: bl __aarch64_cas16_acq_rel1097 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 161098 %r = extractvalue { i128, i1 } %pair, 01099 ret i128 %r1100}1101 1102define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {1103; CHECK-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak:1104; CHECK: bl __aarch64_cas16_acq_rel1105 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 161106 %r = extractvalue { i128, i1 } %pair, 01107 ret i128 %r1108}1109 1110define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {1111; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic:1112; CHECK: bl __aarch64_cas16_acq_rel1113 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 161114 %r = extractvalue { i128, i1 } %pair, 01115 ret i128 %r1116}1117 1118define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {1119; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak:1120; CHECK: bl __aarch64_cas16_acq_rel1121 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 161122 %r = extractvalue { i128, i1 } %pair, 01123 ret i128 %r1124}1125 1126define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {1127; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_acquire:1128; CHECK: bl __aarch64_cas16_acq_rel1129 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 161130 %r = extractvalue { i128, i1 } %pair, 01131 ret i128 %r1132}1133 1134define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {1135; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak:1136; CHECK: bl __aarch64_cas16_acq_rel1137 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 161138 %r = extractvalue { i128, i1 } %pair, 01139 ret i128 %r1140}1141 1142define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {1143; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst:1144; CHECK: bl __aarch64_cas16_acq_rel1145 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 161146 %r = extractvalue { i128, i1 } %pair, 01147 ret i128 %r1148}1149 1150define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {1151; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak:1152; CHECK: bl __aarch64_cas16_acq_rel1153 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 161154 %r = extractvalue { i128, i1 } %pair, 01155 ret i128 %r1156}1157 1158define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {1159; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic:1160; CHECK: bl __aarch64_cas16_acq_rel1161 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 161162 %r = extractvalue { i128, i1 } %pair, 01163 ret i128 %r1164}1165 1166define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {1167; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak:1168; CHECK: bl __aarch64_cas16_acq_rel1169 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 161170 %r = extractvalue { i128, i1 } %pair, 01171 ret i128 %r1172}1173 1174define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {1175; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_acquire:1176; CHECK: bl __aarch64_cas16_acq_rel1177 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 161178 %r = extractvalue { i128, i1 } %pair, 01179 ret i128 %r1180}1181 1182define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {1183; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak:1184; CHECK: bl __aarch64_cas16_acq_rel1185 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 161186 %r = extractvalue { i128, i1 } %pair, 01187 ret i128 %r1188}1189 1190define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {1191; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst:1192; CHECK: bl __aarch64_cas16_acq_rel1193 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 161194 %r = extractvalue { i128, i1 } %pair, 01195 ret i128 %r1196}1197 1198define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {1199; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak:1200; CHECK: bl __aarch64_cas16_acq_rel1201 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 161202 %r = extractvalue { i128, i1 } %pair, 01203 ret i128 %r1204}1205 1206define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {1207; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic:1208; CHECK: bl __aarch64_cas1_relax1209 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 11210 %r = extractvalue { i8, i1 } %pair, 01211 ret i8 %r1212}1213 1214define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {1215; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak:1216; CHECK: bl __aarch64_cas1_relax1217 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 11218 %r = extractvalue { i8, i1 } %pair, 01219 ret i8 %r1220}1221 1222define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {1223; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire:1224; CHECK: bl __aarch64_cas1_acq1225 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 11226 %r = extractvalue { i8, i1 } %pair, 01227 ret i8 %r1228}1229 1230define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {1231; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak:1232; CHECK: bl __aarch64_cas1_acq1233 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 11234 %r = extractvalue { i8, i1 } %pair, 01235 ret i8 %r1236}1237 1238define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {1239; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst:1240; CHECK: bl __aarch64_cas1_acq_rel1241 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 11242 %r = extractvalue { i8, i1 } %pair, 01243 ret i8 %r1244}1245 1246define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {1247; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak:1248; CHECK: bl __aarch64_cas1_acq_rel1249 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 11250 %r = extractvalue { i8, i1 } %pair, 01251 ret i8 %r1252}1253 1254define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {1255; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic:1256; CHECK: bl __aarch64_cas1_acq1257 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 11258 %r = extractvalue { i8, i1 } %pair, 01259 ret i8 %r1260}1261 1262define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {1263; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak:1264; CHECK: bl __aarch64_cas1_acq1265 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 11266 %r = extractvalue { i8, i1 } %pair, 01267 ret i8 %r1268}1269 1270define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {1271; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire:1272; CHECK: bl __aarch64_cas1_acq1273 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 11274 %r = extractvalue { i8, i1 } %pair, 01275 ret i8 %r1276}1277 1278define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {1279; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak:1280; CHECK: bl __aarch64_cas1_acq1281 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 11282 %r = extractvalue { i8, i1 } %pair, 01283 ret i8 %r1284}1285 1286define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {1287; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst:1288; CHECK: bl __aarch64_cas1_acq_rel1289 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 11290 %r = extractvalue { i8, i1 } %pair, 01291 ret i8 %r1292}1293 1294define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {1295; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak:1296; CHECK: bl __aarch64_cas1_acq_rel1297 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 11298 %r = extractvalue { i8, i1 } %pair, 01299 ret i8 %r1300}1301 1302define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {1303; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic:1304; CHECK: bl __aarch64_cas1_rel1305 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 11306 %r = extractvalue { i8, i1 } %pair, 01307 ret i8 %r1308}1309 1310define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {1311; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak:1312; CHECK: bl __aarch64_cas1_rel1313 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 11314 %r = extractvalue { i8, i1 } %pair, 01315 ret i8 %r1316}1317 1318define dso_local i8 @cmpxchg_i8_unaligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {1319; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire:1320; CHECK: bl __aarch64_cas1_acq_rel1321 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 11322 %r = extractvalue { i8, i1 } %pair, 01323 ret i8 %r1324}1325 1326define dso_local i8 @cmpxchg_i8_unaligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {1327; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire_weak:1328; CHECK: bl __aarch64_cas1_acq_rel1329 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 11330 %r = extractvalue { i8, i1 } %pair, 01331 ret i8 %r1332}1333 1334define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {1335; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst:1336; CHECK: bl __aarch64_cas1_acq_rel1337 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 11338 %r = extractvalue { i8, i1 } %pair, 01339 ret i8 %r1340}1341 1342define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {1343; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak:1344; CHECK: bl __aarch64_cas1_acq_rel1345 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 11346 %r = extractvalue { i8, i1 } %pair, 01347 ret i8 %r1348}1349 1350define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {1351; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic:1352; CHECK: bl __aarch64_cas1_acq_rel1353 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 11354 %r = extractvalue { i8, i1 } %pair, 01355 ret i8 %r1356}1357 1358define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {1359; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak:1360; CHECK: bl __aarch64_cas1_acq_rel1361 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 11362 %r = extractvalue { i8, i1 } %pair, 01363 ret i8 %r1364}1365 1366define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {1367; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire:1368; CHECK: bl __aarch64_cas1_acq_rel1369 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 11370 %r = extractvalue { i8, i1 } %pair, 01371 ret i8 %r1372}1373 1374define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {1375; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak:1376; CHECK: bl __aarch64_cas1_acq_rel1377 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 11378 %r = extractvalue { i8, i1 } %pair, 01379 ret i8 %r1380}1381 1382define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {1383; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst:1384; CHECK: bl __aarch64_cas1_acq_rel1385 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 11386 %r = extractvalue { i8, i1 } %pair, 01387 ret i8 %r1388}1389 1390define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {1391; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak:1392; CHECK: bl __aarch64_cas1_acq_rel1393 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 11394 %r = extractvalue { i8, i1 } %pair, 01395 ret i8 %r1396}1397 1398define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {1399; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic:1400; CHECK: bl __aarch64_cas1_acq_rel1401 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 11402 %r = extractvalue { i8, i1 } %pair, 01403 ret i8 %r1404}1405 1406define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {1407; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak:1408; CHECK: bl __aarch64_cas1_acq_rel1409 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 11410 %r = extractvalue { i8, i1 } %pair, 01411 ret i8 %r1412}1413 1414define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {1415; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire:1416; CHECK: bl __aarch64_cas1_acq_rel1417 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 11418 %r = extractvalue { i8, i1 } %pair, 01419 ret i8 %r1420}1421 1422define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {1423; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak:1424; CHECK: bl __aarch64_cas1_acq_rel1425 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 11426 %r = extractvalue { i8, i1 } %pair, 01427 ret i8 %r1428}1429 1430define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {1431; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst:1432; CHECK: bl __aarch64_cas1_acq_rel1433 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 11434 %r = extractvalue { i8, i1 } %pair, 01435 ret i8 %r1436}1437 1438define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {1439; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak:1440; CHECK: bl __aarch64_cas1_acq_rel1441 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 11442 %r = extractvalue { i8, i1 } %pair, 01443 ret i8 %r1444}1445 1446define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {1447; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic:1448; CHECK: bl __atomic_compare_exchange1449 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 11450 %r = extractvalue { i16, i1 } %pair, 01451 ret i16 %r1452}1453 1454define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {1455; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic_weak:1456; CHECK: bl __atomic_compare_exchange1457 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 11458 %r = extractvalue { i16, i1 } %pair, 01459 ret i16 %r1460}1461 1462define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {1463; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire:1464; CHECK: bl __atomic_compare_exchange1465 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 11466 %r = extractvalue { i16, i1 } %pair, 01467 ret i16 %r1468}1469 1470define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {1471; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire_weak:1472; CHECK: bl __atomic_compare_exchange1473 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 11474 %r = extractvalue { i16, i1 } %pair, 01475 ret i16 %r1476}1477 1478define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {1479; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst:1480; CHECK: bl __atomic_compare_exchange1481 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 11482 %r = extractvalue { i16, i1 } %pair, 01483 ret i16 %r1484}1485 1486define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {1487; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst_weak:1488; CHECK: bl __atomic_compare_exchange1489 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 11490 %r = extractvalue { i16, i1 } %pair, 01491 ret i16 %r1492}1493 1494define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {1495; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic:1496; CHECK: bl __atomic_compare_exchange1497 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 11498 %r = extractvalue { i16, i1 } %pair, 01499 ret i16 %r1500}1501 1502define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {1503; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic_weak:1504; CHECK: bl __atomic_compare_exchange1505 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 11506 %r = extractvalue { i16, i1 } %pair, 01507 ret i16 %r1508}1509 1510define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {1511; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire:1512; CHECK: bl __atomic_compare_exchange1513 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 11514 %r = extractvalue { i16, i1 } %pair, 01515 ret i16 %r1516}1517 1518define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {1519; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire_weak:1520; CHECK: bl __atomic_compare_exchange1521 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 11522 %r = extractvalue { i16, i1 } %pair, 01523 ret i16 %r1524}1525 1526define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {1527; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst:1528; CHECK: bl __atomic_compare_exchange1529 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 11530 %r = extractvalue { i16, i1 } %pair, 01531 ret i16 %r1532}1533 1534define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {1535; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst_weak:1536; CHECK: bl __atomic_compare_exchange1537 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 11538 %r = extractvalue { i16, i1 } %pair, 01539 ret i16 %r1540}1541 1542define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {1543; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic:1544; CHECK: bl __atomic_compare_exchange1545 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 11546 %r = extractvalue { i16, i1 } %pair, 01547 ret i16 %r1548}1549 1550define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {1551; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic_weak:1552; CHECK: bl __atomic_compare_exchange1553 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 11554 %r = extractvalue { i16, i1 } %pair, 01555 ret i16 %r1556}1557 1558define dso_local i16 @cmpxchg_i16_unaligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {1559; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire:1560; CHECK: bl __atomic_compare_exchange1561 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 11562 %r = extractvalue { i16, i1 } %pair, 01563 ret i16 %r1564}1565 1566define dso_local i16 @cmpxchg_i16_unaligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {1567; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire_weak:1568; CHECK: bl __atomic_compare_exchange1569 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 11570 %r = extractvalue { i16, i1 } %pair, 01571 ret i16 %r1572}1573 1574define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {1575; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst:1576; CHECK: bl __atomic_compare_exchange1577 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 11578 %r = extractvalue { i16, i1 } %pair, 01579 ret i16 %r1580}1581 1582define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {1583; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst_weak:1584; CHECK: bl __atomic_compare_exchange1585 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 11586 %r = extractvalue { i16, i1 } %pair, 01587 ret i16 %r1588}1589 1590define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {1591; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic:1592; CHECK: bl __atomic_compare_exchange1593 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 11594 %r = extractvalue { i16, i1 } %pair, 01595 ret i16 %r1596}1597 1598define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {1599; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic_weak:1600; CHECK: bl __atomic_compare_exchange1601 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 11602 %r = extractvalue { i16, i1 } %pair, 01603 ret i16 %r1604}1605 1606define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {1607; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire:1608; CHECK: bl __atomic_compare_exchange1609 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 11610 %r = extractvalue { i16, i1 } %pair, 01611 ret i16 %r1612}1613 1614define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {1615; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire_weak:1616; CHECK: bl __atomic_compare_exchange1617 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 11618 %r = extractvalue { i16, i1 } %pair, 01619 ret i16 %r1620}1621 1622define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {1623; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst:1624; CHECK: bl __atomic_compare_exchange1625 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 11626 %r = extractvalue { i16, i1 } %pair, 01627 ret i16 %r1628}1629 1630define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {1631; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst_weak:1632; CHECK: bl __atomic_compare_exchange1633 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 11634 %r = extractvalue { i16, i1 } %pair, 01635 ret i16 %r1636}1637 1638define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {1639; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic:1640; CHECK: bl __atomic_compare_exchange1641 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 11642 %r = extractvalue { i16, i1 } %pair, 01643 ret i16 %r1644}1645 1646define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {1647; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic_weak:1648; CHECK: bl __atomic_compare_exchange1649 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 11650 %r = extractvalue { i16, i1 } %pair, 01651 ret i16 %r1652}1653 1654define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {1655; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire:1656; CHECK: bl __atomic_compare_exchange1657 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 11658 %r = extractvalue { i16, i1 } %pair, 01659 ret i16 %r1660}1661 1662define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {1663; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire_weak:1664; CHECK: bl __atomic_compare_exchange1665 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 11666 %r = extractvalue { i16, i1 } %pair, 01667 ret i16 %r1668}1669 1670define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {1671; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst:1672; CHECK: bl __atomic_compare_exchange1673 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 11674 %r = extractvalue { i16, i1 } %pair, 01675 ret i16 %r1676}1677 1678define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {1679; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst_weak:1680; CHECK: bl __atomic_compare_exchange1681 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 11682 %r = extractvalue { i16, i1 } %pair, 01683 ret i16 %r1684}1685 1686define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {1687; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic:1688; CHECK: bl __atomic_compare_exchange1689 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 11690 %r = extractvalue { i32, i1 } %pair, 01691 ret i32 %r1692}1693 1694define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {1695; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic_weak:1696; CHECK: bl __atomic_compare_exchange1697 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 11698 %r = extractvalue { i32, i1 } %pair, 01699 ret i32 %r1700}1701 1702define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {1703; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire:1704; CHECK: bl __atomic_compare_exchange1705 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 11706 %r = extractvalue { i32, i1 } %pair, 01707 ret i32 %r1708}1709 1710define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {1711; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire_weak:1712; CHECK: bl __atomic_compare_exchange1713 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 11714 %r = extractvalue { i32, i1 } %pair, 01715 ret i32 %r1716}1717 1718define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {1719; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst:1720; CHECK: bl __atomic_compare_exchange1721 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 11722 %r = extractvalue { i32, i1 } %pair, 01723 ret i32 %r1724}1725 1726define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1727; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst_weak:1728; CHECK: bl __atomic_compare_exchange1729 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 11730 %r = extractvalue { i32, i1 } %pair, 01731 ret i32 %r1732}1733 1734define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {1735; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic:1736; CHECK: bl __atomic_compare_exchange1737 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 11738 %r = extractvalue { i32, i1 } %pair, 01739 ret i32 %r1740}1741 1742define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {1743; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic_weak:1744; CHECK: bl __atomic_compare_exchange1745 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 11746 %r = extractvalue { i32, i1 } %pair, 01747 ret i32 %r1748}1749 1750define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {1751; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire:1752; CHECK: bl __atomic_compare_exchange1753 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 11754 %r = extractvalue { i32, i1 } %pair, 01755 ret i32 %r1756}1757 1758define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {1759; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire_weak:1760; CHECK: bl __atomic_compare_exchange1761 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 11762 %r = extractvalue { i32, i1 } %pair, 01763 ret i32 %r1764}1765 1766define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {1767; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst:1768; CHECK: bl __atomic_compare_exchange1769 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 11770 %r = extractvalue { i32, i1 } %pair, 01771 ret i32 %r1772}1773 1774define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1775; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst_weak:1776; CHECK: bl __atomic_compare_exchange1777 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 11778 %r = extractvalue { i32, i1 } %pair, 01779 ret i32 %r1780}1781 1782define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {1783; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic:1784; CHECK: bl __atomic_compare_exchange1785 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 11786 %r = extractvalue { i32, i1 } %pair, 01787 ret i32 %r1788}1789 1790define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {1791; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic_weak:1792; CHECK: bl __atomic_compare_exchange1793 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 11794 %r = extractvalue { i32, i1 } %pair, 01795 ret i32 %r1796}1797 1798define dso_local i32 @cmpxchg_i32_unaligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {1799; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire:1800; CHECK: bl __atomic_compare_exchange1801 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 11802 %r = extractvalue { i32, i1 } %pair, 01803 ret i32 %r1804}1805 1806define dso_local i32 @cmpxchg_i32_unaligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {1807; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire_weak:1808; CHECK: bl __atomic_compare_exchange1809 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 11810 %r = extractvalue { i32, i1 } %pair, 01811 ret i32 %r1812}1813 1814define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {1815; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst:1816; CHECK: bl __atomic_compare_exchange1817 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 11818 %r = extractvalue { i32, i1 } %pair, 01819 ret i32 %r1820}1821 1822define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1823; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst_weak:1824; CHECK: bl __atomic_compare_exchange1825 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 11826 %r = extractvalue { i32, i1 } %pair, 01827 ret i32 %r1828}1829 1830define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {1831; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic:1832; CHECK: bl __atomic_compare_exchange1833 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 11834 %r = extractvalue { i32, i1 } %pair, 01835 ret i32 %r1836}1837 1838define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {1839; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic_weak:1840; CHECK: bl __atomic_compare_exchange1841 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 11842 %r = extractvalue { i32, i1 } %pair, 01843 ret i32 %r1844}1845 1846define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {1847; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire:1848; CHECK: bl __atomic_compare_exchange1849 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 11850 %r = extractvalue { i32, i1 } %pair, 01851 ret i32 %r1852}1853 1854define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {1855; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire_weak:1856; CHECK: bl __atomic_compare_exchange1857 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 11858 %r = extractvalue { i32, i1 } %pair, 01859 ret i32 %r1860}1861 1862define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {1863; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst:1864; CHECK: bl __atomic_compare_exchange1865 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 11866 %r = extractvalue { i32, i1 } %pair, 01867 ret i32 %r1868}1869 1870define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1871; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst_weak:1872; CHECK: bl __atomic_compare_exchange1873 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 11874 %r = extractvalue { i32, i1 } %pair, 01875 ret i32 %r1876}1877 1878define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {1879; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic:1880; CHECK: bl __atomic_compare_exchange1881 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 11882 %r = extractvalue { i32, i1 } %pair, 01883 ret i32 %r1884}1885 1886define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {1887; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic_weak:1888; CHECK: bl __atomic_compare_exchange1889 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 11890 %r = extractvalue { i32, i1 } %pair, 01891 ret i32 %r1892}1893 1894define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {1895; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire:1896; CHECK: bl __atomic_compare_exchange1897 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 11898 %r = extractvalue { i32, i1 } %pair, 01899 ret i32 %r1900}1901 1902define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {1903; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire_weak:1904; CHECK: bl __atomic_compare_exchange1905 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 11906 %r = extractvalue { i32, i1 } %pair, 01907 ret i32 %r1908}1909 1910define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {1911; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst:1912; CHECK: bl __atomic_compare_exchange1913 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 11914 %r = extractvalue { i32, i1 } %pair, 01915 ret i32 %r1916}1917 1918define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1919; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst_weak:1920; CHECK: bl __atomic_compare_exchange1921 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 11922 %r = extractvalue { i32, i1 } %pair, 01923 ret i32 %r1924}1925 1926define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {1927; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic:1928; CHECK: bl __atomic_compare_exchange1929 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 11930 %r = extractvalue { i64, i1 } %pair, 01931 ret i64 %r1932}1933 1934define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {1935; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic_weak:1936; CHECK: bl __atomic_compare_exchange1937 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 11938 %r = extractvalue { i64, i1 } %pair, 01939 ret i64 %r1940}1941 1942define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {1943; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire:1944; CHECK: bl __atomic_compare_exchange1945 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 11946 %r = extractvalue { i64, i1 } %pair, 01947 ret i64 %r1948}1949 1950define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {1951; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire_weak:1952; CHECK: bl __atomic_compare_exchange1953 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 11954 %r = extractvalue { i64, i1 } %pair, 01955 ret i64 %r1956}1957 1958define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {1959; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst:1960; CHECK: bl __atomic_compare_exchange1961 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 11962 %r = extractvalue { i64, i1 } %pair, 01963 ret i64 %r1964}1965 1966define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {1967; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst_weak:1968; CHECK: bl __atomic_compare_exchange1969 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 11970 %r = extractvalue { i64, i1 } %pair, 01971 ret i64 %r1972}1973 1974define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {1975; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic:1976; CHECK: bl __atomic_compare_exchange1977 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 11978 %r = extractvalue { i64, i1 } %pair, 01979 ret i64 %r1980}1981 1982define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {1983; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic_weak:1984; CHECK: bl __atomic_compare_exchange1985 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 11986 %r = extractvalue { i64, i1 } %pair, 01987 ret i64 %r1988}1989 1990define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {1991; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire:1992; CHECK: bl __atomic_compare_exchange1993 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 11994 %r = extractvalue { i64, i1 } %pair, 01995 ret i64 %r1996}1997 1998define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {1999; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire_weak:2000; CHECK: bl __atomic_compare_exchange2001 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 12002 %r = extractvalue { i64, i1 } %pair, 02003 ret i64 %r2004}2005 2006define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {2007; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst:2008; CHECK: bl __atomic_compare_exchange2009 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 12010 %r = extractvalue { i64, i1 } %pair, 02011 ret i64 %r2012}2013 2014define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {2015; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst_weak:2016; CHECK: bl __atomic_compare_exchange2017 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 12018 %r = extractvalue { i64, i1 } %pair, 02019 ret i64 %r2020}2021 2022define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {2023; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic:2024; CHECK: bl __atomic_compare_exchange2025 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 12026 %r = extractvalue { i64, i1 } %pair, 02027 ret i64 %r2028}2029 2030define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {2031; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic_weak:2032; CHECK: bl __atomic_compare_exchange2033 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 12034 %r = extractvalue { i64, i1 } %pair, 02035 ret i64 %r2036}2037 2038define dso_local i64 @cmpxchg_i64_unaligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {2039; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire:2040; CHECK: bl __atomic_compare_exchange2041 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 12042 %r = extractvalue { i64, i1 } %pair, 02043 ret i64 %r2044}2045 2046define dso_local i64 @cmpxchg_i64_unaligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {2047; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire_weak:2048; CHECK: bl __atomic_compare_exchange2049 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 12050 %r = extractvalue { i64, i1 } %pair, 02051 ret i64 %r2052}2053 2054define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {2055; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst:2056; CHECK: bl __atomic_compare_exchange2057 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 12058 %r = extractvalue { i64, i1 } %pair, 02059 ret i64 %r2060}2061 2062define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {2063; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst_weak:2064; CHECK: bl __atomic_compare_exchange2065 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 12066 %r = extractvalue { i64, i1 } %pair, 02067 ret i64 %r2068}2069 2070define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {2071; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic:2072; CHECK: bl __atomic_compare_exchange2073 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 12074 %r = extractvalue { i64, i1 } %pair, 02075 ret i64 %r2076}2077 2078define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {2079; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic_weak:2080; CHECK: bl __atomic_compare_exchange2081 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 12082 %r = extractvalue { i64, i1 } %pair, 02083 ret i64 %r2084}2085 2086define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {2087; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire:2088; CHECK: bl __atomic_compare_exchange2089 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 12090 %r = extractvalue { i64, i1 } %pair, 02091 ret i64 %r2092}2093 2094define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {2095; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire_weak:2096; CHECK: bl __atomic_compare_exchange2097 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 12098 %r = extractvalue { i64, i1 } %pair, 02099 ret i64 %r2100}2101 2102define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {2103; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst:2104; CHECK: bl __atomic_compare_exchange2105 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 12106 %r = extractvalue { i64, i1 } %pair, 02107 ret i64 %r2108}2109 2110define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {2111; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst_weak:2112; CHECK: bl __atomic_compare_exchange2113 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 12114 %r = extractvalue { i64, i1 } %pair, 02115 ret i64 %r2116}2117 2118define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {2119; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic:2120; CHECK: bl __atomic_compare_exchange2121 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 12122 %r = extractvalue { i64, i1 } %pair, 02123 ret i64 %r2124}2125 2126define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {2127; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic_weak:2128; CHECK: bl __atomic_compare_exchange2129 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 12130 %r = extractvalue { i64, i1 } %pair, 02131 ret i64 %r2132}2133 2134define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {2135; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire:2136; CHECK: bl __atomic_compare_exchange2137 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 12138 %r = extractvalue { i64, i1 } %pair, 02139 ret i64 %r2140}2141 2142define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {2143; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire_weak:2144; CHECK: bl __atomic_compare_exchange2145 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 12146 %r = extractvalue { i64, i1 } %pair, 02147 ret i64 %r2148}2149 2150define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {2151; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst:2152; CHECK: bl __atomic_compare_exchange2153 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 12154 %r = extractvalue { i64, i1 } %pair, 02155 ret i64 %r2156}2157 2158define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {2159; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst_weak:2160; CHECK: bl __atomic_compare_exchange2161 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 12162 %r = extractvalue { i64, i1 } %pair, 02163 ret i64 %r2164}2165 2166define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {2167; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic:2168; CHECK: bl __atomic_compare_exchange2169 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 12170 %r = extractvalue { i128, i1 } %pair, 02171 ret i128 %r2172}2173 2174define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {2175; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic_weak:2176; CHECK: bl __atomic_compare_exchange2177 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 12178 %r = extractvalue { i128, i1 } %pair, 02179 ret i128 %r2180}2181 2182define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {2183; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire:2184; CHECK: bl __atomic_compare_exchange2185 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 12186 %r = extractvalue { i128, i1 } %pair, 02187 ret i128 %r2188}2189 2190define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {2191; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire_weak:2192; CHECK: bl __atomic_compare_exchange2193 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 12194 %r = extractvalue { i128, i1 } %pair, 02195 ret i128 %r2196}2197 2198define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {2199; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst:2200; CHECK: bl __atomic_compare_exchange2201 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 12202 %r = extractvalue { i128, i1 } %pair, 02203 ret i128 %r2204}2205 2206define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {2207; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst_weak:2208; CHECK: bl __atomic_compare_exchange2209 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 12210 %r = extractvalue { i128, i1 } %pair, 02211 ret i128 %r2212}2213 2214define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {2215; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic:2216; CHECK: bl __atomic_compare_exchange2217 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 12218 %r = extractvalue { i128, i1 } %pair, 02219 ret i128 %r2220}2221 2222define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {2223; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic_weak:2224; CHECK: bl __atomic_compare_exchange2225 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 12226 %r = extractvalue { i128, i1 } %pair, 02227 ret i128 %r2228}2229 2230define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {2231; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire:2232; CHECK: bl __atomic_compare_exchange2233 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 12234 %r = extractvalue { i128, i1 } %pair, 02235 ret i128 %r2236}2237 2238define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {2239; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire_weak:2240; CHECK: bl __atomic_compare_exchange2241 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 12242 %r = extractvalue { i128, i1 } %pair, 02243 ret i128 %r2244}2245 2246define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {2247; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst:2248; CHECK: bl __atomic_compare_exchange2249 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 12250 %r = extractvalue { i128, i1 } %pair, 02251 ret i128 %r2252}2253 2254define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {2255; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst_weak:2256; CHECK: bl __atomic_compare_exchange2257 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 12258 %r = extractvalue { i128, i1 } %pair, 02259 ret i128 %r2260}2261 2262define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {2263; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic:2264; CHECK: bl __atomic_compare_exchange2265 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 12266 %r = extractvalue { i128, i1 } %pair, 02267 ret i128 %r2268}2269 2270define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {2271; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic_weak:2272; CHECK: bl __atomic_compare_exchange2273 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 12274 %r = extractvalue { i128, i1 } %pair, 02275 ret i128 %r2276}2277 2278define dso_local i128 @cmpxchg_i128_unaligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {2279; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire:2280; CHECK: bl __atomic_compare_exchange2281 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 12282 %r = extractvalue { i128, i1 } %pair, 02283 ret i128 %r2284}2285 2286define dso_local i128 @cmpxchg_i128_unaligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {2287; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire_weak:2288; CHECK: bl __atomic_compare_exchange2289 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 12290 %r = extractvalue { i128, i1 } %pair, 02291 ret i128 %r2292}2293 2294define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {2295; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst:2296; CHECK: bl __atomic_compare_exchange2297 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 12298 %r = extractvalue { i128, i1 } %pair, 02299 ret i128 %r2300}2301 2302define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {2303; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst_weak:2304; CHECK: bl __atomic_compare_exchange2305 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 12306 %r = extractvalue { i128, i1 } %pair, 02307 ret i128 %r2308}2309 2310define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {2311; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic:2312; CHECK: bl __atomic_compare_exchange2313 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 12314 %r = extractvalue { i128, i1 } %pair, 02315 ret i128 %r2316}2317 2318define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {2319; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic_weak:2320; CHECK: bl __atomic_compare_exchange2321 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 12322 %r = extractvalue { i128, i1 } %pair, 02323 ret i128 %r2324}2325 2326define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {2327; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire:2328; CHECK: bl __atomic_compare_exchange2329 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 12330 %r = extractvalue { i128, i1 } %pair, 02331 ret i128 %r2332}2333 2334define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {2335; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire_weak:2336; CHECK: bl __atomic_compare_exchange2337 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 12338 %r = extractvalue { i128, i1 } %pair, 02339 ret i128 %r2340}2341 2342define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {2343; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst:2344; CHECK: bl __atomic_compare_exchange2345 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 12346 %r = extractvalue { i128, i1 } %pair, 02347 ret i128 %r2348}2349 2350define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {2351; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst_weak:2352; CHECK: bl __atomic_compare_exchange2353 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 12354 %r = extractvalue { i128, i1 } %pair, 02355 ret i128 %r2356}2357 2358define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {2359; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic:2360; CHECK: bl __atomic_compare_exchange2361 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 12362 %r = extractvalue { i128, i1 } %pair, 02363 ret i128 %r2364}2365 2366define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {2367; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic_weak:2368; CHECK: bl __atomic_compare_exchange2369 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 12370 %r = extractvalue { i128, i1 } %pair, 02371 ret i128 %r2372}2373 2374define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {2375; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire:2376; CHECK: bl __atomic_compare_exchange2377 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 12378 %r = extractvalue { i128, i1 } %pair, 02379 ret i128 %r2380}2381 2382define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {2383; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire_weak:2384; CHECK: bl __atomic_compare_exchange2385 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 12386 %r = extractvalue { i128, i1 } %pair, 02387 ret i128 %r2388}2389 2390define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {2391; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst:2392; CHECK: bl __atomic_compare_exchange2393 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 12394 %r = extractvalue { i128, i1 } %pair, 02395 ret i128 %r2396}2397 2398define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {2399; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst_weak:2400; CHECK: bl __atomic_compare_exchange2401 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 12402 %r = extractvalue { i128, i1 } %pair, 02403 ret i128 %r2404}2405;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:2406; -O0: {{.*}}2407; -O1: {{.*}}2408