6265 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=+v8.1a -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+v8.1a -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: swpb w1, w0, [x0]9 %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: swpab w1, w0, [x0]16 %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: swplb w1, w0, [x0]23 %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: swpalb w1, w0, [x0]30 %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: swpalb w1, w0, [x0]37 %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: swph w1, w0, [x0]44 %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: swpah w1, w0, [x0]51 %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: swplh w1, w0, [x0]58 %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: swpalh w1, w0, [x0]65 %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: swpalh w1, w0, [x0]72 %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: swp w1, w0, [x0]79 %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: swpa w1, w0, [x0]86 %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: swpl w1, w0, [x0]93 %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: swpal w1, w0, [x0]100 %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: swpal w1, w0, [x0]107 %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: swp x1, x0, [x0]114 %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: swpa x1, x0, [x0]121 %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: swpl x1, x0, [x0]128 %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: swpal x1, x0, [x0]135 %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: swpal x1, x0, [x0]142 %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: casp x0, x1, x2, x3, [x8]149; -O0: subs x11, x9, x11150; -O0: ccmp x8, x10, #0, eq151;152; -O1-LABEL: atomicrmw_xchg_i128_aligned_monotonic:153; -O1: ldp x4, x5, [x0]154; -O1: casp x4, x5, x2, x3, [x0]155; -O1: cmp x4, x6156; -O1: ccmp x5, x7, #0, eq157 %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 16158 ret i128 %r159}160 161define dso_local i128 @atomicrmw_xchg_i128_aligned_acquire(ptr %ptr, i128 %value) {162; -O0-LABEL: atomicrmw_xchg_i128_aligned_acquire:163; -O0: caspa x0, x1, x2, x3, [x8]164; -O0: subs x11, x9, x11165; -O0: ccmp x8, x10, #0, eq166;167; -O1-LABEL: atomicrmw_xchg_i128_aligned_acquire:168; -O1: ldp x4, x5, [x0]169; -O1: caspa x4, x5, x2, x3, [x0]170; -O1: cmp x4, x6171; -O1: ccmp x5, x7, #0, eq172 %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 16173 ret i128 %r174}175 176define dso_local i128 @atomicrmw_xchg_i128_aligned_release(ptr %ptr, i128 %value) {177; -O0-LABEL: atomicrmw_xchg_i128_aligned_release:178; -O0: caspl x0, x1, x2, x3, [x8]179; -O0: subs x11, x9, x11180; -O0: ccmp x8, x10, #0, eq181;182; -O1-LABEL: atomicrmw_xchg_i128_aligned_release:183; -O1: ldp x4, x5, [x0]184; -O1: caspl x4, x5, x2, x3, [x0]185; -O1: cmp x4, x6186; -O1: ccmp x5, x7, #0, eq187 %r = atomicrmw xchg ptr %ptr, i128 %value release, align 16188 ret i128 %r189}190 191define dso_local i128 @atomicrmw_xchg_i128_aligned_acq_rel(ptr %ptr, i128 %value) {192; -O0-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:193; -O0: caspal x0, x1, x2, x3, [x8]194; -O0: subs x11, x9, x11195; -O0: ccmp x8, x10, #0, eq196;197; -O1-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:198; -O1: ldp x4, x5, [x0]199; -O1: caspal x4, x5, x2, x3, [x0]200; -O1: cmp x4, x6201; -O1: ccmp x5, x7, #0, eq202 %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 16203 ret i128 %r204}205 206define dso_local i128 @atomicrmw_xchg_i128_aligned_seq_cst(ptr %ptr, i128 %value) {207; -O0-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:208; -O0: caspal x0, x1, x2, x3, [x8]209; -O0: subs x11, x9, x11210; -O0: ccmp x8, x10, #0, eq211;212; -O1-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:213; -O1: ldp x4, x5, [x0]214; -O1: caspal x4, x5, x2, x3, [x0]215; -O1: cmp x4, x6216; -O1: ccmp x5, x7, #0, eq217 %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 16218 ret i128 %r219}220 221define dso_local i8 @atomicrmw_xchg_i8_unaligned_monotonic(ptr %ptr, i8 %value) {222; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_monotonic:223; CHECK: swpb w1, w0, [x0]224 %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 1225 ret i8 %r226}227 228define dso_local i8 @atomicrmw_xchg_i8_unaligned_acquire(ptr %ptr, i8 %value) {229; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acquire:230; CHECK: swpab w1, w0, [x0]231 %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 1232 ret i8 %r233}234 235define dso_local i8 @atomicrmw_xchg_i8_unaligned_release(ptr %ptr, i8 %value) {236; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_release:237; CHECK: swplb w1, w0, [x0]238 %r = atomicrmw xchg ptr %ptr, i8 %value release, align 1239 ret i8 %r240}241 242define dso_local i8 @atomicrmw_xchg_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {243; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel:244; CHECK: swpalb w1, w0, [x0]245 %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 1246 ret i8 %r247}248 249define dso_local i8 @atomicrmw_xchg_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {250; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst:251; CHECK: swpalb w1, w0, [x0]252 %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 1253 ret i8 %r254}255 256define dso_local i16 @atomicrmw_xchg_i16_unaligned_monotonic(ptr %ptr, i16 %value) {257; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_monotonic:258; CHECK: bl __atomic_exchange259 %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 1260 ret i16 %r261}262 263define dso_local i16 @atomicrmw_xchg_i16_unaligned_acquire(ptr %ptr, i16 %value) {264; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acquire:265; CHECK: bl __atomic_exchange266 %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 1267 ret i16 %r268}269 270define dso_local i16 @atomicrmw_xchg_i16_unaligned_release(ptr %ptr, i16 %value) {271; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_release:272; CHECK: bl __atomic_exchange273 %r = atomicrmw xchg ptr %ptr, i16 %value release, align 1274 ret i16 %r275}276 277define dso_local i16 @atomicrmw_xchg_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {278; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acq_rel:279; CHECK: bl __atomic_exchange280 %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 1281 ret i16 %r282}283 284define dso_local i16 @atomicrmw_xchg_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {285; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_seq_cst:286; CHECK: bl __atomic_exchange287 %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 1288 ret i16 %r289}290 291define dso_local i32 @atomicrmw_xchg_i32_unaligned_monotonic(ptr %ptr, i32 %value) {292; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_monotonic:293; CHECK: bl __atomic_exchange294 %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 1295 ret i32 %r296}297 298define dso_local i32 @atomicrmw_xchg_i32_unaligned_acquire(ptr %ptr, i32 %value) {299; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acquire:300; CHECK: bl __atomic_exchange301 %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 1302 ret i32 %r303}304 305define dso_local i32 @atomicrmw_xchg_i32_unaligned_release(ptr %ptr, i32 %value) {306; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_release:307; CHECK: bl __atomic_exchange308 %r = atomicrmw xchg ptr %ptr, i32 %value release, align 1309 ret i32 %r310}311 312define dso_local i32 @atomicrmw_xchg_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {313; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acq_rel:314; CHECK: bl __atomic_exchange315 %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 1316 ret i32 %r317}318 319define dso_local i32 @atomicrmw_xchg_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {320; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_seq_cst:321; CHECK: bl __atomic_exchange322 %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 1323 ret i32 %r324}325 326define dso_local i64 @atomicrmw_xchg_i64_unaligned_monotonic(ptr %ptr, i64 %value) {327; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_monotonic:328; CHECK: bl __atomic_exchange329 %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 1330 ret i64 %r331}332 333define dso_local i64 @atomicrmw_xchg_i64_unaligned_acquire(ptr %ptr, i64 %value) {334; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acquire:335; CHECK: bl __atomic_exchange336 %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 1337 ret i64 %r338}339 340define dso_local i64 @atomicrmw_xchg_i64_unaligned_release(ptr %ptr, i64 %value) {341; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_release:342; CHECK: bl __atomic_exchange343 %r = atomicrmw xchg ptr %ptr, i64 %value release, align 1344 ret i64 %r345}346 347define dso_local i64 @atomicrmw_xchg_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {348; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acq_rel:349; CHECK: bl __atomic_exchange350 %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 1351 ret i64 %r352}353 354define dso_local i64 @atomicrmw_xchg_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {355; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_seq_cst:356; CHECK: bl __atomic_exchange357 %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 1358 ret i64 %r359}360 361define dso_local i128 @atomicrmw_xchg_i128_unaligned_monotonic(ptr %ptr, i128 %value) {362; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_monotonic:363; CHECK: bl __atomic_exchange364 %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 1365 ret i128 %r366}367 368define dso_local i128 @atomicrmw_xchg_i128_unaligned_acquire(ptr %ptr, i128 %value) {369; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acquire:370; CHECK: bl __atomic_exchange371 %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 1372 ret i128 %r373}374 375define dso_local i128 @atomicrmw_xchg_i128_unaligned_release(ptr %ptr, i128 %value) {376; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_release:377; CHECK: bl __atomic_exchange378 %r = atomicrmw xchg ptr %ptr, i128 %value release, align 1379 ret i128 %r380}381 382define dso_local i128 @atomicrmw_xchg_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {383; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acq_rel:384; CHECK: bl __atomic_exchange385 %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 1386 ret i128 %r387}388 389define dso_local i128 @atomicrmw_xchg_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {390; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_seq_cst:391; CHECK: bl __atomic_exchange392 %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 1393 ret i128 %r394}395 396define dso_local i8 @atomicrmw_add_i8_aligned_monotonic(ptr %ptr, i8 %value) {397; CHECK-LABEL: atomicrmw_add_i8_aligned_monotonic:398; CHECK: ldaddb w1, w0, [x0]399 %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1400 ret i8 %r401}402 403define dso_local i8 @atomicrmw_add_i8_aligned_acquire(ptr %ptr, i8 %value) {404; CHECK-LABEL: atomicrmw_add_i8_aligned_acquire:405; CHECK: ldaddab w1, w0, [x0]406 %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1407 ret i8 %r408}409 410define dso_local i8 @atomicrmw_add_i8_aligned_release(ptr %ptr, i8 %value) {411; CHECK-LABEL: atomicrmw_add_i8_aligned_release:412; CHECK: ldaddlb w1, w0, [x0]413 %r = atomicrmw add ptr %ptr, i8 %value release, align 1414 ret i8 %r415}416 417define dso_local i8 @atomicrmw_add_i8_aligned_acq_rel(ptr %ptr, i8 %value) {418; CHECK-LABEL: atomicrmw_add_i8_aligned_acq_rel:419; CHECK: ldaddalb w1, w0, [x0]420 %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1421 ret i8 %r422}423 424define dso_local i8 @atomicrmw_add_i8_aligned_seq_cst(ptr %ptr, i8 %value) {425; CHECK-LABEL: atomicrmw_add_i8_aligned_seq_cst:426; CHECK: ldaddalb w1, w0, [x0]427 %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1428 ret i8 %r429}430 431define dso_local i16 @atomicrmw_add_i16_aligned_monotonic(ptr %ptr, i16 %value) {432; CHECK-LABEL: atomicrmw_add_i16_aligned_monotonic:433; CHECK: ldaddh w1, w0, [x0]434 %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 2435 ret i16 %r436}437 438define dso_local i16 @atomicrmw_add_i16_aligned_acquire(ptr %ptr, i16 %value) {439; CHECK-LABEL: atomicrmw_add_i16_aligned_acquire:440; CHECK: ldaddah w1, w0, [x0]441 %r = atomicrmw add ptr %ptr, i16 %value acquire, align 2442 ret i16 %r443}444 445define dso_local i16 @atomicrmw_add_i16_aligned_release(ptr %ptr, i16 %value) {446; CHECK-LABEL: atomicrmw_add_i16_aligned_release:447; CHECK: ldaddlh w1, w0, [x0]448 %r = atomicrmw add ptr %ptr, i16 %value release, align 2449 ret i16 %r450}451 452define dso_local i16 @atomicrmw_add_i16_aligned_acq_rel(ptr %ptr, i16 %value) {453; CHECK-LABEL: atomicrmw_add_i16_aligned_acq_rel:454; CHECK: ldaddalh w1, w0, [x0]455 %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 2456 ret i16 %r457}458 459define dso_local i16 @atomicrmw_add_i16_aligned_seq_cst(ptr %ptr, i16 %value) {460; CHECK-LABEL: atomicrmw_add_i16_aligned_seq_cst:461; CHECK: ldaddalh w1, w0, [x0]462 %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 2463 ret i16 %r464}465 466define dso_local i32 @atomicrmw_add_i32_aligned_monotonic(ptr %ptr, i32 %value) {467; CHECK-LABEL: atomicrmw_add_i32_aligned_monotonic:468; CHECK: ldadd w1, w0, [x0]469 %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 4470 ret i32 %r471}472 473define dso_local i32 @atomicrmw_add_i32_aligned_acquire(ptr %ptr, i32 %value) {474; CHECK-LABEL: atomicrmw_add_i32_aligned_acquire:475; CHECK: ldadda w1, w0, [x0]476 %r = atomicrmw add ptr %ptr, i32 %value acquire, align 4477 ret i32 %r478}479 480define dso_local i32 @atomicrmw_add_i32_aligned_release(ptr %ptr, i32 %value) {481; CHECK-LABEL: atomicrmw_add_i32_aligned_release:482; CHECK: ldaddl w1, w0, [x0]483 %r = atomicrmw add ptr %ptr, i32 %value release, align 4484 ret i32 %r485}486 487define dso_local i32 @atomicrmw_add_i32_aligned_acq_rel(ptr %ptr, i32 %value) {488; CHECK-LABEL: atomicrmw_add_i32_aligned_acq_rel:489; CHECK: ldaddal w1, w0, [x0]490 %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 4491 ret i32 %r492}493 494define dso_local i32 @atomicrmw_add_i32_aligned_seq_cst(ptr %ptr, i32 %value) {495; CHECK-LABEL: atomicrmw_add_i32_aligned_seq_cst:496; CHECK: ldaddal w1, w0, [x0]497 %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 4498 ret i32 %r499}500 501define dso_local i64 @atomicrmw_add_i64_aligned_monotonic(ptr %ptr, i64 %value) {502; CHECK-LABEL: atomicrmw_add_i64_aligned_monotonic:503; CHECK: ldadd x1, x0, [x0]504 %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 8505 ret i64 %r506}507 508define dso_local i64 @atomicrmw_add_i64_aligned_acquire(ptr %ptr, i64 %value) {509; CHECK-LABEL: atomicrmw_add_i64_aligned_acquire:510; CHECK: ldadda x1, x0, [x0]511 %r = atomicrmw add ptr %ptr, i64 %value acquire, align 8512 ret i64 %r513}514 515define dso_local i64 @atomicrmw_add_i64_aligned_release(ptr %ptr, i64 %value) {516; CHECK-LABEL: atomicrmw_add_i64_aligned_release:517; CHECK: ldaddl x1, x0, [x0]518 %r = atomicrmw add ptr %ptr, i64 %value release, align 8519 ret i64 %r520}521 522define dso_local i64 @atomicrmw_add_i64_aligned_acq_rel(ptr %ptr, i64 %value) {523; CHECK-LABEL: atomicrmw_add_i64_aligned_acq_rel:524; CHECK: ldaddal x1, x0, [x0]525 %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 8526 ret i64 %r527}528 529define dso_local i64 @atomicrmw_add_i64_aligned_seq_cst(ptr %ptr, i64 %value) {530; CHECK-LABEL: atomicrmw_add_i64_aligned_seq_cst:531; CHECK: ldaddal x1, x0, [x0]532 %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 8533 ret i64 %r534}535 536define dso_local i128 @atomicrmw_add_i128_aligned_monotonic(ptr %ptr, i128 %value) {537; -O0-LABEL: atomicrmw_add_i128_aligned_monotonic:538; -O0: adds x9, x10, x9539; -O0: casp x0, x1, x2, x3, [x8]540; -O0: subs x11, x9, x11541; -O0: ccmp x8, x10, #0, eq542;543; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic:544; -O1: ldp x4, x5, [x0]545; -O1: adds x9, x7, x3546; -O1: casp x4, x5, x8, x9, [x0]547; -O1: cmp x4, x6548; -O1: ccmp x5, x7, #0, eq549 %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16550 ret i128 %r551}552 553define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) {554; -O0-LABEL: atomicrmw_add_i128_aligned_acquire:555; -O0: adds x9, x10, x9556; -O0: caspa x0, x1, x2, x3, [x8]557; -O0: subs x11, x9, x11558; -O0: ccmp x8, x10, #0, eq559;560; -O1-LABEL: atomicrmw_add_i128_aligned_acquire:561; -O1: ldp x4, x5, [x0]562; -O1: adds x9, x7, x3563; -O1: caspa x4, x5, x8, x9, [x0]564; -O1: cmp x4, x6565; -O1: ccmp x5, x7, #0, eq566 %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16567 ret i128 %r568}569 570define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) {571; -O0-LABEL: atomicrmw_add_i128_aligned_release:572; -O0: adds x9, x10, x9573; -O0: caspl x0, x1, x2, x3, [x8]574; -O0: subs x11, x9, x11575; -O0: ccmp x8, x10, #0, eq576;577; -O1-LABEL: atomicrmw_add_i128_aligned_release:578; -O1: ldp x4, x5, [x0]579; -O1: adds x9, x7, x3580; -O1: caspl x4, x5, x8, x9, [x0]581; -O1: cmp x4, x6582; -O1: ccmp x5, x7, #0, eq583 %r = atomicrmw add ptr %ptr, i128 %value release, align 16584 ret i128 %r585}586 587define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) {588; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel:589; -O0: adds x9, x10, x9590; -O0: caspal x0, x1, x2, x3, [x8]591; -O0: subs x11, x9, x11592; -O0: ccmp x8, x10, #0, eq593;594; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel:595; -O1: ldp x4, x5, [x0]596; -O1: adds x9, x7, x3597; -O1: caspal x4, x5, x8, x9, [x0]598; -O1: cmp x4, x6599; -O1: ccmp x5, x7, #0, eq600 %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 16601 ret i128 %r602}603 604define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) {605; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst:606; -O0: adds x9, x10, x9607; -O0: caspal x0, x1, x2, x3, [x8]608; -O0: subs x11, x9, x11609; -O0: ccmp x8, x10, #0, eq610;611; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst:612; -O1: ldp x4, x5, [x0]613; -O1: adds x9, x7, x3614; -O1: caspal x4, x5, x8, x9, [x0]615; -O1: cmp x4, x6616; -O1: ccmp x5, x7, #0, eq617 %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 16618 ret i128 %r619}620 621define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) {622; CHECK-LABEL: atomicrmw_add_i8_unaligned_monotonic:623; CHECK: ldaddb w1, w0, [x0]624 %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1625 ret i8 %r626}627 628define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) {629; CHECK-LABEL: atomicrmw_add_i8_unaligned_acquire:630; CHECK: ldaddab w1, w0, [x0]631 %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1632 ret i8 %r633}634 635define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) {636; CHECK-LABEL: atomicrmw_add_i8_unaligned_release:637; CHECK: ldaddlb w1, w0, [x0]638 %r = atomicrmw add ptr %ptr, i8 %value release, align 1639 ret i8 %r640}641 642define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {643; CHECK-LABEL: atomicrmw_add_i8_unaligned_acq_rel:644; CHECK: ldaddalb w1, w0, [x0]645 %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1646 ret i8 %r647}648 649define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {650; CHECK-LABEL: atomicrmw_add_i8_unaligned_seq_cst:651; CHECK: ldaddalb w1, w0, [x0]652 %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1653 ret i8 %r654}655 656define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) {657; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic:658; -O0: add w8, w9, w8659; -O0: bl __atomic_compare_exchange660;661; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic:662; -O1: add w8, w0, w20663; -O1: bl __atomic_compare_exchange664 %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 1665 ret i16 %r666}667 668define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) {669; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire:670; -O0: add w8, w9, w8671; -O0: bl __atomic_compare_exchange672;673; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire:674; -O1: add w8, w0, w20675; -O1: bl __atomic_compare_exchange676 %r = atomicrmw add ptr %ptr, i16 %value acquire, align 1677 ret i16 %r678}679 680define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) {681; -O0-LABEL: atomicrmw_add_i16_unaligned_release:682; -O0: add w8, w9, w8683; -O0: bl __atomic_compare_exchange684;685; -O1-LABEL: atomicrmw_add_i16_unaligned_release:686; -O1: add w8, w0, w20687; -O1: bl __atomic_compare_exchange688 %r = atomicrmw add ptr %ptr, i16 %value release, align 1689 ret i16 %r690}691 692define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {693; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel:694; -O0: add w8, w9, w8695; -O0: bl __atomic_compare_exchange696;697; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel:698; -O1: add w8, w0, w20699; -O1: bl __atomic_compare_exchange700 %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 1701 ret i16 %r702}703 704define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {705; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst:706; -O0: add w8, w9, w8707; -O0: bl __atomic_compare_exchange708;709; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst:710; -O1: add w8, w0, w20711; -O1: bl __atomic_compare_exchange712 %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 1713 ret i16 %r714}715 716define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) {717; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic:718; -O0: add w8, w9, w8719; -O0: bl __atomic_compare_exchange720;721; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic:722; -O1: add w8, w0, w20723; -O1: bl __atomic_compare_exchange724 %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 1725 ret i32 %r726}727 728define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) {729; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire:730; -O0: add w8, w9, w8731; -O0: bl __atomic_compare_exchange732;733; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire:734; -O1: add w8, w0, w20735; -O1: bl __atomic_compare_exchange736 %r = atomicrmw add ptr %ptr, i32 %value acquire, align 1737 ret i32 %r738}739 740define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) {741; -O0-LABEL: atomicrmw_add_i32_unaligned_release:742; -O0: add w8, w9, w8743; -O0: bl __atomic_compare_exchange744;745; -O1-LABEL: atomicrmw_add_i32_unaligned_release:746; -O1: add w8, w0, w20747; -O1: bl __atomic_compare_exchange748 %r = atomicrmw add ptr %ptr, i32 %value release, align 1749 ret i32 %r750}751 752define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {753; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel:754; -O0: add w8, w9, w8755; -O0: bl __atomic_compare_exchange756;757; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel:758; -O1: add w8, w0, w20759; -O1: bl __atomic_compare_exchange760 %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 1761 ret i32 %r762}763 764define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {765; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst:766; -O0: add w8, w9, w8767; -O0: bl __atomic_compare_exchange768;769; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst:770; -O1: add w8, w0, w20771; -O1: bl __atomic_compare_exchange772 %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 1773 ret i32 %r774}775 776define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) {777; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic:778; -O0: add x8, x9, x8779; -O0: bl __atomic_compare_exchange780;781; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic:782; -O1: add x8, x0, x20783; -O1: bl __atomic_compare_exchange784 %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 1785 ret i64 %r786}787 788define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) {789; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire:790; -O0: add x8, x9, x8791; -O0: bl __atomic_compare_exchange792;793; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire:794; -O1: add x8, x0, x20795; -O1: bl __atomic_compare_exchange796 %r = atomicrmw add ptr %ptr, i64 %value acquire, align 1797 ret i64 %r798}799 800define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) {801; -O0-LABEL: atomicrmw_add_i64_unaligned_release:802; -O0: add x8, x9, x8803; -O0: bl __atomic_compare_exchange804;805; -O1-LABEL: atomicrmw_add_i64_unaligned_release:806; -O1: add x8, x0, x20807; -O1: bl __atomic_compare_exchange808 %r = atomicrmw add ptr %ptr, i64 %value release, align 1809 ret i64 %r810}811 812define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {813; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel:814; -O0: add x8, x9, x8815; -O0: bl __atomic_compare_exchange816;817; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel:818; -O1: add x8, x0, x20819; -O1: bl __atomic_compare_exchange820 %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 1821 ret i64 %r822}823 824define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {825; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst:826; -O0: add x8, x9, x8827; -O0: bl __atomic_compare_exchange828;829; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst:830; -O1: add x8, x0, x20831; -O1: bl __atomic_compare_exchange832 %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 1833 ret i64 %r834}835 836define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) {837; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic:838; -O0: adds x9, x10, x9839; -O0: bl __atomic_compare_exchange840;841; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic:842; -O1: ldp x0, x1, [x0]843; -O1: adds x8, x1, x19844; -O1: bl __atomic_compare_exchange845 %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 1846 ret i128 %r847}848 849define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) {850; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire:851; -O0: adds x9, x10, x9852; -O0: bl __atomic_compare_exchange853;854; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire:855; -O1: ldp x0, x1, [x0]856; -O1: adds x8, x1, x19857; -O1: bl __atomic_compare_exchange858 %r = atomicrmw add ptr %ptr, i128 %value acquire, align 1859 ret i128 %r860}861 862define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) {863; -O0-LABEL: atomicrmw_add_i128_unaligned_release:864; -O0: adds x9, x10, x9865; -O0: bl __atomic_compare_exchange866;867; -O1-LABEL: atomicrmw_add_i128_unaligned_release:868; -O1: ldp x0, x1, [x0]869; -O1: adds x8, x1, x19870; -O1: bl __atomic_compare_exchange871 %r = atomicrmw add ptr %ptr, i128 %value release, align 1872 ret i128 %r873}874 875define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {876; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel:877; -O0: adds x9, x10, x9878; -O0: bl __atomic_compare_exchange879;880; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel:881; -O1: ldp x0, x1, [x0]882; -O1: adds x8, x1, x19883; -O1: bl __atomic_compare_exchange884 %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 1885 ret i128 %r886}887 888define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {889; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst:890; -O0: adds x9, x10, x9891; -O0: bl __atomic_compare_exchange892;893; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst:894; -O1: ldp x0, x1, [x0]895; -O1: adds x8, x1, x19896; -O1: bl __atomic_compare_exchange897 %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 1898 ret i128 %r899}900 901define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) {902; -O0-LABEL: atomicrmw_sub_i8_aligned_monotonic:903; -O0: subs w8, w8, w1904; -O0: ldaddb w8, w0, [x0]905;906; -O1-LABEL: atomicrmw_sub_i8_aligned_monotonic:907; -O1: ldaddb w8, w0, [x0]908 %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1909 ret i8 %r910}911 912define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) {913; -O0-LABEL: atomicrmw_sub_i8_aligned_acquire:914; -O0: subs w8, w8, w1915; -O0: ldaddab w8, w0, [x0]916;917; -O1-LABEL: atomicrmw_sub_i8_aligned_acquire:918; -O1: ldaddab w8, w0, [x0]919 %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1920 ret i8 %r921}922 923define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) {924; -O0-LABEL: atomicrmw_sub_i8_aligned_release:925; -O0: subs w8, w8, w1926; -O0: ldaddlb w8, w0, [x0]927;928; -O1-LABEL: atomicrmw_sub_i8_aligned_release:929; -O1: ldaddlb w8, w0, [x0]930 %r = atomicrmw sub ptr %ptr, i8 %value release, align 1931 ret i8 %r932}933 934define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) {935; -O0-LABEL: atomicrmw_sub_i8_aligned_acq_rel:936; -O0: subs w8, w8, w1937; -O0: ldaddalb w8, w0, [x0]938;939; -O1-LABEL: atomicrmw_sub_i8_aligned_acq_rel:940; -O1: ldaddalb w8, w0, [x0]941 %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1942 ret i8 %r943}944 945define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) {946; -O0-LABEL: atomicrmw_sub_i8_aligned_seq_cst:947; -O0: subs w8, w8, w1948; -O0: ldaddalb w8, w0, [x0]949;950; -O1-LABEL: atomicrmw_sub_i8_aligned_seq_cst:951; -O1: ldaddalb w8, w0, [x0]952 %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 1953 ret i8 %r954}955 956define dso_local i16 @atomicrmw_sub_i16_aligned_monotonic(ptr %ptr, i16 %value) {957; -O0-LABEL: atomicrmw_sub_i16_aligned_monotonic:958; -O0: subs w8, w8, w1959; -O0: ldaddh w8, w0, [x0]960;961; -O1-LABEL: atomicrmw_sub_i16_aligned_monotonic:962; -O1: ldaddh w8, w0, [x0]963 %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 2964 ret i16 %r965}966 967define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) {968; -O0-LABEL: atomicrmw_sub_i16_aligned_acquire:969; -O0: subs w8, w8, w1970; -O0: ldaddah w8, w0, [x0]971;972; -O1-LABEL: atomicrmw_sub_i16_aligned_acquire:973; -O1: ldaddah w8, w0, [x0]974 %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 2975 ret i16 %r976}977 978define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) {979; -O0-LABEL: atomicrmw_sub_i16_aligned_release:980; -O0: subs w8, w8, w1981; -O0: ldaddlh w8, w0, [x0]982;983; -O1-LABEL: atomicrmw_sub_i16_aligned_release:984; -O1: ldaddlh w8, w0, [x0]985 %r = atomicrmw sub ptr %ptr, i16 %value release, align 2986 ret i16 %r987}988 989define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) {990; -O0-LABEL: atomicrmw_sub_i16_aligned_acq_rel:991; -O0: subs w8, w8, w1992; -O0: ldaddalh w8, w0, [x0]993;994; -O1-LABEL: atomicrmw_sub_i16_aligned_acq_rel:995; -O1: ldaddalh w8, w0, [x0]996 %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 2997 ret i16 %r998}999 1000define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1001; -O0-LABEL: atomicrmw_sub_i16_aligned_seq_cst:1002; -O0: subs w8, w8, w11003; -O0: ldaddalh w8, w0, [x0]1004;1005; -O1-LABEL: atomicrmw_sub_i16_aligned_seq_cst:1006; -O1: ldaddalh w8, w0, [x0]1007 %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 21008 ret i16 %r1009}1010 1011define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) {1012; -O0-LABEL: atomicrmw_sub_i32_aligned_monotonic:1013; -O0: subs w8, w8, w11014; -O0: ldadd w8, w0, [x0]1015;1016; -O1-LABEL: atomicrmw_sub_i32_aligned_monotonic:1017; -O1: ldadd w8, w0, [x0]1018 %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 41019 ret i32 %r1020}1021 1022define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) {1023; -O0-LABEL: atomicrmw_sub_i32_aligned_acquire:1024; -O0: subs w8, w8, w11025; -O0: ldadda w8, w0, [x0]1026;1027; -O1-LABEL: atomicrmw_sub_i32_aligned_acquire:1028; -O1: ldadda w8, w0, [x0]1029 %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 41030 ret i32 %r1031}1032 1033define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) {1034; -O0-LABEL: atomicrmw_sub_i32_aligned_release:1035; -O0: subs w8, w8, w11036; -O0: ldaddl w8, w0, [x0]1037;1038; -O1-LABEL: atomicrmw_sub_i32_aligned_release:1039; -O1: ldaddl w8, w0, [x0]1040 %r = atomicrmw sub ptr %ptr, i32 %value release, align 41041 ret i32 %r1042}1043 1044define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1045; -O0-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1046; -O0: subs w8, w8, w11047; -O0: ldaddal w8, w0, [x0]1048;1049; -O1-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1050; -O1: ldaddal w8, w0, [x0]1051 %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 41052 ret i32 %r1053}1054 1055define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1056; -O0-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1057; -O0: subs w8, w8, w11058; -O0: ldaddal w8, w0, [x0]1059;1060; -O1-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1061; -O1: ldaddal w8, w0, [x0]1062 %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 41063 ret i32 %r1064}1065 1066define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) {1067; -O0-LABEL: atomicrmw_sub_i64_aligned_monotonic:1068; -O0: subs x8, x8, x11069; -O0: ldadd x8, x0, [x0]1070;1071; -O1-LABEL: atomicrmw_sub_i64_aligned_monotonic:1072; -O1: ldadd x8, x0, [x0]1073 %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 81074 ret i64 %r1075}1076 1077define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) {1078; -O0-LABEL: atomicrmw_sub_i64_aligned_acquire:1079; -O0: subs x8, x8, x11080; -O0: ldadda x8, x0, [x0]1081;1082; -O1-LABEL: atomicrmw_sub_i64_aligned_acquire:1083; -O1: ldadda x8, x0, [x0]1084 %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 81085 ret i64 %r1086}1087 1088define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) {1089; -O0-LABEL: atomicrmw_sub_i64_aligned_release:1090; -O0: subs x8, x8, x11091; -O0: ldaddl x8, x0, [x0]1092;1093; -O1-LABEL: atomicrmw_sub_i64_aligned_release:1094; -O1: ldaddl x8, x0, [x0]1095 %r = atomicrmw sub ptr %ptr, i64 %value release, align 81096 ret i64 %r1097}1098 1099define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1100; -O0-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1101; -O0: subs x8, x8, x11102; -O0: ldaddal x8, x0, [x0]1103;1104; -O1-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1105; -O1: ldaddal x8, x0, [x0]1106 %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 81107 ret i64 %r1108}1109 1110define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1111; -O0-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1112; -O0: subs x8, x8, x11113; -O0: ldaddal x8, x0, [x0]1114;1115; -O1-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1116; -O1: ldaddal x8, x0, [x0]1117 %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 81118 ret i64 %r1119}1120 1121define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) {1122; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic:1123; -O0: subs x9, x10, x91124; -O0: casp x0, x1, x2, x3, [x8]1125; -O0: subs x11, x9, x111126; -O0: ccmp x8, x10, #0, eq1127;1128; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic:1129; -O1: ldp x4, x5, [x0]1130; -O1: subs x9, x7, x31131; -O1: casp x4, x5, x8, x9, [x0]1132; -O1: cmp x4, x61133; -O1: ccmp x5, x7, #0, eq1134 %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 161135 ret i128 %r1136}1137 1138define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) {1139; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire:1140; -O0: subs x9, x10, x91141; -O0: caspa x0, x1, x2, x3, [x8]1142; -O0: subs x11, x9, x111143; -O0: ccmp x8, x10, #0, eq1144;1145; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire:1146; -O1: ldp x4, x5, [x0]1147; -O1: subs x9, x7, x31148; -O1: caspa x4, x5, x8, x9, [x0]1149; -O1: cmp x4, x61150; -O1: ccmp x5, x7, #0, eq1151 %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 161152 ret i128 %r1153}1154 1155define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) {1156; -O0-LABEL: atomicrmw_sub_i128_aligned_release:1157; -O0: subs x9, x10, x91158; -O0: caspl x0, x1, x2, x3, [x8]1159; -O0: subs x11, x9, x111160; -O0: ccmp x8, x10, #0, eq1161;1162; -O1-LABEL: atomicrmw_sub_i128_aligned_release:1163; -O1: ldp x4, x5, [x0]1164; -O1: subs x9, x7, x31165; -O1: caspl x4, x5, x8, x9, [x0]1166; -O1: cmp x4, x61167; -O1: ccmp x5, x7, #0, eq1168 %r = atomicrmw sub ptr %ptr, i128 %value release, align 161169 ret i128 %r1170}1171 1172define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1173; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1174; -O0: subs x9, x10, x91175; -O0: caspal x0, x1, x2, x3, [x8]1176; -O0: subs x11, x9, x111177; -O0: ccmp x8, x10, #0, eq1178;1179; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1180; -O1: ldp x4, x5, [x0]1181; -O1: subs x9, x7, x31182; -O1: caspal x4, x5, x8, x9, [x0]1183; -O1: cmp x4, x61184; -O1: ccmp x5, x7, #0, eq1185 %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 161186 ret i128 %r1187}1188 1189define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1190; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1191; -O0: subs x9, x10, x91192; -O0: caspal x0, x1, x2, x3, [x8]1193; -O0: subs x11, x9, x111194; -O0: ccmp x8, x10, #0, eq1195;1196; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1197; -O1: ldp x4, x5, [x0]1198; -O1: subs x9, x7, x31199; -O1: caspal x4, x5, x8, x9, [x0]1200; -O1: cmp x4, x61201; -O1: ccmp x5, x7, #0, eq1202 %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 161203 ret i128 %r1204}1205 1206define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1207; -O0-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1208; -O0: subs w8, w8, w11209; -O0: ldaddb w8, w0, [x0]1210;1211; -O1-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1212; -O1: ldaddb w8, w0, [x0]1213 %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11214 ret i8 %r1215}1216 1217define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) {1218; -O0-LABEL: atomicrmw_sub_i8_unaligned_acquire:1219; -O0: subs w8, w8, w11220; -O0: ldaddab w8, w0, [x0]1221;1222; -O1-LABEL: atomicrmw_sub_i8_unaligned_acquire:1223; -O1: ldaddab w8, w0, [x0]1224 %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11225 ret i8 %r1226}1227 1228define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) {1229; -O0-LABEL: atomicrmw_sub_i8_unaligned_release:1230; -O0: subs w8, w8, w11231; -O0: ldaddlb w8, w0, [x0]1232;1233; -O1-LABEL: atomicrmw_sub_i8_unaligned_release:1234; -O1: ldaddlb w8, w0, [x0]1235 %r = atomicrmw sub ptr %ptr, i8 %value release, align 11236 ret i8 %r1237}1238 1239define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1240; -O0-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1241; -O0: subs w8, w8, w11242; -O0: ldaddalb w8, w0, [x0]1243;1244; -O1-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1245; -O1: ldaddalb w8, w0, [x0]1246 %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11247 ret i8 %r1248}1249 1250define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1251; -O0-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1252; -O0: subs w8, w8, w11253; -O0: ldaddalb w8, w0, [x0]1254;1255; -O1-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1256; -O1: ldaddalb w8, w0, [x0]1257 %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11258 ret i8 %r1259}1260 1261define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1262; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1263; -O0: subs w8, w9, w81264; -O0: bl __atomic_compare_exchange1265;1266; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1267; -O1: sub w8, w0, w201268; -O1: bl __atomic_compare_exchange1269 %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 11270 ret i16 %r1271}1272 1273define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) {1274; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire:1275; -O0: subs w8, w9, w81276; -O0: bl __atomic_compare_exchange1277;1278; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire:1279; -O1: sub w8, w0, w201280; -O1: bl __atomic_compare_exchange1281 %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 11282 ret i16 %r1283}1284 1285define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) {1286; -O0-LABEL: atomicrmw_sub_i16_unaligned_release:1287; -O0: subs w8, w9, w81288; -O0: bl __atomic_compare_exchange1289;1290; -O1-LABEL: atomicrmw_sub_i16_unaligned_release:1291; -O1: sub w8, w0, w201292; -O1: bl __atomic_compare_exchange1293 %r = atomicrmw sub ptr %ptr, i16 %value release, align 11294 ret i16 %r1295}1296 1297define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1298; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1299; -O0: subs w8, w9, w81300; -O0: bl __atomic_compare_exchange1301;1302; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1303; -O1: sub w8, w0, w201304; -O1: bl __atomic_compare_exchange1305 %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 11306 ret i16 %r1307}1308 1309define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1310; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1311; -O0: subs w8, w9, w81312; -O0: bl __atomic_compare_exchange1313;1314; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1315; -O1: sub w8, w0, w201316; -O1: bl __atomic_compare_exchange1317 %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 11318 ret i16 %r1319}1320 1321define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1322; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1323; -O0: subs w8, w9, w81324; -O0: bl __atomic_compare_exchange1325;1326; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1327; -O1: sub w8, w0, w201328; -O1: bl __atomic_compare_exchange1329 %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 11330 ret i32 %r1331}1332 1333define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) {1334; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire:1335; -O0: subs w8, w9, w81336; -O0: bl __atomic_compare_exchange1337;1338; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire:1339; -O1: sub w8, w0, w201340; -O1: bl __atomic_compare_exchange1341 %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 11342 ret i32 %r1343}1344 1345define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) {1346; -O0-LABEL: atomicrmw_sub_i32_unaligned_release:1347; -O0: subs w8, w9, w81348; -O0: bl __atomic_compare_exchange1349;1350; -O1-LABEL: atomicrmw_sub_i32_unaligned_release:1351; -O1: sub w8, w0, w201352; -O1: bl __atomic_compare_exchange1353 %r = atomicrmw sub ptr %ptr, i32 %value release, align 11354 ret i32 %r1355}1356 1357define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1358; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1359; -O0: subs w8, w9, w81360; -O0: bl __atomic_compare_exchange1361;1362; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1363; -O1: sub w8, w0, w201364; -O1: bl __atomic_compare_exchange1365 %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 11366 ret i32 %r1367}1368 1369define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1370; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1371; -O0: subs w8, w9, w81372; -O0: bl __atomic_compare_exchange1373;1374; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1375; -O1: sub w8, w0, w201376; -O1: bl __atomic_compare_exchange1377 %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 11378 ret i32 %r1379}1380 1381define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1382; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1383; -O0: subs x8, x9, x81384; -O0: bl __atomic_compare_exchange1385;1386; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1387; -O1: sub x8, x0, x201388; -O1: bl __atomic_compare_exchange1389 %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 11390 ret i64 %r1391}1392 1393define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) {1394; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire:1395; -O0: subs x8, x9, x81396; -O0: bl __atomic_compare_exchange1397;1398; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire:1399; -O1: sub x8, x0, x201400; -O1: bl __atomic_compare_exchange1401 %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 11402 ret i64 %r1403}1404 1405define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) {1406; -O0-LABEL: atomicrmw_sub_i64_unaligned_release:1407; -O0: subs x8, x9, x81408; -O0: bl __atomic_compare_exchange1409;1410; -O1-LABEL: atomicrmw_sub_i64_unaligned_release:1411; -O1: sub x8, x0, x201412; -O1: bl __atomic_compare_exchange1413 %r = atomicrmw sub ptr %ptr, i64 %value release, align 11414 ret i64 %r1415}1416 1417define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1418; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1419; -O0: subs x8, x9, x81420; -O0: bl __atomic_compare_exchange1421;1422; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1423; -O1: sub x8, x0, x201424; -O1: bl __atomic_compare_exchange1425 %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 11426 ret i64 %r1427}1428 1429define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1430; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1431; -O0: subs x8, x9, x81432; -O0: bl __atomic_compare_exchange1433;1434; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1435; -O1: sub x8, x0, x201436; -O1: bl __atomic_compare_exchange1437 %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 11438 ret i64 %r1439}1440 1441define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1442; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1443; -O0: subs x9, x10, x91444; -O0: bl __atomic_compare_exchange1445;1446; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1447; -O1: ldp x0, x1, [x0]1448; -O1: subs x8, x1, x191449; -O1: bl __atomic_compare_exchange1450 %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 11451 ret i128 %r1452}1453 1454define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) {1455; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire:1456; -O0: subs x9, x10, x91457; -O0: bl __atomic_compare_exchange1458;1459; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire:1460; -O1: ldp x0, x1, [x0]1461; -O1: subs x8, x1, x191462; -O1: bl __atomic_compare_exchange1463 %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 11464 ret i128 %r1465}1466 1467define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) {1468; -O0-LABEL: atomicrmw_sub_i128_unaligned_release:1469; -O0: subs x9, x10, x91470; -O0: bl __atomic_compare_exchange1471;1472; -O1-LABEL: atomicrmw_sub_i128_unaligned_release:1473; -O1: ldp x0, x1, [x0]1474; -O1: subs x8, x1, x191475; -O1: bl __atomic_compare_exchange1476 %r = atomicrmw sub ptr %ptr, i128 %value release, align 11477 ret i128 %r1478}1479 1480define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1481; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1482; -O0: subs x9, x10, x91483; -O0: bl __atomic_compare_exchange1484;1485; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1486; -O1: ldp x0, x1, [x0]1487; -O1: subs x8, x1, x191488; -O1: bl __atomic_compare_exchange1489 %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 11490 ret i128 %r1491}1492 1493define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1494; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1495; -O0: subs x9, x10, x91496; -O0: bl __atomic_compare_exchange1497;1498; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1499; -O1: ldp x0, x1, [x0]1500; -O1: subs x8, x1, x191501; -O1: bl __atomic_compare_exchange1502 %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 11503 ret i128 %r1504}1505 1506define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) {1507; CHECK-LABEL: atomicrmw_and_i8_aligned_monotonic:1508; CHECK: mvn w8, w11509; CHECK: ldclrb w8, w0, [x0]1510 %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11511 ret i8 %r1512}1513 1514define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) {1515; CHECK-LABEL: atomicrmw_and_i8_aligned_acquire:1516; CHECK: mvn w8, w11517; CHECK: ldclrab w8, w0, [x0]1518 %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11519 ret i8 %r1520}1521 1522define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) {1523; CHECK-LABEL: atomicrmw_and_i8_aligned_release:1524; CHECK: mvn w8, w11525; CHECK: ldclrlb w8, w0, [x0]1526 %r = atomicrmw and ptr %ptr, i8 %value release, align 11527 ret i8 %r1528}1529 1530define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) {1531; CHECK-LABEL: atomicrmw_and_i8_aligned_acq_rel:1532; CHECK: mvn w8, w11533; CHECK: ldclralb w8, w0, [x0]1534 %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11535 ret i8 %r1536}1537 1538define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) {1539; CHECK-LABEL: atomicrmw_and_i8_aligned_seq_cst:1540; CHECK: mvn w8, w11541; CHECK: ldclralb w8, w0, [x0]1542 %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11543 ret i8 %r1544}1545 1546define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) {1547; CHECK-LABEL: atomicrmw_and_i16_aligned_monotonic:1548; CHECK: mvn w8, w11549; CHECK: ldclrh w8, w0, [x0]1550 %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 21551 ret i16 %r1552}1553 1554define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) {1555; CHECK-LABEL: atomicrmw_and_i16_aligned_acquire:1556; CHECK: mvn w8, w11557; CHECK: ldclrah w8, w0, [x0]1558 %r = atomicrmw and ptr %ptr, i16 %value acquire, align 21559 ret i16 %r1560}1561 1562define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) {1563; CHECK-LABEL: atomicrmw_and_i16_aligned_release:1564; CHECK: mvn w8, w11565; CHECK: ldclrlh w8, w0, [x0]1566 %r = atomicrmw and ptr %ptr, i16 %value release, align 21567 ret i16 %r1568}1569 1570define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) {1571; CHECK-LABEL: atomicrmw_and_i16_aligned_acq_rel:1572; CHECK: mvn w8, w11573; CHECK: ldclralh w8, w0, [x0]1574 %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 21575 ret i16 %r1576}1577 1578define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1579; CHECK-LABEL: atomicrmw_and_i16_aligned_seq_cst:1580; CHECK: mvn w8, w11581; CHECK: ldclralh w8, w0, [x0]1582 %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 21583 ret i16 %r1584}1585 1586define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) {1587; CHECK-LABEL: atomicrmw_and_i32_aligned_monotonic:1588; CHECK: mvn w8, w11589; CHECK: ldclr w8, w0, [x0]1590 %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 41591 ret i32 %r1592}1593 1594define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) {1595; CHECK-LABEL: atomicrmw_and_i32_aligned_acquire:1596; CHECK: mvn w8, w11597; CHECK: ldclra w8, w0, [x0]1598 %r = atomicrmw and ptr %ptr, i32 %value acquire, align 41599 ret i32 %r1600}1601 1602define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) {1603; CHECK-LABEL: atomicrmw_and_i32_aligned_release:1604; CHECK: mvn w8, w11605; CHECK: ldclrl w8, w0, [x0]1606 %r = atomicrmw and ptr %ptr, i32 %value release, align 41607 ret i32 %r1608}1609 1610define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1611; CHECK-LABEL: atomicrmw_and_i32_aligned_acq_rel:1612; CHECK: mvn w8, w11613; CHECK: ldclral w8, w0, [x0]1614 %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 41615 ret i32 %r1616}1617 1618define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1619; CHECK-LABEL: atomicrmw_and_i32_aligned_seq_cst:1620; CHECK: mvn w8, w11621; CHECK: ldclral w8, w0, [x0]1622 %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 41623 ret i32 %r1624}1625 1626define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) {1627; CHECK-LABEL: atomicrmw_and_i64_aligned_monotonic:1628; CHECK: mvn x8, x11629; CHECK: ldclr x8, x0, [x0]1630 %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 81631 ret i64 %r1632}1633 1634define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) {1635; CHECK-LABEL: atomicrmw_and_i64_aligned_acquire:1636; CHECK: mvn x8, x11637; CHECK: ldclra x8, x0, [x0]1638 %r = atomicrmw and ptr %ptr, i64 %value acquire, align 81639 ret i64 %r1640}1641 1642define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) {1643; CHECK-LABEL: atomicrmw_and_i64_aligned_release:1644; CHECK: mvn x8, x11645; CHECK: ldclrl x8, x0, [x0]1646 %r = atomicrmw and ptr %ptr, i64 %value release, align 81647 ret i64 %r1648}1649 1650define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1651; CHECK-LABEL: atomicrmw_and_i64_aligned_acq_rel:1652; CHECK: mvn x8, x11653; CHECK: ldclral x8, x0, [x0]1654 %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 81655 ret i64 %r1656}1657 1658define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1659; CHECK-LABEL: atomicrmw_and_i64_aligned_seq_cst:1660; CHECK: mvn x8, x11661; CHECK: ldclral x8, x0, [x0]1662 %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 81663 ret i64 %r1664}1665 1666define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) {1667; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic:1668; -O0: and x2, x11, x121669; -O0: and x9, x10, x91670; -O0: casp x0, x1, x2, x3, [x8]1671; -O0: subs x11, x9, x111672; -O0: ccmp x8, x10, #0, eq1673;1674; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic:1675; -O1: ldp x4, x5, [x0]1676; -O1: and x8, x4, x21677; -O1: and x9, x7, x31678; -O1: casp x4, x5, x8, x9, [x0]1679; -O1: cmp x4, x61680; -O1: ccmp x5, x7, #0, eq1681 %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 161682 ret i128 %r1683}1684 1685define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) {1686; -O0-LABEL: atomicrmw_and_i128_aligned_acquire:1687; -O0: and x2, x11, x121688; -O0: and x9, x10, x91689; -O0: caspa x0, x1, x2, x3, [x8]1690; -O0: subs x11, x9, x111691; -O0: ccmp x8, x10, #0, eq1692;1693; -O1-LABEL: atomicrmw_and_i128_aligned_acquire:1694; -O1: ldp x4, x5, [x0]1695; -O1: and x8, x4, x21696; -O1: and x9, x7, x31697; -O1: caspa x4, x5, x8, x9, [x0]1698; -O1: cmp x4, x61699; -O1: ccmp x5, x7, #0, eq1700 %r = atomicrmw and ptr %ptr, i128 %value acquire, align 161701 ret i128 %r1702}1703 1704define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) {1705; -O0-LABEL: atomicrmw_and_i128_aligned_release:1706; -O0: and x2, x11, x121707; -O0: and x9, x10, x91708; -O0: caspl x0, x1, x2, x3, [x8]1709; -O0: subs x11, x9, x111710; -O0: ccmp x8, x10, #0, eq1711;1712; -O1-LABEL: atomicrmw_and_i128_aligned_release:1713; -O1: ldp x4, x5, [x0]1714; -O1: and x8, x4, x21715; -O1: and x9, x7, x31716; -O1: caspl x4, x5, x8, x9, [x0]1717; -O1: cmp x4, x61718; -O1: ccmp x5, x7, #0, eq1719 %r = atomicrmw and ptr %ptr, i128 %value release, align 161720 ret i128 %r1721}1722 1723define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1724; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel:1725; -O0: and x2, x11, x121726; -O0: and x9, x10, x91727; -O0: caspal x0, x1, x2, x3, [x8]1728; -O0: subs x11, x9, x111729; -O0: ccmp x8, x10, #0, eq1730;1731; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel:1732; -O1: ldp x4, x5, [x0]1733; -O1: and x8, x4, x21734; -O1: and x9, x7, x31735; -O1: caspal x4, x5, x8, x9, [x0]1736; -O1: cmp x4, x61737; -O1: ccmp x5, x7, #0, eq1738 %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 161739 ret i128 %r1740}1741 1742define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1743; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst:1744; -O0: and x2, x11, x121745; -O0: and x9, x10, x91746; -O0: caspal x0, x1, x2, x3, [x8]1747; -O0: subs x11, x9, x111748; -O0: ccmp x8, x10, #0, eq1749;1750; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst:1751; -O1: ldp x4, x5, [x0]1752; -O1: and x8, x4, x21753; -O1: and x9, x7, x31754; -O1: caspal x4, x5, x8, x9, [x0]1755; -O1: cmp x4, x61756; -O1: ccmp x5, x7, #0, eq1757 %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 161758 ret i128 %r1759}1760 1761define dso_local i8 @atomicrmw_and_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1762; CHECK-LABEL: atomicrmw_and_i8_unaligned_monotonic:1763; CHECK: mvn w8, w11764; CHECK: ldclrb w8, w0, [x0]1765 %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11766 ret i8 %r1767}1768 1769define dso_local i8 @atomicrmw_and_i8_unaligned_acquire(ptr %ptr, i8 %value) {1770; CHECK-LABEL: atomicrmw_and_i8_unaligned_acquire:1771; CHECK: mvn w8, w11772; CHECK: ldclrab w8, w0, [x0]1773 %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11774 ret i8 %r1775}1776 1777define dso_local i8 @atomicrmw_and_i8_unaligned_release(ptr %ptr, i8 %value) {1778; CHECK-LABEL: atomicrmw_and_i8_unaligned_release:1779; CHECK: mvn w8, w11780; CHECK: ldclrlb w8, w0, [x0]1781 %r = atomicrmw and ptr %ptr, i8 %value release, align 11782 ret i8 %r1783}1784 1785define dso_local i8 @atomicrmw_and_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1786; CHECK-LABEL: atomicrmw_and_i8_unaligned_acq_rel:1787; CHECK: mvn w8, w11788; CHECK: ldclralb w8, w0, [x0]1789 %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11790 ret i8 %r1791}1792 1793define dso_local i8 @atomicrmw_and_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1794; CHECK-LABEL: atomicrmw_and_i8_unaligned_seq_cst:1795; CHECK: mvn w8, w11796; CHECK: ldclralb w8, w0, [x0]1797 %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11798 ret i8 %r1799}1800 1801define dso_local i16 @atomicrmw_and_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1802; -O0-LABEL: atomicrmw_and_i16_unaligned_monotonic:1803; -O0: and w8, w9, w81804; -O0: bl __atomic_compare_exchange1805;1806; -O1-LABEL: atomicrmw_and_i16_unaligned_monotonic:1807; -O1: and w8, w0, w201808; -O1: bl __atomic_compare_exchange1809 %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 11810 ret i16 %r1811}1812 1813define dso_local i16 @atomicrmw_and_i16_unaligned_acquire(ptr %ptr, i16 %value) {1814; -O0-LABEL: atomicrmw_and_i16_unaligned_acquire:1815; -O0: and w8, w9, w81816; -O0: bl __atomic_compare_exchange1817;1818; -O1-LABEL: atomicrmw_and_i16_unaligned_acquire:1819; -O1: and w8, w0, w201820; -O1: bl __atomic_compare_exchange1821 %r = atomicrmw and ptr %ptr, i16 %value acquire, align 11822 ret i16 %r1823}1824 1825define dso_local i16 @atomicrmw_and_i16_unaligned_release(ptr %ptr, i16 %value) {1826; -O0-LABEL: atomicrmw_and_i16_unaligned_release:1827; -O0: and w8, w9, w81828; -O0: bl __atomic_compare_exchange1829;1830; -O1-LABEL: atomicrmw_and_i16_unaligned_release:1831; -O1: and w8, w0, w201832; -O1: bl __atomic_compare_exchange1833 %r = atomicrmw and ptr %ptr, i16 %value release, align 11834 ret i16 %r1835}1836 1837define dso_local i16 @atomicrmw_and_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1838; -O0-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1839; -O0: and w8, w9, w81840; -O0: bl __atomic_compare_exchange1841;1842; -O1-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1843; -O1: and w8, w0, w201844; -O1: bl __atomic_compare_exchange1845 %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 11846 ret i16 %r1847}1848 1849define dso_local i16 @atomicrmw_and_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1850; -O0-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1851; -O0: and w8, w9, w81852; -O0: bl __atomic_compare_exchange1853;1854; -O1-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1855; -O1: and w8, w0, w201856; -O1: bl __atomic_compare_exchange1857 %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 11858 ret i16 %r1859}1860 1861define dso_local i32 @atomicrmw_and_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1862; -O0-LABEL: atomicrmw_and_i32_unaligned_monotonic:1863; -O0: and w8, w9, w81864; -O0: bl __atomic_compare_exchange1865;1866; -O1-LABEL: atomicrmw_and_i32_unaligned_monotonic:1867; -O1: and w8, w0, w201868; -O1: bl __atomic_compare_exchange1869 %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 11870 ret i32 %r1871}1872 1873define dso_local i32 @atomicrmw_and_i32_unaligned_acquire(ptr %ptr, i32 %value) {1874; -O0-LABEL: atomicrmw_and_i32_unaligned_acquire:1875; -O0: and w8, w9, w81876; -O0: bl __atomic_compare_exchange1877;1878; -O1-LABEL: atomicrmw_and_i32_unaligned_acquire:1879; -O1: and w8, w0, w201880; -O1: bl __atomic_compare_exchange1881 %r = atomicrmw and ptr %ptr, i32 %value acquire, align 11882 ret i32 %r1883}1884 1885define dso_local i32 @atomicrmw_and_i32_unaligned_release(ptr %ptr, i32 %value) {1886; -O0-LABEL: atomicrmw_and_i32_unaligned_release:1887; -O0: and w8, w9, w81888; -O0: bl __atomic_compare_exchange1889;1890; -O1-LABEL: atomicrmw_and_i32_unaligned_release:1891; -O1: and w8, w0, w201892; -O1: bl __atomic_compare_exchange1893 %r = atomicrmw and ptr %ptr, i32 %value release, align 11894 ret i32 %r1895}1896 1897define dso_local i32 @atomicrmw_and_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1898; -O0-LABEL: atomicrmw_and_i32_unaligned_acq_rel:1899; -O0: and w8, w9, w81900; -O0: bl __atomic_compare_exchange1901;1902; -O1-LABEL: atomicrmw_and_i32_unaligned_acq_rel:1903; -O1: and w8, w0, w201904; -O1: bl __atomic_compare_exchange1905 %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 11906 ret i32 %r1907}1908 1909define dso_local i32 @atomicrmw_and_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1910; -O0-LABEL: atomicrmw_and_i32_unaligned_seq_cst:1911; -O0: and w8, w9, w81912; -O0: bl __atomic_compare_exchange1913;1914; -O1-LABEL: atomicrmw_and_i32_unaligned_seq_cst:1915; -O1: and w8, w0, w201916; -O1: bl __atomic_compare_exchange1917 %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 11918 ret i32 %r1919}1920 1921define dso_local i64 @atomicrmw_and_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1922; -O0-LABEL: atomicrmw_and_i64_unaligned_monotonic:1923; -O0: and x8, x9, x81924; -O0: bl __atomic_compare_exchange1925;1926; -O1-LABEL: atomicrmw_and_i64_unaligned_monotonic:1927; -O1: and x8, x0, x201928; -O1: bl __atomic_compare_exchange1929 %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 11930 ret i64 %r1931}1932 1933define dso_local i64 @atomicrmw_and_i64_unaligned_acquire(ptr %ptr, i64 %value) {1934; -O0-LABEL: atomicrmw_and_i64_unaligned_acquire:1935; -O0: and x8, x9, x81936; -O0: bl __atomic_compare_exchange1937;1938; -O1-LABEL: atomicrmw_and_i64_unaligned_acquire:1939; -O1: and x8, x0, x201940; -O1: bl __atomic_compare_exchange1941 %r = atomicrmw and ptr %ptr, i64 %value acquire, align 11942 ret i64 %r1943}1944 1945define dso_local i64 @atomicrmw_and_i64_unaligned_release(ptr %ptr, i64 %value) {1946; -O0-LABEL: atomicrmw_and_i64_unaligned_release:1947; -O0: and x8, x9, x81948; -O0: bl __atomic_compare_exchange1949;1950; -O1-LABEL: atomicrmw_and_i64_unaligned_release:1951; -O1: and x8, x0, x201952; -O1: bl __atomic_compare_exchange1953 %r = atomicrmw and ptr %ptr, i64 %value release, align 11954 ret i64 %r1955}1956 1957define dso_local i64 @atomicrmw_and_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1958; -O0-LABEL: atomicrmw_and_i64_unaligned_acq_rel:1959; -O0: and x8, x9, x81960; -O0: bl __atomic_compare_exchange1961;1962; -O1-LABEL: atomicrmw_and_i64_unaligned_acq_rel:1963; -O1: and x8, x0, x201964; -O1: bl __atomic_compare_exchange1965 %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 11966 ret i64 %r1967}1968 1969define dso_local i64 @atomicrmw_and_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1970; -O0-LABEL: atomicrmw_and_i64_unaligned_seq_cst:1971; -O0: and x8, x9, x81972; -O0: bl __atomic_compare_exchange1973;1974; -O1-LABEL: atomicrmw_and_i64_unaligned_seq_cst:1975; -O1: and x8, x0, x201976; -O1: bl __atomic_compare_exchange1977 %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 11978 ret i64 %r1979}1980 1981define dso_local i128 @atomicrmw_and_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1982; -O0-LABEL: atomicrmw_and_i128_unaligned_monotonic:1983; -O0: and x8, x11, x81984; -O0: and x9, x10, x91985; -O0: bl __atomic_compare_exchange1986;1987; -O1-LABEL: atomicrmw_and_i128_unaligned_monotonic:1988; -O1: ldp x0, x1, [x0]1989; -O1: and x8, x1, x191990; -O1: and x9, x0, x211991; -O1: bl __atomic_compare_exchange1992 %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 11993 ret i128 %r1994}1995 1996define dso_local i128 @atomicrmw_and_i128_unaligned_acquire(ptr %ptr, i128 %value) {1997; -O0-LABEL: atomicrmw_and_i128_unaligned_acquire:1998; -O0: and x8, x11, x81999; -O0: and x9, x10, x92000; -O0: bl __atomic_compare_exchange2001;2002; -O1-LABEL: atomicrmw_and_i128_unaligned_acquire:2003; -O1: ldp x0, x1, [x0]2004; -O1: and x8, x1, x192005; -O1: and x9, x0, x212006; -O1: bl __atomic_compare_exchange2007 %r = atomicrmw and ptr %ptr, i128 %value acquire, align 12008 ret i128 %r2009}2010 2011define dso_local i128 @atomicrmw_and_i128_unaligned_release(ptr %ptr, i128 %value) {2012; -O0-LABEL: atomicrmw_and_i128_unaligned_release:2013; -O0: and x8, x11, x82014; -O0: and x9, x10, x92015; -O0: bl __atomic_compare_exchange2016;2017; -O1-LABEL: atomicrmw_and_i128_unaligned_release:2018; -O1: ldp x0, x1, [x0]2019; -O1: and x8, x1, x192020; -O1: and x9, x0, x212021; -O1: bl __atomic_compare_exchange2022 %r = atomicrmw and ptr %ptr, i128 %value release, align 12023 ret i128 %r2024}2025 2026define dso_local i128 @atomicrmw_and_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2027; -O0-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2028; -O0: and x8, x11, x82029; -O0: and x9, x10, x92030; -O0: bl __atomic_compare_exchange2031;2032; -O1-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2033; -O1: ldp x0, x1, [x0]2034; -O1: and x8, x1, x192035; -O1: and x9, x0, x212036; -O1: bl __atomic_compare_exchange2037 %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 12038 ret i128 %r2039}2040 2041define dso_local i128 @atomicrmw_and_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2042; -O0-LABEL: atomicrmw_and_i128_unaligned_seq_cst:2043; -O0: and x8, x11, x82044; -O0: and x9, x10, x92045; -O0: bl __atomic_compare_exchange2046;2047; -O1-LABEL: atomicrmw_and_i128_unaligned_seq_cst: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 seq_cst, align 12053 ret i128 %r2054}2055 2056define dso_local i8 @atomicrmw_nand_i8_aligned_monotonic(ptr %ptr, i8 %value) {2057; -O0-LABEL: atomicrmw_nand_i8_aligned_monotonic:2058; -O0: and w8, w9, w82059; -O0: mvn w10, w82060; -O0: casb w8, w10, [x11]2061; -O0: subs w9, w8, w9, uxtb2062;2063; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic:2064; -O1: and w10, w8, w12065; -O1: mvn w10, w102066; -O1: casb w9, w10, [x0]2067; -O1: cmp w9, w8, uxtb2068 %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12069 ret i8 %r2070}2071 2072define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) {2073; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire:2074; -O0: and w8, w9, w82075; -O0: mvn w10, w82076; -O0: casab w8, w10, [x11]2077; -O0: subs w9, w8, w9, uxtb2078;2079; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire:2080; -O1: and w10, w8, w12081; -O1: mvn w10, w102082; -O1: casab w9, w10, [x0]2083; -O1: cmp w9, w8, uxtb2084 %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12085 ret i8 %r2086}2087 2088define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) {2089; -O0-LABEL: atomicrmw_nand_i8_aligned_release:2090; -O0: and w8, w9, w82091; -O0: mvn w10, w82092; -O0: caslb w8, w10, [x11]2093; -O0: subs w9, w8, w9, uxtb2094;2095; -O1-LABEL: atomicrmw_nand_i8_aligned_release:2096; -O1: and w10, w8, w12097; -O1: mvn w10, w102098; -O1: caslb w9, w10, [x0]2099; -O1: cmp w9, w8, uxtb2100 %r = atomicrmw nand ptr %ptr, i8 %value release, align 12101 ret i8 %r2102}2103 2104define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2105; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2106; -O0: and w8, w9, w82107; -O0: mvn w10, w82108; -O0: casalb w8, w10, [x11]2109; -O0: subs w9, w8, w9, uxtb2110;2111; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2112; -O1: and w10, w8, w12113; -O1: mvn w10, w102114; -O1: casalb w9, w10, [x0]2115; -O1: cmp w9, w8, uxtb2116 %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12117 ret i8 %r2118}2119 2120define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2121; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2122; -O0: and w8, w9, w82123; -O0: mvn w10, w82124; -O0: casalb w8, w10, [x11]2125; -O0: subs w9, w8, w9, uxtb2126;2127; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2128; -O1: and w10, w8, w12129; -O1: mvn w10, w102130; -O1: casalb w9, w10, [x0]2131; -O1: cmp w9, w8, uxtb2132 %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12133 ret i8 %r2134}2135 2136define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) {2137; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic:2138; -O0: and w8, w9, w82139; -O0: mvn w10, w82140; -O0: cash w8, w10, [x11]2141; -O0: subs w9, w8, w9, uxth2142;2143; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic:2144; -O1: and w10, w8, w12145; -O1: mvn w10, w102146; -O1: cash w9, w10, [x0]2147; -O1: cmp w9, w8, uxth2148 %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 22149 ret i16 %r2150}2151 2152define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) {2153; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire:2154; -O0: and w8, w9, w82155; -O0: mvn w10, w82156; -O0: casah w8, w10, [x11]2157; -O0: subs w9, w8, w9, uxth2158;2159; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire:2160; -O1: and w10, w8, w12161; -O1: mvn w10, w102162; -O1: casah w9, w10, [x0]2163; -O1: cmp w9, w8, uxth2164 %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 22165 ret i16 %r2166}2167 2168define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) {2169; -O0-LABEL: atomicrmw_nand_i16_aligned_release:2170; -O0: and w8, w9, w82171; -O0: mvn w10, w82172; -O0: caslh w8, w10, [x11]2173; -O0: subs w9, w8, w9, uxth2174;2175; -O1-LABEL: atomicrmw_nand_i16_aligned_release:2176; -O1: and w10, w8, w12177; -O1: mvn w10, w102178; -O1: caslh w9, w10, [x0]2179; -O1: cmp w9, w8, uxth2180 %r = atomicrmw nand ptr %ptr, i16 %value release, align 22181 ret i16 %r2182}2183 2184define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2185; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2186; -O0: and w8, w9, w82187; -O0: mvn w10, w82188; -O0: casalh w8, w10, [x11]2189; -O0: subs w9, w8, w9, uxth2190;2191; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2192; -O1: and w10, w8, w12193; -O1: mvn w10, w102194; -O1: casalh w9, w10, [x0]2195; -O1: cmp w9, w8, uxth2196 %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 22197 ret i16 %r2198}2199 2200define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2201; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2202; -O0: and w8, w9, w82203; -O0: mvn w10, w82204; -O0: casalh w8, w10, [x11]2205; -O0: subs w9, w8, w9, uxth2206;2207; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2208; -O1: and w10, w8, w12209; -O1: mvn w10, w102210; -O1: casalh w9, w10, [x0]2211; -O1: cmp w9, w8, uxth2212 %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 22213 ret i16 %r2214}2215 2216define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) {2217; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic:2218; -O0: and w8, w9, w82219; -O0: mvn w10, w82220; -O0: cas w8, w10, [x11]2221; -O0: subs w9, w8, w92222;2223; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic:2224; -O1: and w10, w8, w12225; -O1: mvn w10, w102226; -O1: cas w9, w10, [x0]2227; -O1: cmp w9, w82228 %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 42229 ret i32 %r2230}2231 2232define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) {2233; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire:2234; -O0: and w8, w9, w82235; -O0: mvn w10, w82236; -O0: casa w8, w10, [x11]2237; -O0: subs w9, w8, w92238;2239; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire:2240; -O1: and w10, w8, w12241; -O1: mvn w10, w102242; -O1: casa w9, w10, [x0]2243; -O1: cmp w9, w82244 %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 42245 ret i32 %r2246}2247 2248define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) {2249; -O0-LABEL: atomicrmw_nand_i32_aligned_release:2250; -O0: and w8, w9, w82251; -O0: mvn w10, w82252; -O0: casl w8, w10, [x11]2253; -O0: subs w9, w8, w92254;2255; -O1-LABEL: atomicrmw_nand_i32_aligned_release:2256; -O1: and w10, w8, w12257; -O1: mvn w10, w102258; -O1: casl w9, w10, [x0]2259; -O1: cmp w9, w82260 %r = atomicrmw nand ptr %ptr, i32 %value release, align 42261 ret i32 %r2262}2263 2264define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2265; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2266; -O0: and w8, w9, w82267; -O0: mvn w10, w82268; -O0: casal w8, w10, [x11]2269; -O0: subs w9, w8, w92270;2271; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2272; -O1: and w10, w8, w12273; -O1: mvn w10, w102274; -O1: casal w9, w10, [x0]2275; -O1: cmp w9, w82276 %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 42277 ret i32 %r2278}2279 2280define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2281; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2282; -O0: and w8, w9, w82283; -O0: mvn w10, w82284; -O0: casal w8, w10, [x11]2285; -O0: subs w9, w8, w92286;2287; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2288; -O1: and w10, w8, w12289; -O1: mvn w10, w102290; -O1: casal w9, w10, [x0]2291; -O1: cmp w9, w82292 %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 42293 ret i32 %r2294}2295 2296define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) {2297; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic:2298; -O0: and x8, x9, x82299; -O0: mvn x10, x82300; -O0: cas x8, x10, [x11]2301; -O0: subs x9, x8, x92302;2303; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic:2304; -O1: and x10, x8, x12305; -O1: mvn x10, x102306; -O1: cas x9, x10, [x0]2307; -O1: cmp x9, x82308 %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 82309 ret i64 %r2310}2311 2312define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) {2313; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire:2314; -O0: and x8, x9, x82315; -O0: mvn x10, x82316; -O0: casa x8, x10, [x11]2317; -O0: subs x9, x8, x92318;2319; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire:2320; -O1: and x10, x8, x12321; -O1: mvn x10, x102322; -O1: casa x9, x10, [x0]2323; -O1: cmp x9, x82324 %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 82325 ret i64 %r2326}2327 2328define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) {2329; -O0-LABEL: atomicrmw_nand_i64_aligned_release:2330; -O0: and x8, x9, x82331; -O0: mvn x10, x82332; -O0: casl x8, x10, [x11]2333; -O0: subs x9, x8, x92334;2335; -O1-LABEL: atomicrmw_nand_i64_aligned_release:2336; -O1: and x10, x8, x12337; -O1: mvn x10, x102338; -O1: casl x9, x10, [x0]2339; -O1: cmp x9, x82340 %r = atomicrmw nand ptr %ptr, i64 %value release, align 82341 ret i64 %r2342}2343 2344define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2345; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2346; -O0: and x8, x9, x82347; -O0: mvn x10, x82348; -O0: casal x8, x10, [x11]2349; -O0: subs x9, x8, x92350;2351; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2352; -O1: and x10, x8, x12353; -O1: mvn x10, x102354; -O1: casal x9, x10, [x0]2355; -O1: cmp x9, x82356 %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 82357 ret i64 %r2358}2359 2360define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2361; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2362; -O0: and x8, x9, x82363; -O0: mvn x10, x82364; -O0: casal x8, x10, [x11]2365; -O0: subs x9, x8, x92366;2367; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2368; -O1: and x10, x8, x12369; -O1: mvn x10, x102370; -O1: casal x9, x10, [x0]2371; -O1: cmp x9, x82372 %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 82373 ret i64 %r2374}2375 2376define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) {2377; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic:2378; -O0: and x9, x10, x92379; -O0: and x12, x11, x122380; -O0: mvn x2, x122381; -O0: mvn x9, x92382; -O0: casp x0, x1, x2, x3, [x8]2383; -O0: subs x11, x9, x112384; -O0: ccmp x8, x10, #0, eq2385;2386; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic:2387; -O1: ldp x4, x5, [x0]2388; -O1: and x8, x4, x22389; -O1: and x9, x7, x32390; -O1: mvn x10, x82391; -O1: mvn x11, x92392; -O1: casp x4, x5, x10, x11, [x0]2393; -O1: cmp x4, x62394; -O1: ccmp x5, x7, #0, eq2395 %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 162396 ret i128 %r2397}2398 2399define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) {2400; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire:2401; -O0: and x9, x10, x92402; -O0: and x12, x11, x122403; -O0: mvn x2, x122404; -O0: mvn x9, x92405; -O0: caspa x0, x1, x2, x3, [x8]2406; -O0: subs x11, x9, x112407; -O0: ccmp x8, x10, #0, eq2408;2409; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire:2410; -O1: ldp x4, x5, [x0]2411; -O1: and x8, x4, x22412; -O1: and x9, x7, x32413; -O1: mvn x10, x82414; -O1: mvn x11, x92415; -O1: caspa x4, x5, x10, x11, [x0]2416; -O1: cmp x4, x62417; -O1: ccmp x5, x7, #0, eq2418 %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 162419 ret i128 %r2420}2421 2422define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) {2423; -O0-LABEL: atomicrmw_nand_i128_aligned_release:2424; -O0: and x9, x10, x92425; -O0: and x12, x11, x122426; -O0: mvn x2, x122427; -O0: mvn x9, x92428; -O0: caspl x0, x1, x2, x3, [x8]2429; -O0: subs x11, x9, x112430; -O0: ccmp x8, x10, #0, eq2431;2432; -O1-LABEL: atomicrmw_nand_i128_aligned_release:2433; -O1: ldp x4, x5, [x0]2434; -O1: and x8, x4, x22435; -O1: and x9, x7, x32436; -O1: mvn x10, x82437; -O1: mvn x11, x92438; -O1: caspl x4, x5, x10, x11, [x0]2439; -O1: cmp x4, x62440; -O1: ccmp x5, x7, #0, eq2441 %r = atomicrmw nand ptr %ptr, i128 %value release, align 162442 ret i128 %r2443}2444 2445define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2446; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2447; -O0: and x9, x10, x92448; -O0: and x12, x11, x122449; -O0: mvn x2, x122450; -O0: mvn x9, x92451; -O0: caspal x0, x1, x2, x3, [x8]2452; -O0: subs x11, x9, x112453; -O0: ccmp x8, x10, #0, eq2454;2455; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2456; -O1: ldp x4, x5, [x0]2457; -O1: and x8, x4, x22458; -O1: and x9, x7, x32459; -O1: mvn x10, x82460; -O1: mvn x11, x92461; -O1: caspal x4, x5, x10, x11, [x0]2462; -O1: cmp x4, x62463; -O1: ccmp x5, x7, #0, eq2464 %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 162465 ret i128 %r2466}2467 2468define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) {2469; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2470; -O0: and x9, x10, x92471; -O0: and x12, x11, x122472; -O0: mvn x2, x122473; -O0: mvn x9, x92474; -O0: caspal x0, x1, x2, x3, [x8]2475; -O0: subs x11, x9, x112476; -O0: ccmp x8, x10, #0, eq2477;2478; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2479; -O1: ldp x4, x5, [x0]2480; -O1: and x8, x4, x22481; -O1: and x9, x7, x32482; -O1: mvn x10, x82483; -O1: mvn x11, x92484; -O1: caspal x4, x5, x10, x11, [x0]2485; -O1: cmp x4, x62486; -O1: ccmp x5, x7, #0, eq2487 %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 162488 ret i128 %r2489}2490 2491define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) {2492; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2493; -O0: and w8, w9, w82494; -O0: mvn w10, w82495; -O0: casb w8, w10, [x11]2496; -O0: subs w9, w8, w9, uxtb2497;2498; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2499; -O1: and w10, w8, w12500; -O1: mvn w10, w102501; -O1: casb w9, w10, [x0]2502; -O1: cmp w9, w8, uxtb2503 %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12504 ret i8 %r2505}2506 2507define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) {2508; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire:2509; -O0: and w8, w9, w82510; -O0: mvn w10, w82511; -O0: casab w8, w10, [x11]2512; -O0: subs w9, w8, w9, uxtb2513;2514; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire:2515; -O1: and w10, w8, w12516; -O1: mvn w10, w102517; -O1: casab w9, w10, [x0]2518; -O1: cmp w9, w8, uxtb2519 %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12520 ret i8 %r2521}2522 2523define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) {2524; -O0-LABEL: atomicrmw_nand_i8_unaligned_release:2525; -O0: and w8, w9, w82526; -O0: mvn w10, w82527; -O0: caslb w8, w10, [x11]2528; -O0: subs w9, w8, w9, uxtb2529;2530; -O1-LABEL: atomicrmw_nand_i8_unaligned_release:2531; -O1: and w10, w8, w12532; -O1: mvn w10, w102533; -O1: caslb w9, w10, [x0]2534; -O1: cmp w9, w8, uxtb2535 %r = atomicrmw nand ptr %ptr, i8 %value release, align 12536 ret i8 %r2537}2538 2539define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {2540; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2541; -O0: and w8, w9, w82542; -O0: mvn w10, w82543; -O0: casalb w8, w10, [x11]2544; -O0: subs w9, w8, w9, uxtb2545;2546; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2547; -O1: and w10, w8, w12548; -O1: mvn w10, w102549; -O1: casalb w9, w10, [x0]2550; -O1: cmp w9, w8, uxtb2551 %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12552 ret i8 %r2553}2554 2555define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {2556; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2557; -O0: and w8, w9, w82558; -O0: mvn w10, w82559; -O0: casalb w8, w10, [x11]2560; -O0: subs w9, w8, w9, uxtb2561;2562; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2563; -O1: and w10, w8, w12564; -O1: mvn w10, w102565; -O1: casalb w9, w10, [x0]2566; -O1: cmp w9, w8, uxtb2567 %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12568 ret i8 %r2569}2570 2571define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) {2572; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2573; -O0: and w8, w9, w82574; -O0: mvn w8, w82575; -O0: bl __atomic_compare_exchange2576;2577; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2578; -O1: and w8, w0, w202579; -O1: mvn w8, w82580; -O1: bl __atomic_compare_exchange2581 %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 12582 ret i16 %r2583}2584 2585define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) {2586; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire:2587; -O0: and w8, w9, w82588; -O0: mvn w8, w82589; -O0: bl __atomic_compare_exchange2590;2591; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire:2592; -O1: and w8, w0, w202593; -O1: mvn w8, w82594; -O1: bl __atomic_compare_exchange2595 %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 12596 ret i16 %r2597}2598 2599define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) {2600; -O0-LABEL: atomicrmw_nand_i16_unaligned_release:2601; -O0: and w8, w9, w82602; -O0: mvn w8, w82603; -O0: bl __atomic_compare_exchange2604;2605; -O1-LABEL: atomicrmw_nand_i16_unaligned_release:2606; -O1: and w8, w0, w202607; -O1: mvn w8, w82608; -O1: bl __atomic_compare_exchange2609 %r = atomicrmw nand ptr %ptr, i16 %value release, align 12610 ret i16 %r2611}2612 2613define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {2614; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2615; -O0: and w8, w9, w82616; -O0: mvn w8, w82617; -O0: bl __atomic_compare_exchange2618;2619; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2620; -O1: and w8, w0, w202621; -O1: mvn w8, w82622; -O1: bl __atomic_compare_exchange2623 %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 12624 ret i16 %r2625}2626 2627define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {2628; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2629; -O0: and w8, w9, w82630; -O0: mvn w8, w82631; -O0: bl __atomic_compare_exchange2632;2633; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2634; -O1: and w8, w0, w202635; -O1: mvn w8, w82636; -O1: bl __atomic_compare_exchange2637 %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 12638 ret i16 %r2639}2640 2641define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) {2642; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2643; -O0: and w8, w9, w82644; -O0: mvn w8, w82645; -O0: bl __atomic_compare_exchange2646;2647; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2648; -O1: and w8, w0, w202649; -O1: mvn w8, w82650; -O1: bl __atomic_compare_exchange2651 %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 12652 ret i32 %r2653}2654 2655define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) {2656; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire:2657; -O0: and w8, w9, w82658; -O0: mvn w8, w82659; -O0: bl __atomic_compare_exchange2660;2661; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire:2662; -O1: and w8, w0, w202663; -O1: mvn w8, w82664; -O1: bl __atomic_compare_exchange2665 %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 12666 ret i32 %r2667}2668 2669define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) {2670; -O0-LABEL: atomicrmw_nand_i32_unaligned_release:2671; -O0: and w8, w9, w82672; -O0: mvn w8, w82673; -O0: bl __atomic_compare_exchange2674;2675; -O1-LABEL: atomicrmw_nand_i32_unaligned_release:2676; -O1: and w8, w0, w202677; -O1: mvn w8, w82678; -O1: bl __atomic_compare_exchange2679 %r = atomicrmw nand ptr %ptr, i32 %value release, align 12680 ret i32 %r2681}2682 2683define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {2684; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2685; -O0: and w8, w9, w82686; -O0: mvn w8, w82687; -O0: bl __atomic_compare_exchange2688;2689; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2690; -O1: and w8, w0, w202691; -O1: mvn w8, w82692; -O1: bl __atomic_compare_exchange2693 %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 12694 ret i32 %r2695}2696 2697define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {2698; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2699; -O0: and w8, w9, w82700; -O0: mvn w8, w82701; -O0: bl __atomic_compare_exchange2702;2703; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2704; -O1: and w8, w0, w202705; -O1: mvn w8, w82706; -O1: bl __atomic_compare_exchange2707 %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 12708 ret i32 %r2709}2710 2711define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2712; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2713; -O0: and x8, x9, x82714; -O0: mvn x8, x82715; -O0: bl __atomic_compare_exchange2716;2717; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2718; -O1: and x8, x0, x202719; -O1: mvn x8, x82720; -O1: bl __atomic_compare_exchange2721 %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 12722 ret i64 %r2723}2724 2725define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) {2726; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire:2727; -O0: and x8, x9, x82728; -O0: mvn x8, x82729; -O0: bl __atomic_compare_exchange2730;2731; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire:2732; -O1: and x8, x0, x202733; -O1: mvn x8, x82734; -O1: bl __atomic_compare_exchange2735 %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 12736 ret i64 %r2737}2738 2739define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) {2740; -O0-LABEL: atomicrmw_nand_i64_unaligned_release:2741; -O0: and x8, x9, x82742; -O0: mvn x8, x82743; -O0: bl __atomic_compare_exchange2744;2745; -O1-LABEL: atomicrmw_nand_i64_unaligned_release:2746; -O1: and x8, x0, x202747; -O1: mvn x8, x82748; -O1: bl __atomic_compare_exchange2749 %r = atomicrmw nand ptr %ptr, i64 %value release, align 12750 ret i64 %r2751}2752 2753define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2754; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2755; -O0: and x8, x9, x82756; -O0: mvn x8, x82757; -O0: bl __atomic_compare_exchange2758;2759; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2760; -O1: and x8, x0, x202761; -O1: mvn x8, x82762; -O1: bl __atomic_compare_exchange2763 %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 12764 ret i64 %r2765}2766 2767define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2768; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2769; -O0: and x8, x9, x82770; -O0: mvn x8, x82771; -O0: bl __atomic_compare_exchange2772;2773; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2774; -O1: and x8, x0, x202775; -O1: mvn x8, x82776; -O1: bl __atomic_compare_exchange2777 %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 12778 ret i64 %r2779}2780 2781define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2782; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2783; -O0: and x9, x11, x92784; -O0: and x8, x10, x82785; -O0: mvn x8, x82786; -O0: mvn x9, x92787; -O0: bl __atomic_compare_exchange2788;2789; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2790; -O1: ldp x0, x1, [x0]2791; -O1: and x8, x1, x192792; -O1: and x9, x0, x212793; -O1: mvn x8, x82794; -O1: mvn x9, x92795; -O1: bl __atomic_compare_exchange2796 %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 12797 ret i128 %r2798}2799 2800define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) {2801; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire:2802; -O0: and x9, x11, x92803; -O0: and x8, x10, x82804; -O0: mvn x8, x82805; -O0: mvn x9, x92806; -O0: bl __atomic_compare_exchange2807;2808; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire:2809; -O1: ldp x0, x1, [x0]2810; -O1: and x8, x1, x192811; -O1: and x9, x0, x212812; -O1: mvn x8, x82813; -O1: mvn x9, x92814; -O1: bl __atomic_compare_exchange2815 %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 12816 ret i128 %r2817}2818 2819define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) {2820; -O0-LABEL: atomicrmw_nand_i128_unaligned_release:2821; -O0: and x9, x11, x92822; -O0: and x8, x10, x82823; -O0: mvn x8, x82824; -O0: mvn x9, x92825; -O0: bl __atomic_compare_exchange2826;2827; -O1-LABEL: atomicrmw_nand_i128_unaligned_release:2828; -O1: ldp x0, x1, [x0]2829; -O1: and x8, x1, x192830; -O1: and x9, x0, x212831; -O1: mvn x8, x82832; -O1: mvn x9, x92833; -O1: bl __atomic_compare_exchange2834 %r = atomicrmw nand ptr %ptr, i128 %value release, align 12835 ret i128 %r2836}2837 2838define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2839; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2840; -O0: and x9, x11, x92841; -O0: and x8, x10, x82842; -O0: mvn x8, x82843; -O0: mvn x9, x92844; -O0: bl __atomic_compare_exchange2845;2846; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2847; -O1: ldp x0, x1, [x0]2848; -O1: and x8, x1, x192849; -O1: and x9, x0, x212850; -O1: mvn x8, x82851; -O1: mvn x9, x92852; -O1: bl __atomic_compare_exchange2853 %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 12854 ret i128 %r2855}2856 2857define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2858; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2859; -O0: and x9, x11, x92860; -O0: and x8, x10, x82861; -O0: mvn x8, x82862; -O0: mvn x9, x92863; -O0: bl __atomic_compare_exchange2864;2865; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2866; -O1: ldp x0, x1, [x0]2867; -O1: and x8, x1, x192868; -O1: and x9, x0, x212869; -O1: mvn x8, x82870; -O1: mvn x9, x92871; -O1: bl __atomic_compare_exchange2872 %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 12873 ret i128 %r2874}2875 2876define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) {2877; CHECK-LABEL: atomicrmw_or_i8_aligned_monotonic:2878; CHECK: ldsetb w1, w0, [x0]2879 %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 12880 ret i8 %r2881}2882 2883define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) {2884; CHECK-LABEL: atomicrmw_or_i8_aligned_acquire:2885; CHECK: ldsetab w1, w0, [x0]2886 %r = atomicrmw or ptr %ptr, i8 %value acquire, align 12887 ret i8 %r2888}2889 2890define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) {2891; CHECK-LABEL: atomicrmw_or_i8_aligned_release:2892; CHECK: ldsetlb w1, w0, [x0]2893 %r = atomicrmw or ptr %ptr, i8 %value release, align 12894 ret i8 %r2895}2896 2897define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2898; CHECK-LABEL: atomicrmw_or_i8_aligned_acq_rel:2899; CHECK: ldsetalb w1, w0, [x0]2900 %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 12901 ret i8 %r2902}2903 2904define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2905; CHECK-LABEL: atomicrmw_or_i8_aligned_seq_cst:2906; CHECK: ldsetalb w1, w0, [x0]2907 %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 12908 ret i8 %r2909}2910 2911define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) {2912; CHECK-LABEL: atomicrmw_or_i16_aligned_monotonic:2913; CHECK: ldseth w1, w0, [x0]2914 %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 22915 ret i16 %r2916}2917 2918define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) {2919; CHECK-LABEL: atomicrmw_or_i16_aligned_acquire:2920; CHECK: ldsetah w1, w0, [x0]2921 %r = atomicrmw or ptr %ptr, i16 %value acquire, align 22922 ret i16 %r2923}2924 2925define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) {2926; CHECK-LABEL: atomicrmw_or_i16_aligned_release:2927; CHECK: ldsetlh w1, w0, [x0]2928 %r = atomicrmw or ptr %ptr, i16 %value release, align 22929 ret i16 %r2930}2931 2932define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2933; CHECK-LABEL: atomicrmw_or_i16_aligned_acq_rel:2934; CHECK: ldsetalh w1, w0, [x0]2935 %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 22936 ret i16 %r2937}2938 2939define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2940; CHECK-LABEL: atomicrmw_or_i16_aligned_seq_cst:2941; CHECK: ldsetalh w1, w0, [x0]2942 %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 22943 ret i16 %r2944}2945 2946define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) {2947; CHECK-LABEL: atomicrmw_or_i32_aligned_monotonic:2948; CHECK: ldset w1, w0, [x0]2949 %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 42950 ret i32 %r2951}2952 2953define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) {2954; CHECK-LABEL: atomicrmw_or_i32_aligned_acquire:2955; CHECK: ldseta w1, w0, [x0]2956 %r = atomicrmw or ptr %ptr, i32 %value acquire, align 42957 ret i32 %r2958}2959 2960define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) {2961; CHECK-LABEL: atomicrmw_or_i32_aligned_release:2962; CHECK: ldsetl w1, w0, [x0]2963 %r = atomicrmw or ptr %ptr, i32 %value release, align 42964 ret i32 %r2965}2966 2967define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2968; CHECK-LABEL: atomicrmw_or_i32_aligned_acq_rel:2969; CHECK: ldsetal w1, w0, [x0]2970 %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 42971 ret i32 %r2972}2973 2974define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2975; CHECK-LABEL: atomicrmw_or_i32_aligned_seq_cst:2976; CHECK: ldsetal w1, w0, [x0]2977 %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 42978 ret i32 %r2979}2980 2981define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) {2982; CHECK-LABEL: atomicrmw_or_i64_aligned_monotonic:2983; CHECK: ldset x1, x0, [x0]2984 %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 82985 ret i64 %r2986}2987 2988define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) {2989; CHECK-LABEL: atomicrmw_or_i64_aligned_acquire:2990; CHECK: ldseta x1, x0, [x0]2991 %r = atomicrmw or ptr %ptr, i64 %value acquire, align 82992 ret i64 %r2993}2994 2995define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) {2996; CHECK-LABEL: atomicrmw_or_i64_aligned_release:2997; CHECK: ldsetl x1, x0, [x0]2998 %r = atomicrmw or ptr %ptr, i64 %value release, align 82999 ret i64 %r3000}3001 3002define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3003; CHECK-LABEL: atomicrmw_or_i64_aligned_acq_rel:3004; CHECK: ldsetal x1, x0, [x0]3005 %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 83006 ret i64 %r3007}3008 3009define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3010; CHECK-LABEL: atomicrmw_or_i64_aligned_seq_cst:3011; CHECK: ldsetal x1, x0, [x0]3012 %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 83013 ret i64 %r3014}3015 3016define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) {3017; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic:3018; -O0: orr x2, x11, x123019; -O0: orr x9, x10, x93020; -O0: casp x0, x1, x2, x3, [x8]3021; -O0: subs x11, x9, x113022; -O0: ccmp x8, x10, #0, eq3023;3024; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic:3025; -O1: ldp x4, x5, [x0]3026; -O1: orr x8, x4, x23027; -O1: orr x9, x7, x33028; -O1: casp x4, x5, x8, x9, [x0]3029; -O1: cmp x4, x63030; -O1: ccmp x5, x7, #0, eq3031 %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 163032 ret i128 %r3033}3034 3035define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) {3036; -O0-LABEL: atomicrmw_or_i128_aligned_acquire:3037; -O0: orr x2, x11, x123038; -O0: orr x9, x10, x93039; -O0: caspa x0, x1, x2, x3, [x8]3040; -O0: subs x11, x9, x113041; -O0: ccmp x8, x10, #0, eq3042;3043; -O1-LABEL: atomicrmw_or_i128_aligned_acquire:3044; -O1: ldp x4, x5, [x0]3045; -O1: orr x8, x4, x23046; -O1: orr x9, x7, x33047; -O1: caspa x4, x5, x8, x9, [x0]3048; -O1: cmp x4, x63049; -O1: ccmp x5, x7, #0, eq3050 %r = atomicrmw or ptr %ptr, i128 %value acquire, align 163051 ret i128 %r3052}3053 3054define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) {3055; -O0-LABEL: atomicrmw_or_i128_aligned_release:3056; -O0: orr x2, x11, x123057; -O0: orr x9, x10, x93058; -O0: caspl x0, x1, x2, x3, [x8]3059; -O0: subs x11, x9, x113060; -O0: ccmp x8, x10, #0, eq3061;3062; -O1-LABEL: atomicrmw_or_i128_aligned_release:3063; -O1: ldp x4, x5, [x0]3064; -O1: orr x8, x4, x23065; -O1: orr x9, x7, x33066; -O1: caspl x4, x5, x8, x9, [x0]3067; -O1: cmp x4, x63068; -O1: ccmp x5, x7, #0, eq3069 %r = atomicrmw or ptr %ptr, i128 %value release, align 163070 ret i128 %r3071}3072 3073define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3074; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel:3075; -O0: orr x2, x11, x123076; -O0: orr x9, x10, x93077; -O0: caspal x0, x1, x2, x3, [x8]3078; -O0: subs x11, x9, x113079; -O0: ccmp x8, x10, #0, eq3080;3081; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel:3082; -O1: ldp x4, x5, [x0]3083; -O1: orr x8, x4, x23084; -O1: orr x9, x7, x33085; -O1: caspal x4, x5, x8, x9, [x0]3086; -O1: cmp x4, x63087; -O1: ccmp x5, x7, #0, eq3088 %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 163089 ret i128 %r3090}3091 3092define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3093; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst:3094; -O0: orr x2, x11, x123095; -O0: orr x9, x10, x93096; -O0: caspal x0, x1, x2, x3, [x8]3097; -O0: subs x11, x9, x113098; -O0: ccmp x8, x10, #0, eq3099;3100; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst:3101; -O1: ldp x4, x5, [x0]3102; -O1: orr x8, x4, x23103; -O1: orr x9, x7, x33104; -O1: caspal x4, x5, x8, x9, [x0]3105; -O1: cmp x4, x63106; -O1: ccmp x5, x7, #0, eq3107 %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 163108 ret i128 %r3109}3110 3111define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3112; CHECK-LABEL: atomicrmw_or_i8_unaligned_monotonic:3113; CHECK: ldsetb w1, w0, [x0]3114 %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 13115 ret i8 %r3116}3117 3118define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) {3119; CHECK-LABEL: atomicrmw_or_i8_unaligned_acquire:3120; CHECK: ldsetab w1, w0, [x0]3121 %r = atomicrmw or ptr %ptr, i8 %value acquire, align 13122 ret i8 %r3123}3124 3125define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) {3126; CHECK-LABEL: atomicrmw_or_i8_unaligned_release:3127; CHECK: ldsetlb w1, w0, [x0]3128 %r = atomicrmw or ptr %ptr, i8 %value release, align 13129 ret i8 %r3130}3131 3132define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3133; CHECK-LABEL: atomicrmw_or_i8_unaligned_acq_rel:3134; CHECK: ldsetalb w1, w0, [x0]3135 %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 13136 ret i8 %r3137}3138 3139define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3140; CHECK-LABEL: atomicrmw_or_i8_unaligned_seq_cst:3141; CHECK: ldsetalb w1, w0, [x0]3142 %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 13143 ret i8 %r3144}3145 3146define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3147; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic:3148; -O0: orr w8, w9, w83149; -O0: bl __atomic_compare_exchange3150;3151; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic:3152; -O1: orr w8, w0, w203153; -O1: bl __atomic_compare_exchange3154 %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 13155 ret i16 %r3156}3157 3158define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) {3159; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire:3160; -O0: orr w8, w9, w83161; -O0: bl __atomic_compare_exchange3162;3163; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire:3164; -O1: orr w8, w0, w203165; -O1: bl __atomic_compare_exchange3166 %r = atomicrmw or ptr %ptr, i16 %value acquire, align 13167 ret i16 %r3168}3169 3170define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) {3171; -O0-LABEL: atomicrmw_or_i16_unaligned_release:3172; -O0: orr w8, w9, w83173; -O0: bl __atomic_compare_exchange3174;3175; -O1-LABEL: atomicrmw_or_i16_unaligned_release:3176; -O1: orr w8, w0, w203177; -O1: bl __atomic_compare_exchange3178 %r = atomicrmw or ptr %ptr, i16 %value release, align 13179 ret i16 %r3180}3181 3182define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3183; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3184; -O0: orr w8, w9, w83185; -O0: bl __atomic_compare_exchange3186;3187; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3188; -O1: orr w8, w0, w203189; -O1: bl __atomic_compare_exchange3190 %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 13191 ret i16 %r3192}3193 3194define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3195; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3196; -O0: orr w8, w9, w83197; -O0: bl __atomic_compare_exchange3198;3199; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3200; -O1: orr w8, w0, w203201; -O1: bl __atomic_compare_exchange3202 %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 13203 ret i16 %r3204}3205 3206define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3207; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic:3208; -O0: orr w8, w9, w83209; -O0: bl __atomic_compare_exchange3210;3211; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic:3212; -O1: orr w8, w0, w203213; -O1: bl __atomic_compare_exchange3214 %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 13215 ret i32 %r3216}3217 3218define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) {3219; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire:3220; -O0: orr w8, w9, w83221; -O0: bl __atomic_compare_exchange3222;3223; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire:3224; -O1: orr w8, w0, w203225; -O1: bl __atomic_compare_exchange3226 %r = atomicrmw or ptr %ptr, i32 %value acquire, align 13227 ret i32 %r3228}3229 3230define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) {3231; -O0-LABEL: atomicrmw_or_i32_unaligned_release:3232; -O0: orr w8, w9, w83233; -O0: bl __atomic_compare_exchange3234;3235; -O1-LABEL: atomicrmw_or_i32_unaligned_release:3236; -O1: orr w8, w0, w203237; -O1: bl __atomic_compare_exchange3238 %r = atomicrmw or ptr %ptr, i32 %value release, align 13239 ret i32 %r3240}3241 3242define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3243; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3244; -O0: orr w8, w9, w83245; -O0: bl __atomic_compare_exchange3246;3247; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3248; -O1: orr w8, w0, w203249; -O1: bl __atomic_compare_exchange3250 %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 13251 ret i32 %r3252}3253 3254define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3255; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3256; -O0: orr w8, w9, w83257; -O0: bl __atomic_compare_exchange3258;3259; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3260; -O1: orr w8, w0, w203261; -O1: bl __atomic_compare_exchange3262 %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 13263 ret i32 %r3264}3265 3266define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3267; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic:3268; -O0: orr x8, x9, x83269; -O0: bl __atomic_compare_exchange3270;3271; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic:3272; -O1: orr x8, x0, x203273; -O1: bl __atomic_compare_exchange3274 %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 13275 ret i64 %r3276}3277 3278define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) {3279; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire:3280; -O0: orr x8, x9, x83281; -O0: bl __atomic_compare_exchange3282;3283; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire:3284; -O1: orr x8, x0, x203285; -O1: bl __atomic_compare_exchange3286 %r = atomicrmw or ptr %ptr, i64 %value acquire, align 13287 ret i64 %r3288}3289 3290define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) {3291; -O0-LABEL: atomicrmw_or_i64_unaligned_release:3292; -O0: orr x8, x9, x83293; -O0: bl __atomic_compare_exchange3294;3295; -O1-LABEL: atomicrmw_or_i64_unaligned_release:3296; -O1: orr x8, x0, x203297; -O1: bl __atomic_compare_exchange3298 %r = atomicrmw or ptr %ptr, i64 %value release, align 13299 ret i64 %r3300}3301 3302define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3303; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3304; -O0: orr x8, x9, x83305; -O0: bl __atomic_compare_exchange3306;3307; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3308; -O1: orr x8, x0, x203309; -O1: bl __atomic_compare_exchange3310 %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 13311 ret i64 %r3312}3313 3314define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3315; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3316; -O0: orr x8, x9, x83317; -O0: bl __atomic_compare_exchange3318;3319; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3320; -O1: orr x8, x0, x203321; -O1: bl __atomic_compare_exchange3322 %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 13323 ret i64 %r3324}3325 3326define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3327; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic:3328; -O0: orr x8, x11, x83329; -O0: orr x9, x10, x93330; -O0: bl __atomic_compare_exchange3331;3332; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic:3333; -O1: ldp x0, x1, [x0]3334; -O1: orr x8, x1, x193335; -O1: orr x9, x0, x213336; -O1: bl __atomic_compare_exchange3337 %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 13338 ret i128 %r3339}3340 3341define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) {3342; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire:3343; -O0: orr x8, x11, x83344; -O0: orr x9, x10, x93345; -O0: bl __atomic_compare_exchange3346;3347; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire:3348; -O1: ldp x0, x1, [x0]3349; -O1: orr x8, x1, x193350; -O1: orr x9, x0, x213351; -O1: bl __atomic_compare_exchange3352 %r = atomicrmw or ptr %ptr, i128 %value acquire, align 13353 ret i128 %r3354}3355 3356define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) {3357; -O0-LABEL: atomicrmw_or_i128_unaligned_release:3358; -O0: orr x8, x11, x83359; -O0: orr x9, x10, x93360; -O0: bl __atomic_compare_exchange3361;3362; -O1-LABEL: atomicrmw_or_i128_unaligned_release:3363; -O1: ldp x0, x1, [x0]3364; -O1: orr x8, x1, x193365; -O1: orr x9, x0, x213366; -O1: bl __atomic_compare_exchange3367 %r = atomicrmw or ptr %ptr, i128 %value release, align 13368 ret i128 %r3369}3370 3371define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3372; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3373; -O0: orr x8, x11, x83374; -O0: orr x9, x10, x93375; -O0: bl __atomic_compare_exchange3376;3377; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3378; -O1: ldp x0, x1, [x0]3379; -O1: orr x8, x1, x193380; -O1: orr x9, x0, x213381; -O1: bl __atomic_compare_exchange3382 %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 13383 ret i128 %r3384}3385 3386define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3387; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3388; -O0: orr x8, x11, x83389; -O0: orr x9, x10, x93390; -O0: bl __atomic_compare_exchange3391;3392; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3393; -O1: ldp x0, x1, [x0]3394; -O1: orr x8, x1, x193395; -O1: orr x9, x0, x213396; -O1: bl __atomic_compare_exchange3397 %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 13398 ret i128 %r3399}3400 3401define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) {3402; CHECK-LABEL: atomicrmw_xor_i8_aligned_monotonic:3403; CHECK: ldeorb w1, w0, [x0]3404 %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13405 ret i8 %r3406}3407 3408define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) {3409; CHECK-LABEL: atomicrmw_xor_i8_aligned_acquire:3410; CHECK: ldeorab w1, w0, [x0]3411 %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13412 ret i8 %r3413}3414 3415define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) {3416; CHECK-LABEL: atomicrmw_xor_i8_aligned_release:3417; CHECK: ldeorlb w1, w0, [x0]3418 %r = atomicrmw xor ptr %ptr, i8 %value release, align 13419 ret i8 %r3420}3421 3422define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3423; CHECK-LABEL: atomicrmw_xor_i8_aligned_acq_rel:3424; CHECK: ldeoralb w1, w0, [x0]3425 %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13426 ret i8 %r3427}3428 3429define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3430; CHECK-LABEL: atomicrmw_xor_i8_aligned_seq_cst:3431; CHECK: ldeoralb w1, w0, [x0]3432 %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13433 ret i8 %r3434}3435 3436define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) {3437; CHECK-LABEL: atomicrmw_xor_i16_aligned_monotonic:3438; CHECK: ldeorh w1, w0, [x0]3439 %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 23440 ret i16 %r3441}3442 3443define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) {3444; CHECK-LABEL: atomicrmw_xor_i16_aligned_acquire:3445; CHECK: ldeorah w1, w0, [x0]3446 %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 23447 ret i16 %r3448}3449 3450define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) {3451; CHECK-LABEL: atomicrmw_xor_i16_aligned_release:3452; CHECK: ldeorlh w1, w0, [x0]3453 %r = atomicrmw xor ptr %ptr, i16 %value release, align 23454 ret i16 %r3455}3456 3457define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3458; CHECK-LABEL: atomicrmw_xor_i16_aligned_acq_rel:3459; CHECK: ldeoralh w1, w0, [x0]3460 %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 23461 ret i16 %r3462}3463 3464define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3465; CHECK-LABEL: atomicrmw_xor_i16_aligned_seq_cst:3466; CHECK: ldeoralh w1, w0, [x0]3467 %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 23468 ret i16 %r3469}3470 3471define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) {3472; CHECK-LABEL: atomicrmw_xor_i32_aligned_monotonic:3473; CHECK: ldeor w1, w0, [x0]3474 %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 43475 ret i32 %r3476}3477 3478define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) {3479; CHECK-LABEL: atomicrmw_xor_i32_aligned_acquire:3480; CHECK: ldeora w1, w0, [x0]3481 %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 43482 ret i32 %r3483}3484 3485define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) {3486; CHECK-LABEL: atomicrmw_xor_i32_aligned_release:3487; CHECK: ldeorl w1, w0, [x0]3488 %r = atomicrmw xor ptr %ptr, i32 %value release, align 43489 ret i32 %r3490}3491 3492define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3493; CHECK-LABEL: atomicrmw_xor_i32_aligned_acq_rel:3494; CHECK: ldeoral w1, w0, [x0]3495 %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 43496 ret i32 %r3497}3498 3499define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3500; CHECK-LABEL: atomicrmw_xor_i32_aligned_seq_cst:3501; CHECK: ldeoral w1, w0, [x0]3502 %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 43503 ret i32 %r3504}3505 3506define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) {3507; CHECK-LABEL: atomicrmw_xor_i64_aligned_monotonic:3508; CHECK: ldeor x1, x0, [x0]3509 %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 83510 ret i64 %r3511}3512 3513define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) {3514; CHECK-LABEL: atomicrmw_xor_i64_aligned_acquire:3515; CHECK: ldeora x1, x0, [x0]3516 %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 83517 ret i64 %r3518}3519 3520define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) {3521; CHECK-LABEL: atomicrmw_xor_i64_aligned_release:3522; CHECK: ldeorl x1, x0, [x0]3523 %r = atomicrmw xor ptr %ptr, i64 %value release, align 83524 ret i64 %r3525}3526 3527define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3528; CHECK-LABEL: atomicrmw_xor_i64_aligned_acq_rel:3529; CHECK: ldeoral x1, x0, [x0]3530 %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 83531 ret i64 %r3532}3533 3534define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3535; CHECK-LABEL: atomicrmw_xor_i64_aligned_seq_cst:3536; CHECK: ldeoral x1, x0, [x0]3537 %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 83538 ret i64 %r3539}3540 3541define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) {3542; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic:3543; -O0: eor x2, x11, x123544; -O0: eor x9, x10, x93545; -O0: casp x0, x1, x2, x3, [x8]3546; -O0: subs x11, x9, x113547; -O0: ccmp x8, x10, #0, eq3548;3549; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic:3550; -O1: ldp x4, x5, [x0]3551; -O1: eor x8, x4, x23552; -O1: eor x9, x7, x33553; -O1: casp x4, x5, x8, x9, [x0]3554; -O1: cmp x4, x63555; -O1: ccmp x5, x7, #0, eq3556 %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 163557 ret i128 %r3558}3559 3560define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) {3561; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire:3562; -O0: eor x2, x11, x123563; -O0: eor x9, x10, x93564; -O0: caspa x0, x1, x2, x3, [x8]3565; -O0: subs x11, x9, x113566; -O0: ccmp x8, x10, #0, eq3567;3568; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire:3569; -O1: ldp x4, x5, [x0]3570; -O1: eor x8, x4, x23571; -O1: eor x9, x7, x33572; -O1: caspa x4, x5, x8, x9, [x0]3573; -O1: cmp x4, x63574; -O1: ccmp x5, x7, #0, eq3575 %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 163576 ret i128 %r3577}3578 3579define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) {3580; -O0-LABEL: atomicrmw_xor_i128_aligned_release:3581; -O0: eor x2, x11, x123582; -O0: eor x9, x10, x93583; -O0: caspl x0, x1, x2, x3, [x8]3584; -O0: subs x11, x9, x113585; -O0: ccmp x8, x10, #0, eq3586;3587; -O1-LABEL: atomicrmw_xor_i128_aligned_release:3588; -O1: ldp x4, x5, [x0]3589; -O1: eor x8, x4, x23590; -O1: eor x9, x7, x33591; -O1: caspl x4, x5, x8, x9, [x0]3592; -O1: cmp x4, x63593; -O1: ccmp x5, x7, #0, eq3594 %r = atomicrmw xor ptr %ptr, i128 %value release, align 163595 ret i128 %r3596}3597 3598define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3599; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3600; -O0: eor x2, x11, x123601; -O0: eor x9, x10, x93602; -O0: caspal x0, x1, x2, x3, [x8]3603; -O0: subs x11, x9, x113604; -O0: ccmp x8, x10, #0, eq3605;3606; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3607; -O1: ldp x4, x5, [x0]3608; -O1: eor x8, x4, x23609; -O1: eor x9, x7, x33610; -O1: caspal x4, x5, x8, x9, [x0]3611; -O1: cmp x4, x63612; -O1: ccmp x5, x7, #0, eq3613 %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 163614 ret i128 %r3615}3616 3617define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3618; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3619; -O0: eor x2, x11, x123620; -O0: eor x9, x10, x93621; -O0: caspal x0, x1, x2, x3, [x8]3622; -O0: subs x11, x9, x113623; -O0: ccmp x8, x10, #0, eq3624;3625; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3626; -O1: ldp x4, x5, [x0]3627; -O1: eor x8, x4, x23628; -O1: eor x9, x7, x33629; -O1: caspal x4, x5, x8, x9, [x0]3630; -O1: cmp x4, x63631; -O1: ccmp x5, x7, #0, eq3632 %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 163633 ret i128 %r3634}3635 3636define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3637; CHECK-LABEL: atomicrmw_xor_i8_unaligned_monotonic:3638; CHECK: ldeorb w1, w0, [x0]3639 %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13640 ret i8 %r3641}3642 3643define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) {3644; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acquire:3645; CHECK: ldeorab w1, w0, [x0]3646 %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13647 ret i8 %r3648}3649 3650define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) {3651; CHECK-LABEL: atomicrmw_xor_i8_unaligned_release:3652; CHECK: ldeorlb w1, w0, [x0]3653 %r = atomicrmw xor ptr %ptr, i8 %value release, align 13654 ret i8 %r3655}3656 3657define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3658; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:3659; CHECK: ldeoralb w1, w0, [x0]3660 %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13661 ret i8 %r3662}3663 3664define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3665; CHECK-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:3666; CHECK: ldeoralb w1, w0, [x0]3667 %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13668 ret i8 %r3669}3670 3671define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3672; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3673; -O0: eor w8, w9, w83674; -O0: bl __atomic_compare_exchange3675;3676; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3677; -O1: eor w8, w0, w203678; -O1: bl __atomic_compare_exchange3679 %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 13680 ret i16 %r3681}3682 3683define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) {3684; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire:3685; -O0: eor w8, w9, w83686; -O0: bl __atomic_compare_exchange3687;3688; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire:3689; -O1: eor w8, w0, w203690; -O1: bl __atomic_compare_exchange3691 %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 13692 ret i16 %r3693}3694 3695define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) {3696; -O0-LABEL: atomicrmw_xor_i16_unaligned_release:3697; -O0: eor w8, w9, w83698; -O0: bl __atomic_compare_exchange3699;3700; -O1-LABEL: atomicrmw_xor_i16_unaligned_release:3701; -O1: eor w8, w0, w203702; -O1: bl __atomic_compare_exchange3703 %r = atomicrmw xor ptr %ptr, i16 %value release, align 13704 ret i16 %r3705}3706 3707define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3708; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3709; -O0: eor w8, w9, w83710; -O0: bl __atomic_compare_exchange3711;3712; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3713; -O1: eor w8, w0, w203714; -O1: bl __atomic_compare_exchange3715 %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 13716 ret i16 %r3717}3718 3719define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3720; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3721; -O0: eor w8, w9, w83722; -O0: bl __atomic_compare_exchange3723;3724; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3725; -O1: eor w8, w0, w203726; -O1: bl __atomic_compare_exchange3727 %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 13728 ret i16 %r3729}3730 3731define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3732; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3733; -O0: eor w8, w9, w83734; -O0: bl __atomic_compare_exchange3735;3736; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3737; -O1: eor w8, w0, w203738; -O1: bl __atomic_compare_exchange3739 %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 13740 ret i32 %r3741}3742 3743define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) {3744; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire:3745; -O0: eor w8, w9, w83746; -O0: bl __atomic_compare_exchange3747;3748; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire:3749; -O1: eor w8, w0, w203750; -O1: bl __atomic_compare_exchange3751 %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 13752 ret i32 %r3753}3754 3755define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) {3756; -O0-LABEL: atomicrmw_xor_i32_unaligned_release:3757; -O0: eor w8, w9, w83758; -O0: bl __atomic_compare_exchange3759;3760; -O1-LABEL: atomicrmw_xor_i32_unaligned_release:3761; -O1: eor w8, w0, w203762; -O1: bl __atomic_compare_exchange3763 %r = atomicrmw xor ptr %ptr, i32 %value release, align 13764 ret i32 %r3765}3766 3767define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3768; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3769; -O0: eor w8, w9, w83770; -O0: bl __atomic_compare_exchange3771;3772; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3773; -O1: eor w8, w0, w203774; -O1: bl __atomic_compare_exchange3775 %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 13776 ret i32 %r3777}3778 3779define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3780; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3781; -O0: eor w8, w9, w83782; -O0: bl __atomic_compare_exchange3783;3784; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3785; -O1: eor w8, w0, w203786; -O1: bl __atomic_compare_exchange3787 %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 13788 ret i32 %r3789}3790 3791define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3792; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3793; -O0: eor x8, x9, x83794; -O0: bl __atomic_compare_exchange3795;3796; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3797; -O1: eor x8, x0, x203798; -O1: bl __atomic_compare_exchange3799 %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 13800 ret i64 %r3801}3802 3803define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) {3804; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire:3805; -O0: eor x8, x9, x83806; -O0: bl __atomic_compare_exchange3807;3808; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire:3809; -O1: eor x8, x0, x203810; -O1: bl __atomic_compare_exchange3811 %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 13812 ret i64 %r3813}3814 3815define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) {3816; -O0-LABEL: atomicrmw_xor_i64_unaligned_release:3817; -O0: eor x8, x9, x83818; -O0: bl __atomic_compare_exchange3819;3820; -O1-LABEL: atomicrmw_xor_i64_unaligned_release:3821; -O1: eor x8, x0, x203822; -O1: bl __atomic_compare_exchange3823 %r = atomicrmw xor ptr %ptr, i64 %value release, align 13824 ret i64 %r3825}3826 3827define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3828; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3829; -O0: eor x8, x9, x83830; -O0: bl __atomic_compare_exchange3831;3832; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3833; -O1: eor x8, x0, x203834; -O1: bl __atomic_compare_exchange3835 %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 13836 ret i64 %r3837}3838 3839define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3840; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3841; -O0: eor x8, x9, x83842; -O0: bl __atomic_compare_exchange3843;3844; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3845; -O1: eor x8, x0, x203846; -O1: bl __atomic_compare_exchange3847 %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 13848 ret i64 %r3849}3850 3851define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3852; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3853; -O0: eor x8, x11, x83854; -O0: eor x9, x10, x93855; -O0: bl __atomic_compare_exchange3856;3857; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3858; -O1: ldp x0, x1, [x0]3859; -O1: eor x8, x1, x193860; -O1: eor x9, x0, x213861; -O1: bl __atomic_compare_exchange3862 %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 13863 ret i128 %r3864}3865 3866define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) {3867; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire:3868; -O0: eor x8, x11, x83869; -O0: eor x9, x10, x93870; -O0: bl __atomic_compare_exchange3871;3872; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire:3873; -O1: ldp x0, x1, [x0]3874; -O1: eor x8, x1, x193875; -O1: eor x9, x0, x213876; -O1: bl __atomic_compare_exchange3877 %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 13878 ret i128 %r3879}3880 3881define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) {3882; -O0-LABEL: atomicrmw_xor_i128_unaligned_release:3883; -O0: eor x8, x11, x83884; -O0: eor x9, x10, x93885; -O0: bl __atomic_compare_exchange3886;3887; -O1-LABEL: atomicrmw_xor_i128_unaligned_release: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 release, align 13893 ret i128 %r3894}3895 3896define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3897; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:3898; -O0: eor x8, x11, x83899; -O0: eor x9, x10, x93900; -O0: bl __atomic_compare_exchange3901;3902; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel: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 acq_rel, align 13908 ret i128 %r3909}3910 3911define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3912; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:3913; -O0: eor x8, x11, x83914; -O0: eor x9, x10, x93915; -O0: bl __atomic_compare_exchange3916;3917; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst: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 seq_cst, align 13923 ret i128 %r3924}3925 3926define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) {3927; CHECK-LABEL: atomicrmw_max_i8_aligned_monotonic:3928; CHECK: ldsmaxb w1, w0, [x0]3929 %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 13930 ret i8 %r3931}3932 3933define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) {3934; CHECK-LABEL: atomicrmw_max_i8_aligned_acquire:3935; CHECK: ldsmaxab w1, w0, [x0]3936 %r = atomicrmw max ptr %ptr, i8 %value acquire, align 13937 ret i8 %r3938}3939 3940define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) {3941; CHECK-LABEL: atomicrmw_max_i8_aligned_release:3942; CHECK: ldsmaxlb w1, w0, [x0]3943 %r = atomicrmw max ptr %ptr, i8 %value release, align 13944 ret i8 %r3945}3946 3947define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3948; CHECK-LABEL: atomicrmw_max_i8_aligned_acq_rel:3949; CHECK: ldsmaxalb w1, w0, [x0]3950 %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 13951 ret i8 %r3952}3953 3954define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3955; CHECK-LABEL: atomicrmw_max_i8_aligned_seq_cst:3956; CHECK: ldsmaxalb w1, w0, [x0]3957 %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 13958 ret i8 %r3959}3960 3961define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) {3962; CHECK-LABEL: atomicrmw_max_i16_aligned_monotonic:3963; CHECK: ldsmaxh w1, w0, [x0]3964 %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 23965 ret i16 %r3966}3967 3968define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) {3969; CHECK-LABEL: atomicrmw_max_i16_aligned_acquire:3970; CHECK: ldsmaxah w1, w0, [x0]3971 %r = atomicrmw max ptr %ptr, i16 %value acquire, align 23972 ret i16 %r3973}3974 3975define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) {3976; CHECK-LABEL: atomicrmw_max_i16_aligned_release:3977; CHECK: ldsmaxlh w1, w0, [x0]3978 %r = atomicrmw max ptr %ptr, i16 %value release, align 23979 ret i16 %r3980}3981 3982define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3983; CHECK-LABEL: atomicrmw_max_i16_aligned_acq_rel:3984; CHECK: ldsmaxalh w1, w0, [x0]3985 %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 23986 ret i16 %r3987}3988 3989define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3990; CHECK-LABEL: atomicrmw_max_i16_aligned_seq_cst:3991; CHECK: ldsmaxalh w1, w0, [x0]3992 %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 23993 ret i16 %r3994}3995 3996define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) {3997; CHECK-LABEL: atomicrmw_max_i32_aligned_monotonic:3998; CHECK: ldsmax w1, w0, [x0]3999 %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 44000 ret i32 %r4001}4002 4003define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) {4004; CHECK-LABEL: atomicrmw_max_i32_aligned_acquire:4005; CHECK: ldsmaxa w1, w0, [x0]4006 %r = atomicrmw max ptr %ptr, i32 %value acquire, align 44007 ret i32 %r4008}4009 4010define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) {4011; CHECK-LABEL: atomicrmw_max_i32_aligned_release:4012; CHECK: ldsmaxl w1, w0, [x0]4013 %r = atomicrmw max ptr %ptr, i32 %value release, align 44014 ret i32 %r4015}4016 4017define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4018; CHECK-LABEL: atomicrmw_max_i32_aligned_acq_rel:4019; CHECK: ldsmaxal w1, w0, [x0]4020 %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 44021 ret i32 %r4022}4023 4024define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4025; CHECK-LABEL: atomicrmw_max_i32_aligned_seq_cst:4026; CHECK: ldsmaxal w1, w0, [x0]4027 %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 44028 ret i32 %r4029}4030 4031define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) {4032; CHECK-LABEL: atomicrmw_max_i64_aligned_monotonic:4033; CHECK: ldsmax x1, x0, [x0]4034 %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 84035 ret i64 %r4036}4037 4038define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) {4039; CHECK-LABEL: atomicrmw_max_i64_aligned_acquire:4040; CHECK: ldsmaxa x1, x0, [x0]4041 %r = atomicrmw max ptr %ptr, i64 %value acquire, align 84042 ret i64 %r4043}4044 4045define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) {4046; CHECK-LABEL: atomicrmw_max_i64_aligned_release:4047; CHECK: ldsmaxl x1, x0, [x0]4048 %r = atomicrmw max ptr %ptr, i64 %value release, align 84049 ret i64 %r4050}4051 4052define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4053; CHECK-LABEL: atomicrmw_max_i64_aligned_acq_rel:4054; CHECK: ldsmaxal x1, x0, [x0]4055 %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 84056 ret i64 %r4057}4058 4059define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4060; CHECK-LABEL: atomicrmw_max_i64_aligned_seq_cst:4061; CHECK: ldsmaxal x1, x0, [x0]4062 %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 84063 ret i64 %r4064}4065 4066define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) {4067; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic:4068; -O0: subs x13, x9, x104069; -O0: csel x9, x10, x9, lt4070; -O0: csel x2, x11, x12, lt4071; -O0: casp x0, x1, x2, x3, [x8]4072; -O0: subs x11, x9, x114073; -O0: ccmp x8, x10, #0, eq4074;4075; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic:4076; -O1: ldp x4, x5, [x0]4077; -O1: cmp x3, x74078; -O1: csel x9, x7, x3, lt4079; -O1: csel x8, x4, x2, lt4080; -O1: casp x4, x5, x8, x9, [x0]4081; -O1: cmp x4, x64082; -O1: ccmp x5, x7, #0, eq4083 %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 164084 ret i128 %r4085}4086 4087define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) {4088; -O0-LABEL: atomicrmw_max_i128_aligned_acquire:4089; -O0: subs x13, x9, x104090; -O0: csel x9, x10, x9, lt4091; -O0: csel x2, x11, x12, lt4092; -O0: caspa x0, x1, x2, x3, [x8]4093; -O0: subs x11, x9, x114094; -O0: ccmp x8, x10, #0, eq4095;4096; -O1-LABEL: atomicrmw_max_i128_aligned_acquire:4097; -O1: ldp x4, x5, [x0]4098; -O1: cmp x3, x74099; -O1: csel x9, x7, x3, lt4100; -O1: csel x8, x4, x2, lt4101; -O1: caspa x4, x5, x8, x9, [x0]4102; -O1: cmp x4, x64103; -O1: ccmp x5, x7, #0, eq4104 %r = atomicrmw max ptr %ptr, i128 %value acquire, align 164105 ret i128 %r4106}4107 4108define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) {4109; -O0-LABEL: atomicrmw_max_i128_aligned_release:4110; -O0: subs x13, x9, x104111; -O0: csel x9, x10, x9, lt4112; -O0: csel x2, x11, x12, lt4113; -O0: caspl x0, x1, x2, x3, [x8]4114; -O0: subs x11, x9, x114115; -O0: ccmp x8, x10, #0, eq4116;4117; -O1-LABEL: atomicrmw_max_i128_aligned_release:4118; -O1: ldp x4, x5, [x0]4119; -O1: cmp x3, x74120; -O1: csel x9, x7, x3, lt4121; -O1: csel x8, x4, x2, lt4122; -O1: caspl x4, x5, x8, x9, [x0]4123; -O1: cmp x4, x64124; -O1: ccmp x5, x7, #0, eq4125 %r = atomicrmw max ptr %ptr, i128 %value release, align 164126 ret i128 %r4127}4128 4129define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4130; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel:4131; -O0: subs x13, x9, x104132; -O0: csel x9, x10, x9, lt4133; -O0: csel x2, x11, x12, lt4134; -O0: caspal x0, x1, x2, x3, [x8]4135; -O0: subs x11, x9, x114136; -O0: ccmp x8, x10, #0, eq4137;4138; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel:4139; -O1: ldp x4, x5, [x0]4140; -O1: cmp x3, x74141; -O1: csel x9, x7, x3, lt4142; -O1: csel x8, x4, x2, lt4143; -O1: caspal x4, x5, x8, x9, [x0]4144; -O1: cmp x4, x64145; -O1: ccmp x5, x7, #0, eq4146 %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 164147 ret i128 %r4148}4149 4150define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4151; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst:4152; -O0: subs x13, x9, x104153; -O0: csel x9, x10, x9, lt4154; -O0: csel x2, x11, x12, lt4155; -O0: caspal x0, x1, x2, x3, [x8]4156; -O0: subs x11, x9, x114157; -O0: ccmp x8, x10, #0, eq4158;4159; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst:4160; -O1: ldp x4, x5, [x0]4161; -O1: cmp x3, x74162; -O1: csel x9, x7, x3, lt4163; -O1: csel x8, x4, x2, lt4164; -O1: caspal x4, x5, x8, x9, [x0]4165; -O1: cmp x4, x64166; -O1: ccmp x5, x7, #0, eq4167 %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 164168 ret i128 %r4169}4170 4171define dso_local i8 @atomicrmw_max_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4172; CHECK-LABEL: atomicrmw_max_i8_unaligned_monotonic:4173; CHECK: ldsmaxb w1, w0, [x0]4174 %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 14175 ret i8 %r4176}4177 4178define dso_local i8 @atomicrmw_max_i8_unaligned_acquire(ptr %ptr, i8 %value) {4179; CHECK-LABEL: atomicrmw_max_i8_unaligned_acquire:4180; CHECK: ldsmaxab w1, w0, [x0]4181 %r = atomicrmw max ptr %ptr, i8 %value acquire, align 14182 ret i8 %r4183}4184 4185define dso_local i8 @atomicrmw_max_i8_unaligned_release(ptr %ptr, i8 %value) {4186; CHECK-LABEL: atomicrmw_max_i8_unaligned_release:4187; CHECK: ldsmaxlb w1, w0, [x0]4188 %r = atomicrmw max ptr %ptr, i8 %value release, align 14189 ret i8 %r4190}4191 4192define dso_local i8 @atomicrmw_max_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4193; CHECK-LABEL: atomicrmw_max_i8_unaligned_acq_rel:4194; CHECK: ldsmaxalb w1, w0, [x0]4195 %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 14196 ret i8 %r4197}4198 4199define dso_local i8 @atomicrmw_max_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4200; CHECK-LABEL: atomicrmw_max_i8_unaligned_seq_cst:4201; CHECK: ldsmaxalb w1, w0, [x0]4202 %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 14203 ret i8 %r4204}4205 4206define dso_local i16 @atomicrmw_max_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4207; -O0-LABEL: atomicrmw_max_i16_unaligned_monotonic:4208; -O0: sxth w10, w94209; -O0: subs w10, w10, w8, sxth4210; -O0: csel w8, w9, w8, gt4211; -O0: bl __atomic_compare_exchange4212;4213; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic:4214; -O1: sxth w8, w04215; -O1: cmp w8, w20, sxth4216; -O1: csel w8, w0, w20, gt4217; -O1: bl __atomic_compare_exchange4218 %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 14219 ret i16 %r4220}4221 4222define dso_local i16 @atomicrmw_max_i16_unaligned_acquire(ptr %ptr, i16 %value) {4223; -O0-LABEL: atomicrmw_max_i16_unaligned_acquire:4224; -O0: sxth w10, w94225; -O0: subs w10, w10, w8, sxth4226; -O0: csel w8, w9, w8, gt4227; -O0: bl __atomic_compare_exchange4228;4229; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire:4230; -O1: sxth w8, w04231; -O1: cmp w8, w20, sxth4232; -O1: csel w8, w0, w20, gt4233; -O1: bl __atomic_compare_exchange4234 %r = atomicrmw max ptr %ptr, i16 %value acquire, align 14235 ret i16 %r4236}4237 4238define dso_local i16 @atomicrmw_max_i16_unaligned_release(ptr %ptr, i16 %value) {4239; -O0-LABEL: atomicrmw_max_i16_unaligned_release:4240; -O0: sxth w10, w94241; -O0: subs w10, w10, w8, sxth4242; -O0: csel w8, w9, w8, gt4243; -O0: bl __atomic_compare_exchange4244;4245; -O1-LABEL: atomicrmw_max_i16_unaligned_release:4246; -O1: sxth w8, w04247; -O1: cmp w8, w20, sxth4248; -O1: csel w8, w0, w20, gt4249; -O1: bl __atomic_compare_exchange4250 %r = atomicrmw max ptr %ptr, i16 %value release, align 14251 ret i16 %r4252}4253 4254define dso_local i16 @atomicrmw_max_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4255; -O0-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4256; -O0: sxth w10, w94257; -O0: subs w10, w10, w8, sxth4258; -O0: csel w8, w9, w8, gt4259; -O0: bl __atomic_compare_exchange4260;4261; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4262; -O1: sxth w8, w04263; -O1: cmp w8, w20, sxth4264; -O1: csel w8, w0, w20, gt4265; -O1: bl __atomic_compare_exchange4266 %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 14267 ret i16 %r4268}4269 4270define dso_local i16 @atomicrmw_max_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4271; -O0-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4272; -O0: sxth w10, w94273; -O0: subs w10, w10, w8, sxth4274; -O0: csel w8, w9, w8, gt4275; -O0: bl __atomic_compare_exchange4276;4277; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4278; -O1: sxth w8, w04279; -O1: cmp w8, w20, sxth4280; -O1: csel w8, w0, w20, gt4281; -O1: bl __atomic_compare_exchange4282 %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 14283 ret i16 %r4284}4285 4286define dso_local i32 @atomicrmw_max_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4287; -O0-LABEL: atomicrmw_max_i32_unaligned_monotonic:4288; -O0: subs w10, w9, w84289; -O0: csel w8, w9, w8, gt4290; -O0: bl __atomic_compare_exchange4291;4292; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic:4293; -O1: cmp w0, w204294; -O1: csel w8, w0, w20, gt4295; -O1: bl __atomic_compare_exchange4296 %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 14297 ret i32 %r4298}4299 4300define dso_local i32 @atomicrmw_max_i32_unaligned_acquire(ptr %ptr, i32 %value) {4301; -O0-LABEL: atomicrmw_max_i32_unaligned_acquire:4302; -O0: subs w10, w9, w84303; -O0: csel w8, w9, w8, gt4304; -O0: bl __atomic_compare_exchange4305;4306; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire:4307; -O1: cmp w0, w204308; -O1: csel w8, w0, w20, gt4309; -O1: bl __atomic_compare_exchange4310 %r = atomicrmw max ptr %ptr, i32 %value acquire, align 14311 ret i32 %r4312}4313 4314define dso_local i32 @atomicrmw_max_i32_unaligned_release(ptr %ptr, i32 %value) {4315; -O0-LABEL: atomicrmw_max_i32_unaligned_release:4316; -O0: subs w10, w9, w84317; -O0: csel w8, w9, w8, gt4318; -O0: bl __atomic_compare_exchange4319;4320; -O1-LABEL: atomicrmw_max_i32_unaligned_release:4321; -O1: cmp w0, w204322; -O1: csel w8, w0, w20, gt4323; -O1: bl __atomic_compare_exchange4324 %r = atomicrmw max ptr %ptr, i32 %value release, align 14325 ret i32 %r4326}4327 4328define dso_local i32 @atomicrmw_max_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4329; -O0-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4330; -O0: subs w10, w9, w84331; -O0: csel w8, w9, w8, gt4332; -O0: bl __atomic_compare_exchange4333;4334; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4335; -O1: cmp w0, w204336; -O1: csel w8, w0, w20, gt4337; -O1: bl __atomic_compare_exchange4338 %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 14339 ret i32 %r4340}4341 4342define dso_local i32 @atomicrmw_max_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4343; -O0-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4344; -O0: subs w10, w9, w84345; -O0: csel w8, w9, w8, gt4346; -O0: bl __atomic_compare_exchange4347;4348; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4349; -O1: cmp w0, w204350; -O1: csel w8, w0, w20, gt4351; -O1: bl __atomic_compare_exchange4352 %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 14353 ret i32 %r4354}4355 4356define dso_local i64 @atomicrmw_max_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4357; -O0-LABEL: atomicrmw_max_i64_unaligned_monotonic:4358; -O0: subs x10, x9, x84359; -O0: csel x8, x9, x8, gt4360; -O0: bl __atomic_compare_exchange4361;4362; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic:4363; -O1: cmp x0, x204364; -O1: csel x8, x0, x20, gt4365; -O1: bl __atomic_compare_exchange4366 %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 14367 ret i64 %r4368}4369 4370define dso_local i64 @atomicrmw_max_i64_unaligned_acquire(ptr %ptr, i64 %value) {4371; -O0-LABEL: atomicrmw_max_i64_unaligned_acquire:4372; -O0: subs x10, x9, x84373; -O0: csel x8, x9, x8, gt4374; -O0: bl __atomic_compare_exchange4375;4376; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire:4377; -O1: cmp x0, x204378; -O1: csel x8, x0, x20, gt4379; -O1: bl __atomic_compare_exchange4380 %r = atomicrmw max ptr %ptr, i64 %value acquire, align 14381 ret i64 %r4382}4383 4384define dso_local i64 @atomicrmw_max_i64_unaligned_release(ptr %ptr, i64 %value) {4385; -O0-LABEL: atomicrmw_max_i64_unaligned_release:4386; -O0: subs x10, x9, x84387; -O0: csel x8, x9, x8, gt4388; -O0: bl __atomic_compare_exchange4389;4390; -O1-LABEL: atomicrmw_max_i64_unaligned_release:4391; -O1: cmp x0, x204392; -O1: csel x8, x0, x20, gt4393; -O1: bl __atomic_compare_exchange4394 %r = atomicrmw max ptr %ptr, i64 %value release, align 14395 ret i64 %r4396}4397 4398define dso_local i64 @atomicrmw_max_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4399; -O0-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4400; -O0: subs x10, x9, x84401; -O0: csel x8, x9, x8, gt4402; -O0: bl __atomic_compare_exchange4403;4404; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4405; -O1: cmp x0, x204406; -O1: csel x8, x0, x20, gt4407; -O1: bl __atomic_compare_exchange4408 %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 14409 ret i64 %r4410}4411 4412define dso_local i64 @atomicrmw_max_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4413; -O0-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4414; -O0: subs x10, x9, x84415; -O0: csel x8, x9, x8, gt4416; -O0: bl __atomic_compare_exchange4417;4418; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4419; -O1: cmp x0, x204420; -O1: csel x8, x0, x20, gt4421; -O1: bl __atomic_compare_exchange4422 %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 14423 ret i64 %r4424}4425 4426define dso_local i128 @atomicrmw_max_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4427; -O0-LABEL: atomicrmw_max_i128_unaligned_monotonic:4428; -O0: subs x12, x9, x104429; -O0: csel x8, x11, x8, lt4430; -O0: csel x9, x10, x9, lt4431; -O0: bl __atomic_compare_exchange4432;4433; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic:4434; -O1: ldp x0, x1, [x0]4435; -O1: cmp x19, x14436; -O1: csel x8, x1, x19, lt4437; -O1: csel x9, x0, x21, lt4438; -O1: bl __atomic_compare_exchange4439 %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 14440 ret i128 %r4441}4442 4443define dso_local i128 @atomicrmw_max_i128_unaligned_acquire(ptr %ptr, i128 %value) {4444; -O0-LABEL: atomicrmw_max_i128_unaligned_acquire:4445; -O0: subs x12, x9, x104446; -O0: csel x8, x11, x8, lt4447; -O0: csel x9, x10, x9, lt4448; -O0: bl __atomic_compare_exchange4449;4450; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire:4451; -O1: ldp x0, x1, [x0]4452; -O1: cmp x19, x14453; -O1: csel x8, x1, x19, lt4454; -O1: csel x9, x0, x21, lt4455; -O1: bl __atomic_compare_exchange4456 %r = atomicrmw max ptr %ptr, i128 %value acquire, align 14457 ret i128 %r4458}4459 4460define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) {4461; -O0-LABEL: atomicrmw_max_i128_unaligned_release:4462; -O0: subs x12, x9, x104463; -O0: csel x8, x11, x8, lt4464; -O0: csel x9, x10, x9, lt4465; -O0: bl __atomic_compare_exchange4466;4467; -O1-LABEL: atomicrmw_max_i128_unaligned_release:4468; -O1: ldp x0, x1, [x0]4469; -O1: cmp x19, x14470; -O1: csel x8, x1, x19, lt4471; -O1: csel x9, x0, x21, lt4472; -O1: bl __atomic_compare_exchange4473 %r = atomicrmw max ptr %ptr, i128 %value release, align 14474 ret i128 %r4475}4476 4477define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4478; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4479; -O0: subs x12, x9, x104480; -O0: csel x8, x11, x8, lt4481; -O0: csel x9, x10, x9, lt4482; -O0: bl __atomic_compare_exchange4483;4484; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4485; -O1: ldp x0, x1, [x0]4486; -O1: cmp x19, x14487; -O1: csel x8, x1, x19, lt4488; -O1: csel x9, x0, x21, lt4489; -O1: bl __atomic_compare_exchange4490 %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 14491 ret i128 %r4492}4493 4494define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4495; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4496; -O0: subs x12, x9, x104497; -O0: csel x8, x11, x8, lt4498; -O0: csel x9, x10, x9, lt4499; -O0: bl __atomic_compare_exchange4500;4501; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4502; -O1: ldp x0, x1, [x0]4503; -O1: cmp x19, x14504; -O1: csel x8, x1, x19, lt4505; -O1: csel x9, x0, x21, lt4506; -O1: bl __atomic_compare_exchange4507 %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 14508 ret i128 %r4509}4510 4511define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) {4512; CHECK-LABEL: atomicrmw_min_i8_aligned_monotonic:4513; CHECK: ldsminb w1, w0, [x0]4514 %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14515 ret i8 %r4516}4517 4518define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) {4519; CHECK-LABEL: atomicrmw_min_i8_aligned_acquire:4520; CHECK: ldsminab w1, w0, [x0]4521 %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14522 ret i8 %r4523}4524 4525define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) {4526; CHECK-LABEL: atomicrmw_min_i8_aligned_release:4527; CHECK: ldsminlb w1, w0, [x0]4528 %r = atomicrmw min ptr %ptr, i8 %value release, align 14529 ret i8 %r4530}4531 4532define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) {4533; CHECK-LABEL: atomicrmw_min_i8_aligned_acq_rel:4534; CHECK: ldsminalb w1, w0, [x0]4535 %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 14536 ret i8 %r4537}4538 4539define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) {4540; CHECK-LABEL: atomicrmw_min_i8_aligned_seq_cst:4541; CHECK: ldsminalb w1, w0, [x0]4542 %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 14543 ret i8 %r4544}4545 4546define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) {4547; CHECK-LABEL: atomicrmw_min_i16_aligned_monotonic:4548; CHECK: ldsminh w1, w0, [x0]4549 %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 24550 ret i16 %r4551}4552 4553define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) {4554; CHECK-LABEL: atomicrmw_min_i16_aligned_acquire:4555; CHECK: ldsminah w1, w0, [x0]4556 %r = atomicrmw min ptr %ptr, i16 %value acquire, align 24557 ret i16 %r4558}4559 4560define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) {4561; CHECK-LABEL: atomicrmw_min_i16_aligned_release:4562; CHECK: ldsminlh w1, w0, [x0]4563 %r = atomicrmw min ptr %ptr, i16 %value release, align 24564 ret i16 %r4565}4566 4567define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) {4568; CHECK-LABEL: atomicrmw_min_i16_aligned_acq_rel:4569; CHECK: ldsminalh w1, w0, [x0]4570 %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 24571 ret i16 %r4572}4573 4574define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) {4575; CHECK-LABEL: atomicrmw_min_i16_aligned_seq_cst:4576; CHECK: ldsminalh w1, w0, [x0]4577 %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 24578 ret i16 %r4579}4580 4581define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) {4582; CHECK-LABEL: atomicrmw_min_i32_aligned_monotonic:4583; CHECK: ldsmin w1, w0, [x0]4584 %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 44585 ret i32 %r4586}4587 4588define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) {4589; CHECK-LABEL: atomicrmw_min_i32_aligned_acquire:4590; CHECK: ldsmina w1, w0, [x0]4591 %r = atomicrmw min ptr %ptr, i32 %value acquire, align 44592 ret i32 %r4593}4594 4595define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) {4596; CHECK-LABEL: atomicrmw_min_i32_aligned_release:4597; CHECK: ldsminl w1, w0, [x0]4598 %r = atomicrmw min ptr %ptr, i32 %value release, align 44599 ret i32 %r4600}4601 4602define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4603; CHECK-LABEL: atomicrmw_min_i32_aligned_acq_rel:4604; CHECK: ldsminal w1, w0, [x0]4605 %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 44606 ret i32 %r4607}4608 4609define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4610; CHECK-LABEL: atomicrmw_min_i32_aligned_seq_cst:4611; CHECK: ldsminal w1, w0, [x0]4612 %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 44613 ret i32 %r4614}4615 4616define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) {4617; CHECK-LABEL: atomicrmw_min_i64_aligned_monotonic:4618; CHECK: ldsmin x1, x0, [x0]4619 %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 84620 ret i64 %r4621}4622 4623define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) {4624; CHECK-LABEL: atomicrmw_min_i64_aligned_acquire:4625; CHECK: ldsmina x1, x0, [x0]4626 %r = atomicrmw min ptr %ptr, i64 %value acquire, align 84627 ret i64 %r4628}4629 4630define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) {4631; CHECK-LABEL: atomicrmw_min_i64_aligned_release:4632; CHECK: ldsminl x1, x0, [x0]4633 %r = atomicrmw min ptr %ptr, i64 %value release, align 84634 ret i64 %r4635}4636 4637define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4638; CHECK-LABEL: atomicrmw_min_i64_aligned_acq_rel:4639; CHECK: ldsminal x1, x0, [x0]4640 %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 84641 ret i64 %r4642}4643 4644define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4645; CHECK-LABEL: atomicrmw_min_i64_aligned_seq_cst:4646; CHECK: ldsminal x1, x0, [x0]4647 %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 84648 ret i64 %r4649}4650 4651define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) {4652; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic:4653; -O0: subs x13, x9, x104654; -O0: csel x9, x10, x9, ge4655; -O0: csel x2, x11, x12, ge4656; -O0: casp x0, x1, x2, x3, [x8]4657; -O0: subs x11, x9, x114658; -O0: ccmp x8, x10, #0, eq4659;4660; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic:4661; -O1: ldp x4, x5, [x0]4662; -O1: cmp x3, x74663; -O1: csel x9, x7, x3, ge4664; -O1: csel x8, x4, x2, ge4665; -O1: casp x4, x5, x8, x9, [x0]4666; -O1: cmp x4, x64667; -O1: ccmp x5, x7, #0, eq4668 %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 164669 ret i128 %r4670}4671 4672define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) {4673; -O0-LABEL: atomicrmw_min_i128_aligned_acquire:4674; -O0: subs x13, x9, x104675; -O0: csel x9, x10, x9, ge4676; -O0: csel x2, x11, x12, ge4677; -O0: caspa x0, x1, x2, x3, [x8]4678; -O0: subs x11, x9, x114679; -O0: ccmp x8, x10, #0, eq4680;4681; -O1-LABEL: atomicrmw_min_i128_aligned_acquire:4682; -O1: ldp x4, x5, [x0]4683; -O1: cmp x3, x74684; -O1: csel x9, x7, x3, ge4685; -O1: csel x8, x4, x2, ge4686; -O1: caspa x4, x5, x8, x9, [x0]4687; -O1: cmp x4, x64688; -O1: ccmp x5, x7, #0, eq4689 %r = atomicrmw min ptr %ptr, i128 %value acquire, align 164690 ret i128 %r4691}4692 4693define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) {4694; -O0-LABEL: atomicrmw_min_i128_aligned_release:4695; -O0: subs x13, x9, x104696; -O0: csel x9, x10, x9, ge4697; -O0: csel x2, x11, x12, ge4698; -O0: caspl x0, x1, x2, x3, [x8]4699; -O0: subs x11, x9, x114700; -O0: ccmp x8, x10, #0, eq4701;4702; -O1-LABEL: atomicrmw_min_i128_aligned_release:4703; -O1: ldp x4, x5, [x0]4704; -O1: cmp x3, x74705; -O1: csel x9, x7, x3, ge4706; -O1: csel x8, x4, x2, ge4707; -O1: caspl x4, x5, x8, x9, [x0]4708; -O1: cmp x4, x64709; -O1: ccmp x5, x7, #0, eq4710 %r = atomicrmw min ptr %ptr, i128 %value release, align 164711 ret i128 %r4712}4713 4714define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4715; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel:4716; -O0: subs x13, x9, x104717; -O0: csel x9, x10, x9, ge4718; -O0: csel x2, x11, x12, ge4719; -O0: caspal x0, x1, x2, x3, [x8]4720; -O0: subs x11, x9, x114721; -O0: ccmp x8, x10, #0, eq4722;4723; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel:4724; -O1: ldp x4, x5, [x0]4725; -O1: cmp x3, x74726; -O1: csel x9, x7, x3, ge4727; -O1: csel x8, x4, x2, ge4728; -O1: caspal x4, x5, x8, x9, [x0]4729; -O1: cmp x4, x64730; -O1: ccmp x5, x7, #0, eq4731 %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 164732 ret i128 %r4733}4734 4735define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4736; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst:4737; -O0: subs x13, x9, x104738; -O0: csel x9, x10, x9, ge4739; -O0: csel x2, x11, x12, ge4740; -O0: caspal x0, x1, x2, x3, [x8]4741; -O0: subs x11, x9, x114742; -O0: ccmp x8, x10, #0, eq4743;4744; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst:4745; -O1: ldp x4, x5, [x0]4746; -O1: cmp x3, x74747; -O1: csel x9, x7, x3, ge4748; -O1: csel x8, x4, x2, ge4749; -O1: caspal x4, x5, x8, x9, [x0]4750; -O1: cmp x4, x64751; -O1: ccmp x5, x7, #0, eq4752 %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 164753 ret i128 %r4754}4755 4756define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4757; CHECK-LABEL: atomicrmw_min_i8_unaligned_monotonic:4758; CHECK: ldsminb w1, w0, [x0]4759 %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14760 ret i8 %r4761}4762 4763define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) {4764; CHECK-LABEL: atomicrmw_min_i8_unaligned_acquire:4765; CHECK: ldsminab w1, w0, [x0]4766 %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14767 ret i8 %r4768}4769 4770define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) {4771; CHECK-LABEL: atomicrmw_min_i8_unaligned_release:4772; CHECK: ldsminlb w1, w0, [x0]4773 %r = atomicrmw min ptr %ptr, i8 %value release, align 14774 ret i8 %r4775}4776 4777define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4778; CHECK-LABEL: atomicrmw_min_i8_unaligned_acq_rel:4779; CHECK: ldsminalb w1, w0, [x0]4780 %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 14781 ret i8 %r4782}4783 4784define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4785; CHECK-LABEL: atomicrmw_min_i8_unaligned_seq_cst:4786; CHECK: ldsminalb w1, w0, [x0]4787 %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 14788 ret i8 %r4789}4790 4791define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4792; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic:4793; -O0: sxth w10, w94794; -O0: subs w10, w10, w8, sxth4795; -O0: csel w8, w9, w8, le4796; -O0: bl __atomic_compare_exchange4797;4798; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic:4799; -O1: sxth w8, w04800; -O1: cmp w8, w20, sxth4801; -O1: csel w8, w0, w20, le4802; -O1: bl __atomic_compare_exchange4803 %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 14804 ret i16 %r4805}4806 4807define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) {4808; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire:4809; -O0: sxth w10, w94810; -O0: subs w10, w10, w8, sxth4811; -O0: csel w8, w9, w8, le4812; -O0: bl __atomic_compare_exchange4813;4814; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire:4815; -O1: sxth w8, w04816; -O1: cmp w8, w20, sxth4817; -O1: csel w8, w0, w20, le4818; -O1: bl __atomic_compare_exchange4819 %r = atomicrmw min ptr %ptr, i16 %value acquire, align 14820 ret i16 %r4821}4822 4823define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) {4824; -O0-LABEL: atomicrmw_min_i16_unaligned_release:4825; -O0: sxth w10, w94826; -O0: subs w10, w10, w8, sxth4827; -O0: csel w8, w9, w8, le4828; -O0: bl __atomic_compare_exchange4829;4830; -O1-LABEL: atomicrmw_min_i16_unaligned_release:4831; -O1: sxth w8, w04832; -O1: cmp w8, w20, sxth4833; -O1: csel w8, w0, w20, le4834; -O1: bl __atomic_compare_exchange4835 %r = atomicrmw min ptr %ptr, i16 %value release, align 14836 ret i16 %r4837}4838 4839define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4840; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel:4841; -O0: sxth w10, w94842; -O0: subs w10, w10, w8, sxth4843; -O0: csel w8, w9, w8, le4844; -O0: bl __atomic_compare_exchange4845;4846; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel:4847; -O1: sxth w8, w04848; -O1: cmp w8, w20, sxth4849; -O1: csel w8, w0, w20, le4850; -O1: bl __atomic_compare_exchange4851 %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 14852 ret i16 %r4853}4854 4855define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4856; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst:4857; -O0: sxth w10, w94858; -O0: subs w10, w10, w8, sxth4859; -O0: csel w8, w9, w8, le4860; -O0: bl __atomic_compare_exchange4861;4862; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst:4863; -O1: sxth w8, w04864; -O1: cmp w8, w20, sxth4865; -O1: csel w8, w0, w20, le4866; -O1: bl __atomic_compare_exchange4867 %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 14868 ret i16 %r4869}4870 4871define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4872; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic:4873; -O0: subs w10, w9, w84874; -O0: csel w8, w9, w8, le4875; -O0: bl __atomic_compare_exchange4876;4877; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic:4878; -O1: cmp w0, w204879; -O1: csel w8, w0, w20, le4880; -O1: bl __atomic_compare_exchange4881 %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 14882 ret i32 %r4883}4884 4885define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) {4886; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire:4887; -O0: subs w10, w9, w84888; -O0: csel w8, w9, w8, le4889; -O0: bl __atomic_compare_exchange4890;4891; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire:4892; -O1: cmp w0, w204893; -O1: csel w8, w0, w20, le4894; -O1: bl __atomic_compare_exchange4895 %r = atomicrmw min ptr %ptr, i32 %value acquire, align 14896 ret i32 %r4897}4898 4899define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) {4900; -O0-LABEL: atomicrmw_min_i32_unaligned_release:4901; -O0: subs w10, w9, w84902; -O0: csel w8, w9, w8, le4903; -O0: bl __atomic_compare_exchange4904;4905; -O1-LABEL: atomicrmw_min_i32_unaligned_release:4906; -O1: cmp w0, w204907; -O1: csel w8, w0, w20, le4908; -O1: bl __atomic_compare_exchange4909 %r = atomicrmw min ptr %ptr, i32 %value release, align 14910 ret i32 %r4911}4912 4913define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4914; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel:4915; -O0: subs w10, w9, w84916; -O0: csel w8, w9, w8, le4917; -O0: bl __atomic_compare_exchange4918;4919; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel:4920; -O1: cmp w0, w204921; -O1: csel w8, w0, w20, le4922; -O1: bl __atomic_compare_exchange4923 %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 14924 ret i32 %r4925}4926 4927define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4928; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst:4929; -O0: subs w10, w9, w84930; -O0: csel w8, w9, w8, le4931; -O0: bl __atomic_compare_exchange4932;4933; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst:4934; -O1: cmp w0, w204935; -O1: csel w8, w0, w20, le4936; -O1: bl __atomic_compare_exchange4937 %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 14938 ret i32 %r4939}4940 4941define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4942; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic:4943; -O0: subs x10, x9, x84944; -O0: csel x8, x9, x8, le4945; -O0: bl __atomic_compare_exchange4946;4947; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic:4948; -O1: cmp x0, x204949; -O1: csel x8, x0, x20, le4950; -O1: bl __atomic_compare_exchange4951 %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 14952 ret i64 %r4953}4954 4955define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) {4956; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire:4957; -O0: subs x10, x9, x84958; -O0: csel x8, x9, x8, le4959; -O0: bl __atomic_compare_exchange4960;4961; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire:4962; -O1: cmp x0, x204963; -O1: csel x8, x0, x20, le4964; -O1: bl __atomic_compare_exchange4965 %r = atomicrmw min ptr %ptr, i64 %value acquire, align 14966 ret i64 %r4967}4968 4969define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) {4970; -O0-LABEL: atomicrmw_min_i64_unaligned_release:4971; -O0: subs x10, x9, x84972; -O0: csel x8, x9, x8, le4973; -O0: bl __atomic_compare_exchange4974;4975; -O1-LABEL: atomicrmw_min_i64_unaligned_release:4976; -O1: cmp x0, x204977; -O1: csel x8, x0, x20, le4978; -O1: bl __atomic_compare_exchange4979 %r = atomicrmw min ptr %ptr, i64 %value release, align 14980 ret i64 %r4981}4982 4983define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4984; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel:4985; -O0: subs x10, x9, x84986; -O0: csel x8, x9, x8, le4987; -O0: bl __atomic_compare_exchange4988;4989; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel:4990; -O1: cmp x0, x204991; -O1: csel x8, x0, x20, le4992; -O1: bl __atomic_compare_exchange4993 %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 14994 ret i64 %r4995}4996 4997define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4998; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst:4999; -O0: subs x10, x9, x85000; -O0: csel x8, x9, x8, le5001; -O0: bl __atomic_compare_exchange5002;5003; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst:5004; -O1: cmp x0, x205005; -O1: csel x8, x0, x20, le5006; -O1: bl __atomic_compare_exchange5007 %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 15008 ret i64 %r5009}5010 5011define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5012; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic:5013; -O0: subs x12, x9, x105014; -O0: csel x8, x11, x8, ge5015; -O0: csel x9, x10, x9, ge5016; -O0: bl __atomic_compare_exchange5017;5018; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic:5019; -O1: ldp x0, x1, [x0]5020; -O1: cmp x19, x15021; -O1: csel x8, x1, x19, ge5022; -O1: csel x9, x0, x21, ge5023; -O1: bl __atomic_compare_exchange5024 %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 15025 ret i128 %r5026}5027 5028define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) {5029; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire:5030; -O0: subs x12, x9, x105031; -O0: csel x8, x11, x8, ge5032; -O0: csel x9, x10, x9, ge5033; -O0: bl __atomic_compare_exchange5034;5035; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire:5036; -O1: ldp x0, x1, [x0]5037; -O1: cmp x19, x15038; -O1: csel x8, x1, x19, ge5039; -O1: csel x9, x0, x21, ge5040; -O1: bl __atomic_compare_exchange5041 %r = atomicrmw min ptr %ptr, i128 %value acquire, align 15042 ret i128 %r5043}5044 5045define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) {5046; -O0-LABEL: atomicrmw_min_i128_unaligned_release:5047; -O0: subs x12, x9, x105048; -O0: csel x8, x11, x8, ge5049; -O0: csel x9, x10, x9, ge5050; -O0: bl __atomic_compare_exchange5051;5052; -O1-LABEL: atomicrmw_min_i128_unaligned_release:5053; -O1: ldp x0, x1, [x0]5054; -O1: cmp x19, x15055; -O1: csel x8, x1, x19, ge5056; -O1: csel x9, x0, x21, ge5057; -O1: bl __atomic_compare_exchange5058 %r = atomicrmw min ptr %ptr, i128 %value release, align 15059 ret i128 %r5060}5061 5062define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5063; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5064; -O0: subs x12, x9, x105065; -O0: csel x8, x11, x8, ge5066; -O0: csel x9, x10, x9, ge5067; -O0: bl __atomic_compare_exchange5068;5069; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5070; -O1: ldp x0, x1, [x0]5071; -O1: cmp x19, x15072; -O1: csel x8, x1, x19, ge5073; -O1: csel x9, x0, x21, ge5074; -O1: bl __atomic_compare_exchange5075 %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 15076 ret i128 %r5077}5078 5079define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5080; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5081; -O0: subs x12, x9, x105082; -O0: csel x8, x11, x8, ge5083; -O0: csel x9, x10, x9, ge5084; -O0: bl __atomic_compare_exchange5085;5086; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5087; -O1: ldp x0, x1, [x0]5088; -O1: cmp x19, x15089; -O1: csel x8, x1, x19, ge5090; -O1: csel x9, x0, x21, ge5091; -O1: bl __atomic_compare_exchange5092 %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 15093 ret i128 %r5094}5095 5096define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) {5097; CHECK-LABEL: atomicrmw_umax_i8_aligned_monotonic:5098; CHECK: ldumaxb w1, w0, [x0]5099 %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15100 ret i8 %r5101}5102 5103define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) {5104; CHECK-LABEL: atomicrmw_umax_i8_aligned_acquire:5105; CHECK: ldumaxab w1, w0, [x0]5106 %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15107 ret i8 %r5108}5109 5110define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) {5111; CHECK-LABEL: atomicrmw_umax_i8_aligned_release:5112; CHECK: ldumaxlb w1, w0, [x0]5113 %r = atomicrmw umax ptr %ptr, i8 %value release, align 15114 ret i8 %r5115}5116 5117define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5118; CHECK-LABEL: atomicrmw_umax_i8_aligned_acq_rel:5119; CHECK: ldumaxalb w1, w0, [x0]5120 %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15121 ret i8 %r5122}5123 5124define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5125; CHECK-LABEL: atomicrmw_umax_i8_aligned_seq_cst:5126; CHECK: ldumaxalb w1, w0, [x0]5127 %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15128 ret i8 %r5129}5130 5131define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) {5132; CHECK-LABEL: atomicrmw_umax_i16_aligned_monotonic:5133; CHECK: ldumaxh w1, w0, [x0]5134 %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 25135 ret i16 %r5136}5137 5138define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) {5139; CHECK-LABEL: atomicrmw_umax_i16_aligned_acquire:5140; CHECK: ldumaxah w1, w0, [x0]5141 %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 25142 ret i16 %r5143}5144 5145define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) {5146; CHECK-LABEL: atomicrmw_umax_i16_aligned_release:5147; CHECK: ldumaxlh w1, w0, [x0]5148 %r = atomicrmw umax ptr %ptr, i16 %value release, align 25149 ret i16 %r5150}5151 5152define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5153; CHECK-LABEL: atomicrmw_umax_i16_aligned_acq_rel:5154; CHECK: ldumaxalh w1, w0, [x0]5155 %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 25156 ret i16 %r5157}5158 5159define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5160; CHECK-LABEL: atomicrmw_umax_i16_aligned_seq_cst:5161; CHECK: ldumaxalh w1, w0, [x0]5162 %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 25163 ret i16 %r5164}5165 5166define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) {5167; CHECK-LABEL: atomicrmw_umax_i32_aligned_monotonic:5168; CHECK: ldumax w1, w0, [x0]5169 %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 45170 ret i32 %r5171}5172 5173define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) {5174; CHECK-LABEL: atomicrmw_umax_i32_aligned_acquire:5175; CHECK: ldumaxa w1, w0, [x0]5176 %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 45177 ret i32 %r5178}5179 5180define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) {5181; CHECK-LABEL: atomicrmw_umax_i32_aligned_release:5182; CHECK: ldumaxl w1, w0, [x0]5183 %r = atomicrmw umax ptr %ptr, i32 %value release, align 45184 ret i32 %r5185}5186 5187define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5188; CHECK-LABEL: atomicrmw_umax_i32_aligned_acq_rel:5189; CHECK: ldumaxal w1, w0, [x0]5190 %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 45191 ret i32 %r5192}5193 5194define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5195; CHECK-LABEL: atomicrmw_umax_i32_aligned_seq_cst:5196; CHECK: ldumaxal w1, w0, [x0]5197 %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 45198 ret i32 %r5199}5200 5201define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) {5202; CHECK-LABEL: atomicrmw_umax_i64_aligned_monotonic:5203; CHECK: ldumax x1, x0, [x0]5204 %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 85205 ret i64 %r5206}5207 5208define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) {5209; CHECK-LABEL: atomicrmw_umax_i64_aligned_acquire:5210; CHECK: ldumaxa x1, x0, [x0]5211 %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 85212 ret i64 %r5213}5214 5215define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) {5216; CHECK-LABEL: atomicrmw_umax_i64_aligned_release:5217; CHECK: ldumaxl x1, x0, [x0]5218 %r = atomicrmw umax ptr %ptr, i64 %value release, align 85219 ret i64 %r5220}5221 5222define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5223; CHECK-LABEL: atomicrmw_umax_i64_aligned_acq_rel:5224; CHECK: ldumaxal x1, x0, [x0]5225 %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 85226 ret i64 %r5227}5228 5229define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5230; CHECK-LABEL: atomicrmw_umax_i64_aligned_seq_cst:5231; CHECK: ldumaxal x1, x0, [x0]5232 %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 85233 ret i64 %r5234}5235 5236define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) {5237; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic:5238; -O0: subs x13, x9, x105239; -O0: csel x9, x10, x9, lo5240; -O0: csel x2, x11, x12, lo5241; -O0: casp x0, x1, x2, x3, [x8]5242; -O0: subs x11, x9, x115243; -O0: ccmp x8, x10, #0, eq5244;5245; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic:5246; -O1: ldp x4, x5, [x0]5247; -O1: cmp x3, x75248; -O1: csel x9, x7, x3, lo5249; -O1: csel x8, x4, x2, lo5250; -O1: casp x4, x5, x8, x9, [x0]5251; -O1: cmp x4, x65252; -O1: ccmp x5, x7, #0, eq5253 %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 165254 ret i128 %r5255}5256 5257define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) {5258; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire:5259; -O0: subs x13, x9, x105260; -O0: csel x9, x10, x9, lo5261; -O0: csel x2, x11, x12, lo5262; -O0: caspa x0, x1, x2, x3, [x8]5263; -O0: subs x11, x9, x115264; -O0: ccmp x8, x10, #0, eq5265;5266; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire:5267; -O1: ldp x4, x5, [x0]5268; -O1: cmp x3, x75269; -O1: csel x9, x7, x3, lo5270; -O1: csel x8, x4, x2, lo5271; -O1: caspa x4, x5, x8, x9, [x0]5272; -O1: cmp x4, x65273; -O1: ccmp x5, x7, #0, eq5274 %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 165275 ret i128 %r5276}5277 5278define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) {5279; -O0-LABEL: atomicrmw_umax_i128_aligned_release:5280; -O0: subs x13, x9, x105281; -O0: csel x9, x10, x9, lo5282; -O0: csel x2, x11, x12, lo5283; -O0: caspl x0, x1, x2, x3, [x8]5284; -O0: subs x11, x9, x115285; -O0: ccmp x8, x10, #0, eq5286;5287; -O1-LABEL: atomicrmw_umax_i128_aligned_release:5288; -O1: ldp x4, x5, [x0]5289; -O1: cmp x3, x75290; -O1: csel x9, x7, x3, lo5291; -O1: csel x8, x4, x2, lo5292; -O1: caspl x4, x5, x8, x9, [x0]5293; -O1: cmp x4, x65294; -O1: ccmp x5, x7, #0, eq5295 %r = atomicrmw umax ptr %ptr, i128 %value release, align 165296 ret i128 %r5297}5298 5299define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5300; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel:5301; -O0: subs x13, x9, x105302; -O0: csel x9, x10, x9, lo5303; -O0: csel x2, x11, x12, lo5304; -O0: caspal x0, x1, x2, x3, [x8]5305; -O0: subs x11, x9, x115306; -O0: ccmp x8, x10, #0, eq5307;5308; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel:5309; -O1: ldp x4, x5, [x0]5310; -O1: cmp x3, x75311; -O1: csel x9, x7, x3, lo5312; -O1: csel x8, x4, x2, lo5313; -O1: caspal x4, x5, x8, x9, [x0]5314; -O1: cmp x4, x65315; -O1: ccmp x5, x7, #0, eq5316 %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 165317 ret i128 %r5318}5319 5320define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5321; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst:5322; -O0: subs x13, x9, x105323; -O0: csel x9, x10, x9, lo5324; -O0: csel x2, x11, x12, lo5325; -O0: caspal x0, x1, x2, x3, [x8]5326; -O0: subs x11, x9, x115327; -O0: ccmp x8, x10, #0, eq5328;5329; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst:5330; -O1: ldp x4, x5, [x0]5331; -O1: cmp x3, x75332; -O1: csel x9, x7, x3, lo5333; -O1: csel x8, x4, x2, lo5334; -O1: caspal x4, x5, x8, x9, [x0]5335; -O1: cmp x4, x65336; -O1: ccmp x5, x7, #0, eq5337 %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 165338 ret i128 %r5339}5340 5341define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5342; CHECK-LABEL: atomicrmw_umax_i8_unaligned_monotonic:5343; CHECK: ldumaxb w1, w0, [x0]5344 %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15345 ret i8 %r5346}5347 5348define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) {5349; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acquire:5350; CHECK: ldumaxab w1, w0, [x0]5351 %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15352 ret i8 %r5353}5354 5355define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) {5356; CHECK-LABEL: atomicrmw_umax_i8_unaligned_release:5357; CHECK: ldumaxlb w1, w0, [x0]5358 %r = atomicrmw umax ptr %ptr, i8 %value release, align 15359 ret i8 %r5360}5361 5362define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5363; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:5364; CHECK: ldumaxalb w1, w0, [x0]5365 %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15366 ret i8 %r5367}5368 5369define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5370; CHECK-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:5371; CHECK: ldumaxalb w1, w0, [x0]5372 %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15373 ret i8 %r5374}5375 5376define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5377; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic:5378; -O0: and w10, w9, #0xffff5379; -O0: subs w10, w10, w8, uxth5380; -O0: csel w8, w9, w8, hi5381; -O0: bl __atomic_compare_exchange5382;5383; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic:5384; -O1: and w8, w0, #0xffff5385; -O1: cmp w8, w20, uxth5386; -O1: csel w8, w0, w20, hi5387; -O1: bl __atomic_compare_exchange5388 %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 15389 ret i16 %r5390}5391 5392define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) {5393; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire:5394; -O0: and w10, w9, #0xffff5395; -O0: subs w10, w10, w8, uxth5396; -O0: csel w8, w9, w8, hi5397; -O0: bl __atomic_compare_exchange5398;5399; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire:5400; -O1: and w8, w0, #0xffff5401; -O1: cmp w8, w20, uxth5402; -O1: csel w8, w0, w20, hi5403; -O1: bl __atomic_compare_exchange5404 %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 15405 ret i16 %r5406}5407 5408define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) {5409; -O0-LABEL: atomicrmw_umax_i16_unaligned_release:5410; -O0: and w10, w9, #0xffff5411; -O0: subs w10, w10, w8, uxth5412; -O0: csel w8, w9, w8, hi5413; -O0: bl __atomic_compare_exchange5414;5415; -O1-LABEL: atomicrmw_umax_i16_unaligned_release:5416; -O1: and w8, w0, #0xffff5417; -O1: cmp w8, w20, uxth5418; -O1: csel w8, w0, w20, hi5419; -O1: bl __atomic_compare_exchange5420 %r = atomicrmw umax ptr %ptr, i16 %value release, align 15421 ret i16 %r5422}5423 5424define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5425; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:5426; -O0: and w10, w9, #0xffff5427; -O0: subs w10, w10, w8, uxth5428; -O0: csel w8, w9, w8, hi5429; -O0: bl __atomic_compare_exchange5430;5431; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:5432; -O1: and w8, w0, #0xffff5433; -O1: cmp w8, w20, uxth5434; -O1: csel w8, w0, w20, hi5435; -O1: bl __atomic_compare_exchange5436 %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 15437 ret i16 %r5438}5439 5440define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5441; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:5442; -O0: and w10, w9, #0xffff5443; -O0: subs w10, w10, w8, uxth5444; -O0: csel w8, w9, w8, hi5445; -O0: bl __atomic_compare_exchange5446;5447; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:5448; -O1: and w8, w0, #0xffff5449; -O1: cmp w8, w20, uxth5450; -O1: csel w8, w0, w20, hi5451; -O1: bl __atomic_compare_exchange5452 %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 15453 ret i16 %r5454}5455 5456define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5457; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic:5458; -O0: subs w10, w9, w85459; -O0: csel w8, w9, w8, hi5460; -O0: bl __atomic_compare_exchange5461;5462; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic:5463; -O1: cmp w0, w205464; -O1: csel w8, w0, w20, hi5465; -O1: bl __atomic_compare_exchange5466 %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 15467 ret i32 %r5468}5469 5470define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) {5471; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire:5472; -O0: subs w10, w9, w85473; -O0: csel w8, w9, w8, hi5474; -O0: bl __atomic_compare_exchange5475;5476; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire:5477; -O1: cmp w0, w205478; -O1: csel w8, w0, w20, hi5479; -O1: bl __atomic_compare_exchange5480 %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 15481 ret i32 %r5482}5483 5484define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) {5485; -O0-LABEL: atomicrmw_umax_i32_unaligned_release:5486; -O0: subs w10, w9, w85487; -O0: csel w8, w9, w8, hi5488; -O0: bl __atomic_compare_exchange5489;5490; -O1-LABEL: atomicrmw_umax_i32_unaligned_release:5491; -O1: cmp w0, w205492; -O1: csel w8, w0, w20, hi5493; -O1: bl __atomic_compare_exchange5494 %r = atomicrmw umax ptr %ptr, i32 %value release, align 15495 ret i32 %r5496}5497 5498define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5499; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:5500; -O0: subs w10, w9, w85501; -O0: csel w8, w9, w8, hi5502; -O0: bl __atomic_compare_exchange5503;5504; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:5505; -O1: cmp w0, w205506; -O1: csel w8, w0, w20, hi5507; -O1: bl __atomic_compare_exchange5508 %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 15509 ret i32 %r5510}5511 5512define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5513; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:5514; -O0: subs w10, w9, w85515; -O0: csel w8, w9, w8, hi5516; -O0: bl __atomic_compare_exchange5517;5518; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:5519; -O1: cmp w0, w205520; -O1: csel w8, w0, w20, hi5521; -O1: bl __atomic_compare_exchange5522 %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 15523 ret i32 %r5524}5525 5526define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5527; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic:5528; -O0: subs x10, x9, x85529; -O0: csel x8, x9, x8, hi5530; -O0: bl __atomic_compare_exchange5531;5532; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic:5533; -O1: cmp x0, x205534; -O1: csel x8, x0, x20, hi5535; -O1: bl __atomic_compare_exchange5536 %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 15537 ret i64 %r5538}5539 5540define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) {5541; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire:5542; -O0: subs x10, x9, x85543; -O0: csel x8, x9, x8, hi5544; -O0: bl __atomic_compare_exchange5545;5546; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire:5547; -O1: cmp x0, x205548; -O1: csel x8, x0, x20, hi5549; -O1: bl __atomic_compare_exchange5550 %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 15551 ret i64 %r5552}5553 5554define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) {5555; -O0-LABEL: atomicrmw_umax_i64_unaligned_release:5556; -O0: subs x10, x9, x85557; -O0: csel x8, x9, x8, hi5558; -O0: bl __atomic_compare_exchange5559;5560; -O1-LABEL: atomicrmw_umax_i64_unaligned_release:5561; -O1: cmp x0, x205562; -O1: csel x8, x0, x20, hi5563; -O1: bl __atomic_compare_exchange5564 %r = atomicrmw umax ptr %ptr, i64 %value release, align 15565 ret i64 %r5566}5567 5568define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {5569; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:5570; -O0: subs x10, x9, x85571; -O0: csel x8, x9, x8, hi5572; -O0: bl __atomic_compare_exchange5573;5574; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:5575; -O1: cmp x0, x205576; -O1: csel x8, x0, x20, hi5577; -O1: bl __atomic_compare_exchange5578 %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 15579 ret i64 %r5580}5581 5582define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {5583; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:5584; -O0: subs x10, x9, x85585; -O0: csel x8, x9, x8, hi5586; -O0: bl __atomic_compare_exchange5587;5588; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:5589; -O1: cmp x0, x205590; -O1: csel x8, x0, x20, hi5591; -O1: bl __atomic_compare_exchange5592 %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 15593 ret i64 %r5594}5595 5596define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5597; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic:5598; -O0: subs x12, x9, x105599; -O0: csel x8, x11, x8, lo5600; -O0: csel x9, x10, x9, lo5601; -O0: bl __atomic_compare_exchange5602;5603; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic:5604; -O1: ldp x0, x1, [x0]5605; -O1: cmp x19, x15606; -O1: csel x8, x1, x19, lo5607; -O1: csel x9, x0, x21, lo5608; -O1: bl __atomic_compare_exchange5609 %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 15610 ret i128 %r5611}5612 5613define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) {5614; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire:5615; -O0: subs x12, x9, x105616; -O0: csel x8, x11, x8, lo5617; -O0: csel x9, x10, x9, lo5618; -O0: bl __atomic_compare_exchange5619;5620; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire:5621; -O1: ldp x0, x1, [x0]5622; -O1: cmp x19, x15623; -O1: csel x8, x1, x19, lo5624; -O1: csel x9, x0, x21, lo5625; -O1: bl __atomic_compare_exchange5626 %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 15627 ret i128 %r5628}5629 5630define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) {5631; -O0-LABEL: atomicrmw_umax_i128_unaligned_release:5632; -O0: subs x12, x9, x105633; -O0: csel x8, x11, x8, lo5634; -O0: csel x9, x10, x9, lo5635; -O0: bl __atomic_compare_exchange5636;5637; -O1-LABEL: atomicrmw_umax_i128_unaligned_release:5638; -O1: ldp x0, x1, [x0]5639; -O1: cmp x19, x15640; -O1: csel x8, x1, x19, lo5641; -O1: csel x9, x0, x21, lo5642; -O1: bl __atomic_compare_exchange5643 %r = atomicrmw umax ptr %ptr, i128 %value release, align 15644 ret i128 %r5645}5646 5647define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5648; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:5649; -O0: subs x12, x9, x105650; -O0: csel x8, x11, x8, lo5651; -O0: csel x9, x10, x9, lo5652; -O0: bl __atomic_compare_exchange5653;5654; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:5655; -O1: ldp x0, x1, [x0]5656; -O1: cmp x19, x15657; -O1: csel x8, x1, x19, lo5658; -O1: csel x9, x0, x21, lo5659; -O1: bl __atomic_compare_exchange5660 %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 15661 ret i128 %r5662}5663 5664define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5665; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:5666; -O0: subs x12, x9, x105667; -O0: csel x8, x11, x8, lo5668; -O0: csel x9, x10, x9, lo5669; -O0: bl __atomic_compare_exchange5670;5671; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:5672; -O1: ldp x0, x1, [x0]5673; -O1: cmp x19, x15674; -O1: csel x8, x1, x19, lo5675; -O1: csel x9, x0, x21, lo5676; -O1: bl __atomic_compare_exchange5677 %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 15678 ret i128 %r5679}5680 5681define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) {5682; CHECK-LABEL: atomicrmw_umin_i8_aligned_monotonic:5683; CHECK: lduminb w1, w0, [x0]5684 %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 15685 ret i8 %r5686}5687 5688define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) {5689; CHECK-LABEL: atomicrmw_umin_i8_aligned_acquire:5690; CHECK: lduminab w1, w0, [x0]5691 %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 15692 ret i8 %r5693}5694 5695define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) {5696; CHECK-LABEL: atomicrmw_umin_i8_aligned_release:5697; CHECK: lduminlb w1, w0, [x0]5698 %r = atomicrmw umin ptr %ptr, i8 %value release, align 15699 ret i8 %r5700}5701 5702define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5703; CHECK-LABEL: atomicrmw_umin_i8_aligned_acq_rel:5704; CHECK: lduminalb w1, w0, [x0]5705 %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 15706 ret i8 %r5707}5708 5709define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5710; CHECK-LABEL: atomicrmw_umin_i8_aligned_seq_cst:5711; CHECK: lduminalb w1, w0, [x0]5712 %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 15713 ret i8 %r5714}5715 5716define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) {5717; CHECK-LABEL: atomicrmw_umin_i16_aligned_monotonic:5718; CHECK: lduminh w1, w0, [x0]5719 %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 25720 ret i16 %r5721}5722 5723define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) {5724; CHECK-LABEL: atomicrmw_umin_i16_aligned_acquire:5725; CHECK: lduminah w1, w0, [x0]5726 %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 25727 ret i16 %r5728}5729 5730define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) {5731; CHECK-LABEL: atomicrmw_umin_i16_aligned_release:5732; CHECK: lduminlh w1, w0, [x0]5733 %r = atomicrmw umin ptr %ptr, i16 %value release, align 25734 ret i16 %r5735}5736 5737define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5738; CHECK-LABEL: atomicrmw_umin_i16_aligned_acq_rel:5739; CHECK: lduminalh w1, w0, [x0]5740 %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 25741 ret i16 %r5742}5743 5744define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5745; CHECK-LABEL: atomicrmw_umin_i16_aligned_seq_cst:5746; CHECK: lduminalh w1, w0, [x0]5747 %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 25748 ret i16 %r5749}5750 5751define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) {5752; CHECK-LABEL: atomicrmw_umin_i32_aligned_monotonic:5753; CHECK: ldumin w1, w0, [x0]5754 %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 45755 ret i32 %r5756}5757 5758define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) {5759; CHECK-LABEL: atomicrmw_umin_i32_aligned_acquire:5760; CHECK: ldumina w1, w0, [x0]5761 %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 45762 ret i32 %r5763}5764 5765define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) {5766; CHECK-LABEL: atomicrmw_umin_i32_aligned_release:5767; CHECK: lduminl w1, w0, [x0]5768 %r = atomicrmw umin ptr %ptr, i32 %value release, align 45769 ret i32 %r5770}5771 5772define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5773; CHECK-LABEL: atomicrmw_umin_i32_aligned_acq_rel:5774; CHECK: lduminal w1, w0, [x0]5775 %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 45776 ret i32 %r5777}5778 5779define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5780; CHECK-LABEL: atomicrmw_umin_i32_aligned_seq_cst:5781; CHECK: lduminal w1, w0, [x0]5782 %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 45783 ret i32 %r5784}5785 5786define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) {5787; CHECK-LABEL: atomicrmw_umin_i64_aligned_monotonic:5788; CHECK: ldumin x1, x0, [x0]5789 %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 85790 ret i64 %r5791}5792 5793define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) {5794; CHECK-LABEL: atomicrmw_umin_i64_aligned_acquire:5795; CHECK: ldumina x1, x0, [x0]5796 %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 85797 ret i64 %r5798}5799 5800define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) {5801; CHECK-LABEL: atomicrmw_umin_i64_aligned_release:5802; CHECK: lduminl x1, x0, [x0]5803 %r = atomicrmw umin ptr %ptr, i64 %value release, align 85804 ret i64 %r5805}5806 5807define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5808; CHECK-LABEL: atomicrmw_umin_i64_aligned_acq_rel:5809; CHECK: lduminal x1, x0, [x0]5810 %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 85811 ret i64 %r5812}5813 5814define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5815; CHECK-LABEL: atomicrmw_umin_i64_aligned_seq_cst:5816; CHECK: lduminal x1, x0, [x0]5817 %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 85818 ret i64 %r5819}5820 5821define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) {5822; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic:5823; -O0: subs x13, x9, x105824; -O0: csel x9, x10, x9, hs5825; -O0: csel x2, x11, x12, hs5826; -O0: casp x0, x1, x2, x3, [x8]5827; -O0: subs x11, x9, x115828; -O0: ccmp x8, x10, #0, eq5829;5830; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic:5831; -O1: ldp x4, x5, [x0]5832; -O1: cmp x3, x75833; -O1: csel x9, x7, x3, hs5834; -O1: csel x8, x4, x2, hs5835; -O1: casp x4, x5, x8, x9, [x0]5836; -O1: cmp x4, x65837; -O1: ccmp x5, x7, #0, eq5838 %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 165839 ret i128 %r5840}5841 5842define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) {5843; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire:5844; -O0: subs x13, x9, x105845; -O0: csel x9, x10, x9, hs5846; -O0: csel x2, x11, x12, hs5847; -O0: caspa x0, x1, x2, x3, [x8]5848; -O0: subs x11, x9, x115849; -O0: ccmp x8, x10, #0, eq5850;5851; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire:5852; -O1: ldp x4, x5, [x0]5853; -O1: cmp x3, x75854; -O1: csel x9, x7, x3, hs5855; -O1: csel x8, x4, x2, hs5856; -O1: caspa x4, x5, x8, x9, [x0]5857; -O1: cmp x4, x65858; -O1: ccmp x5, x7, #0, eq5859 %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 165860 ret i128 %r5861}5862 5863define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) {5864; -O0-LABEL: atomicrmw_umin_i128_aligned_release:5865; -O0: subs x13, x9, x105866; -O0: csel x9, x10, x9, hs5867; -O0: csel x2, x11, x12, hs5868; -O0: caspl x0, x1, x2, x3, [x8]5869; -O0: subs x11, x9, x115870; -O0: ccmp x8, x10, #0, eq5871;5872; -O1-LABEL: atomicrmw_umin_i128_aligned_release:5873; -O1: ldp x4, x5, [x0]5874; -O1: cmp x3, x75875; -O1: csel x9, x7, x3, hs5876; -O1: csel x8, x4, x2, hs5877; -O1: caspl x4, x5, x8, x9, [x0]5878; -O1: cmp x4, x65879; -O1: ccmp x5, x7, #0, eq5880 %r = atomicrmw umin ptr %ptr, i128 %value release, align 165881 ret i128 %r5882}5883 5884define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5885; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel:5886; -O0: subs x13, x9, x105887; -O0: csel x9, x10, x9, hs5888; -O0: csel x2, x11, x12, hs5889; -O0: caspal x0, x1, x2, x3, [x8]5890; -O0: subs x11, x9, x115891; -O0: ccmp x8, x10, #0, eq5892;5893; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel:5894; -O1: ldp x4, x5, [x0]5895; -O1: cmp x3, x75896; -O1: csel x9, x7, x3, hs5897; -O1: csel x8, x4, x2, hs5898; -O1: caspal x4, x5, x8, x9, [x0]5899; -O1: cmp x4, x65900; -O1: ccmp x5, x7, #0, eq5901 %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 165902 ret i128 %r5903}5904 5905define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5906; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst:5907; -O0: subs x13, x9, x105908; -O0: csel x9, x10, x9, hs5909; -O0: csel x2, x11, x12, hs5910; -O0: caspal x0, x1, x2, x3, [x8]5911; -O0: subs x11, x9, x115912; -O0: ccmp x8, x10, #0, eq5913;5914; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst:5915; -O1: ldp x4, x5, [x0]5916; -O1: cmp x3, x75917; -O1: csel x9, x7, x3, hs5918; -O1: csel x8, x4, x2, hs5919; -O1: caspal x4, x5, x8, x9, [x0]5920; -O1: cmp x4, x65921; -O1: ccmp x5, x7, #0, eq5922 %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 165923 ret i128 %r5924}5925 5926define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5927; CHECK-LABEL: atomicrmw_umin_i8_unaligned_monotonic:5928; CHECK: lduminb w1, w0, [x0]5929 %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 15930 ret i8 %r5931}5932 5933define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) {5934; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acquire:5935; CHECK: lduminab w1, w0, [x0]5936 %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 15937 ret i8 %r5938}5939 5940define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) {5941; CHECK-LABEL: atomicrmw_umin_i8_unaligned_release:5942; CHECK: lduminlb w1, w0, [x0]5943 %r = atomicrmw umin ptr %ptr, i8 %value release, align 15944 ret i8 %r5945}5946 5947define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5948; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:5949; CHECK: lduminalb w1, w0, [x0]5950 %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 15951 ret i8 %r5952}5953 5954define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5955; CHECK-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:5956; CHECK: lduminalb w1, w0, [x0]5957 %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 15958 ret i8 %r5959}5960 5961define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5962; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic:5963; -O0: and w10, w9, #0xffff5964; -O0: subs w10, w10, w8, uxth5965; -O0: csel w8, w9, w8, ls5966; -O0: bl __atomic_compare_exchange5967;5968; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic:5969; -O1: and w8, w0, #0xffff5970; -O1: cmp w8, w20, uxth5971; -O1: csel w8, w0, w20, ls5972; -O1: bl __atomic_compare_exchange5973 %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 15974 ret i16 %r5975}5976 5977define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) {5978; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire:5979; -O0: and w10, w9, #0xffff5980; -O0: subs w10, w10, w8, uxth5981; -O0: csel w8, w9, w8, ls5982; -O0: bl __atomic_compare_exchange5983;5984; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire:5985; -O1: and w8, w0, #0xffff5986; -O1: cmp w8, w20, uxth5987; -O1: csel w8, w0, w20, ls5988; -O1: bl __atomic_compare_exchange5989 %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 15990 ret i16 %r5991}5992 5993define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) {5994; -O0-LABEL: atomicrmw_umin_i16_unaligned_release:5995; -O0: and w10, w9, #0xffff5996; -O0: subs w10, w10, w8, uxth5997; -O0: csel w8, w9, w8, ls5998; -O0: bl __atomic_compare_exchange5999;6000; -O1-LABEL: atomicrmw_umin_i16_unaligned_release:6001; -O1: and w8, w0, #0xffff6002; -O1: cmp w8, w20, uxth6003; -O1: csel w8, w0, w20, ls6004; -O1: bl __atomic_compare_exchange6005 %r = atomicrmw umin ptr %ptr, i16 %value release, align 16006 ret i16 %r6007}6008 6009define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {6010; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:6011; -O0: and w10, w9, #0xffff6012; -O0: subs w10, w10, w8, uxth6013; -O0: csel w8, w9, w8, ls6014; -O0: bl __atomic_compare_exchange6015;6016; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:6017; -O1: and w8, w0, #0xffff6018; -O1: cmp w8, w20, uxth6019; -O1: csel w8, w0, w20, ls6020; -O1: bl __atomic_compare_exchange6021 %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 16022 ret i16 %r6023}6024 6025define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {6026; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:6027; -O0: and w10, w9, #0xffff6028; -O0: subs w10, w10, w8, uxth6029; -O0: csel w8, w9, w8, ls6030; -O0: bl __atomic_compare_exchange6031;6032; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:6033; -O1: and w8, w0, #0xffff6034; -O1: cmp w8, w20, uxth6035; -O1: csel w8, w0, w20, ls6036; -O1: bl __atomic_compare_exchange6037 %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 16038 ret i16 %r6039}6040 6041define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) {6042; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic:6043; -O0: subs w10, w9, w86044; -O0: csel w8, w9, w8, ls6045; -O0: bl __atomic_compare_exchange6046;6047; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic:6048; -O1: cmp w0, w206049; -O1: csel w8, w0, w20, ls6050; -O1: bl __atomic_compare_exchange6051 %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 16052 ret i32 %r6053}6054 6055define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) {6056; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire:6057; -O0: subs w10, w9, w86058; -O0: csel w8, w9, w8, ls6059; -O0: bl __atomic_compare_exchange6060;6061; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire:6062; -O1: cmp w0, w206063; -O1: csel w8, w0, w20, ls6064; -O1: bl __atomic_compare_exchange6065 %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 16066 ret i32 %r6067}6068 6069define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) {6070; -O0-LABEL: atomicrmw_umin_i32_unaligned_release:6071; -O0: subs w10, w9, w86072; -O0: csel w8, w9, w8, ls6073; -O0: bl __atomic_compare_exchange6074;6075; -O1-LABEL: atomicrmw_umin_i32_unaligned_release:6076; -O1: cmp w0, w206077; -O1: csel w8, w0, w20, ls6078; -O1: bl __atomic_compare_exchange6079 %r = atomicrmw umin ptr %ptr, i32 %value release, align 16080 ret i32 %r6081}6082 6083define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {6084; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:6085; -O0: subs w10, w9, w86086; -O0: csel w8, w9, w8, ls6087; -O0: bl __atomic_compare_exchange6088;6089; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:6090; -O1: cmp w0, w206091; -O1: csel w8, w0, w20, ls6092; -O1: bl __atomic_compare_exchange6093 %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 16094 ret i32 %r6095}6096 6097define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {6098; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:6099; -O0: subs w10, w9, w86100; -O0: csel w8, w9, w8, ls6101; -O0: bl __atomic_compare_exchange6102;6103; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:6104; -O1: cmp w0, w206105; -O1: csel w8, w0, w20, ls6106; -O1: bl __atomic_compare_exchange6107 %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 16108 ret i32 %r6109}6110 6111define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) {6112; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic:6113; -O0: subs x10, x9, x86114; -O0: csel x8, x9, x8, ls6115; -O0: bl __atomic_compare_exchange6116;6117; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic:6118; -O1: cmp x0, x206119; -O1: csel x8, x0, x20, ls6120; -O1: bl __atomic_compare_exchange6121 %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 16122 ret i64 %r6123}6124 6125define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) {6126; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire:6127; -O0: subs x10, x9, x86128; -O0: csel x8, x9, x8, ls6129; -O0: bl __atomic_compare_exchange6130;6131; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire:6132; -O1: cmp x0, x206133; -O1: csel x8, x0, x20, ls6134; -O1: bl __atomic_compare_exchange6135 %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 16136 ret i64 %r6137}6138 6139define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) {6140; -O0-LABEL: atomicrmw_umin_i64_unaligned_release:6141; -O0: subs x10, x9, x86142; -O0: csel x8, x9, x8, ls6143; -O0: bl __atomic_compare_exchange6144;6145; -O1-LABEL: atomicrmw_umin_i64_unaligned_release:6146; -O1: cmp x0, x206147; -O1: csel x8, x0, x20, ls6148; -O1: bl __atomic_compare_exchange6149 %r = atomicrmw umin ptr %ptr, i64 %value release, align 16150 ret i64 %r6151}6152 6153define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {6154; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:6155; -O0: subs x10, x9, x86156; -O0: csel x8, x9, x8, ls6157; -O0: bl __atomic_compare_exchange6158;6159; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:6160; -O1: cmp x0, x206161; -O1: csel x8, x0, x20, ls6162; -O1: bl __atomic_compare_exchange6163 %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 16164 ret i64 %r6165}6166 6167define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {6168; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:6169; -O0: subs x10, x9, x86170; -O0: csel x8, x9, x8, ls6171; -O0: bl __atomic_compare_exchange6172;6173; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:6174; -O1: cmp x0, x206175; -O1: csel x8, x0, x20, ls6176; -O1: bl __atomic_compare_exchange6177 %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 16178 ret i64 %r6179}6180 6181define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) {6182; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic:6183; -O0: subs x12, x9, x106184; -O0: csel x8, x11, x8, hs6185; -O0: csel x9, x10, x9, hs6186; -O0: bl __atomic_compare_exchange6187;6188; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic:6189; -O1: ldp x0, x1, [x0]6190; -O1: cmp x19, x16191; -O1: csel x8, x1, x19, hs6192; -O1: csel x9, x0, x21, hs6193; -O1: bl __atomic_compare_exchange6194 %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 16195 ret i128 %r6196}6197 6198define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) {6199; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire:6200; -O0: subs x12, x9, x106201; -O0: csel x8, x11, x8, hs6202; -O0: csel x9, x10, x9, hs6203; -O0: bl __atomic_compare_exchange6204;6205; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire:6206; -O1: ldp x0, x1, [x0]6207; -O1: cmp x19, x16208; -O1: csel x8, x1, x19, hs6209; -O1: csel x9, x0, x21, hs6210; -O1: bl __atomic_compare_exchange6211 %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 16212 ret i128 %r6213}6214 6215define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) {6216; -O0-LABEL: atomicrmw_umin_i128_unaligned_release:6217; -O0: subs x12, x9, x106218; -O0: csel x8, x11, x8, hs6219; -O0: csel x9, x10, x9, hs6220; -O0: bl __atomic_compare_exchange6221;6222; -O1-LABEL: atomicrmw_umin_i128_unaligned_release:6223; -O1: ldp x0, x1, [x0]6224; -O1: cmp x19, x16225; -O1: csel x8, x1, x19, hs6226; -O1: csel x9, x0, x21, hs6227; -O1: bl __atomic_compare_exchange6228 %r = atomicrmw umin ptr %ptr, i128 %value release, align 16229 ret i128 %r6230}6231 6232define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {6233; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:6234; -O0: subs x12, x9, x106235; -O0: csel x8, x11, x8, hs6236; -O0: csel x9, x10, x9, hs6237; -O0: bl __atomic_compare_exchange6238;6239; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:6240; -O1: ldp x0, x1, [x0]6241; -O1: cmp x19, x16242; -O1: csel x8, x1, x19, hs6243; -O1: csel x9, x0, x21, hs6244; -O1: bl __atomic_compare_exchange6245 %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 16246 ret i128 %r6247}6248 6249define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {6250; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:6251; -O0: subs x12, x9, x106252; -O0: csel x8, x11, x8, hs6253; -O0: csel x9, x10, x9, hs6254; -O0: bl __atomic_compare_exchange6255;6256; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:6257; -O1: ldp x0, x1, [x0]6258; -O1: cmp x19, x16259; -O1: csel x8, x1, x19, hs6260; -O1: csel x9, x0, x21, hs6261; -O1: bl __atomic_compare_exchange6262 %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 16263 ret i128 %r6264}6265