brintos

brintos / llvm-project-archived public Read only

0
0
Text · 199.2 KiB · 34cd68c Raw
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