brintos

brintos / llvm-project-archived public Read only

0
0
Text · 235.8 KiB · 4605bdd Raw
7625 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st[^r]|swp|cas|bl|add|and|eor|orn|orr|sub|mvn|sxt|cmp|ccmp|csel|dmb)"2; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+outline-atomics -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+outline-atomics -O1 | FileCheck %s --check-prefixes=CHECK,-O15 6define dso_local i8 @atomicrmw_xchg_i8_aligned_monotonic(ptr %ptr, i8 %value) {7; CHECK-LABEL: atomicrmw_xchg_i8_aligned_monotonic:8; CHECK:    bl __aarch64_swp1_relax9    %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 110    ret i8 %r11}12 13define dso_local i8 @atomicrmw_xchg_i8_aligned_acquire(ptr %ptr, i8 %value) {14; CHECK-LABEL: atomicrmw_xchg_i8_aligned_acquire:15; CHECK:    bl __aarch64_swp1_acq16    %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 117    ret i8 %r18}19 20define dso_local i8 @atomicrmw_xchg_i8_aligned_release(ptr %ptr, i8 %value) {21; CHECK-LABEL: atomicrmw_xchg_i8_aligned_release:22; CHECK:    bl __aarch64_swp1_rel23    %r = atomicrmw xchg ptr %ptr, i8 %value release, align 124    ret i8 %r25}26 27define dso_local i8 @atomicrmw_xchg_i8_aligned_acq_rel(ptr %ptr, i8 %value) {28; CHECK-LABEL: atomicrmw_xchg_i8_aligned_acq_rel:29; CHECK:    bl __aarch64_swp1_acq_rel30    %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 131    ret i8 %r32}33 34define dso_local i8 @atomicrmw_xchg_i8_aligned_seq_cst(ptr %ptr, i8 %value) {35; CHECK-LABEL: atomicrmw_xchg_i8_aligned_seq_cst:36; CHECK:    bl __aarch64_swp1_acq_rel37    %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 138    ret i8 %r39}40 41define dso_local i16 @atomicrmw_xchg_i16_aligned_monotonic(ptr %ptr, i16 %value) {42; CHECK-LABEL: atomicrmw_xchg_i16_aligned_monotonic:43; CHECK:    bl __aarch64_swp2_relax44    %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 245    ret i16 %r46}47 48define dso_local i16 @atomicrmw_xchg_i16_aligned_acquire(ptr %ptr, i16 %value) {49; CHECK-LABEL: atomicrmw_xchg_i16_aligned_acquire:50; CHECK:    bl __aarch64_swp2_acq51    %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 252    ret i16 %r53}54 55define dso_local i16 @atomicrmw_xchg_i16_aligned_release(ptr %ptr, i16 %value) {56; CHECK-LABEL: atomicrmw_xchg_i16_aligned_release:57; CHECK:    bl __aarch64_swp2_rel58    %r = atomicrmw xchg ptr %ptr, i16 %value release, align 259    ret i16 %r60}61 62define dso_local i16 @atomicrmw_xchg_i16_aligned_acq_rel(ptr %ptr, i16 %value) {63; CHECK-LABEL: atomicrmw_xchg_i16_aligned_acq_rel:64; CHECK:    bl __aarch64_swp2_acq_rel65    %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 266    ret i16 %r67}68 69define dso_local i16 @atomicrmw_xchg_i16_aligned_seq_cst(ptr %ptr, i16 %value) {70; CHECK-LABEL: atomicrmw_xchg_i16_aligned_seq_cst:71; CHECK:    bl __aarch64_swp2_acq_rel72    %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 273    ret i16 %r74}75 76define dso_local i32 @atomicrmw_xchg_i32_aligned_monotonic(ptr %ptr, i32 %value) {77; CHECK-LABEL: atomicrmw_xchg_i32_aligned_monotonic:78; CHECK:    bl __aarch64_swp4_relax79    %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 480    ret i32 %r81}82 83define dso_local i32 @atomicrmw_xchg_i32_aligned_acquire(ptr %ptr, i32 %value) {84; CHECK-LABEL: atomicrmw_xchg_i32_aligned_acquire:85; CHECK:    bl __aarch64_swp4_acq86    %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 487    ret i32 %r88}89 90define dso_local i32 @atomicrmw_xchg_i32_aligned_release(ptr %ptr, i32 %value) {91; CHECK-LABEL: atomicrmw_xchg_i32_aligned_release:92; CHECK:    bl __aarch64_swp4_rel93    %r = atomicrmw xchg ptr %ptr, i32 %value release, align 494    ret i32 %r95}96 97define dso_local i32 @atomicrmw_xchg_i32_aligned_acq_rel(ptr %ptr, i32 %value) {98; CHECK-LABEL: atomicrmw_xchg_i32_aligned_acq_rel:99; CHECK:    bl __aarch64_swp4_acq_rel100    %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 4101    ret i32 %r102}103 104define dso_local i32 @atomicrmw_xchg_i32_aligned_seq_cst(ptr %ptr, i32 %value) {105; CHECK-LABEL: atomicrmw_xchg_i32_aligned_seq_cst:106; CHECK:    bl __aarch64_swp4_acq_rel107    %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 4108    ret i32 %r109}110 111define dso_local i64 @atomicrmw_xchg_i64_aligned_monotonic(ptr %ptr, i64 %value) {112; CHECK-LABEL: atomicrmw_xchg_i64_aligned_monotonic:113; CHECK:    bl __aarch64_swp8_relax114    %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 8115    ret i64 %r116}117 118define dso_local i64 @atomicrmw_xchg_i64_aligned_acquire(ptr %ptr, i64 %value) {119; CHECK-LABEL: atomicrmw_xchg_i64_aligned_acquire:120; CHECK:    bl __aarch64_swp8_acq121    %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 8122    ret i64 %r123}124 125define dso_local i64 @atomicrmw_xchg_i64_aligned_release(ptr %ptr, i64 %value) {126; CHECK-LABEL: atomicrmw_xchg_i64_aligned_release:127; CHECK:    bl __aarch64_swp8_rel128    %r = atomicrmw xchg ptr %ptr, i64 %value release, align 8129    ret i64 %r130}131 132define dso_local i64 @atomicrmw_xchg_i64_aligned_acq_rel(ptr %ptr, i64 %value) {133; CHECK-LABEL: atomicrmw_xchg_i64_aligned_acq_rel:134; CHECK:    bl __aarch64_swp8_acq_rel135    %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 8136    ret i64 %r137}138 139define dso_local i64 @atomicrmw_xchg_i64_aligned_seq_cst(ptr %ptr, i64 %value) {140; CHECK-LABEL: atomicrmw_xchg_i64_aligned_seq_cst:141; CHECK:    bl __aarch64_swp8_acq_rel142    %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 8143    ret i64 %r144}145 146define dso_local i128 @atomicrmw_xchg_i128_aligned_monotonic(ptr %ptr, i128 %value) {147; -O0-LABEL: atomicrmw_xchg_i128_aligned_monotonic:148; -O0:    bl __aarch64_cas16_relax149; -O0:    eor x8, x0, x8150; -O0:    eor x9, x1, x9151; -O0:    orr x8, x8, x9152; -O0:    subs x8, x8, #0153;154; -O1-LABEL: atomicrmw_xchg_i128_aligned_monotonic:155; -O1:    ldxp x8, x1, [x0]156; -O1:    stxp w9, x2, x3, [x0]157    %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:    bl __aarch64_cas16_acq164; -O0:    eor x8, x0, x8165; -O0:    eor x9, x1, x9166; -O0:    orr x8, x8, x9167; -O0:    subs x8, x8, #0168;169; -O1-LABEL: atomicrmw_xchg_i128_aligned_acquire:170; -O1:    ldaxp x8, x1, [x0]171; -O1:    stxp w9, x2, x3, [x0]172    %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:    bl __aarch64_cas16_rel179; -O0:    eor x8, x0, x8180; -O0:    eor x9, x1, x9181; -O0:    orr x8, x8, x9182; -O0:    subs x8, x8, #0183;184; -O1-LABEL: atomicrmw_xchg_i128_aligned_release:185; -O1:    ldxp x8, x1, [x0]186; -O1:    stlxp w9, x2, x3, [x0]187    %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:    bl __aarch64_cas16_acq_rel194; -O0:    eor x8, x0, x8195; -O0:    eor x9, x1, x9196; -O0:    orr x8, x8, x9197; -O0:    subs x8, x8, #0198;199; -O1-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:200; -O1:    ldaxp x8, x1, [x0]201; -O1:    stlxp w9, x2, x3, [x0]202    %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:    bl __aarch64_cas16_acq_rel209; -O0:    eor x8, x0, x8210; -O0:    eor x9, x1, x9211; -O0:    orr x8, x8, x9212; -O0:    subs x8, x8, #0213;214; -O1-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:215; -O1:    ldaxp x8, x1, [x0]216; -O1:    stlxp w9, x2, x3, [x0]217    %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:    bl __aarch64_swp1_relax224    %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:    bl __aarch64_swp1_acq231    %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:    bl __aarch64_swp1_rel238    %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:    bl __aarch64_swp1_acq_rel245    %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:    bl __aarch64_swp1_acq_rel252    %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:    bl __aarch64_ldadd1_relax399    %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:    bl __aarch64_ldadd1_acq406    %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:    bl __aarch64_ldadd1_rel413    %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:    bl __aarch64_ldadd1_acq_rel420    %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:    bl __aarch64_ldadd1_acq_rel427    %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:    bl __aarch64_ldadd2_relax434    %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:    bl __aarch64_ldadd2_acq441    %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:    bl __aarch64_ldadd2_rel448    %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:    bl __aarch64_ldadd2_acq_rel455    %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:    bl __aarch64_ldadd2_acq_rel462    %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:    bl __aarch64_ldadd4_relax469    %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:    bl __aarch64_ldadd4_acq476    %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:    bl __aarch64_ldadd4_rel483    %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:    bl __aarch64_ldadd4_acq_rel490    %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:    bl __aarch64_ldadd4_acq_rel497    %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:    bl __aarch64_ldadd8_relax504    %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:    bl __aarch64_ldadd8_acq511    %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:    bl __aarch64_ldadd8_rel518    %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:    bl __aarch64_ldadd8_acq_rel525    %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:    bl __aarch64_ldadd8_acq_rel532    %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 x2, x8, x10539; -O0:    subs w10, w10, #1540; -O0:    bl __aarch64_cas16_relax541; -O0:    eor x8, x0, x8542; -O0:    eor x9, x1, x9543; -O0:    orr x8, x8, x9544; -O0:    subs x8, x8, #0545;546; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic:547; -O1:    ldxp x0, x1, [x8]548; -O1:    adds x9, x0, x2549; -O1:    stxp w11, x9, x10, [x8]550    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16551    ret i128 %r552}553 554define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) {555; -O0-LABEL: atomicrmw_add_i128_aligned_acquire:556; -O0:    adds x2, x8, x10557; -O0:    subs w10, w10, #1558; -O0:    bl __aarch64_cas16_acq559; -O0:    eor x8, x0, x8560; -O0:    eor x9, x1, x9561; -O0:    orr x8, x8, x9562; -O0:    subs x8, x8, #0563;564; -O1-LABEL: atomicrmw_add_i128_aligned_acquire:565; -O1:    ldaxp x0, x1, [x8]566; -O1:    adds x9, x0, x2567; -O1:    stxp w11, x9, x10, [x8]568    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16569    ret i128 %r570}571 572define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) {573; -O0-LABEL: atomicrmw_add_i128_aligned_release:574; -O0:    adds x2, x8, x10575; -O0:    subs w10, w10, #1576; -O0:    bl __aarch64_cas16_rel577; -O0:    eor x8, x0, x8578; -O0:    eor x9, x1, x9579; -O0:    orr x8, x8, x9580; -O0:    subs x8, x8, #0581;582; -O1-LABEL: atomicrmw_add_i128_aligned_release:583; -O1:    ldxp x0, x1, [x8]584; -O1:    adds x9, x0, x2585; -O1:    stlxp w11, x9, x10, [x8]586    %r = atomicrmw add ptr %ptr, i128 %value release, align 16587    ret i128 %r588}589 590define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) {591; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel:592; -O0:    adds x2, x8, x10593; -O0:    subs w10, w10, #1594; -O0:    bl __aarch64_cas16_acq_rel595; -O0:    eor x8, x0, x8596; -O0:    eor x9, x1, x9597; -O0:    orr x8, x8, x9598; -O0:    subs x8, x8, #0599;600; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel:601; -O1:    ldaxp x0, x1, [x8]602; -O1:    adds x9, x0, x2603; -O1:    stlxp w11, x9, x10, [x8]604    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 16605    ret i128 %r606}607 608define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) {609; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst:610; -O0:    adds x2, x8, x10611; -O0:    subs w10, w10, #1612; -O0:    bl __aarch64_cas16_acq_rel613; -O0:    eor x8, x0, x8614; -O0:    eor x9, x1, x9615; -O0:    orr x8, x8, x9616; -O0:    subs x8, x8, #0617;618; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst:619; -O1:    ldaxp x0, x1, [x8]620; -O1:    adds x9, x0, x2621; -O1:    stlxp w11, x9, x10, [x8]622    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 16623    ret i128 %r624}625 626define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) {627; CHECK-LABEL: atomicrmw_add_i8_unaligned_monotonic:628; CHECK:    bl __aarch64_ldadd1_relax629    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1630    ret i8 %r631}632 633define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) {634; CHECK-LABEL: atomicrmw_add_i8_unaligned_acquire:635; CHECK:    bl __aarch64_ldadd1_acq636    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1637    ret i8 %r638}639 640define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) {641; CHECK-LABEL: atomicrmw_add_i8_unaligned_release:642; CHECK:    bl __aarch64_ldadd1_rel643    %r = atomicrmw add ptr %ptr, i8 %value release, align 1644    ret i8 %r645}646 647define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {648; CHECK-LABEL: atomicrmw_add_i8_unaligned_acq_rel:649; CHECK:    bl __aarch64_ldadd1_acq_rel650    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1651    ret i8 %r652}653 654define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {655; CHECK-LABEL: atomicrmw_add_i8_unaligned_seq_cst:656; CHECK:    bl __aarch64_ldadd1_acq_rel657    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1658    ret i8 %r659}660 661define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) {662; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic:663; -O0:    add w8, w8, w9, uxth664; -O0:    bl __atomic_compare_exchange665;666; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic:667; -O1:    add w8, w0, w20668; -O1:    bl __atomic_compare_exchange669    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 1670    ret i16 %r671}672 673define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) {674; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire:675; -O0:    add w8, w8, w9, uxth676; -O0:    bl __atomic_compare_exchange677;678; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire:679; -O1:    add w8, w0, w20680; -O1:    bl __atomic_compare_exchange681    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 1682    ret i16 %r683}684 685define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) {686; -O0-LABEL: atomicrmw_add_i16_unaligned_release:687; -O0:    add w8, w8, w9, uxth688; -O0:    bl __atomic_compare_exchange689;690; -O1-LABEL: atomicrmw_add_i16_unaligned_release:691; -O1:    add w8, w0, w20692; -O1:    bl __atomic_compare_exchange693    %r = atomicrmw add ptr %ptr, i16 %value release, align 1694    ret i16 %r695}696 697define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {698; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel:699; -O0:    add w8, w8, w9, uxth700; -O0:    bl __atomic_compare_exchange701;702; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel:703; -O1:    add w8, w0, w20704; -O1:    bl __atomic_compare_exchange705    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 1706    ret i16 %r707}708 709define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {710; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst:711; -O0:    add w8, w8, w9, uxth712; -O0:    bl __atomic_compare_exchange713;714; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst:715; -O1:    add w8, w0, w20716; -O1:    bl __atomic_compare_exchange717    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 1718    ret i16 %r719}720 721define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) {722; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic:723; -O0:    add w8, w9, w8724; -O0:    bl __atomic_compare_exchange725;726; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic:727; -O1:    add w8, w0, w20728; -O1:    bl __atomic_compare_exchange729    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 1730    ret i32 %r731}732 733define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) {734; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire:735; -O0:    add w8, w9, w8736; -O0:    bl __atomic_compare_exchange737;738; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire:739; -O1:    add w8, w0, w20740; -O1:    bl __atomic_compare_exchange741    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 1742    ret i32 %r743}744 745define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) {746; -O0-LABEL: atomicrmw_add_i32_unaligned_release:747; -O0:    add w8, w9, w8748; -O0:    bl __atomic_compare_exchange749;750; -O1-LABEL: atomicrmw_add_i32_unaligned_release:751; -O1:    add w8, w0, w20752; -O1:    bl __atomic_compare_exchange753    %r = atomicrmw add ptr %ptr, i32 %value release, align 1754    ret i32 %r755}756 757define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {758; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel:759; -O0:    add w8, w9, w8760; -O0:    bl __atomic_compare_exchange761;762; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel:763; -O1:    add w8, w0, w20764; -O1:    bl __atomic_compare_exchange765    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 1766    ret i32 %r767}768 769define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {770; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst:771; -O0:    add w8, w9, w8772; -O0:    bl __atomic_compare_exchange773;774; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst:775; -O1:    add w8, w0, w20776; -O1:    bl __atomic_compare_exchange777    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 1778    ret i32 %r779}780 781define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) {782; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic:783; -O0:    add x8, x9, x8784; -O0:    bl __atomic_compare_exchange785;786; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic:787; -O1:    add x8, x0, x20788; -O1:    bl __atomic_compare_exchange789    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 1790    ret i64 %r791}792 793define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) {794; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire:795; -O0:    add x8, x9, x8796; -O0:    bl __atomic_compare_exchange797;798; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire:799; -O1:    add x8, x0, x20800; -O1:    bl __atomic_compare_exchange801    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 1802    ret i64 %r803}804 805define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) {806; -O0-LABEL: atomicrmw_add_i64_unaligned_release:807; -O0:    add x8, x9, x8808; -O0:    bl __atomic_compare_exchange809;810; -O1-LABEL: atomicrmw_add_i64_unaligned_release:811; -O1:    add x8, x0, x20812; -O1:    bl __atomic_compare_exchange813    %r = atomicrmw add ptr %ptr, i64 %value release, align 1814    ret i64 %r815}816 817define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {818; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel:819; -O0:    add x8, x9, x8820; -O0:    bl __atomic_compare_exchange821;822; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel:823; -O1:    add x8, x0, x20824; -O1:    bl __atomic_compare_exchange825    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 1826    ret i64 %r827}828 829define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {830; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst:831; -O0:    add x8, x9, x8832; -O0:    bl __atomic_compare_exchange833;834; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst:835; -O1:    add x8, x0, x20836; -O1:    bl __atomic_compare_exchange837    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 1838    ret i64 %r839}840 841define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) {842; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic:843; -O0:    adds x9, x8, x9844; -O0:    subs w11, w11, #1845; -O0:    bl __atomic_compare_exchange846;847; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic:848; -O1:    ldp x0, x1, [x0]849; -O1:    adds x8, x0, x21850; -O1:    bl __atomic_compare_exchange851    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 1852    ret i128 %r853}854 855define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) {856; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire:857; -O0:    adds x9, x8, x9858; -O0:    subs w11, w11, #1859; -O0:    bl __atomic_compare_exchange860;861; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire:862; -O1:    ldp x0, x1, [x0]863; -O1:    adds x8, x0, x21864; -O1:    bl __atomic_compare_exchange865    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 1866    ret i128 %r867}868 869define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) {870; -O0-LABEL: atomicrmw_add_i128_unaligned_release:871; -O0:    adds x9, x8, x9872; -O0:    subs w11, w11, #1873; -O0:    bl __atomic_compare_exchange874;875; -O1-LABEL: atomicrmw_add_i128_unaligned_release:876; -O1:    ldp x0, x1, [x0]877; -O1:    adds x8, x0, x21878; -O1:    bl __atomic_compare_exchange879    %r = atomicrmw add ptr %ptr, i128 %value release, align 1880    ret i128 %r881}882 883define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {884; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel:885; -O0:    adds x9, x8, x9886; -O0:    subs w11, w11, #1887; -O0:    bl __atomic_compare_exchange888;889; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel:890; -O1:    ldp x0, x1, [x0]891; -O1:    adds x8, x0, x21892; -O1:    bl __atomic_compare_exchange893    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 1894    ret i128 %r895}896 897define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {898; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst:899; -O0:    adds x9, x8, x9900; -O0:    subs w11, w11, #1901; -O0:    bl __atomic_compare_exchange902;903; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst:904; -O1:    ldp x0, x1, [x0]905; -O1:    adds x8, x0, x21906; -O1:    bl __atomic_compare_exchange907    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 1908    ret i128 %r909}910 911define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) {912; -O0-LABEL: atomicrmw_sub_i8_aligned_monotonic:913; -O0:    subs w0, w8, w9914; -O0:    bl __aarch64_ldadd1_relax915;916; -O1-LABEL: atomicrmw_sub_i8_aligned_monotonic:917; -O1:    bl __aarch64_ldadd1_relax918    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1919    ret i8 %r920}921 922define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) {923; -O0-LABEL: atomicrmw_sub_i8_aligned_acquire:924; -O0:    subs w0, w8, w9925; -O0:    bl __aarch64_ldadd1_acq926;927; -O1-LABEL: atomicrmw_sub_i8_aligned_acquire:928; -O1:    bl __aarch64_ldadd1_acq929    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1930    ret i8 %r931}932 933define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) {934; -O0-LABEL: atomicrmw_sub_i8_aligned_release:935; -O0:    subs w0, w8, w9936; -O0:    bl __aarch64_ldadd1_rel937;938; -O1-LABEL: atomicrmw_sub_i8_aligned_release:939; -O1:    bl __aarch64_ldadd1_rel940    %r = atomicrmw sub ptr %ptr, i8 %value release, align 1941    ret i8 %r942}943 944define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) {945; -O0-LABEL: atomicrmw_sub_i8_aligned_acq_rel:946; -O0:    subs w0, w8, w9947; -O0:    bl __aarch64_ldadd1_acq_rel948;949; -O1-LABEL: atomicrmw_sub_i8_aligned_acq_rel:950; -O1:    bl __aarch64_ldadd1_acq_rel951    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1952    ret i8 %r953}954 955define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) {956; -O0-LABEL: atomicrmw_sub_i8_aligned_seq_cst:957; -O0:    subs w0, w8, w9958; -O0:    bl __aarch64_ldadd1_acq_rel959;960; -O1-LABEL: atomicrmw_sub_i8_aligned_seq_cst:961; -O1:    bl __aarch64_ldadd1_acq_rel962    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 1963    ret i8 %r964}965 966define dso_local i16 @atomicrmw_sub_i16_aligned_monotonic(ptr %ptr, i16 %value) {967; -O0-LABEL: atomicrmw_sub_i16_aligned_monotonic:968; -O0:    subs w0, w8, w9969; -O0:    bl __aarch64_ldadd2_relax970;971; -O1-LABEL: atomicrmw_sub_i16_aligned_monotonic:972; -O1:    bl __aarch64_ldadd2_relax973    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 2974    ret i16 %r975}976 977define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) {978; -O0-LABEL: atomicrmw_sub_i16_aligned_acquire:979; -O0:    subs w0, w8, w9980; -O0:    bl __aarch64_ldadd2_acq981;982; -O1-LABEL: atomicrmw_sub_i16_aligned_acquire:983; -O1:    bl __aarch64_ldadd2_acq984    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 2985    ret i16 %r986}987 988define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) {989; -O0-LABEL: atomicrmw_sub_i16_aligned_release:990; -O0:    subs w0, w8, w9991; -O0:    bl __aarch64_ldadd2_rel992;993; -O1-LABEL: atomicrmw_sub_i16_aligned_release:994; -O1:    bl __aarch64_ldadd2_rel995    %r = atomicrmw sub ptr %ptr, i16 %value release, align 2996    ret i16 %r997}998 999define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) {1000; -O0-LABEL: atomicrmw_sub_i16_aligned_acq_rel:1001; -O0:    subs w0, w8, w91002; -O0:    bl __aarch64_ldadd2_acq_rel1003;1004; -O1-LABEL: atomicrmw_sub_i16_aligned_acq_rel:1005; -O1:    bl __aarch64_ldadd2_acq_rel1006    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 21007    ret i16 %r1008}1009 1010define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1011; -O0-LABEL: atomicrmw_sub_i16_aligned_seq_cst:1012; -O0:    subs w0, w8, w91013; -O0:    bl __aarch64_ldadd2_acq_rel1014;1015; -O1-LABEL: atomicrmw_sub_i16_aligned_seq_cst:1016; -O1:    bl __aarch64_ldadd2_acq_rel1017    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 21018    ret i16 %r1019}1020 1021define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) {1022; -O0-LABEL: atomicrmw_sub_i32_aligned_monotonic:1023; -O0:    subs w0, w8, w91024; -O0:    bl __aarch64_ldadd4_relax1025;1026; -O1-LABEL: atomicrmw_sub_i32_aligned_monotonic:1027; -O1:    bl __aarch64_ldadd4_relax1028    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 41029    ret i32 %r1030}1031 1032define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) {1033; -O0-LABEL: atomicrmw_sub_i32_aligned_acquire:1034; -O0:    subs w0, w8, w91035; -O0:    bl __aarch64_ldadd4_acq1036;1037; -O1-LABEL: atomicrmw_sub_i32_aligned_acquire:1038; -O1:    bl __aarch64_ldadd4_acq1039    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 41040    ret i32 %r1041}1042 1043define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) {1044; -O0-LABEL: atomicrmw_sub_i32_aligned_release:1045; -O0:    subs w0, w8, w91046; -O0:    bl __aarch64_ldadd4_rel1047;1048; -O1-LABEL: atomicrmw_sub_i32_aligned_release:1049; -O1:    bl __aarch64_ldadd4_rel1050    %r = atomicrmw sub ptr %ptr, i32 %value release, align 41051    ret i32 %r1052}1053 1054define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1055; -O0-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1056; -O0:    subs w0, w8, w91057; -O0:    bl __aarch64_ldadd4_acq_rel1058;1059; -O1-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1060; -O1:    bl __aarch64_ldadd4_acq_rel1061    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 41062    ret i32 %r1063}1064 1065define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1066; -O0-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1067; -O0:    subs w0, w8, w91068; -O0:    bl __aarch64_ldadd4_acq_rel1069;1070; -O1-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1071; -O1:    bl __aarch64_ldadd4_acq_rel1072    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 41073    ret i32 %r1074}1075 1076define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) {1077; -O0-LABEL: atomicrmw_sub_i64_aligned_monotonic:1078; -O0:    subs x0, x8, x91079; -O0:    bl __aarch64_ldadd8_relax1080;1081; -O1-LABEL: atomicrmw_sub_i64_aligned_monotonic:1082; -O1:    bl __aarch64_ldadd8_relax1083    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 81084    ret i64 %r1085}1086 1087define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) {1088; -O0-LABEL: atomicrmw_sub_i64_aligned_acquire:1089; -O0:    subs x0, x8, x91090; -O0:    bl __aarch64_ldadd8_acq1091;1092; -O1-LABEL: atomicrmw_sub_i64_aligned_acquire:1093; -O1:    bl __aarch64_ldadd8_acq1094    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 81095    ret i64 %r1096}1097 1098define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) {1099; -O0-LABEL: atomicrmw_sub_i64_aligned_release:1100; -O0:    subs x0, x8, x91101; -O0:    bl __aarch64_ldadd8_rel1102;1103; -O1-LABEL: atomicrmw_sub_i64_aligned_release:1104; -O1:    bl __aarch64_ldadd8_rel1105    %r = atomicrmw sub ptr %ptr, i64 %value release, align 81106    ret i64 %r1107}1108 1109define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1110; -O0-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1111; -O0:    subs x0, x8, x91112; -O0:    bl __aarch64_ldadd8_acq_rel1113;1114; -O1-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1115; -O1:    bl __aarch64_ldadd8_acq_rel1116    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 81117    ret i64 %r1118}1119 1120define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1121; -O0-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1122; -O0:    subs x0, x8, x91123; -O0:    bl __aarch64_ldadd8_acq_rel1124;1125; -O1-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1126; -O1:    bl __aarch64_ldadd8_acq_rel1127    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 81128    ret i64 %r1129}1130 1131define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) {1132; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic:1133; -O0:    subs x2, x8, x101134; -O0:    bl __aarch64_cas16_relax1135; -O0:    eor x8, x0, x81136; -O0:    eor x9, x1, x91137; -O0:    orr x8, x8, x91138; -O0:    subs x8, x8, #01139;1140; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic:1141; -O1:    ldxp x0, x1, [x8]1142; -O1:    subs x9, x0, x21143; -O1:    stxp w11, x9, x10, [x8]1144    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 161145    ret i128 %r1146}1147 1148define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) {1149; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire:1150; -O0:    subs x2, x8, x101151; -O0:    bl __aarch64_cas16_acq1152; -O0:    eor x8, x0, x81153; -O0:    eor x9, x1, x91154; -O0:    orr x8, x8, x91155; -O0:    subs x8, x8, #01156;1157; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire:1158; -O1:    ldaxp x0, x1, [x8]1159; -O1:    subs x9, x0, x21160; -O1:    stxp w11, x9, x10, [x8]1161    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 161162    ret i128 %r1163}1164 1165define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) {1166; -O0-LABEL: atomicrmw_sub_i128_aligned_release:1167; -O0:    subs x2, x8, x101168; -O0:    bl __aarch64_cas16_rel1169; -O0:    eor x8, x0, x81170; -O0:    eor x9, x1, x91171; -O0:    orr x8, x8, x91172; -O0:    subs x8, x8, #01173;1174; -O1-LABEL: atomicrmw_sub_i128_aligned_release:1175; -O1:    ldxp x0, x1, [x8]1176; -O1:    subs x9, x0, x21177; -O1:    stlxp w11, x9, x10, [x8]1178    %r = atomicrmw sub ptr %ptr, i128 %value release, align 161179    ret i128 %r1180}1181 1182define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1183; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1184; -O0:    subs x2, x8, x101185; -O0:    bl __aarch64_cas16_acq_rel1186; -O0:    eor x8, x0, x81187; -O0:    eor x9, x1, x91188; -O0:    orr x8, x8, x91189; -O0:    subs x8, x8, #01190;1191; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1192; -O1:    ldaxp x0, x1, [x8]1193; -O1:    subs x9, x0, x21194; -O1:    stlxp w11, x9, x10, [x8]1195    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 161196    ret i128 %r1197}1198 1199define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1200; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1201; -O0:    subs x2, x8, x101202; -O0:    bl __aarch64_cas16_acq_rel1203; -O0:    eor x8, x0, x81204; -O0:    eor x9, x1, x91205; -O0:    orr x8, x8, x91206; -O0:    subs x8, x8, #01207;1208; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1209; -O1:    ldaxp x0, x1, [x8]1210; -O1:    subs x9, x0, x21211; -O1:    stlxp w11, x9, x10, [x8]1212    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 161213    ret i128 %r1214}1215 1216define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1217; -O0-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1218; -O0:    subs w0, w8, w91219; -O0:    bl __aarch64_ldadd1_relax1220;1221; -O1-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1222; -O1:    bl __aarch64_ldadd1_relax1223    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11224    ret i8 %r1225}1226 1227define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) {1228; -O0-LABEL: atomicrmw_sub_i8_unaligned_acquire:1229; -O0:    subs w0, w8, w91230; -O0:    bl __aarch64_ldadd1_acq1231;1232; -O1-LABEL: atomicrmw_sub_i8_unaligned_acquire:1233; -O1:    bl __aarch64_ldadd1_acq1234    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11235    ret i8 %r1236}1237 1238define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) {1239; -O0-LABEL: atomicrmw_sub_i8_unaligned_release:1240; -O0:    subs w0, w8, w91241; -O0:    bl __aarch64_ldadd1_rel1242;1243; -O1-LABEL: atomicrmw_sub_i8_unaligned_release:1244; -O1:    bl __aarch64_ldadd1_rel1245    %r = atomicrmw sub ptr %ptr, i8 %value release, align 11246    ret i8 %r1247}1248 1249define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1250; -O0-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1251; -O0:    subs w0, w8, w91252; -O0:    bl __aarch64_ldadd1_acq_rel1253;1254; -O1-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1255; -O1:    bl __aarch64_ldadd1_acq_rel1256    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11257    ret i8 %r1258}1259 1260define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1261; -O0-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1262; -O0:    subs w0, w8, w91263; -O0:    bl __aarch64_ldadd1_acq_rel1264;1265; -O1-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1266; -O1:    bl __aarch64_ldadd1_acq_rel1267    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11268    ret i8 %r1269}1270 1271define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1272; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1273; -O0:    subs w8, w9, w81274; -O0:    bl __atomic_compare_exchange1275;1276; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1277; -O1:    sub w8, w0, w201278; -O1:    bl __atomic_compare_exchange1279    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 11280    ret i16 %r1281}1282 1283define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) {1284; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire:1285; -O0:    subs w8, w9, w81286; -O0:    bl __atomic_compare_exchange1287;1288; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire:1289; -O1:    sub w8, w0, w201290; -O1:    bl __atomic_compare_exchange1291    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 11292    ret i16 %r1293}1294 1295define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) {1296; -O0-LABEL: atomicrmw_sub_i16_unaligned_release:1297; -O0:    subs w8, w9, w81298; -O0:    bl __atomic_compare_exchange1299;1300; -O1-LABEL: atomicrmw_sub_i16_unaligned_release:1301; -O1:    sub w8, w0, w201302; -O1:    bl __atomic_compare_exchange1303    %r = atomicrmw sub ptr %ptr, i16 %value release, align 11304    ret i16 %r1305}1306 1307define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1308; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1309; -O0:    subs w8, w9, w81310; -O0:    bl __atomic_compare_exchange1311;1312; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1313; -O1:    sub w8, w0, w201314; -O1:    bl __atomic_compare_exchange1315    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 11316    ret i16 %r1317}1318 1319define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1320; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1321; -O0:    subs w8, w9, w81322; -O0:    bl __atomic_compare_exchange1323;1324; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1325; -O1:    sub w8, w0, w201326; -O1:    bl __atomic_compare_exchange1327    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 11328    ret i16 %r1329}1330 1331define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1332; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1333; -O0:    subs w8, w9, w81334; -O0:    bl __atomic_compare_exchange1335;1336; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1337; -O1:    sub w8, w0, w201338; -O1:    bl __atomic_compare_exchange1339    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 11340    ret i32 %r1341}1342 1343define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) {1344; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire:1345; -O0:    subs w8, w9, w81346; -O0:    bl __atomic_compare_exchange1347;1348; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire:1349; -O1:    sub w8, w0, w201350; -O1:    bl __atomic_compare_exchange1351    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 11352    ret i32 %r1353}1354 1355define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) {1356; -O0-LABEL: atomicrmw_sub_i32_unaligned_release:1357; -O0:    subs w8, w9, w81358; -O0:    bl __atomic_compare_exchange1359;1360; -O1-LABEL: atomicrmw_sub_i32_unaligned_release:1361; -O1:    sub w8, w0, w201362; -O1:    bl __atomic_compare_exchange1363    %r = atomicrmw sub ptr %ptr, i32 %value release, align 11364    ret i32 %r1365}1366 1367define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1368; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1369; -O0:    subs w8, w9, w81370; -O0:    bl __atomic_compare_exchange1371;1372; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1373; -O1:    sub w8, w0, w201374; -O1:    bl __atomic_compare_exchange1375    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 11376    ret i32 %r1377}1378 1379define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1380; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1381; -O0:    subs w8, w9, w81382; -O0:    bl __atomic_compare_exchange1383;1384; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1385; -O1:    sub w8, w0, w201386; -O1:    bl __atomic_compare_exchange1387    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 11388    ret i32 %r1389}1390 1391define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1392; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1393; -O0:    subs x8, x9, x81394; -O0:    bl __atomic_compare_exchange1395;1396; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1397; -O1:    sub x8, x0, x201398; -O1:    bl __atomic_compare_exchange1399    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 11400    ret i64 %r1401}1402 1403define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) {1404; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire:1405; -O0:    subs x8, x9, x81406; -O0:    bl __atomic_compare_exchange1407;1408; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire:1409; -O1:    sub x8, x0, x201410; -O1:    bl __atomic_compare_exchange1411    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 11412    ret i64 %r1413}1414 1415define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) {1416; -O0-LABEL: atomicrmw_sub_i64_unaligned_release:1417; -O0:    subs x8, x9, x81418; -O0:    bl __atomic_compare_exchange1419;1420; -O1-LABEL: atomicrmw_sub_i64_unaligned_release:1421; -O1:    sub x8, x0, x201422; -O1:    bl __atomic_compare_exchange1423    %r = atomicrmw sub ptr %ptr, i64 %value release, align 11424    ret i64 %r1425}1426 1427define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1428; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1429; -O0:    subs x8, x9, x81430; -O0:    bl __atomic_compare_exchange1431;1432; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1433; -O1:    sub x8, x0, x201434; -O1:    bl __atomic_compare_exchange1435    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 11436    ret i64 %r1437}1438 1439define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1440; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1441; -O0:    subs x8, x9, x81442; -O0:    bl __atomic_compare_exchange1443;1444; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1445; -O1:    sub x8, x0, x201446; -O1:    bl __atomic_compare_exchange1447    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 11448    ret i64 %r1449}1450 1451define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1452; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1453; -O0:    subs x9, x8, x91454; -O0:    bl __atomic_compare_exchange1455;1456; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1457; -O1:    ldp x0, x1, [x0]1458; -O1:    subs x8, x0, x211459; -O1:    bl __atomic_compare_exchange1460    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 11461    ret i128 %r1462}1463 1464define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) {1465; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire:1466; -O0:    subs x9, x8, x91467; -O0:    bl __atomic_compare_exchange1468;1469; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire:1470; -O1:    ldp x0, x1, [x0]1471; -O1:    subs x8, x0, x211472; -O1:    bl __atomic_compare_exchange1473    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 11474    ret i128 %r1475}1476 1477define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) {1478; -O0-LABEL: atomicrmw_sub_i128_unaligned_release:1479; -O0:    subs x9, x8, x91480; -O0:    bl __atomic_compare_exchange1481;1482; -O1-LABEL: atomicrmw_sub_i128_unaligned_release:1483; -O1:    ldp x0, x1, [x0]1484; -O1:    subs x8, x0, x211485; -O1:    bl __atomic_compare_exchange1486    %r = atomicrmw sub ptr %ptr, i128 %value release, align 11487    ret i128 %r1488}1489 1490define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1491; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1492; -O0:    subs x9, x8, x91493; -O0:    bl __atomic_compare_exchange1494;1495; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1496; -O1:    ldp x0, x1, [x0]1497; -O1:    subs x8, x0, x211498; -O1:    bl __atomic_compare_exchange1499    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 11500    ret i128 %r1501}1502 1503define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1504; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1505; -O0:    subs x9, x8, x91506; -O0:    bl __atomic_compare_exchange1507;1508; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1509; -O1:    ldp x0, x1, [x0]1510; -O1:    subs x8, x0, x211511; -O1:    bl __atomic_compare_exchange1512    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 11513    ret i128 %r1514}1515 1516define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) {1517; -O0-LABEL: atomicrmw_and_i8_aligned_monotonic:1518; -O0:    eor w0, w8, w91519; -O0:    bl __aarch64_ldclr1_relax1520;1521; -O1-LABEL: atomicrmw_and_i8_aligned_monotonic:1522; -O1:    mvn w0, w11523; -O1:    bl __aarch64_ldclr1_relax1524    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11525    ret i8 %r1526}1527 1528define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) {1529; -O0-LABEL: atomicrmw_and_i8_aligned_acquire:1530; -O0:    eor w0, w8, w91531; -O0:    bl __aarch64_ldclr1_acq1532;1533; -O1-LABEL: atomicrmw_and_i8_aligned_acquire:1534; -O1:    mvn w0, w11535; -O1:    bl __aarch64_ldclr1_acq1536    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11537    ret i8 %r1538}1539 1540define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) {1541; -O0-LABEL: atomicrmw_and_i8_aligned_release:1542; -O0:    eor w0, w8, w91543; -O0:    bl __aarch64_ldclr1_rel1544;1545; -O1-LABEL: atomicrmw_and_i8_aligned_release:1546; -O1:    mvn w0, w11547; -O1:    bl __aarch64_ldclr1_rel1548    %r = atomicrmw and ptr %ptr, i8 %value release, align 11549    ret i8 %r1550}1551 1552define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) {1553; -O0-LABEL: atomicrmw_and_i8_aligned_acq_rel:1554; -O0:    eor w0, w8, w91555; -O0:    bl __aarch64_ldclr1_acq_rel1556;1557; -O1-LABEL: atomicrmw_and_i8_aligned_acq_rel:1558; -O1:    mvn w0, w11559; -O1:    bl __aarch64_ldclr1_acq_rel1560    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11561    ret i8 %r1562}1563 1564define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) {1565; -O0-LABEL: atomicrmw_and_i8_aligned_seq_cst:1566; -O0:    eor w0, w8, w91567; -O0:    bl __aarch64_ldclr1_acq_rel1568;1569; -O1-LABEL: atomicrmw_and_i8_aligned_seq_cst:1570; -O1:    mvn w0, w11571; -O1:    bl __aarch64_ldclr1_acq_rel1572    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11573    ret i8 %r1574}1575 1576define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) {1577; -O0-LABEL: atomicrmw_and_i16_aligned_monotonic:1578; -O0:    eor w0, w8, w91579; -O0:    bl __aarch64_ldclr2_relax1580;1581; -O1-LABEL: atomicrmw_and_i16_aligned_monotonic:1582; -O1:    mvn w0, w11583; -O1:    bl __aarch64_ldclr2_relax1584    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 21585    ret i16 %r1586}1587 1588define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) {1589; -O0-LABEL: atomicrmw_and_i16_aligned_acquire:1590; -O0:    eor w0, w8, w91591; -O0:    bl __aarch64_ldclr2_acq1592;1593; -O1-LABEL: atomicrmw_and_i16_aligned_acquire:1594; -O1:    mvn w0, w11595; -O1:    bl __aarch64_ldclr2_acq1596    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 21597    ret i16 %r1598}1599 1600define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) {1601; -O0-LABEL: atomicrmw_and_i16_aligned_release:1602; -O0:    eor w0, w8, w91603; -O0:    bl __aarch64_ldclr2_rel1604;1605; -O1-LABEL: atomicrmw_and_i16_aligned_release:1606; -O1:    mvn w0, w11607; -O1:    bl __aarch64_ldclr2_rel1608    %r = atomicrmw and ptr %ptr, i16 %value release, align 21609    ret i16 %r1610}1611 1612define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) {1613; -O0-LABEL: atomicrmw_and_i16_aligned_acq_rel:1614; -O0:    eor w0, w8, w91615; -O0:    bl __aarch64_ldclr2_acq_rel1616;1617; -O1-LABEL: atomicrmw_and_i16_aligned_acq_rel:1618; -O1:    mvn w0, w11619; -O1:    bl __aarch64_ldclr2_acq_rel1620    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 21621    ret i16 %r1622}1623 1624define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1625; -O0-LABEL: atomicrmw_and_i16_aligned_seq_cst:1626; -O0:    eor w0, w8, w91627; -O0:    bl __aarch64_ldclr2_acq_rel1628;1629; -O1-LABEL: atomicrmw_and_i16_aligned_seq_cst:1630; -O1:    mvn w0, w11631; -O1:    bl __aarch64_ldclr2_acq_rel1632    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 21633    ret i16 %r1634}1635 1636define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) {1637; -O0-LABEL: atomicrmw_and_i32_aligned_monotonic:1638; -O0:    eor w0, w8, w91639; -O0:    bl __aarch64_ldclr4_relax1640;1641; -O1-LABEL: atomicrmw_and_i32_aligned_monotonic:1642; -O1:    mvn w0, w11643; -O1:    bl __aarch64_ldclr4_relax1644    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 41645    ret i32 %r1646}1647 1648define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) {1649; -O0-LABEL: atomicrmw_and_i32_aligned_acquire:1650; -O0:    eor w0, w8, w91651; -O0:    bl __aarch64_ldclr4_acq1652;1653; -O1-LABEL: atomicrmw_and_i32_aligned_acquire:1654; -O1:    mvn w0, w11655; -O1:    bl __aarch64_ldclr4_acq1656    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 41657    ret i32 %r1658}1659 1660define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) {1661; -O0-LABEL: atomicrmw_and_i32_aligned_release:1662; -O0:    eor w0, w8, w91663; -O0:    bl __aarch64_ldclr4_rel1664;1665; -O1-LABEL: atomicrmw_and_i32_aligned_release:1666; -O1:    mvn w0, w11667; -O1:    bl __aarch64_ldclr4_rel1668    %r = atomicrmw and ptr %ptr, i32 %value release, align 41669    ret i32 %r1670}1671 1672define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1673; -O0-LABEL: atomicrmw_and_i32_aligned_acq_rel:1674; -O0:    eor w0, w8, w91675; -O0:    bl __aarch64_ldclr4_acq_rel1676;1677; -O1-LABEL: atomicrmw_and_i32_aligned_acq_rel:1678; -O1:    mvn w0, w11679; -O1:    bl __aarch64_ldclr4_acq_rel1680    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 41681    ret i32 %r1682}1683 1684define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1685; -O0-LABEL: atomicrmw_and_i32_aligned_seq_cst:1686; -O0:    eor w0, w8, w91687; -O0:    bl __aarch64_ldclr4_acq_rel1688;1689; -O1-LABEL: atomicrmw_and_i32_aligned_seq_cst:1690; -O1:    mvn w0, w11691; -O1:    bl __aarch64_ldclr4_acq_rel1692    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 41693    ret i32 %r1694}1695 1696define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) {1697; -O0-LABEL: atomicrmw_and_i64_aligned_monotonic:1698; -O0:    eor x0, x8, x91699; -O0:    bl __aarch64_ldclr8_relax1700;1701; -O1-LABEL: atomicrmw_and_i64_aligned_monotonic:1702; -O1:    mvn x0, x11703; -O1:    bl __aarch64_ldclr8_relax1704    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 81705    ret i64 %r1706}1707 1708define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) {1709; -O0-LABEL: atomicrmw_and_i64_aligned_acquire:1710; -O0:    eor x0, x8, x91711; -O0:    bl __aarch64_ldclr8_acq1712;1713; -O1-LABEL: atomicrmw_and_i64_aligned_acquire:1714; -O1:    mvn x0, x11715; -O1:    bl __aarch64_ldclr8_acq1716    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 81717    ret i64 %r1718}1719 1720define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) {1721; -O0-LABEL: atomicrmw_and_i64_aligned_release:1722; -O0:    eor x0, x8, x91723; -O0:    bl __aarch64_ldclr8_rel1724;1725; -O1-LABEL: atomicrmw_and_i64_aligned_release:1726; -O1:    mvn x0, x11727; -O1:    bl __aarch64_ldclr8_rel1728    %r = atomicrmw and ptr %ptr, i64 %value release, align 81729    ret i64 %r1730}1731 1732define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1733; -O0-LABEL: atomicrmw_and_i64_aligned_acq_rel:1734; -O0:    eor x0, x8, x91735; -O0:    bl __aarch64_ldclr8_acq_rel1736;1737; -O1-LABEL: atomicrmw_and_i64_aligned_acq_rel:1738; -O1:    mvn x0, x11739; -O1:    bl __aarch64_ldclr8_acq_rel1740    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 81741    ret i64 %r1742}1743 1744define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1745; -O0-LABEL: atomicrmw_and_i64_aligned_seq_cst:1746; -O0:    eor x0, x8, x91747; -O0:    bl __aarch64_ldclr8_acq_rel1748;1749; -O1-LABEL: atomicrmw_and_i64_aligned_seq_cst:1750; -O1:    mvn x0, x11751; -O1:    bl __aarch64_ldclr8_acq_rel1752    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 81753    ret i64 %r1754}1755 1756define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) {1757; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic:1758; -O0:    and x2, x8, x101759; -O0:    and x3, x8, x91760; -O0:    bl __aarch64_cas16_relax1761; -O0:    eor x8, x0, x81762; -O0:    eor x9, x1, x91763; -O0:    orr x8, x8, x91764; -O0:    subs x8, x8, #01765;1766; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic:1767; -O1:    ldxp x0, x1, [x8]1768; -O1:    and x9, x1, x31769; -O1:    and x10, x0, x21770; -O1:    stxp w11, x10, x9, [x8]1771    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 161772    ret i128 %r1773}1774 1775define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) {1776; -O0-LABEL: atomicrmw_and_i128_aligned_acquire:1777; -O0:    and x2, x8, x101778; -O0:    and x3, x8, x91779; -O0:    bl __aarch64_cas16_acq1780; -O0:    eor x8, x0, x81781; -O0:    eor x9, x1, x91782; -O0:    orr x8, x8, x91783; -O0:    subs x8, x8, #01784;1785; -O1-LABEL: atomicrmw_and_i128_aligned_acquire:1786; -O1:    ldaxp x0, x1, [x8]1787; -O1:    and x9, x1, x31788; -O1:    and x10, x0, x21789; -O1:    stxp w11, x10, x9, [x8]1790    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 161791    ret i128 %r1792}1793 1794define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) {1795; -O0-LABEL: atomicrmw_and_i128_aligned_release:1796; -O0:    and x2, x8, x101797; -O0:    and x3, x8, x91798; -O0:    bl __aarch64_cas16_rel1799; -O0:    eor x8, x0, x81800; -O0:    eor x9, x1, x91801; -O0:    orr x8, x8, x91802; -O0:    subs x8, x8, #01803;1804; -O1-LABEL: atomicrmw_and_i128_aligned_release:1805; -O1:    ldxp x0, x1, [x8]1806; -O1:    and x9, x1, x31807; -O1:    and x10, x0, x21808; -O1:    stlxp w11, x10, x9, [x8]1809    %r = atomicrmw and ptr %ptr, i128 %value release, align 161810    ret i128 %r1811}1812 1813define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1814; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel:1815; -O0:    and x2, x8, x101816; -O0:    and x3, x8, x91817; -O0:    bl __aarch64_cas16_acq_rel1818; -O0:    eor x8, x0, x81819; -O0:    eor x9, x1, x91820; -O0:    orr x8, x8, x91821; -O0:    subs x8, x8, #01822;1823; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel:1824; -O1:    ldaxp x0, x1, [x8]1825; -O1:    and x9, x1, x31826; -O1:    and x10, x0, x21827; -O1:    stlxp w11, x10, x9, [x8]1828    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 161829    ret i128 %r1830}1831 1832define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1833; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst:1834; -O0:    and x2, x8, x101835; -O0:    and x3, x8, x91836; -O0:    bl __aarch64_cas16_acq_rel1837; -O0:    eor x8, x0, x81838; -O0:    eor x9, x1, x91839; -O0:    orr x8, x8, x91840; -O0:    subs x8, x8, #01841;1842; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst:1843; -O1:    ldaxp x0, x1, [x8]1844; -O1:    and x9, x1, x31845; -O1:    and x10, x0, x21846; -O1:    stlxp w11, x10, x9, [x8]1847    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 161848    ret i128 %r1849}1850 1851define dso_local i8 @atomicrmw_and_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1852; -O0-LABEL: atomicrmw_and_i8_unaligned_monotonic:1853; -O0:    eor w0, w8, w91854; -O0:    bl __aarch64_ldclr1_relax1855;1856; -O1-LABEL: atomicrmw_and_i8_unaligned_monotonic:1857; -O1:    mvn w0, w11858; -O1:    bl __aarch64_ldclr1_relax1859    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11860    ret i8 %r1861}1862 1863define dso_local i8 @atomicrmw_and_i8_unaligned_acquire(ptr %ptr, i8 %value) {1864; -O0-LABEL: atomicrmw_and_i8_unaligned_acquire:1865; -O0:    eor w0, w8, w91866; -O0:    bl __aarch64_ldclr1_acq1867;1868; -O1-LABEL: atomicrmw_and_i8_unaligned_acquire:1869; -O1:    mvn w0, w11870; -O1:    bl __aarch64_ldclr1_acq1871    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11872    ret i8 %r1873}1874 1875define dso_local i8 @atomicrmw_and_i8_unaligned_release(ptr %ptr, i8 %value) {1876; -O0-LABEL: atomicrmw_and_i8_unaligned_release:1877; -O0:    eor w0, w8, w91878; -O0:    bl __aarch64_ldclr1_rel1879;1880; -O1-LABEL: atomicrmw_and_i8_unaligned_release:1881; -O1:    mvn w0, w11882; -O1:    bl __aarch64_ldclr1_rel1883    %r = atomicrmw and ptr %ptr, i8 %value release, align 11884    ret i8 %r1885}1886 1887define dso_local i8 @atomicrmw_and_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1888; -O0-LABEL: atomicrmw_and_i8_unaligned_acq_rel:1889; -O0:    eor w0, w8, w91890; -O0:    bl __aarch64_ldclr1_acq_rel1891;1892; -O1-LABEL: atomicrmw_and_i8_unaligned_acq_rel:1893; -O1:    mvn w0, w11894; -O1:    bl __aarch64_ldclr1_acq_rel1895    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11896    ret i8 %r1897}1898 1899define dso_local i8 @atomicrmw_and_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1900; -O0-LABEL: atomicrmw_and_i8_unaligned_seq_cst:1901; -O0:    eor w0, w8, w91902; -O0:    bl __aarch64_ldclr1_acq_rel1903;1904; -O1-LABEL: atomicrmw_and_i8_unaligned_seq_cst:1905; -O1:    mvn w0, w11906; -O1:    bl __aarch64_ldclr1_acq_rel1907    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11908    ret i8 %r1909}1910 1911define dso_local i16 @atomicrmw_and_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1912; -O0-LABEL: atomicrmw_and_i16_unaligned_monotonic:1913; -O0:    and w8, w9, w81914; -O0:    bl __atomic_compare_exchange1915;1916; -O1-LABEL: atomicrmw_and_i16_unaligned_monotonic:1917; -O1:    and w8, w0, w201918; -O1:    bl __atomic_compare_exchange1919    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 11920    ret i16 %r1921}1922 1923define dso_local i16 @atomicrmw_and_i16_unaligned_acquire(ptr %ptr, i16 %value) {1924; -O0-LABEL: atomicrmw_and_i16_unaligned_acquire:1925; -O0:    and w8, w9, w81926; -O0:    bl __atomic_compare_exchange1927;1928; -O1-LABEL: atomicrmw_and_i16_unaligned_acquire:1929; -O1:    and w8, w0, w201930; -O1:    bl __atomic_compare_exchange1931    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 11932    ret i16 %r1933}1934 1935define dso_local i16 @atomicrmw_and_i16_unaligned_release(ptr %ptr, i16 %value) {1936; -O0-LABEL: atomicrmw_and_i16_unaligned_release:1937; -O0:    and w8, w9, w81938; -O0:    bl __atomic_compare_exchange1939;1940; -O1-LABEL: atomicrmw_and_i16_unaligned_release:1941; -O1:    and w8, w0, w201942; -O1:    bl __atomic_compare_exchange1943    %r = atomicrmw and ptr %ptr, i16 %value release, align 11944    ret i16 %r1945}1946 1947define dso_local i16 @atomicrmw_and_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1948; -O0-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1949; -O0:    and w8, w9, w81950; -O0:    bl __atomic_compare_exchange1951;1952; -O1-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1953; -O1:    and w8, w0, w201954; -O1:    bl __atomic_compare_exchange1955    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 11956    ret i16 %r1957}1958 1959define dso_local i16 @atomicrmw_and_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1960; -O0-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1961; -O0:    and w8, w9, w81962; -O0:    bl __atomic_compare_exchange1963;1964; -O1-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1965; -O1:    and w8, w0, w201966; -O1:    bl __atomic_compare_exchange1967    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 11968    ret i16 %r1969}1970 1971define dso_local i32 @atomicrmw_and_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1972; -O0-LABEL: atomicrmw_and_i32_unaligned_monotonic:1973; -O0:    and w8, w9, w81974; -O0:    bl __atomic_compare_exchange1975;1976; -O1-LABEL: atomicrmw_and_i32_unaligned_monotonic:1977; -O1:    and w8, w0, w201978; -O1:    bl __atomic_compare_exchange1979    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 11980    ret i32 %r1981}1982 1983define dso_local i32 @atomicrmw_and_i32_unaligned_acquire(ptr %ptr, i32 %value) {1984; -O0-LABEL: atomicrmw_and_i32_unaligned_acquire:1985; -O0:    and w8, w9, w81986; -O0:    bl __atomic_compare_exchange1987;1988; -O1-LABEL: atomicrmw_and_i32_unaligned_acquire:1989; -O1:    and w8, w0, w201990; -O1:    bl __atomic_compare_exchange1991    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 11992    ret i32 %r1993}1994 1995define dso_local i32 @atomicrmw_and_i32_unaligned_release(ptr %ptr, i32 %value) {1996; -O0-LABEL: atomicrmw_and_i32_unaligned_release:1997; -O0:    and w8, w9, w81998; -O0:    bl __atomic_compare_exchange1999;2000; -O1-LABEL: atomicrmw_and_i32_unaligned_release:2001; -O1:    and w8, w0, w202002; -O1:    bl __atomic_compare_exchange2003    %r = atomicrmw and ptr %ptr, i32 %value release, align 12004    ret i32 %r2005}2006 2007define dso_local i32 @atomicrmw_and_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {2008; -O0-LABEL: atomicrmw_and_i32_unaligned_acq_rel:2009; -O0:    and w8, w9, w82010; -O0:    bl __atomic_compare_exchange2011;2012; -O1-LABEL: atomicrmw_and_i32_unaligned_acq_rel:2013; -O1:    and w8, w0, w202014; -O1:    bl __atomic_compare_exchange2015    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 12016    ret i32 %r2017}2018 2019define dso_local i32 @atomicrmw_and_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {2020; -O0-LABEL: atomicrmw_and_i32_unaligned_seq_cst:2021; -O0:    and w8, w9, w82022; -O0:    bl __atomic_compare_exchange2023;2024; -O1-LABEL: atomicrmw_and_i32_unaligned_seq_cst:2025; -O1:    and w8, w0, w202026; -O1:    bl __atomic_compare_exchange2027    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 12028    ret i32 %r2029}2030 2031define dso_local i64 @atomicrmw_and_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2032; -O0-LABEL: atomicrmw_and_i64_unaligned_monotonic:2033; -O0:    and x8, x9, x82034; -O0:    bl __atomic_compare_exchange2035;2036; -O1-LABEL: atomicrmw_and_i64_unaligned_monotonic:2037; -O1:    and x8, x0, x202038; -O1:    bl __atomic_compare_exchange2039    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 12040    ret i64 %r2041}2042 2043define dso_local i64 @atomicrmw_and_i64_unaligned_acquire(ptr %ptr, i64 %value) {2044; -O0-LABEL: atomicrmw_and_i64_unaligned_acquire:2045; -O0:    and x8, x9, x82046; -O0:    bl __atomic_compare_exchange2047;2048; -O1-LABEL: atomicrmw_and_i64_unaligned_acquire:2049; -O1:    and x8, x0, x202050; -O1:    bl __atomic_compare_exchange2051    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 12052    ret i64 %r2053}2054 2055define dso_local i64 @atomicrmw_and_i64_unaligned_release(ptr %ptr, i64 %value) {2056; -O0-LABEL: atomicrmw_and_i64_unaligned_release:2057; -O0:    and x8, x9, x82058; -O0:    bl __atomic_compare_exchange2059;2060; -O1-LABEL: atomicrmw_and_i64_unaligned_release:2061; -O1:    and x8, x0, x202062; -O1:    bl __atomic_compare_exchange2063    %r = atomicrmw and ptr %ptr, i64 %value release, align 12064    ret i64 %r2065}2066 2067define dso_local i64 @atomicrmw_and_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2068; -O0-LABEL: atomicrmw_and_i64_unaligned_acq_rel:2069; -O0:    and x8, x9, x82070; -O0:    bl __atomic_compare_exchange2071;2072; -O1-LABEL: atomicrmw_and_i64_unaligned_acq_rel:2073; -O1:    and x8, x0, x202074; -O1:    bl __atomic_compare_exchange2075    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 12076    ret i64 %r2077}2078 2079define dso_local i64 @atomicrmw_and_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2080; -O0-LABEL: atomicrmw_and_i64_unaligned_seq_cst:2081; -O0:    and x8, x9, x82082; -O0:    bl __atomic_compare_exchange2083;2084; -O1-LABEL: atomicrmw_and_i64_unaligned_seq_cst:2085; -O1:    and x8, x0, x202086; -O1:    bl __atomic_compare_exchange2087    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 12088    ret i64 %r2089}2090 2091define dso_local i128 @atomicrmw_and_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2092; -O0-LABEL: atomicrmw_and_i128_unaligned_monotonic:2093; -O0:    and x9, x8, x92094; -O0:    and x8, x8, x102095; -O0:    bl __atomic_compare_exchange2096;2097; -O1-LABEL: atomicrmw_and_i128_unaligned_monotonic:2098; -O1:    ldp x0, x1, [x0]2099; -O1:    and x8, x1, x192100; -O1:    and x9, x0, x212101; -O1:    bl __atomic_compare_exchange2102    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 12103    ret i128 %r2104}2105 2106define dso_local i128 @atomicrmw_and_i128_unaligned_acquire(ptr %ptr, i128 %value) {2107; -O0-LABEL: atomicrmw_and_i128_unaligned_acquire:2108; -O0:    and x9, x8, x92109; -O0:    and x8, x8, x102110; -O0:    bl __atomic_compare_exchange2111;2112; -O1-LABEL: atomicrmw_and_i128_unaligned_acquire:2113; -O1:    ldp x0, x1, [x0]2114; -O1:    and x8, x1, x192115; -O1:    and x9, x0, x212116; -O1:    bl __atomic_compare_exchange2117    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 12118    ret i128 %r2119}2120 2121define dso_local i128 @atomicrmw_and_i128_unaligned_release(ptr %ptr, i128 %value) {2122; -O0-LABEL: atomicrmw_and_i128_unaligned_release:2123; -O0:    and x9, x8, x92124; -O0:    and x8, x8, x102125; -O0:    bl __atomic_compare_exchange2126;2127; -O1-LABEL: atomicrmw_and_i128_unaligned_release:2128; -O1:    ldp x0, x1, [x0]2129; -O1:    and x8, x1, x192130; -O1:    and x9, x0, x212131; -O1:    bl __atomic_compare_exchange2132    %r = atomicrmw and ptr %ptr, i128 %value release, align 12133    ret i128 %r2134}2135 2136define dso_local i128 @atomicrmw_and_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2137; -O0-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2138; -O0:    and x9, x8, x92139; -O0:    and x8, x8, x102140; -O0:    bl __atomic_compare_exchange2141;2142; -O1-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2143; -O1:    ldp x0, x1, [x0]2144; -O1:    and x8, x1, x192145; -O1:    and x9, x0, x212146; -O1:    bl __atomic_compare_exchange2147    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 12148    ret i128 %r2149}2150 2151define dso_local i128 @atomicrmw_and_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2152; -O0-LABEL: atomicrmw_and_i128_unaligned_seq_cst:2153; -O0:    and x9, x8, x92154; -O0:    and x8, x8, x102155; -O0:    bl __atomic_compare_exchange2156;2157; -O1-LABEL: atomicrmw_and_i128_unaligned_seq_cst:2158; -O1:    ldp x0, x1, [x0]2159; -O1:    and x8, x1, x192160; -O1:    and x9, x0, x212161; -O1:    bl __atomic_compare_exchange2162    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 12163    ret i128 %r2164}2165 2166define dso_local i8 @atomicrmw_nand_i8_aligned_monotonic(ptr %ptr, i8 %value) {2167; -O0-LABEL: atomicrmw_nand_i8_aligned_monotonic:2168; -O0:    and w8, w0, w82169; -O0:    mvn w1, w82170; -O0:    bl __aarch64_cas1_relax2171; -O0:    and w8, w0, #0xff2172; -O0:    subs w8, w8, w9, uxtb2173;2174; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic:2175; -O1:    ldxrb w8, [x0]2176; -O1:    and w9, w8, w12177; -O1:    mvn w9, w92178; -O1:    stxrb w10, w9, [x0]2179    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12180    ret i8 %r2181}2182 2183define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) {2184; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire:2185; -O0:    and w8, w0, w82186; -O0:    mvn w1, w82187; -O0:    bl __aarch64_cas1_acq2188; -O0:    and w8, w0, #0xff2189; -O0:    subs w8, w8, w9, uxtb2190;2191; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire:2192; -O1:    ldaxrb w8, [x0]2193; -O1:    and w9, w8, w12194; -O1:    mvn w9, w92195; -O1:    stxrb w10, w9, [x0]2196    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12197    ret i8 %r2198}2199 2200define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) {2201; -O0-LABEL: atomicrmw_nand_i8_aligned_release:2202; -O0:    and w8, w0, w82203; -O0:    mvn w1, w82204; -O0:    bl __aarch64_cas1_rel2205; -O0:    and w8, w0, #0xff2206; -O0:    subs w8, w8, w9, uxtb2207;2208; -O1-LABEL: atomicrmw_nand_i8_aligned_release:2209; -O1:    ldxrb w8, [x0]2210; -O1:    and w9, w8, w12211; -O1:    mvn w9, w92212; -O1:    stlxrb w10, w9, [x0]2213    %r = atomicrmw nand ptr %ptr, i8 %value release, align 12214    ret i8 %r2215}2216 2217define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2218; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2219; -O0:    and w8, w0, w82220; -O0:    mvn w1, w82221; -O0:    bl __aarch64_cas1_acq_rel2222; -O0:    and w8, w0, #0xff2223; -O0:    subs w8, w8, w9, uxtb2224;2225; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2226; -O1:    ldaxrb w8, [x0]2227; -O1:    and w9, w8, w12228; -O1:    mvn w9, w92229; -O1:    stlxrb w10, w9, [x0]2230    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12231    ret i8 %r2232}2233 2234define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2235; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2236; -O0:    and w8, w0, w82237; -O0:    mvn w1, w82238; -O0:    bl __aarch64_cas1_acq_rel2239; -O0:    and w8, w0, #0xff2240; -O0:    subs w8, w8, w9, uxtb2241;2242; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2243; -O1:    ldaxrb w8, [x0]2244; -O1:    and w9, w8, w12245; -O1:    mvn w9, w92246; -O1:    stlxrb w10, w9, [x0]2247    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12248    ret i8 %r2249}2250 2251define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) {2252; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic:2253; -O0:    and w8, w0, w82254; -O0:    mvn w1, w82255; -O0:    bl __aarch64_cas2_relax2256; -O0:    subs w8, w8, w0, uxth2257;2258; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic:2259; -O1:    ldxrh w8, [x0]2260; -O1:    and w9, w8, w12261; -O1:    mvn w9, w92262; -O1:    stxrh w10, w9, [x0]2263    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 22264    ret i16 %r2265}2266 2267define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) {2268; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire:2269; -O0:    and w8, w0, w82270; -O0:    mvn w1, w82271; -O0:    bl __aarch64_cas2_acq2272; -O0:    subs w8, w8, w0, uxth2273;2274; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire:2275; -O1:    ldaxrh w8, [x0]2276; -O1:    and w9, w8, w12277; -O1:    mvn w9, w92278; -O1:    stxrh w10, w9, [x0]2279    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 22280    ret i16 %r2281}2282 2283define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) {2284; -O0-LABEL: atomicrmw_nand_i16_aligned_release:2285; -O0:    and w8, w0, w82286; -O0:    mvn w1, w82287; -O0:    bl __aarch64_cas2_rel2288; -O0:    subs w8, w8, w0, uxth2289;2290; -O1-LABEL: atomicrmw_nand_i16_aligned_release:2291; -O1:    ldxrh w8, [x0]2292; -O1:    and w9, w8, w12293; -O1:    mvn w9, w92294; -O1:    stlxrh w10, w9, [x0]2295    %r = atomicrmw nand ptr %ptr, i16 %value release, align 22296    ret i16 %r2297}2298 2299define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2300; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2301; -O0:    and w8, w0, w82302; -O0:    mvn w1, w82303; -O0:    bl __aarch64_cas2_acq_rel2304; -O0:    subs w8, w8, w0, uxth2305;2306; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2307; -O1:    ldaxrh w8, [x0]2308; -O1:    and w9, w8, w12309; -O1:    mvn w9, w92310; -O1:    stlxrh w10, w9, [x0]2311    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 22312    ret i16 %r2313}2314 2315define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2316; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2317; -O0:    and w8, w0, w82318; -O0:    mvn w1, w82319; -O0:    bl __aarch64_cas2_acq_rel2320; -O0:    subs w8, w8, w0, uxth2321;2322; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2323; -O1:    ldaxrh w8, [x0]2324; -O1:    and w9, w8, w12325; -O1:    mvn w9, w92326; -O1:    stlxrh w10, w9, [x0]2327    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 22328    ret i16 %r2329}2330 2331define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) {2332; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic:2333; -O0:    and w8, w0, w82334; -O0:    mvn w1, w82335; -O0:    bl __aarch64_cas4_relax2336; -O0:    subs w8, w0, w82337;2338; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic:2339; -O1:    ldxr w8, [x0]2340; -O1:    and w9, w8, w12341; -O1:    mvn w9, w92342; -O1:    stxr w10, w9, [x0]2343    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 42344    ret i32 %r2345}2346 2347define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) {2348; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire:2349; -O0:    and w8, w0, w82350; -O0:    mvn w1, w82351; -O0:    bl __aarch64_cas4_acq2352; -O0:    subs w8, w0, w82353;2354; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire:2355; -O1:    ldaxr w8, [x0]2356; -O1:    and w9, w8, w12357; -O1:    mvn w9, w92358; -O1:    stxr w10, w9, [x0]2359    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 42360    ret i32 %r2361}2362 2363define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) {2364; -O0-LABEL: atomicrmw_nand_i32_aligned_release:2365; -O0:    and w8, w0, w82366; -O0:    mvn w1, w82367; -O0:    bl __aarch64_cas4_rel2368; -O0:    subs w8, w0, w82369;2370; -O1-LABEL: atomicrmw_nand_i32_aligned_release:2371; -O1:    ldxr w8, [x0]2372; -O1:    and w9, w8, w12373; -O1:    mvn w9, w92374; -O1:    stlxr w10, w9, [x0]2375    %r = atomicrmw nand ptr %ptr, i32 %value release, align 42376    ret i32 %r2377}2378 2379define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2380; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2381; -O0:    and w8, w0, w82382; -O0:    mvn w1, w82383; -O0:    bl __aarch64_cas4_acq_rel2384; -O0:    subs w8, w0, w82385;2386; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2387; -O1:    ldaxr w8, [x0]2388; -O1:    and w9, w8, w12389; -O1:    mvn w9, w92390; -O1:    stlxr w10, w9, [x0]2391    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 42392    ret i32 %r2393}2394 2395define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2396; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2397; -O0:    and w8, w0, w82398; -O0:    mvn w1, w82399; -O0:    bl __aarch64_cas4_acq_rel2400; -O0:    subs w8, w0, w82401;2402; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2403; -O1:    ldaxr w8, [x0]2404; -O1:    and w9, w8, w12405; -O1:    mvn w9, w92406; -O1:    stlxr w10, w9, [x0]2407    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 42408    ret i32 %r2409}2410 2411define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) {2412; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic:2413; -O0:    and x8, x0, x82414; -O0:    mvn x1, x82415; -O0:    bl __aarch64_cas8_relax2416; -O0:    subs x8, x0, x82417;2418; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic:2419; -O1:    ldxr x0, [x8]2420; -O1:    and x9, x0, x12421; -O1:    mvn x9, x92422; -O1:    stxr w10, x9, [x8]2423    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 82424    ret i64 %r2425}2426 2427define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) {2428; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire:2429; -O0:    and x8, x0, x82430; -O0:    mvn x1, x82431; -O0:    bl __aarch64_cas8_acq2432; -O0:    subs x8, x0, x82433;2434; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire:2435; -O1:    ldaxr x0, [x8]2436; -O1:    and x9, x0, x12437; -O1:    mvn x9, x92438; -O1:    stxr w10, x9, [x8]2439    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 82440    ret i64 %r2441}2442 2443define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) {2444; -O0-LABEL: atomicrmw_nand_i64_aligned_release:2445; -O0:    and x8, x0, x82446; -O0:    mvn x1, x82447; -O0:    bl __aarch64_cas8_rel2448; -O0:    subs x8, x0, x82449;2450; -O1-LABEL: atomicrmw_nand_i64_aligned_release:2451; -O1:    ldxr x0, [x8]2452; -O1:    and x9, x0, x12453; -O1:    mvn x9, x92454; -O1:    stlxr w10, x9, [x8]2455    %r = atomicrmw nand ptr %ptr, i64 %value release, align 82456    ret i64 %r2457}2458 2459define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2460; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2461; -O0:    and x8, x0, x82462; -O0:    mvn x1, x82463; -O0:    bl __aarch64_cas8_acq_rel2464; -O0:    subs x8, x0, x82465;2466; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2467; -O1:    ldaxr x0, [x8]2468; -O1:    and x9, x0, x12469; -O1:    mvn x9, x92470; -O1:    stlxr w10, x9, [x8]2471    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 82472    ret i64 %r2473}2474 2475define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2476; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2477; -O0:    and x8, x0, x82478; -O0:    mvn x1, x82479; -O0:    bl __aarch64_cas8_acq_rel2480; -O0:    subs x8, x0, x82481;2482; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2483; -O1:    ldaxr x0, [x8]2484; -O1:    and x9, x0, x12485; -O1:    mvn x9, x92486; -O1:    stlxr w10, x9, [x8]2487    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 82488    ret i64 %r2489}2490 2491define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) {2492; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic:2493; -O0:    and x9, x8, x92494; -O0:    and x8, x8, x102495; -O0:    mvn x2, x92496; -O0:    mvn x3, x82497; -O0:    bl __aarch64_cas16_relax2498; -O0:    eor x8, x0, x82499; -O0:    eor x9, x1, x92500; -O0:    orr x8, x8, x92501; -O0:    subs x8, x8, #02502;2503; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic:2504; -O1:    ldxp x0, x1, [x8]2505; -O1:    and x9, x0, x22506; -O1:    and x10, x1, x32507; -O1:    mvn x10, x102508; -O1:    mvn x9, x92509; -O1:    stxp w11, x9, x10, [x8]2510    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 162511    ret i128 %r2512}2513 2514define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) {2515; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire:2516; -O0:    and x9, x8, x92517; -O0:    and x8, x8, x102518; -O0:    mvn x2, x92519; -O0:    mvn x3, x82520; -O0:    bl __aarch64_cas16_acq2521; -O0:    eor x8, x0, x82522; -O0:    eor x9, x1, x92523; -O0:    orr x8, x8, x92524; -O0:    subs x8, x8, #02525;2526; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire:2527; -O1:    ldaxp x0, x1, [x8]2528; -O1:    and x9, x0, x22529; -O1:    and x10, x1, x32530; -O1:    mvn x10, x102531; -O1:    mvn x9, x92532; -O1:    stxp w11, x9, x10, [x8]2533    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 162534    ret i128 %r2535}2536 2537define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) {2538; -O0-LABEL: atomicrmw_nand_i128_aligned_release:2539; -O0:    and x9, x8, x92540; -O0:    and x8, x8, x102541; -O0:    mvn x2, x92542; -O0:    mvn x3, x82543; -O0:    bl __aarch64_cas16_rel2544; -O0:    eor x8, x0, x82545; -O0:    eor x9, x1, x92546; -O0:    orr x8, x8, x92547; -O0:    subs x8, x8, #02548;2549; -O1-LABEL: atomicrmw_nand_i128_aligned_release:2550; -O1:    ldxp x0, x1, [x8]2551; -O1:    and x9, x0, x22552; -O1:    and x10, x1, x32553; -O1:    mvn x10, x102554; -O1:    mvn x9, x92555; -O1:    stlxp w11, x9, x10, [x8]2556    %r = atomicrmw nand ptr %ptr, i128 %value release, align 162557    ret i128 %r2558}2559 2560define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2561; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2562; -O0:    and x9, x8, x92563; -O0:    and x8, x8, x102564; -O0:    mvn x2, x92565; -O0:    mvn x3, x82566; -O0:    bl __aarch64_cas16_acq_rel2567; -O0:    eor x8, x0, x82568; -O0:    eor x9, x1, x92569; -O0:    orr x8, x8, x92570; -O0:    subs x8, x8, #02571;2572; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2573; -O1:    ldaxp x0, x1, [x8]2574; -O1:    and x9, x0, x22575; -O1:    and x10, x1, x32576; -O1:    mvn x10, x102577; -O1:    mvn x9, x92578; -O1:    stlxp w11, x9, x10, [x8]2579    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 162580    ret i128 %r2581}2582 2583define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) {2584; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2585; -O0:    and x9, x8, x92586; -O0:    and x8, x8, x102587; -O0:    mvn x2, x92588; -O0:    mvn x3, x82589; -O0:    bl __aarch64_cas16_acq_rel2590; -O0:    eor x8, x0, x82591; -O0:    eor x9, x1, x92592; -O0:    orr x8, x8, x92593; -O0:    subs x8, x8, #02594;2595; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2596; -O1:    ldaxp x0, x1, [x8]2597; -O1:    and x9, x0, x22598; -O1:    and x10, x1, x32599; -O1:    mvn x10, x102600; -O1:    mvn x9, x92601; -O1:    stlxp w11, x9, x10, [x8]2602    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 162603    ret i128 %r2604}2605 2606define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) {2607; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2608; -O0:    and w8, w0, w82609; -O0:    mvn w1, w82610; -O0:    bl __aarch64_cas1_relax2611; -O0:    and w8, w0, #0xff2612; -O0:    subs w8, w8, w9, uxtb2613;2614; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2615; -O1:    ldxrb w8, [x0]2616; -O1:    and w9, w8, w12617; -O1:    mvn w9, w92618; -O1:    stxrb w10, w9, [x0]2619    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12620    ret i8 %r2621}2622 2623define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) {2624; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire:2625; -O0:    and w8, w0, w82626; -O0:    mvn w1, w82627; -O0:    bl __aarch64_cas1_acq2628; -O0:    and w8, w0, #0xff2629; -O0:    subs w8, w8, w9, uxtb2630;2631; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire:2632; -O1:    ldaxrb w8, [x0]2633; -O1:    and w9, w8, w12634; -O1:    mvn w9, w92635; -O1:    stxrb w10, w9, [x0]2636    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12637    ret i8 %r2638}2639 2640define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) {2641; -O0-LABEL: atomicrmw_nand_i8_unaligned_release:2642; -O0:    and w8, w0, w82643; -O0:    mvn w1, w82644; -O0:    bl __aarch64_cas1_rel2645; -O0:    and w8, w0, #0xff2646; -O0:    subs w8, w8, w9, uxtb2647;2648; -O1-LABEL: atomicrmw_nand_i8_unaligned_release:2649; -O1:    ldxrb w8, [x0]2650; -O1:    and w9, w8, w12651; -O1:    mvn w9, w92652; -O1:    stlxrb w10, w9, [x0]2653    %r = atomicrmw nand ptr %ptr, i8 %value release, align 12654    ret i8 %r2655}2656 2657define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {2658; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2659; -O0:    and w8, w0, w82660; -O0:    mvn w1, w82661; -O0:    bl __aarch64_cas1_acq_rel2662; -O0:    and w8, w0, #0xff2663; -O0:    subs w8, w8, w9, uxtb2664;2665; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2666; -O1:    ldaxrb w8, [x0]2667; -O1:    and w9, w8, w12668; -O1:    mvn w9, w92669; -O1:    stlxrb w10, w9, [x0]2670    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12671    ret i8 %r2672}2673 2674define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {2675; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2676; -O0:    and w8, w0, w82677; -O0:    mvn w1, w82678; -O0:    bl __aarch64_cas1_acq_rel2679; -O0:    and w8, w0, #0xff2680; -O0:    subs w8, w8, w9, uxtb2681;2682; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2683; -O1:    ldaxrb w8, [x0]2684; -O1:    and w9, w8, w12685; -O1:    mvn w9, w92686; -O1:    stlxrb w10, w9, [x0]2687    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12688    ret i8 %r2689}2690 2691define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) {2692; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2693; -O0:    and w8, w9, w82694; -O0:    mvn w8, w82695; -O0:    bl __atomic_compare_exchange2696;2697; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2698; -O1:    and w8, w0, w202699; -O1:    mvn w8, w82700; -O1:    bl __atomic_compare_exchange2701    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 12702    ret i16 %r2703}2704 2705define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) {2706; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire:2707; -O0:    and w8, w9, w82708; -O0:    mvn w8, w82709; -O0:    bl __atomic_compare_exchange2710;2711; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire:2712; -O1:    and w8, w0, w202713; -O1:    mvn w8, w82714; -O1:    bl __atomic_compare_exchange2715    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 12716    ret i16 %r2717}2718 2719define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) {2720; -O0-LABEL: atomicrmw_nand_i16_unaligned_release:2721; -O0:    and w8, w9, w82722; -O0:    mvn w8, w82723; -O0:    bl __atomic_compare_exchange2724;2725; -O1-LABEL: atomicrmw_nand_i16_unaligned_release:2726; -O1:    and w8, w0, w202727; -O1:    mvn w8, w82728; -O1:    bl __atomic_compare_exchange2729    %r = atomicrmw nand ptr %ptr, i16 %value release, align 12730    ret i16 %r2731}2732 2733define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {2734; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2735; -O0:    and w8, w9, w82736; -O0:    mvn w8, w82737; -O0:    bl __atomic_compare_exchange2738;2739; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2740; -O1:    and w8, w0, w202741; -O1:    mvn w8, w82742; -O1:    bl __atomic_compare_exchange2743    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 12744    ret i16 %r2745}2746 2747define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {2748; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2749; -O0:    and w8, w9, w82750; -O0:    mvn w8, w82751; -O0:    bl __atomic_compare_exchange2752;2753; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2754; -O1:    and w8, w0, w202755; -O1:    mvn w8, w82756; -O1:    bl __atomic_compare_exchange2757    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 12758    ret i16 %r2759}2760 2761define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) {2762; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2763; -O0:    and w8, w9, w82764; -O0:    mvn w8, w82765; -O0:    bl __atomic_compare_exchange2766;2767; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2768; -O1:    and w8, w0, w202769; -O1:    mvn w8, w82770; -O1:    bl __atomic_compare_exchange2771    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 12772    ret i32 %r2773}2774 2775define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) {2776; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire:2777; -O0:    and w8, w9, w82778; -O0:    mvn w8, w82779; -O0:    bl __atomic_compare_exchange2780;2781; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire:2782; -O1:    and w8, w0, w202783; -O1:    mvn w8, w82784; -O1:    bl __atomic_compare_exchange2785    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 12786    ret i32 %r2787}2788 2789define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) {2790; -O0-LABEL: atomicrmw_nand_i32_unaligned_release:2791; -O0:    and w8, w9, w82792; -O0:    mvn w8, w82793; -O0:    bl __atomic_compare_exchange2794;2795; -O1-LABEL: atomicrmw_nand_i32_unaligned_release:2796; -O1:    and w8, w0, w202797; -O1:    mvn w8, w82798; -O1:    bl __atomic_compare_exchange2799    %r = atomicrmw nand ptr %ptr, i32 %value release, align 12800    ret i32 %r2801}2802 2803define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {2804; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2805; -O0:    and w8, w9, w82806; -O0:    mvn w8, w82807; -O0:    bl __atomic_compare_exchange2808;2809; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2810; -O1:    and w8, w0, w202811; -O1:    mvn w8, w82812; -O1:    bl __atomic_compare_exchange2813    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 12814    ret i32 %r2815}2816 2817define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {2818; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2819; -O0:    and w8, w9, w82820; -O0:    mvn w8, w82821; -O0:    bl __atomic_compare_exchange2822;2823; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2824; -O1:    and w8, w0, w202825; -O1:    mvn w8, w82826; -O1:    bl __atomic_compare_exchange2827    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 12828    ret i32 %r2829}2830 2831define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2832; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2833; -O0:    and x8, x9, x82834; -O0:    mvn x8, x82835; -O0:    bl __atomic_compare_exchange2836;2837; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2838; -O1:    and x8, x0, x202839; -O1:    mvn x8, x82840; -O1:    bl __atomic_compare_exchange2841    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 12842    ret i64 %r2843}2844 2845define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) {2846; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire:2847; -O0:    and x8, x9, x82848; -O0:    mvn x8, x82849; -O0:    bl __atomic_compare_exchange2850;2851; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire:2852; -O1:    and x8, x0, x202853; -O1:    mvn x8, x82854; -O1:    bl __atomic_compare_exchange2855    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 12856    ret i64 %r2857}2858 2859define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) {2860; -O0-LABEL: atomicrmw_nand_i64_unaligned_release:2861; -O0:    and x8, x9, x82862; -O0:    mvn x8, x82863; -O0:    bl __atomic_compare_exchange2864;2865; -O1-LABEL: atomicrmw_nand_i64_unaligned_release:2866; -O1:    and x8, x0, x202867; -O1:    mvn x8, x82868; -O1:    bl __atomic_compare_exchange2869    %r = atomicrmw nand ptr %ptr, i64 %value release, align 12870    ret i64 %r2871}2872 2873define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2874; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2875; -O0:    and x8, x9, x82876; -O0:    mvn x8, x82877; -O0:    bl __atomic_compare_exchange2878;2879; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2880; -O1:    and x8, x0, x202881; -O1:    mvn x8, x82882; -O1:    bl __atomic_compare_exchange2883    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 12884    ret i64 %r2885}2886 2887define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2888; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2889; -O0:    and x8, x9, x82890; -O0:    mvn x8, x82891; -O0:    bl __atomic_compare_exchange2892;2893; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2894; -O1:    and x8, x0, x202895; -O1:    mvn x8, x82896; -O1:    bl __atomic_compare_exchange2897    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 12898    ret i64 %r2899}2900 2901define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2902; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2903; -O0:    and x9, x8, x92904; -O0:    and x8, x8, x102905; -O0:    mvn x9, x92906; -O0:    mvn x8, x82907; -O0:    bl __atomic_compare_exchange2908;2909; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2910; -O1:    ldp x0, x1, [x0]2911; -O1:    and x8, x1, x192912; -O1:    and x9, x0, x212913; -O1:    mvn x8, x82914; -O1:    mvn x9, x92915; -O1:    bl __atomic_compare_exchange2916    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 12917    ret i128 %r2918}2919 2920define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) {2921; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire:2922; -O0:    and x9, x8, x92923; -O0:    and x8, x8, x102924; -O0:    mvn x9, x92925; -O0:    mvn x8, x82926; -O0:    bl __atomic_compare_exchange2927;2928; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire:2929; -O1:    ldp x0, x1, [x0]2930; -O1:    and x8, x1, x192931; -O1:    and x9, x0, x212932; -O1:    mvn x8, x82933; -O1:    mvn x9, x92934; -O1:    bl __atomic_compare_exchange2935    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 12936    ret i128 %r2937}2938 2939define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) {2940; -O0-LABEL: atomicrmw_nand_i128_unaligned_release:2941; -O0:    and x9, x8, x92942; -O0:    and x8, x8, x102943; -O0:    mvn x9, x92944; -O0:    mvn x8, x82945; -O0:    bl __atomic_compare_exchange2946;2947; -O1-LABEL: atomicrmw_nand_i128_unaligned_release:2948; -O1:    ldp x0, x1, [x0]2949; -O1:    and x8, x1, x192950; -O1:    and x9, x0, x212951; -O1:    mvn x8, x82952; -O1:    mvn x9, x92953; -O1:    bl __atomic_compare_exchange2954    %r = atomicrmw nand ptr %ptr, i128 %value release, align 12955    ret i128 %r2956}2957 2958define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2959; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2960; -O0:    and x9, x8, x92961; -O0:    and x8, x8, x102962; -O0:    mvn x9, x92963; -O0:    mvn x8, x82964; -O0:    bl __atomic_compare_exchange2965;2966; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2967; -O1:    ldp x0, x1, [x0]2968; -O1:    and x8, x1, x192969; -O1:    and x9, x0, x212970; -O1:    mvn x8, x82971; -O1:    mvn x9, x92972; -O1:    bl __atomic_compare_exchange2973    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 12974    ret i128 %r2975}2976 2977define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2978; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2979; -O0:    and x9, x8, x92980; -O0:    and x8, x8, x102981; -O0:    mvn x9, x92982; -O0:    mvn x8, x82983; -O0:    bl __atomic_compare_exchange2984;2985; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2986; -O1:    ldp x0, x1, [x0]2987; -O1:    and x8, x1, x192988; -O1:    and x9, x0, x212989; -O1:    mvn x8, x82990; -O1:    mvn x9, x92991; -O1:    bl __atomic_compare_exchange2992    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 12993    ret i128 %r2994}2995 2996define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) {2997; CHECK-LABEL: atomicrmw_or_i8_aligned_monotonic:2998; CHECK:    bl __aarch64_ldset1_relax2999    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 13000    ret i8 %r3001}3002 3003define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) {3004; CHECK-LABEL: atomicrmw_or_i8_aligned_acquire:3005; CHECK:    bl __aarch64_ldset1_acq3006    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 13007    ret i8 %r3008}3009 3010define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) {3011; CHECK-LABEL: atomicrmw_or_i8_aligned_release:3012; CHECK:    bl __aarch64_ldset1_rel3013    %r = atomicrmw or ptr %ptr, i8 %value release, align 13014    ret i8 %r3015}3016 3017define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3018; CHECK-LABEL: atomicrmw_or_i8_aligned_acq_rel:3019; CHECK:    bl __aarch64_ldset1_acq_rel3020    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 13021    ret i8 %r3022}3023 3024define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3025; CHECK-LABEL: atomicrmw_or_i8_aligned_seq_cst:3026; CHECK:    bl __aarch64_ldset1_acq_rel3027    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 13028    ret i8 %r3029}3030 3031define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) {3032; CHECK-LABEL: atomicrmw_or_i16_aligned_monotonic:3033; CHECK:    bl __aarch64_ldset2_relax3034    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 23035    ret i16 %r3036}3037 3038define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) {3039; CHECK-LABEL: atomicrmw_or_i16_aligned_acquire:3040; CHECK:    bl __aarch64_ldset2_acq3041    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 23042    ret i16 %r3043}3044 3045define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) {3046; CHECK-LABEL: atomicrmw_or_i16_aligned_release:3047; CHECK:    bl __aarch64_ldset2_rel3048    %r = atomicrmw or ptr %ptr, i16 %value release, align 23049    ret i16 %r3050}3051 3052define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3053; CHECK-LABEL: atomicrmw_or_i16_aligned_acq_rel:3054; CHECK:    bl __aarch64_ldset2_acq_rel3055    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 23056    ret i16 %r3057}3058 3059define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3060; CHECK-LABEL: atomicrmw_or_i16_aligned_seq_cst:3061; CHECK:    bl __aarch64_ldset2_acq_rel3062    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 23063    ret i16 %r3064}3065 3066define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) {3067; CHECK-LABEL: atomicrmw_or_i32_aligned_monotonic:3068; CHECK:    bl __aarch64_ldset4_relax3069    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 43070    ret i32 %r3071}3072 3073define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) {3074; CHECK-LABEL: atomicrmw_or_i32_aligned_acquire:3075; CHECK:    bl __aarch64_ldset4_acq3076    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 43077    ret i32 %r3078}3079 3080define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) {3081; CHECK-LABEL: atomicrmw_or_i32_aligned_release:3082; CHECK:    bl __aarch64_ldset4_rel3083    %r = atomicrmw or ptr %ptr, i32 %value release, align 43084    ret i32 %r3085}3086 3087define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3088; CHECK-LABEL: atomicrmw_or_i32_aligned_acq_rel:3089; CHECK:    bl __aarch64_ldset4_acq_rel3090    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 43091    ret i32 %r3092}3093 3094define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3095; CHECK-LABEL: atomicrmw_or_i32_aligned_seq_cst:3096; CHECK:    bl __aarch64_ldset4_acq_rel3097    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 43098    ret i32 %r3099}3100 3101define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) {3102; CHECK-LABEL: atomicrmw_or_i64_aligned_monotonic:3103; CHECK:    bl __aarch64_ldset8_relax3104    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 83105    ret i64 %r3106}3107 3108define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) {3109; CHECK-LABEL: atomicrmw_or_i64_aligned_acquire:3110; CHECK:    bl __aarch64_ldset8_acq3111    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 83112    ret i64 %r3113}3114 3115define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) {3116; CHECK-LABEL: atomicrmw_or_i64_aligned_release:3117; CHECK:    bl __aarch64_ldset8_rel3118    %r = atomicrmw or ptr %ptr, i64 %value release, align 83119    ret i64 %r3120}3121 3122define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3123; CHECK-LABEL: atomicrmw_or_i64_aligned_acq_rel:3124; CHECK:    bl __aarch64_ldset8_acq_rel3125    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 83126    ret i64 %r3127}3128 3129define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3130; CHECK-LABEL: atomicrmw_or_i64_aligned_seq_cst:3131; CHECK:    bl __aarch64_ldset8_acq_rel3132    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 83133    ret i64 %r3134}3135 3136define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) {3137; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic:3138; -O0:    orr x2, x8, x103139; -O0:    orr x3, x8, x93140; -O0:    bl __aarch64_cas16_relax3141; -O0:    eor x8, x0, x83142; -O0:    eor x9, x1, x93143; -O0:    orr x8, x8, x93144; -O0:    subs x8, x8, #03145;3146; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic:3147; -O1:    ldxp x0, x1, [x8]3148; -O1:    orr x9, x1, x33149; -O1:    orr x10, x0, x23150; -O1:    stxp w11, x10, x9, [x8]3151    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 163152    ret i128 %r3153}3154 3155define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) {3156; -O0-LABEL: atomicrmw_or_i128_aligned_acquire:3157; -O0:    orr x2, x8, x103158; -O0:    orr x3, x8, x93159; -O0:    bl __aarch64_cas16_acq3160; -O0:    eor x8, x0, x83161; -O0:    eor x9, x1, x93162; -O0:    orr x8, x8, x93163; -O0:    subs x8, x8, #03164;3165; -O1-LABEL: atomicrmw_or_i128_aligned_acquire:3166; -O1:    ldaxp x0, x1, [x8]3167; -O1:    orr x9, x1, x33168; -O1:    orr x10, x0, x23169; -O1:    stxp w11, x10, x9, [x8]3170    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 163171    ret i128 %r3172}3173 3174define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) {3175; -O0-LABEL: atomicrmw_or_i128_aligned_release:3176; -O0:    orr x2, x8, x103177; -O0:    orr x3, x8, x93178; -O0:    bl __aarch64_cas16_rel3179; -O0:    eor x8, x0, x83180; -O0:    eor x9, x1, x93181; -O0:    orr x8, x8, x93182; -O0:    subs x8, x8, #03183;3184; -O1-LABEL: atomicrmw_or_i128_aligned_release:3185; -O1:    ldxp x0, x1, [x8]3186; -O1:    orr x9, x1, x33187; -O1:    orr x10, x0, x23188; -O1:    stlxp w11, x10, x9, [x8]3189    %r = atomicrmw or ptr %ptr, i128 %value release, align 163190    ret i128 %r3191}3192 3193define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3194; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel:3195; -O0:    orr x2, x8, x103196; -O0:    orr x3, x8, x93197; -O0:    bl __aarch64_cas16_acq_rel3198; -O0:    eor x8, x0, x83199; -O0:    eor x9, x1, x93200; -O0:    orr x8, x8, x93201; -O0:    subs x8, x8, #03202;3203; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel:3204; -O1:    ldaxp x0, x1, [x8]3205; -O1:    orr x9, x1, x33206; -O1:    orr x10, x0, x23207; -O1:    stlxp w11, x10, x9, [x8]3208    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 163209    ret i128 %r3210}3211 3212define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3213; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst:3214; -O0:    orr x2, x8, x103215; -O0:    orr x3, x8, x93216; -O0:    bl __aarch64_cas16_acq_rel3217; -O0:    eor x8, x0, x83218; -O0:    eor x9, x1, x93219; -O0:    orr x8, x8, x93220; -O0:    subs x8, x8, #03221;3222; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst:3223; -O1:    ldaxp x0, x1, [x8]3224; -O1:    orr x9, x1, x33225; -O1:    orr x10, x0, x23226; -O1:    stlxp w11, x10, x9, [x8]3227    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 163228    ret i128 %r3229}3230 3231define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3232; CHECK-LABEL: atomicrmw_or_i8_unaligned_monotonic:3233; CHECK:    bl __aarch64_ldset1_relax3234    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 13235    ret i8 %r3236}3237 3238define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) {3239; CHECK-LABEL: atomicrmw_or_i8_unaligned_acquire:3240; CHECK:    bl __aarch64_ldset1_acq3241    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 13242    ret i8 %r3243}3244 3245define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) {3246; CHECK-LABEL: atomicrmw_or_i8_unaligned_release:3247; CHECK:    bl __aarch64_ldset1_rel3248    %r = atomicrmw or ptr %ptr, i8 %value release, align 13249    ret i8 %r3250}3251 3252define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3253; CHECK-LABEL: atomicrmw_or_i8_unaligned_acq_rel:3254; CHECK:    bl __aarch64_ldset1_acq_rel3255    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 13256    ret i8 %r3257}3258 3259define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3260; CHECK-LABEL: atomicrmw_or_i8_unaligned_seq_cst:3261; CHECK:    bl __aarch64_ldset1_acq_rel3262    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 13263    ret i8 %r3264}3265 3266define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3267; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic:3268; -O0:    orr w8, w9, w83269; -O0:    bl __atomic_compare_exchange3270;3271; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic:3272; -O1:    orr w8, w0, w203273; -O1:    bl __atomic_compare_exchange3274    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 13275    ret i16 %r3276}3277 3278define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) {3279; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire:3280; -O0:    orr w8, w9, w83281; -O0:    bl __atomic_compare_exchange3282;3283; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire:3284; -O1:    orr w8, w0, w203285; -O1:    bl __atomic_compare_exchange3286    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 13287    ret i16 %r3288}3289 3290define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) {3291; -O0-LABEL: atomicrmw_or_i16_unaligned_release:3292; -O0:    orr w8, w9, w83293; -O0:    bl __atomic_compare_exchange3294;3295; -O1-LABEL: atomicrmw_or_i16_unaligned_release:3296; -O1:    orr w8, w0, w203297; -O1:    bl __atomic_compare_exchange3298    %r = atomicrmw or ptr %ptr, i16 %value release, align 13299    ret i16 %r3300}3301 3302define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3303; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3304; -O0:    orr w8, w9, w83305; -O0:    bl __atomic_compare_exchange3306;3307; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3308; -O1:    orr w8, w0, w203309; -O1:    bl __atomic_compare_exchange3310    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 13311    ret i16 %r3312}3313 3314define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3315; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3316; -O0:    orr w8, w9, w83317; -O0:    bl __atomic_compare_exchange3318;3319; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3320; -O1:    orr w8, w0, w203321; -O1:    bl __atomic_compare_exchange3322    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 13323    ret i16 %r3324}3325 3326define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3327; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic:3328; -O0:    orr w8, w9, w83329; -O0:    bl __atomic_compare_exchange3330;3331; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic:3332; -O1:    orr w8, w0, w203333; -O1:    bl __atomic_compare_exchange3334    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 13335    ret i32 %r3336}3337 3338define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) {3339; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire:3340; -O0:    orr w8, w9, w83341; -O0:    bl __atomic_compare_exchange3342;3343; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire:3344; -O1:    orr w8, w0, w203345; -O1:    bl __atomic_compare_exchange3346    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 13347    ret i32 %r3348}3349 3350define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) {3351; -O0-LABEL: atomicrmw_or_i32_unaligned_release:3352; -O0:    orr w8, w9, w83353; -O0:    bl __atomic_compare_exchange3354;3355; -O1-LABEL: atomicrmw_or_i32_unaligned_release:3356; -O1:    orr w8, w0, w203357; -O1:    bl __atomic_compare_exchange3358    %r = atomicrmw or ptr %ptr, i32 %value release, align 13359    ret i32 %r3360}3361 3362define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3363; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3364; -O0:    orr w8, w9, w83365; -O0:    bl __atomic_compare_exchange3366;3367; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3368; -O1:    orr w8, w0, w203369; -O1:    bl __atomic_compare_exchange3370    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 13371    ret i32 %r3372}3373 3374define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3375; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3376; -O0:    orr w8, w9, w83377; -O0:    bl __atomic_compare_exchange3378;3379; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3380; -O1:    orr w8, w0, w203381; -O1:    bl __atomic_compare_exchange3382    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 13383    ret i32 %r3384}3385 3386define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3387; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic:3388; -O0:    orr x8, x9, x83389; -O0:    bl __atomic_compare_exchange3390;3391; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic:3392; -O1:    orr x8, x0, x203393; -O1:    bl __atomic_compare_exchange3394    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 13395    ret i64 %r3396}3397 3398define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) {3399; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire:3400; -O0:    orr x8, x9, x83401; -O0:    bl __atomic_compare_exchange3402;3403; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire:3404; -O1:    orr x8, x0, x203405; -O1:    bl __atomic_compare_exchange3406    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 13407    ret i64 %r3408}3409 3410define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) {3411; -O0-LABEL: atomicrmw_or_i64_unaligned_release:3412; -O0:    orr x8, x9, x83413; -O0:    bl __atomic_compare_exchange3414;3415; -O1-LABEL: atomicrmw_or_i64_unaligned_release:3416; -O1:    orr x8, x0, x203417; -O1:    bl __atomic_compare_exchange3418    %r = atomicrmw or ptr %ptr, i64 %value release, align 13419    ret i64 %r3420}3421 3422define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3423; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3424; -O0:    orr x8, x9, x83425; -O0:    bl __atomic_compare_exchange3426;3427; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3428; -O1:    orr x8, x0, x203429; -O1:    bl __atomic_compare_exchange3430    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 13431    ret i64 %r3432}3433 3434define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3435; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3436; -O0:    orr x8, x9, x83437; -O0:    bl __atomic_compare_exchange3438;3439; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3440; -O1:    orr x8, x0, x203441; -O1:    bl __atomic_compare_exchange3442    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 13443    ret i64 %r3444}3445 3446define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3447; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic:3448; -O0:    orr x9, x8, x93449; -O0:    orr x8, x8, x103450; -O0:    bl __atomic_compare_exchange3451;3452; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic:3453; -O1:    ldp x0, x1, [x0]3454; -O1:    orr x8, x1, x193455; -O1:    orr x9, x0, x213456; -O1:    bl __atomic_compare_exchange3457    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 13458    ret i128 %r3459}3460 3461define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) {3462; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire:3463; -O0:    orr x9, x8, x93464; -O0:    orr x8, x8, x103465; -O0:    bl __atomic_compare_exchange3466;3467; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire:3468; -O1:    ldp x0, x1, [x0]3469; -O1:    orr x8, x1, x193470; -O1:    orr x9, x0, x213471; -O1:    bl __atomic_compare_exchange3472    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 13473    ret i128 %r3474}3475 3476define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) {3477; -O0-LABEL: atomicrmw_or_i128_unaligned_release:3478; -O0:    orr x9, x8, x93479; -O0:    orr x8, x8, x103480; -O0:    bl __atomic_compare_exchange3481;3482; -O1-LABEL: atomicrmw_or_i128_unaligned_release:3483; -O1:    ldp x0, x1, [x0]3484; -O1:    orr x8, x1, x193485; -O1:    orr x9, x0, x213486; -O1:    bl __atomic_compare_exchange3487    %r = atomicrmw or ptr %ptr, i128 %value release, align 13488    ret i128 %r3489}3490 3491define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3492; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3493; -O0:    orr x9, x8, x93494; -O0:    orr x8, x8, x103495; -O0:    bl __atomic_compare_exchange3496;3497; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3498; -O1:    ldp x0, x1, [x0]3499; -O1:    orr x8, x1, x193500; -O1:    orr x9, x0, x213501; -O1:    bl __atomic_compare_exchange3502    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 13503    ret i128 %r3504}3505 3506define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3507; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3508; -O0:    orr x9, x8, x93509; -O0:    orr x8, x8, x103510; -O0:    bl __atomic_compare_exchange3511;3512; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3513; -O1:    ldp x0, x1, [x0]3514; -O1:    orr x8, x1, x193515; -O1:    orr x9, x0, x213516; -O1:    bl __atomic_compare_exchange3517    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 13518    ret i128 %r3519}3520 3521define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) {3522; CHECK-LABEL: atomicrmw_xor_i8_aligned_monotonic:3523; CHECK:    bl __aarch64_ldeor1_relax3524    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13525    ret i8 %r3526}3527 3528define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) {3529; CHECK-LABEL: atomicrmw_xor_i8_aligned_acquire:3530; CHECK:    bl __aarch64_ldeor1_acq3531    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13532    ret i8 %r3533}3534 3535define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) {3536; CHECK-LABEL: atomicrmw_xor_i8_aligned_release:3537; CHECK:    bl __aarch64_ldeor1_rel3538    %r = atomicrmw xor ptr %ptr, i8 %value release, align 13539    ret i8 %r3540}3541 3542define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3543; CHECK-LABEL: atomicrmw_xor_i8_aligned_acq_rel:3544; CHECK:    bl __aarch64_ldeor1_acq_rel3545    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13546    ret i8 %r3547}3548 3549define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3550; CHECK-LABEL: atomicrmw_xor_i8_aligned_seq_cst:3551; CHECK:    bl __aarch64_ldeor1_acq_rel3552    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13553    ret i8 %r3554}3555 3556define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) {3557; CHECK-LABEL: atomicrmw_xor_i16_aligned_monotonic:3558; CHECK:    bl __aarch64_ldeor2_relax3559    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 23560    ret i16 %r3561}3562 3563define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) {3564; CHECK-LABEL: atomicrmw_xor_i16_aligned_acquire:3565; CHECK:    bl __aarch64_ldeor2_acq3566    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 23567    ret i16 %r3568}3569 3570define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) {3571; CHECK-LABEL: atomicrmw_xor_i16_aligned_release:3572; CHECK:    bl __aarch64_ldeor2_rel3573    %r = atomicrmw xor ptr %ptr, i16 %value release, align 23574    ret i16 %r3575}3576 3577define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3578; CHECK-LABEL: atomicrmw_xor_i16_aligned_acq_rel:3579; CHECK:    bl __aarch64_ldeor2_acq_rel3580    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 23581    ret i16 %r3582}3583 3584define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3585; CHECK-LABEL: atomicrmw_xor_i16_aligned_seq_cst:3586; CHECK:    bl __aarch64_ldeor2_acq_rel3587    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 23588    ret i16 %r3589}3590 3591define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) {3592; CHECK-LABEL: atomicrmw_xor_i32_aligned_monotonic:3593; CHECK:    bl __aarch64_ldeor4_relax3594    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 43595    ret i32 %r3596}3597 3598define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) {3599; CHECK-LABEL: atomicrmw_xor_i32_aligned_acquire:3600; CHECK:    bl __aarch64_ldeor4_acq3601    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 43602    ret i32 %r3603}3604 3605define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) {3606; CHECK-LABEL: atomicrmw_xor_i32_aligned_release:3607; CHECK:    bl __aarch64_ldeor4_rel3608    %r = atomicrmw xor ptr %ptr, i32 %value release, align 43609    ret i32 %r3610}3611 3612define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3613; CHECK-LABEL: atomicrmw_xor_i32_aligned_acq_rel:3614; CHECK:    bl __aarch64_ldeor4_acq_rel3615    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 43616    ret i32 %r3617}3618 3619define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3620; CHECK-LABEL: atomicrmw_xor_i32_aligned_seq_cst:3621; CHECK:    bl __aarch64_ldeor4_acq_rel3622    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 43623    ret i32 %r3624}3625 3626define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) {3627; CHECK-LABEL: atomicrmw_xor_i64_aligned_monotonic:3628; CHECK:    bl __aarch64_ldeor8_relax3629    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 83630    ret i64 %r3631}3632 3633define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) {3634; CHECK-LABEL: atomicrmw_xor_i64_aligned_acquire:3635; CHECK:    bl __aarch64_ldeor8_acq3636    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 83637    ret i64 %r3638}3639 3640define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) {3641; CHECK-LABEL: atomicrmw_xor_i64_aligned_release:3642; CHECK:    bl __aarch64_ldeor8_rel3643    %r = atomicrmw xor ptr %ptr, i64 %value release, align 83644    ret i64 %r3645}3646 3647define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3648; CHECK-LABEL: atomicrmw_xor_i64_aligned_acq_rel:3649; CHECK:    bl __aarch64_ldeor8_acq_rel3650    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 83651    ret i64 %r3652}3653 3654define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3655; CHECK-LABEL: atomicrmw_xor_i64_aligned_seq_cst:3656; CHECK:    bl __aarch64_ldeor8_acq_rel3657    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 83658    ret i64 %r3659}3660 3661define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) {3662; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic:3663; -O0:    eor x2, x8, x103664; -O0:    eor x3, x8, x93665; -O0:    bl __aarch64_cas16_relax3666; -O0:    eor x8, x0, x83667; -O0:    eor x9, x1, x93668; -O0:    orr x8, x8, x93669; -O0:    subs x8, x8, #03670;3671; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic:3672; -O1:    ldxp x0, x1, [x8]3673; -O1:    eor x9, x1, x33674; -O1:    eor x10, x0, x23675; -O1:    stxp w11, x10, x9, [x8]3676    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 163677    ret i128 %r3678}3679 3680define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) {3681; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire:3682; -O0:    eor x2, x8, x103683; -O0:    eor x3, x8, x93684; -O0:    bl __aarch64_cas16_acq3685; -O0:    eor x8, x0, x83686; -O0:    eor x9, x1, x93687; -O0:    orr x8, x8, x93688; -O0:    subs x8, x8, #03689;3690; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire:3691; -O1:    ldaxp x0, x1, [x8]3692; -O1:    eor x9, x1, x33693; -O1:    eor x10, x0, x23694; -O1:    stxp w11, x10, x9, [x8]3695    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 163696    ret i128 %r3697}3698 3699define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) {3700; -O0-LABEL: atomicrmw_xor_i128_aligned_release:3701; -O0:    eor x2, x8, x103702; -O0:    eor x3, x8, x93703; -O0:    bl __aarch64_cas16_rel3704; -O0:    eor x8, x0, x83705; -O0:    eor x9, x1, x93706; -O0:    orr x8, x8, x93707; -O0:    subs x8, x8, #03708;3709; -O1-LABEL: atomicrmw_xor_i128_aligned_release:3710; -O1:    ldxp x0, x1, [x8]3711; -O1:    eor x9, x1, x33712; -O1:    eor x10, x0, x23713; -O1:    stlxp w11, x10, x9, [x8]3714    %r = atomicrmw xor ptr %ptr, i128 %value release, align 163715    ret i128 %r3716}3717 3718define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3719; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3720; -O0:    eor x2, x8, x103721; -O0:    eor x3, x8, x93722; -O0:    bl __aarch64_cas16_acq_rel3723; -O0:    eor x8, x0, x83724; -O0:    eor x9, x1, x93725; -O0:    orr x8, x8, x93726; -O0:    subs x8, x8, #03727;3728; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3729; -O1:    ldaxp x0, x1, [x8]3730; -O1:    eor x9, x1, x33731; -O1:    eor x10, x0, x23732; -O1:    stlxp w11, x10, x9, [x8]3733    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 163734    ret i128 %r3735}3736 3737define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3738; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3739; -O0:    eor x2, x8, x103740; -O0:    eor x3, x8, x93741; -O0:    bl __aarch64_cas16_acq_rel3742; -O0:    eor x8, x0, x83743; -O0:    eor x9, x1, x93744; -O0:    orr x8, x8, x93745; -O0:    subs x8, x8, #03746;3747; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3748; -O1:    ldaxp x0, x1, [x8]3749; -O1:    eor x9, x1, x33750; -O1:    eor x10, x0, x23751; -O1:    stlxp w11, x10, x9, [x8]3752    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 163753    ret i128 %r3754}3755 3756define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3757; CHECK-LABEL: atomicrmw_xor_i8_unaligned_monotonic:3758; CHECK:    bl __aarch64_ldeor1_relax3759    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13760    ret i8 %r3761}3762 3763define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) {3764; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acquire:3765; CHECK:    bl __aarch64_ldeor1_acq3766    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13767    ret i8 %r3768}3769 3770define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) {3771; CHECK-LABEL: atomicrmw_xor_i8_unaligned_release:3772; CHECK:    bl __aarch64_ldeor1_rel3773    %r = atomicrmw xor ptr %ptr, i8 %value release, align 13774    ret i8 %r3775}3776 3777define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3778; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:3779; CHECK:    bl __aarch64_ldeor1_acq_rel3780    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13781    ret i8 %r3782}3783 3784define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3785; CHECK-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:3786; CHECK:    bl __aarch64_ldeor1_acq_rel3787    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13788    ret i8 %r3789}3790 3791define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3792; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3793; -O0:    eor w8, w9, w83794; -O0:    bl __atomic_compare_exchange3795;3796; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3797; -O1:    eor w8, w0, w203798; -O1:    bl __atomic_compare_exchange3799    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 13800    ret i16 %r3801}3802 3803define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) {3804; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire:3805; -O0:    eor w8, w9, w83806; -O0:    bl __atomic_compare_exchange3807;3808; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire:3809; -O1:    eor w8, w0, w203810; -O1:    bl __atomic_compare_exchange3811    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 13812    ret i16 %r3813}3814 3815define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) {3816; -O0-LABEL: atomicrmw_xor_i16_unaligned_release:3817; -O0:    eor w8, w9, w83818; -O0:    bl __atomic_compare_exchange3819;3820; -O1-LABEL: atomicrmw_xor_i16_unaligned_release:3821; -O1:    eor w8, w0, w203822; -O1:    bl __atomic_compare_exchange3823    %r = atomicrmw xor ptr %ptr, i16 %value release, align 13824    ret i16 %r3825}3826 3827define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3828; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3829; -O0:    eor w8, w9, w83830; -O0:    bl __atomic_compare_exchange3831;3832; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3833; -O1:    eor w8, w0, w203834; -O1:    bl __atomic_compare_exchange3835    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 13836    ret i16 %r3837}3838 3839define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3840; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3841; -O0:    eor w8, w9, w83842; -O0:    bl __atomic_compare_exchange3843;3844; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3845; -O1:    eor w8, w0, w203846; -O1:    bl __atomic_compare_exchange3847    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 13848    ret i16 %r3849}3850 3851define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3852; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3853; -O0:    eor w8, w9, w83854; -O0:    bl __atomic_compare_exchange3855;3856; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3857; -O1:    eor w8, w0, w203858; -O1:    bl __atomic_compare_exchange3859    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 13860    ret i32 %r3861}3862 3863define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) {3864; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire:3865; -O0:    eor w8, w9, w83866; -O0:    bl __atomic_compare_exchange3867;3868; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire:3869; -O1:    eor w8, w0, w203870; -O1:    bl __atomic_compare_exchange3871    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 13872    ret i32 %r3873}3874 3875define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) {3876; -O0-LABEL: atomicrmw_xor_i32_unaligned_release:3877; -O0:    eor w8, w9, w83878; -O0:    bl __atomic_compare_exchange3879;3880; -O1-LABEL: atomicrmw_xor_i32_unaligned_release:3881; -O1:    eor w8, w0, w203882; -O1:    bl __atomic_compare_exchange3883    %r = atomicrmw xor ptr %ptr, i32 %value release, align 13884    ret i32 %r3885}3886 3887define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3888; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3889; -O0:    eor w8, w9, w83890; -O0:    bl __atomic_compare_exchange3891;3892; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3893; -O1:    eor w8, w0, w203894; -O1:    bl __atomic_compare_exchange3895    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 13896    ret i32 %r3897}3898 3899define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3900; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3901; -O0:    eor w8, w9, w83902; -O0:    bl __atomic_compare_exchange3903;3904; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3905; -O1:    eor w8, w0, w203906; -O1:    bl __atomic_compare_exchange3907    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 13908    ret i32 %r3909}3910 3911define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3912; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3913; -O0:    eor x8, x9, x83914; -O0:    bl __atomic_compare_exchange3915;3916; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3917; -O1:    eor x8, x0, x203918; -O1:    bl __atomic_compare_exchange3919    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 13920    ret i64 %r3921}3922 3923define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) {3924; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire:3925; -O0:    eor x8, x9, x83926; -O0:    bl __atomic_compare_exchange3927;3928; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire:3929; -O1:    eor x8, x0, x203930; -O1:    bl __atomic_compare_exchange3931    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 13932    ret i64 %r3933}3934 3935define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) {3936; -O0-LABEL: atomicrmw_xor_i64_unaligned_release:3937; -O0:    eor x8, x9, x83938; -O0:    bl __atomic_compare_exchange3939;3940; -O1-LABEL: atomicrmw_xor_i64_unaligned_release:3941; -O1:    eor x8, x0, x203942; -O1:    bl __atomic_compare_exchange3943    %r = atomicrmw xor ptr %ptr, i64 %value release, align 13944    ret i64 %r3945}3946 3947define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3948; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3949; -O0:    eor x8, x9, x83950; -O0:    bl __atomic_compare_exchange3951;3952; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3953; -O1:    eor x8, x0, x203954; -O1:    bl __atomic_compare_exchange3955    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 13956    ret i64 %r3957}3958 3959define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3960; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3961; -O0:    eor x8, x9, x83962; -O0:    bl __atomic_compare_exchange3963;3964; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3965; -O1:    eor x8, x0, x203966; -O1:    bl __atomic_compare_exchange3967    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 13968    ret i64 %r3969}3970 3971define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3972; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3973; -O0:    eor x9, x8, x93974; -O0:    eor x8, x8, x103975; -O0:    bl __atomic_compare_exchange3976;3977; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3978; -O1:    ldp x0, x1, [x0]3979; -O1:    eor x8, x1, x193980; -O1:    eor x9, x0, x213981; -O1:    bl __atomic_compare_exchange3982    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 13983    ret i128 %r3984}3985 3986define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) {3987; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire:3988; -O0:    eor x9, x8, x93989; -O0:    eor x8, x8, x103990; -O0:    bl __atomic_compare_exchange3991;3992; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire:3993; -O1:    ldp x0, x1, [x0]3994; -O1:    eor x8, x1, x193995; -O1:    eor x9, x0, x213996; -O1:    bl __atomic_compare_exchange3997    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 13998    ret i128 %r3999}4000 4001define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) {4002; -O0-LABEL: atomicrmw_xor_i128_unaligned_release:4003; -O0:    eor x9, x8, x94004; -O0:    eor x8, x8, x104005; -O0:    bl __atomic_compare_exchange4006;4007; -O1-LABEL: atomicrmw_xor_i128_unaligned_release:4008; -O1:    ldp x0, x1, [x0]4009; -O1:    eor x8, x1, x194010; -O1:    eor x9, x0, x214011; -O1:    bl __atomic_compare_exchange4012    %r = atomicrmw xor ptr %ptr, i128 %value release, align 14013    ret i128 %r4014}4015 4016define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4017; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:4018; -O0:    eor x9, x8, x94019; -O0:    eor x8, x8, x104020; -O0:    bl __atomic_compare_exchange4021;4022; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:4023; -O1:    ldp x0, x1, [x0]4024; -O1:    eor x8, x1, x194025; -O1:    eor x9, x0, x214026; -O1:    bl __atomic_compare_exchange4027    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 14028    ret i128 %r4029}4030 4031define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4032; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:4033; -O0:    eor x9, x8, x94034; -O0:    eor x8, x8, x104035; -O0:    bl __atomic_compare_exchange4036;4037; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:4038; -O1:    ldp x0, x1, [x0]4039; -O1:    eor x8, x1, x194040; -O1:    eor x9, x0, x214041; -O1:    bl __atomic_compare_exchange4042    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 14043    ret i128 %r4044}4045 4046define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) {4047; -O0-LABEL: atomicrmw_max_i8_aligned_monotonic:4048; -O0:    sxtb w9, w04049; -O0:    subs w9, w9, w8, sxtb4050; -O0:    csel w1, w0, w8, gt4051; -O0:    bl __aarch64_cas1_relax4052; -O0:    and w8, w0, #0xff4053; -O0:    subs w8, w8, w9, uxtb4054;4055; -O1-LABEL: atomicrmw_max_i8_aligned_monotonic:4056; -O1:    ldxrb w9, [x0]4057; -O1:    sxtb w8, w94058; -O1:    cmp w8, w1, sxtb4059; -O1:    csel w9, w9, w1, gt4060; -O1:    stxrb w10, w9, [x0]4061    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 14062    ret i8 %r4063}4064 4065define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) {4066; -O0-LABEL: atomicrmw_max_i8_aligned_acquire:4067; -O0:    sxtb w9, w04068; -O0:    subs w9, w9, w8, sxtb4069; -O0:    csel w1, w0, w8, gt4070; -O0:    bl __aarch64_cas1_acq4071; -O0:    and w8, w0, #0xff4072; -O0:    subs w8, w8, w9, uxtb4073;4074; -O1-LABEL: atomicrmw_max_i8_aligned_acquire:4075; -O1:    ldaxrb w9, [x0]4076; -O1:    sxtb w8, w94077; -O1:    cmp w8, w1, sxtb4078; -O1:    csel w9, w9, w1, gt4079; -O1:    stxrb w10, w9, [x0]4080    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 14081    ret i8 %r4082}4083 4084define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) {4085; -O0-LABEL: atomicrmw_max_i8_aligned_release:4086; -O0:    sxtb w9, w04087; -O0:    subs w9, w9, w8, sxtb4088; -O0:    csel w1, w0, w8, gt4089; -O0:    bl __aarch64_cas1_rel4090; -O0:    and w8, w0, #0xff4091; -O0:    subs w8, w8, w9, uxtb4092;4093; -O1-LABEL: atomicrmw_max_i8_aligned_release:4094; -O1:    ldxrb w9, [x0]4095; -O1:    sxtb w8, w94096; -O1:    cmp w8, w1, sxtb4097; -O1:    csel w9, w9, w1, gt4098; -O1:    stlxrb w10, w9, [x0]4099    %r = atomicrmw max ptr %ptr, i8 %value release, align 14100    ret i8 %r4101}4102 4103define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) {4104; -O0-LABEL: atomicrmw_max_i8_aligned_acq_rel:4105; -O0:    sxtb w9, w04106; -O0:    subs w9, w9, w8, sxtb4107; -O0:    csel w1, w0, w8, gt4108; -O0:    bl __aarch64_cas1_acq_rel4109; -O0:    and w8, w0, #0xff4110; -O0:    subs w8, w8, w9, uxtb4111;4112; -O1-LABEL: atomicrmw_max_i8_aligned_acq_rel:4113; -O1:    ldaxrb w9, [x0]4114; -O1:    sxtb w8, w94115; -O1:    cmp w8, w1, sxtb4116; -O1:    csel w9, w9, w1, gt4117; -O1:    stlxrb w10, w9, [x0]4118    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 14119    ret i8 %r4120}4121 4122define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) {4123; -O0-LABEL: atomicrmw_max_i8_aligned_seq_cst:4124; -O0:    sxtb w9, w04125; -O0:    subs w9, w9, w8, sxtb4126; -O0:    csel w1, w0, w8, gt4127; -O0:    bl __aarch64_cas1_acq_rel4128; -O0:    and w8, w0, #0xff4129; -O0:    subs w8, w8, w9, uxtb4130;4131; -O1-LABEL: atomicrmw_max_i8_aligned_seq_cst:4132; -O1:    ldaxrb w9, [x0]4133; -O1:    sxtb w8, w94134; -O1:    cmp w8, w1, sxtb4135; -O1:    csel w9, w9, w1, gt4136; -O1:    stlxrb w10, w9, [x0]4137    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 14138    ret i8 %r4139}4140 4141define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) {4142; -O0-LABEL: atomicrmw_max_i16_aligned_monotonic:4143; -O0:    sxth w9, w04144; -O0:    subs w9, w9, w8, sxth4145; -O0:    csel w1, w0, w8, gt4146; -O0:    bl __aarch64_cas2_relax4147; -O0:    subs w8, w8, w0, uxth4148;4149; -O1-LABEL: atomicrmw_max_i16_aligned_monotonic:4150; -O1:    ldxrh w9, [x0]4151; -O1:    sxth w8, w94152; -O1:    cmp w8, w1, sxth4153; -O1:    csel w9, w9, w1, gt4154; -O1:    stxrh w10, w9, [x0]4155    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 24156    ret i16 %r4157}4158 4159define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) {4160; -O0-LABEL: atomicrmw_max_i16_aligned_acquire:4161; -O0:    sxth w9, w04162; -O0:    subs w9, w9, w8, sxth4163; -O0:    csel w1, w0, w8, gt4164; -O0:    bl __aarch64_cas2_acq4165; -O0:    subs w8, w8, w0, uxth4166;4167; -O1-LABEL: atomicrmw_max_i16_aligned_acquire:4168; -O1:    ldaxrh w9, [x0]4169; -O1:    sxth w8, w94170; -O1:    cmp w8, w1, sxth4171; -O1:    csel w9, w9, w1, gt4172; -O1:    stxrh w10, w9, [x0]4173    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 24174    ret i16 %r4175}4176 4177define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) {4178; -O0-LABEL: atomicrmw_max_i16_aligned_release:4179; -O0:    sxth w9, w04180; -O0:    subs w9, w9, w8, sxth4181; -O0:    csel w1, w0, w8, gt4182; -O0:    bl __aarch64_cas2_rel4183; -O0:    subs w8, w8, w0, uxth4184;4185; -O1-LABEL: atomicrmw_max_i16_aligned_release:4186; -O1:    ldxrh w9, [x0]4187; -O1:    sxth w8, w94188; -O1:    cmp w8, w1, sxth4189; -O1:    csel w9, w9, w1, gt4190; -O1:    stlxrh w10, w9, [x0]4191    %r = atomicrmw max ptr %ptr, i16 %value release, align 24192    ret i16 %r4193}4194 4195define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) {4196; -O0-LABEL: atomicrmw_max_i16_aligned_acq_rel:4197; -O0:    sxth w9, w04198; -O0:    subs w9, w9, w8, sxth4199; -O0:    csel w1, w0, w8, gt4200; -O0:    bl __aarch64_cas2_acq_rel4201; -O0:    subs w8, w8, w0, uxth4202;4203; -O1-LABEL: atomicrmw_max_i16_aligned_acq_rel:4204; -O1:    ldaxrh w9, [x0]4205; -O1:    sxth w8, w94206; -O1:    cmp w8, w1, sxth4207; -O1:    csel w9, w9, w1, gt4208; -O1:    stlxrh w10, w9, [x0]4209    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 24210    ret i16 %r4211}4212 4213define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) {4214; -O0-LABEL: atomicrmw_max_i16_aligned_seq_cst:4215; -O0:    sxth w9, w04216; -O0:    subs w9, w9, w8, sxth4217; -O0:    csel w1, w0, w8, gt4218; -O0:    bl __aarch64_cas2_acq_rel4219; -O0:    subs w8, w8, w0, uxth4220;4221; -O1-LABEL: atomicrmw_max_i16_aligned_seq_cst:4222; -O1:    ldaxrh w9, [x0]4223; -O1:    sxth w8, w94224; -O1:    cmp w8, w1, sxth4225; -O1:    csel w9, w9, w1, gt4226; -O1:    stlxrh w10, w9, [x0]4227    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 24228    ret i16 %r4229}4230 4231define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) {4232; -O0-LABEL: atomicrmw_max_i32_aligned_monotonic:4233; -O0:    subs w9, w0, w84234; -O0:    csel w1, w0, w8, gt4235; -O0:    bl __aarch64_cas4_relax4236; -O0:    subs w8, w0, w84237;4238; -O1-LABEL: atomicrmw_max_i32_aligned_monotonic:4239; -O1:    ldxr w8, [x0]4240; -O1:    cmp w8, w14241; -O1:    csel w9, w8, w1, gt4242; -O1:    stxr w10, w9, [x0]4243    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 44244    ret i32 %r4245}4246 4247define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) {4248; -O0-LABEL: atomicrmw_max_i32_aligned_acquire:4249; -O0:    subs w9, w0, w84250; -O0:    csel w1, w0, w8, gt4251; -O0:    bl __aarch64_cas4_acq4252; -O0:    subs w8, w0, w84253;4254; -O1-LABEL: atomicrmw_max_i32_aligned_acquire:4255; -O1:    ldaxr w8, [x0]4256; -O1:    cmp w8, w14257; -O1:    csel w9, w8, w1, gt4258; -O1:    stxr w10, w9, [x0]4259    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 44260    ret i32 %r4261}4262 4263define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) {4264; -O0-LABEL: atomicrmw_max_i32_aligned_release:4265; -O0:    subs w9, w0, w84266; -O0:    csel w1, w0, w8, gt4267; -O0:    bl __aarch64_cas4_rel4268; -O0:    subs w8, w0, w84269;4270; -O1-LABEL: atomicrmw_max_i32_aligned_release:4271; -O1:    ldxr w8, [x0]4272; -O1:    cmp w8, w14273; -O1:    csel w9, w8, w1, gt4274; -O1:    stlxr w10, w9, [x0]4275    %r = atomicrmw max ptr %ptr, i32 %value release, align 44276    ret i32 %r4277}4278 4279define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4280; -O0-LABEL: atomicrmw_max_i32_aligned_acq_rel:4281; -O0:    subs w9, w0, w84282; -O0:    csel w1, w0, w8, gt4283; -O0:    bl __aarch64_cas4_acq_rel4284; -O0:    subs w8, w0, w84285;4286; -O1-LABEL: atomicrmw_max_i32_aligned_acq_rel:4287; -O1:    ldaxr w8, [x0]4288; -O1:    cmp w8, w14289; -O1:    csel w9, w8, w1, gt4290; -O1:    stlxr w10, w9, [x0]4291    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 44292    ret i32 %r4293}4294 4295define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4296; -O0-LABEL: atomicrmw_max_i32_aligned_seq_cst:4297; -O0:    subs w9, w0, w84298; -O0:    csel w1, w0, w8, gt4299; -O0:    bl __aarch64_cas4_acq_rel4300; -O0:    subs w8, w0, w84301;4302; -O1-LABEL: atomicrmw_max_i32_aligned_seq_cst:4303; -O1:    ldaxr w8, [x0]4304; -O1:    cmp w8, w14305; -O1:    csel w9, w8, w1, gt4306; -O1:    stlxr w10, w9, [x0]4307    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 44308    ret i32 %r4309}4310 4311define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) {4312; -O0-LABEL: atomicrmw_max_i64_aligned_monotonic:4313; -O0:    subs x9, x0, x84314; -O0:    csel x1, x0, x8, gt4315; -O0:    bl __aarch64_cas8_relax4316; -O0:    subs x8, x0, x84317;4318; -O1-LABEL: atomicrmw_max_i64_aligned_monotonic:4319; -O1:    ldxr x0, [x8]4320; -O1:    cmp x0, x14321; -O1:    csel x9, x0, x1, gt4322; -O1:    stxr w10, x9, [x8]4323    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 84324    ret i64 %r4325}4326 4327define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) {4328; -O0-LABEL: atomicrmw_max_i64_aligned_acquire:4329; -O0:    subs x9, x0, x84330; -O0:    csel x1, x0, x8, gt4331; -O0:    bl __aarch64_cas8_acq4332; -O0:    subs x8, x0, x84333;4334; -O1-LABEL: atomicrmw_max_i64_aligned_acquire:4335; -O1:    ldaxr x0, [x8]4336; -O1:    cmp x0, x14337; -O1:    csel x9, x0, x1, gt4338; -O1:    stxr w10, x9, [x8]4339    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 84340    ret i64 %r4341}4342 4343define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) {4344; -O0-LABEL: atomicrmw_max_i64_aligned_release:4345; -O0:    subs x9, x0, x84346; -O0:    csel x1, x0, x8, gt4347; -O0:    bl __aarch64_cas8_rel4348; -O0:    subs x8, x0, x84349;4350; -O1-LABEL: atomicrmw_max_i64_aligned_release:4351; -O1:    ldxr x0, [x8]4352; -O1:    cmp x0, x14353; -O1:    csel x9, x0, x1, gt4354; -O1:    stlxr w10, x9, [x8]4355    %r = atomicrmw max ptr %ptr, i64 %value release, align 84356    ret i64 %r4357}4358 4359define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4360; -O0-LABEL: atomicrmw_max_i64_aligned_acq_rel:4361; -O0:    subs x9, x0, x84362; -O0:    csel x1, x0, x8, gt4363; -O0:    bl __aarch64_cas8_acq_rel4364; -O0:    subs x8, x0, x84365;4366; -O1-LABEL: atomicrmw_max_i64_aligned_acq_rel:4367; -O1:    ldaxr x0, [x8]4368; -O1:    cmp x0, x14369; -O1:    csel x9, x0, x1, gt4370; -O1:    stlxr w10, x9, [x8]4371    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 84372    ret i64 %r4373}4374 4375define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4376; -O0-LABEL: atomicrmw_max_i64_aligned_seq_cst:4377; -O0:    subs x9, x0, x84378; -O0:    csel x1, x0, x8, gt4379; -O0:    bl __aarch64_cas8_acq_rel4380; -O0:    subs x8, x0, x84381;4382; -O1-LABEL: atomicrmw_max_i64_aligned_seq_cst:4383; -O1:    ldaxr x0, [x8]4384; -O1:    cmp x0, x14385; -O1:    csel x9, x0, x1, gt4386; -O1:    stlxr w10, x9, [x8]4387    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 84388    ret i64 %r4389}4390 4391define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) {4392; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic:4393; -O0:    subs x8, x8, x114394; -O0:    subs x10, x10, x94395; -O0:    subs x12, x12, x94396; -O0:    csel w10, w8, w10, eq4397; -O0:    ands w12, w10, #0x14398; -O0:    csel x2, x8, x11, ne4399; -O0:    ands w10, w10, #0x14400; -O0:    csel x3, x8, x9, ne4401; -O0:    bl __aarch64_cas16_relax4402; -O0:    eor x8, x0, x84403; -O0:    eor x9, x1, x94404; -O0:    orr x8, x8, x94405; -O0:    subs x8, x8, #04406;4407; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic:4408; -O1:    ldxp x0, x1, [x8]4409; -O1:    cmp x2, x04410; -O1:    csel x9, x1, x3, lt4411; -O1:    csel x10, x0, x2, lt4412; -O1:    stxp w11, x10, x9, [x8]4413    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 164414    ret i128 %r4415}4416 4417define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) {4418; -O0-LABEL: atomicrmw_max_i128_aligned_acquire:4419; -O0:    subs x8, x8, x114420; -O0:    subs x10, x10, x94421; -O0:    subs x12, x12, x94422; -O0:    csel w10, w8, w10, eq4423; -O0:    ands w12, w10, #0x14424; -O0:    csel x2, x8, x11, ne4425; -O0:    ands w10, w10, #0x14426; -O0:    csel x3, x8, x9, ne4427; -O0:    bl __aarch64_cas16_acq4428; -O0:    eor x8, x0, x84429; -O0:    eor x9, x1, x94430; -O0:    orr x8, x8, x94431; -O0:    subs x8, x8, #04432;4433; -O1-LABEL: atomicrmw_max_i128_aligned_acquire:4434; -O1:    ldaxp x0, x1, [x8]4435; -O1:    cmp x2, x04436; -O1:    csel x9, x1, x3, lt4437; -O1:    csel x10, x0, x2, lt4438; -O1:    stxp w11, x10, x9, [x8]4439    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 164440    ret i128 %r4441}4442 4443define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) {4444; -O0-LABEL: atomicrmw_max_i128_aligned_release:4445; -O0:    subs x8, x8, x114446; -O0:    subs x10, x10, x94447; -O0:    subs x12, x12, x94448; -O0:    csel w10, w8, w10, eq4449; -O0:    ands w12, w10, #0x14450; -O0:    csel x2, x8, x11, ne4451; -O0:    ands w10, w10, #0x14452; -O0:    csel x3, x8, x9, ne4453; -O0:    bl __aarch64_cas16_rel4454; -O0:    eor x8, x0, x84455; -O0:    eor x9, x1, x94456; -O0:    orr x8, x8, x94457; -O0:    subs x8, x8, #04458;4459; -O1-LABEL: atomicrmw_max_i128_aligned_release:4460; -O1:    ldxp x0, x1, [x8]4461; -O1:    cmp x2, x04462; -O1:    csel x9, x1, x3, lt4463; -O1:    csel x10, x0, x2, lt4464; -O1:    stlxp w11, x10, x9, [x8]4465    %r = atomicrmw max ptr %ptr, i128 %value release, align 164466    ret i128 %r4467}4468 4469define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4470; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel:4471; -O0:    subs x8, x8, x114472; -O0:    subs x10, x10, x94473; -O0:    subs x12, x12, x94474; -O0:    csel w10, w8, w10, eq4475; -O0:    ands w12, w10, #0x14476; -O0:    csel x2, x8, x11, ne4477; -O0:    ands w10, w10, #0x14478; -O0:    csel x3, x8, x9, ne4479; -O0:    bl __aarch64_cas16_acq_rel4480; -O0:    eor x8, x0, x84481; -O0:    eor x9, x1, x94482; -O0:    orr x8, x8, x94483; -O0:    subs x8, x8, #04484;4485; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel:4486; -O1:    ldaxp x0, x1, [x8]4487; -O1:    cmp x2, x04488; -O1:    csel x9, x1, x3, lt4489; -O1:    csel x10, x0, x2, lt4490; -O1:    stlxp w11, x10, x9, [x8]4491    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 164492    ret i128 %r4493}4494 4495define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4496; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst:4497; -O0:    subs x8, x8, x114498; -O0:    subs x10, x10, x94499; -O0:    subs x12, x12, x94500; -O0:    csel w10, w8, w10, eq4501; -O0:    ands w12, w10, #0x14502; -O0:    csel x2, x8, x11, ne4503; -O0:    ands w10, w10, #0x14504; -O0:    csel x3, x8, x9, ne4505; -O0:    bl __aarch64_cas16_acq_rel4506; -O0:    eor x8, x0, x84507; -O0:    eor x9, x1, x94508; -O0:    orr x8, x8, x94509; -O0:    subs x8, x8, #04510;4511; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst:4512; -O1:    ldaxp x0, x1, [x8]4513; -O1:    cmp x2, x04514; -O1:    csel x9, x1, x3, lt4515; -O1:    csel x10, x0, x2, lt4516; -O1:    stlxp w11, x10, x9, [x8]4517    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 164518    ret i128 %r4519}4520 4521define dso_local i8 @atomicrmw_max_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4522; -O0-LABEL: atomicrmw_max_i8_unaligned_monotonic:4523; -O0:    sxtb w9, w04524; -O0:    subs w9, w9, w8, sxtb4525; -O0:    csel w1, w0, w8, gt4526; -O0:    bl __aarch64_cas1_relax4527; -O0:    and w8, w0, #0xff4528; -O0:    subs w8, w8, w9, uxtb4529;4530; -O1-LABEL: atomicrmw_max_i8_unaligned_monotonic:4531; -O1:    ldxrb w9, [x0]4532; -O1:    sxtb w8, w94533; -O1:    cmp w8, w1, sxtb4534; -O1:    csel w9, w9, w1, gt4535; -O1:    stxrb w10, w9, [x0]4536    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 14537    ret i8 %r4538}4539 4540define dso_local i8 @atomicrmw_max_i8_unaligned_acquire(ptr %ptr, i8 %value) {4541; -O0-LABEL: atomicrmw_max_i8_unaligned_acquire:4542; -O0:    sxtb w9, w04543; -O0:    subs w9, w9, w8, sxtb4544; -O0:    csel w1, w0, w8, gt4545; -O0:    bl __aarch64_cas1_acq4546; -O0:    and w8, w0, #0xff4547; -O0:    subs w8, w8, w9, uxtb4548;4549; -O1-LABEL: atomicrmw_max_i8_unaligned_acquire:4550; -O1:    ldaxrb w9, [x0]4551; -O1:    sxtb w8, w94552; -O1:    cmp w8, w1, sxtb4553; -O1:    csel w9, w9, w1, gt4554; -O1:    stxrb w10, w9, [x0]4555    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 14556    ret i8 %r4557}4558 4559define dso_local i8 @atomicrmw_max_i8_unaligned_release(ptr %ptr, i8 %value) {4560; -O0-LABEL: atomicrmw_max_i8_unaligned_release:4561; -O0:    sxtb w9, w04562; -O0:    subs w9, w9, w8, sxtb4563; -O0:    csel w1, w0, w8, gt4564; -O0:    bl __aarch64_cas1_rel4565; -O0:    and w8, w0, #0xff4566; -O0:    subs w8, w8, w9, uxtb4567;4568; -O1-LABEL: atomicrmw_max_i8_unaligned_release:4569; -O1:    ldxrb w9, [x0]4570; -O1:    sxtb w8, w94571; -O1:    cmp w8, w1, sxtb4572; -O1:    csel w9, w9, w1, gt4573; -O1:    stlxrb w10, w9, [x0]4574    %r = atomicrmw max ptr %ptr, i8 %value release, align 14575    ret i8 %r4576}4577 4578define dso_local i8 @atomicrmw_max_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4579; -O0-LABEL: atomicrmw_max_i8_unaligned_acq_rel:4580; -O0:    sxtb w9, w04581; -O0:    subs w9, w9, w8, sxtb4582; -O0:    csel w1, w0, w8, gt4583; -O0:    bl __aarch64_cas1_acq_rel4584; -O0:    and w8, w0, #0xff4585; -O0:    subs w8, w8, w9, uxtb4586;4587; -O1-LABEL: atomicrmw_max_i8_unaligned_acq_rel:4588; -O1:    ldaxrb w9, [x0]4589; -O1:    sxtb w8, w94590; -O1:    cmp w8, w1, sxtb4591; -O1:    csel w9, w9, w1, gt4592; -O1:    stlxrb w10, w9, [x0]4593    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 14594    ret i8 %r4595}4596 4597define dso_local i8 @atomicrmw_max_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4598; -O0-LABEL: atomicrmw_max_i8_unaligned_seq_cst:4599; -O0:    sxtb w9, w04600; -O0:    subs w9, w9, w8, sxtb4601; -O0:    csel w1, w0, w8, gt4602; -O0:    bl __aarch64_cas1_acq_rel4603; -O0:    and w8, w0, #0xff4604; -O0:    subs w8, w8, w9, uxtb4605;4606; -O1-LABEL: atomicrmw_max_i8_unaligned_seq_cst:4607; -O1:    ldaxrb w9, [x0]4608; -O1:    sxtb w8, w94609; -O1:    cmp w8, w1, sxtb4610; -O1:    csel w9, w9, w1, gt4611; -O1:    stlxrb w10, w9, [x0]4612    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 14613    ret i8 %r4614}4615 4616define dso_local i16 @atomicrmw_max_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4617; -O0-LABEL: atomicrmw_max_i16_unaligned_monotonic:4618; -O0:    sxth w10, w94619; -O0:    subs w10, w10, w8, sxth4620; -O0:    csel w8, w9, w8, gt4621; -O0:    bl __atomic_compare_exchange4622;4623; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic:4624; -O1:    sxth w8, w04625; -O1:    cmp w8, w20, sxth4626; -O1:    csel w8, w0, w20, gt4627; -O1:    bl __atomic_compare_exchange4628    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 14629    ret i16 %r4630}4631 4632define dso_local i16 @atomicrmw_max_i16_unaligned_acquire(ptr %ptr, i16 %value) {4633; -O0-LABEL: atomicrmw_max_i16_unaligned_acquire:4634; -O0:    sxth w10, w94635; -O0:    subs w10, w10, w8, sxth4636; -O0:    csel w8, w9, w8, gt4637; -O0:    bl __atomic_compare_exchange4638;4639; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire:4640; -O1:    sxth w8, w04641; -O1:    cmp w8, w20, sxth4642; -O1:    csel w8, w0, w20, gt4643; -O1:    bl __atomic_compare_exchange4644    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 14645    ret i16 %r4646}4647 4648define dso_local i16 @atomicrmw_max_i16_unaligned_release(ptr %ptr, i16 %value) {4649; -O0-LABEL: atomicrmw_max_i16_unaligned_release:4650; -O0:    sxth w10, w94651; -O0:    subs w10, w10, w8, sxth4652; -O0:    csel w8, w9, w8, gt4653; -O0:    bl __atomic_compare_exchange4654;4655; -O1-LABEL: atomicrmw_max_i16_unaligned_release:4656; -O1:    sxth w8, w04657; -O1:    cmp w8, w20, sxth4658; -O1:    csel w8, w0, w20, gt4659; -O1:    bl __atomic_compare_exchange4660    %r = atomicrmw max ptr %ptr, i16 %value release, align 14661    ret i16 %r4662}4663 4664define dso_local i16 @atomicrmw_max_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4665; -O0-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4666; -O0:    sxth w10, w94667; -O0:    subs w10, w10, w8, sxth4668; -O0:    csel w8, w9, w8, gt4669; -O0:    bl __atomic_compare_exchange4670;4671; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4672; -O1:    sxth w8, w04673; -O1:    cmp w8, w20, sxth4674; -O1:    csel w8, w0, w20, gt4675; -O1:    bl __atomic_compare_exchange4676    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 14677    ret i16 %r4678}4679 4680define dso_local i16 @atomicrmw_max_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4681; -O0-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4682; -O0:    sxth w10, w94683; -O0:    subs w10, w10, w8, sxth4684; -O0:    csel w8, w9, w8, gt4685; -O0:    bl __atomic_compare_exchange4686;4687; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4688; -O1:    sxth w8, w04689; -O1:    cmp w8, w20, sxth4690; -O1:    csel w8, w0, w20, gt4691; -O1:    bl __atomic_compare_exchange4692    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 14693    ret i16 %r4694}4695 4696define dso_local i32 @atomicrmw_max_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4697; -O0-LABEL: atomicrmw_max_i32_unaligned_monotonic:4698; -O0:    subs w10, w9, w84699; -O0:    csel w8, w9, w8, gt4700; -O0:    bl __atomic_compare_exchange4701;4702; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic:4703; -O1:    cmp w0, w204704; -O1:    csel w8, w0, w20, gt4705; -O1:    bl __atomic_compare_exchange4706    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 14707    ret i32 %r4708}4709 4710define dso_local i32 @atomicrmw_max_i32_unaligned_acquire(ptr %ptr, i32 %value) {4711; -O0-LABEL: atomicrmw_max_i32_unaligned_acquire:4712; -O0:    subs w10, w9, w84713; -O0:    csel w8, w9, w8, gt4714; -O0:    bl __atomic_compare_exchange4715;4716; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire:4717; -O1:    cmp w0, w204718; -O1:    csel w8, w0, w20, gt4719; -O1:    bl __atomic_compare_exchange4720    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 14721    ret i32 %r4722}4723 4724define dso_local i32 @atomicrmw_max_i32_unaligned_release(ptr %ptr, i32 %value) {4725; -O0-LABEL: atomicrmw_max_i32_unaligned_release:4726; -O0:    subs w10, w9, w84727; -O0:    csel w8, w9, w8, gt4728; -O0:    bl __atomic_compare_exchange4729;4730; -O1-LABEL: atomicrmw_max_i32_unaligned_release:4731; -O1:    cmp w0, w204732; -O1:    csel w8, w0, w20, gt4733; -O1:    bl __atomic_compare_exchange4734    %r = atomicrmw max ptr %ptr, i32 %value release, align 14735    ret i32 %r4736}4737 4738define dso_local i32 @atomicrmw_max_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4739; -O0-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4740; -O0:    subs w10, w9, w84741; -O0:    csel w8, w9, w8, gt4742; -O0:    bl __atomic_compare_exchange4743;4744; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4745; -O1:    cmp w0, w204746; -O1:    csel w8, w0, w20, gt4747; -O1:    bl __atomic_compare_exchange4748    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 14749    ret i32 %r4750}4751 4752define dso_local i32 @atomicrmw_max_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4753; -O0-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4754; -O0:    subs w10, w9, w84755; -O0:    csel w8, w9, w8, gt4756; -O0:    bl __atomic_compare_exchange4757;4758; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4759; -O1:    cmp w0, w204760; -O1:    csel w8, w0, w20, gt4761; -O1:    bl __atomic_compare_exchange4762    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 14763    ret i32 %r4764}4765 4766define dso_local i64 @atomicrmw_max_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4767; -O0-LABEL: atomicrmw_max_i64_unaligned_monotonic:4768; -O0:    subs x10, x9, x84769; -O0:    csel x8, x9, x8, gt4770; -O0:    bl __atomic_compare_exchange4771;4772; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic:4773; -O1:    cmp x0, x204774; -O1:    csel x8, x0, x20, gt4775; -O1:    bl __atomic_compare_exchange4776    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 14777    ret i64 %r4778}4779 4780define dso_local i64 @atomicrmw_max_i64_unaligned_acquire(ptr %ptr, i64 %value) {4781; -O0-LABEL: atomicrmw_max_i64_unaligned_acquire:4782; -O0:    subs x10, x9, x84783; -O0:    csel x8, x9, x8, gt4784; -O0:    bl __atomic_compare_exchange4785;4786; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire:4787; -O1:    cmp x0, x204788; -O1:    csel x8, x0, x20, gt4789; -O1:    bl __atomic_compare_exchange4790    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 14791    ret i64 %r4792}4793 4794define dso_local i64 @atomicrmw_max_i64_unaligned_release(ptr %ptr, i64 %value) {4795; -O0-LABEL: atomicrmw_max_i64_unaligned_release:4796; -O0:    subs x10, x9, x84797; -O0:    csel x8, x9, x8, gt4798; -O0:    bl __atomic_compare_exchange4799;4800; -O1-LABEL: atomicrmw_max_i64_unaligned_release:4801; -O1:    cmp x0, x204802; -O1:    csel x8, x0, x20, gt4803; -O1:    bl __atomic_compare_exchange4804    %r = atomicrmw max ptr %ptr, i64 %value release, align 14805    ret i64 %r4806}4807 4808define dso_local i64 @atomicrmw_max_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4809; -O0-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4810; -O0:    subs x10, x9, x84811; -O0:    csel x8, x9, x8, gt4812; -O0:    bl __atomic_compare_exchange4813;4814; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4815; -O1:    cmp x0, x204816; -O1:    csel x8, x0, x20, gt4817; -O1:    bl __atomic_compare_exchange4818    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 14819    ret i64 %r4820}4821 4822define dso_local i64 @atomicrmw_max_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4823; -O0-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4824; -O0:    subs x10, x9, x84825; -O0:    csel x8, x9, x8, gt4826; -O0:    bl __atomic_compare_exchange4827;4828; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4829; -O1:    cmp x0, x204830; -O1:    csel x8, x0, x20, gt4831; -O1:    bl __atomic_compare_exchange4832    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 14833    ret i64 %r4834}4835 4836define dso_local i128 @atomicrmw_max_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4837; -O0-LABEL: atomicrmw_max_i128_unaligned_monotonic:4838; -O0:    subs x8, x8, x94839; -O0:    subs x11, x11, x104840; -O0:    subs x12, x12, x104841; -O0:    csel w11, w8, w11, eq4842; -O0:    ands w12, w11, #0x14843; -O0:    csel x9, x8, x9, ne4844; -O0:    ands w11, w11, #0x14845; -O0:    csel x8, x8, x10, ne4846; -O0:    bl __atomic_compare_exchange4847;4848; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic:4849; -O1:    ldp x0, x1, [x0]4850; -O1:    cmp x21, x04851; -O1:    csel x8, x1, x19, lt4852; -O1:    csel x9, x0, x21, lt4853; -O1:    bl __atomic_compare_exchange4854    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 14855    ret i128 %r4856}4857 4858define dso_local i128 @atomicrmw_max_i128_unaligned_acquire(ptr %ptr, i128 %value) {4859; -O0-LABEL: atomicrmw_max_i128_unaligned_acquire:4860; -O0:    subs x8, x8, x94861; -O0:    subs x11, x11, x104862; -O0:    subs x12, x12, x104863; -O0:    csel w11, w8, w11, eq4864; -O0:    ands w12, w11, #0x14865; -O0:    csel x9, x8, x9, ne4866; -O0:    ands w11, w11, #0x14867; -O0:    csel x8, x8, x10, ne4868; -O0:    bl __atomic_compare_exchange4869;4870; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire:4871; -O1:    ldp x0, x1, [x0]4872; -O1:    cmp x21, x04873; -O1:    csel x8, x1, x19, lt4874; -O1:    csel x9, x0, x21, lt4875; -O1:    bl __atomic_compare_exchange4876    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 14877    ret i128 %r4878}4879 4880define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) {4881; -O0-LABEL: atomicrmw_max_i128_unaligned_release:4882; -O0:    subs x8, x8, x94883; -O0:    subs x11, x11, x104884; -O0:    subs x12, x12, x104885; -O0:    csel w11, w8, w11, eq4886; -O0:    ands w12, w11, #0x14887; -O0:    csel x9, x8, x9, ne4888; -O0:    ands w11, w11, #0x14889; -O0:    csel x8, x8, x10, ne4890; -O0:    bl __atomic_compare_exchange4891;4892; -O1-LABEL: atomicrmw_max_i128_unaligned_release:4893; -O1:    ldp x0, x1, [x0]4894; -O1:    cmp x21, x04895; -O1:    csel x8, x1, x19, lt4896; -O1:    csel x9, x0, x21, lt4897; -O1:    bl __atomic_compare_exchange4898    %r = atomicrmw max ptr %ptr, i128 %value release, align 14899    ret i128 %r4900}4901 4902define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4903; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4904; -O0:    subs x8, x8, x94905; -O0:    subs x11, x11, x104906; -O0:    subs x12, x12, x104907; -O0:    csel w11, w8, w11, eq4908; -O0:    ands w12, w11, #0x14909; -O0:    csel x9, x8, x9, ne4910; -O0:    ands w11, w11, #0x14911; -O0:    csel x8, x8, x10, ne4912; -O0:    bl __atomic_compare_exchange4913;4914; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4915; -O1:    ldp x0, x1, [x0]4916; -O1:    cmp x21, x04917; -O1:    csel x8, x1, x19, lt4918; -O1:    csel x9, x0, x21, lt4919; -O1:    bl __atomic_compare_exchange4920    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 14921    ret i128 %r4922}4923 4924define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4925; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4926; -O0:    subs x8, x8, x94927; -O0:    subs x11, x11, x104928; -O0:    subs x12, x12, x104929; -O0:    csel w11, w8, w11, eq4930; -O0:    ands w12, w11, #0x14931; -O0:    csel x9, x8, x9, ne4932; -O0:    ands w11, w11, #0x14933; -O0:    csel x8, x8, x10, ne4934; -O0:    bl __atomic_compare_exchange4935;4936; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4937; -O1:    ldp x0, x1, [x0]4938; -O1:    cmp x21, x04939; -O1:    csel x8, x1, x19, lt4940; -O1:    csel x9, x0, x21, lt4941; -O1:    bl __atomic_compare_exchange4942    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 14943    ret i128 %r4944}4945 4946define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) {4947; -O0-LABEL: atomicrmw_min_i8_aligned_monotonic:4948; -O0:    sxtb w9, w04949; -O0:    subs w9, w9, w8, sxtb4950; -O0:    csel w1, w0, w8, le4951; -O0:    bl __aarch64_cas1_relax4952; -O0:    and w8, w0, #0xff4953; -O0:    subs w8, w8, w9, uxtb4954;4955; -O1-LABEL: atomicrmw_min_i8_aligned_monotonic:4956; -O1:    ldxrb w9, [x0]4957; -O1:    sxtb w8, w94958; -O1:    cmp w8, w1, sxtb4959; -O1:    csel w9, w9, w1, le4960; -O1:    stxrb w10, w9, [x0]4961    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14962    ret i8 %r4963}4964 4965define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) {4966; -O0-LABEL: atomicrmw_min_i8_aligned_acquire:4967; -O0:    sxtb w9, w04968; -O0:    subs w9, w9, w8, sxtb4969; -O0:    csel w1, w0, w8, le4970; -O0:    bl __aarch64_cas1_acq4971; -O0:    and w8, w0, #0xff4972; -O0:    subs w8, w8, w9, uxtb4973;4974; -O1-LABEL: atomicrmw_min_i8_aligned_acquire:4975; -O1:    ldaxrb w9, [x0]4976; -O1:    sxtb w8, w94977; -O1:    cmp w8, w1, sxtb4978; -O1:    csel w9, w9, w1, le4979; -O1:    stxrb w10, w9, [x0]4980    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14981    ret i8 %r4982}4983 4984define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) {4985; -O0-LABEL: atomicrmw_min_i8_aligned_release:4986; -O0:    sxtb w9, w04987; -O0:    subs w9, w9, w8, sxtb4988; -O0:    csel w1, w0, w8, le4989; -O0:    bl __aarch64_cas1_rel4990; -O0:    and w8, w0, #0xff4991; -O0:    subs w8, w8, w9, uxtb4992;4993; -O1-LABEL: atomicrmw_min_i8_aligned_release:4994; -O1:    ldxrb w9, [x0]4995; -O1:    sxtb w8, w94996; -O1:    cmp w8, w1, sxtb4997; -O1:    csel w9, w9, w1, le4998; -O1:    stlxrb w10, w9, [x0]4999    %r = atomicrmw min ptr %ptr, i8 %value release, align 15000    ret i8 %r5001}5002 5003define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5004; -O0-LABEL: atomicrmw_min_i8_aligned_acq_rel:5005; -O0:    sxtb w9, w05006; -O0:    subs w9, w9, w8, sxtb5007; -O0:    csel w1, w0, w8, le5008; -O0:    bl __aarch64_cas1_acq_rel5009; -O0:    and w8, w0, #0xff5010; -O0:    subs w8, w8, w9, uxtb5011;5012; -O1-LABEL: atomicrmw_min_i8_aligned_acq_rel:5013; -O1:    ldaxrb w9, [x0]5014; -O1:    sxtb w8, w95015; -O1:    cmp w8, w1, sxtb5016; -O1:    csel w9, w9, w1, le5017; -O1:    stlxrb w10, w9, [x0]5018    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 15019    ret i8 %r5020}5021 5022define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5023; -O0-LABEL: atomicrmw_min_i8_aligned_seq_cst:5024; -O0:    sxtb w9, w05025; -O0:    subs w9, w9, w8, sxtb5026; -O0:    csel w1, w0, w8, le5027; -O0:    bl __aarch64_cas1_acq_rel5028; -O0:    and w8, w0, #0xff5029; -O0:    subs w8, w8, w9, uxtb5030;5031; -O1-LABEL: atomicrmw_min_i8_aligned_seq_cst:5032; -O1:    ldaxrb w9, [x0]5033; -O1:    sxtb w8, w95034; -O1:    cmp w8, w1, sxtb5035; -O1:    csel w9, w9, w1, le5036; -O1:    stlxrb w10, w9, [x0]5037    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 15038    ret i8 %r5039}5040 5041define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) {5042; -O0-LABEL: atomicrmw_min_i16_aligned_monotonic:5043; -O0:    sxth w9, w05044; -O0:    subs w9, w9, w8, sxth5045; -O0:    csel w1, w0, w8, le5046; -O0:    bl __aarch64_cas2_relax5047; -O0:    subs w8, w8, w0, uxth5048;5049; -O1-LABEL: atomicrmw_min_i16_aligned_monotonic:5050; -O1:    ldxrh w9, [x0]5051; -O1:    sxth w8, w95052; -O1:    cmp w8, w1, sxth5053; -O1:    csel w9, w9, w1, le5054; -O1:    stxrh w10, w9, [x0]5055    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 25056    ret i16 %r5057}5058 5059define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) {5060; -O0-LABEL: atomicrmw_min_i16_aligned_acquire:5061; -O0:    sxth w9, w05062; -O0:    subs w9, w9, w8, sxth5063; -O0:    csel w1, w0, w8, le5064; -O0:    bl __aarch64_cas2_acq5065; -O0:    subs w8, w8, w0, uxth5066;5067; -O1-LABEL: atomicrmw_min_i16_aligned_acquire:5068; -O1:    ldaxrh w9, [x0]5069; -O1:    sxth w8, w95070; -O1:    cmp w8, w1, sxth5071; -O1:    csel w9, w9, w1, le5072; -O1:    stxrh w10, w9, [x0]5073    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 25074    ret i16 %r5075}5076 5077define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) {5078; -O0-LABEL: atomicrmw_min_i16_aligned_release:5079; -O0:    sxth w9, w05080; -O0:    subs w9, w9, w8, sxth5081; -O0:    csel w1, w0, w8, le5082; -O0:    bl __aarch64_cas2_rel5083; -O0:    subs w8, w8, w0, uxth5084;5085; -O1-LABEL: atomicrmw_min_i16_aligned_release:5086; -O1:    ldxrh w9, [x0]5087; -O1:    sxth w8, w95088; -O1:    cmp w8, w1, sxth5089; -O1:    csel w9, w9, w1, le5090; -O1:    stlxrh w10, w9, [x0]5091    %r = atomicrmw min ptr %ptr, i16 %value release, align 25092    ret i16 %r5093}5094 5095define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5096; -O0-LABEL: atomicrmw_min_i16_aligned_acq_rel:5097; -O0:    sxth w9, w05098; -O0:    subs w9, w9, w8, sxth5099; -O0:    csel w1, w0, w8, le5100; -O0:    bl __aarch64_cas2_acq_rel5101; -O0:    subs w8, w8, w0, uxth5102;5103; -O1-LABEL: atomicrmw_min_i16_aligned_acq_rel:5104; -O1:    ldaxrh w9, [x0]5105; -O1:    sxth w8, w95106; -O1:    cmp w8, w1, sxth5107; -O1:    csel w9, w9, w1, le5108; -O1:    stlxrh w10, w9, [x0]5109    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 25110    ret i16 %r5111}5112 5113define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5114; -O0-LABEL: atomicrmw_min_i16_aligned_seq_cst:5115; -O0:    sxth w9, w05116; -O0:    subs w9, w9, w8, sxth5117; -O0:    csel w1, w0, w8, le5118; -O0:    bl __aarch64_cas2_acq_rel5119; -O0:    subs w8, w8, w0, uxth5120;5121; -O1-LABEL: atomicrmw_min_i16_aligned_seq_cst:5122; -O1:    ldaxrh w9, [x0]5123; -O1:    sxth w8, w95124; -O1:    cmp w8, w1, sxth5125; -O1:    csel w9, w9, w1, le5126; -O1:    stlxrh w10, w9, [x0]5127    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 25128    ret i16 %r5129}5130 5131define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) {5132; -O0-LABEL: atomicrmw_min_i32_aligned_monotonic:5133; -O0:    subs w9, w0, w85134; -O0:    csel w1, w0, w8, le5135; -O0:    bl __aarch64_cas4_relax5136; -O0:    subs w8, w0, w85137;5138; -O1-LABEL: atomicrmw_min_i32_aligned_monotonic:5139; -O1:    ldxr w8, [x0]5140; -O1:    cmp w8, w15141; -O1:    csel w9, w8, w1, le5142; -O1:    stxr w10, w9, [x0]5143    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 45144    ret i32 %r5145}5146 5147define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) {5148; -O0-LABEL: atomicrmw_min_i32_aligned_acquire:5149; -O0:    subs w9, w0, w85150; -O0:    csel w1, w0, w8, le5151; -O0:    bl __aarch64_cas4_acq5152; -O0:    subs w8, w0, w85153;5154; -O1-LABEL: atomicrmw_min_i32_aligned_acquire:5155; -O1:    ldaxr w8, [x0]5156; -O1:    cmp w8, w15157; -O1:    csel w9, w8, w1, le5158; -O1:    stxr w10, w9, [x0]5159    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 45160    ret i32 %r5161}5162 5163define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) {5164; -O0-LABEL: atomicrmw_min_i32_aligned_release:5165; -O0:    subs w9, w0, w85166; -O0:    csel w1, w0, w8, le5167; -O0:    bl __aarch64_cas4_rel5168; -O0:    subs w8, w0, w85169;5170; -O1-LABEL: atomicrmw_min_i32_aligned_release:5171; -O1:    ldxr w8, [x0]5172; -O1:    cmp w8, w15173; -O1:    csel w9, w8, w1, le5174; -O1:    stlxr w10, w9, [x0]5175    %r = atomicrmw min ptr %ptr, i32 %value release, align 45176    ret i32 %r5177}5178 5179define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5180; -O0-LABEL: atomicrmw_min_i32_aligned_acq_rel:5181; -O0:    subs w9, w0, w85182; -O0:    csel w1, w0, w8, le5183; -O0:    bl __aarch64_cas4_acq_rel5184; -O0:    subs w8, w0, w85185;5186; -O1-LABEL: atomicrmw_min_i32_aligned_acq_rel:5187; -O1:    ldaxr w8, [x0]5188; -O1:    cmp w8, w15189; -O1:    csel w9, w8, w1, le5190; -O1:    stlxr w10, w9, [x0]5191    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 45192    ret i32 %r5193}5194 5195define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5196; -O0-LABEL: atomicrmw_min_i32_aligned_seq_cst:5197; -O0:    subs w9, w0, w85198; -O0:    csel w1, w0, w8, le5199; -O0:    bl __aarch64_cas4_acq_rel5200; -O0:    subs w8, w0, w85201;5202; -O1-LABEL: atomicrmw_min_i32_aligned_seq_cst:5203; -O1:    ldaxr w8, [x0]5204; -O1:    cmp w8, w15205; -O1:    csel w9, w8, w1, le5206; -O1:    stlxr w10, w9, [x0]5207    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 45208    ret i32 %r5209}5210 5211define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) {5212; -O0-LABEL: atomicrmw_min_i64_aligned_monotonic:5213; -O0:    subs x9, x0, x85214; -O0:    csel x1, x0, x8, le5215; -O0:    bl __aarch64_cas8_relax5216; -O0:    subs x8, x0, x85217;5218; -O1-LABEL: atomicrmw_min_i64_aligned_monotonic:5219; -O1:    ldxr x0, [x8]5220; -O1:    cmp x0, x15221; -O1:    csel x9, x0, x1, le5222; -O1:    stxr w10, x9, [x8]5223    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 85224    ret i64 %r5225}5226 5227define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) {5228; -O0-LABEL: atomicrmw_min_i64_aligned_acquire:5229; -O0:    subs x9, x0, x85230; -O0:    csel x1, x0, x8, le5231; -O0:    bl __aarch64_cas8_acq5232; -O0:    subs x8, x0, x85233;5234; -O1-LABEL: atomicrmw_min_i64_aligned_acquire:5235; -O1:    ldaxr x0, [x8]5236; -O1:    cmp x0, x15237; -O1:    csel x9, x0, x1, le5238; -O1:    stxr w10, x9, [x8]5239    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 85240    ret i64 %r5241}5242 5243define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) {5244; -O0-LABEL: atomicrmw_min_i64_aligned_release:5245; -O0:    subs x9, x0, x85246; -O0:    csel x1, x0, x8, le5247; -O0:    bl __aarch64_cas8_rel5248; -O0:    subs x8, x0, x85249;5250; -O1-LABEL: atomicrmw_min_i64_aligned_release:5251; -O1:    ldxr x0, [x8]5252; -O1:    cmp x0, x15253; -O1:    csel x9, x0, x1, le5254; -O1:    stlxr w10, x9, [x8]5255    %r = atomicrmw min ptr %ptr, i64 %value release, align 85256    ret i64 %r5257}5258 5259define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5260; -O0-LABEL: atomicrmw_min_i64_aligned_acq_rel:5261; -O0:    subs x9, x0, x85262; -O0:    csel x1, x0, x8, le5263; -O0:    bl __aarch64_cas8_acq_rel5264; -O0:    subs x8, x0, x85265;5266; -O1-LABEL: atomicrmw_min_i64_aligned_acq_rel:5267; -O1:    ldaxr x0, [x8]5268; -O1:    cmp x0, x15269; -O1:    csel x9, x0, x1, le5270; -O1:    stlxr w10, x9, [x8]5271    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 85272    ret i64 %r5273}5274 5275define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5276; -O0-LABEL: atomicrmw_min_i64_aligned_seq_cst:5277; -O0:    subs x9, x0, x85278; -O0:    csel x1, x0, x8, le5279; -O0:    bl __aarch64_cas8_acq_rel5280; -O0:    subs x8, x0, x85281;5282; -O1-LABEL: atomicrmw_min_i64_aligned_seq_cst:5283; -O1:    ldaxr x0, [x8]5284; -O1:    cmp x0, x15285; -O1:    csel x9, x0, x1, le5286; -O1:    stlxr w10, x9, [x8]5287    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 85288    ret i64 %r5289}5290 5291define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) {5292; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic:5293; -O0:    subs x8, x8, x115294; -O0:    subs x10, x10, x95295; -O0:    subs x12, x12, x95296; -O0:    csel w10, w8, w10, eq5297; -O0:    ands w12, w10, #0x15298; -O0:    csel x2, x8, x11, ne5299; -O0:    ands w10, w10, #0x15300; -O0:    csel x3, x8, x9, ne5301; -O0:    bl __aarch64_cas16_relax5302; -O0:    eor x8, x0, x85303; -O0:    eor x9, x1, x95304; -O0:    orr x8, x8, x95305; -O0:    subs x8, x8, #05306;5307; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic:5308; -O1:    ldxp x0, x1, [x8]5309; -O1:    cmp x2, x05310; -O1:    csel x9, x1, x3, ge5311; -O1:    csel x10, x0, x2, ge5312; -O1:    stxp w11, x10, x9, [x8]5313    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 165314    ret i128 %r5315}5316 5317define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) {5318; -O0-LABEL: atomicrmw_min_i128_aligned_acquire:5319; -O0:    subs x8, x8, x115320; -O0:    subs x10, x10, x95321; -O0:    subs x12, x12, x95322; -O0:    csel w10, w8, w10, eq5323; -O0:    ands w12, w10, #0x15324; -O0:    csel x2, x8, x11, ne5325; -O0:    ands w10, w10, #0x15326; -O0:    csel x3, x8, x9, ne5327; -O0:    bl __aarch64_cas16_acq5328; -O0:    eor x8, x0, x85329; -O0:    eor x9, x1, x95330; -O0:    orr x8, x8, x95331; -O0:    subs x8, x8, #05332;5333; -O1-LABEL: atomicrmw_min_i128_aligned_acquire:5334; -O1:    ldaxp x0, x1, [x8]5335; -O1:    cmp x2, x05336; -O1:    csel x9, x1, x3, ge5337; -O1:    csel x10, x0, x2, ge5338; -O1:    stxp w11, x10, x9, [x8]5339    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 165340    ret i128 %r5341}5342 5343define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) {5344; -O0-LABEL: atomicrmw_min_i128_aligned_release:5345; -O0:    subs x8, x8, x115346; -O0:    subs x10, x10, x95347; -O0:    subs x12, x12, x95348; -O0:    csel w10, w8, w10, eq5349; -O0:    ands w12, w10, #0x15350; -O0:    csel x2, x8, x11, ne5351; -O0:    ands w10, w10, #0x15352; -O0:    csel x3, x8, x9, ne5353; -O0:    bl __aarch64_cas16_rel5354; -O0:    eor x8, x0, x85355; -O0:    eor x9, x1, x95356; -O0:    orr x8, x8, x95357; -O0:    subs x8, x8, #05358;5359; -O1-LABEL: atomicrmw_min_i128_aligned_release:5360; -O1:    ldxp x0, x1, [x8]5361; -O1:    cmp x2, x05362; -O1:    csel x9, x1, x3, ge5363; -O1:    csel x10, x0, x2, ge5364; -O1:    stlxp w11, x10, x9, [x8]5365    %r = atomicrmw min ptr %ptr, i128 %value release, align 165366    ret i128 %r5367}5368 5369define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5370; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel:5371; -O0:    subs x8, x8, x115372; -O0:    subs x10, x10, x95373; -O0:    subs x12, x12, x95374; -O0:    csel w10, w8, w10, eq5375; -O0:    ands w12, w10, #0x15376; -O0:    csel x2, x8, x11, ne5377; -O0:    ands w10, w10, #0x15378; -O0:    csel x3, x8, x9, ne5379; -O0:    bl __aarch64_cas16_acq_rel5380; -O0:    eor x8, x0, x85381; -O0:    eor x9, x1, x95382; -O0:    orr x8, x8, x95383; -O0:    subs x8, x8, #05384;5385; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel:5386; -O1:    ldaxp x0, x1, [x8]5387; -O1:    cmp x2, x05388; -O1:    csel x9, x1, x3, ge5389; -O1:    csel x10, x0, x2, ge5390; -O1:    stlxp w11, x10, x9, [x8]5391    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 165392    ret i128 %r5393}5394 5395define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5396; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst:5397; -O0:    subs x8, x8, x115398; -O0:    subs x10, x10, x95399; -O0:    subs x12, x12, x95400; -O0:    csel w10, w8, w10, eq5401; -O0:    ands w12, w10, #0x15402; -O0:    csel x2, x8, x11, ne5403; -O0:    ands w10, w10, #0x15404; -O0:    csel x3, x8, x9, ne5405; -O0:    bl __aarch64_cas16_acq_rel5406; -O0:    eor x8, x0, x85407; -O0:    eor x9, x1, x95408; -O0:    orr x8, x8, x95409; -O0:    subs x8, x8, #05410;5411; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst:5412; -O1:    ldaxp x0, x1, [x8]5413; -O1:    cmp x2, x05414; -O1:    csel x9, x1, x3, ge5415; -O1:    csel x10, x0, x2, ge5416; -O1:    stlxp w11, x10, x9, [x8]5417    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 165418    ret i128 %r5419}5420 5421define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5422; -O0-LABEL: atomicrmw_min_i8_unaligned_monotonic:5423; -O0:    sxtb w9, w05424; -O0:    subs w9, w9, w8, sxtb5425; -O0:    csel w1, w0, w8, le5426; -O0:    bl __aarch64_cas1_relax5427; -O0:    and w8, w0, #0xff5428; -O0:    subs w8, w8, w9, uxtb5429;5430; -O1-LABEL: atomicrmw_min_i8_unaligned_monotonic:5431; -O1:    ldxrb w9, [x0]5432; -O1:    sxtb w8, w95433; -O1:    cmp w8, w1, sxtb5434; -O1:    csel w9, w9, w1, le5435; -O1:    stxrb w10, w9, [x0]5436    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 15437    ret i8 %r5438}5439 5440define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) {5441; -O0-LABEL: atomicrmw_min_i8_unaligned_acquire:5442; -O0:    sxtb w9, w05443; -O0:    subs w9, w9, w8, sxtb5444; -O0:    csel w1, w0, w8, le5445; -O0:    bl __aarch64_cas1_acq5446; -O0:    and w8, w0, #0xff5447; -O0:    subs w8, w8, w9, uxtb5448;5449; -O1-LABEL: atomicrmw_min_i8_unaligned_acquire:5450; -O1:    ldaxrb w9, [x0]5451; -O1:    sxtb w8, w95452; -O1:    cmp w8, w1, sxtb5453; -O1:    csel w9, w9, w1, le5454; -O1:    stxrb w10, w9, [x0]5455    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 15456    ret i8 %r5457}5458 5459define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) {5460; -O0-LABEL: atomicrmw_min_i8_unaligned_release:5461; -O0:    sxtb w9, w05462; -O0:    subs w9, w9, w8, sxtb5463; -O0:    csel w1, w0, w8, le5464; -O0:    bl __aarch64_cas1_rel5465; -O0:    and w8, w0, #0xff5466; -O0:    subs w8, w8, w9, uxtb5467;5468; -O1-LABEL: atomicrmw_min_i8_unaligned_release:5469; -O1:    ldxrb w9, [x0]5470; -O1:    sxtb w8, w95471; -O1:    cmp w8, w1, sxtb5472; -O1:    csel w9, w9, w1, le5473; -O1:    stlxrb w10, w9, [x0]5474    %r = atomicrmw min ptr %ptr, i8 %value release, align 15475    ret i8 %r5476}5477 5478define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5479; -O0-LABEL: atomicrmw_min_i8_unaligned_acq_rel:5480; -O0:    sxtb w9, w05481; -O0:    subs w9, w9, w8, sxtb5482; -O0:    csel w1, w0, w8, le5483; -O0:    bl __aarch64_cas1_acq_rel5484; -O0:    and w8, w0, #0xff5485; -O0:    subs w8, w8, w9, uxtb5486;5487; -O1-LABEL: atomicrmw_min_i8_unaligned_acq_rel:5488; -O1:    ldaxrb w9, [x0]5489; -O1:    sxtb w8, w95490; -O1:    cmp w8, w1, sxtb5491; -O1:    csel w9, w9, w1, le5492; -O1:    stlxrb w10, w9, [x0]5493    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 15494    ret i8 %r5495}5496 5497define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5498; -O0-LABEL: atomicrmw_min_i8_unaligned_seq_cst:5499; -O0:    sxtb w9, w05500; -O0:    subs w9, w9, w8, sxtb5501; -O0:    csel w1, w0, w8, le5502; -O0:    bl __aarch64_cas1_acq_rel5503; -O0:    and w8, w0, #0xff5504; -O0:    subs w8, w8, w9, uxtb5505;5506; -O1-LABEL: atomicrmw_min_i8_unaligned_seq_cst:5507; -O1:    ldaxrb w9, [x0]5508; -O1:    sxtb w8, w95509; -O1:    cmp w8, w1, sxtb5510; -O1:    csel w9, w9, w1, le5511; -O1:    stlxrb w10, w9, [x0]5512    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 15513    ret i8 %r5514}5515 5516define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5517; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic:5518; -O0:    sxth w10, w95519; -O0:    subs w10, w10, w8, sxth5520; -O0:    csel w8, w9, w8, le5521; -O0:    bl __atomic_compare_exchange5522;5523; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic:5524; -O1:    sxth w8, w05525; -O1:    cmp w8, w20, sxth5526; -O1:    csel w8, w0, w20, le5527; -O1:    bl __atomic_compare_exchange5528    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 15529    ret i16 %r5530}5531 5532define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) {5533; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire:5534; -O0:    sxth w10, w95535; -O0:    subs w10, w10, w8, sxth5536; -O0:    csel w8, w9, w8, le5537; -O0:    bl __atomic_compare_exchange5538;5539; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire:5540; -O1:    sxth w8, w05541; -O1:    cmp w8, w20, sxth5542; -O1:    csel w8, w0, w20, le5543; -O1:    bl __atomic_compare_exchange5544    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 15545    ret i16 %r5546}5547 5548define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) {5549; -O0-LABEL: atomicrmw_min_i16_unaligned_release:5550; -O0:    sxth w10, w95551; -O0:    subs w10, w10, w8, sxth5552; -O0:    csel w8, w9, w8, le5553; -O0:    bl __atomic_compare_exchange5554;5555; -O1-LABEL: atomicrmw_min_i16_unaligned_release:5556; -O1:    sxth w8, w05557; -O1:    cmp w8, w20, sxth5558; -O1:    csel w8, w0, w20, le5559; -O1:    bl __atomic_compare_exchange5560    %r = atomicrmw min ptr %ptr, i16 %value release, align 15561    ret i16 %r5562}5563 5564define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5565; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel:5566; -O0:    sxth w10, w95567; -O0:    subs w10, w10, w8, sxth5568; -O0:    csel w8, w9, w8, le5569; -O0:    bl __atomic_compare_exchange5570;5571; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel:5572; -O1:    sxth w8, w05573; -O1:    cmp w8, w20, sxth5574; -O1:    csel w8, w0, w20, le5575; -O1:    bl __atomic_compare_exchange5576    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 15577    ret i16 %r5578}5579 5580define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5581; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst:5582; -O0:    sxth w10, w95583; -O0:    subs w10, w10, w8, sxth5584; -O0:    csel w8, w9, w8, le5585; -O0:    bl __atomic_compare_exchange5586;5587; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst:5588; -O1:    sxth w8, w05589; -O1:    cmp w8, w20, sxth5590; -O1:    csel w8, w0, w20, le5591; -O1:    bl __atomic_compare_exchange5592    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 15593    ret i16 %r5594}5595 5596define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5597; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic:5598; -O0:    subs w10, w9, w85599; -O0:    csel w8, w9, w8, le5600; -O0:    bl __atomic_compare_exchange5601;5602; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic:5603; -O1:    cmp w0, w205604; -O1:    csel w8, w0, w20, le5605; -O1:    bl __atomic_compare_exchange5606    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 15607    ret i32 %r5608}5609 5610define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) {5611; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire:5612; -O0:    subs w10, w9, w85613; -O0:    csel w8, w9, w8, le5614; -O0:    bl __atomic_compare_exchange5615;5616; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire:5617; -O1:    cmp w0, w205618; -O1:    csel w8, w0, w20, le5619; -O1:    bl __atomic_compare_exchange5620    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 15621    ret i32 %r5622}5623 5624define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) {5625; -O0-LABEL: atomicrmw_min_i32_unaligned_release:5626; -O0:    subs w10, w9, w85627; -O0:    csel w8, w9, w8, le5628; -O0:    bl __atomic_compare_exchange5629;5630; -O1-LABEL: atomicrmw_min_i32_unaligned_release:5631; -O1:    cmp w0, w205632; -O1:    csel w8, w0, w20, le5633; -O1:    bl __atomic_compare_exchange5634    %r = atomicrmw min ptr %ptr, i32 %value release, align 15635    ret i32 %r5636}5637 5638define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5639; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel:5640; -O0:    subs w10, w9, w85641; -O0:    csel w8, w9, w8, le5642; -O0:    bl __atomic_compare_exchange5643;5644; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel:5645; -O1:    cmp w0, w205646; -O1:    csel w8, w0, w20, le5647; -O1:    bl __atomic_compare_exchange5648    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 15649    ret i32 %r5650}5651 5652define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5653; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst:5654; -O0:    subs w10, w9, w85655; -O0:    csel w8, w9, w8, le5656; -O0:    bl __atomic_compare_exchange5657;5658; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst:5659; -O1:    cmp w0, w205660; -O1:    csel w8, w0, w20, le5661; -O1:    bl __atomic_compare_exchange5662    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 15663    ret i32 %r5664}5665 5666define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5667; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic:5668; -O0:    subs x10, x9, x85669; -O0:    csel x8, x9, x8, le5670; -O0:    bl __atomic_compare_exchange5671;5672; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic:5673; -O1:    cmp x0, x205674; -O1:    csel x8, x0, x20, le5675; -O1:    bl __atomic_compare_exchange5676    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 15677    ret i64 %r5678}5679 5680define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) {5681; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire:5682; -O0:    subs x10, x9, x85683; -O0:    csel x8, x9, x8, le5684; -O0:    bl __atomic_compare_exchange5685;5686; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire:5687; -O1:    cmp x0, x205688; -O1:    csel x8, x0, x20, le5689; -O1:    bl __atomic_compare_exchange5690    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 15691    ret i64 %r5692}5693 5694define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) {5695; -O0-LABEL: atomicrmw_min_i64_unaligned_release:5696; -O0:    subs x10, x9, x85697; -O0:    csel x8, x9, x8, le5698; -O0:    bl __atomic_compare_exchange5699;5700; -O1-LABEL: atomicrmw_min_i64_unaligned_release:5701; -O1:    cmp x0, x205702; -O1:    csel x8, x0, x20, le5703; -O1:    bl __atomic_compare_exchange5704    %r = atomicrmw min ptr %ptr, i64 %value release, align 15705    ret i64 %r5706}5707 5708define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {5709; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel:5710; -O0:    subs x10, x9, x85711; -O0:    csel x8, x9, x8, le5712; -O0:    bl __atomic_compare_exchange5713;5714; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel:5715; -O1:    cmp x0, x205716; -O1:    csel x8, x0, x20, le5717; -O1:    bl __atomic_compare_exchange5718    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 15719    ret i64 %r5720}5721 5722define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {5723; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst:5724; -O0:    subs x10, x9, x85725; -O0:    csel x8, x9, x8, le5726; -O0:    bl __atomic_compare_exchange5727;5728; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst:5729; -O1:    cmp x0, x205730; -O1:    csel x8, x0, x20, le5731; -O1:    bl __atomic_compare_exchange5732    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 15733    ret i64 %r5734}5735 5736define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5737; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic:5738; -O0:    subs x8, x8, x95739; -O0:    subs x11, x11, x105740; -O0:    subs x12, x12, x105741; -O0:    csel w11, w8, w11, eq5742; -O0:    ands w12, w11, #0x15743; -O0:    csel x9, x8, x9, ne5744; -O0:    ands w11, w11, #0x15745; -O0:    csel x8, x8, x10, ne5746; -O0:    bl __atomic_compare_exchange5747;5748; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic:5749; -O1:    ldp x0, x1, [x0]5750; -O1:    cmp x21, x05751; -O1:    csel x8, x1, x19, ge5752; -O1:    csel x9, x0, x21, ge5753; -O1:    bl __atomic_compare_exchange5754    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 15755    ret i128 %r5756}5757 5758define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) {5759; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire:5760; -O0:    subs x8, x8, x95761; -O0:    subs x11, x11, x105762; -O0:    subs x12, x12, x105763; -O0:    csel w11, w8, w11, eq5764; -O0:    ands w12, w11, #0x15765; -O0:    csel x9, x8, x9, ne5766; -O0:    ands w11, w11, #0x15767; -O0:    csel x8, x8, x10, ne5768; -O0:    bl __atomic_compare_exchange5769;5770; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire:5771; -O1:    ldp x0, x1, [x0]5772; -O1:    cmp x21, x05773; -O1:    csel x8, x1, x19, ge5774; -O1:    csel x9, x0, x21, ge5775; -O1:    bl __atomic_compare_exchange5776    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 15777    ret i128 %r5778}5779 5780define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) {5781; -O0-LABEL: atomicrmw_min_i128_unaligned_release:5782; -O0:    subs x8, x8, x95783; -O0:    subs x11, x11, x105784; -O0:    subs x12, x12, x105785; -O0:    csel w11, w8, w11, eq5786; -O0:    ands w12, w11, #0x15787; -O0:    csel x9, x8, x9, ne5788; -O0:    ands w11, w11, #0x15789; -O0:    csel x8, x8, x10, ne5790; -O0:    bl __atomic_compare_exchange5791;5792; -O1-LABEL: atomicrmw_min_i128_unaligned_release:5793; -O1:    ldp x0, x1, [x0]5794; -O1:    cmp x21, x05795; -O1:    csel x8, x1, x19, ge5796; -O1:    csel x9, x0, x21, ge5797; -O1:    bl __atomic_compare_exchange5798    %r = atomicrmw min ptr %ptr, i128 %value release, align 15799    ret i128 %r5800}5801 5802define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5803; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5804; -O0:    subs x8, x8, x95805; -O0:    subs x11, x11, x105806; -O0:    subs x12, x12, x105807; -O0:    csel w11, w8, w11, eq5808; -O0:    ands w12, w11, #0x15809; -O0:    csel x9, x8, x9, ne5810; -O0:    ands w11, w11, #0x15811; -O0:    csel x8, x8, x10, ne5812; -O0:    bl __atomic_compare_exchange5813;5814; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5815; -O1:    ldp x0, x1, [x0]5816; -O1:    cmp x21, x05817; -O1:    csel x8, x1, x19, ge5818; -O1:    csel x9, x0, x21, ge5819; -O1:    bl __atomic_compare_exchange5820    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 15821    ret i128 %r5822}5823 5824define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5825; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5826; -O0:    subs x8, x8, x95827; -O0:    subs x11, x11, x105828; -O0:    subs x12, x12, x105829; -O0:    csel w11, w8, w11, eq5830; -O0:    ands w12, w11, #0x15831; -O0:    csel x9, x8, x9, ne5832; -O0:    ands w11, w11, #0x15833; -O0:    csel x8, x8, x10, ne5834; -O0:    bl __atomic_compare_exchange5835;5836; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5837; -O1:    ldp x0, x1, [x0]5838; -O1:    cmp x21, x05839; -O1:    csel x8, x1, x19, ge5840; -O1:    csel x9, x0, x21, ge5841; -O1:    bl __atomic_compare_exchange5842    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 15843    ret i128 %r5844}5845 5846define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) {5847; -O0-LABEL: atomicrmw_umax_i8_aligned_monotonic:5848; -O0:    and w9, w0, #0xff5849; -O0:    subs w9, w9, w8, uxtb5850; -O0:    csel w1, w0, w8, hi5851; -O0:    bl __aarch64_cas1_relax5852; -O0:    and w8, w0, #0xff5853; -O0:    subs w8, w8, w9, uxtb5854;5855; -O1-LABEL: atomicrmw_umax_i8_aligned_monotonic:5856; -O1:    and w9, w1, #0xff5857; -O1:    ldxrb w8, [x0]5858; -O1:    cmp w8, w95859; -O1:    csel w10, w8, w9, hi5860; -O1:    stxrb w11, w10, [x0]5861    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15862    ret i8 %r5863}5864 5865define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) {5866; -O0-LABEL: atomicrmw_umax_i8_aligned_acquire:5867; -O0:    and w9, w0, #0xff5868; -O0:    subs w9, w9, w8, uxtb5869; -O0:    csel w1, w0, w8, hi5870; -O0:    bl __aarch64_cas1_acq5871; -O0:    and w8, w0, #0xff5872; -O0:    subs w8, w8, w9, uxtb5873;5874; -O1-LABEL: atomicrmw_umax_i8_aligned_acquire:5875; -O1:    and w9, w1, #0xff5876; -O1:    ldaxrb w8, [x0]5877; -O1:    cmp w8, w95878; -O1:    csel w10, w8, w9, hi5879; -O1:    stxrb w11, w10, [x0]5880    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15881    ret i8 %r5882}5883 5884define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) {5885; -O0-LABEL: atomicrmw_umax_i8_aligned_release:5886; -O0:    and w9, w0, #0xff5887; -O0:    subs w9, w9, w8, uxtb5888; -O0:    csel w1, w0, w8, hi5889; -O0:    bl __aarch64_cas1_rel5890; -O0:    and w8, w0, #0xff5891; -O0:    subs w8, w8, w9, uxtb5892;5893; -O1-LABEL: atomicrmw_umax_i8_aligned_release:5894; -O1:    and w9, w1, #0xff5895; -O1:    ldxrb w8, [x0]5896; -O1:    cmp w8, w95897; -O1:    csel w10, w8, w9, hi5898; -O1:    stlxrb w11, w10, [x0]5899    %r = atomicrmw umax ptr %ptr, i8 %value release, align 15900    ret i8 %r5901}5902 5903define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5904; -O0-LABEL: atomicrmw_umax_i8_aligned_acq_rel:5905; -O0:    and w9, w0, #0xff5906; -O0:    subs w9, w9, w8, uxtb5907; -O0:    csel w1, w0, w8, hi5908; -O0:    bl __aarch64_cas1_acq_rel5909; -O0:    and w8, w0, #0xff5910; -O0:    subs w8, w8, w9, uxtb5911;5912; -O1-LABEL: atomicrmw_umax_i8_aligned_acq_rel:5913; -O1:    and w9, w1, #0xff5914; -O1:    ldaxrb w8, [x0]5915; -O1:    cmp w8, w95916; -O1:    csel w10, w8, w9, hi5917; -O1:    stlxrb w11, w10, [x0]5918    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15919    ret i8 %r5920}5921 5922define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5923; -O0-LABEL: atomicrmw_umax_i8_aligned_seq_cst:5924; -O0:    and w9, w0, #0xff5925; -O0:    subs w9, w9, w8, uxtb5926; -O0:    csel w1, w0, w8, hi5927; -O0:    bl __aarch64_cas1_acq_rel5928; -O0:    and w8, w0, #0xff5929; -O0:    subs w8, w8, w9, uxtb5930;5931; -O1-LABEL: atomicrmw_umax_i8_aligned_seq_cst:5932; -O1:    and w9, w1, #0xff5933; -O1:    ldaxrb w8, [x0]5934; -O1:    cmp w8, w95935; -O1:    csel w10, w8, w9, hi5936; -O1:    stlxrb w11, w10, [x0]5937    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15938    ret i8 %r5939}5940 5941define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) {5942; -O0-LABEL: atomicrmw_umax_i16_aligned_monotonic:5943; -O0:    subs w9, w9, w8, uxth5944; -O0:    csel w1, w0, w8, hi5945; -O0:    bl __aarch64_cas2_relax5946; -O0:    subs w8, w8, w0, uxth5947;5948; -O1-LABEL: atomicrmw_umax_i16_aligned_monotonic:5949; -O1:    and w9, w1, #0xffff5950; -O1:    ldxrh w8, [x0]5951; -O1:    cmp w8, w95952; -O1:    csel w10, w8, w9, hi5953; -O1:    stxrh w11, w10, [x0]5954    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 25955    ret i16 %r5956}5957 5958define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) {5959; -O0-LABEL: atomicrmw_umax_i16_aligned_acquire:5960; -O0:    subs w9, w9, w8, uxth5961; -O0:    csel w1, w0, w8, hi5962; -O0:    bl __aarch64_cas2_acq5963; -O0:    subs w8, w8, w0, uxth5964;5965; -O1-LABEL: atomicrmw_umax_i16_aligned_acquire:5966; -O1:    and w9, w1, #0xffff5967; -O1:    ldaxrh w8, [x0]5968; -O1:    cmp w8, w95969; -O1:    csel w10, w8, w9, hi5970; -O1:    stxrh w11, w10, [x0]5971    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 25972    ret i16 %r5973}5974 5975define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) {5976; -O0-LABEL: atomicrmw_umax_i16_aligned_release:5977; -O0:    subs w9, w9, w8, uxth5978; -O0:    csel w1, w0, w8, hi5979; -O0:    bl __aarch64_cas2_rel5980; -O0:    subs w8, w8, w0, uxth5981;5982; -O1-LABEL: atomicrmw_umax_i16_aligned_release:5983; -O1:    and w9, w1, #0xffff5984; -O1:    ldxrh w8, [x0]5985; -O1:    cmp w8, w95986; -O1:    csel w10, w8, w9, hi5987; -O1:    stlxrh w11, w10, [x0]5988    %r = atomicrmw umax ptr %ptr, i16 %value release, align 25989    ret i16 %r5990}5991 5992define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5993; -O0-LABEL: atomicrmw_umax_i16_aligned_acq_rel:5994; -O0:    subs w9, w9, w8, uxth5995; -O0:    csel w1, w0, w8, hi5996; -O0:    bl __aarch64_cas2_acq_rel5997; -O0:    subs w8, w8, w0, uxth5998;5999; -O1-LABEL: atomicrmw_umax_i16_aligned_acq_rel:6000; -O1:    and w9, w1, #0xffff6001; -O1:    ldaxrh w8, [x0]6002; -O1:    cmp w8, w96003; -O1:    csel w10, w8, w9, hi6004; -O1:    stlxrh w11, w10, [x0]6005    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 26006    ret i16 %r6007}6008 6009define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) {6010; -O0-LABEL: atomicrmw_umax_i16_aligned_seq_cst:6011; -O0:    subs w9, w9, w8, uxth6012; -O0:    csel w1, w0, w8, hi6013; -O0:    bl __aarch64_cas2_acq_rel6014; -O0:    subs w8, w8, w0, uxth6015;6016; -O1-LABEL: atomicrmw_umax_i16_aligned_seq_cst:6017; -O1:    and w9, w1, #0xffff6018; -O1:    ldaxrh w8, [x0]6019; -O1:    cmp w8, w96020; -O1:    csel w10, w8, w9, hi6021; -O1:    stlxrh w11, w10, [x0]6022    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 26023    ret i16 %r6024}6025 6026define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) {6027; -O0-LABEL: atomicrmw_umax_i32_aligned_monotonic:6028; -O0:    subs w9, w0, w86029; -O0:    csel w1, w0, w8, hi6030; -O0:    bl __aarch64_cas4_relax6031; -O0:    subs w8, w0, w86032;6033; -O1-LABEL: atomicrmw_umax_i32_aligned_monotonic:6034; -O1:    ldxr w8, [x0]6035; -O1:    cmp w8, w16036; -O1:    csel w9, w8, w1, hi6037; -O1:    stxr w10, w9, [x0]6038    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 46039    ret i32 %r6040}6041 6042define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) {6043; -O0-LABEL: atomicrmw_umax_i32_aligned_acquire:6044; -O0:    subs w9, w0, w86045; -O0:    csel w1, w0, w8, hi6046; -O0:    bl __aarch64_cas4_acq6047; -O0:    subs w8, w0, w86048;6049; -O1-LABEL: atomicrmw_umax_i32_aligned_acquire:6050; -O1:    ldaxr w8, [x0]6051; -O1:    cmp w8, w16052; -O1:    csel w9, w8, w1, hi6053; -O1:    stxr w10, w9, [x0]6054    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 46055    ret i32 %r6056}6057 6058define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) {6059; -O0-LABEL: atomicrmw_umax_i32_aligned_release:6060; -O0:    subs w9, w0, w86061; -O0:    csel w1, w0, w8, hi6062; -O0:    bl __aarch64_cas4_rel6063; -O0:    subs w8, w0, w86064;6065; -O1-LABEL: atomicrmw_umax_i32_aligned_release:6066; -O1:    ldxr w8, [x0]6067; -O1:    cmp w8, w16068; -O1:    csel w9, w8, w1, hi6069; -O1:    stlxr w10, w9, [x0]6070    %r = atomicrmw umax ptr %ptr, i32 %value release, align 46071    ret i32 %r6072}6073 6074define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) {6075; -O0-LABEL: atomicrmw_umax_i32_aligned_acq_rel:6076; -O0:    subs w9, w0, w86077; -O0:    csel w1, w0, w8, hi6078; -O0:    bl __aarch64_cas4_acq_rel6079; -O0:    subs w8, w0, w86080;6081; -O1-LABEL: atomicrmw_umax_i32_aligned_acq_rel:6082; -O1:    ldaxr w8, [x0]6083; -O1:    cmp w8, w16084; -O1:    csel w9, w8, w1, hi6085; -O1:    stlxr w10, w9, [x0]6086    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 46087    ret i32 %r6088}6089 6090define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) {6091; -O0-LABEL: atomicrmw_umax_i32_aligned_seq_cst:6092; -O0:    subs w9, w0, w86093; -O0:    csel w1, w0, w8, hi6094; -O0:    bl __aarch64_cas4_acq_rel6095; -O0:    subs w8, w0, w86096;6097; -O1-LABEL: atomicrmw_umax_i32_aligned_seq_cst:6098; -O1:    ldaxr w8, [x0]6099; -O1:    cmp w8, w16100; -O1:    csel w9, w8, w1, hi6101; -O1:    stlxr w10, w9, [x0]6102    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 46103    ret i32 %r6104}6105 6106define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) {6107; -O0-LABEL: atomicrmw_umax_i64_aligned_monotonic:6108; -O0:    subs x9, x0, x86109; -O0:    csel x1, x0, x8, hi6110; -O0:    bl __aarch64_cas8_relax6111; -O0:    subs x8, x0, x86112;6113; -O1-LABEL: atomicrmw_umax_i64_aligned_monotonic:6114; -O1:    ldxr x0, [x8]6115; -O1:    cmp x0, x16116; -O1:    csel x9, x0, x1, hi6117; -O1:    stxr w10, x9, [x8]6118    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 86119    ret i64 %r6120}6121 6122define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) {6123; -O0-LABEL: atomicrmw_umax_i64_aligned_acquire:6124; -O0:    subs x9, x0, x86125; -O0:    csel x1, x0, x8, hi6126; -O0:    bl __aarch64_cas8_acq6127; -O0:    subs x8, x0, x86128;6129; -O1-LABEL: atomicrmw_umax_i64_aligned_acquire:6130; -O1:    ldaxr x0, [x8]6131; -O1:    cmp x0, x16132; -O1:    csel x9, x0, x1, hi6133; -O1:    stxr w10, x9, [x8]6134    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 86135    ret i64 %r6136}6137 6138define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) {6139; -O0-LABEL: atomicrmw_umax_i64_aligned_release:6140; -O0:    subs x9, x0, x86141; -O0:    csel x1, x0, x8, hi6142; -O0:    bl __aarch64_cas8_rel6143; -O0:    subs x8, x0, x86144;6145; -O1-LABEL: atomicrmw_umax_i64_aligned_release:6146; -O1:    ldxr x0, [x8]6147; -O1:    cmp x0, x16148; -O1:    csel x9, x0, x1, hi6149; -O1:    stlxr w10, x9, [x8]6150    %r = atomicrmw umax ptr %ptr, i64 %value release, align 86151    ret i64 %r6152}6153 6154define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) {6155; -O0-LABEL: atomicrmw_umax_i64_aligned_acq_rel:6156; -O0:    subs x9, x0, x86157; -O0:    csel x1, x0, x8, hi6158; -O0:    bl __aarch64_cas8_acq_rel6159; -O0:    subs x8, x0, x86160;6161; -O1-LABEL: atomicrmw_umax_i64_aligned_acq_rel:6162; -O1:    ldaxr x0, [x8]6163; -O1:    cmp x0, x16164; -O1:    csel x9, x0, x1, hi6165; -O1:    stlxr w10, x9, [x8]6166    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 86167    ret i64 %r6168}6169 6170define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) {6171; -O0-LABEL: atomicrmw_umax_i64_aligned_seq_cst:6172; -O0:    subs x9, x0, x86173; -O0:    csel x1, x0, x8, hi6174; -O0:    bl __aarch64_cas8_acq_rel6175; -O0:    subs x8, x0, x86176;6177; -O1-LABEL: atomicrmw_umax_i64_aligned_seq_cst:6178; -O1:    ldaxr x0, [x8]6179; -O1:    cmp x0, x16180; -O1:    csel x9, x0, x1, hi6181; -O1:    stlxr w10, x9, [x8]6182    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 86183    ret i64 %r6184}6185 6186define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) {6187; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic:6188; -O0:    subs x8, x8, x116189; -O0:    subs x10, x10, x96190; -O0:    subs x12, x12, x96191; -O0:    csel w10, w8, w10, eq6192; -O0:    ands w12, w10, #0x16193; -O0:    csel x2, x8, x11, ne6194; -O0:    ands w10, w10, #0x16195; -O0:    csel x3, x8, x9, ne6196; -O0:    bl __aarch64_cas16_relax6197; -O0:    eor x8, x0, x86198; -O0:    eor x9, x1, x96199; -O0:    orr x8, x8, x96200; -O0:    subs x8, x8, #06201;6202; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic:6203; -O1:    ldxp x0, x1, [x8]6204; -O1:    cmp x2, x06205; -O1:    csel x9, x1, x3, lo6206; -O1:    csel x10, x0, x2, lo6207; -O1:    stxp w11, x10, x9, [x8]6208    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 166209    ret i128 %r6210}6211 6212define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) {6213; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire:6214; -O0:    subs x8, x8, x116215; -O0:    subs x10, x10, x96216; -O0:    subs x12, x12, x96217; -O0:    csel w10, w8, w10, eq6218; -O0:    ands w12, w10, #0x16219; -O0:    csel x2, x8, x11, ne6220; -O0:    ands w10, w10, #0x16221; -O0:    csel x3, x8, x9, ne6222; -O0:    bl __aarch64_cas16_acq6223; -O0:    eor x8, x0, x86224; -O0:    eor x9, x1, x96225; -O0:    orr x8, x8, x96226; -O0:    subs x8, x8, #06227;6228; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire:6229; -O1:    ldaxp x0, x1, [x8]6230; -O1:    cmp x2, x06231; -O1:    csel x9, x1, x3, lo6232; -O1:    csel x10, x0, x2, lo6233; -O1:    stxp w11, x10, x9, [x8]6234    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 166235    ret i128 %r6236}6237 6238define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) {6239; -O0-LABEL: atomicrmw_umax_i128_aligned_release:6240; -O0:    subs x8, x8, x116241; -O0:    subs x10, x10, x96242; -O0:    subs x12, x12, x96243; -O0:    csel w10, w8, w10, eq6244; -O0:    ands w12, w10, #0x16245; -O0:    csel x2, x8, x11, ne6246; -O0:    ands w10, w10, #0x16247; -O0:    csel x3, x8, x9, ne6248; -O0:    bl __aarch64_cas16_rel6249; -O0:    eor x8, x0, x86250; -O0:    eor x9, x1, x96251; -O0:    orr x8, x8, x96252; -O0:    subs x8, x8, #06253;6254; -O1-LABEL: atomicrmw_umax_i128_aligned_release:6255; -O1:    ldxp x0, x1, [x8]6256; -O1:    cmp x2, x06257; -O1:    csel x9, x1, x3, lo6258; -O1:    csel x10, x0, x2, lo6259; -O1:    stlxp w11, x10, x9, [x8]6260    %r = atomicrmw umax ptr %ptr, i128 %value release, align 166261    ret i128 %r6262}6263 6264define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) {6265; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel:6266; -O0:    subs x8, x8, x116267; -O0:    subs x10, x10, x96268; -O0:    subs x12, x12, x96269; -O0:    csel w10, w8, w10, eq6270; -O0:    ands w12, w10, #0x16271; -O0:    csel x2, x8, x11, ne6272; -O0:    ands w10, w10, #0x16273; -O0:    csel x3, x8, x9, ne6274; -O0:    bl __aarch64_cas16_acq_rel6275; -O0:    eor x8, x0, x86276; -O0:    eor x9, x1, x96277; -O0:    orr x8, x8, x96278; -O0:    subs x8, x8, #06279;6280; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel:6281; -O1:    ldaxp x0, x1, [x8]6282; -O1:    cmp x2, x06283; -O1:    csel x9, x1, x3, lo6284; -O1:    csel x10, x0, x2, lo6285; -O1:    stlxp w11, x10, x9, [x8]6286    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 166287    ret i128 %r6288}6289 6290define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) {6291; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst:6292; -O0:    subs x8, x8, x116293; -O0:    subs x10, x10, x96294; -O0:    subs x12, x12, x96295; -O0:    csel w10, w8, w10, eq6296; -O0:    ands w12, w10, #0x16297; -O0:    csel x2, x8, x11, ne6298; -O0:    ands w10, w10, #0x16299; -O0:    csel x3, x8, x9, ne6300; -O0:    bl __aarch64_cas16_acq_rel6301; -O0:    eor x8, x0, x86302; -O0:    eor x9, x1, x96303; -O0:    orr x8, x8, x96304; -O0:    subs x8, x8, #06305;6306; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst:6307; -O1:    ldaxp x0, x1, [x8]6308; -O1:    cmp x2, x06309; -O1:    csel x9, x1, x3, lo6310; -O1:    csel x10, x0, x2, lo6311; -O1:    stlxp w11, x10, x9, [x8]6312    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 166313    ret i128 %r6314}6315 6316define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) {6317; -O0-LABEL: atomicrmw_umax_i8_unaligned_monotonic:6318; -O0:    and w9, w0, #0xff6319; -O0:    subs w9, w9, w8, uxtb6320; -O0:    csel w1, w0, w8, hi6321; -O0:    bl __aarch64_cas1_relax6322; -O0:    and w8, w0, #0xff6323; -O0:    subs w8, w8, w9, uxtb6324;6325; -O1-LABEL: atomicrmw_umax_i8_unaligned_monotonic:6326; -O1:    and w9, w1, #0xff6327; -O1:    ldxrb w8, [x0]6328; -O1:    cmp w8, w96329; -O1:    csel w10, w8, w9, hi6330; -O1:    stxrb w11, w10, [x0]6331    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 16332    ret i8 %r6333}6334 6335define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) {6336; -O0-LABEL: atomicrmw_umax_i8_unaligned_acquire:6337; -O0:    and w9, w0, #0xff6338; -O0:    subs w9, w9, w8, uxtb6339; -O0:    csel w1, w0, w8, hi6340; -O0:    bl __aarch64_cas1_acq6341; -O0:    and w8, w0, #0xff6342; -O0:    subs w8, w8, w9, uxtb6343;6344; -O1-LABEL: atomicrmw_umax_i8_unaligned_acquire:6345; -O1:    and w9, w1, #0xff6346; -O1:    ldaxrb w8, [x0]6347; -O1:    cmp w8, w96348; -O1:    csel w10, w8, w9, hi6349; -O1:    stxrb w11, w10, [x0]6350    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 16351    ret i8 %r6352}6353 6354define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) {6355; -O0-LABEL: atomicrmw_umax_i8_unaligned_release:6356; -O0:    and w9, w0, #0xff6357; -O0:    subs w9, w9, w8, uxtb6358; -O0:    csel w1, w0, w8, hi6359; -O0:    bl __aarch64_cas1_rel6360; -O0:    and w8, w0, #0xff6361; -O0:    subs w8, w8, w9, uxtb6362;6363; -O1-LABEL: atomicrmw_umax_i8_unaligned_release:6364; -O1:    and w9, w1, #0xff6365; -O1:    ldxrb w8, [x0]6366; -O1:    cmp w8, w96367; -O1:    csel w10, w8, w9, hi6368; -O1:    stlxrb w11, w10, [x0]6369    %r = atomicrmw umax ptr %ptr, i8 %value release, align 16370    ret i8 %r6371}6372 6373define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {6374; -O0-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:6375; -O0:    and w9, w0, #0xff6376; -O0:    subs w9, w9, w8, uxtb6377; -O0:    csel w1, w0, w8, hi6378; -O0:    bl __aarch64_cas1_acq_rel6379; -O0:    and w8, w0, #0xff6380; -O0:    subs w8, w8, w9, uxtb6381;6382; -O1-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:6383; -O1:    and w9, w1, #0xff6384; -O1:    ldaxrb w8, [x0]6385; -O1:    cmp w8, w96386; -O1:    csel w10, w8, w9, hi6387; -O1:    stlxrb w11, w10, [x0]6388    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 16389    ret i8 %r6390}6391 6392define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {6393; -O0-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:6394; -O0:    and w9, w0, #0xff6395; -O0:    subs w9, w9, w8, uxtb6396; -O0:    csel w1, w0, w8, hi6397; -O0:    bl __aarch64_cas1_acq_rel6398; -O0:    and w8, w0, #0xff6399; -O0:    subs w8, w8, w9, uxtb6400;6401; -O1-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:6402; -O1:    and w9, w1, #0xff6403; -O1:    ldaxrb w8, [x0]6404; -O1:    cmp w8, w96405; -O1:    csel w10, w8, w9, hi6406; -O1:    stlxrb w11, w10, [x0]6407    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 16408    ret i8 %r6409}6410 6411define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) {6412; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic:6413; -O0:    subs w10, w10, w8, uxth6414; -O0:    csel w8, w9, w8, hi6415; -O0:    bl __atomic_compare_exchange6416;6417; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic:6418; -O1:    and w8, w0, #0xffff6419; -O1:    cmp w8, w20, uxth6420; -O1:    csel w8, w0, w20, hi6421; -O1:    bl __atomic_compare_exchange6422    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 16423    ret i16 %r6424}6425 6426define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) {6427; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire:6428; -O0:    subs w10, w10, w8, uxth6429; -O0:    csel w8, w9, w8, hi6430; -O0:    bl __atomic_compare_exchange6431;6432; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire:6433; -O1:    and w8, w0, #0xffff6434; -O1:    cmp w8, w20, uxth6435; -O1:    csel w8, w0, w20, hi6436; -O1:    bl __atomic_compare_exchange6437    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 16438    ret i16 %r6439}6440 6441define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) {6442; -O0-LABEL: atomicrmw_umax_i16_unaligned_release:6443; -O0:    subs w10, w10, w8, uxth6444; -O0:    csel w8, w9, w8, hi6445; -O0:    bl __atomic_compare_exchange6446;6447; -O1-LABEL: atomicrmw_umax_i16_unaligned_release:6448; -O1:    and w8, w0, #0xffff6449; -O1:    cmp w8, w20, uxth6450; -O1:    csel w8, w0, w20, hi6451; -O1:    bl __atomic_compare_exchange6452    %r = atomicrmw umax ptr %ptr, i16 %value release, align 16453    ret i16 %r6454}6455 6456define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {6457; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:6458; -O0:    subs w10, w10, w8, uxth6459; -O0:    csel w8, w9, w8, hi6460; -O0:    bl __atomic_compare_exchange6461;6462; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:6463; -O1:    and w8, w0, #0xffff6464; -O1:    cmp w8, w20, uxth6465; -O1:    csel w8, w0, w20, hi6466; -O1:    bl __atomic_compare_exchange6467    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 16468    ret i16 %r6469}6470 6471define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {6472; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:6473; -O0:    subs w10, w10, w8, uxth6474; -O0:    csel w8, w9, w8, hi6475; -O0:    bl __atomic_compare_exchange6476;6477; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:6478; -O1:    and w8, w0, #0xffff6479; -O1:    cmp w8, w20, uxth6480; -O1:    csel w8, w0, w20, hi6481; -O1:    bl __atomic_compare_exchange6482    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 16483    ret i16 %r6484}6485 6486define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) {6487; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic:6488; -O0:    subs w10, w9, w86489; -O0:    csel w8, w9, w8, hi6490; -O0:    bl __atomic_compare_exchange6491;6492; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic:6493; -O1:    cmp w0, w206494; -O1:    csel w8, w0, w20, hi6495; -O1:    bl __atomic_compare_exchange6496    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 16497    ret i32 %r6498}6499 6500define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) {6501; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire:6502; -O0:    subs w10, w9, w86503; -O0:    csel w8, w9, w8, hi6504; -O0:    bl __atomic_compare_exchange6505;6506; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire:6507; -O1:    cmp w0, w206508; -O1:    csel w8, w0, w20, hi6509; -O1:    bl __atomic_compare_exchange6510    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 16511    ret i32 %r6512}6513 6514define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) {6515; -O0-LABEL: atomicrmw_umax_i32_unaligned_release:6516; -O0:    subs w10, w9, w86517; -O0:    csel w8, w9, w8, hi6518; -O0:    bl __atomic_compare_exchange6519;6520; -O1-LABEL: atomicrmw_umax_i32_unaligned_release:6521; -O1:    cmp w0, w206522; -O1:    csel w8, w0, w20, hi6523; -O1:    bl __atomic_compare_exchange6524    %r = atomicrmw umax ptr %ptr, i32 %value release, align 16525    ret i32 %r6526}6527 6528define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {6529; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:6530; -O0:    subs w10, w9, w86531; -O0:    csel w8, w9, w8, hi6532; -O0:    bl __atomic_compare_exchange6533;6534; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:6535; -O1:    cmp w0, w206536; -O1:    csel w8, w0, w20, hi6537; -O1:    bl __atomic_compare_exchange6538    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 16539    ret i32 %r6540}6541 6542define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {6543; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:6544; -O0:    subs w10, w9, w86545; -O0:    csel w8, w9, w8, hi6546; -O0:    bl __atomic_compare_exchange6547;6548; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:6549; -O1:    cmp w0, w206550; -O1:    csel w8, w0, w20, hi6551; -O1:    bl __atomic_compare_exchange6552    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 16553    ret i32 %r6554}6555 6556define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) {6557; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic:6558; -O0:    subs x10, x9, x86559; -O0:    csel x8, x9, x8, hi6560; -O0:    bl __atomic_compare_exchange6561;6562; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic:6563; -O1:    cmp x0, x206564; -O1:    csel x8, x0, x20, hi6565; -O1:    bl __atomic_compare_exchange6566    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 16567    ret i64 %r6568}6569 6570define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) {6571; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire:6572; -O0:    subs x10, x9, x86573; -O0:    csel x8, x9, x8, hi6574; -O0:    bl __atomic_compare_exchange6575;6576; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire:6577; -O1:    cmp x0, x206578; -O1:    csel x8, x0, x20, hi6579; -O1:    bl __atomic_compare_exchange6580    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 16581    ret i64 %r6582}6583 6584define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) {6585; -O0-LABEL: atomicrmw_umax_i64_unaligned_release:6586; -O0:    subs x10, x9, x86587; -O0:    csel x8, x9, x8, hi6588; -O0:    bl __atomic_compare_exchange6589;6590; -O1-LABEL: atomicrmw_umax_i64_unaligned_release:6591; -O1:    cmp x0, x206592; -O1:    csel x8, x0, x20, hi6593; -O1:    bl __atomic_compare_exchange6594    %r = atomicrmw umax ptr %ptr, i64 %value release, align 16595    ret i64 %r6596}6597 6598define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {6599; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:6600; -O0:    subs x10, x9, x86601; -O0:    csel x8, x9, x8, hi6602; -O0:    bl __atomic_compare_exchange6603;6604; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:6605; -O1:    cmp x0, x206606; -O1:    csel x8, x0, x20, hi6607; -O1:    bl __atomic_compare_exchange6608    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 16609    ret i64 %r6610}6611 6612define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {6613; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:6614; -O0:    subs x10, x9, x86615; -O0:    csel x8, x9, x8, hi6616; -O0:    bl __atomic_compare_exchange6617;6618; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:6619; -O1:    cmp x0, x206620; -O1:    csel x8, x0, x20, hi6621; -O1:    bl __atomic_compare_exchange6622    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 16623    ret i64 %r6624}6625 6626define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) {6627; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic:6628; -O0:    subs x8, x8, x96629; -O0:    subs x11, x11, x106630; -O0:    subs x12, x12, x106631; -O0:    csel w11, w8, w11, eq6632; -O0:    ands w12, w11, #0x16633; -O0:    csel x9, x8, x9, ne6634; -O0:    ands w11, w11, #0x16635; -O0:    csel x8, x8, x10, ne6636; -O0:    bl __atomic_compare_exchange6637;6638; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic:6639; -O1:    ldp x0, x1, [x0]6640; -O1:    cmp x21, x06641; -O1:    csel x8, x1, x19, lo6642; -O1:    csel x9, x0, x21, lo6643; -O1:    bl __atomic_compare_exchange6644    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 16645    ret i128 %r6646}6647 6648define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) {6649; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire:6650; -O0:    subs x8, x8, x96651; -O0:    subs x11, x11, x106652; -O0:    subs x12, x12, x106653; -O0:    csel w11, w8, w11, eq6654; -O0:    ands w12, w11, #0x16655; -O0:    csel x9, x8, x9, ne6656; -O0:    ands w11, w11, #0x16657; -O0:    csel x8, x8, x10, ne6658; -O0:    bl __atomic_compare_exchange6659;6660; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire:6661; -O1:    ldp x0, x1, [x0]6662; -O1:    cmp x21, x06663; -O1:    csel x8, x1, x19, lo6664; -O1:    csel x9, x0, x21, lo6665; -O1:    bl __atomic_compare_exchange6666    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 16667    ret i128 %r6668}6669 6670define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) {6671; -O0-LABEL: atomicrmw_umax_i128_unaligned_release:6672; -O0:    subs x8, x8, x96673; -O0:    subs x11, x11, x106674; -O0:    subs x12, x12, x106675; -O0:    csel w11, w8, w11, eq6676; -O0:    ands w12, w11, #0x16677; -O0:    csel x9, x8, x9, ne6678; -O0:    ands w11, w11, #0x16679; -O0:    csel x8, x8, x10, ne6680; -O0:    bl __atomic_compare_exchange6681;6682; -O1-LABEL: atomicrmw_umax_i128_unaligned_release:6683; -O1:    ldp x0, x1, [x0]6684; -O1:    cmp x21, x06685; -O1:    csel x8, x1, x19, lo6686; -O1:    csel x9, x0, x21, lo6687; -O1:    bl __atomic_compare_exchange6688    %r = atomicrmw umax ptr %ptr, i128 %value release, align 16689    ret i128 %r6690}6691 6692define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {6693; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:6694; -O0:    subs x8, x8, x96695; -O0:    subs x11, x11, x106696; -O0:    subs x12, x12, x106697; -O0:    csel w11, w8, w11, eq6698; -O0:    ands w12, w11, #0x16699; -O0:    csel x9, x8, x9, ne6700; -O0:    ands w11, w11, #0x16701; -O0:    csel x8, x8, x10, ne6702; -O0:    bl __atomic_compare_exchange6703;6704; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:6705; -O1:    ldp x0, x1, [x0]6706; -O1:    cmp x21, x06707; -O1:    csel x8, x1, x19, lo6708; -O1:    csel x9, x0, x21, lo6709; -O1:    bl __atomic_compare_exchange6710    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 16711    ret i128 %r6712}6713 6714define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {6715; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:6716; -O0:    subs x8, x8, x96717; -O0:    subs x11, x11, x106718; -O0:    subs x12, x12, x106719; -O0:    csel w11, w8, w11, eq6720; -O0:    ands w12, w11, #0x16721; -O0:    csel x9, x8, x9, ne6722; -O0:    ands w11, w11, #0x16723; -O0:    csel x8, x8, x10, ne6724; -O0:    bl __atomic_compare_exchange6725;6726; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:6727; -O1:    ldp x0, x1, [x0]6728; -O1:    cmp x21, x06729; -O1:    csel x8, x1, x19, lo6730; -O1:    csel x9, x0, x21, lo6731; -O1:    bl __atomic_compare_exchange6732    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 16733    ret i128 %r6734}6735 6736define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) {6737; -O0-LABEL: atomicrmw_umin_i8_aligned_monotonic:6738; -O0:    and w9, w0, #0xff6739; -O0:    subs w9, w9, w8, uxtb6740; -O0:    csel w1, w0, w8, ls6741; -O0:    bl __aarch64_cas1_relax6742; -O0:    and w8, w0, #0xff6743; -O0:    subs w8, w8, w9, uxtb6744;6745; -O1-LABEL: atomicrmw_umin_i8_aligned_monotonic:6746; -O1:    and w9, w1, #0xff6747; -O1:    ldxrb w8, [x0]6748; -O1:    cmp w8, w96749; -O1:    csel w10, w8, w9, ls6750; -O1:    stxrb w11, w10, [x0]6751    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 16752    ret i8 %r6753}6754 6755define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) {6756; -O0-LABEL: atomicrmw_umin_i8_aligned_acquire:6757; -O0:    and w9, w0, #0xff6758; -O0:    subs w9, w9, w8, uxtb6759; -O0:    csel w1, w0, w8, ls6760; -O0:    bl __aarch64_cas1_acq6761; -O0:    and w8, w0, #0xff6762; -O0:    subs w8, w8, w9, uxtb6763;6764; -O1-LABEL: atomicrmw_umin_i8_aligned_acquire:6765; -O1:    and w9, w1, #0xff6766; -O1:    ldaxrb w8, [x0]6767; -O1:    cmp w8, w96768; -O1:    csel w10, w8, w9, ls6769; -O1:    stxrb w11, w10, [x0]6770    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 16771    ret i8 %r6772}6773 6774define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) {6775; -O0-LABEL: atomicrmw_umin_i8_aligned_release:6776; -O0:    and w9, w0, #0xff6777; -O0:    subs w9, w9, w8, uxtb6778; -O0:    csel w1, w0, w8, ls6779; -O0:    bl __aarch64_cas1_rel6780; -O0:    and w8, w0, #0xff6781; -O0:    subs w8, w8, w9, uxtb6782;6783; -O1-LABEL: atomicrmw_umin_i8_aligned_release:6784; -O1:    and w9, w1, #0xff6785; -O1:    ldxrb w8, [x0]6786; -O1:    cmp w8, w96787; -O1:    csel w10, w8, w9, ls6788; -O1:    stlxrb w11, w10, [x0]6789    %r = atomicrmw umin ptr %ptr, i8 %value release, align 16790    ret i8 %r6791}6792 6793define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) {6794; -O0-LABEL: atomicrmw_umin_i8_aligned_acq_rel:6795; -O0:    and w9, w0, #0xff6796; -O0:    subs w9, w9, w8, uxtb6797; -O0:    csel w1, w0, w8, ls6798; -O0:    bl __aarch64_cas1_acq_rel6799; -O0:    and w8, w0, #0xff6800; -O0:    subs w8, w8, w9, uxtb6801;6802; -O1-LABEL: atomicrmw_umin_i8_aligned_acq_rel:6803; -O1:    and w9, w1, #0xff6804; -O1:    ldaxrb w8, [x0]6805; -O1:    cmp w8, w96806; -O1:    csel w10, w8, w9, ls6807; -O1:    stlxrb w11, w10, [x0]6808    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 16809    ret i8 %r6810}6811 6812define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) {6813; -O0-LABEL: atomicrmw_umin_i8_aligned_seq_cst:6814; -O0:    and w9, w0, #0xff6815; -O0:    subs w9, w9, w8, uxtb6816; -O0:    csel w1, w0, w8, ls6817; -O0:    bl __aarch64_cas1_acq_rel6818; -O0:    and w8, w0, #0xff6819; -O0:    subs w8, w8, w9, uxtb6820;6821; -O1-LABEL: atomicrmw_umin_i8_aligned_seq_cst:6822; -O1:    and w9, w1, #0xff6823; -O1:    ldaxrb w8, [x0]6824; -O1:    cmp w8, w96825; -O1:    csel w10, w8, w9, ls6826; -O1:    stlxrb w11, w10, [x0]6827    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 16828    ret i8 %r6829}6830 6831define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) {6832; -O0-LABEL: atomicrmw_umin_i16_aligned_monotonic:6833; -O0:    subs w9, w9, w8, uxth6834; -O0:    csel w1, w0, w8, ls6835; -O0:    bl __aarch64_cas2_relax6836; -O0:    subs w8, w8, w0, uxth6837;6838; -O1-LABEL: atomicrmw_umin_i16_aligned_monotonic:6839; -O1:    and w9, w1, #0xffff6840; -O1:    ldxrh w8, [x0]6841; -O1:    cmp w8, w96842; -O1:    csel w10, w8, w9, ls6843; -O1:    stxrh w11, w10, [x0]6844    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 26845    ret i16 %r6846}6847 6848define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) {6849; -O0-LABEL: atomicrmw_umin_i16_aligned_acquire:6850; -O0:    subs w9, w9, w8, uxth6851; -O0:    csel w1, w0, w8, ls6852; -O0:    bl __aarch64_cas2_acq6853; -O0:    subs w8, w8, w0, uxth6854;6855; -O1-LABEL: atomicrmw_umin_i16_aligned_acquire:6856; -O1:    and w9, w1, #0xffff6857; -O1:    ldaxrh w8, [x0]6858; -O1:    cmp w8, w96859; -O1:    csel w10, w8, w9, ls6860; -O1:    stxrh w11, w10, [x0]6861    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 26862    ret i16 %r6863}6864 6865define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) {6866; -O0-LABEL: atomicrmw_umin_i16_aligned_release:6867; -O0:    subs w9, w9, w8, uxth6868; -O0:    csel w1, w0, w8, ls6869; -O0:    bl __aarch64_cas2_rel6870; -O0:    subs w8, w8, w0, uxth6871;6872; -O1-LABEL: atomicrmw_umin_i16_aligned_release:6873; -O1:    and w9, w1, #0xffff6874; -O1:    ldxrh w8, [x0]6875; -O1:    cmp w8, w96876; -O1:    csel w10, w8, w9, ls6877; -O1:    stlxrh w11, w10, [x0]6878    %r = atomicrmw umin ptr %ptr, i16 %value release, align 26879    ret i16 %r6880}6881 6882define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) {6883; -O0-LABEL: atomicrmw_umin_i16_aligned_acq_rel:6884; -O0:    subs w9, w9, w8, uxth6885; -O0:    csel w1, w0, w8, ls6886; -O0:    bl __aarch64_cas2_acq_rel6887; -O0:    subs w8, w8, w0, uxth6888;6889; -O1-LABEL: atomicrmw_umin_i16_aligned_acq_rel:6890; -O1:    and w9, w1, #0xffff6891; -O1:    ldaxrh w8, [x0]6892; -O1:    cmp w8, w96893; -O1:    csel w10, w8, w9, ls6894; -O1:    stlxrh w11, w10, [x0]6895    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 26896    ret i16 %r6897}6898 6899define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) {6900; -O0-LABEL: atomicrmw_umin_i16_aligned_seq_cst:6901; -O0:    subs w9, w9, w8, uxth6902; -O0:    csel w1, w0, w8, ls6903; -O0:    bl __aarch64_cas2_acq_rel6904; -O0:    subs w8, w8, w0, uxth6905;6906; -O1-LABEL: atomicrmw_umin_i16_aligned_seq_cst:6907; -O1:    and w9, w1, #0xffff6908; -O1:    ldaxrh w8, [x0]6909; -O1:    cmp w8, w96910; -O1:    csel w10, w8, w9, ls6911; -O1:    stlxrh w11, w10, [x0]6912    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 26913    ret i16 %r6914}6915 6916define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) {6917; -O0-LABEL: atomicrmw_umin_i32_aligned_monotonic:6918; -O0:    subs w9, w0, w86919; -O0:    csel w1, w0, w8, ls6920; -O0:    bl __aarch64_cas4_relax6921; -O0:    subs w8, w0, w86922;6923; -O1-LABEL: atomicrmw_umin_i32_aligned_monotonic:6924; -O1:    ldxr w8, [x0]6925; -O1:    cmp w8, w16926; -O1:    csel w9, w8, w1, ls6927; -O1:    stxr w10, w9, [x0]6928    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 46929    ret i32 %r6930}6931 6932define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) {6933; -O0-LABEL: atomicrmw_umin_i32_aligned_acquire:6934; -O0:    subs w9, w0, w86935; -O0:    csel w1, w0, w8, ls6936; -O0:    bl __aarch64_cas4_acq6937; -O0:    subs w8, w0, w86938;6939; -O1-LABEL: atomicrmw_umin_i32_aligned_acquire:6940; -O1:    ldaxr w8, [x0]6941; -O1:    cmp w8, w16942; -O1:    csel w9, w8, w1, ls6943; -O1:    stxr w10, w9, [x0]6944    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 46945    ret i32 %r6946}6947 6948define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) {6949; -O0-LABEL: atomicrmw_umin_i32_aligned_release:6950; -O0:    subs w9, w0, w86951; -O0:    csel w1, w0, w8, ls6952; -O0:    bl __aarch64_cas4_rel6953; -O0:    subs w8, w0, w86954;6955; -O1-LABEL: atomicrmw_umin_i32_aligned_release:6956; -O1:    ldxr w8, [x0]6957; -O1:    cmp w8, w16958; -O1:    csel w9, w8, w1, ls6959; -O1:    stlxr w10, w9, [x0]6960    %r = atomicrmw umin ptr %ptr, i32 %value release, align 46961    ret i32 %r6962}6963 6964define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) {6965; -O0-LABEL: atomicrmw_umin_i32_aligned_acq_rel:6966; -O0:    subs w9, w0, w86967; -O0:    csel w1, w0, w8, ls6968; -O0:    bl __aarch64_cas4_acq_rel6969; -O0:    subs w8, w0, w86970;6971; -O1-LABEL: atomicrmw_umin_i32_aligned_acq_rel:6972; -O1:    ldaxr w8, [x0]6973; -O1:    cmp w8, w16974; -O1:    csel w9, w8, w1, ls6975; -O1:    stlxr w10, w9, [x0]6976    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 46977    ret i32 %r6978}6979 6980define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) {6981; -O0-LABEL: atomicrmw_umin_i32_aligned_seq_cst:6982; -O0:    subs w9, w0, w86983; -O0:    csel w1, w0, w8, ls6984; -O0:    bl __aarch64_cas4_acq_rel6985; -O0:    subs w8, w0, w86986;6987; -O1-LABEL: atomicrmw_umin_i32_aligned_seq_cst:6988; -O1:    ldaxr w8, [x0]6989; -O1:    cmp w8, w16990; -O1:    csel w9, w8, w1, ls6991; -O1:    stlxr w10, w9, [x0]6992    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 46993    ret i32 %r6994}6995 6996define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) {6997; -O0-LABEL: atomicrmw_umin_i64_aligned_monotonic:6998; -O0:    subs x9, x0, x86999; -O0:    csel x1, x0, x8, ls7000; -O0:    bl __aarch64_cas8_relax7001; -O0:    subs x8, x0, x87002;7003; -O1-LABEL: atomicrmw_umin_i64_aligned_monotonic:7004; -O1:    ldxr x0, [x8]7005; -O1:    cmp x0, x17006; -O1:    csel x9, x0, x1, ls7007; -O1:    stxr w10, x9, [x8]7008    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 87009    ret i64 %r7010}7011 7012define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) {7013; -O0-LABEL: atomicrmw_umin_i64_aligned_acquire:7014; -O0:    subs x9, x0, x87015; -O0:    csel x1, x0, x8, ls7016; -O0:    bl __aarch64_cas8_acq7017; -O0:    subs x8, x0, x87018;7019; -O1-LABEL: atomicrmw_umin_i64_aligned_acquire:7020; -O1:    ldaxr x0, [x8]7021; -O1:    cmp x0, x17022; -O1:    csel x9, x0, x1, ls7023; -O1:    stxr w10, x9, [x8]7024    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 87025    ret i64 %r7026}7027 7028define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) {7029; -O0-LABEL: atomicrmw_umin_i64_aligned_release:7030; -O0:    subs x9, x0, x87031; -O0:    csel x1, x0, x8, ls7032; -O0:    bl __aarch64_cas8_rel7033; -O0:    subs x8, x0, x87034;7035; -O1-LABEL: atomicrmw_umin_i64_aligned_release:7036; -O1:    ldxr x0, [x8]7037; -O1:    cmp x0, x17038; -O1:    csel x9, x0, x1, ls7039; -O1:    stlxr w10, x9, [x8]7040    %r = atomicrmw umin ptr %ptr, i64 %value release, align 87041    ret i64 %r7042}7043 7044define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) {7045; -O0-LABEL: atomicrmw_umin_i64_aligned_acq_rel:7046; -O0:    subs x9, x0, x87047; -O0:    csel x1, x0, x8, ls7048; -O0:    bl __aarch64_cas8_acq_rel7049; -O0:    subs x8, x0, x87050;7051; -O1-LABEL: atomicrmw_umin_i64_aligned_acq_rel:7052; -O1:    ldaxr x0, [x8]7053; -O1:    cmp x0, x17054; -O1:    csel x9, x0, x1, ls7055; -O1:    stlxr w10, x9, [x8]7056    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 87057    ret i64 %r7058}7059 7060define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) {7061; -O0-LABEL: atomicrmw_umin_i64_aligned_seq_cst:7062; -O0:    subs x9, x0, x87063; -O0:    csel x1, x0, x8, ls7064; -O0:    bl __aarch64_cas8_acq_rel7065; -O0:    subs x8, x0, x87066;7067; -O1-LABEL: atomicrmw_umin_i64_aligned_seq_cst:7068; -O1:    ldaxr x0, [x8]7069; -O1:    cmp x0, x17070; -O1:    csel x9, x0, x1, ls7071; -O1:    stlxr w10, x9, [x8]7072    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 87073    ret i64 %r7074}7075 7076define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) {7077; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic:7078; -O0:    subs x8, x8, x117079; -O0:    subs x10, x10, x97080; -O0:    subs x12, x12, x97081; -O0:    csel w10, w8, w10, eq7082; -O0:    ands w12, w10, #0x17083; -O0:    csel x2, x8, x11, ne7084; -O0:    ands w10, w10, #0x17085; -O0:    csel x3, x8, x9, ne7086; -O0:    bl __aarch64_cas16_relax7087; -O0:    eor x8, x0, x87088; -O0:    eor x9, x1, x97089; -O0:    orr x8, x8, x97090; -O0:    subs x8, x8, #07091;7092; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic:7093; -O1:    ldxp x0, x1, [x8]7094; -O1:    cmp x2, x07095; -O1:    csel x9, x1, x3, hs7096; -O1:    csel x10, x0, x2, hs7097; -O1:    stxp w11, x10, x9, [x8]7098    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 167099    ret i128 %r7100}7101 7102define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) {7103; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire:7104; -O0:    subs x8, x8, x117105; -O0:    subs x10, x10, x97106; -O0:    subs x12, x12, x97107; -O0:    csel w10, w8, w10, eq7108; -O0:    ands w12, w10, #0x17109; -O0:    csel x2, x8, x11, ne7110; -O0:    ands w10, w10, #0x17111; -O0:    csel x3, x8, x9, ne7112; -O0:    bl __aarch64_cas16_acq7113; -O0:    eor x8, x0, x87114; -O0:    eor x9, x1, x97115; -O0:    orr x8, x8, x97116; -O0:    subs x8, x8, #07117;7118; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire:7119; -O1:    ldaxp x0, x1, [x8]7120; -O1:    cmp x2, x07121; -O1:    csel x9, x1, x3, hs7122; -O1:    csel x10, x0, x2, hs7123; -O1:    stxp w11, x10, x9, [x8]7124    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 167125    ret i128 %r7126}7127 7128define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) {7129; -O0-LABEL: atomicrmw_umin_i128_aligned_release:7130; -O0:    subs x8, x8, x117131; -O0:    subs x10, x10, x97132; -O0:    subs x12, x12, x97133; -O0:    csel w10, w8, w10, eq7134; -O0:    ands w12, w10, #0x17135; -O0:    csel x2, x8, x11, ne7136; -O0:    ands w10, w10, #0x17137; -O0:    csel x3, x8, x9, ne7138; -O0:    bl __aarch64_cas16_rel7139; -O0:    eor x8, x0, x87140; -O0:    eor x9, x1, x97141; -O0:    orr x8, x8, x97142; -O0:    subs x8, x8, #07143;7144; -O1-LABEL: atomicrmw_umin_i128_aligned_release:7145; -O1:    ldxp x0, x1, [x8]7146; -O1:    cmp x2, x07147; -O1:    csel x9, x1, x3, hs7148; -O1:    csel x10, x0, x2, hs7149; -O1:    stlxp w11, x10, x9, [x8]7150    %r = atomicrmw umin ptr %ptr, i128 %value release, align 167151    ret i128 %r7152}7153 7154define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) {7155; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel:7156; -O0:    subs x8, x8, x117157; -O0:    subs x10, x10, x97158; -O0:    subs x12, x12, x97159; -O0:    csel w10, w8, w10, eq7160; -O0:    ands w12, w10, #0x17161; -O0:    csel x2, x8, x11, ne7162; -O0:    ands w10, w10, #0x17163; -O0:    csel x3, x8, x9, ne7164; -O0:    bl __aarch64_cas16_acq_rel7165; -O0:    eor x8, x0, x87166; -O0:    eor x9, x1, x97167; -O0:    orr x8, x8, x97168; -O0:    subs x8, x8, #07169;7170; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel:7171; -O1:    ldaxp x0, x1, [x8]7172; -O1:    cmp x2, x07173; -O1:    csel x9, x1, x3, hs7174; -O1:    csel x10, x0, x2, hs7175; -O1:    stlxp w11, x10, x9, [x8]7176    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 167177    ret i128 %r7178}7179 7180define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) {7181; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst:7182; -O0:    subs x8, x8, x117183; -O0:    subs x10, x10, x97184; -O0:    subs x12, x12, x97185; -O0:    csel w10, w8, w10, eq7186; -O0:    ands w12, w10, #0x17187; -O0:    csel x2, x8, x11, ne7188; -O0:    ands w10, w10, #0x17189; -O0:    csel x3, x8, x9, ne7190; -O0:    bl __aarch64_cas16_acq_rel7191; -O0:    eor x8, x0, x87192; -O0:    eor x9, x1, x97193; -O0:    orr x8, x8, x97194; -O0:    subs x8, x8, #07195;7196; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst:7197; -O1:    ldaxp x0, x1, [x8]7198; -O1:    cmp x2, x07199; -O1:    csel x9, x1, x3, hs7200; -O1:    csel x10, x0, x2, hs7201; -O1:    stlxp w11, x10, x9, [x8]7202    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 167203    ret i128 %r7204}7205 7206define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) {7207; -O0-LABEL: atomicrmw_umin_i8_unaligned_monotonic:7208; -O0:    and w9, w0, #0xff7209; -O0:    subs w9, w9, w8, uxtb7210; -O0:    csel w1, w0, w8, ls7211; -O0:    bl __aarch64_cas1_relax7212; -O0:    and w8, w0, #0xff7213; -O0:    subs w8, w8, w9, uxtb7214;7215; -O1-LABEL: atomicrmw_umin_i8_unaligned_monotonic:7216; -O1:    and w9, w1, #0xff7217; -O1:    ldxrb w8, [x0]7218; -O1:    cmp w8, w97219; -O1:    csel w10, w8, w9, ls7220; -O1:    stxrb w11, w10, [x0]7221    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 17222    ret i8 %r7223}7224 7225define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) {7226; -O0-LABEL: atomicrmw_umin_i8_unaligned_acquire:7227; -O0:    and w9, w0, #0xff7228; -O0:    subs w9, w9, w8, uxtb7229; -O0:    csel w1, w0, w8, ls7230; -O0:    bl __aarch64_cas1_acq7231; -O0:    and w8, w0, #0xff7232; -O0:    subs w8, w8, w9, uxtb7233;7234; -O1-LABEL: atomicrmw_umin_i8_unaligned_acquire:7235; -O1:    and w9, w1, #0xff7236; -O1:    ldaxrb w8, [x0]7237; -O1:    cmp w8, w97238; -O1:    csel w10, w8, w9, ls7239; -O1:    stxrb w11, w10, [x0]7240    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 17241    ret i8 %r7242}7243 7244define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) {7245; -O0-LABEL: atomicrmw_umin_i8_unaligned_release:7246; -O0:    and w9, w0, #0xff7247; -O0:    subs w9, w9, w8, uxtb7248; -O0:    csel w1, w0, w8, ls7249; -O0:    bl __aarch64_cas1_rel7250; -O0:    and w8, w0, #0xff7251; -O0:    subs w8, w8, w9, uxtb7252;7253; -O1-LABEL: atomicrmw_umin_i8_unaligned_release:7254; -O1:    and w9, w1, #0xff7255; -O1:    ldxrb w8, [x0]7256; -O1:    cmp w8, w97257; -O1:    csel w10, w8, w9, ls7258; -O1:    stlxrb w11, w10, [x0]7259    %r = atomicrmw umin ptr %ptr, i8 %value release, align 17260    ret i8 %r7261}7262 7263define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {7264; -O0-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:7265; -O0:    and w9, w0, #0xff7266; -O0:    subs w9, w9, w8, uxtb7267; -O0:    csel w1, w0, w8, ls7268; -O0:    bl __aarch64_cas1_acq_rel7269; -O0:    and w8, w0, #0xff7270; -O0:    subs w8, w8, w9, uxtb7271;7272; -O1-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:7273; -O1:    and w9, w1, #0xff7274; -O1:    ldaxrb w8, [x0]7275; -O1:    cmp w8, w97276; -O1:    csel w10, w8, w9, ls7277; -O1:    stlxrb w11, w10, [x0]7278    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 17279    ret i8 %r7280}7281 7282define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {7283; -O0-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:7284; -O0:    and w9, w0, #0xff7285; -O0:    subs w9, w9, w8, uxtb7286; -O0:    csel w1, w0, w8, ls7287; -O0:    bl __aarch64_cas1_acq_rel7288; -O0:    and w8, w0, #0xff7289; -O0:    subs w8, w8, w9, uxtb7290;7291; -O1-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:7292; -O1:    and w9, w1, #0xff7293; -O1:    ldaxrb w8, [x0]7294; -O1:    cmp w8, w97295; -O1:    csel w10, w8, w9, ls7296; -O1:    stlxrb w11, w10, [x0]7297    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 17298    ret i8 %r7299}7300 7301define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) {7302; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic:7303; -O0:    subs w10, w10, w8, uxth7304; -O0:    csel w8, w9, w8, ls7305; -O0:    bl __atomic_compare_exchange7306;7307; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic:7308; -O1:    and w8, w0, #0xffff7309; -O1:    cmp w8, w20, uxth7310; -O1:    csel w8, w0, w20, ls7311; -O1:    bl __atomic_compare_exchange7312    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 17313    ret i16 %r7314}7315 7316define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) {7317; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire:7318; -O0:    subs w10, w10, w8, uxth7319; -O0:    csel w8, w9, w8, ls7320; -O0:    bl __atomic_compare_exchange7321;7322; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire:7323; -O1:    and w8, w0, #0xffff7324; -O1:    cmp w8, w20, uxth7325; -O1:    csel w8, w0, w20, ls7326; -O1:    bl __atomic_compare_exchange7327    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 17328    ret i16 %r7329}7330 7331define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) {7332; -O0-LABEL: atomicrmw_umin_i16_unaligned_release:7333; -O0:    subs w10, w10, w8, uxth7334; -O0:    csel w8, w9, w8, ls7335; -O0:    bl __atomic_compare_exchange7336;7337; -O1-LABEL: atomicrmw_umin_i16_unaligned_release:7338; -O1:    and w8, w0, #0xffff7339; -O1:    cmp w8, w20, uxth7340; -O1:    csel w8, w0, w20, ls7341; -O1:    bl __atomic_compare_exchange7342    %r = atomicrmw umin ptr %ptr, i16 %value release, align 17343    ret i16 %r7344}7345 7346define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {7347; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:7348; -O0:    subs w10, w10, w8, uxth7349; -O0:    csel w8, w9, w8, ls7350; -O0:    bl __atomic_compare_exchange7351;7352; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:7353; -O1:    and w8, w0, #0xffff7354; -O1:    cmp w8, w20, uxth7355; -O1:    csel w8, w0, w20, ls7356; -O1:    bl __atomic_compare_exchange7357    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 17358    ret i16 %r7359}7360 7361define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {7362; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:7363; -O0:    subs w10, w10, w8, uxth7364; -O0:    csel w8, w9, w8, ls7365; -O0:    bl __atomic_compare_exchange7366;7367; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:7368; -O1:    and w8, w0, #0xffff7369; -O1:    cmp w8, w20, uxth7370; -O1:    csel w8, w0, w20, ls7371; -O1:    bl __atomic_compare_exchange7372    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 17373    ret i16 %r7374}7375 7376define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) {7377; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic:7378; -O0:    subs w10, w9, w87379; -O0:    csel w8, w9, w8, ls7380; -O0:    bl __atomic_compare_exchange7381;7382; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic:7383; -O1:    cmp w0, w207384; -O1:    csel w8, w0, w20, ls7385; -O1:    bl __atomic_compare_exchange7386    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 17387    ret i32 %r7388}7389 7390define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) {7391; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire:7392; -O0:    subs w10, w9, w87393; -O0:    csel w8, w9, w8, ls7394; -O0:    bl __atomic_compare_exchange7395;7396; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire:7397; -O1:    cmp w0, w207398; -O1:    csel w8, w0, w20, ls7399; -O1:    bl __atomic_compare_exchange7400    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 17401    ret i32 %r7402}7403 7404define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) {7405; -O0-LABEL: atomicrmw_umin_i32_unaligned_release:7406; -O0:    subs w10, w9, w87407; -O0:    csel w8, w9, w8, ls7408; -O0:    bl __atomic_compare_exchange7409;7410; -O1-LABEL: atomicrmw_umin_i32_unaligned_release:7411; -O1:    cmp w0, w207412; -O1:    csel w8, w0, w20, ls7413; -O1:    bl __atomic_compare_exchange7414    %r = atomicrmw umin ptr %ptr, i32 %value release, align 17415    ret i32 %r7416}7417 7418define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {7419; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:7420; -O0:    subs w10, w9, w87421; -O0:    csel w8, w9, w8, ls7422; -O0:    bl __atomic_compare_exchange7423;7424; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:7425; -O1:    cmp w0, w207426; -O1:    csel w8, w0, w20, ls7427; -O1:    bl __atomic_compare_exchange7428    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 17429    ret i32 %r7430}7431 7432define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {7433; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:7434; -O0:    subs w10, w9, w87435; -O0:    csel w8, w9, w8, ls7436; -O0:    bl __atomic_compare_exchange7437;7438; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:7439; -O1:    cmp w0, w207440; -O1:    csel w8, w0, w20, ls7441; -O1:    bl __atomic_compare_exchange7442    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 17443    ret i32 %r7444}7445 7446define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) {7447; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic:7448; -O0:    subs x10, x9, x87449; -O0:    csel x8, x9, x8, ls7450; -O0:    bl __atomic_compare_exchange7451;7452; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic:7453; -O1:    cmp x0, x207454; -O1:    csel x8, x0, x20, ls7455; -O1:    bl __atomic_compare_exchange7456    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 17457    ret i64 %r7458}7459 7460define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) {7461; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire:7462; -O0:    subs x10, x9, x87463; -O0:    csel x8, x9, x8, ls7464; -O0:    bl __atomic_compare_exchange7465;7466; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire:7467; -O1:    cmp x0, x207468; -O1:    csel x8, x0, x20, ls7469; -O1:    bl __atomic_compare_exchange7470    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 17471    ret i64 %r7472}7473 7474define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) {7475; -O0-LABEL: atomicrmw_umin_i64_unaligned_release:7476; -O0:    subs x10, x9, x87477; -O0:    csel x8, x9, x8, ls7478; -O0:    bl __atomic_compare_exchange7479;7480; -O1-LABEL: atomicrmw_umin_i64_unaligned_release:7481; -O1:    cmp x0, x207482; -O1:    csel x8, x0, x20, ls7483; -O1:    bl __atomic_compare_exchange7484    %r = atomicrmw umin ptr %ptr, i64 %value release, align 17485    ret i64 %r7486}7487 7488define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {7489; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:7490; -O0:    subs x10, x9, x87491; -O0:    csel x8, x9, x8, ls7492; -O0:    bl __atomic_compare_exchange7493;7494; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:7495; -O1:    cmp x0, x207496; -O1:    csel x8, x0, x20, ls7497; -O1:    bl __atomic_compare_exchange7498    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 17499    ret i64 %r7500}7501 7502define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {7503; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:7504; -O0:    subs x10, x9, x87505; -O0:    csel x8, x9, x8, ls7506; -O0:    bl __atomic_compare_exchange7507;7508; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:7509; -O1:    cmp x0, x207510; -O1:    csel x8, x0, x20, ls7511; -O1:    bl __atomic_compare_exchange7512    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 17513    ret i64 %r7514}7515 7516define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) {7517; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic:7518; -O0:    subs x8, x8, x97519; -O0:    subs x11, x11, x107520; -O0:    subs x12, x12, x107521; -O0:    csel w11, w8, w11, eq7522; -O0:    ands w12, w11, #0x17523; -O0:    csel x9, x8, x9, ne7524; -O0:    ands w11, w11, #0x17525; -O0:    csel x8, x8, x10, ne7526; -O0:    bl __atomic_compare_exchange7527;7528; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic:7529; -O1:    ldp x0, x1, [x0]7530; -O1:    cmp x21, x07531; -O1:    csel x8, x1, x19, hs7532; -O1:    csel x9, x0, x21, hs7533; -O1:    bl __atomic_compare_exchange7534    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 17535    ret i128 %r7536}7537 7538define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) {7539; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire:7540; -O0:    subs x8, x8, x97541; -O0:    subs x11, x11, x107542; -O0:    subs x12, x12, x107543; -O0:    csel w11, w8, w11, eq7544; -O0:    ands w12, w11, #0x17545; -O0:    csel x9, x8, x9, ne7546; -O0:    ands w11, w11, #0x17547; -O0:    csel x8, x8, x10, ne7548; -O0:    bl __atomic_compare_exchange7549;7550; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire:7551; -O1:    ldp x0, x1, [x0]7552; -O1:    cmp x21, x07553; -O1:    csel x8, x1, x19, hs7554; -O1:    csel x9, x0, x21, hs7555; -O1:    bl __atomic_compare_exchange7556    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 17557    ret i128 %r7558}7559 7560define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) {7561; -O0-LABEL: atomicrmw_umin_i128_unaligned_release:7562; -O0:    subs x8, x8, x97563; -O0:    subs x11, x11, x107564; -O0:    subs x12, x12, x107565; -O0:    csel w11, w8, w11, eq7566; -O0:    ands w12, w11, #0x17567; -O0:    csel x9, x8, x9, ne7568; -O0:    ands w11, w11, #0x17569; -O0:    csel x8, x8, x10, ne7570; -O0:    bl __atomic_compare_exchange7571;7572; -O1-LABEL: atomicrmw_umin_i128_unaligned_release:7573; -O1:    ldp x0, x1, [x0]7574; -O1:    cmp x21, x07575; -O1:    csel x8, x1, x19, hs7576; -O1:    csel x9, x0, x21, hs7577; -O1:    bl __atomic_compare_exchange7578    %r = atomicrmw umin ptr %ptr, i128 %value release, align 17579    ret i128 %r7580}7581 7582define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {7583; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:7584; -O0:    subs x8, x8, x97585; -O0:    subs x11, x11, x107586; -O0:    subs x12, x12, x107587; -O0:    csel w11, w8, w11, eq7588; -O0:    ands w12, w11, #0x17589; -O0:    csel x9, x8, x9, ne7590; -O0:    ands w11, w11, #0x17591; -O0:    csel x8, x8, x10, ne7592; -O0:    bl __atomic_compare_exchange7593;7594; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:7595; -O1:    ldp x0, x1, [x0]7596; -O1:    cmp x21, x07597; -O1:    csel x8, x1, x19, hs7598; -O1:    csel x9, x0, x21, hs7599; -O1:    bl __atomic_compare_exchange7600    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 17601    ret i128 %r7602}7603 7604define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {7605; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:7606; -O0:    subs x8, x8, x97607; -O0:    subs x11, x11, x107608; -O0:    subs x12, x12, x107609; -O0:    csel w11, w8, w11, eq7610; -O0:    ands w12, w11, #0x17611; -O0:    csel x9, x8, x9, ne7612; -O0:    ands w11, w11, #0x17613; -O0:    csel x8, x8, x10, ne7614; -O0:    bl __atomic_compare_exchange7615;7616; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:7617; -O1:    ldp x0, x1, [x0]7618; -O1:    cmp x21, x07619; -O1:    csel x8, x1, x19, hs7620; -O1:    csel x9, x0, x21, hs7621; -O1:    bl __atomic_compare_exchange7622    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 17623    ret i128 %r7624}7625