7275 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_be -mattr=+outline-atomics -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+outline-atomics -O1 | FileCheck %s --check-prefixes=CHECK,-O15 6define dso_local i8 @atomicrmw_xchg_i8_aligned_monotonic(ptr %ptr, i8 %value) {7; CHECK-LABEL: atomicrmw_xchg_i8_aligned_monotonic:8; CHECK: bl __aarch64_swp1_relax9 %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 110 ret i8 %r11}12 13define dso_local i8 @atomicrmw_xchg_i8_aligned_acquire(ptr %ptr, i8 %value) {14; CHECK-LABEL: atomicrmw_xchg_i8_aligned_acquire:15; CHECK: bl __aarch64_swp1_acq16 %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 117 ret i8 %r18}19 20define dso_local i8 @atomicrmw_xchg_i8_aligned_release(ptr %ptr, i8 %value) {21; CHECK-LABEL: atomicrmw_xchg_i8_aligned_release:22; CHECK: bl __aarch64_swp1_rel23 %r = atomicrmw xchg ptr %ptr, i8 %value release, align 124 ret i8 %r25}26 27define dso_local i8 @atomicrmw_xchg_i8_aligned_acq_rel(ptr %ptr, i8 %value) {28; CHECK-LABEL: atomicrmw_xchg_i8_aligned_acq_rel:29; CHECK: bl __aarch64_swp1_acq_rel30 %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 131 ret i8 %r32}33 34define dso_local i8 @atomicrmw_xchg_i8_aligned_seq_cst(ptr %ptr, i8 %value) {35; CHECK-LABEL: atomicrmw_xchg_i8_aligned_seq_cst:36; CHECK: bl __aarch64_swp1_acq_rel37 %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 138 ret i8 %r39}40 41define dso_local i16 @atomicrmw_xchg_i16_aligned_monotonic(ptr %ptr, i16 %value) {42; CHECK-LABEL: atomicrmw_xchg_i16_aligned_monotonic:43; CHECK: bl __aarch64_swp2_relax44 %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 245 ret i16 %r46}47 48define dso_local i16 @atomicrmw_xchg_i16_aligned_acquire(ptr %ptr, i16 %value) {49; CHECK-LABEL: atomicrmw_xchg_i16_aligned_acquire:50; CHECK: bl __aarch64_swp2_acq51 %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 252 ret i16 %r53}54 55define dso_local i16 @atomicrmw_xchg_i16_aligned_release(ptr %ptr, i16 %value) {56; CHECK-LABEL: atomicrmw_xchg_i16_aligned_release:57; CHECK: bl __aarch64_swp2_rel58 %r = atomicrmw xchg ptr %ptr, i16 %value release, align 259 ret i16 %r60}61 62define dso_local i16 @atomicrmw_xchg_i16_aligned_acq_rel(ptr %ptr, i16 %value) {63; CHECK-LABEL: atomicrmw_xchg_i16_aligned_acq_rel:64; CHECK: bl __aarch64_swp2_acq_rel65 %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 266 ret i16 %r67}68 69define dso_local i16 @atomicrmw_xchg_i16_aligned_seq_cst(ptr %ptr, i16 %value) {70; CHECK-LABEL: atomicrmw_xchg_i16_aligned_seq_cst:71; CHECK: bl __aarch64_swp2_acq_rel72 %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 273 ret i16 %r74}75 76define dso_local i32 @atomicrmw_xchg_i32_aligned_monotonic(ptr %ptr, i32 %value) {77; CHECK-LABEL: atomicrmw_xchg_i32_aligned_monotonic:78; CHECK: bl __aarch64_swp4_relax79 %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 480 ret i32 %r81}82 83define dso_local i32 @atomicrmw_xchg_i32_aligned_acquire(ptr %ptr, i32 %value) {84; CHECK-LABEL: atomicrmw_xchg_i32_aligned_acquire:85; CHECK: bl __aarch64_swp4_acq86 %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 487 ret i32 %r88}89 90define dso_local i32 @atomicrmw_xchg_i32_aligned_release(ptr %ptr, i32 %value) {91; CHECK-LABEL: atomicrmw_xchg_i32_aligned_release:92; CHECK: bl __aarch64_swp4_rel93 %r = atomicrmw xchg ptr %ptr, i32 %value release, align 494 ret i32 %r95}96 97define dso_local i32 @atomicrmw_xchg_i32_aligned_acq_rel(ptr %ptr, i32 %value) {98; CHECK-LABEL: atomicrmw_xchg_i32_aligned_acq_rel:99; CHECK: bl __aarch64_swp4_acq_rel100 %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 4101 ret i32 %r102}103 104define dso_local i32 @atomicrmw_xchg_i32_aligned_seq_cst(ptr %ptr, i32 %value) {105; CHECK-LABEL: atomicrmw_xchg_i32_aligned_seq_cst:106; CHECK: bl __aarch64_swp4_acq_rel107 %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 4108 ret i32 %r109}110 111define dso_local i64 @atomicrmw_xchg_i64_aligned_monotonic(ptr %ptr, i64 %value) {112; CHECK-LABEL: atomicrmw_xchg_i64_aligned_monotonic:113; CHECK: bl __aarch64_swp8_relax114 %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 8115 ret i64 %r116}117 118define dso_local i64 @atomicrmw_xchg_i64_aligned_acquire(ptr %ptr, i64 %value) {119; CHECK-LABEL: atomicrmw_xchg_i64_aligned_acquire:120; CHECK: bl __aarch64_swp8_acq121 %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 8122 ret i64 %r123}124 125define dso_local i64 @atomicrmw_xchg_i64_aligned_release(ptr %ptr, i64 %value) {126; CHECK-LABEL: atomicrmw_xchg_i64_aligned_release:127; CHECK: bl __aarch64_swp8_rel128 %r = atomicrmw xchg ptr %ptr, i64 %value release, align 8129 ret i64 %r130}131 132define dso_local i64 @atomicrmw_xchg_i64_aligned_acq_rel(ptr %ptr, i64 %value) {133; CHECK-LABEL: atomicrmw_xchg_i64_aligned_acq_rel:134; CHECK: bl __aarch64_swp8_acq_rel135 %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 8136 ret i64 %r137}138 139define dso_local i64 @atomicrmw_xchg_i64_aligned_seq_cst(ptr %ptr, i64 %value) {140; CHECK-LABEL: atomicrmw_xchg_i64_aligned_seq_cst:141; CHECK: bl __aarch64_swp8_acq_rel142 %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 8143 ret i64 %r144}145 146define dso_local i128 @atomicrmw_xchg_i128_aligned_monotonic(ptr %ptr, i128 %value) {147; -O0-LABEL: atomicrmw_xchg_i128_aligned_monotonic:148; -O0: bl __aarch64_cas16_relax149; -O0: subs x10, x10, x11150; -O0: ccmp x8, x9, #0, eq151;152; -O1-LABEL: atomicrmw_xchg_i128_aligned_monotonic:153; -O1: ldxp x1, x8, [x0]154; -O1: stxp w9, x3, x2, [x0]155 %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 16156 ret i128 %r157}158 159define dso_local i128 @atomicrmw_xchg_i128_aligned_acquire(ptr %ptr, i128 %value) {160; -O0-LABEL: atomicrmw_xchg_i128_aligned_acquire:161; -O0: bl __aarch64_cas16_acq162; -O0: subs x10, x10, x11163; -O0: ccmp x8, x9, #0, eq164;165; -O1-LABEL: atomicrmw_xchg_i128_aligned_acquire:166; -O1: ldaxp x1, x8, [x0]167; -O1: stxp w9, x3, x2, [x0]168 %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 16169 ret i128 %r170}171 172define dso_local i128 @atomicrmw_xchg_i128_aligned_release(ptr %ptr, i128 %value) {173; -O0-LABEL: atomicrmw_xchg_i128_aligned_release:174; -O0: bl __aarch64_cas16_rel175; -O0: subs x10, x10, x11176; -O0: ccmp x8, x9, #0, eq177;178; -O1-LABEL: atomicrmw_xchg_i128_aligned_release:179; -O1: ldxp x1, x8, [x0]180; -O1: stlxp w9, x3, x2, [x0]181 %r = atomicrmw xchg ptr %ptr, i128 %value release, align 16182 ret i128 %r183}184 185define dso_local i128 @atomicrmw_xchg_i128_aligned_acq_rel(ptr %ptr, i128 %value) {186; -O0-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:187; -O0: bl __aarch64_cas16_acq_rel188; -O0: subs x10, x10, x11189; -O0: ccmp x8, x9, #0, eq190;191; -O1-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:192; -O1: ldaxp x1, x8, [x0]193; -O1: stlxp w9, x3, x2, [x0]194 %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 16195 ret i128 %r196}197 198define dso_local i128 @atomicrmw_xchg_i128_aligned_seq_cst(ptr %ptr, i128 %value) {199; -O0-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:200; -O0: bl __aarch64_cas16_acq_rel201; -O0: subs x10, x10, x11202; -O0: ccmp x8, x9, #0, eq203;204; -O1-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:205; -O1: ldaxp x1, x8, [x0]206; -O1: stlxp w9, x3, x2, [x0]207 %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 16208 ret i128 %r209}210 211define dso_local i8 @atomicrmw_xchg_i8_unaligned_monotonic(ptr %ptr, i8 %value) {212; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_monotonic:213; CHECK: bl __aarch64_swp1_relax214 %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 1215 ret i8 %r216}217 218define dso_local i8 @atomicrmw_xchg_i8_unaligned_acquire(ptr %ptr, i8 %value) {219; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acquire:220; CHECK: bl __aarch64_swp1_acq221 %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 1222 ret i8 %r223}224 225define dso_local i8 @atomicrmw_xchg_i8_unaligned_release(ptr %ptr, i8 %value) {226; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_release:227; CHECK: bl __aarch64_swp1_rel228 %r = atomicrmw xchg ptr %ptr, i8 %value release, align 1229 ret i8 %r230}231 232define dso_local i8 @atomicrmw_xchg_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {233; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel:234; CHECK: bl __aarch64_swp1_acq_rel235 %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 1236 ret i8 %r237}238 239define dso_local i8 @atomicrmw_xchg_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {240; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst:241; CHECK: bl __aarch64_swp1_acq_rel242 %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 1243 ret i8 %r244}245 246define dso_local i16 @atomicrmw_xchg_i16_unaligned_monotonic(ptr %ptr, i16 %value) {247; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_monotonic:248; CHECK: bl __atomic_exchange249 %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 1250 ret i16 %r251}252 253define dso_local i16 @atomicrmw_xchg_i16_unaligned_acquire(ptr %ptr, i16 %value) {254; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acquire:255; CHECK: bl __atomic_exchange256 %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 1257 ret i16 %r258}259 260define dso_local i16 @atomicrmw_xchg_i16_unaligned_release(ptr %ptr, i16 %value) {261; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_release:262; CHECK: bl __atomic_exchange263 %r = atomicrmw xchg ptr %ptr, i16 %value release, align 1264 ret i16 %r265}266 267define dso_local i16 @atomicrmw_xchg_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {268; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acq_rel:269; CHECK: bl __atomic_exchange270 %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 1271 ret i16 %r272}273 274define dso_local i16 @atomicrmw_xchg_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {275; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_seq_cst:276; CHECK: bl __atomic_exchange277 %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 1278 ret i16 %r279}280 281define dso_local i32 @atomicrmw_xchg_i32_unaligned_monotonic(ptr %ptr, i32 %value) {282; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_monotonic:283; CHECK: bl __atomic_exchange284 %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 1285 ret i32 %r286}287 288define dso_local i32 @atomicrmw_xchg_i32_unaligned_acquire(ptr %ptr, i32 %value) {289; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acquire:290; CHECK: bl __atomic_exchange291 %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 1292 ret i32 %r293}294 295define dso_local i32 @atomicrmw_xchg_i32_unaligned_release(ptr %ptr, i32 %value) {296; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_release:297; CHECK: bl __atomic_exchange298 %r = atomicrmw xchg ptr %ptr, i32 %value release, align 1299 ret i32 %r300}301 302define dso_local i32 @atomicrmw_xchg_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {303; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acq_rel:304; CHECK: bl __atomic_exchange305 %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 1306 ret i32 %r307}308 309define dso_local i32 @atomicrmw_xchg_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {310; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_seq_cst:311; CHECK: bl __atomic_exchange312 %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 1313 ret i32 %r314}315 316define dso_local i64 @atomicrmw_xchg_i64_unaligned_monotonic(ptr %ptr, i64 %value) {317; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_monotonic:318; CHECK: bl __atomic_exchange319 %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 1320 ret i64 %r321}322 323define dso_local i64 @atomicrmw_xchg_i64_unaligned_acquire(ptr %ptr, i64 %value) {324; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acquire:325; CHECK: bl __atomic_exchange326 %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 1327 ret i64 %r328}329 330define dso_local i64 @atomicrmw_xchg_i64_unaligned_release(ptr %ptr, i64 %value) {331; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_release:332; CHECK: bl __atomic_exchange333 %r = atomicrmw xchg ptr %ptr, i64 %value release, align 1334 ret i64 %r335}336 337define dso_local i64 @atomicrmw_xchg_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {338; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acq_rel:339; CHECK: bl __atomic_exchange340 %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 1341 ret i64 %r342}343 344define dso_local i64 @atomicrmw_xchg_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {345; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_seq_cst:346; CHECK: bl __atomic_exchange347 %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 1348 ret i64 %r349}350 351define dso_local i128 @atomicrmw_xchg_i128_unaligned_monotonic(ptr %ptr, i128 %value) {352; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_monotonic:353; CHECK: bl __atomic_exchange354 %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 1355 ret i128 %r356}357 358define dso_local i128 @atomicrmw_xchg_i128_unaligned_acquire(ptr %ptr, i128 %value) {359; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acquire:360; CHECK: bl __atomic_exchange361 %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 1362 ret i128 %r363}364 365define dso_local i128 @atomicrmw_xchg_i128_unaligned_release(ptr %ptr, i128 %value) {366; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_release:367; CHECK: bl __atomic_exchange368 %r = atomicrmw xchg ptr %ptr, i128 %value release, align 1369 ret i128 %r370}371 372define dso_local i128 @atomicrmw_xchg_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {373; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acq_rel:374; CHECK: bl __atomic_exchange375 %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 1376 ret i128 %r377}378 379define dso_local i128 @atomicrmw_xchg_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {380; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_seq_cst:381; CHECK: bl __atomic_exchange382 %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 1383 ret i128 %r384}385 386define dso_local i8 @atomicrmw_add_i8_aligned_monotonic(ptr %ptr, i8 %value) {387; CHECK-LABEL: atomicrmw_add_i8_aligned_monotonic:388; CHECK: bl __aarch64_ldadd1_relax389 %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1390 ret i8 %r391}392 393define dso_local i8 @atomicrmw_add_i8_aligned_acquire(ptr %ptr, i8 %value) {394; CHECK-LABEL: atomicrmw_add_i8_aligned_acquire:395; CHECK: bl __aarch64_ldadd1_acq396 %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1397 ret i8 %r398}399 400define dso_local i8 @atomicrmw_add_i8_aligned_release(ptr %ptr, i8 %value) {401; CHECK-LABEL: atomicrmw_add_i8_aligned_release:402; CHECK: bl __aarch64_ldadd1_rel403 %r = atomicrmw add ptr %ptr, i8 %value release, align 1404 ret i8 %r405}406 407define dso_local i8 @atomicrmw_add_i8_aligned_acq_rel(ptr %ptr, i8 %value) {408; CHECK-LABEL: atomicrmw_add_i8_aligned_acq_rel:409; CHECK: bl __aarch64_ldadd1_acq_rel410 %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1411 ret i8 %r412}413 414define dso_local i8 @atomicrmw_add_i8_aligned_seq_cst(ptr %ptr, i8 %value) {415; CHECK-LABEL: atomicrmw_add_i8_aligned_seq_cst:416; CHECK: bl __aarch64_ldadd1_acq_rel417 %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1418 ret i8 %r419}420 421define dso_local i16 @atomicrmw_add_i16_aligned_monotonic(ptr %ptr, i16 %value) {422; CHECK-LABEL: atomicrmw_add_i16_aligned_monotonic:423; CHECK: bl __aarch64_ldadd2_relax424 %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 2425 ret i16 %r426}427 428define dso_local i16 @atomicrmw_add_i16_aligned_acquire(ptr %ptr, i16 %value) {429; CHECK-LABEL: atomicrmw_add_i16_aligned_acquire:430; CHECK: bl __aarch64_ldadd2_acq431 %r = atomicrmw add ptr %ptr, i16 %value acquire, align 2432 ret i16 %r433}434 435define dso_local i16 @atomicrmw_add_i16_aligned_release(ptr %ptr, i16 %value) {436; CHECK-LABEL: atomicrmw_add_i16_aligned_release:437; CHECK: bl __aarch64_ldadd2_rel438 %r = atomicrmw add ptr %ptr, i16 %value release, align 2439 ret i16 %r440}441 442define dso_local i16 @atomicrmw_add_i16_aligned_acq_rel(ptr %ptr, i16 %value) {443; CHECK-LABEL: atomicrmw_add_i16_aligned_acq_rel:444; CHECK: bl __aarch64_ldadd2_acq_rel445 %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 2446 ret i16 %r447}448 449define dso_local i16 @atomicrmw_add_i16_aligned_seq_cst(ptr %ptr, i16 %value) {450; CHECK-LABEL: atomicrmw_add_i16_aligned_seq_cst:451; CHECK: bl __aarch64_ldadd2_acq_rel452 %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 2453 ret i16 %r454}455 456define dso_local i32 @atomicrmw_add_i32_aligned_monotonic(ptr %ptr, i32 %value) {457; CHECK-LABEL: atomicrmw_add_i32_aligned_monotonic:458; CHECK: bl __aarch64_ldadd4_relax459 %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 4460 ret i32 %r461}462 463define dso_local i32 @atomicrmw_add_i32_aligned_acquire(ptr %ptr, i32 %value) {464; CHECK-LABEL: atomicrmw_add_i32_aligned_acquire:465; CHECK: bl __aarch64_ldadd4_acq466 %r = atomicrmw add ptr %ptr, i32 %value acquire, align 4467 ret i32 %r468}469 470define dso_local i32 @atomicrmw_add_i32_aligned_release(ptr %ptr, i32 %value) {471; CHECK-LABEL: atomicrmw_add_i32_aligned_release:472; CHECK: bl __aarch64_ldadd4_rel473 %r = atomicrmw add ptr %ptr, i32 %value release, align 4474 ret i32 %r475}476 477define dso_local i32 @atomicrmw_add_i32_aligned_acq_rel(ptr %ptr, i32 %value) {478; CHECK-LABEL: atomicrmw_add_i32_aligned_acq_rel:479; CHECK: bl __aarch64_ldadd4_acq_rel480 %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 4481 ret i32 %r482}483 484define dso_local i32 @atomicrmw_add_i32_aligned_seq_cst(ptr %ptr, i32 %value) {485; CHECK-LABEL: atomicrmw_add_i32_aligned_seq_cst:486; CHECK: bl __aarch64_ldadd4_acq_rel487 %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 4488 ret i32 %r489}490 491define dso_local i64 @atomicrmw_add_i64_aligned_monotonic(ptr %ptr, i64 %value) {492; CHECK-LABEL: atomicrmw_add_i64_aligned_monotonic:493; CHECK: bl __aarch64_ldadd8_relax494 %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 8495 ret i64 %r496}497 498define dso_local i64 @atomicrmw_add_i64_aligned_acquire(ptr %ptr, i64 %value) {499; CHECK-LABEL: atomicrmw_add_i64_aligned_acquire:500; CHECK: bl __aarch64_ldadd8_acq501 %r = atomicrmw add ptr %ptr, i64 %value acquire, align 8502 ret i64 %r503}504 505define dso_local i64 @atomicrmw_add_i64_aligned_release(ptr %ptr, i64 %value) {506; CHECK-LABEL: atomicrmw_add_i64_aligned_release:507; CHECK: bl __aarch64_ldadd8_rel508 %r = atomicrmw add ptr %ptr, i64 %value release, align 8509 ret i64 %r510}511 512define dso_local i64 @atomicrmw_add_i64_aligned_acq_rel(ptr %ptr, i64 %value) {513; CHECK-LABEL: atomicrmw_add_i64_aligned_acq_rel:514; CHECK: bl __aarch64_ldadd8_acq_rel515 %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 8516 ret i64 %r517}518 519define dso_local i64 @atomicrmw_add_i64_aligned_seq_cst(ptr %ptr, i64 %value) {520; CHECK-LABEL: atomicrmw_add_i64_aligned_seq_cst:521; CHECK: bl __aarch64_ldadd8_acq_rel522 %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 8523 ret i64 %r524}525 526define dso_local i128 @atomicrmw_add_i128_aligned_monotonic(ptr %ptr, i128 %value) {527; -O0-LABEL: atomicrmw_add_i128_aligned_monotonic:528; -O0: adds x3, x1, x9529; -O0: bl __aarch64_cas16_relax530; -O0: subs x10, x10, x11531; -O0: ccmp x8, x9, #0, eq532;533; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic:534; -O1: ldxp x1, x0, [x8]535; -O1: adds x9, x1, x3536; -O1: stxp w11, x9, x10, [x8]537 %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16538 ret i128 %r539}540 541define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) {542; -O0-LABEL: atomicrmw_add_i128_aligned_acquire:543; -O0: adds x3, x1, x9544; -O0: bl __aarch64_cas16_acq545; -O0: subs x10, x10, x11546; -O0: ccmp x8, x9, #0, eq547;548; -O1-LABEL: atomicrmw_add_i128_aligned_acquire:549; -O1: ldaxp x1, x0, [x8]550; -O1: adds x9, x1, x3551; -O1: stxp w11, x9, x10, [x8]552 %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16553 ret i128 %r554}555 556define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) {557; -O0-LABEL: atomicrmw_add_i128_aligned_release:558; -O0: adds x3, x1, x9559; -O0: bl __aarch64_cas16_rel560; -O0: subs x10, x10, x11561; -O0: ccmp x8, x9, #0, eq562;563; -O1-LABEL: atomicrmw_add_i128_aligned_release:564; -O1: ldxp x1, x0, [x8]565; -O1: adds x9, x1, x3566; -O1: stlxp w11, x9, x10, [x8]567 %r = atomicrmw add ptr %ptr, i128 %value release, align 16568 ret i128 %r569}570 571define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) {572; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel:573; -O0: adds x3, x1, x9574; -O0: bl __aarch64_cas16_acq_rel575; -O0: subs x10, x10, x11576; -O0: ccmp x8, x9, #0, eq577;578; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel:579; -O1: ldaxp x1, x0, [x8]580; -O1: adds x9, x1, x3581; -O1: stlxp w11, x9, x10, [x8]582 %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 16583 ret i128 %r584}585 586define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) {587; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst:588; -O0: adds x3, x1, x9589; -O0: bl __aarch64_cas16_acq_rel590; -O0: subs x10, x10, x11591; -O0: ccmp x8, x9, #0, eq592;593; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst:594; -O1: ldaxp x1, x0, [x8]595; -O1: adds x9, x1, x3596; -O1: stlxp w11, x9, x10, [x8]597 %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 16598 ret i128 %r599}600 601define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) {602; CHECK-LABEL: atomicrmw_add_i8_unaligned_monotonic:603; CHECK: bl __aarch64_ldadd1_relax604 %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1605 ret i8 %r606}607 608define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) {609; CHECK-LABEL: atomicrmw_add_i8_unaligned_acquire:610; CHECK: bl __aarch64_ldadd1_acq611 %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1612 ret i8 %r613}614 615define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) {616; CHECK-LABEL: atomicrmw_add_i8_unaligned_release:617; CHECK: bl __aarch64_ldadd1_rel618 %r = atomicrmw add ptr %ptr, i8 %value release, align 1619 ret i8 %r620}621 622define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {623; CHECK-LABEL: atomicrmw_add_i8_unaligned_acq_rel:624; CHECK: bl __aarch64_ldadd1_acq_rel625 %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1626 ret i8 %r627}628 629define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {630; CHECK-LABEL: atomicrmw_add_i8_unaligned_seq_cst:631; CHECK: bl __aarch64_ldadd1_acq_rel632 %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1633 ret i8 %r634}635 636define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) {637; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic:638; -O0: add w8, w9, w8639; -O0: bl __atomic_compare_exchange640;641; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic:642; -O1: add w8, w0, w20643; -O1: bl __atomic_compare_exchange644 %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 1645 ret i16 %r646}647 648define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) {649; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire:650; -O0: add w8, w9, w8651; -O0: bl __atomic_compare_exchange652;653; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire:654; -O1: add w8, w0, w20655; -O1: bl __atomic_compare_exchange656 %r = atomicrmw add ptr %ptr, i16 %value acquire, align 1657 ret i16 %r658}659 660define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) {661; -O0-LABEL: atomicrmw_add_i16_unaligned_release:662; -O0: add w8, w9, w8663; -O0: bl __atomic_compare_exchange664;665; -O1-LABEL: atomicrmw_add_i16_unaligned_release:666; -O1: add w8, w0, w20667; -O1: bl __atomic_compare_exchange668 %r = atomicrmw add ptr %ptr, i16 %value release, align 1669 ret i16 %r670}671 672define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {673; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel:674; -O0: add w8, w9, w8675; -O0: bl __atomic_compare_exchange676;677; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel:678; -O1: add w8, w0, w20679; -O1: bl __atomic_compare_exchange680 %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 1681 ret i16 %r682}683 684define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {685; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst:686; -O0: add w8, w9, w8687; -O0: bl __atomic_compare_exchange688;689; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst:690; -O1: add w8, w0, w20691; -O1: bl __atomic_compare_exchange692 %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 1693 ret i16 %r694}695 696define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) {697; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic:698; -O0: add w8, w9, w8699; -O0: bl __atomic_compare_exchange700;701; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic:702; -O1: add w8, w0, w20703; -O1: bl __atomic_compare_exchange704 %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 1705 ret i32 %r706}707 708define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) {709; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire:710; -O0: add w8, w9, w8711; -O0: bl __atomic_compare_exchange712;713; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire:714; -O1: add w8, w0, w20715; -O1: bl __atomic_compare_exchange716 %r = atomicrmw add ptr %ptr, i32 %value acquire, align 1717 ret i32 %r718}719 720define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) {721; -O0-LABEL: atomicrmw_add_i32_unaligned_release:722; -O0: add w8, w9, w8723; -O0: bl __atomic_compare_exchange724;725; -O1-LABEL: atomicrmw_add_i32_unaligned_release:726; -O1: add w8, w0, w20727; -O1: bl __atomic_compare_exchange728 %r = atomicrmw add ptr %ptr, i32 %value release, align 1729 ret i32 %r730}731 732define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {733; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel:734; -O0: add w8, w9, w8735; -O0: bl __atomic_compare_exchange736;737; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel:738; -O1: add w8, w0, w20739; -O1: bl __atomic_compare_exchange740 %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 1741 ret i32 %r742}743 744define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {745; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst:746; -O0: add w8, w9, w8747; -O0: bl __atomic_compare_exchange748;749; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst:750; -O1: add w8, w0, w20751; -O1: bl __atomic_compare_exchange752 %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 1753 ret i32 %r754}755 756define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) {757; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic:758; -O0: add x8, x9, x8759; -O0: bl __atomic_compare_exchange760;761; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic:762; -O1: add x8, x0, x20763; -O1: bl __atomic_compare_exchange764 %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 1765 ret i64 %r766}767 768define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) {769; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire:770; -O0: add x8, x9, x8771; -O0: bl __atomic_compare_exchange772;773; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire:774; -O1: add x8, x0, x20775; -O1: bl __atomic_compare_exchange776 %r = atomicrmw add ptr %ptr, i64 %value acquire, align 1777 ret i64 %r778}779 780define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) {781; -O0-LABEL: atomicrmw_add_i64_unaligned_release:782; -O0: add x8, x9, x8783; -O0: bl __atomic_compare_exchange784;785; -O1-LABEL: atomicrmw_add_i64_unaligned_release:786; -O1: add x8, x0, x20787; -O1: bl __atomic_compare_exchange788 %r = atomicrmw add ptr %ptr, i64 %value release, align 1789 ret i64 %r790}791 792define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {793; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel:794; -O0: add x8, x9, x8795; -O0: bl __atomic_compare_exchange796;797; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel:798; -O1: add x8, x0, x20799; -O1: bl __atomic_compare_exchange800 %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 1801 ret i64 %r802}803 804define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {805; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst:806; -O0: add x8, x9, x8807; -O0: bl __atomic_compare_exchange808;809; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst:810; -O1: add x8, x0, x20811; -O1: bl __atomic_compare_exchange812 %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 1813 ret i64 %r814}815 816define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) {817; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic:818; -O0: adds x9, x10, x9819; -O0: bl __atomic_compare_exchange820;821; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic:822; -O1: ldp x0, x1, [x0]823; -O1: adds x8, x1, x19824; -O1: bl __atomic_compare_exchange825 %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 1826 ret i128 %r827}828 829define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) {830; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire:831; -O0: adds x9, x10, x9832; -O0: bl __atomic_compare_exchange833;834; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire:835; -O1: ldp x0, x1, [x0]836; -O1: adds x8, x1, x19837; -O1: bl __atomic_compare_exchange838 %r = atomicrmw add ptr %ptr, i128 %value acquire, align 1839 ret i128 %r840}841 842define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) {843; -O0-LABEL: atomicrmw_add_i128_unaligned_release:844; -O0: adds x9, x10, x9845; -O0: bl __atomic_compare_exchange846;847; -O1-LABEL: atomicrmw_add_i128_unaligned_release:848; -O1: ldp x0, x1, [x0]849; -O1: adds x8, x1, x19850; -O1: bl __atomic_compare_exchange851 %r = atomicrmw add ptr %ptr, i128 %value release, align 1852 ret i128 %r853}854 855define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {856; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel:857; -O0: adds x9, x10, x9858; -O0: bl __atomic_compare_exchange859;860; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel:861; -O1: ldp x0, x1, [x0]862; -O1: adds x8, x1, x19863; -O1: bl __atomic_compare_exchange864 %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 1865 ret i128 %r866}867 868define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {869; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst:870; -O0: adds x9, x10, x9871; -O0: bl __atomic_compare_exchange872;873; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst:874; -O1: ldp x0, x1, [x0]875; -O1: adds x8, x1, x19876; -O1: bl __atomic_compare_exchange877 %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 1878 ret i128 %r879}880 881define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) {882; -O0-LABEL: atomicrmw_sub_i8_aligned_monotonic:883; -O0: subs w0, w8, w9884; -O0: bl __aarch64_ldadd1_relax885;886; -O1-LABEL: atomicrmw_sub_i8_aligned_monotonic:887; -O1: bl __aarch64_ldadd1_relax888 %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1889 ret i8 %r890}891 892define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) {893; -O0-LABEL: atomicrmw_sub_i8_aligned_acquire:894; -O0: subs w0, w8, w9895; -O0: bl __aarch64_ldadd1_acq896;897; -O1-LABEL: atomicrmw_sub_i8_aligned_acquire:898; -O1: bl __aarch64_ldadd1_acq899 %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1900 ret i8 %r901}902 903define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) {904; -O0-LABEL: atomicrmw_sub_i8_aligned_release:905; -O0: subs w0, w8, w9906; -O0: bl __aarch64_ldadd1_rel907;908; -O1-LABEL: atomicrmw_sub_i8_aligned_release:909; -O1: bl __aarch64_ldadd1_rel910 %r = atomicrmw sub ptr %ptr, i8 %value release, align 1911 ret i8 %r912}913 914define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) {915; -O0-LABEL: atomicrmw_sub_i8_aligned_acq_rel:916; -O0: subs w0, w8, w9917; -O0: bl __aarch64_ldadd1_acq_rel918;919; -O1-LABEL: atomicrmw_sub_i8_aligned_acq_rel:920; -O1: bl __aarch64_ldadd1_acq_rel921 %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1922 ret i8 %r923}924 925define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) {926; -O0-LABEL: atomicrmw_sub_i8_aligned_seq_cst:927; -O0: subs w0, w8, w9928; -O0: bl __aarch64_ldadd1_acq_rel929;930; -O1-LABEL: atomicrmw_sub_i8_aligned_seq_cst:931; -O1: bl __aarch64_ldadd1_acq_rel932 %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 1933 ret i8 %r934}935 936define dso_local i16 @atomicrmw_sub_i16_aligned_monotonic(ptr %ptr, i16 %value) {937; -O0-LABEL: atomicrmw_sub_i16_aligned_monotonic:938; -O0: subs w0, w8, w9939; -O0: bl __aarch64_ldadd2_relax940;941; -O1-LABEL: atomicrmw_sub_i16_aligned_monotonic:942; -O1: bl __aarch64_ldadd2_relax943 %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 2944 ret i16 %r945}946 947define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) {948; -O0-LABEL: atomicrmw_sub_i16_aligned_acquire:949; -O0: subs w0, w8, w9950; -O0: bl __aarch64_ldadd2_acq951;952; -O1-LABEL: atomicrmw_sub_i16_aligned_acquire:953; -O1: bl __aarch64_ldadd2_acq954 %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 2955 ret i16 %r956}957 958define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) {959; -O0-LABEL: atomicrmw_sub_i16_aligned_release:960; -O0: subs w0, w8, w9961; -O0: bl __aarch64_ldadd2_rel962;963; -O1-LABEL: atomicrmw_sub_i16_aligned_release:964; -O1: bl __aarch64_ldadd2_rel965 %r = atomicrmw sub ptr %ptr, i16 %value release, align 2966 ret i16 %r967}968 969define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) {970; -O0-LABEL: atomicrmw_sub_i16_aligned_acq_rel:971; -O0: subs w0, w8, w9972; -O0: bl __aarch64_ldadd2_acq_rel973;974; -O1-LABEL: atomicrmw_sub_i16_aligned_acq_rel:975; -O1: bl __aarch64_ldadd2_acq_rel976 %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 2977 ret i16 %r978}979 980define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) {981; -O0-LABEL: atomicrmw_sub_i16_aligned_seq_cst:982; -O0: subs w0, w8, w9983; -O0: bl __aarch64_ldadd2_acq_rel984;985; -O1-LABEL: atomicrmw_sub_i16_aligned_seq_cst:986; -O1: bl __aarch64_ldadd2_acq_rel987 %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 2988 ret i16 %r989}990 991define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) {992; -O0-LABEL: atomicrmw_sub_i32_aligned_monotonic:993; -O0: subs w0, w8, w9994; -O0: bl __aarch64_ldadd4_relax995;996; -O1-LABEL: atomicrmw_sub_i32_aligned_monotonic:997; -O1: bl __aarch64_ldadd4_relax998 %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 4999 ret i32 %r1000}1001 1002define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) {1003; -O0-LABEL: atomicrmw_sub_i32_aligned_acquire:1004; -O0: subs w0, w8, w91005; -O0: bl __aarch64_ldadd4_acq1006;1007; -O1-LABEL: atomicrmw_sub_i32_aligned_acquire:1008; -O1: bl __aarch64_ldadd4_acq1009 %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 41010 ret i32 %r1011}1012 1013define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) {1014; -O0-LABEL: atomicrmw_sub_i32_aligned_release:1015; -O0: subs w0, w8, w91016; -O0: bl __aarch64_ldadd4_rel1017;1018; -O1-LABEL: atomicrmw_sub_i32_aligned_release:1019; -O1: bl __aarch64_ldadd4_rel1020 %r = atomicrmw sub ptr %ptr, i32 %value release, align 41021 ret i32 %r1022}1023 1024define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1025; -O0-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1026; -O0: subs w0, w8, w91027; -O0: bl __aarch64_ldadd4_acq_rel1028;1029; -O1-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1030; -O1: bl __aarch64_ldadd4_acq_rel1031 %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 41032 ret i32 %r1033}1034 1035define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1036; -O0-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1037; -O0: subs w0, w8, w91038; -O0: bl __aarch64_ldadd4_acq_rel1039;1040; -O1-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1041; -O1: bl __aarch64_ldadd4_acq_rel1042 %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 41043 ret i32 %r1044}1045 1046define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) {1047; -O0-LABEL: atomicrmw_sub_i64_aligned_monotonic:1048; -O0: subs x0, x8, x91049; -O0: bl __aarch64_ldadd8_relax1050;1051; -O1-LABEL: atomicrmw_sub_i64_aligned_monotonic:1052; -O1: bl __aarch64_ldadd8_relax1053 %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 81054 ret i64 %r1055}1056 1057define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) {1058; -O0-LABEL: atomicrmw_sub_i64_aligned_acquire:1059; -O0: subs x0, x8, x91060; -O0: bl __aarch64_ldadd8_acq1061;1062; -O1-LABEL: atomicrmw_sub_i64_aligned_acquire:1063; -O1: bl __aarch64_ldadd8_acq1064 %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 81065 ret i64 %r1066}1067 1068define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) {1069; -O0-LABEL: atomicrmw_sub_i64_aligned_release:1070; -O0: subs x0, x8, x91071; -O0: bl __aarch64_ldadd8_rel1072;1073; -O1-LABEL: atomicrmw_sub_i64_aligned_release:1074; -O1: bl __aarch64_ldadd8_rel1075 %r = atomicrmw sub ptr %ptr, i64 %value release, align 81076 ret i64 %r1077}1078 1079define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1080; -O0-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1081; -O0: subs x0, x8, x91082; -O0: bl __aarch64_ldadd8_acq_rel1083;1084; -O1-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1085; -O1: bl __aarch64_ldadd8_acq_rel1086 %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 81087 ret i64 %r1088}1089 1090define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1091; -O0-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1092; -O0: subs x0, x8, x91093; -O0: bl __aarch64_ldadd8_acq_rel1094;1095; -O1-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1096; -O1: bl __aarch64_ldadd8_acq_rel1097 %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 81098 ret i64 %r1099}1100 1101define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) {1102; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic:1103; -O0: subs x3, x1, x91104; -O0: bl __aarch64_cas16_relax1105; -O0: subs x10, x10, x111106; -O0: ccmp x8, x9, #0, eq1107;1108; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic:1109; -O1: ldxp x1, x0, [x8]1110; -O1: subs x9, x1, x31111; -O1: stxp w11, x9, x10, [x8]1112 %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 161113 ret i128 %r1114}1115 1116define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) {1117; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire:1118; -O0: subs x3, x1, x91119; -O0: bl __aarch64_cas16_acq1120; -O0: subs x10, x10, x111121; -O0: ccmp x8, x9, #0, eq1122;1123; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire:1124; -O1: ldaxp x1, x0, [x8]1125; -O1: subs x9, x1, x31126; -O1: stxp w11, x9, x10, [x8]1127 %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 161128 ret i128 %r1129}1130 1131define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) {1132; -O0-LABEL: atomicrmw_sub_i128_aligned_release:1133; -O0: subs x3, x1, x91134; -O0: bl __aarch64_cas16_rel1135; -O0: subs x10, x10, x111136; -O0: ccmp x8, x9, #0, eq1137;1138; -O1-LABEL: atomicrmw_sub_i128_aligned_release:1139; -O1: ldxp x1, x0, [x8]1140; -O1: subs x9, x1, x31141; -O1: stlxp w11, x9, x10, [x8]1142 %r = atomicrmw sub ptr %ptr, i128 %value release, align 161143 ret i128 %r1144}1145 1146define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1147; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1148; -O0: subs x3, x1, x91149; -O0: bl __aarch64_cas16_acq_rel1150; -O0: subs x10, x10, x111151; -O0: ccmp x8, x9, #0, eq1152;1153; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1154; -O1: ldaxp x1, x0, [x8]1155; -O1: subs x9, x1, x31156; -O1: stlxp w11, x9, x10, [x8]1157 %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 161158 ret i128 %r1159}1160 1161define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1162; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1163; -O0: subs x3, x1, x91164; -O0: bl __aarch64_cas16_acq_rel1165; -O0: subs x10, x10, x111166; -O0: ccmp x8, x9, #0, eq1167;1168; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1169; -O1: ldaxp x1, x0, [x8]1170; -O1: subs x9, x1, x31171; -O1: stlxp w11, x9, x10, [x8]1172 %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 161173 ret i128 %r1174}1175 1176define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1177; -O0-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1178; -O0: subs w0, w8, w91179; -O0: bl __aarch64_ldadd1_relax1180;1181; -O1-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1182; -O1: bl __aarch64_ldadd1_relax1183 %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11184 ret i8 %r1185}1186 1187define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) {1188; -O0-LABEL: atomicrmw_sub_i8_unaligned_acquire:1189; -O0: subs w0, w8, w91190; -O0: bl __aarch64_ldadd1_acq1191;1192; -O1-LABEL: atomicrmw_sub_i8_unaligned_acquire:1193; -O1: bl __aarch64_ldadd1_acq1194 %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11195 ret i8 %r1196}1197 1198define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) {1199; -O0-LABEL: atomicrmw_sub_i8_unaligned_release:1200; -O0: subs w0, w8, w91201; -O0: bl __aarch64_ldadd1_rel1202;1203; -O1-LABEL: atomicrmw_sub_i8_unaligned_release:1204; -O1: bl __aarch64_ldadd1_rel1205 %r = atomicrmw sub ptr %ptr, i8 %value release, align 11206 ret i8 %r1207}1208 1209define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1210; -O0-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1211; -O0: subs w0, w8, w91212; -O0: bl __aarch64_ldadd1_acq_rel1213;1214; -O1-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1215; -O1: bl __aarch64_ldadd1_acq_rel1216 %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11217 ret i8 %r1218}1219 1220define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1221; -O0-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1222; -O0: subs w0, w8, w91223; -O0: bl __aarch64_ldadd1_acq_rel1224;1225; -O1-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1226; -O1: bl __aarch64_ldadd1_acq_rel1227 %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11228 ret i8 %r1229}1230 1231define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1232; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1233; -O0: subs w8, w9, w81234; -O0: bl __atomic_compare_exchange1235;1236; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1237; -O1: sub w8, w0, w201238; -O1: bl __atomic_compare_exchange1239 %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 11240 ret i16 %r1241}1242 1243define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) {1244; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire:1245; -O0: subs w8, w9, w81246; -O0: bl __atomic_compare_exchange1247;1248; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire:1249; -O1: sub w8, w0, w201250; -O1: bl __atomic_compare_exchange1251 %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 11252 ret i16 %r1253}1254 1255define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) {1256; -O0-LABEL: atomicrmw_sub_i16_unaligned_release:1257; -O0: subs w8, w9, w81258; -O0: bl __atomic_compare_exchange1259;1260; -O1-LABEL: atomicrmw_sub_i16_unaligned_release:1261; -O1: sub w8, w0, w201262; -O1: bl __atomic_compare_exchange1263 %r = atomicrmw sub ptr %ptr, i16 %value release, align 11264 ret i16 %r1265}1266 1267define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1268; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1269; -O0: subs w8, w9, w81270; -O0: bl __atomic_compare_exchange1271;1272; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1273; -O1: sub w8, w0, w201274; -O1: bl __atomic_compare_exchange1275 %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 11276 ret i16 %r1277}1278 1279define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1280; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1281; -O0: subs w8, w9, w81282; -O0: bl __atomic_compare_exchange1283;1284; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1285; -O1: sub w8, w0, w201286; -O1: bl __atomic_compare_exchange1287 %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 11288 ret i16 %r1289}1290 1291define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1292; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1293; -O0: subs w8, w9, w81294; -O0: bl __atomic_compare_exchange1295;1296; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1297; -O1: sub w8, w0, w201298; -O1: bl __atomic_compare_exchange1299 %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 11300 ret i32 %r1301}1302 1303define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) {1304; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire:1305; -O0: subs w8, w9, w81306; -O0: bl __atomic_compare_exchange1307;1308; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire:1309; -O1: sub w8, w0, w201310; -O1: bl __atomic_compare_exchange1311 %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 11312 ret i32 %r1313}1314 1315define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) {1316; -O0-LABEL: atomicrmw_sub_i32_unaligned_release:1317; -O0: subs w8, w9, w81318; -O0: bl __atomic_compare_exchange1319;1320; -O1-LABEL: atomicrmw_sub_i32_unaligned_release:1321; -O1: sub w8, w0, w201322; -O1: bl __atomic_compare_exchange1323 %r = atomicrmw sub ptr %ptr, i32 %value release, align 11324 ret i32 %r1325}1326 1327define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1328; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1329; -O0: subs w8, w9, w81330; -O0: bl __atomic_compare_exchange1331;1332; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1333; -O1: sub w8, w0, w201334; -O1: bl __atomic_compare_exchange1335 %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 11336 ret i32 %r1337}1338 1339define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1340; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1341; -O0: subs w8, w9, w81342; -O0: bl __atomic_compare_exchange1343;1344; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1345; -O1: sub w8, w0, w201346; -O1: bl __atomic_compare_exchange1347 %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 11348 ret i32 %r1349}1350 1351define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1352; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1353; -O0: subs x8, x9, x81354; -O0: bl __atomic_compare_exchange1355;1356; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1357; -O1: sub x8, x0, x201358; -O1: bl __atomic_compare_exchange1359 %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 11360 ret i64 %r1361}1362 1363define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) {1364; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire:1365; -O0: subs x8, x9, x81366; -O0: bl __atomic_compare_exchange1367;1368; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire:1369; -O1: sub x8, x0, x201370; -O1: bl __atomic_compare_exchange1371 %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 11372 ret i64 %r1373}1374 1375define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) {1376; -O0-LABEL: atomicrmw_sub_i64_unaligned_release:1377; -O0: subs x8, x9, x81378; -O0: bl __atomic_compare_exchange1379;1380; -O1-LABEL: atomicrmw_sub_i64_unaligned_release:1381; -O1: sub x8, x0, x201382; -O1: bl __atomic_compare_exchange1383 %r = atomicrmw sub ptr %ptr, i64 %value release, align 11384 ret i64 %r1385}1386 1387define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1388; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1389; -O0: subs x8, x9, x81390; -O0: bl __atomic_compare_exchange1391;1392; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1393; -O1: sub x8, x0, x201394; -O1: bl __atomic_compare_exchange1395 %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 11396 ret i64 %r1397}1398 1399define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1400; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1401; -O0: subs x8, x9, x81402; -O0: bl __atomic_compare_exchange1403;1404; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1405; -O1: sub x8, x0, x201406; -O1: bl __atomic_compare_exchange1407 %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 11408 ret i64 %r1409}1410 1411define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1412; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1413; -O0: subs x9, x10, x91414; -O0: bl __atomic_compare_exchange1415;1416; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1417; -O1: ldp x0, x1, [x0]1418; -O1: subs x8, x1, x191419; -O1: bl __atomic_compare_exchange1420 %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 11421 ret i128 %r1422}1423 1424define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) {1425; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire:1426; -O0: subs x9, x10, x91427; -O0: bl __atomic_compare_exchange1428;1429; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire:1430; -O1: ldp x0, x1, [x0]1431; -O1: subs x8, x1, x191432; -O1: bl __atomic_compare_exchange1433 %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 11434 ret i128 %r1435}1436 1437define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) {1438; -O0-LABEL: atomicrmw_sub_i128_unaligned_release:1439; -O0: subs x9, x10, x91440; -O0: bl __atomic_compare_exchange1441;1442; -O1-LABEL: atomicrmw_sub_i128_unaligned_release:1443; -O1: ldp x0, x1, [x0]1444; -O1: subs x8, x1, x191445; -O1: bl __atomic_compare_exchange1446 %r = atomicrmw sub ptr %ptr, i128 %value release, align 11447 ret i128 %r1448}1449 1450define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1451; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1452; -O0: subs x9, x10, x91453; -O0: bl __atomic_compare_exchange1454;1455; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1456; -O1: ldp x0, x1, [x0]1457; -O1: subs x8, x1, x191458; -O1: bl __atomic_compare_exchange1459 %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 11460 ret i128 %r1461}1462 1463define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1464; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1465; -O0: subs x9, x10, x91466; -O0: bl __atomic_compare_exchange1467;1468; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1469; -O1: ldp x0, x1, [x0]1470; -O1: subs x8, x1, x191471; -O1: bl __atomic_compare_exchange1472 %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 11473 ret i128 %r1474}1475 1476define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) {1477; -O0-LABEL: atomicrmw_and_i8_aligned_monotonic:1478; -O0: mvn w0, w81479; -O0: bl __aarch64_ldclr1_relax1480;1481; -O1-LABEL: atomicrmw_and_i8_aligned_monotonic:1482; -O1: mvn w0, w11483; -O1: bl __aarch64_ldclr1_relax1484 %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11485 ret i8 %r1486}1487 1488define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) {1489; -O0-LABEL: atomicrmw_and_i8_aligned_acquire:1490; -O0: mvn w0, w81491; -O0: bl __aarch64_ldclr1_acq1492;1493; -O1-LABEL: atomicrmw_and_i8_aligned_acquire:1494; -O1: mvn w0, w11495; -O1: bl __aarch64_ldclr1_acq1496 %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11497 ret i8 %r1498}1499 1500define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) {1501; -O0-LABEL: atomicrmw_and_i8_aligned_release:1502; -O0: mvn w0, w81503; -O0: bl __aarch64_ldclr1_rel1504;1505; -O1-LABEL: atomicrmw_and_i8_aligned_release:1506; -O1: mvn w0, w11507; -O1: bl __aarch64_ldclr1_rel1508 %r = atomicrmw and ptr %ptr, i8 %value release, align 11509 ret i8 %r1510}1511 1512define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) {1513; -O0-LABEL: atomicrmw_and_i8_aligned_acq_rel:1514; -O0: mvn w0, w81515; -O0: bl __aarch64_ldclr1_acq_rel1516;1517; -O1-LABEL: atomicrmw_and_i8_aligned_acq_rel:1518; -O1: mvn w0, w11519; -O1: bl __aarch64_ldclr1_acq_rel1520 %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11521 ret i8 %r1522}1523 1524define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) {1525; -O0-LABEL: atomicrmw_and_i8_aligned_seq_cst:1526; -O0: mvn w0, w81527; -O0: bl __aarch64_ldclr1_acq_rel1528;1529; -O1-LABEL: atomicrmw_and_i8_aligned_seq_cst:1530; -O1: mvn w0, w11531; -O1: bl __aarch64_ldclr1_acq_rel1532 %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11533 ret i8 %r1534}1535 1536define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) {1537; -O0-LABEL: atomicrmw_and_i16_aligned_monotonic:1538; -O0: mvn w0, w81539; -O0: bl __aarch64_ldclr2_relax1540;1541; -O1-LABEL: atomicrmw_and_i16_aligned_monotonic:1542; -O1: mvn w0, w11543; -O1: bl __aarch64_ldclr2_relax1544 %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 21545 ret i16 %r1546}1547 1548define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) {1549; -O0-LABEL: atomicrmw_and_i16_aligned_acquire:1550; -O0: mvn w0, w81551; -O0: bl __aarch64_ldclr2_acq1552;1553; -O1-LABEL: atomicrmw_and_i16_aligned_acquire:1554; -O1: mvn w0, w11555; -O1: bl __aarch64_ldclr2_acq1556 %r = atomicrmw and ptr %ptr, i16 %value acquire, align 21557 ret i16 %r1558}1559 1560define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) {1561; -O0-LABEL: atomicrmw_and_i16_aligned_release:1562; -O0: mvn w0, w81563; -O0: bl __aarch64_ldclr2_rel1564;1565; -O1-LABEL: atomicrmw_and_i16_aligned_release:1566; -O1: mvn w0, w11567; -O1: bl __aarch64_ldclr2_rel1568 %r = atomicrmw and ptr %ptr, i16 %value release, align 21569 ret i16 %r1570}1571 1572define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) {1573; -O0-LABEL: atomicrmw_and_i16_aligned_acq_rel:1574; -O0: mvn w0, w81575; -O0: bl __aarch64_ldclr2_acq_rel1576;1577; -O1-LABEL: atomicrmw_and_i16_aligned_acq_rel:1578; -O1: mvn w0, w11579; -O1: bl __aarch64_ldclr2_acq_rel1580 %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 21581 ret i16 %r1582}1583 1584define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1585; -O0-LABEL: atomicrmw_and_i16_aligned_seq_cst:1586; -O0: mvn w0, w81587; -O0: bl __aarch64_ldclr2_acq_rel1588;1589; -O1-LABEL: atomicrmw_and_i16_aligned_seq_cst:1590; -O1: mvn w0, w11591; -O1: bl __aarch64_ldclr2_acq_rel1592 %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 21593 ret i16 %r1594}1595 1596define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) {1597; -O0-LABEL: atomicrmw_and_i32_aligned_monotonic:1598; -O0: mvn w0, w81599; -O0: bl __aarch64_ldclr4_relax1600;1601; -O1-LABEL: atomicrmw_and_i32_aligned_monotonic:1602; -O1: mvn w0, w11603; -O1: bl __aarch64_ldclr4_relax1604 %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 41605 ret i32 %r1606}1607 1608define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) {1609; -O0-LABEL: atomicrmw_and_i32_aligned_acquire:1610; -O0: mvn w0, w81611; -O0: bl __aarch64_ldclr4_acq1612;1613; -O1-LABEL: atomicrmw_and_i32_aligned_acquire:1614; -O1: mvn w0, w11615; -O1: bl __aarch64_ldclr4_acq1616 %r = atomicrmw and ptr %ptr, i32 %value acquire, align 41617 ret i32 %r1618}1619 1620define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) {1621; -O0-LABEL: atomicrmw_and_i32_aligned_release:1622; -O0: mvn w0, w81623; -O0: bl __aarch64_ldclr4_rel1624;1625; -O1-LABEL: atomicrmw_and_i32_aligned_release:1626; -O1: mvn w0, w11627; -O1: bl __aarch64_ldclr4_rel1628 %r = atomicrmw and ptr %ptr, i32 %value release, align 41629 ret i32 %r1630}1631 1632define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1633; -O0-LABEL: atomicrmw_and_i32_aligned_acq_rel:1634; -O0: mvn w0, w81635; -O0: bl __aarch64_ldclr4_acq_rel1636;1637; -O1-LABEL: atomicrmw_and_i32_aligned_acq_rel:1638; -O1: mvn w0, w11639; -O1: bl __aarch64_ldclr4_acq_rel1640 %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 41641 ret i32 %r1642}1643 1644define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1645; -O0-LABEL: atomicrmw_and_i32_aligned_seq_cst:1646; -O0: mvn w0, w81647; -O0: bl __aarch64_ldclr4_acq_rel1648;1649; -O1-LABEL: atomicrmw_and_i32_aligned_seq_cst:1650; -O1: mvn w0, w11651; -O1: bl __aarch64_ldclr4_acq_rel1652 %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 41653 ret i32 %r1654}1655 1656define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) {1657; -O0-LABEL: atomicrmw_and_i64_aligned_monotonic:1658; -O0: mvn x0, x81659; -O0: bl __aarch64_ldclr8_relax1660;1661; -O1-LABEL: atomicrmw_and_i64_aligned_monotonic:1662; -O1: mvn x0, x11663; -O1: bl __aarch64_ldclr8_relax1664 %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 81665 ret i64 %r1666}1667 1668define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) {1669; -O0-LABEL: atomicrmw_and_i64_aligned_acquire:1670; -O0: mvn x0, x81671; -O0: bl __aarch64_ldclr8_acq1672;1673; -O1-LABEL: atomicrmw_and_i64_aligned_acquire:1674; -O1: mvn x0, x11675; -O1: bl __aarch64_ldclr8_acq1676 %r = atomicrmw and ptr %ptr, i64 %value acquire, align 81677 ret i64 %r1678}1679 1680define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) {1681; -O0-LABEL: atomicrmw_and_i64_aligned_release:1682; -O0: mvn x0, x81683; -O0: bl __aarch64_ldclr8_rel1684;1685; -O1-LABEL: atomicrmw_and_i64_aligned_release:1686; -O1: mvn x0, x11687; -O1: bl __aarch64_ldclr8_rel1688 %r = atomicrmw and ptr %ptr, i64 %value release, align 81689 ret i64 %r1690}1691 1692define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1693; -O0-LABEL: atomicrmw_and_i64_aligned_acq_rel:1694; -O0: mvn x0, x81695; -O0: bl __aarch64_ldclr8_acq_rel1696;1697; -O1-LABEL: atomicrmw_and_i64_aligned_acq_rel:1698; -O1: mvn x0, x11699; -O1: bl __aarch64_ldclr8_acq_rel1700 %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 81701 ret i64 %r1702}1703 1704define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1705; -O0-LABEL: atomicrmw_and_i64_aligned_seq_cst:1706; -O0: mvn x0, x81707; -O0: bl __aarch64_ldclr8_acq_rel1708;1709; -O1-LABEL: atomicrmw_and_i64_aligned_seq_cst:1710; -O1: mvn x0, x11711; -O1: bl __aarch64_ldclr8_acq_rel1712 %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 81713 ret i64 %r1714}1715 1716define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) {1717; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic:1718; -O0: and x2, x0, x91719; -O0: and x3, x1, x81720; -O0: bl __aarch64_cas16_relax1721; -O0: subs x10, x10, x111722; -O0: ccmp x8, x9, #0, eq1723;1724; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic:1725; -O1: ldxp x1, x0, [x8]1726; -O1: and x9, x0, x21727; -O1: and x10, x1, x31728; -O1: stxp w11, x10, x9, [x8]1729 %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 161730 ret i128 %r1731}1732 1733define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) {1734; -O0-LABEL: atomicrmw_and_i128_aligned_acquire:1735; -O0: and x2, x0, x91736; -O0: and x3, x1, x81737; -O0: bl __aarch64_cas16_acq1738; -O0: subs x10, x10, x111739; -O0: ccmp x8, x9, #0, eq1740;1741; -O1-LABEL: atomicrmw_and_i128_aligned_acquire:1742; -O1: ldaxp x1, x0, [x8]1743; -O1: and x9, x0, x21744; -O1: and x10, x1, x31745; -O1: stxp w11, x10, x9, [x8]1746 %r = atomicrmw and ptr %ptr, i128 %value acquire, align 161747 ret i128 %r1748}1749 1750define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) {1751; -O0-LABEL: atomicrmw_and_i128_aligned_release:1752; -O0: and x2, x0, x91753; -O0: and x3, x1, x81754; -O0: bl __aarch64_cas16_rel1755; -O0: subs x10, x10, x111756; -O0: ccmp x8, x9, #0, eq1757;1758; -O1-LABEL: atomicrmw_and_i128_aligned_release:1759; -O1: ldxp x1, x0, [x8]1760; -O1: and x9, x0, x21761; -O1: and x10, x1, x31762; -O1: stlxp w11, x10, x9, [x8]1763 %r = atomicrmw and ptr %ptr, i128 %value release, align 161764 ret i128 %r1765}1766 1767define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1768; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel:1769; -O0: and x2, x0, x91770; -O0: and x3, x1, x81771; -O0: bl __aarch64_cas16_acq_rel1772; -O0: subs x10, x10, x111773; -O0: ccmp x8, x9, #0, eq1774;1775; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel:1776; -O1: ldaxp x1, x0, [x8]1777; -O1: and x9, x0, x21778; -O1: and x10, x1, x31779; -O1: stlxp w11, x10, x9, [x8]1780 %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 161781 ret i128 %r1782}1783 1784define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1785; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst:1786; -O0: and x2, x0, x91787; -O0: and x3, x1, x81788; -O0: bl __aarch64_cas16_acq_rel1789; -O0: subs x10, x10, x111790; -O0: ccmp x8, x9, #0, eq1791;1792; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst:1793; -O1: ldaxp x1, x0, [x8]1794; -O1: and x9, x0, x21795; -O1: and x10, x1, x31796; -O1: stlxp w11, x10, x9, [x8]1797 %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 161798 ret i128 %r1799}1800 1801define dso_local i8 @atomicrmw_and_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1802; -O0-LABEL: atomicrmw_and_i8_unaligned_monotonic:1803; -O0: mvn w0, w81804; -O0: bl __aarch64_ldclr1_relax1805;1806; -O1-LABEL: atomicrmw_and_i8_unaligned_monotonic:1807; -O1: mvn w0, w11808; -O1: bl __aarch64_ldclr1_relax1809 %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11810 ret i8 %r1811}1812 1813define dso_local i8 @atomicrmw_and_i8_unaligned_acquire(ptr %ptr, i8 %value) {1814; -O0-LABEL: atomicrmw_and_i8_unaligned_acquire:1815; -O0: mvn w0, w81816; -O0: bl __aarch64_ldclr1_acq1817;1818; -O1-LABEL: atomicrmw_and_i8_unaligned_acquire:1819; -O1: mvn w0, w11820; -O1: bl __aarch64_ldclr1_acq1821 %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11822 ret i8 %r1823}1824 1825define dso_local i8 @atomicrmw_and_i8_unaligned_release(ptr %ptr, i8 %value) {1826; -O0-LABEL: atomicrmw_and_i8_unaligned_release:1827; -O0: mvn w0, w81828; -O0: bl __aarch64_ldclr1_rel1829;1830; -O1-LABEL: atomicrmw_and_i8_unaligned_release:1831; -O1: mvn w0, w11832; -O1: bl __aarch64_ldclr1_rel1833 %r = atomicrmw and ptr %ptr, i8 %value release, align 11834 ret i8 %r1835}1836 1837define dso_local i8 @atomicrmw_and_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1838; -O0-LABEL: atomicrmw_and_i8_unaligned_acq_rel:1839; -O0: mvn w0, w81840; -O0: bl __aarch64_ldclr1_acq_rel1841;1842; -O1-LABEL: atomicrmw_and_i8_unaligned_acq_rel:1843; -O1: mvn w0, w11844; -O1: bl __aarch64_ldclr1_acq_rel1845 %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11846 ret i8 %r1847}1848 1849define dso_local i8 @atomicrmw_and_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1850; -O0-LABEL: atomicrmw_and_i8_unaligned_seq_cst:1851; -O0: mvn w0, w81852; -O0: bl __aarch64_ldclr1_acq_rel1853;1854; -O1-LABEL: atomicrmw_and_i8_unaligned_seq_cst:1855; -O1: mvn w0, w11856; -O1: bl __aarch64_ldclr1_acq_rel1857 %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11858 ret i8 %r1859}1860 1861define dso_local i16 @atomicrmw_and_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1862; -O0-LABEL: atomicrmw_and_i16_unaligned_monotonic:1863; -O0: and w8, w9, w81864; -O0: bl __atomic_compare_exchange1865;1866; -O1-LABEL: atomicrmw_and_i16_unaligned_monotonic:1867; -O1: and w8, w0, w201868; -O1: bl __atomic_compare_exchange1869 %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 11870 ret i16 %r1871}1872 1873define dso_local i16 @atomicrmw_and_i16_unaligned_acquire(ptr %ptr, i16 %value) {1874; -O0-LABEL: atomicrmw_and_i16_unaligned_acquire:1875; -O0: and w8, w9, w81876; -O0: bl __atomic_compare_exchange1877;1878; -O1-LABEL: atomicrmw_and_i16_unaligned_acquire:1879; -O1: and w8, w0, w201880; -O1: bl __atomic_compare_exchange1881 %r = atomicrmw and ptr %ptr, i16 %value acquire, align 11882 ret i16 %r1883}1884 1885define dso_local i16 @atomicrmw_and_i16_unaligned_release(ptr %ptr, i16 %value) {1886; -O0-LABEL: atomicrmw_and_i16_unaligned_release:1887; -O0: and w8, w9, w81888; -O0: bl __atomic_compare_exchange1889;1890; -O1-LABEL: atomicrmw_and_i16_unaligned_release:1891; -O1: and w8, w0, w201892; -O1: bl __atomic_compare_exchange1893 %r = atomicrmw and ptr %ptr, i16 %value release, align 11894 ret i16 %r1895}1896 1897define dso_local i16 @atomicrmw_and_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1898; -O0-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1899; -O0: and w8, w9, w81900; -O0: bl __atomic_compare_exchange1901;1902; -O1-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1903; -O1: and w8, w0, w201904; -O1: bl __atomic_compare_exchange1905 %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 11906 ret i16 %r1907}1908 1909define dso_local i16 @atomicrmw_and_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1910; -O0-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1911; -O0: and w8, w9, w81912; -O0: bl __atomic_compare_exchange1913;1914; -O1-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1915; -O1: and w8, w0, w201916; -O1: bl __atomic_compare_exchange1917 %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 11918 ret i16 %r1919}1920 1921define dso_local i32 @atomicrmw_and_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1922; -O0-LABEL: atomicrmw_and_i32_unaligned_monotonic:1923; -O0: and w8, w9, w81924; -O0: bl __atomic_compare_exchange1925;1926; -O1-LABEL: atomicrmw_and_i32_unaligned_monotonic:1927; -O1: and w8, w0, w201928; -O1: bl __atomic_compare_exchange1929 %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 11930 ret i32 %r1931}1932 1933define dso_local i32 @atomicrmw_and_i32_unaligned_acquire(ptr %ptr, i32 %value) {1934; -O0-LABEL: atomicrmw_and_i32_unaligned_acquire:1935; -O0: and w8, w9, w81936; -O0: bl __atomic_compare_exchange1937;1938; -O1-LABEL: atomicrmw_and_i32_unaligned_acquire:1939; -O1: and w8, w0, w201940; -O1: bl __atomic_compare_exchange1941 %r = atomicrmw and ptr %ptr, i32 %value acquire, align 11942 ret i32 %r1943}1944 1945define dso_local i32 @atomicrmw_and_i32_unaligned_release(ptr %ptr, i32 %value) {1946; -O0-LABEL: atomicrmw_and_i32_unaligned_release:1947; -O0: and w8, w9, w81948; -O0: bl __atomic_compare_exchange1949;1950; -O1-LABEL: atomicrmw_and_i32_unaligned_release:1951; -O1: and w8, w0, w201952; -O1: bl __atomic_compare_exchange1953 %r = atomicrmw and ptr %ptr, i32 %value release, align 11954 ret i32 %r1955}1956 1957define dso_local i32 @atomicrmw_and_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1958; -O0-LABEL: atomicrmw_and_i32_unaligned_acq_rel:1959; -O0: and w8, w9, w81960; -O0: bl __atomic_compare_exchange1961;1962; -O1-LABEL: atomicrmw_and_i32_unaligned_acq_rel:1963; -O1: and w8, w0, w201964; -O1: bl __atomic_compare_exchange1965 %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 11966 ret i32 %r1967}1968 1969define dso_local i32 @atomicrmw_and_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1970; -O0-LABEL: atomicrmw_and_i32_unaligned_seq_cst:1971; -O0: and w8, w9, w81972; -O0: bl __atomic_compare_exchange1973;1974; -O1-LABEL: atomicrmw_and_i32_unaligned_seq_cst:1975; -O1: and w8, w0, w201976; -O1: bl __atomic_compare_exchange1977 %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 11978 ret i32 %r1979}1980 1981define dso_local i64 @atomicrmw_and_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1982; -O0-LABEL: atomicrmw_and_i64_unaligned_monotonic:1983; -O0: and x8, x9, x81984; -O0: bl __atomic_compare_exchange1985;1986; -O1-LABEL: atomicrmw_and_i64_unaligned_monotonic:1987; -O1: and x8, x0, x201988; -O1: bl __atomic_compare_exchange1989 %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 11990 ret i64 %r1991}1992 1993define dso_local i64 @atomicrmw_and_i64_unaligned_acquire(ptr %ptr, i64 %value) {1994; -O0-LABEL: atomicrmw_and_i64_unaligned_acquire:1995; -O0: and x8, x9, x81996; -O0: bl __atomic_compare_exchange1997;1998; -O1-LABEL: atomicrmw_and_i64_unaligned_acquire:1999; -O1: and x8, x0, x202000; -O1: bl __atomic_compare_exchange2001 %r = atomicrmw and ptr %ptr, i64 %value acquire, align 12002 ret i64 %r2003}2004 2005define dso_local i64 @atomicrmw_and_i64_unaligned_release(ptr %ptr, i64 %value) {2006; -O0-LABEL: atomicrmw_and_i64_unaligned_release:2007; -O0: and x8, x9, x82008; -O0: bl __atomic_compare_exchange2009;2010; -O1-LABEL: atomicrmw_and_i64_unaligned_release:2011; -O1: and x8, x0, x202012; -O1: bl __atomic_compare_exchange2013 %r = atomicrmw and ptr %ptr, i64 %value release, align 12014 ret i64 %r2015}2016 2017define dso_local i64 @atomicrmw_and_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2018; -O0-LABEL: atomicrmw_and_i64_unaligned_acq_rel:2019; -O0: and x8, x9, x82020; -O0: bl __atomic_compare_exchange2021;2022; -O1-LABEL: atomicrmw_and_i64_unaligned_acq_rel:2023; -O1: and x8, x0, x202024; -O1: bl __atomic_compare_exchange2025 %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 12026 ret i64 %r2027}2028 2029define dso_local i64 @atomicrmw_and_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2030; -O0-LABEL: atomicrmw_and_i64_unaligned_seq_cst:2031; -O0: and x8, x9, x82032; -O0: bl __atomic_compare_exchange2033;2034; -O1-LABEL: atomicrmw_and_i64_unaligned_seq_cst:2035; -O1: and x8, x0, x202036; -O1: bl __atomic_compare_exchange2037 %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 12038 ret i64 %r2039}2040 2041define dso_local i128 @atomicrmw_and_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2042; -O0-LABEL: atomicrmw_and_i128_unaligned_monotonic:2043; -O0: and x8, x11, x82044; -O0: and x9, x10, x92045; -O0: bl __atomic_compare_exchange2046;2047; -O1-LABEL: atomicrmw_and_i128_unaligned_monotonic:2048; -O1: ldp x0, x1, [x0]2049; -O1: and x8, x1, x192050; -O1: and x9, x0, x212051; -O1: bl __atomic_compare_exchange2052 %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 12053 ret i128 %r2054}2055 2056define dso_local i128 @atomicrmw_and_i128_unaligned_acquire(ptr %ptr, i128 %value) {2057; -O0-LABEL: atomicrmw_and_i128_unaligned_acquire:2058; -O0: and x8, x11, x82059; -O0: and x9, x10, x92060; -O0: bl __atomic_compare_exchange2061;2062; -O1-LABEL: atomicrmw_and_i128_unaligned_acquire:2063; -O1: ldp x0, x1, [x0]2064; -O1: and x8, x1, x192065; -O1: and x9, x0, x212066; -O1: bl __atomic_compare_exchange2067 %r = atomicrmw and ptr %ptr, i128 %value acquire, align 12068 ret i128 %r2069}2070 2071define dso_local i128 @atomicrmw_and_i128_unaligned_release(ptr %ptr, i128 %value) {2072; -O0-LABEL: atomicrmw_and_i128_unaligned_release:2073; -O0: and x8, x11, x82074; -O0: and x9, x10, x92075; -O0: bl __atomic_compare_exchange2076;2077; -O1-LABEL: atomicrmw_and_i128_unaligned_release:2078; -O1: ldp x0, x1, [x0]2079; -O1: and x8, x1, x192080; -O1: and x9, x0, x212081; -O1: bl __atomic_compare_exchange2082 %r = atomicrmw and ptr %ptr, i128 %value release, align 12083 ret i128 %r2084}2085 2086define dso_local i128 @atomicrmw_and_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2087; -O0-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2088; -O0: and x8, x11, x82089; -O0: and x9, x10, x92090; -O0: bl __atomic_compare_exchange2091;2092; -O1-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2093; -O1: ldp x0, x1, [x0]2094; -O1: and x8, x1, x192095; -O1: and x9, x0, x212096; -O1: bl __atomic_compare_exchange2097 %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 12098 ret i128 %r2099}2100 2101define dso_local i128 @atomicrmw_and_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2102; -O0-LABEL: atomicrmw_and_i128_unaligned_seq_cst:2103; -O0: and x8, x11, x82104; -O0: and x9, x10, x92105; -O0: bl __atomic_compare_exchange2106;2107; -O1-LABEL: atomicrmw_and_i128_unaligned_seq_cst:2108; -O1: ldp x0, x1, [x0]2109; -O1: and x8, x1, x192110; -O1: and x9, x0, x212111; -O1: bl __atomic_compare_exchange2112 %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 12113 ret i128 %r2114}2115 2116define dso_local i8 @atomicrmw_nand_i8_aligned_monotonic(ptr %ptr, i8 %value) {2117; -O0-LABEL: atomicrmw_nand_i8_aligned_monotonic:2118; -O0: and w8, w0, w82119; -O0: mvn w1, w82120; -O0: bl __aarch64_cas1_relax2121; -O0: subs w8, w0, w8, uxtb2122;2123; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic:2124; -O1: ldxrb w8, [x0]2125; -O1: and w9, w8, w12126; -O1: mvn w9, w92127; -O1: stxrb w10, w9, [x0]2128 %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12129 ret i8 %r2130}2131 2132define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) {2133; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire:2134; -O0: and w8, w0, w82135; -O0: mvn w1, w82136; -O0: bl __aarch64_cas1_acq2137; -O0: subs w8, w0, w8, uxtb2138;2139; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire:2140; -O1: ldaxrb w8, [x0]2141; -O1: and w9, w8, w12142; -O1: mvn w9, w92143; -O1: stxrb w10, w9, [x0]2144 %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12145 ret i8 %r2146}2147 2148define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) {2149; -O0-LABEL: atomicrmw_nand_i8_aligned_release:2150; -O0: and w8, w0, w82151; -O0: mvn w1, w82152; -O0: bl __aarch64_cas1_rel2153; -O0: subs w8, w0, w8, uxtb2154;2155; -O1-LABEL: atomicrmw_nand_i8_aligned_release:2156; -O1: ldxrb w8, [x0]2157; -O1: and w9, w8, w12158; -O1: mvn w9, w92159; -O1: stlxrb w10, w9, [x0]2160 %r = atomicrmw nand ptr %ptr, i8 %value release, align 12161 ret i8 %r2162}2163 2164define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2165; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2166; -O0: and w8, w0, w82167; -O0: mvn w1, w82168; -O0: bl __aarch64_cas1_acq_rel2169; -O0: subs w8, w0, w8, uxtb2170;2171; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2172; -O1: ldaxrb w8, [x0]2173; -O1: and w9, w8, w12174; -O1: mvn w9, w92175; -O1: stlxrb w10, w9, [x0]2176 %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12177 ret i8 %r2178}2179 2180define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2181; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2182; -O0: and w8, w0, w82183; -O0: mvn w1, w82184; -O0: bl __aarch64_cas1_acq_rel2185; -O0: subs w8, w0, w8, uxtb2186;2187; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2188; -O1: ldaxrb w8, [x0]2189; -O1: and w9, w8, w12190; -O1: mvn w9, w92191; -O1: stlxrb w10, w9, [x0]2192 %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12193 ret i8 %r2194}2195 2196define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) {2197; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic:2198; -O0: and w8, w0, w82199; -O0: mvn w1, w82200; -O0: bl __aarch64_cas2_relax2201; -O0: subs w8, w0, w8, uxth2202;2203; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic:2204; -O1: ldxrh w8, [x0]2205; -O1: and w9, w8, w12206; -O1: mvn w9, w92207; -O1: stxrh w10, w9, [x0]2208 %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 22209 ret i16 %r2210}2211 2212define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) {2213; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire:2214; -O0: and w8, w0, w82215; -O0: mvn w1, w82216; -O0: bl __aarch64_cas2_acq2217; -O0: subs w8, w0, w8, uxth2218;2219; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire:2220; -O1: ldaxrh w8, [x0]2221; -O1: and w9, w8, w12222; -O1: mvn w9, w92223; -O1: stxrh w10, w9, [x0]2224 %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 22225 ret i16 %r2226}2227 2228define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) {2229; -O0-LABEL: atomicrmw_nand_i16_aligned_release:2230; -O0: and w8, w0, w82231; -O0: mvn w1, w82232; -O0: bl __aarch64_cas2_rel2233; -O0: subs w8, w0, w8, uxth2234;2235; -O1-LABEL: atomicrmw_nand_i16_aligned_release:2236; -O1: ldxrh w8, [x0]2237; -O1: and w9, w8, w12238; -O1: mvn w9, w92239; -O1: stlxrh w10, w9, [x0]2240 %r = atomicrmw nand ptr %ptr, i16 %value release, align 22241 ret i16 %r2242}2243 2244define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2245; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2246; -O0: and w8, w0, w82247; -O0: mvn w1, w82248; -O0: bl __aarch64_cas2_acq_rel2249; -O0: subs w8, w0, w8, uxth2250;2251; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2252; -O1: ldaxrh w8, [x0]2253; -O1: and w9, w8, w12254; -O1: mvn w9, w92255; -O1: stlxrh w10, w9, [x0]2256 %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 22257 ret i16 %r2258}2259 2260define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2261; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2262; -O0: and w8, w0, w82263; -O0: mvn w1, w82264; -O0: bl __aarch64_cas2_acq_rel2265; -O0: subs w8, w0, w8, uxth2266;2267; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2268; -O1: ldaxrh w8, [x0]2269; -O1: and w9, w8, w12270; -O1: mvn w9, w92271; -O1: stlxrh w10, w9, [x0]2272 %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 22273 ret i16 %r2274}2275 2276define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) {2277; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic:2278; -O0: and w8, w0, w82279; -O0: mvn w1, w82280; -O0: bl __aarch64_cas4_relax2281; -O0: subs w8, w0, w82282;2283; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic:2284; -O1: ldxr w8, [x0]2285; -O1: and w9, w8, w12286; -O1: mvn w9, w92287; -O1: stxr w10, w9, [x0]2288 %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 42289 ret i32 %r2290}2291 2292define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) {2293; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire:2294; -O0: and w8, w0, w82295; -O0: mvn w1, w82296; -O0: bl __aarch64_cas4_acq2297; -O0: subs w8, w0, w82298;2299; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire:2300; -O1: ldaxr w8, [x0]2301; -O1: and w9, w8, w12302; -O1: mvn w9, w92303; -O1: stxr w10, w9, [x0]2304 %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 42305 ret i32 %r2306}2307 2308define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) {2309; -O0-LABEL: atomicrmw_nand_i32_aligned_release:2310; -O0: and w8, w0, w82311; -O0: mvn w1, w82312; -O0: bl __aarch64_cas4_rel2313; -O0: subs w8, w0, w82314;2315; -O1-LABEL: atomicrmw_nand_i32_aligned_release:2316; -O1: ldxr w8, [x0]2317; -O1: and w9, w8, w12318; -O1: mvn w9, w92319; -O1: stlxr w10, w9, [x0]2320 %r = atomicrmw nand ptr %ptr, i32 %value release, align 42321 ret i32 %r2322}2323 2324define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2325; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2326; -O0: and w8, w0, w82327; -O0: mvn w1, w82328; -O0: bl __aarch64_cas4_acq_rel2329; -O0: subs w8, w0, w82330;2331; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2332; -O1: ldaxr w8, [x0]2333; -O1: and w9, w8, w12334; -O1: mvn w9, w92335; -O1: stlxr w10, w9, [x0]2336 %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 42337 ret i32 %r2338}2339 2340define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2341; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2342; -O0: and w8, w0, w82343; -O0: mvn w1, w82344; -O0: bl __aarch64_cas4_acq_rel2345; -O0: subs w8, w0, w82346;2347; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2348; -O1: ldaxr w8, [x0]2349; -O1: and w9, w8, w12350; -O1: mvn w9, w92351; -O1: stlxr w10, w9, [x0]2352 %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 42353 ret i32 %r2354}2355 2356define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) {2357; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic:2358; -O0: and x8, x0, x82359; -O0: mvn x1, x82360; -O0: bl __aarch64_cas8_relax2361; -O0: subs x8, x0, x82362;2363; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic:2364; -O1: ldxr x0, [x8]2365; -O1: and x9, x0, x12366; -O1: mvn x9, x92367; -O1: stxr w10, x9, [x8]2368 %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 82369 ret i64 %r2370}2371 2372define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) {2373; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire:2374; -O0: and x8, x0, x82375; -O0: mvn x1, x82376; -O0: bl __aarch64_cas8_acq2377; -O0: subs x8, x0, x82378;2379; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire:2380; -O1: ldaxr x0, [x8]2381; -O1: and x9, x0, x12382; -O1: mvn x9, x92383; -O1: stxr w10, x9, [x8]2384 %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 82385 ret i64 %r2386}2387 2388define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) {2389; -O0-LABEL: atomicrmw_nand_i64_aligned_release:2390; -O0: and x8, x0, x82391; -O0: mvn x1, x82392; -O0: bl __aarch64_cas8_rel2393; -O0: subs x8, x0, x82394;2395; -O1-LABEL: atomicrmw_nand_i64_aligned_release:2396; -O1: ldxr x0, [x8]2397; -O1: and x9, x0, x12398; -O1: mvn x9, x92399; -O1: stlxr w10, x9, [x8]2400 %r = atomicrmw nand ptr %ptr, i64 %value release, align 82401 ret i64 %r2402}2403 2404define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2405; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2406; -O0: and x8, x0, x82407; -O0: mvn x1, x82408; -O0: bl __aarch64_cas8_acq_rel2409; -O0: subs x8, x0, x82410;2411; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2412; -O1: ldaxr x0, [x8]2413; -O1: and x9, x0, x12414; -O1: mvn x9, x92415; -O1: stlxr w10, x9, [x8]2416 %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 82417 ret i64 %r2418}2419 2420define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2421; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2422; -O0: and x8, x0, x82423; -O0: mvn x1, x82424; -O0: bl __aarch64_cas8_acq_rel2425; -O0: subs x8, x0, x82426;2427; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2428; -O1: ldaxr x0, [x8]2429; -O1: and x9, x0, x12430; -O1: mvn x9, x92431; -O1: stlxr w10, x9, [x8]2432 %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 82433 ret i64 %r2434}2435 2436define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) {2437; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic:2438; -O0: and x8, x1, x82439; -O0: and x9, x0, x92440; -O0: mvn x2, x92441; -O0: mvn x3, x82442; -O0: bl __aarch64_cas16_relax2443; -O0: subs x10, x10, x112444; -O0: ccmp x8, x9, #0, eq2445;2446; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic:2447; -O1: ldxp x1, x0, [x8]2448; -O1: and x9, x1, x32449; -O1: and x10, x0, x22450; -O1: mvn x10, x102451; -O1: mvn x9, x92452; -O1: stxp w11, x9, x10, [x8]2453 %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 162454 ret i128 %r2455}2456 2457define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) {2458; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire:2459; -O0: and x8, x1, x82460; -O0: and x9, x0, x92461; -O0: mvn x2, x92462; -O0: mvn x3, x82463; -O0: bl __aarch64_cas16_acq2464; -O0: subs x10, x10, x112465; -O0: ccmp x8, x9, #0, eq2466;2467; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire:2468; -O1: ldaxp x1, x0, [x8]2469; -O1: and x9, x1, x32470; -O1: and x10, x0, x22471; -O1: mvn x10, x102472; -O1: mvn x9, x92473; -O1: stxp w11, x9, x10, [x8]2474 %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 162475 ret i128 %r2476}2477 2478define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) {2479; -O0-LABEL: atomicrmw_nand_i128_aligned_release:2480; -O0: and x8, x1, x82481; -O0: and x9, x0, x92482; -O0: mvn x2, x92483; -O0: mvn x3, x82484; -O0: bl __aarch64_cas16_rel2485; -O0: subs x10, x10, x112486; -O0: ccmp x8, x9, #0, eq2487;2488; -O1-LABEL: atomicrmw_nand_i128_aligned_release:2489; -O1: ldxp x1, x0, [x8]2490; -O1: and x9, x1, x32491; -O1: and x10, x0, x22492; -O1: mvn x10, x102493; -O1: mvn x9, x92494; -O1: stlxp w11, x9, x10, [x8]2495 %r = atomicrmw nand ptr %ptr, i128 %value release, align 162496 ret i128 %r2497}2498 2499define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2500; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2501; -O0: and x8, x1, x82502; -O0: and x9, x0, x92503; -O0: mvn x2, x92504; -O0: mvn x3, x82505; -O0: bl __aarch64_cas16_acq_rel2506; -O0: subs x10, x10, x112507; -O0: ccmp x8, x9, #0, eq2508;2509; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2510; -O1: ldaxp x1, x0, [x8]2511; -O1: and x9, x1, x32512; -O1: and x10, x0, x22513; -O1: mvn x10, x102514; -O1: mvn x9, x92515; -O1: stlxp w11, x9, x10, [x8]2516 %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 162517 ret i128 %r2518}2519 2520define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) {2521; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2522; -O0: and x8, x1, x82523; -O0: and x9, x0, x92524; -O0: mvn x2, x92525; -O0: mvn x3, x82526; -O0: bl __aarch64_cas16_acq_rel2527; -O0: subs x10, x10, x112528; -O0: ccmp x8, x9, #0, eq2529;2530; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2531; -O1: ldaxp x1, x0, [x8]2532; -O1: and x9, x1, x32533; -O1: and x10, x0, x22534; -O1: mvn x10, x102535; -O1: mvn x9, x92536; -O1: stlxp w11, x9, x10, [x8]2537 %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 162538 ret i128 %r2539}2540 2541define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) {2542; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2543; -O0: and w8, w0, w82544; -O0: mvn w1, w82545; -O0: bl __aarch64_cas1_relax2546; -O0: subs w8, w0, w8, uxtb2547;2548; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2549; -O1: ldxrb w8, [x0]2550; -O1: and w9, w8, w12551; -O1: mvn w9, w92552; -O1: stxrb w10, w9, [x0]2553 %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12554 ret i8 %r2555}2556 2557define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) {2558; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire:2559; -O0: and w8, w0, w82560; -O0: mvn w1, w82561; -O0: bl __aarch64_cas1_acq2562; -O0: subs w8, w0, w8, uxtb2563;2564; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire:2565; -O1: ldaxrb w8, [x0]2566; -O1: and w9, w8, w12567; -O1: mvn w9, w92568; -O1: stxrb w10, w9, [x0]2569 %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12570 ret i8 %r2571}2572 2573define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) {2574; -O0-LABEL: atomicrmw_nand_i8_unaligned_release:2575; -O0: and w8, w0, w82576; -O0: mvn w1, w82577; -O0: bl __aarch64_cas1_rel2578; -O0: subs w8, w0, w8, uxtb2579;2580; -O1-LABEL: atomicrmw_nand_i8_unaligned_release:2581; -O1: ldxrb w8, [x0]2582; -O1: and w9, w8, w12583; -O1: mvn w9, w92584; -O1: stlxrb w10, w9, [x0]2585 %r = atomicrmw nand ptr %ptr, i8 %value release, align 12586 ret i8 %r2587}2588 2589define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {2590; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2591; -O0: and w8, w0, w82592; -O0: mvn w1, w82593; -O0: bl __aarch64_cas1_acq_rel2594; -O0: subs w8, w0, w8, uxtb2595;2596; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2597; -O1: ldaxrb w8, [x0]2598; -O1: and w9, w8, w12599; -O1: mvn w9, w92600; -O1: stlxrb w10, w9, [x0]2601 %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12602 ret i8 %r2603}2604 2605define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {2606; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2607; -O0: and w8, w0, w82608; -O0: mvn w1, w82609; -O0: bl __aarch64_cas1_acq_rel2610; -O0: subs w8, w0, w8, uxtb2611;2612; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2613; -O1: ldaxrb w8, [x0]2614; -O1: and w9, w8, w12615; -O1: mvn w9, w92616; -O1: stlxrb w10, w9, [x0]2617 %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12618 ret i8 %r2619}2620 2621define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) {2622; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2623; -O0: and w8, w9, w82624; -O0: mvn w8, w82625; -O0: bl __atomic_compare_exchange2626;2627; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2628; -O1: and w8, w0, w202629; -O1: mvn w8, w82630; -O1: bl __atomic_compare_exchange2631 %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 12632 ret i16 %r2633}2634 2635define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) {2636; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire:2637; -O0: and w8, w9, w82638; -O0: mvn w8, w82639; -O0: bl __atomic_compare_exchange2640;2641; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire:2642; -O1: and w8, w0, w202643; -O1: mvn w8, w82644; -O1: bl __atomic_compare_exchange2645 %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 12646 ret i16 %r2647}2648 2649define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) {2650; -O0-LABEL: atomicrmw_nand_i16_unaligned_release:2651; -O0: and w8, w9, w82652; -O0: mvn w8, w82653; -O0: bl __atomic_compare_exchange2654;2655; -O1-LABEL: atomicrmw_nand_i16_unaligned_release:2656; -O1: and w8, w0, w202657; -O1: mvn w8, w82658; -O1: bl __atomic_compare_exchange2659 %r = atomicrmw nand ptr %ptr, i16 %value release, align 12660 ret i16 %r2661}2662 2663define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {2664; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2665; -O0: and w8, w9, w82666; -O0: mvn w8, w82667; -O0: bl __atomic_compare_exchange2668;2669; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2670; -O1: and w8, w0, w202671; -O1: mvn w8, w82672; -O1: bl __atomic_compare_exchange2673 %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 12674 ret i16 %r2675}2676 2677define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {2678; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2679; -O0: and w8, w9, w82680; -O0: mvn w8, w82681; -O0: bl __atomic_compare_exchange2682;2683; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2684; -O1: and w8, w0, w202685; -O1: mvn w8, w82686; -O1: bl __atomic_compare_exchange2687 %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 12688 ret i16 %r2689}2690 2691define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) {2692; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2693; -O0: and w8, w9, w82694; -O0: mvn w8, w82695; -O0: bl __atomic_compare_exchange2696;2697; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2698; -O1: and w8, w0, w202699; -O1: mvn w8, w82700; -O1: bl __atomic_compare_exchange2701 %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 12702 ret i32 %r2703}2704 2705define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) {2706; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire:2707; -O0: and w8, w9, w82708; -O0: mvn w8, w82709; -O0: bl __atomic_compare_exchange2710;2711; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire:2712; -O1: and w8, w0, w202713; -O1: mvn w8, w82714; -O1: bl __atomic_compare_exchange2715 %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 12716 ret i32 %r2717}2718 2719define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) {2720; -O0-LABEL: atomicrmw_nand_i32_unaligned_release:2721; -O0: and w8, w9, w82722; -O0: mvn w8, w82723; -O0: bl __atomic_compare_exchange2724;2725; -O1-LABEL: atomicrmw_nand_i32_unaligned_release:2726; -O1: and w8, w0, w202727; -O1: mvn w8, w82728; -O1: bl __atomic_compare_exchange2729 %r = atomicrmw nand ptr %ptr, i32 %value release, align 12730 ret i32 %r2731}2732 2733define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {2734; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2735; -O0: and w8, w9, w82736; -O0: mvn w8, w82737; -O0: bl __atomic_compare_exchange2738;2739; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2740; -O1: and w8, w0, w202741; -O1: mvn w8, w82742; -O1: bl __atomic_compare_exchange2743 %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 12744 ret i32 %r2745}2746 2747define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {2748; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2749; -O0: and w8, w9, w82750; -O0: mvn w8, w82751; -O0: bl __atomic_compare_exchange2752;2753; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2754; -O1: and w8, w0, w202755; -O1: mvn w8, w82756; -O1: bl __atomic_compare_exchange2757 %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 12758 ret i32 %r2759}2760 2761define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2762; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2763; -O0: and x8, x9, x82764; -O0: mvn x8, x82765; -O0: bl __atomic_compare_exchange2766;2767; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2768; -O1: and x8, x0, x202769; -O1: mvn x8, x82770; -O1: bl __atomic_compare_exchange2771 %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 12772 ret i64 %r2773}2774 2775define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) {2776; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire:2777; -O0: and x8, x9, x82778; -O0: mvn x8, x82779; -O0: bl __atomic_compare_exchange2780;2781; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire:2782; -O1: and x8, x0, x202783; -O1: mvn x8, x82784; -O1: bl __atomic_compare_exchange2785 %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 12786 ret i64 %r2787}2788 2789define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) {2790; -O0-LABEL: atomicrmw_nand_i64_unaligned_release:2791; -O0: and x8, x9, x82792; -O0: mvn x8, x82793; -O0: bl __atomic_compare_exchange2794;2795; -O1-LABEL: atomicrmw_nand_i64_unaligned_release:2796; -O1: and x8, x0, x202797; -O1: mvn x8, x82798; -O1: bl __atomic_compare_exchange2799 %r = atomicrmw nand ptr %ptr, i64 %value release, align 12800 ret i64 %r2801}2802 2803define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2804; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2805; -O0: and x8, x9, x82806; -O0: mvn x8, x82807; -O0: bl __atomic_compare_exchange2808;2809; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2810; -O1: and x8, x0, x202811; -O1: mvn x8, x82812; -O1: bl __atomic_compare_exchange2813 %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 12814 ret i64 %r2815}2816 2817define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2818; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2819; -O0: and x8, x9, x82820; -O0: mvn x8, x82821; -O0: bl __atomic_compare_exchange2822;2823; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2824; -O1: and x8, x0, x202825; -O1: mvn x8, x82826; -O1: bl __atomic_compare_exchange2827 %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 12828 ret i64 %r2829}2830 2831define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2832; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2833; -O0: and x9, x11, x92834; -O0: and x8, x10, x82835; -O0: mvn x8, x82836; -O0: mvn x9, x92837; -O0: bl __atomic_compare_exchange2838;2839; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2840; -O1: ldp x0, x1, [x0]2841; -O1: and x8, x1, x192842; -O1: and x9, x0, x212843; -O1: mvn x8, x82844; -O1: mvn x9, x92845; -O1: bl __atomic_compare_exchange2846 %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 12847 ret i128 %r2848}2849 2850define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) {2851; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire:2852; -O0: and x9, x11, x92853; -O0: and x8, x10, x82854; -O0: mvn x8, x82855; -O0: mvn x9, x92856; -O0: bl __atomic_compare_exchange2857;2858; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire:2859; -O1: ldp x0, x1, [x0]2860; -O1: and x8, x1, x192861; -O1: and x9, x0, x212862; -O1: mvn x8, x82863; -O1: mvn x9, x92864; -O1: bl __atomic_compare_exchange2865 %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 12866 ret i128 %r2867}2868 2869define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) {2870; -O0-LABEL: atomicrmw_nand_i128_unaligned_release:2871; -O0: and x9, x11, x92872; -O0: and x8, x10, x82873; -O0: mvn x8, x82874; -O0: mvn x9, x92875; -O0: bl __atomic_compare_exchange2876;2877; -O1-LABEL: atomicrmw_nand_i128_unaligned_release:2878; -O1: ldp x0, x1, [x0]2879; -O1: and x8, x1, x192880; -O1: and x9, x0, x212881; -O1: mvn x8, x82882; -O1: mvn x9, x92883; -O1: bl __atomic_compare_exchange2884 %r = atomicrmw nand ptr %ptr, i128 %value release, align 12885 ret i128 %r2886}2887 2888define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2889; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2890; -O0: and x9, x11, x92891; -O0: and x8, x10, x82892; -O0: mvn x8, x82893; -O0: mvn x9, x92894; -O0: bl __atomic_compare_exchange2895;2896; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2897; -O1: ldp x0, x1, [x0]2898; -O1: and x8, x1, x192899; -O1: and x9, x0, x212900; -O1: mvn x8, x82901; -O1: mvn x9, x92902; -O1: bl __atomic_compare_exchange2903 %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 12904 ret i128 %r2905}2906 2907define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2908; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2909; -O0: and x9, x11, x92910; -O0: and x8, x10, x82911; -O0: mvn x8, x82912; -O0: mvn x9, x92913; -O0: bl __atomic_compare_exchange2914;2915; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2916; -O1: ldp x0, x1, [x0]2917; -O1: and x8, x1, x192918; -O1: and x9, x0, x212919; -O1: mvn x8, x82920; -O1: mvn x9, x92921; -O1: bl __atomic_compare_exchange2922 %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 12923 ret i128 %r2924}2925 2926define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) {2927; CHECK-LABEL: atomicrmw_or_i8_aligned_monotonic:2928; CHECK: bl __aarch64_ldset1_relax2929 %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 12930 ret i8 %r2931}2932 2933define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) {2934; CHECK-LABEL: atomicrmw_or_i8_aligned_acquire:2935; CHECK: bl __aarch64_ldset1_acq2936 %r = atomicrmw or ptr %ptr, i8 %value acquire, align 12937 ret i8 %r2938}2939 2940define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) {2941; CHECK-LABEL: atomicrmw_or_i8_aligned_release:2942; CHECK: bl __aarch64_ldset1_rel2943 %r = atomicrmw or ptr %ptr, i8 %value release, align 12944 ret i8 %r2945}2946 2947define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2948; CHECK-LABEL: atomicrmw_or_i8_aligned_acq_rel:2949; CHECK: bl __aarch64_ldset1_acq_rel2950 %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 12951 ret i8 %r2952}2953 2954define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2955; CHECK-LABEL: atomicrmw_or_i8_aligned_seq_cst:2956; CHECK: bl __aarch64_ldset1_acq_rel2957 %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 12958 ret i8 %r2959}2960 2961define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) {2962; CHECK-LABEL: atomicrmw_or_i16_aligned_monotonic:2963; CHECK: bl __aarch64_ldset2_relax2964 %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 22965 ret i16 %r2966}2967 2968define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) {2969; CHECK-LABEL: atomicrmw_or_i16_aligned_acquire:2970; CHECK: bl __aarch64_ldset2_acq2971 %r = atomicrmw or ptr %ptr, i16 %value acquire, align 22972 ret i16 %r2973}2974 2975define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) {2976; CHECK-LABEL: atomicrmw_or_i16_aligned_release:2977; CHECK: bl __aarch64_ldset2_rel2978 %r = atomicrmw or ptr %ptr, i16 %value release, align 22979 ret i16 %r2980}2981 2982define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2983; CHECK-LABEL: atomicrmw_or_i16_aligned_acq_rel:2984; CHECK: bl __aarch64_ldset2_acq_rel2985 %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 22986 ret i16 %r2987}2988 2989define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2990; CHECK-LABEL: atomicrmw_or_i16_aligned_seq_cst:2991; CHECK: bl __aarch64_ldset2_acq_rel2992 %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 22993 ret i16 %r2994}2995 2996define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) {2997; CHECK-LABEL: atomicrmw_or_i32_aligned_monotonic:2998; CHECK: bl __aarch64_ldset4_relax2999 %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 43000 ret i32 %r3001}3002 3003define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) {3004; CHECK-LABEL: atomicrmw_or_i32_aligned_acquire:3005; CHECK: bl __aarch64_ldset4_acq3006 %r = atomicrmw or ptr %ptr, i32 %value acquire, align 43007 ret i32 %r3008}3009 3010define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) {3011; CHECK-LABEL: atomicrmw_or_i32_aligned_release:3012; CHECK: bl __aarch64_ldset4_rel3013 %r = atomicrmw or ptr %ptr, i32 %value release, align 43014 ret i32 %r3015}3016 3017define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3018; CHECK-LABEL: atomicrmw_or_i32_aligned_acq_rel:3019; CHECK: bl __aarch64_ldset4_acq_rel3020 %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 43021 ret i32 %r3022}3023 3024define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3025; CHECK-LABEL: atomicrmw_or_i32_aligned_seq_cst:3026; CHECK: bl __aarch64_ldset4_acq_rel3027 %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 43028 ret i32 %r3029}3030 3031define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) {3032; CHECK-LABEL: atomicrmw_or_i64_aligned_monotonic:3033; CHECK: bl __aarch64_ldset8_relax3034 %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 83035 ret i64 %r3036}3037 3038define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) {3039; CHECK-LABEL: atomicrmw_or_i64_aligned_acquire:3040; CHECK: bl __aarch64_ldset8_acq3041 %r = atomicrmw or ptr %ptr, i64 %value acquire, align 83042 ret i64 %r3043}3044 3045define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) {3046; CHECK-LABEL: atomicrmw_or_i64_aligned_release:3047; CHECK: bl __aarch64_ldset8_rel3048 %r = atomicrmw or ptr %ptr, i64 %value release, align 83049 ret i64 %r3050}3051 3052define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3053; CHECK-LABEL: atomicrmw_or_i64_aligned_acq_rel:3054; CHECK: bl __aarch64_ldset8_acq_rel3055 %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 83056 ret i64 %r3057}3058 3059define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3060; CHECK-LABEL: atomicrmw_or_i64_aligned_seq_cst:3061; CHECK: bl __aarch64_ldset8_acq_rel3062 %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 83063 ret i64 %r3064}3065 3066define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) {3067; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic:3068; -O0: orr x2, x0, x93069; -O0: orr x3, x1, x83070; -O0: bl __aarch64_cas16_relax3071; -O0: subs x10, x10, x113072; -O0: ccmp x8, x9, #0, eq3073;3074; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic:3075; -O1: ldxp x1, x0, [x8]3076; -O1: orr x9, x0, x23077; -O1: orr x10, x1, x33078; -O1: stxp w11, x10, x9, [x8]3079 %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 163080 ret i128 %r3081}3082 3083define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) {3084; -O0-LABEL: atomicrmw_or_i128_aligned_acquire:3085; -O0: orr x2, x0, x93086; -O0: orr x3, x1, x83087; -O0: bl __aarch64_cas16_acq3088; -O0: subs x10, x10, x113089; -O0: ccmp x8, x9, #0, eq3090;3091; -O1-LABEL: atomicrmw_or_i128_aligned_acquire:3092; -O1: ldaxp x1, x0, [x8]3093; -O1: orr x9, x0, x23094; -O1: orr x10, x1, x33095; -O1: stxp w11, x10, x9, [x8]3096 %r = atomicrmw or ptr %ptr, i128 %value acquire, align 163097 ret i128 %r3098}3099 3100define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) {3101; -O0-LABEL: atomicrmw_or_i128_aligned_release:3102; -O0: orr x2, x0, x93103; -O0: orr x3, x1, x83104; -O0: bl __aarch64_cas16_rel3105; -O0: subs x10, x10, x113106; -O0: ccmp x8, x9, #0, eq3107;3108; -O1-LABEL: atomicrmw_or_i128_aligned_release:3109; -O1: ldxp x1, x0, [x8]3110; -O1: orr x9, x0, x23111; -O1: orr x10, x1, x33112; -O1: stlxp w11, x10, x9, [x8]3113 %r = atomicrmw or ptr %ptr, i128 %value release, align 163114 ret i128 %r3115}3116 3117define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3118; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel:3119; -O0: orr x2, x0, x93120; -O0: orr x3, x1, x83121; -O0: bl __aarch64_cas16_acq_rel3122; -O0: subs x10, x10, x113123; -O0: ccmp x8, x9, #0, eq3124;3125; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel:3126; -O1: ldaxp x1, x0, [x8]3127; -O1: orr x9, x0, x23128; -O1: orr x10, x1, x33129; -O1: stlxp w11, x10, x9, [x8]3130 %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 163131 ret i128 %r3132}3133 3134define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3135; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst:3136; -O0: orr x2, x0, x93137; -O0: orr x3, x1, x83138; -O0: bl __aarch64_cas16_acq_rel3139; -O0: subs x10, x10, x113140; -O0: ccmp x8, x9, #0, eq3141;3142; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst:3143; -O1: ldaxp x1, x0, [x8]3144; -O1: orr x9, x0, x23145; -O1: orr x10, x1, x33146; -O1: stlxp w11, x10, x9, [x8]3147 %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 163148 ret i128 %r3149}3150 3151define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3152; CHECK-LABEL: atomicrmw_or_i8_unaligned_monotonic:3153; CHECK: bl __aarch64_ldset1_relax3154 %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 13155 ret i8 %r3156}3157 3158define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) {3159; CHECK-LABEL: atomicrmw_or_i8_unaligned_acquire:3160; CHECK: bl __aarch64_ldset1_acq3161 %r = atomicrmw or ptr %ptr, i8 %value acquire, align 13162 ret i8 %r3163}3164 3165define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) {3166; CHECK-LABEL: atomicrmw_or_i8_unaligned_release:3167; CHECK: bl __aarch64_ldset1_rel3168 %r = atomicrmw or ptr %ptr, i8 %value release, align 13169 ret i8 %r3170}3171 3172define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3173; CHECK-LABEL: atomicrmw_or_i8_unaligned_acq_rel:3174; CHECK: bl __aarch64_ldset1_acq_rel3175 %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 13176 ret i8 %r3177}3178 3179define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3180; CHECK-LABEL: atomicrmw_or_i8_unaligned_seq_cst:3181; CHECK: bl __aarch64_ldset1_acq_rel3182 %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 13183 ret i8 %r3184}3185 3186define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3187; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic:3188; -O0: orr w8, w9, w83189; -O0: bl __atomic_compare_exchange3190;3191; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic:3192; -O1: orr w8, w0, w203193; -O1: bl __atomic_compare_exchange3194 %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 13195 ret i16 %r3196}3197 3198define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) {3199; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire:3200; -O0: orr w8, w9, w83201; -O0: bl __atomic_compare_exchange3202;3203; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire:3204; -O1: orr w8, w0, w203205; -O1: bl __atomic_compare_exchange3206 %r = atomicrmw or ptr %ptr, i16 %value acquire, align 13207 ret i16 %r3208}3209 3210define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) {3211; -O0-LABEL: atomicrmw_or_i16_unaligned_release:3212; -O0: orr w8, w9, w83213; -O0: bl __atomic_compare_exchange3214;3215; -O1-LABEL: atomicrmw_or_i16_unaligned_release:3216; -O1: orr w8, w0, w203217; -O1: bl __atomic_compare_exchange3218 %r = atomicrmw or ptr %ptr, i16 %value release, align 13219 ret i16 %r3220}3221 3222define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3223; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3224; -O0: orr w8, w9, w83225; -O0: bl __atomic_compare_exchange3226;3227; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3228; -O1: orr w8, w0, w203229; -O1: bl __atomic_compare_exchange3230 %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 13231 ret i16 %r3232}3233 3234define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3235; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3236; -O0: orr w8, w9, w83237; -O0: bl __atomic_compare_exchange3238;3239; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3240; -O1: orr w8, w0, w203241; -O1: bl __atomic_compare_exchange3242 %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 13243 ret i16 %r3244}3245 3246define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3247; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic:3248; -O0: orr w8, w9, w83249; -O0: bl __atomic_compare_exchange3250;3251; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic:3252; -O1: orr w8, w0, w203253; -O1: bl __atomic_compare_exchange3254 %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 13255 ret i32 %r3256}3257 3258define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) {3259; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire:3260; -O0: orr w8, w9, w83261; -O0: bl __atomic_compare_exchange3262;3263; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire:3264; -O1: orr w8, w0, w203265; -O1: bl __atomic_compare_exchange3266 %r = atomicrmw or ptr %ptr, i32 %value acquire, align 13267 ret i32 %r3268}3269 3270define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) {3271; -O0-LABEL: atomicrmw_or_i32_unaligned_release:3272; -O0: orr w8, w9, w83273; -O0: bl __atomic_compare_exchange3274;3275; -O1-LABEL: atomicrmw_or_i32_unaligned_release:3276; -O1: orr w8, w0, w203277; -O1: bl __atomic_compare_exchange3278 %r = atomicrmw or ptr %ptr, i32 %value release, align 13279 ret i32 %r3280}3281 3282define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3283; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3284; -O0: orr w8, w9, w83285; -O0: bl __atomic_compare_exchange3286;3287; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3288; -O1: orr w8, w0, w203289; -O1: bl __atomic_compare_exchange3290 %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 13291 ret i32 %r3292}3293 3294define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3295; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3296; -O0: orr w8, w9, w83297; -O0: bl __atomic_compare_exchange3298;3299; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3300; -O1: orr w8, w0, w203301; -O1: bl __atomic_compare_exchange3302 %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 13303 ret i32 %r3304}3305 3306define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3307; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic:3308; -O0: orr x8, x9, x83309; -O0: bl __atomic_compare_exchange3310;3311; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic:3312; -O1: orr x8, x0, x203313; -O1: bl __atomic_compare_exchange3314 %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 13315 ret i64 %r3316}3317 3318define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) {3319; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire:3320; -O0: orr x8, x9, x83321; -O0: bl __atomic_compare_exchange3322;3323; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire:3324; -O1: orr x8, x0, x203325; -O1: bl __atomic_compare_exchange3326 %r = atomicrmw or ptr %ptr, i64 %value acquire, align 13327 ret i64 %r3328}3329 3330define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) {3331; -O0-LABEL: atomicrmw_or_i64_unaligned_release:3332; -O0: orr x8, x9, x83333; -O0: bl __atomic_compare_exchange3334;3335; -O1-LABEL: atomicrmw_or_i64_unaligned_release:3336; -O1: orr x8, x0, x203337; -O1: bl __atomic_compare_exchange3338 %r = atomicrmw or ptr %ptr, i64 %value release, align 13339 ret i64 %r3340}3341 3342define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3343; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3344; -O0: orr x8, x9, x83345; -O0: bl __atomic_compare_exchange3346;3347; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3348; -O1: orr x8, x0, x203349; -O1: bl __atomic_compare_exchange3350 %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 13351 ret i64 %r3352}3353 3354define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3355; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3356; -O0: orr x8, x9, x83357; -O0: bl __atomic_compare_exchange3358;3359; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3360; -O1: orr x8, x0, x203361; -O1: bl __atomic_compare_exchange3362 %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 13363 ret i64 %r3364}3365 3366define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3367; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic:3368; -O0: orr x8, x11, x83369; -O0: orr x9, x10, x93370; -O0: bl __atomic_compare_exchange3371;3372; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic:3373; -O1: ldp x0, x1, [x0]3374; -O1: orr x8, x1, x193375; -O1: orr x9, x0, x213376; -O1: bl __atomic_compare_exchange3377 %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 13378 ret i128 %r3379}3380 3381define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) {3382; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire:3383; -O0: orr x8, x11, x83384; -O0: orr x9, x10, x93385; -O0: bl __atomic_compare_exchange3386;3387; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire:3388; -O1: ldp x0, x1, [x0]3389; -O1: orr x8, x1, x193390; -O1: orr x9, x0, x213391; -O1: bl __atomic_compare_exchange3392 %r = atomicrmw or ptr %ptr, i128 %value acquire, align 13393 ret i128 %r3394}3395 3396define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) {3397; -O0-LABEL: atomicrmw_or_i128_unaligned_release:3398; -O0: orr x8, x11, x83399; -O0: orr x9, x10, x93400; -O0: bl __atomic_compare_exchange3401;3402; -O1-LABEL: atomicrmw_or_i128_unaligned_release:3403; -O1: ldp x0, x1, [x0]3404; -O1: orr x8, x1, x193405; -O1: orr x9, x0, x213406; -O1: bl __atomic_compare_exchange3407 %r = atomicrmw or ptr %ptr, i128 %value release, align 13408 ret i128 %r3409}3410 3411define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3412; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3413; -O0: orr x8, x11, x83414; -O0: orr x9, x10, x93415; -O0: bl __atomic_compare_exchange3416;3417; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3418; -O1: ldp x0, x1, [x0]3419; -O1: orr x8, x1, x193420; -O1: orr x9, x0, x213421; -O1: bl __atomic_compare_exchange3422 %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 13423 ret i128 %r3424}3425 3426define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3427; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3428; -O0: orr x8, x11, x83429; -O0: orr x9, x10, x93430; -O0: bl __atomic_compare_exchange3431;3432; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3433; -O1: ldp x0, x1, [x0]3434; -O1: orr x8, x1, x193435; -O1: orr x9, x0, x213436; -O1: bl __atomic_compare_exchange3437 %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 13438 ret i128 %r3439}3440 3441define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) {3442; CHECK-LABEL: atomicrmw_xor_i8_aligned_monotonic:3443; CHECK: bl __aarch64_ldeor1_relax3444 %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13445 ret i8 %r3446}3447 3448define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) {3449; CHECK-LABEL: atomicrmw_xor_i8_aligned_acquire:3450; CHECK: bl __aarch64_ldeor1_acq3451 %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13452 ret i8 %r3453}3454 3455define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) {3456; CHECK-LABEL: atomicrmw_xor_i8_aligned_release:3457; CHECK: bl __aarch64_ldeor1_rel3458 %r = atomicrmw xor ptr %ptr, i8 %value release, align 13459 ret i8 %r3460}3461 3462define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3463; CHECK-LABEL: atomicrmw_xor_i8_aligned_acq_rel:3464; CHECK: bl __aarch64_ldeor1_acq_rel3465 %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13466 ret i8 %r3467}3468 3469define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3470; CHECK-LABEL: atomicrmw_xor_i8_aligned_seq_cst:3471; CHECK: bl __aarch64_ldeor1_acq_rel3472 %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13473 ret i8 %r3474}3475 3476define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) {3477; CHECK-LABEL: atomicrmw_xor_i16_aligned_monotonic:3478; CHECK: bl __aarch64_ldeor2_relax3479 %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 23480 ret i16 %r3481}3482 3483define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) {3484; CHECK-LABEL: atomicrmw_xor_i16_aligned_acquire:3485; CHECK: bl __aarch64_ldeor2_acq3486 %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 23487 ret i16 %r3488}3489 3490define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) {3491; CHECK-LABEL: atomicrmw_xor_i16_aligned_release:3492; CHECK: bl __aarch64_ldeor2_rel3493 %r = atomicrmw xor ptr %ptr, i16 %value release, align 23494 ret i16 %r3495}3496 3497define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3498; CHECK-LABEL: atomicrmw_xor_i16_aligned_acq_rel:3499; CHECK: bl __aarch64_ldeor2_acq_rel3500 %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 23501 ret i16 %r3502}3503 3504define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3505; CHECK-LABEL: atomicrmw_xor_i16_aligned_seq_cst:3506; CHECK: bl __aarch64_ldeor2_acq_rel3507 %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 23508 ret i16 %r3509}3510 3511define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) {3512; CHECK-LABEL: atomicrmw_xor_i32_aligned_monotonic:3513; CHECK: bl __aarch64_ldeor4_relax3514 %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 43515 ret i32 %r3516}3517 3518define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) {3519; CHECK-LABEL: atomicrmw_xor_i32_aligned_acquire:3520; CHECK: bl __aarch64_ldeor4_acq3521 %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 43522 ret i32 %r3523}3524 3525define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) {3526; CHECK-LABEL: atomicrmw_xor_i32_aligned_release:3527; CHECK: bl __aarch64_ldeor4_rel3528 %r = atomicrmw xor ptr %ptr, i32 %value release, align 43529 ret i32 %r3530}3531 3532define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3533; CHECK-LABEL: atomicrmw_xor_i32_aligned_acq_rel:3534; CHECK: bl __aarch64_ldeor4_acq_rel3535 %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 43536 ret i32 %r3537}3538 3539define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3540; CHECK-LABEL: atomicrmw_xor_i32_aligned_seq_cst:3541; CHECK: bl __aarch64_ldeor4_acq_rel3542 %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 43543 ret i32 %r3544}3545 3546define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) {3547; CHECK-LABEL: atomicrmw_xor_i64_aligned_monotonic:3548; CHECK: bl __aarch64_ldeor8_relax3549 %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 83550 ret i64 %r3551}3552 3553define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) {3554; CHECK-LABEL: atomicrmw_xor_i64_aligned_acquire:3555; CHECK: bl __aarch64_ldeor8_acq3556 %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 83557 ret i64 %r3558}3559 3560define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) {3561; CHECK-LABEL: atomicrmw_xor_i64_aligned_release:3562; CHECK: bl __aarch64_ldeor8_rel3563 %r = atomicrmw xor ptr %ptr, i64 %value release, align 83564 ret i64 %r3565}3566 3567define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3568; CHECK-LABEL: atomicrmw_xor_i64_aligned_acq_rel:3569; CHECK: bl __aarch64_ldeor8_acq_rel3570 %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 83571 ret i64 %r3572}3573 3574define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3575; CHECK-LABEL: atomicrmw_xor_i64_aligned_seq_cst:3576; CHECK: bl __aarch64_ldeor8_acq_rel3577 %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 83578 ret i64 %r3579}3580 3581define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) {3582; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic:3583; -O0: eor x2, x0, x93584; -O0: eor x3, x1, x83585; -O0: bl __aarch64_cas16_relax3586; -O0: subs x10, x10, x113587; -O0: ccmp x8, x9, #0, eq3588;3589; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic:3590; -O1: ldxp x1, x0, [x8]3591; -O1: eor x9, x0, x23592; -O1: eor x10, x1, x33593; -O1: stxp w11, x10, x9, [x8]3594 %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 163595 ret i128 %r3596}3597 3598define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) {3599; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire:3600; -O0: eor x2, x0, x93601; -O0: eor x3, x1, x83602; -O0: bl __aarch64_cas16_acq3603; -O0: subs x10, x10, x113604; -O0: ccmp x8, x9, #0, eq3605;3606; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire:3607; -O1: ldaxp x1, x0, [x8]3608; -O1: eor x9, x0, x23609; -O1: eor x10, x1, x33610; -O1: stxp w11, x10, x9, [x8]3611 %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 163612 ret i128 %r3613}3614 3615define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) {3616; -O0-LABEL: atomicrmw_xor_i128_aligned_release:3617; -O0: eor x2, x0, x93618; -O0: eor x3, x1, x83619; -O0: bl __aarch64_cas16_rel3620; -O0: subs x10, x10, x113621; -O0: ccmp x8, x9, #0, eq3622;3623; -O1-LABEL: atomicrmw_xor_i128_aligned_release:3624; -O1: ldxp x1, x0, [x8]3625; -O1: eor x9, x0, x23626; -O1: eor x10, x1, x33627; -O1: stlxp w11, x10, x9, [x8]3628 %r = atomicrmw xor ptr %ptr, i128 %value release, align 163629 ret i128 %r3630}3631 3632define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3633; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3634; -O0: eor x2, x0, x93635; -O0: eor x3, x1, x83636; -O0: bl __aarch64_cas16_acq_rel3637; -O0: subs x10, x10, x113638; -O0: ccmp x8, x9, #0, eq3639;3640; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3641; -O1: ldaxp x1, x0, [x8]3642; -O1: eor x9, x0, x23643; -O1: eor x10, x1, x33644; -O1: stlxp w11, x10, x9, [x8]3645 %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 163646 ret i128 %r3647}3648 3649define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3650; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3651; -O0: eor x2, x0, x93652; -O0: eor x3, x1, x83653; -O0: bl __aarch64_cas16_acq_rel3654; -O0: subs x10, x10, x113655; -O0: ccmp x8, x9, #0, eq3656;3657; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3658; -O1: ldaxp x1, x0, [x8]3659; -O1: eor x9, x0, x23660; -O1: eor x10, x1, x33661; -O1: stlxp w11, x10, x9, [x8]3662 %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 163663 ret i128 %r3664}3665 3666define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3667; CHECK-LABEL: atomicrmw_xor_i8_unaligned_monotonic:3668; CHECK: bl __aarch64_ldeor1_relax3669 %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13670 ret i8 %r3671}3672 3673define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) {3674; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acquire:3675; CHECK: bl __aarch64_ldeor1_acq3676 %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13677 ret i8 %r3678}3679 3680define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) {3681; CHECK-LABEL: atomicrmw_xor_i8_unaligned_release:3682; CHECK: bl __aarch64_ldeor1_rel3683 %r = atomicrmw xor ptr %ptr, i8 %value release, align 13684 ret i8 %r3685}3686 3687define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3688; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:3689; CHECK: bl __aarch64_ldeor1_acq_rel3690 %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13691 ret i8 %r3692}3693 3694define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3695; CHECK-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:3696; CHECK: bl __aarch64_ldeor1_acq_rel3697 %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13698 ret i8 %r3699}3700 3701define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3702; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3703; -O0: eor w8, w9, w83704; -O0: bl __atomic_compare_exchange3705;3706; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3707; -O1: eor w8, w0, w203708; -O1: bl __atomic_compare_exchange3709 %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 13710 ret i16 %r3711}3712 3713define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) {3714; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire:3715; -O0: eor w8, w9, w83716; -O0: bl __atomic_compare_exchange3717;3718; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire:3719; -O1: eor w8, w0, w203720; -O1: bl __atomic_compare_exchange3721 %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 13722 ret i16 %r3723}3724 3725define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) {3726; -O0-LABEL: atomicrmw_xor_i16_unaligned_release:3727; -O0: eor w8, w9, w83728; -O0: bl __atomic_compare_exchange3729;3730; -O1-LABEL: atomicrmw_xor_i16_unaligned_release:3731; -O1: eor w8, w0, w203732; -O1: bl __atomic_compare_exchange3733 %r = atomicrmw xor ptr %ptr, i16 %value release, align 13734 ret i16 %r3735}3736 3737define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3738; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3739; -O0: eor w8, w9, w83740; -O0: bl __atomic_compare_exchange3741;3742; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3743; -O1: eor w8, w0, w203744; -O1: bl __atomic_compare_exchange3745 %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 13746 ret i16 %r3747}3748 3749define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3750; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3751; -O0: eor w8, w9, w83752; -O0: bl __atomic_compare_exchange3753;3754; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3755; -O1: eor w8, w0, w203756; -O1: bl __atomic_compare_exchange3757 %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 13758 ret i16 %r3759}3760 3761define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3762; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3763; -O0: eor w8, w9, w83764; -O0: bl __atomic_compare_exchange3765;3766; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3767; -O1: eor w8, w0, w203768; -O1: bl __atomic_compare_exchange3769 %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 13770 ret i32 %r3771}3772 3773define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) {3774; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire:3775; -O0: eor w8, w9, w83776; -O0: bl __atomic_compare_exchange3777;3778; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire:3779; -O1: eor w8, w0, w203780; -O1: bl __atomic_compare_exchange3781 %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 13782 ret i32 %r3783}3784 3785define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) {3786; -O0-LABEL: atomicrmw_xor_i32_unaligned_release:3787; -O0: eor w8, w9, w83788; -O0: bl __atomic_compare_exchange3789;3790; -O1-LABEL: atomicrmw_xor_i32_unaligned_release:3791; -O1: eor w8, w0, w203792; -O1: bl __atomic_compare_exchange3793 %r = atomicrmw xor ptr %ptr, i32 %value release, align 13794 ret i32 %r3795}3796 3797define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3798; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3799; -O0: eor w8, w9, w83800; -O0: bl __atomic_compare_exchange3801;3802; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3803; -O1: eor w8, w0, w203804; -O1: bl __atomic_compare_exchange3805 %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 13806 ret i32 %r3807}3808 3809define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3810; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3811; -O0: eor w8, w9, w83812; -O0: bl __atomic_compare_exchange3813;3814; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3815; -O1: eor w8, w0, w203816; -O1: bl __atomic_compare_exchange3817 %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 13818 ret i32 %r3819}3820 3821define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3822; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3823; -O0: eor x8, x9, x83824; -O0: bl __atomic_compare_exchange3825;3826; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3827; -O1: eor x8, x0, x203828; -O1: bl __atomic_compare_exchange3829 %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 13830 ret i64 %r3831}3832 3833define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) {3834; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire:3835; -O0: eor x8, x9, x83836; -O0: bl __atomic_compare_exchange3837;3838; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire:3839; -O1: eor x8, x0, x203840; -O1: bl __atomic_compare_exchange3841 %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 13842 ret i64 %r3843}3844 3845define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) {3846; -O0-LABEL: atomicrmw_xor_i64_unaligned_release:3847; -O0: eor x8, x9, x83848; -O0: bl __atomic_compare_exchange3849;3850; -O1-LABEL: atomicrmw_xor_i64_unaligned_release:3851; -O1: eor x8, x0, x203852; -O1: bl __atomic_compare_exchange3853 %r = atomicrmw xor ptr %ptr, i64 %value release, align 13854 ret i64 %r3855}3856 3857define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3858; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3859; -O0: eor x8, x9, x83860; -O0: bl __atomic_compare_exchange3861;3862; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3863; -O1: eor x8, x0, x203864; -O1: bl __atomic_compare_exchange3865 %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 13866 ret i64 %r3867}3868 3869define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3870; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3871; -O0: eor x8, x9, x83872; -O0: bl __atomic_compare_exchange3873;3874; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3875; -O1: eor x8, x0, x203876; -O1: bl __atomic_compare_exchange3877 %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 13878 ret i64 %r3879}3880 3881define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3882; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3883; -O0: eor x8, x11, x83884; -O0: eor x9, x10, x93885; -O0: bl __atomic_compare_exchange3886;3887; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3888; -O1: ldp x0, x1, [x0]3889; -O1: eor x8, x1, x193890; -O1: eor x9, x0, x213891; -O1: bl __atomic_compare_exchange3892 %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 13893 ret i128 %r3894}3895 3896define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) {3897; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire:3898; -O0: eor x8, x11, x83899; -O0: eor x9, x10, x93900; -O0: bl __atomic_compare_exchange3901;3902; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire:3903; -O1: ldp x0, x1, [x0]3904; -O1: eor x8, x1, x193905; -O1: eor x9, x0, x213906; -O1: bl __atomic_compare_exchange3907 %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 13908 ret i128 %r3909}3910 3911define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) {3912; -O0-LABEL: atomicrmw_xor_i128_unaligned_release:3913; -O0: eor x8, x11, x83914; -O0: eor x9, x10, x93915; -O0: bl __atomic_compare_exchange3916;3917; -O1-LABEL: atomicrmw_xor_i128_unaligned_release:3918; -O1: ldp x0, x1, [x0]3919; -O1: eor x8, x1, x193920; -O1: eor x9, x0, x213921; -O1: bl __atomic_compare_exchange3922 %r = atomicrmw xor ptr %ptr, i128 %value release, align 13923 ret i128 %r3924}3925 3926define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3927; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:3928; -O0: eor x8, x11, x83929; -O0: eor x9, x10, x93930; -O0: bl __atomic_compare_exchange3931;3932; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:3933; -O1: ldp x0, x1, [x0]3934; -O1: eor x8, x1, x193935; -O1: eor x9, x0, x213936; -O1: bl __atomic_compare_exchange3937 %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 13938 ret i128 %r3939}3940 3941define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3942; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:3943; -O0: eor x8, x11, x83944; -O0: eor x9, x10, x93945; -O0: bl __atomic_compare_exchange3946;3947; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:3948; -O1: ldp x0, x1, [x0]3949; -O1: eor x8, x1, x193950; -O1: eor x9, x0, x213951; -O1: bl __atomic_compare_exchange3952 %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 13953 ret i128 %r3954}3955 3956define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) {3957; -O0-LABEL: atomicrmw_max_i8_aligned_monotonic:3958; -O0: sxtb w9, w03959; -O0: subs w9, w9, w8, sxtb3960; -O0: csel w1, w0, w8, gt3961; -O0: bl __aarch64_cas1_relax3962; -O0: subs w8, w0, w8, uxtb3963;3964; -O1-LABEL: atomicrmw_max_i8_aligned_monotonic:3965; -O1: ldxrb w9, [x0]3966; -O1: sxtb w8, w93967; -O1: cmp w8, w1, sxtb3968; -O1: csel w9, w9, w1, gt3969; -O1: stxrb w10, w9, [x0]3970 %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 13971 ret i8 %r3972}3973 3974define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) {3975; -O0-LABEL: atomicrmw_max_i8_aligned_acquire:3976; -O0: sxtb w9, w03977; -O0: subs w9, w9, w8, sxtb3978; -O0: csel w1, w0, w8, gt3979; -O0: bl __aarch64_cas1_acq3980; -O0: subs w8, w0, w8, uxtb3981;3982; -O1-LABEL: atomicrmw_max_i8_aligned_acquire:3983; -O1: ldaxrb w9, [x0]3984; -O1: sxtb w8, w93985; -O1: cmp w8, w1, sxtb3986; -O1: csel w9, w9, w1, gt3987; -O1: stxrb w10, w9, [x0]3988 %r = atomicrmw max ptr %ptr, i8 %value acquire, align 13989 ret i8 %r3990}3991 3992define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) {3993; -O0-LABEL: atomicrmw_max_i8_aligned_release:3994; -O0: sxtb w9, w03995; -O0: subs w9, w9, w8, sxtb3996; -O0: csel w1, w0, w8, gt3997; -O0: bl __aarch64_cas1_rel3998; -O0: subs w8, w0, w8, uxtb3999;4000; -O1-LABEL: atomicrmw_max_i8_aligned_release:4001; -O1: ldxrb w9, [x0]4002; -O1: sxtb w8, w94003; -O1: cmp w8, w1, sxtb4004; -O1: csel w9, w9, w1, gt4005; -O1: stlxrb w10, w9, [x0]4006 %r = atomicrmw max ptr %ptr, i8 %value release, align 14007 ret i8 %r4008}4009 4010define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) {4011; -O0-LABEL: atomicrmw_max_i8_aligned_acq_rel:4012; -O0: sxtb w9, w04013; -O0: subs w9, w9, w8, sxtb4014; -O0: csel w1, w0, w8, gt4015; -O0: bl __aarch64_cas1_acq_rel4016; -O0: subs w8, w0, w8, uxtb4017;4018; -O1-LABEL: atomicrmw_max_i8_aligned_acq_rel:4019; -O1: ldaxrb w9, [x0]4020; -O1: sxtb w8, w94021; -O1: cmp w8, w1, sxtb4022; -O1: csel w9, w9, w1, gt4023; -O1: stlxrb w10, w9, [x0]4024 %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 14025 ret i8 %r4026}4027 4028define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) {4029; -O0-LABEL: atomicrmw_max_i8_aligned_seq_cst:4030; -O0: sxtb w9, w04031; -O0: subs w9, w9, w8, sxtb4032; -O0: csel w1, w0, w8, gt4033; -O0: bl __aarch64_cas1_acq_rel4034; -O0: subs w8, w0, w8, uxtb4035;4036; -O1-LABEL: atomicrmw_max_i8_aligned_seq_cst:4037; -O1: ldaxrb w9, [x0]4038; -O1: sxtb w8, w94039; -O1: cmp w8, w1, sxtb4040; -O1: csel w9, w9, w1, gt4041; -O1: stlxrb w10, w9, [x0]4042 %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 14043 ret i8 %r4044}4045 4046define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) {4047; -O0-LABEL: atomicrmw_max_i16_aligned_monotonic:4048; -O0: sxth w9, w04049; -O0: subs w9, w9, w8, sxth4050; -O0: csel w1, w0, w8, gt4051; -O0: bl __aarch64_cas2_relax4052; -O0: subs w8, w0, w8, uxth4053;4054; -O1-LABEL: atomicrmw_max_i16_aligned_monotonic:4055; -O1: ldxrh w9, [x0]4056; -O1: sxth w8, w94057; -O1: cmp w8, w1, sxth4058; -O1: csel w9, w9, w1, gt4059; -O1: stxrh w10, w9, [x0]4060 %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 24061 ret i16 %r4062}4063 4064define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) {4065; -O0-LABEL: atomicrmw_max_i16_aligned_acquire:4066; -O0: sxth w9, w04067; -O0: subs w9, w9, w8, sxth4068; -O0: csel w1, w0, w8, gt4069; -O0: bl __aarch64_cas2_acq4070; -O0: subs w8, w0, w8, uxth4071;4072; -O1-LABEL: atomicrmw_max_i16_aligned_acquire:4073; -O1: ldaxrh w9, [x0]4074; -O1: sxth w8, w94075; -O1: cmp w8, w1, sxth4076; -O1: csel w9, w9, w1, gt4077; -O1: stxrh w10, w9, [x0]4078 %r = atomicrmw max ptr %ptr, i16 %value acquire, align 24079 ret i16 %r4080}4081 4082define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) {4083; -O0-LABEL: atomicrmw_max_i16_aligned_release:4084; -O0: sxth w9, w04085; -O0: subs w9, w9, w8, sxth4086; -O0: csel w1, w0, w8, gt4087; -O0: bl __aarch64_cas2_rel4088; -O0: subs w8, w0, w8, uxth4089;4090; -O1-LABEL: atomicrmw_max_i16_aligned_release:4091; -O1: ldxrh w9, [x0]4092; -O1: sxth w8, w94093; -O1: cmp w8, w1, sxth4094; -O1: csel w9, w9, w1, gt4095; -O1: stlxrh w10, w9, [x0]4096 %r = atomicrmw max ptr %ptr, i16 %value release, align 24097 ret i16 %r4098}4099 4100define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) {4101; -O0-LABEL: atomicrmw_max_i16_aligned_acq_rel:4102; -O0: sxth w9, w04103; -O0: subs w9, w9, w8, sxth4104; -O0: csel w1, w0, w8, gt4105; -O0: bl __aarch64_cas2_acq_rel4106; -O0: subs w8, w0, w8, uxth4107;4108; -O1-LABEL: atomicrmw_max_i16_aligned_acq_rel:4109; -O1: ldaxrh w9, [x0]4110; -O1: sxth w8, w94111; -O1: cmp w8, w1, sxth4112; -O1: csel w9, w9, w1, gt4113; -O1: stlxrh w10, w9, [x0]4114 %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 24115 ret i16 %r4116}4117 4118define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) {4119; -O0-LABEL: atomicrmw_max_i16_aligned_seq_cst:4120; -O0: sxth w9, w04121; -O0: subs w9, w9, w8, sxth4122; -O0: csel w1, w0, w8, gt4123; -O0: bl __aarch64_cas2_acq_rel4124; -O0: subs w8, w0, w8, uxth4125;4126; -O1-LABEL: atomicrmw_max_i16_aligned_seq_cst:4127; -O1: ldaxrh w9, [x0]4128; -O1: sxth w8, w94129; -O1: cmp w8, w1, sxth4130; -O1: csel w9, w9, w1, gt4131; -O1: stlxrh w10, w9, [x0]4132 %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 24133 ret i16 %r4134}4135 4136define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) {4137; -O0-LABEL: atomicrmw_max_i32_aligned_monotonic:4138; -O0: subs w9, w0, w84139; -O0: csel w1, w0, w8, gt4140; -O0: bl __aarch64_cas4_relax4141; -O0: subs w8, w0, w84142;4143; -O1-LABEL: atomicrmw_max_i32_aligned_monotonic:4144; -O1: ldxr w8, [x0]4145; -O1: cmp w8, w14146; -O1: csel w9, w8, w1, gt4147; -O1: stxr w10, w9, [x0]4148 %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 44149 ret i32 %r4150}4151 4152define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) {4153; -O0-LABEL: atomicrmw_max_i32_aligned_acquire:4154; -O0: subs w9, w0, w84155; -O0: csel w1, w0, w8, gt4156; -O0: bl __aarch64_cas4_acq4157; -O0: subs w8, w0, w84158;4159; -O1-LABEL: atomicrmw_max_i32_aligned_acquire:4160; -O1: ldaxr w8, [x0]4161; -O1: cmp w8, w14162; -O1: csel w9, w8, w1, gt4163; -O1: stxr w10, w9, [x0]4164 %r = atomicrmw max ptr %ptr, i32 %value acquire, align 44165 ret i32 %r4166}4167 4168define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) {4169; -O0-LABEL: atomicrmw_max_i32_aligned_release:4170; -O0: subs w9, w0, w84171; -O0: csel w1, w0, w8, gt4172; -O0: bl __aarch64_cas4_rel4173; -O0: subs w8, w0, w84174;4175; -O1-LABEL: atomicrmw_max_i32_aligned_release:4176; -O1: ldxr w8, [x0]4177; -O1: cmp w8, w14178; -O1: csel w9, w8, w1, gt4179; -O1: stlxr w10, w9, [x0]4180 %r = atomicrmw max ptr %ptr, i32 %value release, align 44181 ret i32 %r4182}4183 4184define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4185; -O0-LABEL: atomicrmw_max_i32_aligned_acq_rel:4186; -O0: subs w9, w0, w84187; -O0: csel w1, w0, w8, gt4188; -O0: bl __aarch64_cas4_acq_rel4189; -O0: subs w8, w0, w84190;4191; -O1-LABEL: atomicrmw_max_i32_aligned_acq_rel:4192; -O1: ldaxr w8, [x0]4193; -O1: cmp w8, w14194; -O1: csel w9, w8, w1, gt4195; -O1: stlxr w10, w9, [x0]4196 %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 44197 ret i32 %r4198}4199 4200define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4201; -O0-LABEL: atomicrmw_max_i32_aligned_seq_cst:4202; -O0: subs w9, w0, w84203; -O0: csel w1, w0, w8, gt4204; -O0: bl __aarch64_cas4_acq_rel4205; -O0: subs w8, w0, w84206;4207; -O1-LABEL: atomicrmw_max_i32_aligned_seq_cst:4208; -O1: ldaxr w8, [x0]4209; -O1: cmp w8, w14210; -O1: csel w9, w8, w1, gt4211; -O1: stlxr w10, w9, [x0]4212 %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 44213 ret i32 %r4214}4215 4216define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) {4217; -O0-LABEL: atomicrmw_max_i64_aligned_monotonic:4218; -O0: subs x9, x0, x84219; -O0: csel x1, x0, x8, gt4220; -O0: bl __aarch64_cas8_relax4221; -O0: subs x8, x0, x84222;4223; -O1-LABEL: atomicrmw_max_i64_aligned_monotonic:4224; -O1: ldxr x0, [x8]4225; -O1: cmp x0, x14226; -O1: csel x9, x0, x1, gt4227; -O1: stxr w10, x9, [x8]4228 %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 84229 ret i64 %r4230}4231 4232define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) {4233; -O0-LABEL: atomicrmw_max_i64_aligned_acquire:4234; -O0: subs x9, x0, x84235; -O0: csel x1, x0, x8, gt4236; -O0: bl __aarch64_cas8_acq4237; -O0: subs x8, x0, x84238;4239; -O1-LABEL: atomicrmw_max_i64_aligned_acquire:4240; -O1: ldaxr x0, [x8]4241; -O1: cmp x0, x14242; -O1: csel x9, x0, x1, gt4243; -O1: stxr w10, x9, [x8]4244 %r = atomicrmw max ptr %ptr, i64 %value acquire, align 84245 ret i64 %r4246}4247 4248define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) {4249; -O0-LABEL: atomicrmw_max_i64_aligned_release:4250; -O0: subs x9, x0, x84251; -O0: csel x1, x0, x8, gt4252; -O0: bl __aarch64_cas8_rel4253; -O0: subs x8, x0, x84254;4255; -O1-LABEL: atomicrmw_max_i64_aligned_release:4256; -O1: ldxr x0, [x8]4257; -O1: cmp x0, x14258; -O1: csel x9, x0, x1, gt4259; -O1: stlxr w10, x9, [x8]4260 %r = atomicrmw max ptr %ptr, i64 %value release, align 84261 ret i64 %r4262}4263 4264define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4265; -O0-LABEL: atomicrmw_max_i64_aligned_acq_rel:4266; -O0: subs x9, x0, x84267; -O0: csel x1, x0, x8, gt4268; -O0: bl __aarch64_cas8_acq_rel4269; -O0: subs x8, x0, x84270;4271; -O1-LABEL: atomicrmw_max_i64_aligned_acq_rel:4272; -O1: ldaxr x0, [x8]4273; -O1: cmp x0, x14274; -O1: csel x9, x0, x1, gt4275; -O1: stlxr w10, x9, [x8]4276 %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 84277 ret i64 %r4278}4279 4280define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4281; -O0-LABEL: atomicrmw_max_i64_aligned_seq_cst:4282; -O0: subs x9, x0, x84283; -O0: csel x1, x0, x8, gt4284; -O0: bl __aarch64_cas8_acq_rel4285; -O0: subs x8, x0, x84286;4287; -O1-LABEL: atomicrmw_max_i64_aligned_seq_cst:4288; -O1: ldaxr x0, [x8]4289; -O1: cmp x0, x14290; -O1: csel x9, x0, x1, gt4291; -O1: stlxr w10, x9, [x8]4292 %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 84293 ret i64 %r4294}4295 4296define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) {4297; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic:4298; -O0: subs x10, x8, x14299; -O0: csel x2, x0, x9, lt4300; -O0: csel x3, x1, x8, lt4301; -O0: bl __aarch64_cas16_relax4302; -O0: subs x10, x10, x114303; -O0: ccmp x8, x9, #0, eq4304;4305; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic:4306; -O1: ldxp x1, x0, [x8]4307; -O1: cmp x3, x14308; -O1: csel x9, x0, x2, lt4309; -O1: csel x10, x1, x3, lt4310; -O1: stxp w11, x10, x9, [x8]4311 %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 164312 ret i128 %r4313}4314 4315define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) {4316; -O0-LABEL: atomicrmw_max_i128_aligned_acquire:4317; -O0: subs x10, x8, x14318; -O0: csel x2, x0, x9, lt4319; -O0: csel x3, x1, x8, lt4320; -O0: bl __aarch64_cas16_acq4321; -O0: subs x10, x10, x114322; -O0: ccmp x8, x9, #0, eq4323;4324; -O1-LABEL: atomicrmw_max_i128_aligned_acquire:4325; -O1: ldaxp x1, x0, [x8]4326; -O1: cmp x3, x14327; -O1: csel x9, x0, x2, lt4328; -O1: csel x10, x1, x3, lt4329; -O1: stxp w11, x10, x9, [x8]4330 %r = atomicrmw max ptr %ptr, i128 %value acquire, align 164331 ret i128 %r4332}4333 4334define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) {4335; -O0-LABEL: atomicrmw_max_i128_aligned_release:4336; -O0: subs x10, x8, x14337; -O0: csel x2, x0, x9, lt4338; -O0: csel x3, x1, x8, lt4339; -O0: bl __aarch64_cas16_rel4340; -O0: subs x10, x10, x114341; -O0: ccmp x8, x9, #0, eq4342;4343; -O1-LABEL: atomicrmw_max_i128_aligned_release:4344; -O1: ldxp x1, x0, [x8]4345; -O1: cmp x3, x14346; -O1: csel x9, x0, x2, lt4347; -O1: csel x10, x1, x3, lt4348; -O1: stlxp w11, x10, x9, [x8]4349 %r = atomicrmw max ptr %ptr, i128 %value release, align 164350 ret i128 %r4351}4352 4353define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4354; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel:4355; -O0: subs x10, x8, x14356; -O0: csel x2, x0, x9, lt4357; -O0: csel x3, x1, x8, lt4358; -O0: bl __aarch64_cas16_acq_rel4359; -O0: subs x10, x10, x114360; -O0: ccmp x8, x9, #0, eq4361;4362; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel:4363; -O1: ldaxp x1, x0, [x8]4364; -O1: cmp x3, x14365; -O1: csel x9, x0, x2, lt4366; -O1: csel x10, x1, x3, lt4367; -O1: stlxp w11, x10, x9, [x8]4368 %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 164369 ret i128 %r4370}4371 4372define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4373; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst:4374; -O0: subs x10, x8, x14375; -O0: csel x2, x0, x9, lt4376; -O0: csel x3, x1, x8, lt4377; -O0: bl __aarch64_cas16_acq_rel4378; -O0: subs x10, x10, x114379; -O0: ccmp x8, x9, #0, eq4380;4381; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst:4382; -O1: ldaxp x1, x0, [x8]4383; -O1: cmp x3, x14384; -O1: csel x9, x0, x2, lt4385; -O1: csel x10, x1, x3, lt4386; -O1: stlxp w11, x10, x9, [x8]4387 %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 164388 ret i128 %r4389}4390 4391define dso_local i8 @atomicrmw_max_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4392; -O0-LABEL: atomicrmw_max_i8_unaligned_monotonic:4393; -O0: sxtb w9, w04394; -O0: subs w9, w9, w8, sxtb4395; -O0: csel w1, w0, w8, gt4396; -O0: bl __aarch64_cas1_relax4397; -O0: subs w8, w0, w8, uxtb4398;4399; -O1-LABEL: atomicrmw_max_i8_unaligned_monotonic:4400; -O1: ldxrb w9, [x0]4401; -O1: sxtb w8, w94402; -O1: cmp w8, w1, sxtb4403; -O1: csel w9, w9, w1, gt4404; -O1: stxrb w10, w9, [x0]4405 %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 14406 ret i8 %r4407}4408 4409define dso_local i8 @atomicrmw_max_i8_unaligned_acquire(ptr %ptr, i8 %value) {4410; -O0-LABEL: atomicrmw_max_i8_unaligned_acquire:4411; -O0: sxtb w9, w04412; -O0: subs w9, w9, w8, sxtb4413; -O0: csel w1, w0, w8, gt4414; -O0: bl __aarch64_cas1_acq4415; -O0: subs w8, w0, w8, uxtb4416;4417; -O1-LABEL: atomicrmw_max_i8_unaligned_acquire:4418; -O1: ldaxrb w9, [x0]4419; -O1: sxtb w8, w94420; -O1: cmp w8, w1, sxtb4421; -O1: csel w9, w9, w1, gt4422; -O1: stxrb w10, w9, [x0]4423 %r = atomicrmw max ptr %ptr, i8 %value acquire, align 14424 ret i8 %r4425}4426 4427define dso_local i8 @atomicrmw_max_i8_unaligned_release(ptr %ptr, i8 %value) {4428; -O0-LABEL: atomicrmw_max_i8_unaligned_release:4429; -O0: sxtb w9, w04430; -O0: subs w9, w9, w8, sxtb4431; -O0: csel w1, w0, w8, gt4432; -O0: bl __aarch64_cas1_rel4433; -O0: subs w8, w0, w8, uxtb4434;4435; -O1-LABEL: atomicrmw_max_i8_unaligned_release:4436; -O1: ldxrb w9, [x0]4437; -O1: sxtb w8, w94438; -O1: cmp w8, w1, sxtb4439; -O1: csel w9, w9, w1, gt4440; -O1: stlxrb w10, w9, [x0]4441 %r = atomicrmw max ptr %ptr, i8 %value release, align 14442 ret i8 %r4443}4444 4445define dso_local i8 @atomicrmw_max_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4446; -O0-LABEL: atomicrmw_max_i8_unaligned_acq_rel:4447; -O0: sxtb w9, w04448; -O0: subs w9, w9, w8, sxtb4449; -O0: csel w1, w0, w8, gt4450; -O0: bl __aarch64_cas1_acq_rel4451; -O0: subs w8, w0, w8, uxtb4452;4453; -O1-LABEL: atomicrmw_max_i8_unaligned_acq_rel:4454; -O1: ldaxrb w9, [x0]4455; -O1: sxtb w8, w94456; -O1: cmp w8, w1, sxtb4457; -O1: csel w9, w9, w1, gt4458; -O1: stlxrb w10, w9, [x0]4459 %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 14460 ret i8 %r4461}4462 4463define dso_local i8 @atomicrmw_max_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4464; -O0-LABEL: atomicrmw_max_i8_unaligned_seq_cst:4465; -O0: sxtb w9, w04466; -O0: subs w9, w9, w8, sxtb4467; -O0: csel w1, w0, w8, gt4468; -O0: bl __aarch64_cas1_acq_rel4469; -O0: subs w8, w0, w8, uxtb4470;4471; -O1-LABEL: atomicrmw_max_i8_unaligned_seq_cst:4472; -O1: ldaxrb w9, [x0]4473; -O1: sxtb w8, w94474; -O1: cmp w8, w1, sxtb4475; -O1: csel w9, w9, w1, gt4476; -O1: stlxrb w10, w9, [x0]4477 %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 14478 ret i8 %r4479}4480 4481define dso_local i16 @atomicrmw_max_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4482; -O0-LABEL: atomicrmw_max_i16_unaligned_monotonic:4483; -O0: sxth w10, w94484; -O0: subs w10, w10, w8, sxth4485; -O0: csel w8, w9, w8, gt4486; -O0: bl __atomic_compare_exchange4487;4488; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic:4489; -O1: sxth w8, w04490; -O1: cmp w8, w20, sxth4491; -O1: csel w8, w0, w20, gt4492; -O1: bl __atomic_compare_exchange4493 %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 14494 ret i16 %r4495}4496 4497define dso_local i16 @atomicrmw_max_i16_unaligned_acquire(ptr %ptr, i16 %value) {4498; -O0-LABEL: atomicrmw_max_i16_unaligned_acquire:4499; -O0: sxth w10, w94500; -O0: subs w10, w10, w8, sxth4501; -O0: csel w8, w9, w8, gt4502; -O0: bl __atomic_compare_exchange4503;4504; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire:4505; -O1: sxth w8, w04506; -O1: cmp w8, w20, sxth4507; -O1: csel w8, w0, w20, gt4508; -O1: bl __atomic_compare_exchange4509 %r = atomicrmw max ptr %ptr, i16 %value acquire, align 14510 ret i16 %r4511}4512 4513define dso_local i16 @atomicrmw_max_i16_unaligned_release(ptr %ptr, i16 %value) {4514; -O0-LABEL: atomicrmw_max_i16_unaligned_release:4515; -O0: sxth w10, w94516; -O0: subs w10, w10, w8, sxth4517; -O0: csel w8, w9, w8, gt4518; -O0: bl __atomic_compare_exchange4519;4520; -O1-LABEL: atomicrmw_max_i16_unaligned_release:4521; -O1: sxth w8, w04522; -O1: cmp w8, w20, sxth4523; -O1: csel w8, w0, w20, gt4524; -O1: bl __atomic_compare_exchange4525 %r = atomicrmw max ptr %ptr, i16 %value release, align 14526 ret i16 %r4527}4528 4529define dso_local i16 @atomicrmw_max_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4530; -O0-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4531; -O0: sxth w10, w94532; -O0: subs w10, w10, w8, sxth4533; -O0: csel w8, w9, w8, gt4534; -O0: bl __atomic_compare_exchange4535;4536; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4537; -O1: sxth w8, w04538; -O1: cmp w8, w20, sxth4539; -O1: csel w8, w0, w20, gt4540; -O1: bl __atomic_compare_exchange4541 %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 14542 ret i16 %r4543}4544 4545define dso_local i16 @atomicrmw_max_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4546; -O0-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4547; -O0: sxth w10, w94548; -O0: subs w10, w10, w8, sxth4549; -O0: csel w8, w9, w8, gt4550; -O0: bl __atomic_compare_exchange4551;4552; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4553; -O1: sxth w8, w04554; -O1: cmp w8, w20, sxth4555; -O1: csel w8, w0, w20, gt4556; -O1: bl __atomic_compare_exchange4557 %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 14558 ret i16 %r4559}4560 4561define dso_local i32 @atomicrmw_max_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4562; -O0-LABEL: atomicrmw_max_i32_unaligned_monotonic:4563; -O0: subs w10, w9, w84564; -O0: csel w8, w9, w8, gt4565; -O0: bl __atomic_compare_exchange4566;4567; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic:4568; -O1: cmp w0, w204569; -O1: csel w8, w0, w20, gt4570; -O1: bl __atomic_compare_exchange4571 %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 14572 ret i32 %r4573}4574 4575define dso_local i32 @atomicrmw_max_i32_unaligned_acquire(ptr %ptr, i32 %value) {4576; -O0-LABEL: atomicrmw_max_i32_unaligned_acquire:4577; -O0: subs w10, w9, w84578; -O0: csel w8, w9, w8, gt4579; -O0: bl __atomic_compare_exchange4580;4581; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire:4582; -O1: cmp w0, w204583; -O1: csel w8, w0, w20, gt4584; -O1: bl __atomic_compare_exchange4585 %r = atomicrmw max ptr %ptr, i32 %value acquire, align 14586 ret i32 %r4587}4588 4589define dso_local i32 @atomicrmw_max_i32_unaligned_release(ptr %ptr, i32 %value) {4590; -O0-LABEL: atomicrmw_max_i32_unaligned_release:4591; -O0: subs w10, w9, w84592; -O0: csel w8, w9, w8, gt4593; -O0: bl __atomic_compare_exchange4594;4595; -O1-LABEL: atomicrmw_max_i32_unaligned_release:4596; -O1: cmp w0, w204597; -O1: csel w8, w0, w20, gt4598; -O1: bl __atomic_compare_exchange4599 %r = atomicrmw max ptr %ptr, i32 %value release, align 14600 ret i32 %r4601}4602 4603define dso_local i32 @atomicrmw_max_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4604; -O0-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4605; -O0: subs w10, w9, w84606; -O0: csel w8, w9, w8, gt4607; -O0: bl __atomic_compare_exchange4608;4609; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4610; -O1: cmp w0, w204611; -O1: csel w8, w0, w20, gt4612; -O1: bl __atomic_compare_exchange4613 %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 14614 ret i32 %r4615}4616 4617define dso_local i32 @atomicrmw_max_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4618; -O0-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4619; -O0: subs w10, w9, w84620; -O0: csel w8, w9, w8, gt4621; -O0: bl __atomic_compare_exchange4622;4623; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4624; -O1: cmp w0, w204625; -O1: csel w8, w0, w20, gt4626; -O1: bl __atomic_compare_exchange4627 %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 14628 ret i32 %r4629}4630 4631define dso_local i64 @atomicrmw_max_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4632; -O0-LABEL: atomicrmw_max_i64_unaligned_monotonic:4633; -O0: subs x10, x9, x84634; -O0: csel x8, x9, x8, gt4635; -O0: bl __atomic_compare_exchange4636;4637; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic:4638; -O1: cmp x0, x204639; -O1: csel x8, x0, x20, gt4640; -O1: bl __atomic_compare_exchange4641 %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 14642 ret i64 %r4643}4644 4645define dso_local i64 @atomicrmw_max_i64_unaligned_acquire(ptr %ptr, i64 %value) {4646; -O0-LABEL: atomicrmw_max_i64_unaligned_acquire:4647; -O0: subs x10, x9, x84648; -O0: csel x8, x9, x8, gt4649; -O0: bl __atomic_compare_exchange4650;4651; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire:4652; -O1: cmp x0, x204653; -O1: csel x8, x0, x20, gt4654; -O1: bl __atomic_compare_exchange4655 %r = atomicrmw max ptr %ptr, i64 %value acquire, align 14656 ret i64 %r4657}4658 4659define dso_local i64 @atomicrmw_max_i64_unaligned_release(ptr %ptr, i64 %value) {4660; -O0-LABEL: atomicrmw_max_i64_unaligned_release:4661; -O0: subs x10, x9, x84662; -O0: csel x8, x9, x8, gt4663; -O0: bl __atomic_compare_exchange4664;4665; -O1-LABEL: atomicrmw_max_i64_unaligned_release:4666; -O1: cmp x0, x204667; -O1: csel x8, x0, x20, gt4668; -O1: bl __atomic_compare_exchange4669 %r = atomicrmw max ptr %ptr, i64 %value release, align 14670 ret i64 %r4671}4672 4673define dso_local i64 @atomicrmw_max_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4674; -O0-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4675; -O0: subs x10, x9, x84676; -O0: csel x8, x9, x8, gt4677; -O0: bl __atomic_compare_exchange4678;4679; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4680; -O1: cmp x0, x204681; -O1: csel x8, x0, x20, gt4682; -O1: bl __atomic_compare_exchange4683 %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 14684 ret i64 %r4685}4686 4687define dso_local i64 @atomicrmw_max_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4688; -O0-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4689; -O0: subs x10, x9, x84690; -O0: csel x8, x9, x8, gt4691; -O0: bl __atomic_compare_exchange4692;4693; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4694; -O1: cmp x0, x204695; -O1: csel x8, x0, x20, gt4696; -O1: bl __atomic_compare_exchange4697 %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 14698 ret i64 %r4699}4700 4701define dso_local i128 @atomicrmw_max_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4702; -O0-LABEL: atomicrmw_max_i128_unaligned_monotonic:4703; -O0: subs x12, x9, x104704; -O0: csel x8, x11, x8, lt4705; -O0: csel x9, x10, x9, lt4706; -O0: bl __atomic_compare_exchange4707;4708; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic:4709; -O1: ldp x0, x1, [x0]4710; -O1: cmp x19, x14711; -O1: csel x8, x1, x19, lt4712; -O1: csel x9, x0, x21, lt4713; -O1: bl __atomic_compare_exchange4714 %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 14715 ret i128 %r4716}4717 4718define dso_local i128 @atomicrmw_max_i128_unaligned_acquire(ptr %ptr, i128 %value) {4719; -O0-LABEL: atomicrmw_max_i128_unaligned_acquire:4720; -O0: subs x12, x9, x104721; -O0: csel x8, x11, x8, lt4722; -O0: csel x9, x10, x9, lt4723; -O0: bl __atomic_compare_exchange4724;4725; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire:4726; -O1: ldp x0, x1, [x0]4727; -O1: cmp x19, x14728; -O1: csel x8, x1, x19, lt4729; -O1: csel x9, x0, x21, lt4730; -O1: bl __atomic_compare_exchange4731 %r = atomicrmw max ptr %ptr, i128 %value acquire, align 14732 ret i128 %r4733}4734 4735define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) {4736; -O0-LABEL: atomicrmw_max_i128_unaligned_release:4737; -O0: subs x12, x9, x104738; -O0: csel x8, x11, x8, lt4739; -O0: csel x9, x10, x9, lt4740; -O0: bl __atomic_compare_exchange4741;4742; -O1-LABEL: atomicrmw_max_i128_unaligned_release:4743; -O1: ldp x0, x1, [x0]4744; -O1: cmp x19, x14745; -O1: csel x8, x1, x19, lt4746; -O1: csel x9, x0, x21, lt4747; -O1: bl __atomic_compare_exchange4748 %r = atomicrmw max ptr %ptr, i128 %value release, align 14749 ret i128 %r4750}4751 4752define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4753; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4754; -O0: subs x12, x9, x104755; -O0: csel x8, x11, x8, lt4756; -O0: csel x9, x10, x9, lt4757; -O0: bl __atomic_compare_exchange4758;4759; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4760; -O1: ldp x0, x1, [x0]4761; -O1: cmp x19, x14762; -O1: csel x8, x1, x19, lt4763; -O1: csel x9, x0, x21, lt4764; -O1: bl __atomic_compare_exchange4765 %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 14766 ret i128 %r4767}4768 4769define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4770; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4771; -O0: subs x12, x9, x104772; -O0: csel x8, x11, x8, lt4773; -O0: csel x9, x10, x9, lt4774; -O0: bl __atomic_compare_exchange4775;4776; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4777; -O1: ldp x0, x1, [x0]4778; -O1: cmp x19, x14779; -O1: csel x8, x1, x19, lt4780; -O1: csel x9, x0, x21, lt4781; -O1: bl __atomic_compare_exchange4782 %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 14783 ret i128 %r4784}4785 4786define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) {4787; -O0-LABEL: atomicrmw_min_i8_aligned_monotonic:4788; -O0: sxtb w9, w04789; -O0: subs w9, w9, w8, sxtb4790; -O0: csel w1, w0, w8, le4791; -O0: bl __aarch64_cas1_relax4792; -O0: subs w8, w0, w8, uxtb4793;4794; -O1-LABEL: atomicrmw_min_i8_aligned_monotonic:4795; -O1: ldxrb w9, [x0]4796; -O1: sxtb w8, w94797; -O1: cmp w8, w1, sxtb4798; -O1: csel w9, w9, w1, le4799; -O1: stxrb w10, w9, [x0]4800 %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14801 ret i8 %r4802}4803 4804define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) {4805; -O0-LABEL: atomicrmw_min_i8_aligned_acquire:4806; -O0: sxtb w9, w04807; -O0: subs w9, w9, w8, sxtb4808; -O0: csel w1, w0, w8, le4809; -O0: bl __aarch64_cas1_acq4810; -O0: subs w8, w0, w8, uxtb4811;4812; -O1-LABEL: atomicrmw_min_i8_aligned_acquire:4813; -O1: ldaxrb w9, [x0]4814; -O1: sxtb w8, w94815; -O1: cmp w8, w1, sxtb4816; -O1: csel w9, w9, w1, le4817; -O1: stxrb w10, w9, [x0]4818 %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14819 ret i8 %r4820}4821 4822define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) {4823; -O0-LABEL: atomicrmw_min_i8_aligned_release:4824; -O0: sxtb w9, w04825; -O0: subs w9, w9, w8, sxtb4826; -O0: csel w1, w0, w8, le4827; -O0: bl __aarch64_cas1_rel4828; -O0: subs w8, w0, w8, uxtb4829;4830; -O1-LABEL: atomicrmw_min_i8_aligned_release:4831; -O1: ldxrb w9, [x0]4832; -O1: sxtb w8, w94833; -O1: cmp w8, w1, sxtb4834; -O1: csel w9, w9, w1, le4835; -O1: stlxrb w10, w9, [x0]4836 %r = atomicrmw min ptr %ptr, i8 %value release, align 14837 ret i8 %r4838}4839 4840define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) {4841; -O0-LABEL: atomicrmw_min_i8_aligned_acq_rel:4842; -O0: sxtb w9, w04843; -O0: subs w9, w9, w8, sxtb4844; -O0: csel w1, w0, w8, le4845; -O0: bl __aarch64_cas1_acq_rel4846; -O0: subs w8, w0, w8, uxtb4847;4848; -O1-LABEL: atomicrmw_min_i8_aligned_acq_rel:4849; -O1: ldaxrb w9, [x0]4850; -O1: sxtb w8, w94851; -O1: cmp w8, w1, sxtb4852; -O1: csel w9, w9, w1, le4853; -O1: stlxrb w10, w9, [x0]4854 %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 14855 ret i8 %r4856}4857 4858define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) {4859; -O0-LABEL: atomicrmw_min_i8_aligned_seq_cst:4860; -O0: sxtb w9, w04861; -O0: subs w9, w9, w8, sxtb4862; -O0: csel w1, w0, w8, le4863; -O0: bl __aarch64_cas1_acq_rel4864; -O0: subs w8, w0, w8, uxtb4865;4866; -O1-LABEL: atomicrmw_min_i8_aligned_seq_cst:4867; -O1: ldaxrb w9, [x0]4868; -O1: sxtb w8, w94869; -O1: cmp w8, w1, sxtb4870; -O1: csel w9, w9, w1, le4871; -O1: stlxrb w10, w9, [x0]4872 %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 14873 ret i8 %r4874}4875 4876define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) {4877; -O0-LABEL: atomicrmw_min_i16_aligned_monotonic:4878; -O0: sxth w9, w04879; -O0: subs w9, w9, w8, sxth4880; -O0: csel w1, w0, w8, le4881; -O0: bl __aarch64_cas2_relax4882; -O0: subs w8, w0, w8, uxth4883;4884; -O1-LABEL: atomicrmw_min_i16_aligned_monotonic:4885; -O1: ldxrh w9, [x0]4886; -O1: sxth w8, w94887; -O1: cmp w8, w1, sxth4888; -O1: csel w9, w9, w1, le4889; -O1: stxrh w10, w9, [x0]4890 %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 24891 ret i16 %r4892}4893 4894define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) {4895; -O0-LABEL: atomicrmw_min_i16_aligned_acquire:4896; -O0: sxth w9, w04897; -O0: subs w9, w9, w8, sxth4898; -O0: csel w1, w0, w8, le4899; -O0: bl __aarch64_cas2_acq4900; -O0: subs w8, w0, w8, uxth4901;4902; -O1-LABEL: atomicrmw_min_i16_aligned_acquire:4903; -O1: ldaxrh w9, [x0]4904; -O1: sxth w8, w94905; -O1: cmp w8, w1, sxth4906; -O1: csel w9, w9, w1, le4907; -O1: stxrh w10, w9, [x0]4908 %r = atomicrmw min ptr %ptr, i16 %value acquire, align 24909 ret i16 %r4910}4911 4912define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) {4913; -O0-LABEL: atomicrmw_min_i16_aligned_release:4914; -O0: sxth w9, w04915; -O0: subs w9, w9, w8, sxth4916; -O0: csel w1, w0, w8, le4917; -O0: bl __aarch64_cas2_rel4918; -O0: subs w8, w0, w8, uxth4919;4920; -O1-LABEL: atomicrmw_min_i16_aligned_release:4921; -O1: ldxrh w9, [x0]4922; -O1: sxth w8, w94923; -O1: cmp w8, w1, sxth4924; -O1: csel w9, w9, w1, le4925; -O1: stlxrh w10, w9, [x0]4926 %r = atomicrmw min ptr %ptr, i16 %value release, align 24927 ret i16 %r4928}4929 4930define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) {4931; -O0-LABEL: atomicrmw_min_i16_aligned_acq_rel:4932; -O0: sxth w9, w04933; -O0: subs w9, w9, w8, sxth4934; -O0: csel w1, w0, w8, le4935; -O0: bl __aarch64_cas2_acq_rel4936; -O0: subs w8, w0, w8, uxth4937;4938; -O1-LABEL: atomicrmw_min_i16_aligned_acq_rel:4939; -O1: ldaxrh w9, [x0]4940; -O1: sxth w8, w94941; -O1: cmp w8, w1, sxth4942; -O1: csel w9, w9, w1, le4943; -O1: stlxrh w10, w9, [x0]4944 %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 24945 ret i16 %r4946}4947 4948define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) {4949; -O0-LABEL: atomicrmw_min_i16_aligned_seq_cst:4950; -O0: sxth w9, w04951; -O0: subs w9, w9, w8, sxth4952; -O0: csel w1, w0, w8, le4953; -O0: bl __aarch64_cas2_acq_rel4954; -O0: subs w8, w0, w8, uxth4955;4956; -O1-LABEL: atomicrmw_min_i16_aligned_seq_cst:4957; -O1: ldaxrh w9, [x0]4958; -O1: sxth w8, w94959; -O1: cmp w8, w1, sxth4960; -O1: csel w9, w9, w1, le4961; -O1: stlxrh w10, w9, [x0]4962 %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 24963 ret i16 %r4964}4965 4966define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) {4967; -O0-LABEL: atomicrmw_min_i32_aligned_monotonic:4968; -O0: subs w9, w0, w84969; -O0: csel w1, w0, w8, le4970; -O0: bl __aarch64_cas4_relax4971; -O0: subs w8, w0, w84972;4973; -O1-LABEL: atomicrmw_min_i32_aligned_monotonic:4974; -O1: ldxr w8, [x0]4975; -O1: cmp w8, w14976; -O1: csel w9, w8, w1, le4977; -O1: stxr w10, w9, [x0]4978 %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 44979 ret i32 %r4980}4981 4982define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) {4983; -O0-LABEL: atomicrmw_min_i32_aligned_acquire:4984; -O0: subs w9, w0, w84985; -O0: csel w1, w0, w8, le4986; -O0: bl __aarch64_cas4_acq4987; -O0: subs w8, w0, w84988;4989; -O1-LABEL: atomicrmw_min_i32_aligned_acquire:4990; -O1: ldaxr w8, [x0]4991; -O1: cmp w8, w14992; -O1: csel w9, w8, w1, le4993; -O1: stxr w10, w9, [x0]4994 %r = atomicrmw min ptr %ptr, i32 %value acquire, align 44995 ret i32 %r4996}4997 4998define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) {4999; -O0-LABEL: atomicrmw_min_i32_aligned_release:5000; -O0: subs w9, w0, w85001; -O0: csel w1, w0, w8, le5002; -O0: bl __aarch64_cas4_rel5003; -O0: subs w8, w0, w85004;5005; -O1-LABEL: atomicrmw_min_i32_aligned_release:5006; -O1: ldxr w8, [x0]5007; -O1: cmp w8, w15008; -O1: csel w9, w8, w1, le5009; -O1: stlxr w10, w9, [x0]5010 %r = atomicrmw min ptr %ptr, i32 %value release, align 45011 ret i32 %r5012}5013 5014define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5015; -O0-LABEL: atomicrmw_min_i32_aligned_acq_rel:5016; -O0: subs w9, w0, w85017; -O0: csel w1, w0, w8, le5018; -O0: bl __aarch64_cas4_acq_rel5019; -O0: subs w8, w0, w85020;5021; -O1-LABEL: atomicrmw_min_i32_aligned_acq_rel:5022; -O1: ldaxr w8, [x0]5023; -O1: cmp w8, w15024; -O1: csel w9, w8, w1, le5025; -O1: stlxr w10, w9, [x0]5026 %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 45027 ret i32 %r5028}5029 5030define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5031; -O0-LABEL: atomicrmw_min_i32_aligned_seq_cst:5032; -O0: subs w9, w0, w85033; -O0: csel w1, w0, w8, le5034; -O0: bl __aarch64_cas4_acq_rel5035; -O0: subs w8, w0, w85036;5037; -O1-LABEL: atomicrmw_min_i32_aligned_seq_cst:5038; -O1: ldaxr w8, [x0]5039; -O1: cmp w8, w15040; -O1: csel w9, w8, w1, le5041; -O1: stlxr w10, w9, [x0]5042 %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 45043 ret i32 %r5044}5045 5046define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) {5047; -O0-LABEL: atomicrmw_min_i64_aligned_monotonic:5048; -O0: subs x9, x0, x85049; -O0: csel x1, x0, x8, le5050; -O0: bl __aarch64_cas8_relax5051; -O0: subs x8, x0, x85052;5053; -O1-LABEL: atomicrmw_min_i64_aligned_monotonic:5054; -O1: ldxr x0, [x8]5055; -O1: cmp x0, x15056; -O1: csel x9, x0, x1, le5057; -O1: stxr w10, x9, [x8]5058 %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 85059 ret i64 %r5060}5061 5062define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) {5063; -O0-LABEL: atomicrmw_min_i64_aligned_acquire:5064; -O0: subs x9, x0, x85065; -O0: csel x1, x0, x8, le5066; -O0: bl __aarch64_cas8_acq5067; -O0: subs x8, x0, x85068;5069; -O1-LABEL: atomicrmw_min_i64_aligned_acquire:5070; -O1: ldaxr x0, [x8]5071; -O1: cmp x0, x15072; -O1: csel x9, x0, x1, le5073; -O1: stxr w10, x9, [x8]5074 %r = atomicrmw min ptr %ptr, i64 %value acquire, align 85075 ret i64 %r5076}5077 5078define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) {5079; -O0-LABEL: atomicrmw_min_i64_aligned_release:5080; -O0: subs x9, x0, x85081; -O0: csel x1, x0, x8, le5082; -O0: bl __aarch64_cas8_rel5083; -O0: subs x8, x0, x85084;5085; -O1-LABEL: atomicrmw_min_i64_aligned_release:5086; -O1: ldxr x0, [x8]5087; -O1: cmp x0, x15088; -O1: csel x9, x0, x1, le5089; -O1: stlxr w10, x9, [x8]5090 %r = atomicrmw min ptr %ptr, i64 %value release, align 85091 ret i64 %r5092}5093 5094define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5095; -O0-LABEL: atomicrmw_min_i64_aligned_acq_rel:5096; -O0: subs x9, x0, x85097; -O0: csel x1, x0, x8, le5098; -O0: bl __aarch64_cas8_acq_rel5099; -O0: subs x8, x0, x85100;5101; -O1-LABEL: atomicrmw_min_i64_aligned_acq_rel:5102; -O1: ldaxr x0, [x8]5103; -O1: cmp x0, x15104; -O1: csel x9, x0, x1, le5105; -O1: stlxr w10, x9, [x8]5106 %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 85107 ret i64 %r5108}5109 5110define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5111; -O0-LABEL: atomicrmw_min_i64_aligned_seq_cst:5112; -O0: subs x9, x0, x85113; -O0: csel x1, x0, x8, le5114; -O0: bl __aarch64_cas8_acq_rel5115; -O0: subs x8, x0, x85116;5117; -O1-LABEL: atomicrmw_min_i64_aligned_seq_cst:5118; -O1: ldaxr x0, [x8]5119; -O1: cmp x0, x15120; -O1: csel x9, x0, x1, le5121; -O1: stlxr w10, x9, [x8]5122 %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 85123 ret i64 %r5124}5125 5126define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) {5127; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic:5128; -O0: subs x10, x8, x15129; -O0: csel x2, x0, x9, ge5130; -O0: csel x3, x1, x8, ge5131; -O0: bl __aarch64_cas16_relax5132; -O0: subs x10, x10, x115133; -O0: ccmp x8, x9, #0, eq5134;5135; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic:5136; -O1: ldxp x1, x0, [x8]5137; -O1: cmp x3, x15138; -O1: csel x9, x0, x2, ge5139; -O1: csel x10, x1, x3, ge5140; -O1: stxp w11, x10, x9, [x8]5141 %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 165142 ret i128 %r5143}5144 5145define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) {5146; -O0-LABEL: atomicrmw_min_i128_aligned_acquire:5147; -O0: subs x10, x8, x15148; -O0: csel x2, x0, x9, ge5149; -O0: csel x3, x1, x8, ge5150; -O0: bl __aarch64_cas16_acq5151; -O0: subs x10, x10, x115152; -O0: ccmp x8, x9, #0, eq5153;5154; -O1-LABEL: atomicrmw_min_i128_aligned_acquire:5155; -O1: ldaxp x1, x0, [x8]5156; -O1: cmp x3, x15157; -O1: csel x9, x0, x2, ge5158; -O1: csel x10, x1, x3, ge5159; -O1: stxp w11, x10, x9, [x8]5160 %r = atomicrmw min ptr %ptr, i128 %value acquire, align 165161 ret i128 %r5162}5163 5164define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) {5165; -O0-LABEL: atomicrmw_min_i128_aligned_release:5166; -O0: subs x10, x8, x15167; -O0: csel x2, x0, x9, ge5168; -O0: csel x3, x1, x8, ge5169; -O0: bl __aarch64_cas16_rel5170; -O0: subs x10, x10, x115171; -O0: ccmp x8, x9, #0, eq5172;5173; -O1-LABEL: atomicrmw_min_i128_aligned_release:5174; -O1: ldxp x1, x0, [x8]5175; -O1: cmp x3, x15176; -O1: csel x9, x0, x2, ge5177; -O1: csel x10, x1, x3, ge5178; -O1: stlxp w11, x10, x9, [x8]5179 %r = atomicrmw min ptr %ptr, i128 %value release, align 165180 ret i128 %r5181}5182 5183define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5184; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel:5185; -O0: subs x10, x8, x15186; -O0: csel x2, x0, x9, ge5187; -O0: csel x3, x1, x8, ge5188; -O0: bl __aarch64_cas16_acq_rel5189; -O0: subs x10, x10, x115190; -O0: ccmp x8, x9, #0, eq5191;5192; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel:5193; -O1: ldaxp x1, x0, [x8]5194; -O1: cmp x3, x15195; -O1: csel x9, x0, x2, ge5196; -O1: csel x10, x1, x3, ge5197; -O1: stlxp w11, x10, x9, [x8]5198 %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 165199 ret i128 %r5200}5201 5202define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5203; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst:5204; -O0: subs x10, x8, x15205; -O0: csel x2, x0, x9, ge5206; -O0: csel x3, x1, x8, ge5207; -O0: bl __aarch64_cas16_acq_rel5208; -O0: subs x10, x10, x115209; -O0: ccmp x8, x9, #0, eq5210;5211; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst:5212; -O1: ldaxp x1, x0, [x8]5213; -O1: cmp x3, x15214; -O1: csel x9, x0, x2, ge5215; -O1: csel x10, x1, x3, ge5216; -O1: stlxp w11, x10, x9, [x8]5217 %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 165218 ret i128 %r5219}5220 5221define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5222; -O0-LABEL: atomicrmw_min_i8_unaligned_monotonic:5223; -O0: sxtb w9, w05224; -O0: subs w9, w9, w8, sxtb5225; -O0: csel w1, w0, w8, le5226; -O0: bl __aarch64_cas1_relax5227; -O0: subs w8, w0, w8, uxtb5228;5229; -O1-LABEL: atomicrmw_min_i8_unaligned_monotonic:5230; -O1: ldxrb w9, [x0]5231; -O1: sxtb w8, w95232; -O1: cmp w8, w1, sxtb5233; -O1: csel w9, w9, w1, le5234; -O1: stxrb w10, w9, [x0]5235 %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 15236 ret i8 %r5237}5238 5239define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) {5240; -O0-LABEL: atomicrmw_min_i8_unaligned_acquire:5241; -O0: sxtb w9, w05242; -O0: subs w9, w9, w8, sxtb5243; -O0: csel w1, w0, w8, le5244; -O0: bl __aarch64_cas1_acq5245; -O0: subs w8, w0, w8, uxtb5246;5247; -O1-LABEL: atomicrmw_min_i8_unaligned_acquire:5248; -O1: ldaxrb w9, [x0]5249; -O1: sxtb w8, w95250; -O1: cmp w8, w1, sxtb5251; -O1: csel w9, w9, w1, le5252; -O1: stxrb w10, w9, [x0]5253 %r = atomicrmw min ptr %ptr, i8 %value acquire, align 15254 ret i8 %r5255}5256 5257define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) {5258; -O0-LABEL: atomicrmw_min_i8_unaligned_release:5259; -O0: sxtb w9, w05260; -O0: subs w9, w9, w8, sxtb5261; -O0: csel w1, w0, w8, le5262; -O0: bl __aarch64_cas1_rel5263; -O0: subs w8, w0, w8, uxtb5264;5265; -O1-LABEL: atomicrmw_min_i8_unaligned_release:5266; -O1: ldxrb w9, [x0]5267; -O1: sxtb w8, w95268; -O1: cmp w8, w1, sxtb5269; -O1: csel w9, w9, w1, le5270; -O1: stlxrb w10, w9, [x0]5271 %r = atomicrmw min ptr %ptr, i8 %value release, align 15272 ret i8 %r5273}5274 5275define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5276; -O0-LABEL: atomicrmw_min_i8_unaligned_acq_rel:5277; -O0: sxtb w9, w05278; -O0: subs w9, w9, w8, sxtb5279; -O0: csel w1, w0, w8, le5280; -O0: bl __aarch64_cas1_acq_rel5281; -O0: subs w8, w0, w8, uxtb5282;5283; -O1-LABEL: atomicrmw_min_i8_unaligned_acq_rel:5284; -O1: ldaxrb w9, [x0]5285; -O1: sxtb w8, w95286; -O1: cmp w8, w1, sxtb5287; -O1: csel w9, w9, w1, le5288; -O1: stlxrb w10, w9, [x0]5289 %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 15290 ret i8 %r5291}5292 5293define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5294; -O0-LABEL: atomicrmw_min_i8_unaligned_seq_cst:5295; -O0: sxtb w9, w05296; -O0: subs w9, w9, w8, sxtb5297; -O0: csel w1, w0, w8, le5298; -O0: bl __aarch64_cas1_acq_rel5299; -O0: subs w8, w0, w8, uxtb5300;5301; -O1-LABEL: atomicrmw_min_i8_unaligned_seq_cst:5302; -O1: ldaxrb w9, [x0]5303; -O1: sxtb w8, w95304; -O1: cmp w8, w1, sxtb5305; -O1: csel w9, w9, w1, le5306; -O1: stlxrb w10, w9, [x0]5307 %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 15308 ret i8 %r5309}5310 5311define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5312; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic:5313; -O0: sxth w10, w95314; -O0: subs w10, w10, w8, sxth5315; -O0: csel w8, w9, w8, le5316; -O0: bl __atomic_compare_exchange5317;5318; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic:5319; -O1: sxth w8, w05320; -O1: cmp w8, w20, sxth5321; -O1: csel w8, w0, w20, le5322; -O1: bl __atomic_compare_exchange5323 %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 15324 ret i16 %r5325}5326 5327define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) {5328; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire:5329; -O0: sxth w10, w95330; -O0: subs w10, w10, w8, sxth5331; -O0: csel w8, w9, w8, le5332; -O0: bl __atomic_compare_exchange5333;5334; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire:5335; -O1: sxth w8, w05336; -O1: cmp w8, w20, sxth5337; -O1: csel w8, w0, w20, le5338; -O1: bl __atomic_compare_exchange5339 %r = atomicrmw min ptr %ptr, i16 %value acquire, align 15340 ret i16 %r5341}5342 5343define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) {5344; -O0-LABEL: atomicrmw_min_i16_unaligned_release:5345; -O0: sxth w10, w95346; -O0: subs w10, w10, w8, sxth5347; -O0: csel w8, w9, w8, le5348; -O0: bl __atomic_compare_exchange5349;5350; -O1-LABEL: atomicrmw_min_i16_unaligned_release:5351; -O1: sxth w8, w05352; -O1: cmp w8, w20, sxth5353; -O1: csel w8, w0, w20, le5354; -O1: bl __atomic_compare_exchange5355 %r = atomicrmw min ptr %ptr, i16 %value release, align 15356 ret i16 %r5357}5358 5359define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5360; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel:5361; -O0: sxth w10, w95362; -O0: subs w10, w10, w8, sxth5363; -O0: csel w8, w9, w8, le5364; -O0: bl __atomic_compare_exchange5365;5366; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel:5367; -O1: sxth w8, w05368; -O1: cmp w8, w20, sxth5369; -O1: csel w8, w0, w20, le5370; -O1: bl __atomic_compare_exchange5371 %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 15372 ret i16 %r5373}5374 5375define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5376; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst:5377; -O0: sxth w10, w95378; -O0: subs w10, w10, w8, sxth5379; -O0: csel w8, w9, w8, le5380; -O0: bl __atomic_compare_exchange5381;5382; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst:5383; -O1: sxth w8, w05384; -O1: cmp w8, w20, sxth5385; -O1: csel w8, w0, w20, le5386; -O1: bl __atomic_compare_exchange5387 %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 15388 ret i16 %r5389}5390 5391define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5392; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic:5393; -O0: subs w10, w9, w85394; -O0: csel w8, w9, w8, le5395; -O0: bl __atomic_compare_exchange5396;5397; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic:5398; -O1: cmp w0, w205399; -O1: csel w8, w0, w20, le5400; -O1: bl __atomic_compare_exchange5401 %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 15402 ret i32 %r5403}5404 5405define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) {5406; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire:5407; -O0: subs w10, w9, w85408; -O0: csel w8, w9, w8, le5409; -O0: bl __atomic_compare_exchange5410;5411; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire:5412; -O1: cmp w0, w205413; -O1: csel w8, w0, w20, le5414; -O1: bl __atomic_compare_exchange5415 %r = atomicrmw min ptr %ptr, i32 %value acquire, align 15416 ret i32 %r5417}5418 5419define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) {5420; -O0-LABEL: atomicrmw_min_i32_unaligned_release:5421; -O0: subs w10, w9, w85422; -O0: csel w8, w9, w8, le5423; -O0: bl __atomic_compare_exchange5424;5425; -O1-LABEL: atomicrmw_min_i32_unaligned_release:5426; -O1: cmp w0, w205427; -O1: csel w8, w0, w20, le5428; -O1: bl __atomic_compare_exchange5429 %r = atomicrmw min ptr %ptr, i32 %value release, align 15430 ret i32 %r5431}5432 5433define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5434; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel:5435; -O0: subs w10, w9, w85436; -O0: csel w8, w9, w8, le5437; -O0: bl __atomic_compare_exchange5438;5439; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel:5440; -O1: cmp w0, w205441; -O1: csel w8, w0, w20, le5442; -O1: bl __atomic_compare_exchange5443 %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 15444 ret i32 %r5445}5446 5447define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5448; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst:5449; -O0: subs w10, w9, w85450; -O0: csel w8, w9, w8, le5451; -O0: bl __atomic_compare_exchange5452;5453; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst:5454; -O1: cmp w0, w205455; -O1: csel w8, w0, w20, le5456; -O1: bl __atomic_compare_exchange5457 %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 15458 ret i32 %r5459}5460 5461define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5462; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic:5463; -O0: subs x10, x9, x85464; -O0: csel x8, x9, x8, le5465; -O0: bl __atomic_compare_exchange5466;5467; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic:5468; -O1: cmp x0, x205469; -O1: csel x8, x0, x20, le5470; -O1: bl __atomic_compare_exchange5471 %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 15472 ret i64 %r5473}5474 5475define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) {5476; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire:5477; -O0: subs x10, x9, x85478; -O0: csel x8, x9, x8, le5479; -O0: bl __atomic_compare_exchange5480;5481; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire:5482; -O1: cmp x0, x205483; -O1: csel x8, x0, x20, le5484; -O1: bl __atomic_compare_exchange5485 %r = atomicrmw min ptr %ptr, i64 %value acquire, align 15486 ret i64 %r5487}5488 5489define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) {5490; -O0-LABEL: atomicrmw_min_i64_unaligned_release:5491; -O0: subs x10, x9, x85492; -O0: csel x8, x9, x8, le5493; -O0: bl __atomic_compare_exchange5494;5495; -O1-LABEL: atomicrmw_min_i64_unaligned_release:5496; -O1: cmp x0, x205497; -O1: csel x8, x0, x20, le5498; -O1: bl __atomic_compare_exchange5499 %r = atomicrmw min ptr %ptr, i64 %value release, align 15500 ret i64 %r5501}5502 5503define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {5504; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel:5505; -O0: subs x10, x9, x85506; -O0: csel x8, x9, x8, le5507; -O0: bl __atomic_compare_exchange5508;5509; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel:5510; -O1: cmp x0, x205511; -O1: csel x8, x0, x20, le5512; -O1: bl __atomic_compare_exchange5513 %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 15514 ret i64 %r5515}5516 5517define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {5518; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst:5519; -O0: subs x10, x9, x85520; -O0: csel x8, x9, x8, le5521; -O0: bl __atomic_compare_exchange5522;5523; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst:5524; -O1: cmp x0, x205525; -O1: csel x8, x0, x20, le5526; -O1: bl __atomic_compare_exchange5527 %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 15528 ret i64 %r5529}5530 5531define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5532; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic:5533; -O0: subs x12, x9, x105534; -O0: csel x8, x11, x8, ge5535; -O0: csel x9, x10, x9, ge5536; -O0: bl __atomic_compare_exchange5537;5538; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic:5539; -O1: ldp x0, x1, [x0]5540; -O1: cmp x19, x15541; -O1: csel x8, x1, x19, ge5542; -O1: csel x9, x0, x21, ge5543; -O1: bl __atomic_compare_exchange5544 %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 15545 ret i128 %r5546}5547 5548define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) {5549; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire:5550; -O0: subs x12, x9, x105551; -O0: csel x8, x11, x8, ge5552; -O0: csel x9, x10, x9, ge5553; -O0: bl __atomic_compare_exchange5554;5555; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire:5556; -O1: ldp x0, x1, [x0]5557; -O1: cmp x19, x15558; -O1: csel x8, x1, x19, ge5559; -O1: csel x9, x0, x21, ge5560; -O1: bl __atomic_compare_exchange5561 %r = atomicrmw min ptr %ptr, i128 %value acquire, align 15562 ret i128 %r5563}5564 5565define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) {5566; -O0-LABEL: atomicrmw_min_i128_unaligned_release:5567; -O0: subs x12, x9, x105568; -O0: csel x8, x11, x8, ge5569; -O0: csel x9, x10, x9, ge5570; -O0: bl __atomic_compare_exchange5571;5572; -O1-LABEL: atomicrmw_min_i128_unaligned_release:5573; -O1: ldp x0, x1, [x0]5574; -O1: cmp x19, x15575; -O1: csel x8, x1, x19, ge5576; -O1: csel x9, x0, x21, ge5577; -O1: bl __atomic_compare_exchange5578 %r = atomicrmw min ptr %ptr, i128 %value release, align 15579 ret i128 %r5580}5581 5582define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5583; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5584; -O0: subs x12, x9, x105585; -O0: csel x8, x11, x8, ge5586; -O0: csel x9, x10, x9, ge5587; -O0: bl __atomic_compare_exchange5588;5589; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5590; -O1: ldp x0, x1, [x0]5591; -O1: cmp x19, x15592; -O1: csel x8, x1, x19, ge5593; -O1: csel x9, x0, x21, ge5594; -O1: bl __atomic_compare_exchange5595 %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 15596 ret i128 %r5597}5598 5599define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5600; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5601; -O0: subs x12, x9, x105602; -O0: csel x8, x11, x8, ge5603; -O0: csel x9, x10, x9, ge5604; -O0: bl __atomic_compare_exchange5605;5606; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5607; -O1: ldp x0, x1, [x0]5608; -O1: cmp x19, x15609; -O1: csel x8, x1, x19, ge5610; -O1: csel x9, x0, x21, ge5611; -O1: bl __atomic_compare_exchange5612 %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 15613 ret i128 %r5614}5615 5616define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) {5617; -O0-LABEL: atomicrmw_umax_i8_aligned_monotonic:5618; -O0: and w9, w0, #0xff5619; -O0: subs w9, w9, w8, uxtb5620; -O0: csel w1, w0, w8, hi5621; -O0: bl __aarch64_cas1_relax5622; -O0: subs w8, w0, w85623;5624; -O1-LABEL: atomicrmw_umax_i8_aligned_monotonic:5625; -O1: and w9, w1, #0xff5626; -O1: ldxrb w8, [x0]5627; -O1: cmp w8, w95628; -O1: csel w10, w8, w9, hi5629; -O1: stxrb w11, w10, [x0]5630 %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15631 ret i8 %r5632}5633 5634define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) {5635; -O0-LABEL: atomicrmw_umax_i8_aligned_acquire:5636; -O0: and w9, w0, #0xff5637; -O0: subs w9, w9, w8, uxtb5638; -O0: csel w1, w0, w8, hi5639; -O0: bl __aarch64_cas1_acq5640; -O0: subs w8, w0, w85641;5642; -O1-LABEL: atomicrmw_umax_i8_aligned_acquire:5643; -O1: and w9, w1, #0xff5644; -O1: ldaxrb w8, [x0]5645; -O1: cmp w8, w95646; -O1: csel w10, w8, w9, hi5647; -O1: stxrb w11, w10, [x0]5648 %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15649 ret i8 %r5650}5651 5652define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) {5653; -O0-LABEL: atomicrmw_umax_i8_aligned_release:5654; -O0: and w9, w0, #0xff5655; -O0: subs w9, w9, w8, uxtb5656; -O0: csel w1, w0, w8, hi5657; -O0: bl __aarch64_cas1_rel5658; -O0: subs w8, w0, w85659;5660; -O1-LABEL: atomicrmw_umax_i8_aligned_release:5661; -O1: and w9, w1, #0xff5662; -O1: ldxrb w8, [x0]5663; -O1: cmp w8, w95664; -O1: csel w10, w8, w9, hi5665; -O1: stlxrb w11, w10, [x0]5666 %r = atomicrmw umax ptr %ptr, i8 %value release, align 15667 ret i8 %r5668}5669 5670define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5671; -O0-LABEL: atomicrmw_umax_i8_aligned_acq_rel:5672; -O0: and w9, w0, #0xff5673; -O0: subs w9, w9, w8, uxtb5674; -O0: csel w1, w0, w8, hi5675; -O0: bl __aarch64_cas1_acq_rel5676; -O0: subs w8, w0, w85677;5678; -O1-LABEL: atomicrmw_umax_i8_aligned_acq_rel:5679; -O1: and w9, w1, #0xff5680; -O1: ldaxrb w8, [x0]5681; -O1: cmp w8, w95682; -O1: csel w10, w8, w9, hi5683; -O1: stlxrb w11, w10, [x0]5684 %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15685 ret i8 %r5686}5687 5688define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5689; -O0-LABEL: atomicrmw_umax_i8_aligned_seq_cst:5690; -O0: and w9, w0, #0xff5691; -O0: subs w9, w9, w8, uxtb5692; -O0: csel w1, w0, w8, hi5693; -O0: bl __aarch64_cas1_acq_rel5694; -O0: subs w8, w0, w85695;5696; -O1-LABEL: atomicrmw_umax_i8_aligned_seq_cst:5697; -O1: and w9, w1, #0xff5698; -O1: ldaxrb w8, [x0]5699; -O1: cmp w8, w95700; -O1: csel w10, w8, w9, hi5701; -O1: stlxrb w11, w10, [x0]5702 %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15703 ret i8 %r5704}5705 5706define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) {5707; -O0-LABEL: atomicrmw_umax_i16_aligned_monotonic:5708; -O0: and w9, w0, #0xffff5709; -O0: subs w9, w9, w8, uxth5710; -O0: csel w1, w0, w8, hi5711; -O0: bl __aarch64_cas2_relax5712; -O0: subs w8, w0, w85713;5714; -O1-LABEL: atomicrmw_umax_i16_aligned_monotonic:5715; -O1: and w9, w1, #0xffff5716; -O1: ldxrh w8, [x0]5717; -O1: cmp w8, w95718; -O1: csel w10, w8, w9, hi5719; -O1: stxrh w11, w10, [x0]5720 %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 25721 ret i16 %r5722}5723 5724define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) {5725; -O0-LABEL: atomicrmw_umax_i16_aligned_acquire:5726; -O0: and w9, w0, #0xffff5727; -O0: subs w9, w9, w8, uxth5728; -O0: csel w1, w0, w8, hi5729; -O0: bl __aarch64_cas2_acq5730; -O0: subs w8, w0, w85731;5732; -O1-LABEL: atomicrmw_umax_i16_aligned_acquire:5733; -O1: and w9, w1, #0xffff5734; -O1: ldaxrh w8, [x0]5735; -O1: cmp w8, w95736; -O1: csel w10, w8, w9, hi5737; -O1: stxrh w11, w10, [x0]5738 %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 25739 ret i16 %r5740}5741 5742define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) {5743; -O0-LABEL: atomicrmw_umax_i16_aligned_release:5744; -O0: and w9, w0, #0xffff5745; -O0: subs w9, w9, w8, uxth5746; -O0: csel w1, w0, w8, hi5747; -O0: bl __aarch64_cas2_rel5748; -O0: subs w8, w0, w85749;5750; -O1-LABEL: atomicrmw_umax_i16_aligned_release:5751; -O1: and w9, w1, #0xffff5752; -O1: ldxrh w8, [x0]5753; -O1: cmp w8, w95754; -O1: csel w10, w8, w9, hi5755; -O1: stlxrh w11, w10, [x0]5756 %r = atomicrmw umax ptr %ptr, i16 %value release, align 25757 ret i16 %r5758}5759 5760define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5761; -O0-LABEL: atomicrmw_umax_i16_aligned_acq_rel:5762; -O0: and w9, w0, #0xffff5763; -O0: subs w9, w9, w8, uxth5764; -O0: csel w1, w0, w8, hi5765; -O0: bl __aarch64_cas2_acq_rel5766; -O0: subs w8, w0, w85767;5768; -O1-LABEL: atomicrmw_umax_i16_aligned_acq_rel:5769; -O1: and w9, w1, #0xffff5770; -O1: ldaxrh w8, [x0]5771; -O1: cmp w8, w95772; -O1: csel w10, w8, w9, hi5773; -O1: stlxrh w11, w10, [x0]5774 %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 25775 ret i16 %r5776}5777 5778define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5779; -O0-LABEL: atomicrmw_umax_i16_aligned_seq_cst:5780; -O0: and w9, w0, #0xffff5781; -O0: subs w9, w9, w8, uxth5782; -O0: csel w1, w0, w8, hi5783; -O0: bl __aarch64_cas2_acq_rel5784; -O0: subs w8, w0, w85785;5786; -O1-LABEL: atomicrmw_umax_i16_aligned_seq_cst:5787; -O1: and w9, w1, #0xffff5788; -O1: ldaxrh w8, [x0]5789; -O1: cmp w8, w95790; -O1: csel w10, w8, w9, hi5791; -O1: stlxrh w11, w10, [x0]5792 %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 25793 ret i16 %r5794}5795 5796define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) {5797; -O0-LABEL: atomicrmw_umax_i32_aligned_monotonic:5798; -O0: subs w9, w0, w85799; -O0: csel w1, w0, w8, hi5800; -O0: bl __aarch64_cas4_relax5801; -O0: subs w8, w0, w85802;5803; -O1-LABEL: atomicrmw_umax_i32_aligned_monotonic:5804; -O1: ldxr w8, [x0]5805; -O1: cmp w8, w15806; -O1: csel w9, w8, w1, hi5807; -O1: stxr w10, w9, [x0]5808 %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 45809 ret i32 %r5810}5811 5812define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) {5813; -O0-LABEL: atomicrmw_umax_i32_aligned_acquire:5814; -O0: subs w9, w0, w85815; -O0: csel w1, w0, w8, hi5816; -O0: bl __aarch64_cas4_acq5817; -O0: subs w8, w0, w85818;5819; -O1-LABEL: atomicrmw_umax_i32_aligned_acquire:5820; -O1: ldaxr w8, [x0]5821; -O1: cmp w8, w15822; -O1: csel w9, w8, w1, hi5823; -O1: stxr w10, w9, [x0]5824 %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 45825 ret i32 %r5826}5827 5828define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) {5829; -O0-LABEL: atomicrmw_umax_i32_aligned_release:5830; -O0: subs w9, w0, w85831; -O0: csel w1, w0, w8, hi5832; -O0: bl __aarch64_cas4_rel5833; -O0: subs w8, w0, w85834;5835; -O1-LABEL: atomicrmw_umax_i32_aligned_release:5836; -O1: ldxr w8, [x0]5837; -O1: cmp w8, w15838; -O1: csel w9, w8, w1, hi5839; -O1: stlxr w10, w9, [x0]5840 %r = atomicrmw umax ptr %ptr, i32 %value release, align 45841 ret i32 %r5842}5843 5844define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5845; -O0-LABEL: atomicrmw_umax_i32_aligned_acq_rel:5846; -O0: subs w9, w0, w85847; -O0: csel w1, w0, w8, hi5848; -O0: bl __aarch64_cas4_acq_rel5849; -O0: subs w8, w0, w85850;5851; -O1-LABEL: atomicrmw_umax_i32_aligned_acq_rel:5852; -O1: ldaxr w8, [x0]5853; -O1: cmp w8, w15854; -O1: csel w9, w8, w1, hi5855; -O1: stlxr w10, w9, [x0]5856 %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 45857 ret i32 %r5858}5859 5860define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5861; -O0-LABEL: atomicrmw_umax_i32_aligned_seq_cst:5862; -O0: subs w9, w0, w85863; -O0: csel w1, w0, w8, hi5864; -O0: bl __aarch64_cas4_acq_rel5865; -O0: subs w8, w0, w85866;5867; -O1-LABEL: atomicrmw_umax_i32_aligned_seq_cst:5868; -O1: ldaxr w8, [x0]5869; -O1: cmp w8, w15870; -O1: csel w9, w8, w1, hi5871; -O1: stlxr w10, w9, [x0]5872 %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 45873 ret i32 %r5874}5875 5876define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) {5877; -O0-LABEL: atomicrmw_umax_i64_aligned_monotonic:5878; -O0: subs x9, x0, x85879; -O0: csel x1, x0, x8, hi5880; -O0: bl __aarch64_cas8_relax5881; -O0: subs x8, x0, x85882;5883; -O1-LABEL: atomicrmw_umax_i64_aligned_monotonic:5884; -O1: ldxr x0, [x8]5885; -O1: cmp x0, x15886; -O1: csel x9, x0, x1, hi5887; -O1: stxr w10, x9, [x8]5888 %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 85889 ret i64 %r5890}5891 5892define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) {5893; -O0-LABEL: atomicrmw_umax_i64_aligned_acquire:5894; -O0: subs x9, x0, x85895; -O0: csel x1, x0, x8, hi5896; -O0: bl __aarch64_cas8_acq5897; -O0: subs x8, x0, x85898;5899; -O1-LABEL: atomicrmw_umax_i64_aligned_acquire:5900; -O1: ldaxr x0, [x8]5901; -O1: cmp x0, x15902; -O1: csel x9, x0, x1, hi5903; -O1: stxr w10, x9, [x8]5904 %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 85905 ret i64 %r5906}5907 5908define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) {5909; -O0-LABEL: atomicrmw_umax_i64_aligned_release:5910; -O0: subs x9, x0, x85911; -O0: csel x1, x0, x8, hi5912; -O0: bl __aarch64_cas8_rel5913; -O0: subs x8, x0, x85914;5915; -O1-LABEL: atomicrmw_umax_i64_aligned_release:5916; -O1: ldxr x0, [x8]5917; -O1: cmp x0, x15918; -O1: csel x9, x0, x1, hi5919; -O1: stlxr w10, x9, [x8]5920 %r = atomicrmw umax ptr %ptr, i64 %value release, align 85921 ret i64 %r5922}5923 5924define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5925; -O0-LABEL: atomicrmw_umax_i64_aligned_acq_rel:5926; -O0: subs x9, x0, x85927; -O0: csel x1, x0, x8, hi5928; -O0: bl __aarch64_cas8_acq_rel5929; -O0: subs x8, x0, x85930;5931; -O1-LABEL: atomicrmw_umax_i64_aligned_acq_rel:5932; -O1: ldaxr x0, [x8]5933; -O1: cmp x0, x15934; -O1: csel x9, x0, x1, hi5935; -O1: stlxr w10, x9, [x8]5936 %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 85937 ret i64 %r5938}5939 5940define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5941; -O0-LABEL: atomicrmw_umax_i64_aligned_seq_cst:5942; -O0: subs x9, x0, x85943; -O0: csel x1, x0, x8, hi5944; -O0: bl __aarch64_cas8_acq_rel5945; -O0: subs x8, x0, x85946;5947; -O1-LABEL: atomicrmw_umax_i64_aligned_seq_cst:5948; -O1: ldaxr x0, [x8]5949; -O1: cmp x0, x15950; -O1: csel x9, x0, x1, hi5951; -O1: stlxr w10, x9, [x8]5952 %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 85953 ret i64 %r5954}5955 5956define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) {5957; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic:5958; -O0: subs x10, x8, x15959; -O0: csel x2, x0, x9, lo5960; -O0: csel x3, x1, x8, lo5961; -O0: bl __aarch64_cas16_relax5962; -O0: subs x10, x10, x115963; -O0: ccmp x8, x9, #0, eq5964;5965; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic:5966; -O1: ldxp x1, x0, [x8]5967; -O1: cmp x3, x15968; -O1: csel x9, x0, x2, lo5969; -O1: csel x10, x1, x3, lo5970; -O1: stxp w11, x10, x9, [x8]5971 %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 165972 ret i128 %r5973}5974 5975define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) {5976; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire:5977; -O0: subs x10, x8, x15978; -O0: csel x2, x0, x9, lo5979; -O0: csel x3, x1, x8, lo5980; -O0: bl __aarch64_cas16_acq5981; -O0: subs x10, x10, x115982; -O0: ccmp x8, x9, #0, eq5983;5984; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire:5985; -O1: ldaxp x1, x0, [x8]5986; -O1: cmp x3, x15987; -O1: csel x9, x0, x2, lo5988; -O1: csel x10, x1, x3, lo5989; -O1: stxp w11, x10, x9, [x8]5990 %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 165991 ret i128 %r5992}5993 5994define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) {5995; -O0-LABEL: atomicrmw_umax_i128_aligned_release:5996; -O0: subs x10, x8, x15997; -O0: csel x2, x0, x9, lo5998; -O0: csel x3, x1, x8, lo5999; -O0: bl __aarch64_cas16_rel6000; -O0: subs x10, x10, x116001; -O0: ccmp x8, x9, #0, eq6002;6003; -O1-LABEL: atomicrmw_umax_i128_aligned_release:6004; -O1: ldxp x1, x0, [x8]6005; -O1: cmp x3, x16006; -O1: csel x9, x0, x2, lo6007; -O1: csel x10, x1, x3, lo6008; -O1: stlxp w11, x10, x9, [x8]6009 %r = atomicrmw umax ptr %ptr, i128 %value release, align 166010 ret i128 %r6011}6012 6013define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) {6014; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel:6015; -O0: subs x10, x8, x16016; -O0: csel x2, x0, x9, lo6017; -O0: csel x3, x1, x8, lo6018; -O0: bl __aarch64_cas16_acq_rel6019; -O0: subs x10, x10, x116020; -O0: ccmp x8, x9, #0, eq6021;6022; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel:6023; -O1: ldaxp x1, x0, [x8]6024; -O1: cmp x3, x16025; -O1: csel x9, x0, x2, lo6026; -O1: csel x10, x1, x3, lo6027; -O1: stlxp w11, x10, x9, [x8]6028 %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 166029 ret i128 %r6030}6031 6032define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) {6033; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst:6034; -O0: subs x10, x8, x16035; -O0: csel x2, x0, x9, lo6036; -O0: csel x3, x1, x8, lo6037; -O0: bl __aarch64_cas16_acq_rel6038; -O0: subs x10, x10, x116039; -O0: ccmp x8, x9, #0, eq6040;6041; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst:6042; -O1: ldaxp x1, x0, [x8]6043; -O1: cmp x3, x16044; -O1: csel x9, x0, x2, lo6045; -O1: csel x10, x1, x3, lo6046; -O1: stlxp w11, x10, x9, [x8]6047 %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 166048 ret i128 %r6049}6050 6051define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) {6052; -O0-LABEL: atomicrmw_umax_i8_unaligned_monotonic:6053; -O0: and w9, w0, #0xff6054; -O0: subs w9, w9, w8, uxtb6055; -O0: csel w1, w0, w8, hi6056; -O0: bl __aarch64_cas1_relax6057; -O0: subs w8, w0, w86058;6059; -O1-LABEL: atomicrmw_umax_i8_unaligned_monotonic:6060; -O1: and w9, w1, #0xff6061; -O1: ldxrb w8, [x0]6062; -O1: cmp w8, w96063; -O1: csel w10, w8, w9, hi6064; -O1: stxrb w11, w10, [x0]6065 %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 16066 ret i8 %r6067}6068 6069define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) {6070; -O0-LABEL: atomicrmw_umax_i8_unaligned_acquire:6071; -O0: and w9, w0, #0xff6072; -O0: subs w9, w9, w8, uxtb6073; -O0: csel w1, w0, w8, hi6074; -O0: bl __aarch64_cas1_acq6075; -O0: subs w8, w0, w86076;6077; -O1-LABEL: atomicrmw_umax_i8_unaligned_acquire:6078; -O1: and w9, w1, #0xff6079; -O1: ldaxrb w8, [x0]6080; -O1: cmp w8, w96081; -O1: csel w10, w8, w9, hi6082; -O1: stxrb w11, w10, [x0]6083 %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 16084 ret i8 %r6085}6086 6087define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) {6088; -O0-LABEL: atomicrmw_umax_i8_unaligned_release:6089; -O0: and w9, w0, #0xff6090; -O0: subs w9, w9, w8, uxtb6091; -O0: csel w1, w0, w8, hi6092; -O0: bl __aarch64_cas1_rel6093; -O0: subs w8, w0, w86094;6095; -O1-LABEL: atomicrmw_umax_i8_unaligned_release:6096; -O1: and w9, w1, #0xff6097; -O1: ldxrb w8, [x0]6098; -O1: cmp w8, w96099; -O1: csel w10, w8, w9, hi6100; -O1: stlxrb w11, w10, [x0]6101 %r = atomicrmw umax ptr %ptr, i8 %value release, align 16102 ret i8 %r6103}6104 6105define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {6106; -O0-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:6107; -O0: and w9, w0, #0xff6108; -O0: subs w9, w9, w8, uxtb6109; -O0: csel w1, w0, w8, hi6110; -O0: bl __aarch64_cas1_acq_rel6111; -O0: subs w8, w0, w86112;6113; -O1-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:6114; -O1: and w9, w1, #0xff6115; -O1: ldaxrb w8, [x0]6116; -O1: cmp w8, w96117; -O1: csel w10, w8, w9, hi6118; -O1: stlxrb w11, w10, [x0]6119 %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 16120 ret i8 %r6121}6122 6123define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {6124; -O0-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:6125; -O0: and w9, w0, #0xff6126; -O0: subs w9, w9, w8, uxtb6127; -O0: csel w1, w0, w8, hi6128; -O0: bl __aarch64_cas1_acq_rel6129; -O0: subs w8, w0, w86130;6131; -O1-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:6132; -O1: and w9, w1, #0xff6133; -O1: ldaxrb w8, [x0]6134; -O1: cmp w8, w96135; -O1: csel w10, w8, w9, hi6136; -O1: stlxrb w11, w10, [x0]6137 %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 16138 ret i8 %r6139}6140 6141define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) {6142; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic:6143; -O0: and w10, w9, #0xffff6144; -O0: subs w10, w10, w8, uxth6145; -O0: csel w8, w9, w8, hi6146; -O0: bl __atomic_compare_exchange6147;6148; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic:6149; -O1: and w8, w0, #0xffff6150; -O1: cmp w8, w20, uxth6151; -O1: csel w8, w0, w20, hi6152; -O1: bl __atomic_compare_exchange6153 %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 16154 ret i16 %r6155}6156 6157define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) {6158; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire:6159; -O0: and w10, w9, #0xffff6160; -O0: subs w10, w10, w8, uxth6161; -O0: csel w8, w9, w8, hi6162; -O0: bl __atomic_compare_exchange6163;6164; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire:6165; -O1: and w8, w0, #0xffff6166; -O1: cmp w8, w20, uxth6167; -O1: csel w8, w0, w20, hi6168; -O1: bl __atomic_compare_exchange6169 %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 16170 ret i16 %r6171}6172 6173define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) {6174; -O0-LABEL: atomicrmw_umax_i16_unaligned_release:6175; -O0: and w10, w9, #0xffff6176; -O0: subs w10, w10, w8, uxth6177; -O0: csel w8, w9, w8, hi6178; -O0: bl __atomic_compare_exchange6179;6180; -O1-LABEL: atomicrmw_umax_i16_unaligned_release:6181; -O1: and w8, w0, #0xffff6182; -O1: cmp w8, w20, uxth6183; -O1: csel w8, w0, w20, hi6184; -O1: bl __atomic_compare_exchange6185 %r = atomicrmw umax ptr %ptr, i16 %value release, align 16186 ret i16 %r6187}6188 6189define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {6190; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:6191; -O0: and w10, w9, #0xffff6192; -O0: subs w10, w10, w8, uxth6193; -O0: csel w8, w9, w8, hi6194; -O0: bl __atomic_compare_exchange6195;6196; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:6197; -O1: and w8, w0, #0xffff6198; -O1: cmp w8, w20, uxth6199; -O1: csel w8, w0, w20, hi6200; -O1: bl __atomic_compare_exchange6201 %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 16202 ret i16 %r6203}6204 6205define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {6206; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:6207; -O0: and w10, w9, #0xffff6208; -O0: subs w10, w10, w8, uxth6209; -O0: csel w8, w9, w8, hi6210; -O0: bl __atomic_compare_exchange6211;6212; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:6213; -O1: and w8, w0, #0xffff6214; -O1: cmp w8, w20, uxth6215; -O1: csel w8, w0, w20, hi6216; -O1: bl __atomic_compare_exchange6217 %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 16218 ret i16 %r6219}6220 6221define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) {6222; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic:6223; -O0: subs w10, w9, w86224; -O0: csel w8, w9, w8, hi6225; -O0: bl __atomic_compare_exchange6226;6227; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic:6228; -O1: cmp w0, w206229; -O1: csel w8, w0, w20, hi6230; -O1: bl __atomic_compare_exchange6231 %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 16232 ret i32 %r6233}6234 6235define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) {6236; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire:6237; -O0: subs w10, w9, w86238; -O0: csel w8, w9, w8, hi6239; -O0: bl __atomic_compare_exchange6240;6241; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire:6242; -O1: cmp w0, w206243; -O1: csel w8, w0, w20, hi6244; -O1: bl __atomic_compare_exchange6245 %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 16246 ret i32 %r6247}6248 6249define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) {6250; -O0-LABEL: atomicrmw_umax_i32_unaligned_release:6251; -O0: subs w10, w9, w86252; -O0: csel w8, w9, w8, hi6253; -O0: bl __atomic_compare_exchange6254;6255; -O1-LABEL: atomicrmw_umax_i32_unaligned_release:6256; -O1: cmp w0, w206257; -O1: csel w8, w0, w20, hi6258; -O1: bl __atomic_compare_exchange6259 %r = atomicrmw umax ptr %ptr, i32 %value release, align 16260 ret i32 %r6261}6262 6263define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {6264; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:6265; -O0: subs w10, w9, w86266; -O0: csel w8, w9, w8, hi6267; -O0: bl __atomic_compare_exchange6268;6269; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:6270; -O1: cmp w0, w206271; -O1: csel w8, w0, w20, hi6272; -O1: bl __atomic_compare_exchange6273 %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 16274 ret i32 %r6275}6276 6277define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {6278; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:6279; -O0: subs w10, w9, w86280; -O0: csel w8, w9, w8, hi6281; -O0: bl __atomic_compare_exchange6282;6283; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:6284; -O1: cmp w0, w206285; -O1: csel w8, w0, w20, hi6286; -O1: bl __atomic_compare_exchange6287 %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 16288 ret i32 %r6289}6290 6291define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) {6292; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic:6293; -O0: subs x10, x9, x86294; -O0: csel x8, x9, x8, hi6295; -O0: bl __atomic_compare_exchange6296;6297; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic:6298; -O1: cmp x0, x206299; -O1: csel x8, x0, x20, hi6300; -O1: bl __atomic_compare_exchange6301 %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 16302 ret i64 %r6303}6304 6305define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) {6306; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire:6307; -O0: subs x10, x9, x86308; -O0: csel x8, x9, x8, hi6309; -O0: bl __atomic_compare_exchange6310;6311; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire:6312; -O1: cmp x0, x206313; -O1: csel x8, x0, x20, hi6314; -O1: bl __atomic_compare_exchange6315 %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 16316 ret i64 %r6317}6318 6319define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) {6320; -O0-LABEL: atomicrmw_umax_i64_unaligned_release:6321; -O0: subs x10, x9, x86322; -O0: csel x8, x9, x8, hi6323; -O0: bl __atomic_compare_exchange6324;6325; -O1-LABEL: atomicrmw_umax_i64_unaligned_release:6326; -O1: cmp x0, x206327; -O1: csel x8, x0, x20, hi6328; -O1: bl __atomic_compare_exchange6329 %r = atomicrmw umax ptr %ptr, i64 %value release, align 16330 ret i64 %r6331}6332 6333define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {6334; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:6335; -O0: subs x10, x9, x86336; -O0: csel x8, x9, x8, hi6337; -O0: bl __atomic_compare_exchange6338;6339; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:6340; -O1: cmp x0, x206341; -O1: csel x8, x0, x20, hi6342; -O1: bl __atomic_compare_exchange6343 %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 16344 ret i64 %r6345}6346 6347define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {6348; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:6349; -O0: subs x10, x9, x86350; -O0: csel x8, x9, x8, hi6351; -O0: bl __atomic_compare_exchange6352;6353; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:6354; -O1: cmp x0, x206355; -O1: csel x8, x0, x20, hi6356; -O1: bl __atomic_compare_exchange6357 %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 16358 ret i64 %r6359}6360 6361define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) {6362; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic:6363; -O0: subs x12, x9, x106364; -O0: csel x8, x11, x8, lo6365; -O0: csel x9, x10, x9, lo6366; -O0: bl __atomic_compare_exchange6367;6368; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic:6369; -O1: ldp x0, x1, [x0]6370; -O1: cmp x19, x16371; -O1: csel x8, x1, x19, lo6372; -O1: csel x9, x0, x21, lo6373; -O1: bl __atomic_compare_exchange6374 %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 16375 ret i128 %r6376}6377 6378define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) {6379; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire:6380; -O0: subs x12, x9, x106381; -O0: csel x8, x11, x8, lo6382; -O0: csel x9, x10, x9, lo6383; -O0: bl __atomic_compare_exchange6384;6385; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire:6386; -O1: ldp x0, x1, [x0]6387; -O1: cmp x19, x16388; -O1: csel x8, x1, x19, lo6389; -O1: csel x9, x0, x21, lo6390; -O1: bl __atomic_compare_exchange6391 %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 16392 ret i128 %r6393}6394 6395define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) {6396; -O0-LABEL: atomicrmw_umax_i128_unaligned_release:6397; -O0: subs x12, x9, x106398; -O0: csel x8, x11, x8, lo6399; -O0: csel x9, x10, x9, lo6400; -O0: bl __atomic_compare_exchange6401;6402; -O1-LABEL: atomicrmw_umax_i128_unaligned_release:6403; -O1: ldp x0, x1, [x0]6404; -O1: cmp x19, x16405; -O1: csel x8, x1, x19, lo6406; -O1: csel x9, x0, x21, lo6407; -O1: bl __atomic_compare_exchange6408 %r = atomicrmw umax ptr %ptr, i128 %value release, align 16409 ret i128 %r6410}6411 6412define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {6413; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:6414; -O0: subs x12, x9, x106415; -O0: csel x8, x11, x8, lo6416; -O0: csel x9, x10, x9, lo6417; -O0: bl __atomic_compare_exchange6418;6419; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:6420; -O1: ldp x0, x1, [x0]6421; -O1: cmp x19, x16422; -O1: csel x8, x1, x19, lo6423; -O1: csel x9, x0, x21, lo6424; -O1: bl __atomic_compare_exchange6425 %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 16426 ret i128 %r6427}6428 6429define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {6430; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:6431; -O0: subs x12, x9, x106432; -O0: csel x8, x11, x8, lo6433; -O0: csel x9, x10, x9, lo6434; -O0: bl __atomic_compare_exchange6435;6436; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:6437; -O1: ldp x0, x1, [x0]6438; -O1: cmp x19, x16439; -O1: csel x8, x1, x19, lo6440; -O1: csel x9, x0, x21, lo6441; -O1: bl __atomic_compare_exchange6442 %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 16443 ret i128 %r6444}6445 6446define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) {6447; -O0-LABEL: atomicrmw_umin_i8_aligned_monotonic:6448; -O0: and w9, w0, #0xff6449; -O0: subs w9, w9, w8, uxtb6450; -O0: csel w1, w0, w8, ls6451; -O0: bl __aarch64_cas1_relax6452; -O0: subs w8, w0, w86453;6454; -O1-LABEL: atomicrmw_umin_i8_aligned_monotonic:6455; -O1: and w9, w1, #0xff6456; -O1: ldxrb w8, [x0]6457; -O1: cmp w8, w96458; -O1: csel w10, w8, w9, ls6459; -O1: stxrb w11, w10, [x0]6460 %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 16461 ret i8 %r6462}6463 6464define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) {6465; -O0-LABEL: atomicrmw_umin_i8_aligned_acquire:6466; -O0: and w9, w0, #0xff6467; -O0: subs w9, w9, w8, uxtb6468; -O0: csel w1, w0, w8, ls6469; -O0: bl __aarch64_cas1_acq6470; -O0: subs w8, w0, w86471;6472; -O1-LABEL: atomicrmw_umin_i8_aligned_acquire:6473; -O1: and w9, w1, #0xff6474; -O1: ldaxrb w8, [x0]6475; -O1: cmp w8, w96476; -O1: csel w10, w8, w9, ls6477; -O1: stxrb w11, w10, [x0]6478 %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 16479 ret i8 %r6480}6481 6482define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) {6483; -O0-LABEL: atomicrmw_umin_i8_aligned_release:6484; -O0: and w9, w0, #0xff6485; -O0: subs w9, w9, w8, uxtb6486; -O0: csel w1, w0, w8, ls6487; -O0: bl __aarch64_cas1_rel6488; -O0: subs w8, w0, w86489;6490; -O1-LABEL: atomicrmw_umin_i8_aligned_release:6491; -O1: and w9, w1, #0xff6492; -O1: ldxrb w8, [x0]6493; -O1: cmp w8, w96494; -O1: csel w10, w8, w9, ls6495; -O1: stlxrb w11, w10, [x0]6496 %r = atomicrmw umin ptr %ptr, i8 %value release, align 16497 ret i8 %r6498}6499 6500define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) {6501; -O0-LABEL: atomicrmw_umin_i8_aligned_acq_rel:6502; -O0: and w9, w0, #0xff6503; -O0: subs w9, w9, w8, uxtb6504; -O0: csel w1, w0, w8, ls6505; -O0: bl __aarch64_cas1_acq_rel6506; -O0: subs w8, w0, w86507;6508; -O1-LABEL: atomicrmw_umin_i8_aligned_acq_rel:6509; -O1: and w9, w1, #0xff6510; -O1: ldaxrb w8, [x0]6511; -O1: cmp w8, w96512; -O1: csel w10, w8, w9, ls6513; -O1: stlxrb w11, w10, [x0]6514 %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 16515 ret i8 %r6516}6517 6518define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) {6519; -O0-LABEL: atomicrmw_umin_i8_aligned_seq_cst:6520; -O0: and w9, w0, #0xff6521; -O0: subs w9, w9, w8, uxtb6522; -O0: csel w1, w0, w8, ls6523; -O0: bl __aarch64_cas1_acq_rel6524; -O0: subs w8, w0, w86525;6526; -O1-LABEL: atomicrmw_umin_i8_aligned_seq_cst:6527; -O1: and w9, w1, #0xff6528; -O1: ldaxrb w8, [x0]6529; -O1: cmp w8, w96530; -O1: csel w10, w8, w9, ls6531; -O1: stlxrb w11, w10, [x0]6532 %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 16533 ret i8 %r6534}6535 6536define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) {6537; -O0-LABEL: atomicrmw_umin_i16_aligned_monotonic:6538; -O0: and w9, w0, #0xffff6539; -O0: subs w9, w9, w8, uxth6540; -O0: csel w1, w0, w8, ls6541; -O0: bl __aarch64_cas2_relax6542; -O0: subs w8, w0, w86543;6544; -O1-LABEL: atomicrmw_umin_i16_aligned_monotonic:6545; -O1: and w9, w1, #0xffff6546; -O1: ldxrh w8, [x0]6547; -O1: cmp w8, w96548; -O1: csel w10, w8, w9, ls6549; -O1: stxrh w11, w10, [x0]6550 %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 26551 ret i16 %r6552}6553 6554define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) {6555; -O0-LABEL: atomicrmw_umin_i16_aligned_acquire:6556; -O0: and w9, w0, #0xffff6557; -O0: subs w9, w9, w8, uxth6558; -O0: csel w1, w0, w8, ls6559; -O0: bl __aarch64_cas2_acq6560; -O0: subs w8, w0, w86561;6562; -O1-LABEL: atomicrmw_umin_i16_aligned_acquire:6563; -O1: and w9, w1, #0xffff6564; -O1: ldaxrh w8, [x0]6565; -O1: cmp w8, w96566; -O1: csel w10, w8, w9, ls6567; -O1: stxrh w11, w10, [x0]6568 %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 26569 ret i16 %r6570}6571 6572define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) {6573; -O0-LABEL: atomicrmw_umin_i16_aligned_release:6574; -O0: and w9, w0, #0xffff6575; -O0: subs w9, w9, w8, uxth6576; -O0: csel w1, w0, w8, ls6577; -O0: bl __aarch64_cas2_rel6578; -O0: subs w8, w0, w86579;6580; -O1-LABEL: atomicrmw_umin_i16_aligned_release:6581; -O1: and w9, w1, #0xffff6582; -O1: ldxrh w8, [x0]6583; -O1: cmp w8, w96584; -O1: csel w10, w8, w9, ls6585; -O1: stlxrh w11, w10, [x0]6586 %r = atomicrmw umin ptr %ptr, i16 %value release, align 26587 ret i16 %r6588}6589 6590define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) {6591; -O0-LABEL: atomicrmw_umin_i16_aligned_acq_rel:6592; -O0: and w9, w0, #0xffff6593; -O0: subs w9, w9, w8, uxth6594; -O0: csel w1, w0, w8, ls6595; -O0: bl __aarch64_cas2_acq_rel6596; -O0: subs w8, w0, w86597;6598; -O1-LABEL: atomicrmw_umin_i16_aligned_acq_rel:6599; -O1: and w9, w1, #0xffff6600; -O1: ldaxrh w8, [x0]6601; -O1: cmp w8, w96602; -O1: csel w10, w8, w9, ls6603; -O1: stlxrh w11, w10, [x0]6604 %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 26605 ret i16 %r6606}6607 6608define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) {6609; -O0-LABEL: atomicrmw_umin_i16_aligned_seq_cst:6610; -O0: and w9, w0, #0xffff6611; -O0: subs w9, w9, w8, uxth6612; -O0: csel w1, w0, w8, ls6613; -O0: bl __aarch64_cas2_acq_rel6614; -O0: subs w8, w0, w86615;6616; -O1-LABEL: atomicrmw_umin_i16_aligned_seq_cst:6617; -O1: and w9, w1, #0xffff6618; -O1: ldaxrh w8, [x0]6619; -O1: cmp w8, w96620; -O1: csel w10, w8, w9, ls6621; -O1: stlxrh w11, w10, [x0]6622 %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 26623 ret i16 %r6624}6625 6626define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) {6627; -O0-LABEL: atomicrmw_umin_i32_aligned_monotonic:6628; -O0: subs w9, w0, w86629; -O0: csel w1, w0, w8, ls6630; -O0: bl __aarch64_cas4_relax6631; -O0: subs w8, w0, w86632;6633; -O1-LABEL: atomicrmw_umin_i32_aligned_monotonic:6634; -O1: ldxr w8, [x0]6635; -O1: cmp w8, w16636; -O1: csel w9, w8, w1, ls6637; -O1: stxr w10, w9, [x0]6638 %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 46639 ret i32 %r6640}6641 6642define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) {6643; -O0-LABEL: atomicrmw_umin_i32_aligned_acquire:6644; -O0: subs w9, w0, w86645; -O0: csel w1, w0, w8, ls6646; -O0: bl __aarch64_cas4_acq6647; -O0: subs w8, w0, w86648;6649; -O1-LABEL: atomicrmw_umin_i32_aligned_acquire:6650; -O1: ldaxr w8, [x0]6651; -O1: cmp w8, w16652; -O1: csel w9, w8, w1, ls6653; -O1: stxr w10, w9, [x0]6654 %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 46655 ret i32 %r6656}6657 6658define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) {6659; -O0-LABEL: atomicrmw_umin_i32_aligned_release:6660; -O0: subs w9, w0, w86661; -O0: csel w1, w0, w8, ls6662; -O0: bl __aarch64_cas4_rel6663; -O0: subs w8, w0, w86664;6665; -O1-LABEL: atomicrmw_umin_i32_aligned_release:6666; -O1: ldxr w8, [x0]6667; -O1: cmp w8, w16668; -O1: csel w9, w8, w1, ls6669; -O1: stlxr w10, w9, [x0]6670 %r = atomicrmw umin ptr %ptr, i32 %value release, align 46671 ret i32 %r6672}6673 6674define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) {6675; -O0-LABEL: atomicrmw_umin_i32_aligned_acq_rel:6676; -O0: subs w9, w0, w86677; -O0: csel w1, w0, w8, ls6678; -O0: bl __aarch64_cas4_acq_rel6679; -O0: subs w8, w0, w86680;6681; -O1-LABEL: atomicrmw_umin_i32_aligned_acq_rel:6682; -O1: ldaxr w8, [x0]6683; -O1: cmp w8, w16684; -O1: csel w9, w8, w1, ls6685; -O1: stlxr w10, w9, [x0]6686 %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 46687 ret i32 %r6688}6689 6690define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) {6691; -O0-LABEL: atomicrmw_umin_i32_aligned_seq_cst:6692; -O0: subs w9, w0, w86693; -O0: csel w1, w0, w8, ls6694; -O0: bl __aarch64_cas4_acq_rel6695; -O0: subs w8, w0, w86696;6697; -O1-LABEL: atomicrmw_umin_i32_aligned_seq_cst:6698; -O1: ldaxr w8, [x0]6699; -O1: cmp w8, w16700; -O1: csel w9, w8, w1, ls6701; -O1: stlxr w10, w9, [x0]6702 %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 46703 ret i32 %r6704}6705 6706define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) {6707; -O0-LABEL: atomicrmw_umin_i64_aligned_monotonic:6708; -O0: subs x9, x0, x86709; -O0: csel x1, x0, x8, ls6710; -O0: bl __aarch64_cas8_relax6711; -O0: subs x8, x0, x86712;6713; -O1-LABEL: atomicrmw_umin_i64_aligned_monotonic:6714; -O1: ldxr x0, [x8]6715; -O1: cmp x0, x16716; -O1: csel x9, x0, x1, ls6717; -O1: stxr w10, x9, [x8]6718 %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 86719 ret i64 %r6720}6721 6722define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) {6723; -O0-LABEL: atomicrmw_umin_i64_aligned_acquire:6724; -O0: subs x9, x0, x86725; -O0: csel x1, x0, x8, ls6726; -O0: bl __aarch64_cas8_acq6727; -O0: subs x8, x0, x86728;6729; -O1-LABEL: atomicrmw_umin_i64_aligned_acquire:6730; -O1: ldaxr x0, [x8]6731; -O1: cmp x0, x16732; -O1: csel x9, x0, x1, ls6733; -O1: stxr w10, x9, [x8]6734 %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 86735 ret i64 %r6736}6737 6738define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) {6739; -O0-LABEL: atomicrmw_umin_i64_aligned_release:6740; -O0: subs x9, x0, x86741; -O0: csel x1, x0, x8, ls6742; -O0: bl __aarch64_cas8_rel6743; -O0: subs x8, x0, x86744;6745; -O1-LABEL: atomicrmw_umin_i64_aligned_release:6746; -O1: ldxr x0, [x8]6747; -O1: cmp x0, x16748; -O1: csel x9, x0, x1, ls6749; -O1: stlxr w10, x9, [x8]6750 %r = atomicrmw umin ptr %ptr, i64 %value release, align 86751 ret i64 %r6752}6753 6754define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) {6755; -O0-LABEL: atomicrmw_umin_i64_aligned_acq_rel:6756; -O0: subs x9, x0, x86757; -O0: csel x1, x0, x8, ls6758; -O0: bl __aarch64_cas8_acq_rel6759; -O0: subs x8, x0, x86760;6761; -O1-LABEL: atomicrmw_umin_i64_aligned_acq_rel:6762; -O1: ldaxr x0, [x8]6763; -O1: cmp x0, x16764; -O1: csel x9, x0, x1, ls6765; -O1: stlxr w10, x9, [x8]6766 %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 86767 ret i64 %r6768}6769 6770define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) {6771; -O0-LABEL: atomicrmw_umin_i64_aligned_seq_cst:6772; -O0: subs x9, x0, x86773; -O0: csel x1, x0, x8, ls6774; -O0: bl __aarch64_cas8_acq_rel6775; -O0: subs x8, x0, x86776;6777; -O1-LABEL: atomicrmw_umin_i64_aligned_seq_cst:6778; -O1: ldaxr x0, [x8]6779; -O1: cmp x0, x16780; -O1: csel x9, x0, x1, ls6781; -O1: stlxr w10, x9, [x8]6782 %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 86783 ret i64 %r6784}6785 6786define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) {6787; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic:6788; -O0: subs x10, x8, x16789; -O0: csel x2, x0, x9, hs6790; -O0: csel x3, x1, x8, hs6791; -O0: bl __aarch64_cas16_relax6792; -O0: subs x10, x10, x116793; -O0: ccmp x8, x9, #0, eq6794;6795; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic:6796; -O1: ldxp x1, x0, [x8]6797; -O1: cmp x3, x16798; -O1: csel x9, x0, x2, hs6799; -O1: csel x10, x1, x3, hs6800; -O1: stxp w11, x10, x9, [x8]6801 %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 166802 ret i128 %r6803}6804 6805define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) {6806; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire:6807; -O0: subs x10, x8, x16808; -O0: csel x2, x0, x9, hs6809; -O0: csel x3, x1, x8, hs6810; -O0: bl __aarch64_cas16_acq6811; -O0: subs x10, x10, x116812; -O0: ccmp x8, x9, #0, eq6813;6814; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire:6815; -O1: ldaxp x1, x0, [x8]6816; -O1: cmp x3, x16817; -O1: csel x9, x0, x2, hs6818; -O1: csel x10, x1, x3, hs6819; -O1: stxp w11, x10, x9, [x8]6820 %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 166821 ret i128 %r6822}6823 6824define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) {6825; -O0-LABEL: atomicrmw_umin_i128_aligned_release:6826; -O0: subs x10, x8, x16827; -O0: csel x2, x0, x9, hs6828; -O0: csel x3, x1, x8, hs6829; -O0: bl __aarch64_cas16_rel6830; -O0: subs x10, x10, x116831; -O0: ccmp x8, x9, #0, eq6832;6833; -O1-LABEL: atomicrmw_umin_i128_aligned_release:6834; -O1: ldxp x1, x0, [x8]6835; -O1: cmp x3, x16836; -O1: csel x9, x0, x2, hs6837; -O1: csel x10, x1, x3, hs6838; -O1: stlxp w11, x10, x9, [x8]6839 %r = atomicrmw umin ptr %ptr, i128 %value release, align 166840 ret i128 %r6841}6842 6843define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) {6844; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel:6845; -O0: subs x10, x8, x16846; -O0: csel x2, x0, x9, hs6847; -O0: csel x3, x1, x8, hs6848; -O0: bl __aarch64_cas16_acq_rel6849; -O0: subs x10, x10, x116850; -O0: ccmp x8, x9, #0, eq6851;6852; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel:6853; -O1: ldaxp x1, x0, [x8]6854; -O1: cmp x3, x16855; -O1: csel x9, x0, x2, hs6856; -O1: csel x10, x1, x3, hs6857; -O1: stlxp w11, x10, x9, [x8]6858 %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 166859 ret i128 %r6860}6861 6862define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) {6863; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst:6864; -O0: subs x10, x8, x16865; -O0: csel x2, x0, x9, hs6866; -O0: csel x3, x1, x8, hs6867; -O0: bl __aarch64_cas16_acq_rel6868; -O0: subs x10, x10, x116869; -O0: ccmp x8, x9, #0, eq6870;6871; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst:6872; -O1: ldaxp x1, x0, [x8]6873; -O1: cmp x3, x16874; -O1: csel x9, x0, x2, hs6875; -O1: csel x10, x1, x3, hs6876; -O1: stlxp w11, x10, x9, [x8]6877 %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 166878 ret i128 %r6879}6880 6881define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) {6882; -O0-LABEL: atomicrmw_umin_i8_unaligned_monotonic:6883; -O0: and w9, w0, #0xff6884; -O0: subs w9, w9, w8, uxtb6885; -O0: csel w1, w0, w8, ls6886; -O0: bl __aarch64_cas1_relax6887; -O0: subs w8, w0, w86888;6889; -O1-LABEL: atomicrmw_umin_i8_unaligned_monotonic:6890; -O1: and w9, w1, #0xff6891; -O1: ldxrb w8, [x0]6892; -O1: cmp w8, w96893; -O1: csel w10, w8, w9, ls6894; -O1: stxrb w11, w10, [x0]6895 %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 16896 ret i8 %r6897}6898 6899define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) {6900; -O0-LABEL: atomicrmw_umin_i8_unaligned_acquire:6901; -O0: and w9, w0, #0xff6902; -O0: subs w9, w9, w8, uxtb6903; -O0: csel w1, w0, w8, ls6904; -O0: bl __aarch64_cas1_acq6905; -O0: subs w8, w0, w86906;6907; -O1-LABEL: atomicrmw_umin_i8_unaligned_acquire:6908; -O1: and w9, w1, #0xff6909; -O1: ldaxrb w8, [x0]6910; -O1: cmp w8, w96911; -O1: csel w10, w8, w9, ls6912; -O1: stxrb w11, w10, [x0]6913 %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 16914 ret i8 %r6915}6916 6917define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) {6918; -O0-LABEL: atomicrmw_umin_i8_unaligned_release:6919; -O0: and w9, w0, #0xff6920; -O0: subs w9, w9, w8, uxtb6921; -O0: csel w1, w0, w8, ls6922; -O0: bl __aarch64_cas1_rel6923; -O0: subs w8, w0, w86924;6925; -O1-LABEL: atomicrmw_umin_i8_unaligned_release:6926; -O1: and w9, w1, #0xff6927; -O1: ldxrb w8, [x0]6928; -O1: cmp w8, w96929; -O1: csel w10, w8, w9, ls6930; -O1: stlxrb w11, w10, [x0]6931 %r = atomicrmw umin ptr %ptr, i8 %value release, align 16932 ret i8 %r6933}6934 6935define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {6936; -O0-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:6937; -O0: and w9, w0, #0xff6938; -O0: subs w9, w9, w8, uxtb6939; -O0: csel w1, w0, w8, ls6940; -O0: bl __aarch64_cas1_acq_rel6941; -O0: subs w8, w0, w86942;6943; -O1-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:6944; -O1: and w9, w1, #0xff6945; -O1: ldaxrb w8, [x0]6946; -O1: cmp w8, w96947; -O1: csel w10, w8, w9, ls6948; -O1: stlxrb w11, w10, [x0]6949 %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 16950 ret i8 %r6951}6952 6953define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {6954; -O0-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:6955; -O0: and w9, w0, #0xff6956; -O0: subs w9, w9, w8, uxtb6957; -O0: csel w1, w0, w8, ls6958; -O0: bl __aarch64_cas1_acq_rel6959; -O0: subs w8, w0, w86960;6961; -O1-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:6962; -O1: and w9, w1, #0xff6963; -O1: ldaxrb w8, [x0]6964; -O1: cmp w8, w96965; -O1: csel w10, w8, w9, ls6966; -O1: stlxrb w11, w10, [x0]6967 %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 16968 ret i8 %r6969}6970 6971define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) {6972; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic:6973; -O0: and w10, w9, #0xffff6974; -O0: subs w10, w10, w8, uxth6975; -O0: csel w8, w9, w8, ls6976; -O0: bl __atomic_compare_exchange6977;6978; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic:6979; -O1: and w8, w0, #0xffff6980; -O1: cmp w8, w20, uxth6981; -O1: csel w8, w0, w20, ls6982; -O1: bl __atomic_compare_exchange6983 %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 16984 ret i16 %r6985}6986 6987define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) {6988; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire:6989; -O0: and w10, w9, #0xffff6990; -O0: subs w10, w10, w8, uxth6991; -O0: csel w8, w9, w8, ls6992; -O0: bl __atomic_compare_exchange6993;6994; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire:6995; -O1: and w8, w0, #0xffff6996; -O1: cmp w8, w20, uxth6997; -O1: csel w8, w0, w20, ls6998; -O1: bl __atomic_compare_exchange6999 %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 17000 ret i16 %r7001}7002 7003define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) {7004; -O0-LABEL: atomicrmw_umin_i16_unaligned_release:7005; -O0: and w10, w9, #0xffff7006; -O0: subs w10, w10, w8, uxth7007; -O0: csel w8, w9, w8, ls7008; -O0: bl __atomic_compare_exchange7009;7010; -O1-LABEL: atomicrmw_umin_i16_unaligned_release:7011; -O1: and w8, w0, #0xffff7012; -O1: cmp w8, w20, uxth7013; -O1: csel w8, w0, w20, ls7014; -O1: bl __atomic_compare_exchange7015 %r = atomicrmw umin ptr %ptr, i16 %value release, align 17016 ret i16 %r7017}7018 7019define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {7020; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:7021; -O0: and w10, w9, #0xffff7022; -O0: subs w10, w10, w8, uxth7023; -O0: csel w8, w9, w8, ls7024; -O0: bl __atomic_compare_exchange7025;7026; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:7027; -O1: and w8, w0, #0xffff7028; -O1: cmp w8, w20, uxth7029; -O1: csel w8, w0, w20, ls7030; -O1: bl __atomic_compare_exchange7031 %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 17032 ret i16 %r7033}7034 7035define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {7036; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:7037; -O0: and w10, w9, #0xffff7038; -O0: subs w10, w10, w8, uxth7039; -O0: csel w8, w9, w8, ls7040; -O0: bl __atomic_compare_exchange7041;7042; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:7043; -O1: and w8, w0, #0xffff7044; -O1: cmp w8, w20, uxth7045; -O1: csel w8, w0, w20, ls7046; -O1: bl __atomic_compare_exchange7047 %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 17048 ret i16 %r7049}7050 7051define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) {7052; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic:7053; -O0: subs w10, w9, w87054; -O0: csel w8, w9, w8, ls7055; -O0: bl __atomic_compare_exchange7056;7057; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic:7058; -O1: cmp w0, w207059; -O1: csel w8, w0, w20, ls7060; -O1: bl __atomic_compare_exchange7061 %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 17062 ret i32 %r7063}7064 7065define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) {7066; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire:7067; -O0: subs w10, w9, w87068; -O0: csel w8, w9, w8, ls7069; -O0: bl __atomic_compare_exchange7070;7071; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire:7072; -O1: cmp w0, w207073; -O1: csel w8, w0, w20, ls7074; -O1: bl __atomic_compare_exchange7075 %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 17076 ret i32 %r7077}7078 7079define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) {7080; -O0-LABEL: atomicrmw_umin_i32_unaligned_release:7081; -O0: subs w10, w9, w87082; -O0: csel w8, w9, w8, ls7083; -O0: bl __atomic_compare_exchange7084;7085; -O1-LABEL: atomicrmw_umin_i32_unaligned_release:7086; -O1: cmp w0, w207087; -O1: csel w8, w0, w20, ls7088; -O1: bl __atomic_compare_exchange7089 %r = atomicrmw umin ptr %ptr, i32 %value release, align 17090 ret i32 %r7091}7092 7093define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {7094; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:7095; -O0: subs w10, w9, w87096; -O0: csel w8, w9, w8, ls7097; -O0: bl __atomic_compare_exchange7098;7099; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:7100; -O1: cmp w0, w207101; -O1: csel w8, w0, w20, ls7102; -O1: bl __atomic_compare_exchange7103 %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 17104 ret i32 %r7105}7106 7107define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {7108; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:7109; -O0: subs w10, w9, w87110; -O0: csel w8, w9, w8, ls7111; -O0: bl __atomic_compare_exchange7112;7113; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:7114; -O1: cmp w0, w207115; -O1: csel w8, w0, w20, ls7116; -O1: bl __atomic_compare_exchange7117 %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 17118 ret i32 %r7119}7120 7121define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) {7122; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic:7123; -O0: subs x10, x9, x87124; -O0: csel x8, x9, x8, ls7125; -O0: bl __atomic_compare_exchange7126;7127; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic:7128; -O1: cmp x0, x207129; -O1: csel x8, x0, x20, ls7130; -O1: bl __atomic_compare_exchange7131 %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 17132 ret i64 %r7133}7134 7135define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) {7136; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire:7137; -O0: subs x10, x9, x87138; -O0: csel x8, x9, x8, ls7139; -O0: bl __atomic_compare_exchange7140;7141; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire:7142; -O1: cmp x0, x207143; -O1: csel x8, x0, x20, ls7144; -O1: bl __atomic_compare_exchange7145 %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 17146 ret i64 %r7147}7148 7149define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) {7150; -O0-LABEL: atomicrmw_umin_i64_unaligned_release:7151; -O0: subs x10, x9, x87152; -O0: csel x8, x9, x8, ls7153; -O0: bl __atomic_compare_exchange7154;7155; -O1-LABEL: atomicrmw_umin_i64_unaligned_release:7156; -O1: cmp x0, x207157; -O1: csel x8, x0, x20, ls7158; -O1: bl __atomic_compare_exchange7159 %r = atomicrmw umin ptr %ptr, i64 %value release, align 17160 ret i64 %r7161}7162 7163define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {7164; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:7165; -O0: subs x10, x9, x87166; -O0: csel x8, x9, x8, ls7167; -O0: bl __atomic_compare_exchange7168;7169; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:7170; -O1: cmp x0, x207171; -O1: csel x8, x0, x20, ls7172; -O1: bl __atomic_compare_exchange7173 %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 17174 ret i64 %r7175}7176 7177define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {7178; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:7179; -O0: subs x10, x9, x87180; -O0: csel x8, x9, x8, ls7181; -O0: bl __atomic_compare_exchange7182;7183; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:7184; -O1: cmp x0, x207185; -O1: csel x8, x0, x20, ls7186; -O1: bl __atomic_compare_exchange7187 %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 17188 ret i64 %r7189}7190 7191define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) {7192; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic:7193; -O0: subs x12, x9, x107194; -O0: csel x8, x11, x8, hs7195; -O0: csel x9, x10, x9, hs7196; -O0: bl __atomic_compare_exchange7197;7198; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic:7199; -O1: ldp x0, x1, [x0]7200; -O1: cmp x19, x17201; -O1: csel x8, x1, x19, hs7202; -O1: csel x9, x0, x21, hs7203; -O1: bl __atomic_compare_exchange7204 %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 17205 ret i128 %r7206}7207 7208define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) {7209; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire:7210; -O0: subs x12, x9, x107211; -O0: csel x8, x11, x8, hs7212; -O0: csel x9, x10, x9, hs7213; -O0: bl __atomic_compare_exchange7214;7215; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire:7216; -O1: ldp x0, x1, [x0]7217; -O1: cmp x19, x17218; -O1: csel x8, x1, x19, hs7219; -O1: csel x9, x0, x21, hs7220; -O1: bl __atomic_compare_exchange7221 %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 17222 ret i128 %r7223}7224 7225define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) {7226; -O0-LABEL: atomicrmw_umin_i128_unaligned_release:7227; -O0: subs x12, x9, x107228; -O0: csel x8, x11, x8, hs7229; -O0: csel x9, x10, x9, hs7230; -O0: bl __atomic_compare_exchange7231;7232; -O1-LABEL: atomicrmw_umin_i128_unaligned_release:7233; -O1: ldp x0, x1, [x0]7234; -O1: cmp x19, x17235; -O1: csel x8, x1, x19, hs7236; -O1: csel x9, x0, x21, hs7237; -O1: bl __atomic_compare_exchange7238 %r = atomicrmw umin ptr %ptr, i128 %value release, align 17239 ret i128 %r7240}7241 7242define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {7243; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:7244; -O0: subs x12, x9, x107245; -O0: csel x8, x11, x8, hs7246; -O0: csel x9, x10, x9, hs7247; -O0: bl __atomic_compare_exchange7248;7249; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:7250; -O1: ldp x0, x1, [x0]7251; -O1: cmp x19, x17252; -O1: csel x8, x1, x19, hs7253; -O1: csel x9, x0, x21, hs7254; -O1: bl __atomic_compare_exchange7255 %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 17256 ret i128 %r7257}7258 7259define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {7260; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:7261; -O0: subs x12, x9, x107262; -O0: csel x8, x11, x8, hs7263; -O0: csel x9, x10, x9, hs7264; -O0: bl __atomic_compare_exchange7265;7266; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:7267; -O1: ldp x0, x1, [x0]7268; -O1: cmp x19, x17269; -O1: csel x8, x1, x19, hs7270; -O1: csel x9, x0, x21, hs7271; -O1: bl __atomic_compare_exchange7272 %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 17273 ret i128 %r7274}7275