brintos

brintos / llvm-project-archived public Read only

0
0
Text · 277.1 KiB · 57cfeb7 Raw
9230 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=+rcpc -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+rcpc -O1 | FileCheck %s --check-prefixes=CHECK,-O15 6define dso_local i8 @atomicrmw_xchg_i8_aligned_monotonic(ptr %ptr, i8 %value) {7; -O0-LABEL: atomicrmw_xchg_i8_aligned_monotonic:8; -O0:    ldaxrb w9, [x11]9; -O0:    cmp w9, w10, uxtb10; -O0:    stlxrb w8, w12, [x11]11; -O0:    and w8, w9, #0xff12; -O0:    subs w8, w8, w10, uxtb13;14; -O1-LABEL: atomicrmw_xchg_i8_aligned_monotonic:15; -O1:    ldxrb w0, [x8]16; -O1:    stxrb w9, w1, [x8]17    %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 118    ret i8 %r19}20 21define dso_local i8 @atomicrmw_xchg_i8_aligned_acquire(ptr %ptr, i8 %value) {22; -O0-LABEL: atomicrmw_xchg_i8_aligned_acquire:23; -O0:    ldaxrb w9, [x11]24; -O0:    cmp w9, w10, uxtb25; -O0:    stlxrb w8, w12, [x11]26; -O0:    and w8, w9, #0xff27; -O0:    subs w8, w8, w10, uxtb28;29; -O1-LABEL: atomicrmw_xchg_i8_aligned_acquire:30; -O1:    ldaxrb w0, [x8]31; -O1:    stxrb w9, w1, [x8]32    %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 133    ret i8 %r34}35 36define dso_local i8 @atomicrmw_xchg_i8_aligned_release(ptr %ptr, i8 %value) {37; -O0-LABEL: atomicrmw_xchg_i8_aligned_release:38; -O0:    ldaxrb w9, [x11]39; -O0:    cmp w9, w10, uxtb40; -O0:    stlxrb w8, w12, [x11]41; -O0:    and w8, w9, #0xff42; -O0:    subs w8, w8, w10, uxtb43;44; -O1-LABEL: atomicrmw_xchg_i8_aligned_release:45; -O1:    ldxrb w0, [x8]46; -O1:    stlxrb w9, w1, [x8]47    %r = atomicrmw xchg ptr %ptr, i8 %value release, align 148    ret i8 %r49}50 51define dso_local i8 @atomicrmw_xchg_i8_aligned_acq_rel(ptr %ptr, i8 %value) {52; -O0-LABEL: atomicrmw_xchg_i8_aligned_acq_rel:53; -O0:    ldaxrb w9, [x11]54; -O0:    cmp w9, w10, uxtb55; -O0:    stlxrb w8, w12, [x11]56; -O0:    and w8, w9, #0xff57; -O0:    subs w8, w8, w10, uxtb58;59; -O1-LABEL: atomicrmw_xchg_i8_aligned_acq_rel:60; -O1:    ldaxrb w0, [x8]61; -O1:    stlxrb w9, w1, [x8]62    %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 163    ret i8 %r64}65 66define dso_local i8 @atomicrmw_xchg_i8_aligned_seq_cst(ptr %ptr, i8 %value) {67; -O0-LABEL: atomicrmw_xchg_i8_aligned_seq_cst:68; -O0:    ldaxrb w9, [x11]69; -O0:    cmp w9, w10, uxtb70; -O0:    stlxrb w8, w12, [x11]71; -O0:    and w8, w9, #0xff72; -O0:    subs w8, w8, w10, uxtb73;74; -O1-LABEL: atomicrmw_xchg_i8_aligned_seq_cst:75; -O1:    ldaxrb w0, [x8]76; -O1:    stlxrb w9, w1, [x8]77    %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 178    ret i8 %r79}80 81define dso_local i16 @atomicrmw_xchg_i16_aligned_monotonic(ptr %ptr, i16 %value) {82; -O0-LABEL: atomicrmw_xchg_i16_aligned_monotonic:83; -O0:    ldaxrh w9, [x11]84; -O0:    cmp w9, w8, uxth85; -O0:    stlxrh w10, w12, [x11]86; -O0:    subs w8, w8, w9, uxth87;88; -O1-LABEL: atomicrmw_xchg_i16_aligned_monotonic:89; -O1:    ldxrh w0, [x8]90; -O1:    stxrh w9, w1, [x8]91    %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 292    ret i16 %r93}94 95define dso_local i16 @atomicrmw_xchg_i16_aligned_acquire(ptr %ptr, i16 %value) {96; -O0-LABEL: atomicrmw_xchg_i16_aligned_acquire:97; -O0:    ldaxrh w9, [x11]98; -O0:    cmp w9, w8, uxth99; -O0:    stlxrh w10, w12, [x11]100; -O0:    subs w8, w8, w9, uxth101;102; -O1-LABEL: atomicrmw_xchg_i16_aligned_acquire:103; -O1:    ldaxrh w0, [x8]104; -O1:    stxrh w9, w1, [x8]105    %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 2106    ret i16 %r107}108 109define dso_local i16 @atomicrmw_xchg_i16_aligned_release(ptr %ptr, i16 %value) {110; -O0-LABEL: atomicrmw_xchg_i16_aligned_release:111; -O0:    ldaxrh w9, [x11]112; -O0:    cmp w9, w8, uxth113; -O0:    stlxrh w10, w12, [x11]114; -O0:    subs w8, w8, w9, uxth115;116; -O1-LABEL: atomicrmw_xchg_i16_aligned_release:117; -O1:    ldxrh w0, [x8]118; -O1:    stlxrh w9, w1, [x8]119    %r = atomicrmw xchg ptr %ptr, i16 %value release, align 2120    ret i16 %r121}122 123define dso_local i16 @atomicrmw_xchg_i16_aligned_acq_rel(ptr %ptr, i16 %value) {124; -O0-LABEL: atomicrmw_xchg_i16_aligned_acq_rel:125; -O0:    ldaxrh w9, [x11]126; -O0:    cmp w9, w8, uxth127; -O0:    stlxrh w10, w12, [x11]128; -O0:    subs w8, w8, w9, uxth129;130; -O1-LABEL: atomicrmw_xchg_i16_aligned_acq_rel:131; -O1:    ldaxrh w0, [x8]132; -O1:    stlxrh w9, w1, [x8]133    %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 2134    ret i16 %r135}136 137define dso_local i16 @atomicrmw_xchg_i16_aligned_seq_cst(ptr %ptr, i16 %value) {138; -O0-LABEL: atomicrmw_xchg_i16_aligned_seq_cst:139; -O0:    ldaxrh w9, [x11]140; -O0:    cmp w9, w8, uxth141; -O0:    stlxrh w10, w12, [x11]142; -O0:    subs w8, w8, w9, uxth143;144; -O1-LABEL: atomicrmw_xchg_i16_aligned_seq_cst:145; -O1:    ldaxrh w0, [x8]146; -O1:    stlxrh w9, w1, [x8]147    %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 2148    ret i16 %r149}150 151define dso_local i32 @atomicrmw_xchg_i32_aligned_monotonic(ptr %ptr, i32 %value) {152; -O0-LABEL: atomicrmw_xchg_i32_aligned_monotonic:153; -O0:    ldaxr w9, [x11]154; -O0:    cmp w9, w8155; -O0:    stlxr w10, w12, [x11]156; -O0:    subs w8, w9, w8157;158; -O1-LABEL: atomicrmw_xchg_i32_aligned_monotonic:159; -O1:    ldxr w0, [x8]160; -O1:    stxr w9, w1, [x8]161    %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 4162    ret i32 %r163}164 165define dso_local i32 @atomicrmw_xchg_i32_aligned_acquire(ptr %ptr, i32 %value) {166; -O0-LABEL: atomicrmw_xchg_i32_aligned_acquire:167; -O0:    ldaxr w9, [x11]168; -O0:    cmp w9, w8169; -O0:    stlxr w10, w12, [x11]170; -O0:    subs w8, w9, w8171;172; -O1-LABEL: atomicrmw_xchg_i32_aligned_acquire:173; -O1:    ldaxr w0, [x8]174; -O1:    stxr w9, w1, [x8]175    %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 4176    ret i32 %r177}178 179define dso_local i32 @atomicrmw_xchg_i32_aligned_release(ptr %ptr, i32 %value) {180; -O0-LABEL: atomicrmw_xchg_i32_aligned_release:181; -O0:    ldaxr w9, [x11]182; -O0:    cmp w9, w8183; -O0:    stlxr w10, w12, [x11]184; -O0:    subs w8, w9, w8185;186; -O1-LABEL: atomicrmw_xchg_i32_aligned_release:187; -O1:    ldxr w0, [x8]188; -O1:    stlxr w9, w1, [x8]189    %r = atomicrmw xchg ptr %ptr, i32 %value release, align 4190    ret i32 %r191}192 193define dso_local i32 @atomicrmw_xchg_i32_aligned_acq_rel(ptr %ptr, i32 %value) {194; -O0-LABEL: atomicrmw_xchg_i32_aligned_acq_rel:195; -O0:    ldaxr w9, [x11]196; -O0:    cmp w9, w8197; -O0:    stlxr w10, w12, [x11]198; -O0:    subs w8, w9, w8199;200; -O1-LABEL: atomicrmw_xchg_i32_aligned_acq_rel:201; -O1:    ldaxr w0, [x8]202; -O1:    stlxr w9, w1, [x8]203    %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 4204    ret i32 %r205}206 207define dso_local i32 @atomicrmw_xchg_i32_aligned_seq_cst(ptr %ptr, i32 %value) {208; -O0-LABEL: atomicrmw_xchg_i32_aligned_seq_cst:209; -O0:    ldaxr w9, [x11]210; -O0:    cmp w9, w8211; -O0:    stlxr w10, w12, [x11]212; -O0:    subs w8, w9, w8213;214; -O1-LABEL: atomicrmw_xchg_i32_aligned_seq_cst:215; -O1:    ldaxr w0, [x8]216; -O1:    stlxr w9, w1, [x8]217    %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 4218    ret i32 %r219}220 221define dso_local i64 @atomicrmw_xchg_i64_aligned_monotonic(ptr %ptr, i64 %value) {222; -O0-LABEL: atomicrmw_xchg_i64_aligned_monotonic:223; -O0:    ldaxr x9, [x11]224; -O0:    cmp x9, x8225; -O0:    stlxr w10, x12, [x11]226; -O0:    subs x8, x9, x8227;228; -O1-LABEL: atomicrmw_xchg_i64_aligned_monotonic:229; -O1:    ldxr x0, [x8]230; -O1:    stxr w9, x1, [x8]231    %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 8232    ret i64 %r233}234 235define dso_local i64 @atomicrmw_xchg_i64_aligned_acquire(ptr %ptr, i64 %value) {236; -O0-LABEL: atomicrmw_xchg_i64_aligned_acquire:237; -O0:    ldaxr x9, [x11]238; -O0:    cmp x9, x8239; -O0:    stlxr w10, x12, [x11]240; -O0:    subs x8, x9, x8241;242; -O1-LABEL: atomicrmw_xchg_i64_aligned_acquire:243; -O1:    ldaxr x0, [x8]244; -O1:    stxr w9, x1, [x8]245    %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 8246    ret i64 %r247}248 249define dso_local i64 @atomicrmw_xchg_i64_aligned_release(ptr %ptr, i64 %value) {250; -O0-LABEL: atomicrmw_xchg_i64_aligned_release:251; -O0:    ldaxr x9, [x11]252; -O0:    cmp x9, x8253; -O0:    stlxr w10, x12, [x11]254; -O0:    subs x8, x9, x8255;256; -O1-LABEL: atomicrmw_xchg_i64_aligned_release:257; -O1:    ldxr x0, [x8]258; -O1:    stlxr w9, x1, [x8]259    %r = atomicrmw xchg ptr %ptr, i64 %value release, align 8260    ret i64 %r261}262 263define dso_local i64 @atomicrmw_xchg_i64_aligned_acq_rel(ptr %ptr, i64 %value) {264; -O0-LABEL: atomicrmw_xchg_i64_aligned_acq_rel:265; -O0:    ldaxr x9, [x11]266; -O0:    cmp x9, x8267; -O0:    stlxr w10, x12, [x11]268; -O0:    subs x8, x9, x8269;270; -O1-LABEL: atomicrmw_xchg_i64_aligned_acq_rel:271; -O1:    ldaxr x0, [x8]272; -O1:    stlxr w9, x1, [x8]273    %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 8274    ret i64 %r275}276 277define dso_local i64 @atomicrmw_xchg_i64_aligned_seq_cst(ptr %ptr, i64 %value) {278; -O0-LABEL: atomicrmw_xchg_i64_aligned_seq_cst:279; -O0:    ldaxr x9, [x11]280; -O0:    cmp x9, x8281; -O0:    stlxr w10, x12, [x11]282; -O0:    subs x8, x9, x8283;284; -O1-LABEL: atomicrmw_xchg_i64_aligned_seq_cst:285; -O1:    ldaxr x0, [x8]286; -O1:    stlxr w9, x1, [x8]287    %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 8288    ret i64 %r289}290 291define dso_local i128 @atomicrmw_xchg_i128_aligned_monotonic(ptr %ptr, i128 %value) {292; -O0-LABEL: atomicrmw_xchg_i128_aligned_monotonic:293; -O0:    ldxp x10, x9, [x11]294; -O0:    cmp x10, x12295; -O0:    cmp x9, x13296; -O0:    stxp w8, x14, x15, [x11]297; -O0:    stxp w8, x10, x9, [x11]298; -O0:    eor x8, x10, x8299; -O0:    eor x11, x9, x11300; -O0:    orr x8, x8, x11301; -O0:    subs x8, x8, #0302;303; -O1-LABEL: atomicrmw_xchg_i128_aligned_monotonic:304; -O1:    ldxp x8, x1, [x0]305; -O1:    stxp w9, x2, x3, [x0]306    %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 16307    ret i128 %r308}309 310define dso_local i128 @atomicrmw_xchg_i128_aligned_acquire(ptr %ptr, i128 %value) {311; -O0-LABEL: atomicrmw_xchg_i128_aligned_acquire:312; -O0:    ldaxp x10, x9, [x11]313; -O0:    cmp x10, x12314; -O0:    cmp x9, x13315; -O0:    stxp w8, x14, x15, [x11]316; -O0:    stxp w8, x10, x9, [x11]317; -O0:    eor x8, x10, x8318; -O0:    eor x11, x9, x11319; -O0:    orr x8, x8, x11320; -O0:    subs x8, x8, #0321;322; -O1-LABEL: atomicrmw_xchg_i128_aligned_acquire:323; -O1:    ldaxp x8, x1, [x0]324; -O1:    stxp w9, x2, x3, [x0]325    %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 16326    ret i128 %r327}328 329define dso_local i128 @atomicrmw_xchg_i128_aligned_release(ptr %ptr, i128 %value) {330; -O0-LABEL: atomicrmw_xchg_i128_aligned_release:331; -O0:    ldxp x10, x9, [x11]332; -O0:    cmp x10, x12333; -O0:    cmp x9, x13334; -O0:    stlxp w8, x14, x15, [x11]335; -O0:    stlxp w8, x10, x9, [x11]336; -O0:    eor x8, x10, x8337; -O0:    eor x11, x9, x11338; -O0:    orr x8, x8, x11339; -O0:    subs x8, x8, #0340;341; -O1-LABEL: atomicrmw_xchg_i128_aligned_release:342; -O1:    ldxp x8, x1, [x0]343; -O1:    stlxp w9, x2, x3, [x0]344    %r = atomicrmw xchg ptr %ptr, i128 %value release, align 16345    ret i128 %r346}347 348define dso_local i128 @atomicrmw_xchg_i128_aligned_acq_rel(ptr %ptr, i128 %value) {349; -O0-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:350; -O0:    ldaxp x10, x9, [x11]351; -O0:    cmp x10, x12352; -O0:    cmp x9, x13353; -O0:    stlxp w8, x14, x15, [x11]354; -O0:    stlxp w8, x10, x9, [x11]355; -O0:    eor x8, x10, x8356; -O0:    eor x11, x9, x11357; -O0:    orr x8, x8, x11358; -O0:    subs x8, x8, #0359;360; -O1-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:361; -O1:    ldaxp x8, x1, [x0]362; -O1:    stlxp w9, x2, x3, [x0]363    %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 16364    ret i128 %r365}366 367define dso_local i128 @atomicrmw_xchg_i128_aligned_seq_cst(ptr %ptr, i128 %value) {368; -O0-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:369; -O0:    ldaxp x10, x9, [x11]370; -O0:    cmp x10, x12371; -O0:    cmp x9, x13372; -O0:    stlxp w8, x14, x15, [x11]373; -O0:    stlxp w8, x10, x9, [x11]374; -O0:    eor x8, x10, x8375; -O0:    eor x11, x9, x11376; -O0:    orr x8, x8, x11377; -O0:    subs x8, x8, #0378;379; -O1-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:380; -O1:    ldaxp x8, x1, [x0]381; -O1:    stlxp w9, x2, x3, [x0]382    %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 16383    ret i128 %r384}385 386define dso_local i8 @atomicrmw_xchg_i8_unaligned_monotonic(ptr %ptr, i8 %value) {387; -O0-LABEL: atomicrmw_xchg_i8_unaligned_monotonic:388; -O0:    ldaxrb w9, [x11]389; -O0:    cmp w9, w10, uxtb390; -O0:    stlxrb w8, w12, [x11]391; -O0:    and w8, w9, #0xff392; -O0:    subs w8, w8, w10, uxtb393;394; -O1-LABEL: atomicrmw_xchg_i8_unaligned_monotonic:395; -O1:    ldxrb w0, [x8]396; -O1:    stxrb w9, w1, [x8]397    %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 1398    ret i8 %r399}400 401define dso_local i8 @atomicrmw_xchg_i8_unaligned_acquire(ptr %ptr, i8 %value) {402; -O0-LABEL: atomicrmw_xchg_i8_unaligned_acquire:403; -O0:    ldaxrb w9, [x11]404; -O0:    cmp w9, w10, uxtb405; -O0:    stlxrb w8, w12, [x11]406; -O0:    and w8, w9, #0xff407; -O0:    subs w8, w8, w10, uxtb408;409; -O1-LABEL: atomicrmw_xchg_i8_unaligned_acquire:410; -O1:    ldaxrb w0, [x8]411; -O1:    stxrb w9, w1, [x8]412    %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 1413    ret i8 %r414}415 416define dso_local i8 @atomicrmw_xchg_i8_unaligned_release(ptr %ptr, i8 %value) {417; -O0-LABEL: atomicrmw_xchg_i8_unaligned_release:418; -O0:    ldaxrb w9, [x11]419; -O0:    cmp w9, w10, uxtb420; -O0:    stlxrb w8, w12, [x11]421; -O0:    and w8, w9, #0xff422; -O0:    subs w8, w8, w10, uxtb423;424; -O1-LABEL: atomicrmw_xchg_i8_unaligned_release:425; -O1:    ldxrb w0, [x8]426; -O1:    stlxrb w9, w1, [x8]427    %r = atomicrmw xchg ptr %ptr, i8 %value release, align 1428    ret i8 %r429}430 431define dso_local i8 @atomicrmw_xchg_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {432; -O0-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel:433; -O0:    ldaxrb w9, [x11]434; -O0:    cmp w9, w10, uxtb435; -O0:    stlxrb w8, w12, [x11]436; -O0:    and w8, w9, #0xff437; -O0:    subs w8, w8, w10, uxtb438;439; -O1-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel:440; -O1:    ldaxrb w0, [x8]441; -O1:    stlxrb w9, w1, [x8]442    %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 1443    ret i8 %r444}445 446define dso_local i8 @atomicrmw_xchg_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {447; -O0-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst:448; -O0:    ldaxrb w9, [x11]449; -O0:    cmp w9, w10, uxtb450; -O0:    stlxrb w8, w12, [x11]451; -O0:    and w8, w9, #0xff452; -O0:    subs w8, w8, w10, uxtb453;454; -O1-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst:455; -O1:    ldaxrb w0, [x8]456; -O1:    stlxrb w9, w1, [x8]457    %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 1458    ret i8 %r459}460 461define dso_local i16 @atomicrmw_xchg_i16_unaligned_monotonic(ptr %ptr, i16 %value) {462; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_monotonic:463; CHECK:    bl __atomic_exchange464    %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 1465    ret i16 %r466}467 468define dso_local i16 @atomicrmw_xchg_i16_unaligned_acquire(ptr %ptr, i16 %value) {469; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acquire:470; CHECK:    bl __atomic_exchange471    %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 1472    ret i16 %r473}474 475define dso_local i16 @atomicrmw_xchg_i16_unaligned_release(ptr %ptr, i16 %value) {476; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_release:477; CHECK:    bl __atomic_exchange478    %r = atomicrmw xchg ptr %ptr, i16 %value release, align 1479    ret i16 %r480}481 482define dso_local i16 @atomicrmw_xchg_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {483; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acq_rel:484; CHECK:    bl __atomic_exchange485    %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 1486    ret i16 %r487}488 489define dso_local i16 @atomicrmw_xchg_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {490; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_seq_cst:491; CHECK:    bl __atomic_exchange492    %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 1493    ret i16 %r494}495 496define dso_local i32 @atomicrmw_xchg_i32_unaligned_monotonic(ptr %ptr, i32 %value) {497; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_monotonic:498; CHECK:    bl __atomic_exchange499    %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 1500    ret i32 %r501}502 503define dso_local i32 @atomicrmw_xchg_i32_unaligned_acquire(ptr %ptr, i32 %value) {504; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acquire:505; CHECK:    bl __atomic_exchange506    %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 1507    ret i32 %r508}509 510define dso_local i32 @atomicrmw_xchg_i32_unaligned_release(ptr %ptr, i32 %value) {511; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_release:512; CHECK:    bl __atomic_exchange513    %r = atomicrmw xchg ptr %ptr, i32 %value release, align 1514    ret i32 %r515}516 517define dso_local i32 @atomicrmw_xchg_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {518; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acq_rel:519; CHECK:    bl __atomic_exchange520    %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 1521    ret i32 %r522}523 524define dso_local i32 @atomicrmw_xchg_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {525; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_seq_cst:526; CHECK:    bl __atomic_exchange527    %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 1528    ret i32 %r529}530 531define dso_local i64 @atomicrmw_xchg_i64_unaligned_monotonic(ptr %ptr, i64 %value) {532; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_monotonic:533; CHECK:    bl __atomic_exchange534    %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 1535    ret i64 %r536}537 538define dso_local i64 @atomicrmw_xchg_i64_unaligned_acquire(ptr %ptr, i64 %value) {539; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acquire:540; CHECK:    bl __atomic_exchange541    %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 1542    ret i64 %r543}544 545define dso_local i64 @atomicrmw_xchg_i64_unaligned_release(ptr %ptr, i64 %value) {546; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_release:547; CHECK:    bl __atomic_exchange548    %r = atomicrmw xchg ptr %ptr, i64 %value release, align 1549    ret i64 %r550}551 552define dso_local i64 @atomicrmw_xchg_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {553; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acq_rel:554; CHECK:    bl __atomic_exchange555    %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 1556    ret i64 %r557}558 559define dso_local i64 @atomicrmw_xchg_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {560; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_seq_cst:561; CHECK:    bl __atomic_exchange562    %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 1563    ret i64 %r564}565 566define dso_local i128 @atomicrmw_xchg_i128_unaligned_monotonic(ptr %ptr, i128 %value) {567; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_monotonic:568; CHECK:    bl __atomic_exchange569    %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 1570    ret i128 %r571}572 573define dso_local i128 @atomicrmw_xchg_i128_unaligned_acquire(ptr %ptr, i128 %value) {574; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acquire:575; CHECK:    bl __atomic_exchange576    %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 1577    ret i128 %r578}579 580define dso_local i128 @atomicrmw_xchg_i128_unaligned_release(ptr %ptr, i128 %value) {581; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_release:582; CHECK:    bl __atomic_exchange583    %r = atomicrmw xchg ptr %ptr, i128 %value release, align 1584    ret i128 %r585}586 587define dso_local i128 @atomicrmw_xchg_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {588; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acq_rel:589; CHECK:    bl __atomic_exchange590    %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 1591    ret i128 %r592}593 594define dso_local i128 @atomicrmw_xchg_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {595; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_seq_cst:596; CHECK:    bl __atomic_exchange597    %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 1598    ret i128 %r599}600 601define dso_local i8 @atomicrmw_add_i8_aligned_monotonic(ptr %ptr, i8 %value) {602; -O0-LABEL: atomicrmw_add_i8_aligned_monotonic:603; -O0:    add w12, w8, w10, uxth604; -O0:    ldaxrb w9, [x11]605; -O0:    cmp w9, w10, uxtb606; -O0:    stlxrb w8, w12, [x11]607; -O0:    and w8, w9, #0xff608; -O0:    subs w8, w8, w10, uxtb609;610; -O1-LABEL: atomicrmw_add_i8_aligned_monotonic:611; -O1:    ldxrb w8, [x0]612; -O1:    add w9, w8, w1613; -O1:    stxrb w10, w9, [x0]614    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1615    ret i8 %r616}617 618define dso_local i8 @atomicrmw_add_i8_aligned_acquire(ptr %ptr, i8 %value) {619; -O0-LABEL: atomicrmw_add_i8_aligned_acquire:620; -O0:    add w12, w8, w10, uxth621; -O0:    ldaxrb w9, [x11]622; -O0:    cmp w9, w10, uxtb623; -O0:    stlxrb w8, w12, [x11]624; -O0:    and w8, w9, #0xff625; -O0:    subs w8, w8, w10, uxtb626;627; -O1-LABEL: atomicrmw_add_i8_aligned_acquire:628; -O1:    ldaxrb w8, [x0]629; -O1:    add w9, w8, w1630; -O1:    stxrb w10, w9, [x0]631    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1632    ret i8 %r633}634 635define dso_local i8 @atomicrmw_add_i8_aligned_release(ptr %ptr, i8 %value) {636; -O0-LABEL: atomicrmw_add_i8_aligned_release:637; -O0:    add w12, w8, w10, uxth638; -O0:    ldaxrb w9, [x11]639; -O0:    cmp w9, w10, uxtb640; -O0:    stlxrb w8, w12, [x11]641; -O0:    and w8, w9, #0xff642; -O0:    subs w8, w8, w10, uxtb643;644; -O1-LABEL: atomicrmw_add_i8_aligned_release:645; -O1:    ldxrb w8, [x0]646; -O1:    add w9, w8, w1647; -O1:    stlxrb w10, w9, [x0]648    %r = atomicrmw add ptr %ptr, i8 %value release, align 1649    ret i8 %r650}651 652define dso_local i8 @atomicrmw_add_i8_aligned_acq_rel(ptr %ptr, i8 %value) {653; -O0-LABEL: atomicrmw_add_i8_aligned_acq_rel:654; -O0:    add w12, w8, w10, uxth655; -O0:    ldaxrb w9, [x11]656; -O0:    cmp w9, w10, uxtb657; -O0:    stlxrb w8, w12, [x11]658; -O0:    and w8, w9, #0xff659; -O0:    subs w8, w8, w10, uxtb660;661; -O1-LABEL: atomicrmw_add_i8_aligned_acq_rel:662; -O1:    ldaxrb w8, [x0]663; -O1:    add w9, w8, w1664; -O1:    stlxrb w10, w9, [x0]665    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1666    ret i8 %r667}668 669define dso_local i8 @atomicrmw_add_i8_aligned_seq_cst(ptr %ptr, i8 %value) {670; -O0-LABEL: atomicrmw_add_i8_aligned_seq_cst:671; -O0:    add w12, w8, w10, uxth672; -O0:    ldaxrb w9, [x11]673; -O0:    cmp w9, w10, uxtb674; -O0:    stlxrb w8, w12, [x11]675; -O0:    and w8, w9, #0xff676; -O0:    subs w8, w8, w10, uxtb677;678; -O1-LABEL: atomicrmw_add_i8_aligned_seq_cst:679; -O1:    ldaxrb w8, [x0]680; -O1:    add w9, w8, w1681; -O1:    stlxrb w10, w9, [x0]682    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1683    ret i8 %r684}685 686define dso_local i16 @atomicrmw_add_i16_aligned_monotonic(ptr %ptr, i16 %value) {687; -O0-LABEL: atomicrmw_add_i16_aligned_monotonic:688; -O0:    add w12, w9, w8, uxth689; -O0:    ldaxrh w9, [x11]690; -O0:    cmp w9, w8, uxth691; -O0:    stlxrh w10, w12, [x11]692; -O0:    subs w8, w8, w9, uxth693;694; -O1-LABEL: atomicrmw_add_i16_aligned_monotonic:695; -O1:    ldxrh w8, [x0]696; -O1:    add w9, w8, w1697; -O1:    stxrh w10, w9, [x0]698    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 2699    ret i16 %r700}701 702define dso_local i16 @atomicrmw_add_i16_aligned_acquire(ptr %ptr, i16 %value) {703; -O0-LABEL: atomicrmw_add_i16_aligned_acquire:704; -O0:    add w12, w9, w8, uxth705; -O0:    ldaxrh w9, [x11]706; -O0:    cmp w9, w8, uxth707; -O0:    stlxrh w10, w12, [x11]708; -O0:    subs w8, w8, w9, uxth709;710; -O1-LABEL: atomicrmw_add_i16_aligned_acquire:711; -O1:    ldaxrh w8, [x0]712; -O1:    add w9, w8, w1713; -O1:    stxrh w10, w9, [x0]714    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 2715    ret i16 %r716}717 718define dso_local i16 @atomicrmw_add_i16_aligned_release(ptr %ptr, i16 %value) {719; -O0-LABEL: atomicrmw_add_i16_aligned_release:720; -O0:    add w12, w9, w8, uxth721; -O0:    ldaxrh w9, [x11]722; -O0:    cmp w9, w8, uxth723; -O0:    stlxrh w10, w12, [x11]724; -O0:    subs w8, w8, w9, uxth725;726; -O1-LABEL: atomicrmw_add_i16_aligned_release:727; -O1:    ldxrh w8, [x0]728; -O1:    add w9, w8, w1729; -O1:    stlxrh w10, w9, [x0]730    %r = atomicrmw add ptr %ptr, i16 %value release, align 2731    ret i16 %r732}733 734define dso_local i16 @atomicrmw_add_i16_aligned_acq_rel(ptr %ptr, i16 %value) {735; -O0-LABEL: atomicrmw_add_i16_aligned_acq_rel:736; -O0:    add w12, w9, w8, uxth737; -O0:    ldaxrh w9, [x11]738; -O0:    cmp w9, w8, uxth739; -O0:    stlxrh w10, w12, [x11]740; -O0:    subs w8, w8, w9, uxth741;742; -O1-LABEL: atomicrmw_add_i16_aligned_acq_rel:743; -O1:    ldaxrh w8, [x0]744; -O1:    add w9, w8, w1745; -O1:    stlxrh w10, w9, [x0]746    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 2747    ret i16 %r748}749 750define dso_local i16 @atomicrmw_add_i16_aligned_seq_cst(ptr %ptr, i16 %value) {751; -O0-LABEL: atomicrmw_add_i16_aligned_seq_cst:752; -O0:    add w12, w9, w8, uxth753; -O0:    ldaxrh w9, [x11]754; -O0:    cmp w9, w8, uxth755; -O0:    stlxrh w10, w12, [x11]756; -O0:    subs w8, w8, w9, uxth757;758; -O1-LABEL: atomicrmw_add_i16_aligned_seq_cst:759; -O1:    ldaxrh w8, [x0]760; -O1:    add w9, w8, w1761; -O1:    stlxrh w10, w9, [x0]762    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 2763    ret i16 %r764}765 766define dso_local i32 @atomicrmw_add_i32_aligned_monotonic(ptr %ptr, i32 %value) {767; -O0-LABEL: atomicrmw_add_i32_aligned_monotonic:768; -O0:    add w12, w8, w9769; -O0:    ldaxr w9, [x11]770; -O0:    cmp w9, w8771; -O0:    stlxr w10, w12, [x11]772; -O0:    subs w8, w9, w8773;774; -O1-LABEL: atomicrmw_add_i32_aligned_monotonic:775; -O1:    ldxr w8, [x0]776; -O1:    add w9, w8, w1777; -O1:    stxr w10, w9, [x0]778    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 4779    ret i32 %r780}781 782define dso_local i32 @atomicrmw_add_i32_aligned_acquire(ptr %ptr, i32 %value) {783; -O0-LABEL: atomicrmw_add_i32_aligned_acquire:784; -O0:    add w12, w8, w9785; -O0:    ldaxr w9, [x11]786; -O0:    cmp w9, w8787; -O0:    stlxr w10, w12, [x11]788; -O0:    subs w8, w9, w8789;790; -O1-LABEL: atomicrmw_add_i32_aligned_acquire:791; -O1:    ldaxr w8, [x0]792; -O1:    add w9, w8, w1793; -O1:    stxr w10, w9, [x0]794    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 4795    ret i32 %r796}797 798define dso_local i32 @atomicrmw_add_i32_aligned_release(ptr %ptr, i32 %value) {799; -O0-LABEL: atomicrmw_add_i32_aligned_release:800; -O0:    add w12, w8, w9801; -O0:    ldaxr w9, [x11]802; -O0:    cmp w9, w8803; -O0:    stlxr w10, w12, [x11]804; -O0:    subs w8, w9, w8805;806; -O1-LABEL: atomicrmw_add_i32_aligned_release:807; -O1:    ldxr w8, [x0]808; -O1:    add w9, w8, w1809; -O1:    stlxr w10, w9, [x0]810    %r = atomicrmw add ptr %ptr, i32 %value release, align 4811    ret i32 %r812}813 814define dso_local i32 @atomicrmw_add_i32_aligned_acq_rel(ptr %ptr, i32 %value) {815; -O0-LABEL: atomicrmw_add_i32_aligned_acq_rel:816; -O0:    add w12, w8, w9817; -O0:    ldaxr w9, [x11]818; -O0:    cmp w9, w8819; -O0:    stlxr w10, w12, [x11]820; -O0:    subs w8, w9, w8821;822; -O1-LABEL: atomicrmw_add_i32_aligned_acq_rel:823; -O1:    ldaxr w8, [x0]824; -O1:    add w9, w8, w1825; -O1:    stlxr w10, w9, [x0]826    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 4827    ret i32 %r828}829 830define dso_local i32 @atomicrmw_add_i32_aligned_seq_cst(ptr %ptr, i32 %value) {831; -O0-LABEL: atomicrmw_add_i32_aligned_seq_cst:832; -O0:    add w12, w8, w9833; -O0:    ldaxr w9, [x11]834; -O0:    cmp w9, w8835; -O0:    stlxr w10, w12, [x11]836; -O0:    subs w8, w9, w8837;838; -O1-LABEL: atomicrmw_add_i32_aligned_seq_cst:839; -O1:    ldaxr w8, [x0]840; -O1:    add w9, w8, w1841; -O1:    stlxr w10, w9, [x0]842    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 4843    ret i32 %r844}845 846define dso_local i64 @atomicrmw_add_i64_aligned_monotonic(ptr %ptr, i64 %value) {847; -O0-LABEL: atomicrmw_add_i64_aligned_monotonic:848; -O0:    add x12, x8, x9849; -O0:    ldaxr x9, [x11]850; -O0:    cmp x9, x8851; -O0:    stlxr w10, x12, [x11]852; -O0:    subs x8, x9, x8853;854; -O1-LABEL: atomicrmw_add_i64_aligned_monotonic:855; -O1:    ldxr x0, [x8]856; -O1:    add x9, x0, x1857; -O1:    stxr w10, x9, [x8]858    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 8859    ret i64 %r860}861 862define dso_local i64 @atomicrmw_add_i64_aligned_acquire(ptr %ptr, i64 %value) {863; -O0-LABEL: atomicrmw_add_i64_aligned_acquire:864; -O0:    add x12, x8, x9865; -O0:    ldaxr x9, [x11]866; -O0:    cmp x9, x8867; -O0:    stlxr w10, x12, [x11]868; -O0:    subs x8, x9, x8869;870; -O1-LABEL: atomicrmw_add_i64_aligned_acquire:871; -O1:    ldaxr x0, [x8]872; -O1:    add x9, x0, x1873; -O1:    stxr w10, x9, [x8]874    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 8875    ret i64 %r876}877 878define dso_local i64 @atomicrmw_add_i64_aligned_release(ptr %ptr, i64 %value) {879; -O0-LABEL: atomicrmw_add_i64_aligned_release:880; -O0:    add x12, x8, x9881; -O0:    ldaxr x9, [x11]882; -O0:    cmp x9, x8883; -O0:    stlxr w10, x12, [x11]884; -O0:    subs x8, x9, x8885;886; -O1-LABEL: atomicrmw_add_i64_aligned_release:887; -O1:    ldxr x0, [x8]888; -O1:    add x9, x0, x1889; -O1:    stlxr w10, x9, [x8]890    %r = atomicrmw add ptr %ptr, i64 %value release, align 8891    ret i64 %r892}893 894define dso_local i64 @atomicrmw_add_i64_aligned_acq_rel(ptr %ptr, i64 %value) {895; -O0-LABEL: atomicrmw_add_i64_aligned_acq_rel:896; -O0:    add x12, x8, x9897; -O0:    ldaxr x9, [x11]898; -O0:    cmp x9, x8899; -O0:    stlxr w10, x12, [x11]900; -O0:    subs x8, x9, x8901;902; -O1-LABEL: atomicrmw_add_i64_aligned_acq_rel:903; -O1:    ldaxr x0, [x8]904; -O1:    add x9, x0, x1905; -O1:    stlxr w10, x9, [x8]906    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 8907    ret i64 %r908}909 910define dso_local i64 @atomicrmw_add_i64_aligned_seq_cst(ptr %ptr, i64 %value) {911; -O0-LABEL: atomicrmw_add_i64_aligned_seq_cst:912; -O0:    add x12, x8, x9913; -O0:    ldaxr x9, [x11]914; -O0:    cmp x9, x8915; -O0:    stlxr w10, x12, [x11]916; -O0:    subs x8, x9, x8917;918; -O1-LABEL: atomicrmw_add_i64_aligned_seq_cst:919; -O1:    ldaxr x0, [x8]920; -O1:    add x9, x0, x1921; -O1:    stlxr w10, x9, [x8]922    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 8923    ret i64 %r924}925 926define dso_local i128 @atomicrmw_add_i128_aligned_monotonic(ptr %ptr, i128 %value) {927; -O0-LABEL: atomicrmw_add_i128_aligned_monotonic:928; -O0:    adds x14, x8, x10929; -O0:    subs w10, w10, #1930; -O0:    ldxp x10, x9, [x11]931; -O0:    cmp x10, x12932; -O0:    cmp x9, x13933; -O0:    stxp w8, x14, x15, [x11]934; -O0:    stxp w8, x10, x9, [x11]935; -O0:    eor x8, x10, x8936; -O0:    eor x11, x9, x11937; -O0:    orr x8, x8, x11938; -O0:    subs x8, x8, #0939;940; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic:941; -O1:    ldxp x0, x1, [x8]942; -O1:    adds x9, x0, x2943; -O1:    stxp w11, x9, x10, [x8]944    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16945    ret i128 %r946}947 948define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) {949; -O0-LABEL: atomicrmw_add_i128_aligned_acquire:950; -O0:    adds x14, x8, x10951; -O0:    subs w10, w10, #1952; -O0:    ldaxp x10, x9, [x11]953; -O0:    cmp x10, x12954; -O0:    cmp x9, x13955; -O0:    stxp w8, x14, x15, [x11]956; -O0:    stxp w8, x10, x9, [x11]957; -O0:    eor x8, x10, x8958; -O0:    eor x11, x9, x11959; -O0:    orr x8, x8, x11960; -O0:    subs x8, x8, #0961;962; -O1-LABEL: atomicrmw_add_i128_aligned_acquire:963; -O1:    ldaxp x0, x1, [x8]964; -O1:    adds x9, x0, x2965; -O1:    stxp w11, x9, x10, [x8]966    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16967    ret i128 %r968}969 970define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) {971; -O0-LABEL: atomicrmw_add_i128_aligned_release:972; -O0:    adds x14, x8, x10973; -O0:    subs w10, w10, #1974; -O0:    ldxp x10, x9, [x11]975; -O0:    cmp x10, x12976; -O0:    cmp x9, x13977; -O0:    stlxp w8, x14, x15, [x11]978; -O0:    stlxp w8, x10, x9, [x11]979; -O0:    eor x8, x10, x8980; -O0:    eor x11, x9, x11981; -O0:    orr x8, x8, x11982; -O0:    subs x8, x8, #0983;984; -O1-LABEL: atomicrmw_add_i128_aligned_release:985; -O1:    ldxp x0, x1, [x8]986; -O1:    adds x9, x0, x2987; -O1:    stlxp w11, x9, x10, [x8]988    %r = atomicrmw add ptr %ptr, i128 %value release, align 16989    ret i128 %r990}991 992define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) {993; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel:994; -O0:    adds x14, x8, x10995; -O0:    subs w10, w10, #1996; -O0:    ldaxp x10, x9, [x11]997; -O0:    cmp x10, x12998; -O0:    cmp x9, x13999; -O0:    stlxp w8, x14, x15, [x11]1000; -O0:    stlxp w8, x10, x9, [x11]1001; -O0:    eor x8, x10, x81002; -O0:    eor x11, x9, x111003; -O0:    orr x8, x8, x111004; -O0:    subs x8, x8, #01005;1006; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel:1007; -O1:    ldaxp x0, x1, [x8]1008; -O1:    adds x9, x0, x21009; -O1:    stlxp w11, x9, x10, [x8]1010    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 161011    ret i128 %r1012}1013 1014define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1015; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst:1016; -O0:    adds x14, x8, x101017; -O0:    subs w10, w10, #11018; -O0:    ldaxp x10, x9, [x11]1019; -O0:    cmp x10, x121020; -O0:    cmp x9, x131021; -O0:    stlxp w8, x14, x15, [x11]1022; -O0:    stlxp w8, x10, x9, [x11]1023; -O0:    eor x8, x10, x81024; -O0:    eor x11, x9, x111025; -O0:    orr x8, x8, x111026; -O0:    subs x8, x8, #01027;1028; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst:1029; -O1:    ldaxp x0, x1, [x8]1030; -O1:    adds x9, x0, x21031; -O1:    stlxp w11, x9, x10, [x8]1032    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 161033    ret i128 %r1034}1035 1036define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1037; -O0-LABEL: atomicrmw_add_i8_unaligned_monotonic:1038; -O0:    add w12, w8, w10, uxth1039; -O0:    ldaxrb w9, [x11]1040; -O0:    cmp w9, w10, uxtb1041; -O0:    stlxrb w8, w12, [x11]1042; -O0:    and w8, w9, #0xff1043; -O0:    subs w8, w8, w10, uxtb1044;1045; -O1-LABEL: atomicrmw_add_i8_unaligned_monotonic:1046; -O1:    ldxrb w8, [x0]1047; -O1:    add w9, w8, w11048; -O1:    stxrb w10, w9, [x0]1049    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 11050    ret i8 %r1051}1052 1053define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) {1054; -O0-LABEL: atomicrmw_add_i8_unaligned_acquire:1055; -O0:    add w12, w8, w10, uxth1056; -O0:    ldaxrb w9, [x11]1057; -O0:    cmp w9, w10, uxtb1058; -O0:    stlxrb w8, w12, [x11]1059; -O0:    and w8, w9, #0xff1060; -O0:    subs w8, w8, w10, uxtb1061;1062; -O1-LABEL: atomicrmw_add_i8_unaligned_acquire:1063; -O1:    ldaxrb w8, [x0]1064; -O1:    add w9, w8, w11065; -O1:    stxrb w10, w9, [x0]1066    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 11067    ret i8 %r1068}1069 1070define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) {1071; -O0-LABEL: atomicrmw_add_i8_unaligned_release:1072; -O0:    add w12, w8, w10, uxth1073; -O0:    ldaxrb w9, [x11]1074; -O0:    cmp w9, w10, uxtb1075; -O0:    stlxrb w8, w12, [x11]1076; -O0:    and w8, w9, #0xff1077; -O0:    subs w8, w8, w10, uxtb1078;1079; -O1-LABEL: atomicrmw_add_i8_unaligned_release:1080; -O1:    ldxrb w8, [x0]1081; -O1:    add w9, w8, w11082; -O1:    stlxrb w10, w9, [x0]1083    %r = atomicrmw add ptr %ptr, i8 %value release, align 11084    ret i8 %r1085}1086 1087define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1088; -O0-LABEL: atomicrmw_add_i8_unaligned_acq_rel:1089; -O0:    add w12, w8, w10, uxth1090; -O0:    ldaxrb w9, [x11]1091; -O0:    cmp w9, w10, uxtb1092; -O0:    stlxrb w8, w12, [x11]1093; -O0:    and w8, w9, #0xff1094; -O0:    subs w8, w8, w10, uxtb1095;1096; -O1-LABEL: atomicrmw_add_i8_unaligned_acq_rel:1097; -O1:    ldaxrb w8, [x0]1098; -O1:    add w9, w8, w11099; -O1:    stlxrb w10, w9, [x0]1100    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 11101    ret i8 %r1102}1103 1104define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1105; -O0-LABEL: atomicrmw_add_i8_unaligned_seq_cst:1106; -O0:    add w12, w8, w10, uxth1107; -O0:    ldaxrb w9, [x11]1108; -O0:    cmp w9, w10, uxtb1109; -O0:    stlxrb w8, w12, [x11]1110; -O0:    and w8, w9, #0xff1111; -O0:    subs w8, w8, w10, uxtb1112;1113; -O1-LABEL: atomicrmw_add_i8_unaligned_seq_cst:1114; -O1:    ldaxrb w8, [x0]1115; -O1:    add w9, w8, w11116; -O1:    stlxrb w10, w9, [x0]1117    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 11118    ret i8 %r1119}1120 1121define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1122; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic:1123; -O0:    add w8, w8, w9, uxth1124; -O0:    bl __atomic_compare_exchange1125;1126; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic:1127; -O1:    add w8, w0, w201128; -O1:    bl __atomic_compare_exchange1129    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 11130    ret i16 %r1131}1132 1133define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) {1134; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire:1135; -O0:    add w8, w8, w9, uxth1136; -O0:    bl __atomic_compare_exchange1137;1138; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire:1139; -O1:    add w8, w0, w201140; -O1:    bl __atomic_compare_exchange1141    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 11142    ret i16 %r1143}1144 1145define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) {1146; -O0-LABEL: atomicrmw_add_i16_unaligned_release:1147; -O0:    add w8, w8, w9, uxth1148; -O0:    bl __atomic_compare_exchange1149;1150; -O1-LABEL: atomicrmw_add_i16_unaligned_release:1151; -O1:    add w8, w0, w201152; -O1:    bl __atomic_compare_exchange1153    %r = atomicrmw add ptr %ptr, i16 %value release, align 11154    ret i16 %r1155}1156 1157define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1158; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel:1159; -O0:    add w8, w8, w9, uxth1160; -O0:    bl __atomic_compare_exchange1161;1162; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel:1163; -O1:    add w8, w0, w201164; -O1:    bl __atomic_compare_exchange1165    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 11166    ret i16 %r1167}1168 1169define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1170; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst:1171; -O0:    add w8, w8, w9, uxth1172; -O0:    bl __atomic_compare_exchange1173;1174; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst:1175; -O1:    add w8, w0, w201176; -O1:    bl __atomic_compare_exchange1177    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 11178    ret i16 %r1179}1180 1181define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1182; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic:1183; -O0:    add w8, w9, w81184; -O0:    bl __atomic_compare_exchange1185;1186; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic:1187; -O1:    add w8, w0, w201188; -O1:    bl __atomic_compare_exchange1189    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 11190    ret i32 %r1191}1192 1193define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) {1194; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire:1195; -O0:    add w8, w9, w81196; -O0:    bl __atomic_compare_exchange1197;1198; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire:1199; -O1:    add w8, w0, w201200; -O1:    bl __atomic_compare_exchange1201    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 11202    ret i32 %r1203}1204 1205define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) {1206; -O0-LABEL: atomicrmw_add_i32_unaligned_release:1207; -O0:    add w8, w9, w81208; -O0:    bl __atomic_compare_exchange1209;1210; -O1-LABEL: atomicrmw_add_i32_unaligned_release:1211; -O1:    add w8, w0, w201212; -O1:    bl __atomic_compare_exchange1213    %r = atomicrmw add ptr %ptr, i32 %value release, align 11214    ret i32 %r1215}1216 1217define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1218; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel:1219; -O0:    add w8, w9, w81220; -O0:    bl __atomic_compare_exchange1221;1222; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel:1223; -O1:    add w8, w0, w201224; -O1:    bl __atomic_compare_exchange1225    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 11226    ret i32 %r1227}1228 1229define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1230; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst:1231; -O0:    add w8, w9, w81232; -O0:    bl __atomic_compare_exchange1233;1234; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst:1235; -O1:    add w8, w0, w201236; -O1:    bl __atomic_compare_exchange1237    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 11238    ret i32 %r1239}1240 1241define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1242; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic:1243; -O0:    add x8, x9, x81244; -O0:    bl __atomic_compare_exchange1245;1246; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic:1247; -O1:    add x8, x0, x201248; -O1:    bl __atomic_compare_exchange1249    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 11250    ret i64 %r1251}1252 1253define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) {1254; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire:1255; -O0:    add x8, x9, x81256; -O0:    bl __atomic_compare_exchange1257;1258; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire:1259; -O1:    add x8, x0, x201260; -O1:    bl __atomic_compare_exchange1261    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 11262    ret i64 %r1263}1264 1265define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) {1266; -O0-LABEL: atomicrmw_add_i64_unaligned_release:1267; -O0:    add x8, x9, x81268; -O0:    bl __atomic_compare_exchange1269;1270; -O1-LABEL: atomicrmw_add_i64_unaligned_release:1271; -O1:    add x8, x0, x201272; -O1:    bl __atomic_compare_exchange1273    %r = atomicrmw add ptr %ptr, i64 %value release, align 11274    ret i64 %r1275}1276 1277define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1278; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel:1279; -O0:    add x8, x9, x81280; -O0:    bl __atomic_compare_exchange1281;1282; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel:1283; -O1:    add x8, x0, x201284; -O1:    bl __atomic_compare_exchange1285    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 11286    ret i64 %r1287}1288 1289define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1290; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst:1291; -O0:    add x8, x9, x81292; -O0:    bl __atomic_compare_exchange1293;1294; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst:1295; -O1:    add x8, x0, x201296; -O1:    bl __atomic_compare_exchange1297    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 11298    ret i64 %r1299}1300 1301define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1302; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic:1303; -O0:    adds x9, x8, x91304; -O0:    subs w11, w11, #11305; -O0:    bl __atomic_compare_exchange1306;1307; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic:1308; -O1:    ldp x0, x1, [x0]1309; -O1:    adds x8, x0, x211310; -O1:    bl __atomic_compare_exchange1311    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 11312    ret i128 %r1313}1314 1315define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) {1316; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire:1317; -O0:    adds x9, x8, x91318; -O0:    subs w11, w11, #11319; -O0:    bl __atomic_compare_exchange1320;1321; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire:1322; -O1:    ldp x0, x1, [x0]1323; -O1:    adds x8, x0, x211324; -O1:    bl __atomic_compare_exchange1325    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 11326    ret i128 %r1327}1328 1329define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) {1330; -O0-LABEL: atomicrmw_add_i128_unaligned_release:1331; -O0:    adds x9, x8, x91332; -O0:    subs w11, w11, #11333; -O0:    bl __atomic_compare_exchange1334;1335; -O1-LABEL: atomicrmw_add_i128_unaligned_release:1336; -O1:    ldp x0, x1, [x0]1337; -O1:    adds x8, x0, x211338; -O1:    bl __atomic_compare_exchange1339    %r = atomicrmw add ptr %ptr, i128 %value release, align 11340    ret i128 %r1341}1342 1343define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1344; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel:1345; -O0:    adds x9, x8, x91346; -O0:    subs w11, w11, #11347; -O0:    bl __atomic_compare_exchange1348;1349; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel:1350; -O1:    ldp x0, x1, [x0]1351; -O1:    adds x8, x0, x211352; -O1:    bl __atomic_compare_exchange1353    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 11354    ret i128 %r1355}1356 1357define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1358; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst:1359; -O0:    adds x9, x8, x91360; -O0:    subs w11, w11, #11361; -O0:    bl __atomic_compare_exchange1362;1363; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst:1364; -O1:    ldp x0, x1, [x0]1365; -O1:    adds x8, x0, x211366; -O1:    bl __atomic_compare_exchange1367    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 11368    ret i128 %r1369}1370 1371define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) {1372; -O0-LABEL: atomicrmw_sub_i8_aligned_monotonic:1373; -O0:    subs w12, w10, w81374; -O0:    ldaxrb w9, [x11]1375; -O0:    cmp w9, w10, uxtb1376; -O0:    stlxrb w8, w12, [x11]1377; -O0:    and w8, w9, #0xff1378; -O0:    subs w8, w8, w10, uxtb1379;1380; -O1-LABEL: atomicrmw_sub_i8_aligned_monotonic:1381; -O1:    ldxrb w8, [x0]1382; -O1:    sub w9, w8, w11383; -O1:    stxrb w10, w9, [x0]1384    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11385    ret i8 %r1386}1387 1388define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) {1389; -O0-LABEL: atomicrmw_sub_i8_aligned_acquire:1390; -O0:    subs w12, w10, w81391; -O0:    ldaxrb w9, [x11]1392; -O0:    cmp w9, w10, uxtb1393; -O0:    stlxrb w8, w12, [x11]1394; -O0:    and w8, w9, #0xff1395; -O0:    subs w8, w8, w10, uxtb1396;1397; -O1-LABEL: atomicrmw_sub_i8_aligned_acquire:1398; -O1:    ldaxrb w8, [x0]1399; -O1:    sub w9, w8, w11400; -O1:    stxrb w10, w9, [x0]1401    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11402    ret i8 %r1403}1404 1405define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) {1406; -O0-LABEL: atomicrmw_sub_i8_aligned_release:1407; -O0:    subs w12, w10, w81408; -O0:    ldaxrb w9, [x11]1409; -O0:    cmp w9, w10, uxtb1410; -O0:    stlxrb w8, w12, [x11]1411; -O0:    and w8, w9, #0xff1412; -O0:    subs w8, w8, w10, uxtb1413;1414; -O1-LABEL: atomicrmw_sub_i8_aligned_release:1415; -O1:    ldxrb w8, [x0]1416; -O1:    sub w9, w8, w11417; -O1:    stlxrb w10, w9, [x0]1418    %r = atomicrmw sub ptr %ptr, i8 %value release, align 11419    ret i8 %r1420}1421 1422define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) {1423; -O0-LABEL: atomicrmw_sub_i8_aligned_acq_rel:1424; -O0:    subs w12, w10, w81425; -O0:    ldaxrb w9, [x11]1426; -O0:    cmp w9, w10, uxtb1427; -O0:    stlxrb w8, w12, [x11]1428; -O0:    and w8, w9, #0xff1429; -O0:    subs w8, w8, w10, uxtb1430;1431; -O1-LABEL: atomicrmw_sub_i8_aligned_acq_rel:1432; -O1:    ldaxrb w8, [x0]1433; -O1:    sub w9, w8, w11434; -O1:    stlxrb w10, w9, [x0]1435    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11436    ret i8 %r1437}1438 1439define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) {1440; -O0-LABEL: atomicrmw_sub_i8_aligned_seq_cst:1441; -O0:    subs w12, w10, w81442; -O0:    ldaxrb w9, [x11]1443; -O0:    cmp w9, w10, uxtb1444; -O0:    stlxrb w8, w12, [x11]1445; -O0:    and w8, w9, #0xff1446; -O0:    subs w8, w8, w10, uxtb1447;1448; -O1-LABEL: atomicrmw_sub_i8_aligned_seq_cst:1449; -O1:    ldaxrb w8, [x0]1450; -O1:    sub w9, w8, w11451; -O1:    stlxrb w10, w9, [x0]1452    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11453    ret i8 %r1454}1455 1456define dso_local i16 @atomicrmw_sub_i16_aligned_monotonic(ptr %ptr, i16 %value) {1457; -O0-LABEL: atomicrmw_sub_i16_aligned_monotonic:1458; -O0:    subs w12, w8, w91459; -O0:    ldaxrh w9, [x11]1460; -O0:    cmp w9, w8, uxth1461; -O0:    stlxrh w10, w12, [x11]1462; -O0:    subs w8, w8, w9, uxth1463;1464; -O1-LABEL: atomicrmw_sub_i16_aligned_monotonic:1465; -O1:    ldxrh w8, [x0]1466; -O1:    sub w9, w8, w11467; -O1:    stxrh w10, w9, [x0]1468    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 21469    ret i16 %r1470}1471 1472define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) {1473; -O0-LABEL: atomicrmw_sub_i16_aligned_acquire:1474; -O0:    subs w12, w8, w91475; -O0:    ldaxrh w9, [x11]1476; -O0:    cmp w9, w8, uxth1477; -O0:    stlxrh w10, w12, [x11]1478; -O0:    subs w8, w8, w9, uxth1479;1480; -O1-LABEL: atomicrmw_sub_i16_aligned_acquire:1481; -O1:    ldaxrh w8, [x0]1482; -O1:    sub w9, w8, w11483; -O1:    stxrh w10, w9, [x0]1484    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 21485    ret i16 %r1486}1487 1488define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) {1489; -O0-LABEL: atomicrmw_sub_i16_aligned_release:1490; -O0:    subs w12, w8, w91491; -O0:    ldaxrh w9, [x11]1492; -O0:    cmp w9, w8, uxth1493; -O0:    stlxrh w10, w12, [x11]1494; -O0:    subs w8, w8, w9, uxth1495;1496; -O1-LABEL: atomicrmw_sub_i16_aligned_release:1497; -O1:    ldxrh w8, [x0]1498; -O1:    sub w9, w8, w11499; -O1:    stlxrh w10, w9, [x0]1500    %r = atomicrmw sub ptr %ptr, i16 %value release, align 21501    ret i16 %r1502}1503 1504define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) {1505; -O0-LABEL: atomicrmw_sub_i16_aligned_acq_rel:1506; -O0:    subs w12, w8, w91507; -O0:    ldaxrh w9, [x11]1508; -O0:    cmp w9, w8, uxth1509; -O0:    stlxrh w10, w12, [x11]1510; -O0:    subs w8, w8, w9, uxth1511;1512; -O1-LABEL: atomicrmw_sub_i16_aligned_acq_rel:1513; -O1:    ldaxrh w8, [x0]1514; -O1:    sub w9, w8, w11515; -O1:    stlxrh w10, w9, [x0]1516    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 21517    ret i16 %r1518}1519 1520define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1521; -O0-LABEL: atomicrmw_sub_i16_aligned_seq_cst:1522; -O0:    subs w12, w8, w91523; -O0:    ldaxrh w9, [x11]1524; -O0:    cmp w9, w8, uxth1525; -O0:    stlxrh w10, w12, [x11]1526; -O0:    subs w8, w8, w9, uxth1527;1528; -O1-LABEL: atomicrmw_sub_i16_aligned_seq_cst:1529; -O1:    ldaxrh w8, [x0]1530; -O1:    sub w9, w8, w11531; -O1:    stlxrh w10, w9, [x0]1532    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 21533    ret i16 %r1534}1535 1536define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) {1537; -O0-LABEL: atomicrmw_sub_i32_aligned_monotonic:1538; -O0:    subs w12, w8, w91539; -O0:    ldaxr w9, [x11]1540; -O0:    cmp w9, w81541; -O0:    stlxr w10, w12, [x11]1542; -O0:    subs w8, w9, w81543;1544; -O1-LABEL: atomicrmw_sub_i32_aligned_monotonic:1545; -O1:    ldxr w8, [x0]1546; -O1:    sub w9, w8, w11547; -O1:    stxr w10, w9, [x0]1548    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 41549    ret i32 %r1550}1551 1552define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) {1553; -O0-LABEL: atomicrmw_sub_i32_aligned_acquire:1554; -O0:    subs w12, w8, w91555; -O0:    ldaxr w9, [x11]1556; -O0:    cmp w9, w81557; -O0:    stlxr w10, w12, [x11]1558; -O0:    subs w8, w9, w81559;1560; -O1-LABEL: atomicrmw_sub_i32_aligned_acquire:1561; -O1:    ldaxr w8, [x0]1562; -O1:    sub w9, w8, w11563; -O1:    stxr w10, w9, [x0]1564    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 41565    ret i32 %r1566}1567 1568define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) {1569; -O0-LABEL: atomicrmw_sub_i32_aligned_release:1570; -O0:    subs w12, w8, w91571; -O0:    ldaxr w9, [x11]1572; -O0:    cmp w9, w81573; -O0:    stlxr w10, w12, [x11]1574; -O0:    subs w8, w9, w81575;1576; -O1-LABEL: atomicrmw_sub_i32_aligned_release:1577; -O1:    ldxr w8, [x0]1578; -O1:    sub w9, w8, w11579; -O1:    stlxr w10, w9, [x0]1580    %r = atomicrmw sub ptr %ptr, i32 %value release, align 41581    ret i32 %r1582}1583 1584define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1585; -O0-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1586; -O0:    subs w12, w8, w91587; -O0:    ldaxr w9, [x11]1588; -O0:    cmp w9, w81589; -O0:    stlxr w10, w12, [x11]1590; -O0:    subs w8, w9, w81591;1592; -O1-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1593; -O1:    ldaxr w8, [x0]1594; -O1:    sub w9, w8, w11595; -O1:    stlxr w10, w9, [x0]1596    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 41597    ret i32 %r1598}1599 1600define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1601; -O0-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1602; -O0:    subs w12, w8, w91603; -O0:    ldaxr w9, [x11]1604; -O0:    cmp w9, w81605; -O0:    stlxr w10, w12, [x11]1606; -O0:    subs w8, w9, w81607;1608; -O1-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1609; -O1:    ldaxr w8, [x0]1610; -O1:    sub w9, w8, w11611; -O1:    stlxr w10, w9, [x0]1612    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 41613    ret i32 %r1614}1615 1616define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) {1617; -O0-LABEL: atomicrmw_sub_i64_aligned_monotonic:1618; -O0:    subs x12, x8, x91619; -O0:    ldaxr x9, [x11]1620; -O0:    cmp x9, x81621; -O0:    stlxr w10, x12, [x11]1622; -O0:    subs x8, x9, x81623;1624; -O1-LABEL: atomicrmw_sub_i64_aligned_monotonic:1625; -O1:    ldxr x0, [x8]1626; -O1:    sub x9, x0, x11627; -O1:    stxr w10, x9, [x8]1628    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 81629    ret i64 %r1630}1631 1632define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) {1633; -O0-LABEL: atomicrmw_sub_i64_aligned_acquire:1634; -O0:    subs x12, x8, x91635; -O0:    ldaxr x9, [x11]1636; -O0:    cmp x9, x81637; -O0:    stlxr w10, x12, [x11]1638; -O0:    subs x8, x9, x81639;1640; -O1-LABEL: atomicrmw_sub_i64_aligned_acquire:1641; -O1:    ldaxr x0, [x8]1642; -O1:    sub x9, x0, x11643; -O1:    stxr w10, x9, [x8]1644    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 81645    ret i64 %r1646}1647 1648define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) {1649; -O0-LABEL: atomicrmw_sub_i64_aligned_release:1650; -O0:    subs x12, x8, x91651; -O0:    ldaxr x9, [x11]1652; -O0:    cmp x9, x81653; -O0:    stlxr w10, x12, [x11]1654; -O0:    subs x8, x9, x81655;1656; -O1-LABEL: atomicrmw_sub_i64_aligned_release:1657; -O1:    ldxr x0, [x8]1658; -O1:    sub x9, x0, x11659; -O1:    stlxr w10, x9, [x8]1660    %r = atomicrmw sub ptr %ptr, i64 %value release, align 81661    ret i64 %r1662}1663 1664define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1665; -O0-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1666; -O0:    subs x12, x8, x91667; -O0:    ldaxr x9, [x11]1668; -O0:    cmp x9, x81669; -O0:    stlxr w10, x12, [x11]1670; -O0:    subs x8, x9, x81671;1672; -O1-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1673; -O1:    ldaxr x0, [x8]1674; -O1:    sub x9, x0, x11675; -O1:    stlxr w10, x9, [x8]1676    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 81677    ret i64 %r1678}1679 1680define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1681; -O0-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1682; -O0:    subs x12, x8, x91683; -O0:    ldaxr x9, [x11]1684; -O0:    cmp x9, x81685; -O0:    stlxr w10, x12, [x11]1686; -O0:    subs x8, x9, x81687;1688; -O1-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1689; -O1:    ldaxr x0, [x8]1690; -O1:    sub x9, x0, x11691; -O1:    stlxr w10, x9, [x8]1692    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 81693    ret i64 %r1694}1695 1696define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) {1697; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic:1698; -O0:    subs x14, x8, x101699; -O0:    ldxp x10, x9, [x11]1700; -O0:    cmp x10, x121701; -O0:    cmp x9, x131702; -O0:    stxp w8, x14, x15, [x11]1703; -O0:    stxp w8, x10, x9, [x11]1704; -O0:    eor x8, x10, x81705; -O0:    eor x11, x9, x111706; -O0:    orr x8, x8, x111707; -O0:    subs x8, x8, #01708;1709; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic:1710; -O1:    ldxp x0, x1, [x8]1711; -O1:    subs x9, x0, x21712; -O1:    stxp w11, x9, x10, [x8]1713    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 161714    ret i128 %r1715}1716 1717define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) {1718; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire:1719; -O0:    subs x14, x8, x101720; -O0:    ldaxp x10, x9, [x11]1721; -O0:    cmp x10, x121722; -O0:    cmp x9, x131723; -O0:    stxp w8, x14, x15, [x11]1724; -O0:    stxp w8, x10, x9, [x11]1725; -O0:    eor x8, x10, x81726; -O0:    eor x11, x9, x111727; -O0:    orr x8, x8, x111728; -O0:    subs x8, x8, #01729;1730; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire:1731; -O1:    ldaxp x0, x1, [x8]1732; -O1:    subs x9, x0, x21733; -O1:    stxp w11, x9, x10, [x8]1734    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 161735    ret i128 %r1736}1737 1738define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) {1739; -O0-LABEL: atomicrmw_sub_i128_aligned_release:1740; -O0:    subs x14, x8, x101741; -O0:    ldxp x10, x9, [x11]1742; -O0:    cmp x10, x121743; -O0:    cmp x9, x131744; -O0:    stlxp w8, x14, x15, [x11]1745; -O0:    stlxp w8, x10, x9, [x11]1746; -O0:    eor x8, x10, x81747; -O0:    eor x11, x9, x111748; -O0:    orr x8, x8, x111749; -O0:    subs x8, x8, #01750;1751; -O1-LABEL: atomicrmw_sub_i128_aligned_release:1752; -O1:    ldxp x0, x1, [x8]1753; -O1:    subs x9, x0, x21754; -O1:    stlxp w11, x9, x10, [x8]1755    %r = atomicrmw sub ptr %ptr, i128 %value release, align 161756    ret i128 %r1757}1758 1759define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1760; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1761; -O0:    subs x14, x8, x101762; -O0:    ldaxp x10, x9, [x11]1763; -O0:    cmp x10, x121764; -O0:    cmp x9, x131765; -O0:    stlxp w8, x14, x15, [x11]1766; -O0:    stlxp w8, x10, x9, [x11]1767; -O0:    eor x8, x10, x81768; -O0:    eor x11, x9, x111769; -O0:    orr x8, x8, x111770; -O0:    subs x8, x8, #01771;1772; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1773; -O1:    ldaxp x0, x1, [x8]1774; -O1:    subs x9, x0, x21775; -O1:    stlxp w11, x9, x10, [x8]1776    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 161777    ret i128 %r1778}1779 1780define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1781; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1782; -O0:    subs x14, x8, x101783; -O0:    ldaxp x10, x9, [x11]1784; -O0:    cmp x10, x121785; -O0:    cmp x9, x131786; -O0:    stlxp w8, x14, x15, [x11]1787; -O0:    stlxp w8, x10, x9, [x11]1788; -O0:    eor x8, x10, x81789; -O0:    eor x11, x9, x111790; -O0:    orr x8, x8, x111791; -O0:    subs x8, x8, #01792;1793; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1794; -O1:    ldaxp x0, x1, [x8]1795; -O1:    subs x9, x0, x21796; -O1:    stlxp w11, x9, x10, [x8]1797    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 161798    ret i128 %r1799}1800 1801define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1802; -O0-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1803; -O0:    subs w12, w10, w81804; -O0:    ldaxrb w9, [x11]1805; -O0:    cmp w9, w10, uxtb1806; -O0:    stlxrb w8, w12, [x11]1807; -O0:    and w8, w9, #0xff1808; -O0:    subs w8, w8, w10, uxtb1809;1810; -O1-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1811; -O1:    ldxrb w8, [x0]1812; -O1:    sub w9, w8, w11813; -O1:    stxrb w10, w9, [x0]1814    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11815    ret i8 %r1816}1817 1818define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) {1819; -O0-LABEL: atomicrmw_sub_i8_unaligned_acquire:1820; -O0:    subs w12, w10, w81821; -O0:    ldaxrb w9, [x11]1822; -O0:    cmp w9, w10, uxtb1823; -O0:    stlxrb w8, w12, [x11]1824; -O0:    and w8, w9, #0xff1825; -O0:    subs w8, w8, w10, uxtb1826;1827; -O1-LABEL: atomicrmw_sub_i8_unaligned_acquire:1828; -O1:    ldaxrb w8, [x0]1829; -O1:    sub w9, w8, w11830; -O1:    stxrb w10, w9, [x0]1831    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11832    ret i8 %r1833}1834 1835define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) {1836; -O0-LABEL: atomicrmw_sub_i8_unaligned_release:1837; -O0:    subs w12, w10, w81838; -O0:    ldaxrb w9, [x11]1839; -O0:    cmp w9, w10, uxtb1840; -O0:    stlxrb w8, w12, [x11]1841; -O0:    and w8, w9, #0xff1842; -O0:    subs w8, w8, w10, uxtb1843;1844; -O1-LABEL: atomicrmw_sub_i8_unaligned_release:1845; -O1:    ldxrb w8, [x0]1846; -O1:    sub w9, w8, w11847; -O1:    stlxrb w10, w9, [x0]1848    %r = atomicrmw sub ptr %ptr, i8 %value release, align 11849    ret i8 %r1850}1851 1852define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1853; -O0-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1854; -O0:    subs w12, w10, w81855; -O0:    ldaxrb w9, [x11]1856; -O0:    cmp w9, w10, uxtb1857; -O0:    stlxrb w8, w12, [x11]1858; -O0:    and w8, w9, #0xff1859; -O0:    subs w8, w8, w10, uxtb1860;1861; -O1-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1862; -O1:    ldaxrb w8, [x0]1863; -O1:    sub w9, w8, w11864; -O1:    stlxrb w10, w9, [x0]1865    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11866    ret i8 %r1867}1868 1869define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1870; -O0-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1871; -O0:    subs w12, w10, w81872; -O0:    ldaxrb w9, [x11]1873; -O0:    cmp w9, w10, uxtb1874; -O0:    stlxrb w8, w12, [x11]1875; -O0:    and w8, w9, #0xff1876; -O0:    subs w8, w8, w10, uxtb1877;1878; -O1-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1879; -O1:    ldaxrb w8, [x0]1880; -O1:    sub w9, w8, w11881; -O1:    stlxrb w10, w9, [x0]1882    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11883    ret i8 %r1884}1885 1886define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1887; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1888; -O0:    subs w8, w9, w81889; -O0:    bl __atomic_compare_exchange1890;1891; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1892; -O1:    sub w8, w0, w201893; -O1:    bl __atomic_compare_exchange1894    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 11895    ret i16 %r1896}1897 1898define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) {1899; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire:1900; -O0:    subs w8, w9, w81901; -O0:    bl __atomic_compare_exchange1902;1903; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire:1904; -O1:    sub w8, w0, w201905; -O1:    bl __atomic_compare_exchange1906    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 11907    ret i16 %r1908}1909 1910define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) {1911; -O0-LABEL: atomicrmw_sub_i16_unaligned_release:1912; -O0:    subs w8, w9, w81913; -O0:    bl __atomic_compare_exchange1914;1915; -O1-LABEL: atomicrmw_sub_i16_unaligned_release:1916; -O1:    sub w8, w0, w201917; -O1:    bl __atomic_compare_exchange1918    %r = atomicrmw sub ptr %ptr, i16 %value release, align 11919    ret i16 %r1920}1921 1922define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1923; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1924; -O0:    subs w8, w9, w81925; -O0:    bl __atomic_compare_exchange1926;1927; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1928; -O1:    sub w8, w0, w201929; -O1:    bl __atomic_compare_exchange1930    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 11931    ret i16 %r1932}1933 1934define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1935; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1936; -O0:    subs w8, w9, w81937; -O0:    bl __atomic_compare_exchange1938;1939; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1940; -O1:    sub w8, w0, w201941; -O1:    bl __atomic_compare_exchange1942    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 11943    ret i16 %r1944}1945 1946define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1947; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1948; -O0:    subs w8, w9, w81949; -O0:    bl __atomic_compare_exchange1950;1951; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1952; -O1:    sub w8, w0, w201953; -O1:    bl __atomic_compare_exchange1954    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 11955    ret i32 %r1956}1957 1958define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) {1959; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire:1960; -O0:    subs w8, w9, w81961; -O0:    bl __atomic_compare_exchange1962;1963; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire:1964; -O1:    sub w8, w0, w201965; -O1:    bl __atomic_compare_exchange1966    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 11967    ret i32 %r1968}1969 1970define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) {1971; -O0-LABEL: atomicrmw_sub_i32_unaligned_release:1972; -O0:    subs w8, w9, w81973; -O0:    bl __atomic_compare_exchange1974;1975; -O1-LABEL: atomicrmw_sub_i32_unaligned_release:1976; -O1:    sub w8, w0, w201977; -O1:    bl __atomic_compare_exchange1978    %r = atomicrmw sub ptr %ptr, i32 %value release, align 11979    ret i32 %r1980}1981 1982define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1983; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1984; -O0:    subs w8, w9, w81985; -O0:    bl __atomic_compare_exchange1986;1987; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1988; -O1:    sub w8, w0, w201989; -O1:    bl __atomic_compare_exchange1990    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 11991    ret i32 %r1992}1993 1994define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1995; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1996; -O0:    subs w8, w9, w81997; -O0:    bl __atomic_compare_exchange1998;1999; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:2000; -O1:    sub w8, w0, w202001; -O1:    bl __atomic_compare_exchange2002    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 12003    ret i32 %r2004}2005 2006define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2007; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic:2008; -O0:    subs x8, x9, x82009; -O0:    bl __atomic_compare_exchange2010;2011; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic:2012; -O1:    sub x8, x0, x202013; -O1:    bl __atomic_compare_exchange2014    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 12015    ret i64 %r2016}2017 2018define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) {2019; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire:2020; -O0:    subs x8, x9, x82021; -O0:    bl __atomic_compare_exchange2022;2023; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire:2024; -O1:    sub x8, x0, x202025; -O1:    bl __atomic_compare_exchange2026    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 12027    ret i64 %r2028}2029 2030define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) {2031; -O0-LABEL: atomicrmw_sub_i64_unaligned_release:2032; -O0:    subs x8, x9, x82033; -O0:    bl __atomic_compare_exchange2034;2035; -O1-LABEL: atomicrmw_sub_i64_unaligned_release:2036; -O1:    sub x8, x0, x202037; -O1:    bl __atomic_compare_exchange2038    %r = atomicrmw sub ptr %ptr, i64 %value release, align 12039    ret i64 %r2040}2041 2042define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2043; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:2044; -O0:    subs x8, x9, x82045; -O0:    bl __atomic_compare_exchange2046;2047; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:2048; -O1:    sub x8, x0, x202049; -O1:    bl __atomic_compare_exchange2050    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 12051    ret i64 %r2052}2053 2054define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2055; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:2056; -O0:    subs x8, x9, x82057; -O0:    bl __atomic_compare_exchange2058;2059; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:2060; -O1:    sub x8, x0, x202061; -O1:    bl __atomic_compare_exchange2062    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 12063    ret i64 %r2064}2065 2066define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2067; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic:2068; -O0:    subs x9, x8, x92069; -O0:    bl __atomic_compare_exchange2070;2071; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic:2072; -O1:    ldp x0, x1, [x0]2073; -O1:    subs x8, x0, x212074; -O1:    bl __atomic_compare_exchange2075    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 12076    ret i128 %r2077}2078 2079define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) {2080; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire:2081; -O0:    subs x9, x8, x92082; -O0:    bl __atomic_compare_exchange2083;2084; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire:2085; -O1:    ldp x0, x1, [x0]2086; -O1:    subs x8, x0, x212087; -O1:    bl __atomic_compare_exchange2088    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 12089    ret i128 %r2090}2091 2092define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) {2093; -O0-LABEL: atomicrmw_sub_i128_unaligned_release:2094; -O0:    subs x9, x8, x92095; -O0:    bl __atomic_compare_exchange2096;2097; -O1-LABEL: atomicrmw_sub_i128_unaligned_release:2098; -O1:    ldp x0, x1, [x0]2099; -O1:    subs x8, x0, x212100; -O1:    bl __atomic_compare_exchange2101    %r = atomicrmw sub ptr %ptr, i128 %value release, align 12102    ret i128 %r2103}2104 2105define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2106; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:2107; -O0:    subs x9, x8, x92108; -O0:    bl __atomic_compare_exchange2109;2110; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:2111; -O1:    ldp x0, x1, [x0]2112; -O1:    subs x8, x0, x212113; -O1:    bl __atomic_compare_exchange2114    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 12115    ret i128 %r2116}2117 2118define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2119; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:2120; -O0:    subs x9, x8, x92121; -O0:    bl __atomic_compare_exchange2122;2123; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:2124; -O1:    ldp x0, x1, [x0]2125; -O1:    subs x8, x0, x212126; -O1:    bl __atomic_compare_exchange2127    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 12128    ret i128 %r2129}2130 2131define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) {2132; -O0-LABEL: atomicrmw_and_i8_aligned_monotonic:2133; -O0:    and w12, w10, w82134; -O0:    ldaxrb w9, [x11]2135; -O0:    cmp w9, w10, uxtb2136; -O0:    stlxrb w8, w12, [x11]2137; -O0:    and w8, w9, #0xff2138; -O0:    subs w8, w8, w10, uxtb2139;2140; -O1-LABEL: atomicrmw_and_i8_aligned_monotonic:2141; -O1:    ldxrb w8, [x0]2142; -O1:    and w9, w8, w12143; -O1:    stxrb w10, w9, [x0]2144    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 12145    ret i8 %r2146}2147 2148define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) {2149; -O0-LABEL: atomicrmw_and_i8_aligned_acquire:2150; -O0:    and w12, w10, w82151; -O0:    ldaxrb w9, [x11]2152; -O0:    cmp w9, w10, uxtb2153; -O0:    stlxrb w8, w12, [x11]2154; -O0:    and w8, w9, #0xff2155; -O0:    subs w8, w8, w10, uxtb2156;2157; -O1-LABEL: atomicrmw_and_i8_aligned_acquire:2158; -O1:    ldaxrb w8, [x0]2159; -O1:    and w9, w8, w12160; -O1:    stxrb w10, w9, [x0]2161    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 12162    ret i8 %r2163}2164 2165define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) {2166; -O0-LABEL: atomicrmw_and_i8_aligned_release:2167; -O0:    and w12, w10, w82168; -O0:    ldaxrb w9, [x11]2169; -O0:    cmp w9, w10, uxtb2170; -O0:    stlxrb w8, w12, [x11]2171; -O0:    and w8, w9, #0xff2172; -O0:    subs w8, w8, w10, uxtb2173;2174; -O1-LABEL: atomicrmw_and_i8_aligned_release:2175; -O1:    ldxrb w8, [x0]2176; -O1:    and w9, w8, w12177; -O1:    stlxrb w10, w9, [x0]2178    %r = atomicrmw and ptr %ptr, i8 %value release, align 12179    ret i8 %r2180}2181 2182define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2183; -O0-LABEL: atomicrmw_and_i8_aligned_acq_rel:2184; -O0:    and w12, w10, w82185; -O0:    ldaxrb w9, [x11]2186; -O0:    cmp w9, w10, uxtb2187; -O0:    stlxrb w8, w12, [x11]2188; -O0:    and w8, w9, #0xff2189; -O0:    subs w8, w8, w10, uxtb2190;2191; -O1-LABEL: atomicrmw_and_i8_aligned_acq_rel:2192; -O1:    ldaxrb w8, [x0]2193; -O1:    and w9, w8, w12194; -O1:    stlxrb w10, w9, [x0]2195    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 12196    ret i8 %r2197}2198 2199define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2200; -O0-LABEL: atomicrmw_and_i8_aligned_seq_cst:2201; -O0:    and w12, w10, w82202; -O0:    ldaxrb w9, [x11]2203; -O0:    cmp w9, w10, uxtb2204; -O0:    stlxrb w8, w12, [x11]2205; -O0:    and w8, w9, #0xff2206; -O0:    subs w8, w8, w10, uxtb2207;2208; -O1-LABEL: atomicrmw_and_i8_aligned_seq_cst:2209; -O1:    ldaxrb w8, [x0]2210; -O1:    and w9, w8, w12211; -O1:    stlxrb w10, w9, [x0]2212    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 12213    ret i8 %r2214}2215 2216define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) {2217; -O0-LABEL: atomicrmw_and_i16_aligned_monotonic:2218; -O0:    and w12, w8, w92219; -O0:    ldaxrh w9, [x11]2220; -O0:    cmp w9, w8, uxth2221; -O0:    stlxrh w10, w12, [x11]2222; -O0:    subs w8, w8, w9, uxth2223;2224; -O1-LABEL: atomicrmw_and_i16_aligned_monotonic:2225; -O1:    ldxrh w8, [x0]2226; -O1:    and w9, w8, w12227; -O1:    stxrh w10, w9, [x0]2228    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 22229    ret i16 %r2230}2231 2232define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) {2233; -O0-LABEL: atomicrmw_and_i16_aligned_acquire:2234; -O0:    and w12, w8, w92235; -O0:    ldaxrh w9, [x11]2236; -O0:    cmp w9, w8, uxth2237; -O0:    stlxrh w10, w12, [x11]2238; -O0:    subs w8, w8, w9, uxth2239;2240; -O1-LABEL: atomicrmw_and_i16_aligned_acquire:2241; -O1:    ldaxrh w8, [x0]2242; -O1:    and w9, w8, w12243; -O1:    stxrh w10, w9, [x0]2244    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 22245    ret i16 %r2246}2247 2248define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) {2249; -O0-LABEL: atomicrmw_and_i16_aligned_release:2250; -O0:    and w12, w8, w92251; -O0:    ldaxrh w9, [x11]2252; -O0:    cmp w9, w8, uxth2253; -O0:    stlxrh w10, w12, [x11]2254; -O0:    subs w8, w8, w9, uxth2255;2256; -O1-LABEL: atomicrmw_and_i16_aligned_release:2257; -O1:    ldxrh w8, [x0]2258; -O1:    and w9, w8, w12259; -O1:    stlxrh w10, w9, [x0]2260    %r = atomicrmw and ptr %ptr, i16 %value release, align 22261    ret i16 %r2262}2263 2264define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2265; -O0-LABEL: atomicrmw_and_i16_aligned_acq_rel:2266; -O0:    and w12, w8, w92267; -O0:    ldaxrh w9, [x11]2268; -O0:    cmp w9, w8, uxth2269; -O0:    stlxrh w10, w12, [x11]2270; -O0:    subs w8, w8, w9, uxth2271;2272; -O1-LABEL: atomicrmw_and_i16_aligned_acq_rel:2273; -O1:    ldaxrh w8, [x0]2274; -O1:    and w9, w8, w12275; -O1:    stlxrh w10, w9, [x0]2276    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 22277    ret i16 %r2278}2279 2280define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2281; -O0-LABEL: atomicrmw_and_i16_aligned_seq_cst:2282; -O0:    and w12, w8, w92283; -O0:    ldaxrh w9, [x11]2284; -O0:    cmp w9, w8, uxth2285; -O0:    stlxrh w10, w12, [x11]2286; -O0:    subs w8, w8, w9, uxth2287;2288; -O1-LABEL: atomicrmw_and_i16_aligned_seq_cst:2289; -O1:    ldaxrh w8, [x0]2290; -O1:    and w9, w8, w12291; -O1:    stlxrh w10, w9, [x0]2292    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 22293    ret i16 %r2294}2295 2296define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) {2297; -O0-LABEL: atomicrmw_and_i32_aligned_monotonic:2298; -O0:    and w12, w8, w92299; -O0:    ldaxr w9, [x11]2300; -O0:    cmp w9, w82301; -O0:    stlxr w10, w12, [x11]2302; -O0:    subs w8, w9, w82303;2304; -O1-LABEL: atomicrmw_and_i32_aligned_monotonic:2305; -O1:    ldxr w8, [x0]2306; -O1:    and w9, w8, w12307; -O1:    stxr w10, w9, [x0]2308    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 42309    ret i32 %r2310}2311 2312define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) {2313; -O0-LABEL: atomicrmw_and_i32_aligned_acquire:2314; -O0:    and w12, w8, w92315; -O0:    ldaxr w9, [x11]2316; -O0:    cmp w9, w82317; -O0:    stlxr w10, w12, [x11]2318; -O0:    subs w8, w9, w82319;2320; -O1-LABEL: atomicrmw_and_i32_aligned_acquire:2321; -O1:    ldaxr w8, [x0]2322; -O1:    and w9, w8, w12323; -O1:    stxr w10, w9, [x0]2324    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 42325    ret i32 %r2326}2327 2328define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) {2329; -O0-LABEL: atomicrmw_and_i32_aligned_release:2330; -O0:    and w12, w8, w92331; -O0:    ldaxr w9, [x11]2332; -O0:    cmp w9, w82333; -O0:    stlxr w10, w12, [x11]2334; -O0:    subs w8, w9, w82335;2336; -O1-LABEL: atomicrmw_and_i32_aligned_release:2337; -O1:    ldxr w8, [x0]2338; -O1:    and w9, w8, w12339; -O1:    stlxr w10, w9, [x0]2340    %r = atomicrmw and ptr %ptr, i32 %value release, align 42341    ret i32 %r2342}2343 2344define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2345; -O0-LABEL: atomicrmw_and_i32_aligned_acq_rel:2346; -O0:    and w12, w8, w92347; -O0:    ldaxr w9, [x11]2348; -O0:    cmp w9, w82349; -O0:    stlxr w10, w12, [x11]2350; -O0:    subs w8, w9, w82351;2352; -O1-LABEL: atomicrmw_and_i32_aligned_acq_rel:2353; -O1:    ldaxr w8, [x0]2354; -O1:    and w9, w8, w12355; -O1:    stlxr w10, w9, [x0]2356    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 42357    ret i32 %r2358}2359 2360define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2361; -O0-LABEL: atomicrmw_and_i32_aligned_seq_cst:2362; -O0:    and w12, w8, w92363; -O0:    ldaxr w9, [x11]2364; -O0:    cmp w9, w82365; -O0:    stlxr w10, w12, [x11]2366; -O0:    subs w8, w9, w82367;2368; -O1-LABEL: atomicrmw_and_i32_aligned_seq_cst:2369; -O1:    ldaxr w8, [x0]2370; -O1:    and w9, w8, w12371; -O1:    stlxr w10, w9, [x0]2372    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 42373    ret i32 %r2374}2375 2376define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) {2377; -O0-LABEL: atomicrmw_and_i64_aligned_monotonic:2378; -O0:    and x12, x8, x92379; -O0:    ldaxr x9, [x11]2380; -O0:    cmp x9, x82381; -O0:    stlxr w10, x12, [x11]2382; -O0:    subs x8, x9, x82383;2384; -O1-LABEL: atomicrmw_and_i64_aligned_monotonic:2385; -O1:    ldxr x0, [x8]2386; -O1:    and x9, x0, x12387; -O1:    stxr w10, x9, [x8]2388    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 82389    ret i64 %r2390}2391 2392define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) {2393; -O0-LABEL: atomicrmw_and_i64_aligned_acquire:2394; -O0:    and x12, x8, x92395; -O0:    ldaxr x9, [x11]2396; -O0:    cmp x9, x82397; -O0:    stlxr w10, x12, [x11]2398; -O0:    subs x8, x9, x82399;2400; -O1-LABEL: atomicrmw_and_i64_aligned_acquire:2401; -O1:    ldaxr x0, [x8]2402; -O1:    and x9, x0, x12403; -O1:    stxr w10, x9, [x8]2404    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 82405    ret i64 %r2406}2407 2408define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) {2409; -O0-LABEL: atomicrmw_and_i64_aligned_release:2410; -O0:    and x12, x8, x92411; -O0:    ldaxr x9, [x11]2412; -O0:    cmp x9, x82413; -O0:    stlxr w10, x12, [x11]2414; -O0:    subs x8, x9, x82415;2416; -O1-LABEL: atomicrmw_and_i64_aligned_release:2417; -O1:    ldxr x0, [x8]2418; -O1:    and x9, x0, x12419; -O1:    stlxr w10, x9, [x8]2420    %r = atomicrmw and ptr %ptr, i64 %value release, align 82421    ret i64 %r2422}2423 2424define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2425; -O0-LABEL: atomicrmw_and_i64_aligned_acq_rel:2426; -O0:    and x12, x8, x92427; -O0:    ldaxr x9, [x11]2428; -O0:    cmp x9, x82429; -O0:    stlxr w10, x12, [x11]2430; -O0:    subs x8, x9, x82431;2432; -O1-LABEL: atomicrmw_and_i64_aligned_acq_rel:2433; -O1:    ldaxr x0, [x8]2434; -O1:    and x9, x0, x12435; -O1:    stlxr w10, x9, [x8]2436    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 82437    ret i64 %r2438}2439 2440define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2441; -O0-LABEL: atomicrmw_and_i64_aligned_seq_cst:2442; -O0:    and x12, x8, x92443; -O0:    ldaxr x9, [x11]2444; -O0:    cmp x9, x82445; -O0:    stlxr w10, x12, [x11]2446; -O0:    subs x8, x9, x82447;2448; -O1-LABEL: atomicrmw_and_i64_aligned_seq_cst:2449; -O1:    ldaxr x0, [x8]2450; -O1:    and x9, x0, x12451; -O1:    stlxr w10, x9, [x8]2452    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 82453    ret i64 %r2454}2455 2456define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) {2457; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic:2458; -O0:    and x14, x8, x102459; -O0:    and x15, x8, x92460; -O0:    ldxp x10, x9, [x11]2461; -O0:    cmp x10, x122462; -O0:    cmp x9, x132463; -O0:    stxp w8, x14, x15, [x11]2464; -O0:    stxp w8, x10, x9, [x11]2465; -O0:    eor x8, x10, x82466; -O0:    eor x11, x9, x112467; -O0:    orr x8, x8, x112468; -O0:    subs x8, x8, #02469;2470; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic:2471; -O1:    ldxp x0, x1, [x8]2472; -O1:    and x9, x1, x32473; -O1:    and x10, x0, x22474; -O1:    stxp w11, x10, x9, [x8]2475    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 162476    ret i128 %r2477}2478 2479define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) {2480; -O0-LABEL: atomicrmw_and_i128_aligned_acquire:2481; -O0:    and x14, x8, x102482; -O0:    and x15, x8, x92483; -O0:    ldaxp x10, x9, [x11]2484; -O0:    cmp x10, x122485; -O0:    cmp x9, x132486; -O0:    stxp w8, x14, x15, [x11]2487; -O0:    stxp w8, x10, x9, [x11]2488; -O0:    eor x8, x10, x82489; -O0:    eor x11, x9, x112490; -O0:    orr x8, x8, x112491; -O0:    subs x8, x8, #02492;2493; -O1-LABEL: atomicrmw_and_i128_aligned_acquire:2494; -O1:    ldaxp x0, x1, [x8]2495; -O1:    and x9, x1, x32496; -O1:    and x10, x0, x22497; -O1:    stxp w11, x10, x9, [x8]2498    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 162499    ret i128 %r2500}2501 2502define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) {2503; -O0-LABEL: atomicrmw_and_i128_aligned_release:2504; -O0:    and x14, x8, x102505; -O0:    and x15, x8, x92506; -O0:    ldxp x10, x9, [x11]2507; -O0:    cmp x10, x122508; -O0:    cmp x9, x132509; -O0:    stlxp w8, x14, x15, [x11]2510; -O0:    stlxp w8, x10, x9, [x11]2511; -O0:    eor x8, x10, x82512; -O0:    eor x11, x9, x112513; -O0:    orr x8, x8, x112514; -O0:    subs x8, x8, #02515;2516; -O1-LABEL: atomicrmw_and_i128_aligned_release:2517; -O1:    ldxp x0, x1, [x8]2518; -O1:    and x9, x1, x32519; -O1:    and x10, x0, x22520; -O1:    stlxp w11, x10, x9, [x8]2521    %r = atomicrmw and ptr %ptr, i128 %value release, align 162522    ret i128 %r2523}2524 2525define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2526; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel:2527; -O0:    and x14, x8, x102528; -O0:    and x15, x8, x92529; -O0:    ldaxp x10, x9, [x11]2530; -O0:    cmp x10, x122531; -O0:    cmp x9, x132532; -O0:    stlxp w8, x14, x15, [x11]2533; -O0:    stlxp w8, x10, x9, [x11]2534; -O0:    eor x8, x10, x82535; -O0:    eor x11, x9, x112536; -O0:    orr x8, x8, x112537; -O0:    subs x8, x8, #02538;2539; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel:2540; -O1:    ldaxp x0, x1, [x8]2541; -O1:    and x9, x1, x32542; -O1:    and x10, x0, x22543; -O1:    stlxp w11, x10, x9, [x8]2544    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 162545    ret i128 %r2546}2547 2548define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) {2549; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst:2550; -O0:    and x14, x8, x102551; -O0:    and x15, x8, x92552; -O0:    ldaxp x10, x9, [x11]2553; -O0:    cmp x10, x122554; -O0:    cmp x9, x132555; -O0:    stlxp w8, x14, x15, [x11]2556; -O0:    stlxp w8, x10, x9, [x11]2557; -O0:    eor x8, x10, x82558; -O0:    eor x11, x9, x112559; -O0:    orr x8, x8, x112560; -O0:    subs x8, x8, #02561;2562; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst:2563; -O1:    ldaxp x0, x1, [x8]2564; -O1:    and x9, x1, x32565; -O1:    and x10, x0, x22566; -O1:    stlxp w11, x10, x9, [x8]2567    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 162568    ret i128 %r2569}2570 2571define dso_local i8 @atomicrmw_and_i8_unaligned_monotonic(ptr %ptr, i8 %value) {2572; -O0-LABEL: atomicrmw_and_i8_unaligned_monotonic:2573; -O0:    and w12, w10, w82574; -O0:    ldaxrb w9, [x11]2575; -O0:    cmp w9, w10, uxtb2576; -O0:    stlxrb w8, w12, [x11]2577; -O0:    and w8, w9, #0xff2578; -O0:    subs w8, w8, w10, uxtb2579;2580; -O1-LABEL: atomicrmw_and_i8_unaligned_monotonic:2581; -O1:    ldxrb w8, [x0]2582; -O1:    and w9, w8, w12583; -O1:    stxrb w10, w9, [x0]2584    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 12585    ret i8 %r2586}2587 2588define dso_local i8 @atomicrmw_and_i8_unaligned_acquire(ptr %ptr, i8 %value) {2589; -O0-LABEL: atomicrmw_and_i8_unaligned_acquire:2590; -O0:    and w12, w10, w82591; -O0:    ldaxrb w9, [x11]2592; -O0:    cmp w9, w10, uxtb2593; -O0:    stlxrb w8, w12, [x11]2594; -O0:    and w8, w9, #0xff2595; -O0:    subs w8, w8, w10, uxtb2596;2597; -O1-LABEL: atomicrmw_and_i8_unaligned_acquire:2598; -O1:    ldaxrb w8, [x0]2599; -O1:    and w9, w8, w12600; -O1:    stxrb w10, w9, [x0]2601    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 12602    ret i8 %r2603}2604 2605define dso_local i8 @atomicrmw_and_i8_unaligned_release(ptr %ptr, i8 %value) {2606; -O0-LABEL: atomicrmw_and_i8_unaligned_release:2607; -O0:    and w12, w10, w82608; -O0:    ldaxrb w9, [x11]2609; -O0:    cmp w9, w10, uxtb2610; -O0:    stlxrb w8, w12, [x11]2611; -O0:    and w8, w9, #0xff2612; -O0:    subs w8, w8, w10, uxtb2613;2614; -O1-LABEL: atomicrmw_and_i8_unaligned_release:2615; -O1:    ldxrb w8, [x0]2616; -O1:    and w9, w8, w12617; -O1:    stlxrb w10, w9, [x0]2618    %r = atomicrmw and ptr %ptr, i8 %value release, align 12619    ret i8 %r2620}2621 2622define dso_local i8 @atomicrmw_and_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {2623; -O0-LABEL: atomicrmw_and_i8_unaligned_acq_rel:2624; -O0:    and w12, w10, w82625; -O0:    ldaxrb w9, [x11]2626; -O0:    cmp w9, w10, uxtb2627; -O0:    stlxrb w8, w12, [x11]2628; -O0:    and w8, w9, #0xff2629; -O0:    subs w8, w8, w10, uxtb2630;2631; -O1-LABEL: atomicrmw_and_i8_unaligned_acq_rel:2632; -O1:    ldaxrb w8, [x0]2633; -O1:    and w9, w8, w12634; -O1:    stlxrb w10, w9, [x0]2635    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 12636    ret i8 %r2637}2638 2639define dso_local i8 @atomicrmw_and_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {2640; -O0-LABEL: atomicrmw_and_i8_unaligned_seq_cst:2641; -O0:    and w12, w10, w82642; -O0:    ldaxrb w9, [x11]2643; -O0:    cmp w9, w10, uxtb2644; -O0:    stlxrb w8, w12, [x11]2645; -O0:    and w8, w9, #0xff2646; -O0:    subs w8, w8, w10, uxtb2647;2648; -O1-LABEL: atomicrmw_and_i8_unaligned_seq_cst:2649; -O1:    ldaxrb w8, [x0]2650; -O1:    and w9, w8, w12651; -O1:    stlxrb w10, w9, [x0]2652    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 12653    ret i8 %r2654}2655 2656define dso_local i16 @atomicrmw_and_i16_unaligned_monotonic(ptr %ptr, i16 %value) {2657; -O0-LABEL: atomicrmw_and_i16_unaligned_monotonic:2658; -O0:    and w8, w9, w82659; -O0:    bl __atomic_compare_exchange2660;2661; -O1-LABEL: atomicrmw_and_i16_unaligned_monotonic:2662; -O1:    and w8, w0, w202663; -O1:    bl __atomic_compare_exchange2664    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 12665    ret i16 %r2666}2667 2668define dso_local i16 @atomicrmw_and_i16_unaligned_acquire(ptr %ptr, i16 %value) {2669; -O0-LABEL: atomicrmw_and_i16_unaligned_acquire:2670; -O0:    and w8, w9, w82671; -O0:    bl __atomic_compare_exchange2672;2673; -O1-LABEL: atomicrmw_and_i16_unaligned_acquire:2674; -O1:    and w8, w0, w202675; -O1:    bl __atomic_compare_exchange2676    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 12677    ret i16 %r2678}2679 2680define dso_local i16 @atomicrmw_and_i16_unaligned_release(ptr %ptr, i16 %value) {2681; -O0-LABEL: atomicrmw_and_i16_unaligned_release:2682; -O0:    and w8, w9, w82683; -O0:    bl __atomic_compare_exchange2684;2685; -O1-LABEL: atomicrmw_and_i16_unaligned_release:2686; -O1:    and w8, w0, w202687; -O1:    bl __atomic_compare_exchange2688    %r = atomicrmw and ptr %ptr, i16 %value release, align 12689    ret i16 %r2690}2691 2692define dso_local i16 @atomicrmw_and_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {2693; -O0-LABEL: atomicrmw_and_i16_unaligned_acq_rel:2694; -O0:    and w8, w9, w82695; -O0:    bl __atomic_compare_exchange2696;2697; -O1-LABEL: atomicrmw_and_i16_unaligned_acq_rel:2698; -O1:    and w8, w0, w202699; -O1:    bl __atomic_compare_exchange2700    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 12701    ret i16 %r2702}2703 2704define dso_local i16 @atomicrmw_and_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {2705; -O0-LABEL: atomicrmw_and_i16_unaligned_seq_cst:2706; -O0:    and w8, w9, w82707; -O0:    bl __atomic_compare_exchange2708;2709; -O1-LABEL: atomicrmw_and_i16_unaligned_seq_cst:2710; -O1:    and w8, w0, w202711; -O1:    bl __atomic_compare_exchange2712    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 12713    ret i16 %r2714}2715 2716define dso_local i32 @atomicrmw_and_i32_unaligned_monotonic(ptr %ptr, i32 %value) {2717; -O0-LABEL: atomicrmw_and_i32_unaligned_monotonic:2718; -O0:    and w8, w9, w82719; -O0:    bl __atomic_compare_exchange2720;2721; -O1-LABEL: atomicrmw_and_i32_unaligned_monotonic:2722; -O1:    and w8, w0, w202723; -O1:    bl __atomic_compare_exchange2724    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 12725    ret i32 %r2726}2727 2728define dso_local i32 @atomicrmw_and_i32_unaligned_acquire(ptr %ptr, i32 %value) {2729; -O0-LABEL: atomicrmw_and_i32_unaligned_acquire:2730; -O0:    and w8, w9, w82731; -O0:    bl __atomic_compare_exchange2732;2733; -O1-LABEL: atomicrmw_and_i32_unaligned_acquire:2734; -O1:    and w8, w0, w202735; -O1:    bl __atomic_compare_exchange2736    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 12737    ret i32 %r2738}2739 2740define dso_local i32 @atomicrmw_and_i32_unaligned_release(ptr %ptr, i32 %value) {2741; -O0-LABEL: atomicrmw_and_i32_unaligned_release:2742; -O0:    and w8, w9, w82743; -O0:    bl __atomic_compare_exchange2744;2745; -O1-LABEL: atomicrmw_and_i32_unaligned_release:2746; -O1:    and w8, w0, w202747; -O1:    bl __atomic_compare_exchange2748    %r = atomicrmw and ptr %ptr, i32 %value release, align 12749    ret i32 %r2750}2751 2752define dso_local i32 @atomicrmw_and_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {2753; -O0-LABEL: atomicrmw_and_i32_unaligned_acq_rel:2754; -O0:    and w8, w9, w82755; -O0:    bl __atomic_compare_exchange2756;2757; -O1-LABEL: atomicrmw_and_i32_unaligned_acq_rel:2758; -O1:    and w8, w0, w202759; -O1:    bl __atomic_compare_exchange2760    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 12761    ret i32 %r2762}2763 2764define dso_local i32 @atomicrmw_and_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {2765; -O0-LABEL: atomicrmw_and_i32_unaligned_seq_cst:2766; -O0:    and w8, w9, w82767; -O0:    bl __atomic_compare_exchange2768;2769; -O1-LABEL: atomicrmw_and_i32_unaligned_seq_cst:2770; -O1:    and w8, w0, w202771; -O1:    bl __atomic_compare_exchange2772    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 12773    ret i32 %r2774}2775 2776define dso_local i64 @atomicrmw_and_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2777; -O0-LABEL: atomicrmw_and_i64_unaligned_monotonic:2778; -O0:    and x8, x9, x82779; -O0:    bl __atomic_compare_exchange2780;2781; -O1-LABEL: atomicrmw_and_i64_unaligned_monotonic:2782; -O1:    and x8, x0, x202783; -O1:    bl __atomic_compare_exchange2784    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 12785    ret i64 %r2786}2787 2788define dso_local i64 @atomicrmw_and_i64_unaligned_acquire(ptr %ptr, i64 %value) {2789; -O0-LABEL: atomicrmw_and_i64_unaligned_acquire:2790; -O0:    and x8, x9, x82791; -O0:    bl __atomic_compare_exchange2792;2793; -O1-LABEL: atomicrmw_and_i64_unaligned_acquire:2794; -O1:    and x8, x0, x202795; -O1:    bl __atomic_compare_exchange2796    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 12797    ret i64 %r2798}2799 2800define dso_local i64 @atomicrmw_and_i64_unaligned_release(ptr %ptr, i64 %value) {2801; -O0-LABEL: atomicrmw_and_i64_unaligned_release:2802; -O0:    and x8, x9, x82803; -O0:    bl __atomic_compare_exchange2804;2805; -O1-LABEL: atomicrmw_and_i64_unaligned_release:2806; -O1:    and x8, x0, x202807; -O1:    bl __atomic_compare_exchange2808    %r = atomicrmw and ptr %ptr, i64 %value release, align 12809    ret i64 %r2810}2811 2812define dso_local i64 @atomicrmw_and_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2813; -O0-LABEL: atomicrmw_and_i64_unaligned_acq_rel:2814; -O0:    and x8, x9, x82815; -O0:    bl __atomic_compare_exchange2816;2817; -O1-LABEL: atomicrmw_and_i64_unaligned_acq_rel:2818; -O1:    and x8, x0, x202819; -O1:    bl __atomic_compare_exchange2820    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 12821    ret i64 %r2822}2823 2824define dso_local i64 @atomicrmw_and_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2825; -O0-LABEL: atomicrmw_and_i64_unaligned_seq_cst:2826; -O0:    and x8, x9, x82827; -O0:    bl __atomic_compare_exchange2828;2829; -O1-LABEL: atomicrmw_and_i64_unaligned_seq_cst:2830; -O1:    and x8, x0, x202831; -O1:    bl __atomic_compare_exchange2832    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 12833    ret i64 %r2834}2835 2836define dso_local i128 @atomicrmw_and_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2837; -O0-LABEL: atomicrmw_and_i128_unaligned_monotonic:2838; -O0:    and x9, x8, x92839; -O0:    and x8, x8, x102840; -O0:    bl __atomic_compare_exchange2841;2842; -O1-LABEL: atomicrmw_and_i128_unaligned_monotonic:2843; -O1:    ldp x0, x1, [x0]2844; -O1:    and x8, x1, x192845; -O1:    and x9, x0, x212846; -O1:    bl __atomic_compare_exchange2847    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 12848    ret i128 %r2849}2850 2851define dso_local i128 @atomicrmw_and_i128_unaligned_acquire(ptr %ptr, i128 %value) {2852; -O0-LABEL: atomicrmw_and_i128_unaligned_acquire:2853; -O0:    and x9, x8, x92854; -O0:    and x8, x8, x102855; -O0:    bl __atomic_compare_exchange2856;2857; -O1-LABEL: atomicrmw_and_i128_unaligned_acquire:2858; -O1:    ldp x0, x1, [x0]2859; -O1:    and x8, x1, x192860; -O1:    and x9, x0, x212861; -O1:    bl __atomic_compare_exchange2862    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 12863    ret i128 %r2864}2865 2866define dso_local i128 @atomicrmw_and_i128_unaligned_release(ptr %ptr, i128 %value) {2867; -O0-LABEL: atomicrmw_and_i128_unaligned_release:2868; -O0:    and x9, x8, x92869; -O0:    and x8, x8, x102870; -O0:    bl __atomic_compare_exchange2871;2872; -O1-LABEL: atomicrmw_and_i128_unaligned_release:2873; -O1:    ldp x0, x1, [x0]2874; -O1:    and x8, x1, x192875; -O1:    and x9, x0, x212876; -O1:    bl __atomic_compare_exchange2877    %r = atomicrmw and ptr %ptr, i128 %value release, align 12878    ret i128 %r2879}2880 2881define dso_local i128 @atomicrmw_and_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2882; -O0-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2883; -O0:    and x9, x8, x92884; -O0:    and x8, x8, x102885; -O0:    bl __atomic_compare_exchange2886;2887; -O1-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2888; -O1:    ldp x0, x1, [x0]2889; -O1:    and x8, x1, x192890; -O1:    and x9, x0, x212891; -O1:    bl __atomic_compare_exchange2892    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 12893    ret i128 %r2894}2895 2896define dso_local i128 @atomicrmw_and_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2897; -O0-LABEL: atomicrmw_and_i128_unaligned_seq_cst:2898; -O0:    and x9, x8, x92899; -O0:    and x8, x8, x102900; -O0:    bl __atomic_compare_exchange2901;2902; -O1-LABEL: atomicrmw_and_i128_unaligned_seq_cst:2903; -O1:    ldp x0, x1, [x0]2904; -O1:    and x8, x1, x192905; -O1:    and x9, x0, x212906; -O1:    bl __atomic_compare_exchange2907    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 12908    ret i128 %r2909}2910 2911define dso_local i8 @atomicrmw_nand_i8_aligned_monotonic(ptr %ptr, i8 %value) {2912; -O0-LABEL: atomicrmw_nand_i8_aligned_monotonic:2913; -O0:    and w8, w10, w82914; -O0:    mvn w12, w82915; -O0:    ldaxrb w9, [x11]2916; -O0:    cmp w9, w10, uxtb2917; -O0:    stlxrb w8, w12, [x11]2918; -O0:    and w8, w9, #0xff2919; -O0:    subs w8, w8, w10, uxtb2920;2921; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic:2922; -O1:    ldxrb w8, [x0]2923; -O1:    and w9, w8, w12924; -O1:    mvn w9, w92925; -O1:    stxrb w10, w9, [x0]2926    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12927    ret i8 %r2928}2929 2930define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) {2931; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire:2932; -O0:    and w8, w10, w82933; -O0:    mvn w12, w82934; -O0:    ldaxrb w9, [x11]2935; -O0:    cmp w9, w10, uxtb2936; -O0:    stlxrb w8, w12, [x11]2937; -O0:    and w8, w9, #0xff2938; -O0:    subs w8, w8, w10, uxtb2939;2940; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire:2941; -O1:    ldaxrb w8, [x0]2942; -O1:    and w9, w8, w12943; -O1:    mvn w9, w92944; -O1:    stxrb w10, w9, [x0]2945    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12946    ret i8 %r2947}2948 2949define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) {2950; -O0-LABEL: atomicrmw_nand_i8_aligned_release:2951; -O0:    and w8, w10, w82952; -O0:    mvn w12, w82953; -O0:    ldaxrb w9, [x11]2954; -O0:    cmp w9, w10, uxtb2955; -O0:    stlxrb w8, w12, [x11]2956; -O0:    and w8, w9, #0xff2957; -O0:    subs w8, w8, w10, uxtb2958;2959; -O1-LABEL: atomicrmw_nand_i8_aligned_release:2960; -O1:    ldxrb w8, [x0]2961; -O1:    and w9, w8, w12962; -O1:    mvn w9, w92963; -O1:    stlxrb w10, w9, [x0]2964    %r = atomicrmw nand ptr %ptr, i8 %value release, align 12965    ret i8 %r2966}2967 2968define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2969; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2970; -O0:    and w8, w10, w82971; -O0:    mvn w12, w82972; -O0:    ldaxrb w9, [x11]2973; -O0:    cmp w9, w10, uxtb2974; -O0:    stlxrb w8, w12, [x11]2975; -O0:    and w8, w9, #0xff2976; -O0:    subs w8, w8, w10, uxtb2977;2978; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2979; -O1:    ldaxrb w8, [x0]2980; -O1:    and w9, w8, w12981; -O1:    mvn w9, w92982; -O1:    stlxrb w10, w9, [x0]2983    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12984    ret i8 %r2985}2986 2987define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2988; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2989; -O0:    and w8, w10, w82990; -O0:    mvn w12, w82991; -O0:    ldaxrb w9, [x11]2992; -O0:    cmp w9, w10, uxtb2993; -O0:    stlxrb w8, w12, [x11]2994; -O0:    and w8, w9, #0xff2995; -O0:    subs w8, w8, w10, uxtb2996;2997; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2998; -O1:    ldaxrb w8, [x0]2999; -O1:    and w9, w8, w13000; -O1:    mvn w9, w93001; -O1:    stlxrb w10, w9, [x0]3002    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 13003    ret i8 %r3004}3005 3006define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) {3007; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic:3008; -O0:    and w9, w8, w93009; -O0:    mvn w12, w93010; -O0:    ldaxrh w9, [x11]3011; -O0:    cmp w9, w8, uxth3012; -O0:    stlxrh w10, w12, [x11]3013; -O0:    subs w8, w8, w9, uxth3014;3015; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic:3016; -O1:    ldxrh w8, [x0]3017; -O1:    and w9, w8, w13018; -O1:    mvn w9, w93019; -O1:    stxrh w10, w9, [x0]3020    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 23021    ret i16 %r3022}3023 3024define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) {3025; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire:3026; -O0:    and w9, w8, w93027; -O0:    mvn w12, w93028; -O0:    ldaxrh w9, [x11]3029; -O0:    cmp w9, w8, uxth3030; -O0:    stlxrh w10, w12, [x11]3031; -O0:    subs w8, w8, w9, uxth3032;3033; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire:3034; -O1:    ldaxrh w8, [x0]3035; -O1:    and w9, w8, w13036; -O1:    mvn w9, w93037; -O1:    stxrh w10, w9, [x0]3038    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 23039    ret i16 %r3040}3041 3042define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) {3043; -O0-LABEL: atomicrmw_nand_i16_aligned_release:3044; -O0:    and w9, w8, w93045; -O0:    mvn w12, w93046; -O0:    ldaxrh w9, [x11]3047; -O0:    cmp w9, w8, uxth3048; -O0:    stlxrh w10, w12, [x11]3049; -O0:    subs w8, w8, w9, uxth3050;3051; -O1-LABEL: atomicrmw_nand_i16_aligned_release:3052; -O1:    ldxrh w8, [x0]3053; -O1:    and w9, w8, w13054; -O1:    mvn w9, w93055; -O1:    stlxrh w10, w9, [x0]3056    %r = atomicrmw nand ptr %ptr, i16 %value release, align 23057    ret i16 %r3058}3059 3060define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3061; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel:3062; -O0:    and w9, w8, w93063; -O0:    mvn w12, w93064; -O0:    ldaxrh w9, [x11]3065; -O0:    cmp w9, w8, uxth3066; -O0:    stlxrh w10, w12, [x11]3067; -O0:    subs w8, w8, w9, uxth3068;3069; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel:3070; -O1:    ldaxrh w8, [x0]3071; -O1:    and w9, w8, w13072; -O1:    mvn w9, w93073; -O1:    stlxrh w10, w9, [x0]3074    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 23075    ret i16 %r3076}3077 3078define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3079; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst:3080; -O0:    and w9, w8, w93081; -O0:    mvn w12, w93082; -O0:    ldaxrh w9, [x11]3083; -O0:    cmp w9, w8, uxth3084; -O0:    stlxrh w10, w12, [x11]3085; -O0:    subs w8, w8, w9, uxth3086;3087; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst:3088; -O1:    ldaxrh w8, [x0]3089; -O1:    and w9, w8, w13090; -O1:    mvn w9, w93091; -O1:    stlxrh w10, w9, [x0]3092    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 23093    ret i16 %r3094}3095 3096define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) {3097; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic:3098; -O0:    and w9, w8, w93099; -O0:    mvn w12, w93100; -O0:    ldaxr w9, [x11]3101; -O0:    cmp w9, w83102; -O0:    stlxr w10, w12, [x11]3103; -O0:    subs w8, w9, w83104;3105; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic:3106; -O1:    ldxr w8, [x0]3107; -O1:    and w9, w8, w13108; -O1:    mvn w9, w93109; -O1:    stxr w10, w9, [x0]3110    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 43111    ret i32 %r3112}3113 3114define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) {3115; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire:3116; -O0:    and w9, w8, w93117; -O0:    mvn w12, w93118; -O0:    ldaxr w9, [x11]3119; -O0:    cmp w9, w83120; -O0:    stlxr w10, w12, [x11]3121; -O0:    subs w8, w9, w83122;3123; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire:3124; -O1:    ldaxr w8, [x0]3125; -O1:    and w9, w8, w13126; -O1:    mvn w9, w93127; -O1:    stxr w10, w9, [x0]3128    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 43129    ret i32 %r3130}3131 3132define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) {3133; -O0-LABEL: atomicrmw_nand_i32_aligned_release:3134; -O0:    and w9, w8, w93135; -O0:    mvn w12, w93136; -O0:    ldaxr w9, [x11]3137; -O0:    cmp w9, w83138; -O0:    stlxr w10, w12, [x11]3139; -O0:    subs w8, w9, w83140;3141; -O1-LABEL: atomicrmw_nand_i32_aligned_release:3142; -O1:    ldxr w8, [x0]3143; -O1:    and w9, w8, w13144; -O1:    mvn w9, w93145; -O1:    stlxr w10, w9, [x0]3146    %r = atomicrmw nand ptr %ptr, i32 %value release, align 43147    ret i32 %r3148}3149 3150define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3151; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel:3152; -O0:    and w9, w8, w93153; -O0:    mvn w12, w93154; -O0:    ldaxr w9, [x11]3155; -O0:    cmp w9, w83156; -O0:    stlxr w10, w12, [x11]3157; -O0:    subs w8, w9, w83158;3159; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel:3160; -O1:    ldaxr w8, [x0]3161; -O1:    and w9, w8, w13162; -O1:    mvn w9, w93163; -O1:    stlxr w10, w9, [x0]3164    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 43165    ret i32 %r3166}3167 3168define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3169; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst:3170; -O0:    and w9, w8, w93171; -O0:    mvn w12, w93172; -O0:    ldaxr w9, [x11]3173; -O0:    cmp w9, w83174; -O0:    stlxr w10, w12, [x11]3175; -O0:    subs w8, w9, w83176;3177; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst:3178; -O1:    ldaxr w8, [x0]3179; -O1:    and w9, w8, w13180; -O1:    mvn w9, w93181; -O1:    stlxr w10, w9, [x0]3182    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 43183    ret i32 %r3184}3185 3186define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) {3187; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic:3188; -O0:    and x9, x8, x93189; -O0:    mvn x12, x93190; -O0:    ldaxr x9, [x11]3191; -O0:    cmp x9, x83192; -O0:    stlxr w10, x12, [x11]3193; -O0:    subs x8, x9, x83194;3195; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic:3196; -O1:    ldxr x0, [x8]3197; -O1:    and x9, x0, x13198; -O1:    mvn x9, x93199; -O1:    stxr w10, x9, [x8]3200    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 83201    ret i64 %r3202}3203 3204define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) {3205; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire:3206; -O0:    and x9, x8, x93207; -O0:    mvn x12, x93208; -O0:    ldaxr x9, [x11]3209; -O0:    cmp x9, x83210; -O0:    stlxr w10, x12, [x11]3211; -O0:    subs x8, x9, x83212;3213; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire:3214; -O1:    ldaxr x0, [x8]3215; -O1:    and x9, x0, x13216; -O1:    mvn x9, x93217; -O1:    stxr w10, x9, [x8]3218    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 83219    ret i64 %r3220}3221 3222define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) {3223; -O0-LABEL: atomicrmw_nand_i64_aligned_release:3224; -O0:    and x9, x8, x93225; -O0:    mvn x12, x93226; -O0:    ldaxr x9, [x11]3227; -O0:    cmp x9, x83228; -O0:    stlxr w10, x12, [x11]3229; -O0:    subs x8, x9, x83230;3231; -O1-LABEL: atomicrmw_nand_i64_aligned_release:3232; -O1:    ldxr x0, [x8]3233; -O1:    and x9, x0, x13234; -O1:    mvn x9, x93235; -O1:    stlxr w10, x9, [x8]3236    %r = atomicrmw nand ptr %ptr, i64 %value release, align 83237    ret i64 %r3238}3239 3240define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3241; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel:3242; -O0:    and x9, x8, x93243; -O0:    mvn x12, x93244; -O0:    ldaxr x9, [x11]3245; -O0:    cmp x9, x83246; -O0:    stlxr w10, x12, [x11]3247; -O0:    subs x8, x9, x83248;3249; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel:3250; -O1:    ldaxr x0, [x8]3251; -O1:    and x9, x0, x13252; -O1:    mvn x9, x93253; -O1:    stlxr w10, x9, [x8]3254    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 83255    ret i64 %r3256}3257 3258define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3259; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst:3260; -O0:    and x9, x8, x93261; -O0:    mvn x12, x93262; -O0:    ldaxr x9, [x11]3263; -O0:    cmp x9, x83264; -O0:    stlxr w10, x12, [x11]3265; -O0:    subs x8, x9, x83266;3267; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst:3268; -O1:    ldaxr x0, [x8]3269; -O1:    and x9, x0, x13270; -O1:    mvn x9, x93271; -O1:    stlxr w10, x9, [x8]3272    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 83273    ret i64 %r3274}3275 3276define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) {3277; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic:3278; -O0:    and x9, x8, x93279; -O0:    and x8, x8, x103280; -O0:    mvn x14, x93281; -O0:    mvn x15, x83282; -O0:    ldxp x10, x9, [x11]3283; -O0:    cmp x10, x123284; -O0:    cmp x9, x133285; -O0:    stxp w8, x14, x15, [x11]3286; -O0:    stxp w8, x10, x9, [x11]3287; -O0:    eor x8, x10, x83288; -O0:    eor x11, x9, x113289; -O0:    orr x8, x8, x113290; -O0:    subs x8, x8, #03291;3292; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic:3293; -O1:    ldxp x0, x1, [x8]3294; -O1:    and x9, x0, x23295; -O1:    and x10, x1, x33296; -O1:    mvn x10, x103297; -O1:    mvn x9, x93298; -O1:    stxp w11, x9, x10, [x8]3299    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 163300    ret i128 %r3301}3302 3303define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) {3304; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire:3305; -O0:    and x9, x8, x93306; -O0:    and x8, x8, x103307; -O0:    mvn x14, x93308; -O0:    mvn x15, x83309; -O0:    ldaxp x10, x9, [x11]3310; -O0:    cmp x10, x123311; -O0:    cmp x9, x133312; -O0:    stxp w8, x14, x15, [x11]3313; -O0:    stxp w8, x10, x9, [x11]3314; -O0:    eor x8, x10, x83315; -O0:    eor x11, x9, x113316; -O0:    orr x8, x8, x113317; -O0:    subs x8, x8, #03318;3319; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire:3320; -O1:    ldaxp x0, x1, [x8]3321; -O1:    and x9, x0, x23322; -O1:    and x10, x1, x33323; -O1:    mvn x10, x103324; -O1:    mvn x9, x93325; -O1:    stxp w11, x9, x10, [x8]3326    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 163327    ret i128 %r3328}3329 3330define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) {3331; -O0-LABEL: atomicrmw_nand_i128_aligned_release:3332; -O0:    and x9, x8, x93333; -O0:    and x8, x8, x103334; -O0:    mvn x14, x93335; -O0:    mvn x15, x83336; -O0:    ldxp x10, x9, [x11]3337; -O0:    cmp x10, x123338; -O0:    cmp x9, x133339; -O0:    stlxp w8, x14, x15, [x11]3340; -O0:    stlxp w8, x10, x9, [x11]3341; -O0:    eor x8, x10, x83342; -O0:    eor x11, x9, x113343; -O0:    orr x8, x8, x113344; -O0:    subs x8, x8, #03345;3346; -O1-LABEL: atomicrmw_nand_i128_aligned_release:3347; -O1:    ldxp x0, x1, [x8]3348; -O1:    and x9, x0, x23349; -O1:    and x10, x1, x33350; -O1:    mvn x10, x103351; -O1:    mvn x9, x93352; -O1:    stlxp w11, x9, x10, [x8]3353    %r = atomicrmw nand ptr %ptr, i128 %value release, align 163354    ret i128 %r3355}3356 3357define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3358; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel:3359; -O0:    and x9, x8, x93360; -O0:    and x8, x8, x103361; -O0:    mvn x14, x93362; -O0:    mvn x15, x83363; -O0:    ldaxp x10, x9, [x11]3364; -O0:    cmp x10, x123365; -O0:    cmp x9, x133366; -O0:    stlxp w8, x14, x15, [x11]3367; -O0:    stlxp w8, x10, x9, [x11]3368; -O0:    eor x8, x10, x83369; -O0:    eor x11, x9, x113370; -O0:    orr x8, x8, x113371; -O0:    subs x8, x8, #03372;3373; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel:3374; -O1:    ldaxp x0, x1, [x8]3375; -O1:    and x9, x0, x23376; -O1:    and x10, x1, x33377; -O1:    mvn x10, x103378; -O1:    mvn x9, x93379; -O1:    stlxp w11, x9, x10, [x8]3380    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 163381    ret i128 %r3382}3383 3384define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3385; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst:3386; -O0:    and x9, x8, x93387; -O0:    and x8, x8, x103388; -O0:    mvn x14, x93389; -O0:    mvn x15, x83390; -O0:    ldaxp x10, x9, [x11]3391; -O0:    cmp x10, x123392; -O0:    cmp x9, x133393; -O0:    stlxp w8, x14, x15, [x11]3394; -O0:    stlxp w8, x10, x9, [x11]3395; -O0:    eor x8, x10, x83396; -O0:    eor x11, x9, x113397; -O0:    orr x8, x8, x113398; -O0:    subs x8, x8, #03399;3400; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst:3401; -O1:    ldaxp x0, x1, [x8]3402; -O1:    and x9, x0, x23403; -O1:    and x10, x1, x33404; -O1:    mvn x10, x103405; -O1:    mvn x9, x93406; -O1:    stlxp w11, x9, x10, [x8]3407    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 163408    ret i128 %r3409}3410 3411define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3412; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic:3413; -O0:    and w8, w10, w83414; -O0:    mvn w12, w83415; -O0:    ldaxrb w9, [x11]3416; -O0:    cmp w9, w10, uxtb3417; -O0:    stlxrb w8, w12, [x11]3418; -O0:    and w8, w9, #0xff3419; -O0:    subs w8, w8, w10, uxtb3420;3421; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic:3422; -O1:    ldxrb w8, [x0]3423; -O1:    and w9, w8, w13424; -O1:    mvn w9, w93425; -O1:    stxrb w10, w9, [x0]3426    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 13427    ret i8 %r3428}3429 3430define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) {3431; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire:3432; -O0:    and w8, w10, w83433; -O0:    mvn w12, w83434; -O0:    ldaxrb w9, [x11]3435; -O0:    cmp w9, w10, uxtb3436; -O0:    stlxrb w8, w12, [x11]3437; -O0:    and w8, w9, #0xff3438; -O0:    subs w8, w8, w10, uxtb3439;3440; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire:3441; -O1:    ldaxrb w8, [x0]3442; -O1:    and w9, w8, w13443; -O1:    mvn w9, w93444; -O1:    stxrb w10, w9, [x0]3445    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 13446    ret i8 %r3447}3448 3449define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) {3450; -O0-LABEL: atomicrmw_nand_i8_unaligned_release:3451; -O0:    and w8, w10, w83452; -O0:    mvn w12, w83453; -O0:    ldaxrb w9, [x11]3454; -O0:    cmp w9, w10, uxtb3455; -O0:    stlxrb w8, w12, [x11]3456; -O0:    and w8, w9, #0xff3457; -O0:    subs w8, w8, w10, uxtb3458;3459; -O1-LABEL: atomicrmw_nand_i8_unaligned_release:3460; -O1:    ldxrb w8, [x0]3461; -O1:    and w9, w8, w13462; -O1:    mvn w9, w93463; -O1:    stlxrb w10, w9, [x0]3464    %r = atomicrmw nand ptr %ptr, i8 %value release, align 13465    ret i8 %r3466}3467 3468define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3469; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:3470; -O0:    and w8, w10, w83471; -O0:    mvn w12, w83472; -O0:    ldaxrb w9, [x11]3473; -O0:    cmp w9, w10, uxtb3474; -O0:    stlxrb w8, w12, [x11]3475; -O0:    and w8, w9, #0xff3476; -O0:    subs w8, w8, w10, uxtb3477;3478; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:3479; -O1:    ldaxrb w8, [x0]3480; -O1:    and w9, w8, w13481; -O1:    mvn w9, w93482; -O1:    stlxrb w10, w9, [x0]3483    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 13484    ret i8 %r3485}3486 3487define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3488; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:3489; -O0:    and w8, w10, w83490; -O0:    mvn w12, w83491; -O0:    ldaxrb w9, [x11]3492; -O0:    cmp w9, w10, uxtb3493; -O0:    stlxrb w8, w12, [x11]3494; -O0:    and w8, w9, #0xff3495; -O0:    subs w8, w8, w10, uxtb3496;3497; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:3498; -O1:    ldaxrb w8, [x0]3499; -O1:    and w9, w8, w13500; -O1:    mvn w9, w93501; -O1:    stlxrb w10, w9, [x0]3502    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 13503    ret i8 %r3504}3505 3506define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3507; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic:3508; -O0:    and w8, w9, w83509; -O0:    mvn w8, w83510; -O0:    bl __atomic_compare_exchange3511;3512; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic:3513; -O1:    and w8, w0, w203514; -O1:    mvn w8, w83515; -O1:    bl __atomic_compare_exchange3516    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 13517    ret i16 %r3518}3519 3520define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) {3521; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire:3522; -O0:    and w8, w9, w83523; -O0:    mvn w8, w83524; -O0:    bl __atomic_compare_exchange3525;3526; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire:3527; -O1:    and w8, w0, w203528; -O1:    mvn w8, w83529; -O1:    bl __atomic_compare_exchange3530    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 13531    ret i16 %r3532}3533 3534define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) {3535; -O0-LABEL: atomicrmw_nand_i16_unaligned_release:3536; -O0:    and w8, w9, w83537; -O0:    mvn w8, w83538; -O0:    bl __atomic_compare_exchange3539;3540; -O1-LABEL: atomicrmw_nand_i16_unaligned_release:3541; -O1:    and w8, w0, w203542; -O1:    mvn w8, w83543; -O1:    bl __atomic_compare_exchange3544    %r = atomicrmw nand ptr %ptr, i16 %value release, align 13545    ret i16 %r3546}3547 3548define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3549; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:3550; -O0:    and w8, w9, w83551; -O0:    mvn w8, w83552; -O0:    bl __atomic_compare_exchange3553;3554; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:3555; -O1:    and w8, w0, w203556; -O1:    mvn w8, w83557; -O1:    bl __atomic_compare_exchange3558    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 13559    ret i16 %r3560}3561 3562define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3563; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:3564; -O0:    and w8, w9, w83565; -O0:    mvn w8, w83566; -O0:    bl __atomic_compare_exchange3567;3568; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:3569; -O1:    and w8, w0, w203570; -O1:    mvn w8, w83571; -O1:    bl __atomic_compare_exchange3572    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 13573    ret i16 %r3574}3575 3576define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3577; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic:3578; -O0:    and w8, w9, w83579; -O0:    mvn w8, w83580; -O0:    bl __atomic_compare_exchange3581;3582; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic:3583; -O1:    and w8, w0, w203584; -O1:    mvn w8, w83585; -O1:    bl __atomic_compare_exchange3586    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 13587    ret i32 %r3588}3589 3590define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) {3591; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire:3592; -O0:    and w8, w9, w83593; -O0:    mvn w8, w83594; -O0:    bl __atomic_compare_exchange3595;3596; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire:3597; -O1:    and w8, w0, w203598; -O1:    mvn w8, w83599; -O1:    bl __atomic_compare_exchange3600    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 13601    ret i32 %r3602}3603 3604define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) {3605; -O0-LABEL: atomicrmw_nand_i32_unaligned_release:3606; -O0:    and w8, w9, w83607; -O0:    mvn w8, w83608; -O0:    bl __atomic_compare_exchange3609;3610; -O1-LABEL: atomicrmw_nand_i32_unaligned_release:3611; -O1:    and w8, w0, w203612; -O1:    mvn w8, w83613; -O1:    bl __atomic_compare_exchange3614    %r = atomicrmw nand ptr %ptr, i32 %value release, align 13615    ret i32 %r3616}3617 3618define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3619; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:3620; -O0:    and w8, w9, w83621; -O0:    mvn w8, w83622; -O0:    bl __atomic_compare_exchange3623;3624; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:3625; -O1:    and w8, w0, w203626; -O1:    mvn w8, w83627; -O1:    bl __atomic_compare_exchange3628    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 13629    ret i32 %r3630}3631 3632define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3633; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:3634; -O0:    and w8, w9, w83635; -O0:    mvn w8, w83636; -O0:    bl __atomic_compare_exchange3637;3638; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:3639; -O1:    and w8, w0, w203640; -O1:    mvn w8, w83641; -O1:    bl __atomic_compare_exchange3642    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 13643    ret i32 %r3644}3645 3646define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3647; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic:3648; -O0:    and x8, x9, x83649; -O0:    mvn x8, x83650; -O0:    bl __atomic_compare_exchange3651;3652; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic:3653; -O1:    and x8, x0, x203654; -O1:    mvn x8, x83655; -O1:    bl __atomic_compare_exchange3656    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 13657    ret i64 %r3658}3659 3660define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) {3661; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire:3662; -O0:    and x8, x9, x83663; -O0:    mvn x8, x83664; -O0:    bl __atomic_compare_exchange3665;3666; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire:3667; -O1:    and x8, x0, x203668; -O1:    mvn x8, x83669; -O1:    bl __atomic_compare_exchange3670    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 13671    ret i64 %r3672}3673 3674define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) {3675; -O0-LABEL: atomicrmw_nand_i64_unaligned_release:3676; -O0:    and x8, x9, x83677; -O0:    mvn x8, x83678; -O0:    bl __atomic_compare_exchange3679;3680; -O1-LABEL: atomicrmw_nand_i64_unaligned_release:3681; -O1:    and x8, x0, x203682; -O1:    mvn x8, x83683; -O1:    bl __atomic_compare_exchange3684    %r = atomicrmw nand ptr %ptr, i64 %value release, align 13685    ret i64 %r3686}3687 3688define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3689; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:3690; -O0:    and x8, x9, x83691; -O0:    mvn x8, x83692; -O0:    bl __atomic_compare_exchange3693;3694; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:3695; -O1:    and x8, x0, x203696; -O1:    mvn x8, x83697; -O1:    bl __atomic_compare_exchange3698    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 13699    ret i64 %r3700}3701 3702define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3703; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:3704; -O0:    and x8, x9, x83705; -O0:    mvn x8, x83706; -O0:    bl __atomic_compare_exchange3707;3708; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:3709; -O1:    and x8, x0, x203710; -O1:    mvn x8, x83711; -O1:    bl __atomic_compare_exchange3712    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 13713    ret i64 %r3714}3715 3716define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3717; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic:3718; -O0:    and x9, x8, x93719; -O0:    and x8, x8, x103720; -O0:    mvn x9, x93721; -O0:    mvn x8, x83722; -O0:    bl __atomic_compare_exchange3723;3724; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic:3725; -O1:    ldp x0, x1, [x0]3726; -O1:    and x8, x1, x193727; -O1:    and x9, x0, x213728; -O1:    mvn x8, x83729; -O1:    mvn x9, x93730; -O1:    bl __atomic_compare_exchange3731    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 13732    ret i128 %r3733}3734 3735define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) {3736; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire:3737; -O0:    and x9, x8, x93738; -O0:    and x8, x8, x103739; -O0:    mvn x9, x93740; -O0:    mvn x8, x83741; -O0:    bl __atomic_compare_exchange3742;3743; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire:3744; -O1:    ldp x0, x1, [x0]3745; -O1:    and x8, x1, x193746; -O1:    and x9, x0, x213747; -O1:    mvn x8, x83748; -O1:    mvn x9, x93749; -O1:    bl __atomic_compare_exchange3750    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 13751    ret i128 %r3752}3753 3754define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) {3755; -O0-LABEL: atomicrmw_nand_i128_unaligned_release:3756; -O0:    and x9, x8, x93757; -O0:    and x8, x8, x103758; -O0:    mvn x9, x93759; -O0:    mvn x8, x83760; -O0:    bl __atomic_compare_exchange3761;3762; -O1-LABEL: atomicrmw_nand_i128_unaligned_release:3763; -O1:    ldp x0, x1, [x0]3764; -O1:    and x8, x1, x193765; -O1:    and x9, x0, x213766; -O1:    mvn x8, x83767; -O1:    mvn x9, x93768; -O1:    bl __atomic_compare_exchange3769    %r = atomicrmw nand ptr %ptr, i128 %value release, align 13770    ret i128 %r3771}3772 3773define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3774; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:3775; -O0:    and x9, x8, x93776; -O0:    and x8, x8, x103777; -O0:    mvn x9, x93778; -O0:    mvn x8, x83779; -O0:    bl __atomic_compare_exchange3780;3781; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:3782; -O1:    ldp x0, x1, [x0]3783; -O1:    and x8, x1, x193784; -O1:    and x9, x0, x213785; -O1:    mvn x8, x83786; -O1:    mvn x9, x93787; -O1:    bl __atomic_compare_exchange3788    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 13789    ret i128 %r3790}3791 3792define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3793; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:3794; -O0:    and x9, x8, x93795; -O0:    and x8, x8, x103796; -O0:    mvn x9, x93797; -O0:    mvn x8, x83798; -O0:    bl __atomic_compare_exchange3799;3800; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:3801; -O1:    ldp x0, x1, [x0]3802; -O1:    and x8, x1, x193803; -O1:    and x9, x0, x213804; -O1:    mvn x8, x83805; -O1:    mvn x9, x93806; -O1:    bl __atomic_compare_exchange3807    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 13808    ret i128 %r3809}3810 3811define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) {3812; -O0-LABEL: atomicrmw_or_i8_aligned_monotonic:3813; -O0:    orr w12, w10, w83814; -O0:    ldaxrb w9, [x11]3815; -O0:    cmp w9, w10, uxtb3816; -O0:    stlxrb w8, w12, [x11]3817; -O0:    and w8, w9, #0xff3818; -O0:    subs w8, w8, w10, uxtb3819;3820; -O1-LABEL: atomicrmw_or_i8_aligned_monotonic:3821; -O1:    ldxrb w8, [x0]3822; -O1:    orr w9, w8, w13823; -O1:    stxrb w10, w9, [x0]3824    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 13825    ret i8 %r3826}3827 3828define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) {3829; -O0-LABEL: atomicrmw_or_i8_aligned_acquire:3830; -O0:    orr w12, w10, w83831; -O0:    ldaxrb w9, [x11]3832; -O0:    cmp w9, w10, uxtb3833; -O0:    stlxrb w8, w12, [x11]3834; -O0:    and w8, w9, #0xff3835; -O0:    subs w8, w8, w10, uxtb3836;3837; -O1-LABEL: atomicrmw_or_i8_aligned_acquire:3838; -O1:    ldaxrb w8, [x0]3839; -O1:    orr w9, w8, w13840; -O1:    stxrb w10, w9, [x0]3841    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 13842    ret i8 %r3843}3844 3845define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) {3846; -O0-LABEL: atomicrmw_or_i8_aligned_release:3847; -O0:    orr w12, w10, w83848; -O0:    ldaxrb w9, [x11]3849; -O0:    cmp w9, w10, uxtb3850; -O0:    stlxrb w8, w12, [x11]3851; -O0:    and w8, w9, #0xff3852; -O0:    subs w8, w8, w10, uxtb3853;3854; -O1-LABEL: atomicrmw_or_i8_aligned_release:3855; -O1:    ldxrb w8, [x0]3856; -O1:    orr w9, w8, w13857; -O1:    stlxrb w10, w9, [x0]3858    %r = atomicrmw or ptr %ptr, i8 %value release, align 13859    ret i8 %r3860}3861 3862define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3863; -O0-LABEL: atomicrmw_or_i8_aligned_acq_rel:3864; -O0:    orr w12, w10, w83865; -O0:    ldaxrb w9, [x11]3866; -O0:    cmp w9, w10, uxtb3867; -O0:    stlxrb w8, w12, [x11]3868; -O0:    and w8, w9, #0xff3869; -O0:    subs w8, w8, w10, uxtb3870;3871; -O1-LABEL: atomicrmw_or_i8_aligned_acq_rel:3872; -O1:    ldaxrb w8, [x0]3873; -O1:    orr w9, w8, w13874; -O1:    stlxrb w10, w9, [x0]3875    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 13876    ret i8 %r3877}3878 3879define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3880; -O0-LABEL: atomicrmw_or_i8_aligned_seq_cst:3881; -O0:    orr w12, w10, w83882; -O0:    ldaxrb w9, [x11]3883; -O0:    cmp w9, w10, uxtb3884; -O0:    stlxrb w8, w12, [x11]3885; -O0:    and w8, w9, #0xff3886; -O0:    subs w8, w8, w10, uxtb3887;3888; -O1-LABEL: atomicrmw_or_i8_aligned_seq_cst:3889; -O1:    ldaxrb w8, [x0]3890; -O1:    orr w9, w8, w13891; -O1:    stlxrb w10, w9, [x0]3892    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 13893    ret i8 %r3894}3895 3896define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) {3897; -O0-LABEL: atomicrmw_or_i16_aligned_monotonic:3898; -O0:    orr w12, w8, w93899; -O0:    ldaxrh w9, [x11]3900; -O0:    cmp w9, w8, uxth3901; -O0:    stlxrh w10, w12, [x11]3902; -O0:    subs w8, w8, w9, uxth3903;3904; -O1-LABEL: atomicrmw_or_i16_aligned_monotonic:3905; -O1:    ldxrh w8, [x0]3906; -O1:    orr w9, w8, w13907; -O1:    stxrh w10, w9, [x0]3908    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 23909    ret i16 %r3910}3911 3912define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) {3913; -O0-LABEL: atomicrmw_or_i16_aligned_acquire:3914; -O0:    orr w12, w8, w93915; -O0:    ldaxrh w9, [x11]3916; -O0:    cmp w9, w8, uxth3917; -O0:    stlxrh w10, w12, [x11]3918; -O0:    subs w8, w8, w9, uxth3919;3920; -O1-LABEL: atomicrmw_or_i16_aligned_acquire:3921; -O1:    ldaxrh w8, [x0]3922; -O1:    orr w9, w8, w13923; -O1:    stxrh w10, w9, [x0]3924    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 23925    ret i16 %r3926}3927 3928define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) {3929; -O0-LABEL: atomicrmw_or_i16_aligned_release:3930; -O0:    orr w12, w8, w93931; -O0:    ldaxrh w9, [x11]3932; -O0:    cmp w9, w8, uxth3933; -O0:    stlxrh w10, w12, [x11]3934; -O0:    subs w8, w8, w9, uxth3935;3936; -O1-LABEL: atomicrmw_or_i16_aligned_release:3937; -O1:    ldxrh w8, [x0]3938; -O1:    orr w9, w8, w13939; -O1:    stlxrh w10, w9, [x0]3940    %r = atomicrmw or ptr %ptr, i16 %value release, align 23941    ret i16 %r3942}3943 3944define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3945; -O0-LABEL: atomicrmw_or_i16_aligned_acq_rel:3946; -O0:    orr w12, w8, w93947; -O0:    ldaxrh w9, [x11]3948; -O0:    cmp w9, w8, uxth3949; -O0:    stlxrh w10, w12, [x11]3950; -O0:    subs w8, w8, w9, uxth3951;3952; -O1-LABEL: atomicrmw_or_i16_aligned_acq_rel:3953; -O1:    ldaxrh w8, [x0]3954; -O1:    orr w9, w8, w13955; -O1:    stlxrh w10, w9, [x0]3956    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 23957    ret i16 %r3958}3959 3960define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3961; -O0-LABEL: atomicrmw_or_i16_aligned_seq_cst:3962; -O0:    orr w12, w8, w93963; -O0:    ldaxrh w9, [x11]3964; -O0:    cmp w9, w8, uxth3965; -O0:    stlxrh w10, w12, [x11]3966; -O0:    subs w8, w8, w9, uxth3967;3968; -O1-LABEL: atomicrmw_or_i16_aligned_seq_cst:3969; -O1:    ldaxrh w8, [x0]3970; -O1:    orr w9, w8, w13971; -O1:    stlxrh w10, w9, [x0]3972    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 23973    ret i16 %r3974}3975 3976define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) {3977; -O0-LABEL: atomicrmw_or_i32_aligned_monotonic:3978; -O0:    orr w12, w8, w93979; -O0:    ldaxr w9, [x11]3980; -O0:    cmp w9, w83981; -O0:    stlxr w10, w12, [x11]3982; -O0:    subs w8, w9, w83983;3984; -O1-LABEL: atomicrmw_or_i32_aligned_monotonic:3985; -O1:    ldxr w8, [x0]3986; -O1:    orr w9, w8, w13987; -O1:    stxr w10, w9, [x0]3988    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 43989    ret i32 %r3990}3991 3992define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) {3993; -O0-LABEL: atomicrmw_or_i32_aligned_acquire:3994; -O0:    orr w12, w8, w93995; -O0:    ldaxr w9, [x11]3996; -O0:    cmp w9, w83997; -O0:    stlxr w10, w12, [x11]3998; -O0:    subs w8, w9, w83999;4000; -O1-LABEL: atomicrmw_or_i32_aligned_acquire:4001; -O1:    ldaxr w8, [x0]4002; -O1:    orr w9, w8, w14003; -O1:    stxr w10, w9, [x0]4004    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 44005    ret i32 %r4006}4007 4008define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) {4009; -O0-LABEL: atomicrmw_or_i32_aligned_release:4010; -O0:    orr w12, w8, w94011; -O0:    ldaxr w9, [x11]4012; -O0:    cmp w9, w84013; -O0:    stlxr w10, w12, [x11]4014; -O0:    subs w8, w9, w84015;4016; -O1-LABEL: atomicrmw_or_i32_aligned_release:4017; -O1:    ldxr w8, [x0]4018; -O1:    orr w9, w8, w14019; -O1:    stlxr w10, w9, [x0]4020    %r = atomicrmw or ptr %ptr, i32 %value release, align 44021    ret i32 %r4022}4023 4024define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4025; -O0-LABEL: atomicrmw_or_i32_aligned_acq_rel:4026; -O0:    orr w12, w8, w94027; -O0:    ldaxr w9, [x11]4028; -O0:    cmp w9, w84029; -O0:    stlxr w10, w12, [x11]4030; -O0:    subs w8, w9, w84031;4032; -O1-LABEL: atomicrmw_or_i32_aligned_acq_rel:4033; -O1:    ldaxr w8, [x0]4034; -O1:    orr w9, w8, w14035; -O1:    stlxr w10, w9, [x0]4036    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 44037    ret i32 %r4038}4039 4040define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4041; -O0-LABEL: atomicrmw_or_i32_aligned_seq_cst:4042; -O0:    orr w12, w8, w94043; -O0:    ldaxr w9, [x11]4044; -O0:    cmp w9, w84045; -O0:    stlxr w10, w12, [x11]4046; -O0:    subs w8, w9, w84047;4048; -O1-LABEL: atomicrmw_or_i32_aligned_seq_cst:4049; -O1:    ldaxr w8, [x0]4050; -O1:    orr w9, w8, w14051; -O1:    stlxr w10, w9, [x0]4052    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 44053    ret i32 %r4054}4055 4056define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) {4057; -O0-LABEL: atomicrmw_or_i64_aligned_monotonic:4058; -O0:    orr x12, x8, x94059; -O0:    ldaxr x9, [x11]4060; -O0:    cmp x9, x84061; -O0:    stlxr w10, x12, [x11]4062; -O0:    subs x8, x9, x84063;4064; -O1-LABEL: atomicrmw_or_i64_aligned_monotonic:4065; -O1:    ldxr x0, [x8]4066; -O1:    orr x9, x0, x14067; -O1:    stxr w10, x9, [x8]4068    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 84069    ret i64 %r4070}4071 4072define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) {4073; -O0-LABEL: atomicrmw_or_i64_aligned_acquire:4074; -O0:    orr x12, x8, x94075; -O0:    ldaxr x9, [x11]4076; -O0:    cmp x9, x84077; -O0:    stlxr w10, x12, [x11]4078; -O0:    subs x8, x9, x84079;4080; -O1-LABEL: atomicrmw_or_i64_aligned_acquire:4081; -O1:    ldaxr x0, [x8]4082; -O1:    orr x9, x0, x14083; -O1:    stxr w10, x9, [x8]4084    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 84085    ret i64 %r4086}4087 4088define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) {4089; -O0-LABEL: atomicrmw_or_i64_aligned_release:4090; -O0:    orr x12, x8, x94091; -O0:    ldaxr x9, [x11]4092; -O0:    cmp x9, x84093; -O0:    stlxr w10, x12, [x11]4094; -O0:    subs x8, x9, x84095;4096; -O1-LABEL: atomicrmw_or_i64_aligned_release:4097; -O1:    ldxr x0, [x8]4098; -O1:    orr x9, x0, x14099; -O1:    stlxr w10, x9, [x8]4100    %r = atomicrmw or ptr %ptr, i64 %value release, align 84101    ret i64 %r4102}4103 4104define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4105; -O0-LABEL: atomicrmw_or_i64_aligned_acq_rel:4106; -O0:    orr x12, x8, x94107; -O0:    ldaxr x9, [x11]4108; -O0:    cmp x9, x84109; -O0:    stlxr w10, x12, [x11]4110; -O0:    subs x8, x9, x84111;4112; -O1-LABEL: atomicrmw_or_i64_aligned_acq_rel:4113; -O1:    ldaxr x0, [x8]4114; -O1:    orr x9, x0, x14115; -O1:    stlxr w10, x9, [x8]4116    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 84117    ret i64 %r4118}4119 4120define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4121; -O0-LABEL: atomicrmw_or_i64_aligned_seq_cst:4122; -O0:    orr x12, x8, x94123; -O0:    ldaxr x9, [x11]4124; -O0:    cmp x9, x84125; -O0:    stlxr w10, x12, [x11]4126; -O0:    subs x8, x9, x84127;4128; -O1-LABEL: atomicrmw_or_i64_aligned_seq_cst:4129; -O1:    ldaxr x0, [x8]4130; -O1:    orr x9, x0, x14131; -O1:    stlxr w10, x9, [x8]4132    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 84133    ret i64 %r4134}4135 4136define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) {4137; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic:4138; -O0:    orr x14, x8, x104139; -O0:    orr x15, x8, x94140; -O0:    ldxp x10, x9, [x11]4141; -O0:    cmp x10, x124142; -O0:    cmp x9, x134143; -O0:    stxp w8, x14, x15, [x11]4144; -O0:    stxp w8, x10, x9, [x11]4145; -O0:    eor x8, x10, x84146; -O0:    eor x11, x9, x114147; -O0:    orr x8, x8, x114148; -O0:    subs x8, x8, #04149;4150; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic:4151; -O1:    ldxp x0, x1, [x8]4152; -O1:    orr x9, x1, x34153; -O1:    orr x10, x0, x24154; -O1:    stxp w11, x10, x9, [x8]4155    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 164156    ret i128 %r4157}4158 4159define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) {4160; -O0-LABEL: atomicrmw_or_i128_aligned_acquire:4161; -O0:    orr x14, x8, x104162; -O0:    orr x15, x8, x94163; -O0:    ldaxp x10, x9, [x11]4164; -O0:    cmp x10, x124165; -O0:    cmp x9, x134166; -O0:    stxp w8, x14, x15, [x11]4167; -O0:    stxp w8, x10, x9, [x11]4168; -O0:    eor x8, x10, x84169; -O0:    eor x11, x9, x114170; -O0:    orr x8, x8, x114171; -O0:    subs x8, x8, #04172;4173; -O1-LABEL: atomicrmw_or_i128_aligned_acquire:4174; -O1:    ldaxp x0, x1, [x8]4175; -O1:    orr x9, x1, x34176; -O1:    orr x10, x0, x24177; -O1:    stxp w11, x10, x9, [x8]4178    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 164179    ret i128 %r4180}4181 4182define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) {4183; -O0-LABEL: atomicrmw_or_i128_aligned_release:4184; -O0:    orr x14, x8, x104185; -O0:    orr x15, x8, x94186; -O0:    ldxp x10, x9, [x11]4187; -O0:    cmp x10, x124188; -O0:    cmp x9, x134189; -O0:    stlxp w8, x14, x15, [x11]4190; -O0:    stlxp w8, x10, x9, [x11]4191; -O0:    eor x8, x10, x84192; -O0:    eor x11, x9, x114193; -O0:    orr x8, x8, x114194; -O0:    subs x8, x8, #04195;4196; -O1-LABEL: atomicrmw_or_i128_aligned_release:4197; -O1:    ldxp x0, x1, [x8]4198; -O1:    orr x9, x1, x34199; -O1:    orr x10, x0, x24200; -O1:    stlxp w11, x10, x9, [x8]4201    %r = atomicrmw or ptr %ptr, i128 %value release, align 164202    ret i128 %r4203}4204 4205define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4206; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel:4207; -O0:    orr x14, x8, x104208; -O0:    orr x15, x8, x94209; -O0:    ldaxp x10, x9, [x11]4210; -O0:    cmp x10, x124211; -O0:    cmp x9, x134212; -O0:    stlxp w8, x14, x15, [x11]4213; -O0:    stlxp w8, x10, x9, [x11]4214; -O0:    eor x8, x10, x84215; -O0:    eor x11, x9, x114216; -O0:    orr x8, x8, x114217; -O0:    subs x8, x8, #04218;4219; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel:4220; -O1:    ldaxp x0, x1, [x8]4221; -O1:    orr x9, x1, x34222; -O1:    orr x10, x0, x24223; -O1:    stlxp w11, x10, x9, [x8]4224    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 164225    ret i128 %r4226}4227 4228define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4229; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst:4230; -O0:    orr x14, x8, x104231; -O0:    orr x15, x8, x94232; -O0:    ldaxp x10, x9, [x11]4233; -O0:    cmp x10, x124234; -O0:    cmp x9, x134235; -O0:    stlxp w8, x14, x15, [x11]4236; -O0:    stlxp w8, x10, x9, [x11]4237; -O0:    eor x8, x10, x84238; -O0:    eor x11, x9, x114239; -O0:    orr x8, x8, x114240; -O0:    subs x8, x8, #04241;4242; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst:4243; -O1:    ldaxp x0, x1, [x8]4244; -O1:    orr x9, x1, x34245; -O1:    orr x10, x0, x24246; -O1:    stlxp w11, x10, x9, [x8]4247    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 164248    ret i128 %r4249}4250 4251define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4252; -O0-LABEL: atomicrmw_or_i8_unaligned_monotonic:4253; -O0:    orr w12, w10, w84254; -O0:    ldaxrb w9, [x11]4255; -O0:    cmp w9, w10, uxtb4256; -O0:    stlxrb w8, w12, [x11]4257; -O0:    and w8, w9, #0xff4258; -O0:    subs w8, w8, w10, uxtb4259;4260; -O1-LABEL: atomicrmw_or_i8_unaligned_monotonic:4261; -O1:    ldxrb w8, [x0]4262; -O1:    orr w9, w8, w14263; -O1:    stxrb w10, w9, [x0]4264    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 14265    ret i8 %r4266}4267 4268define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) {4269; -O0-LABEL: atomicrmw_or_i8_unaligned_acquire:4270; -O0:    orr w12, w10, w84271; -O0:    ldaxrb w9, [x11]4272; -O0:    cmp w9, w10, uxtb4273; -O0:    stlxrb w8, w12, [x11]4274; -O0:    and w8, w9, #0xff4275; -O0:    subs w8, w8, w10, uxtb4276;4277; -O1-LABEL: atomicrmw_or_i8_unaligned_acquire:4278; -O1:    ldaxrb w8, [x0]4279; -O1:    orr w9, w8, w14280; -O1:    stxrb w10, w9, [x0]4281    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 14282    ret i8 %r4283}4284 4285define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) {4286; -O0-LABEL: atomicrmw_or_i8_unaligned_release:4287; -O0:    orr w12, w10, w84288; -O0:    ldaxrb w9, [x11]4289; -O0:    cmp w9, w10, uxtb4290; -O0:    stlxrb w8, w12, [x11]4291; -O0:    and w8, w9, #0xff4292; -O0:    subs w8, w8, w10, uxtb4293;4294; -O1-LABEL: atomicrmw_or_i8_unaligned_release:4295; -O1:    ldxrb w8, [x0]4296; -O1:    orr w9, w8, w14297; -O1:    stlxrb w10, w9, [x0]4298    %r = atomicrmw or ptr %ptr, i8 %value release, align 14299    ret i8 %r4300}4301 4302define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4303; -O0-LABEL: atomicrmw_or_i8_unaligned_acq_rel:4304; -O0:    orr w12, w10, w84305; -O0:    ldaxrb w9, [x11]4306; -O0:    cmp w9, w10, uxtb4307; -O0:    stlxrb w8, w12, [x11]4308; -O0:    and w8, w9, #0xff4309; -O0:    subs w8, w8, w10, uxtb4310;4311; -O1-LABEL: atomicrmw_or_i8_unaligned_acq_rel:4312; -O1:    ldaxrb w8, [x0]4313; -O1:    orr w9, w8, w14314; -O1:    stlxrb w10, w9, [x0]4315    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 14316    ret i8 %r4317}4318 4319define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4320; -O0-LABEL: atomicrmw_or_i8_unaligned_seq_cst:4321; -O0:    orr w12, w10, w84322; -O0:    ldaxrb w9, [x11]4323; -O0:    cmp w9, w10, uxtb4324; -O0:    stlxrb w8, w12, [x11]4325; -O0:    and w8, w9, #0xff4326; -O0:    subs w8, w8, w10, uxtb4327;4328; -O1-LABEL: atomicrmw_or_i8_unaligned_seq_cst:4329; -O1:    ldaxrb w8, [x0]4330; -O1:    orr w9, w8, w14331; -O1:    stlxrb w10, w9, [x0]4332    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 14333    ret i8 %r4334}4335 4336define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4337; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic:4338; -O0:    orr w8, w9, w84339; -O0:    bl __atomic_compare_exchange4340;4341; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic:4342; -O1:    orr w8, w0, w204343; -O1:    bl __atomic_compare_exchange4344    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 14345    ret i16 %r4346}4347 4348define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) {4349; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire:4350; -O0:    orr w8, w9, w84351; -O0:    bl __atomic_compare_exchange4352;4353; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire:4354; -O1:    orr w8, w0, w204355; -O1:    bl __atomic_compare_exchange4356    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 14357    ret i16 %r4358}4359 4360define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) {4361; -O0-LABEL: atomicrmw_or_i16_unaligned_release:4362; -O0:    orr w8, w9, w84363; -O0:    bl __atomic_compare_exchange4364;4365; -O1-LABEL: atomicrmw_or_i16_unaligned_release:4366; -O1:    orr w8, w0, w204367; -O1:    bl __atomic_compare_exchange4368    %r = atomicrmw or ptr %ptr, i16 %value release, align 14369    ret i16 %r4370}4371 4372define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4373; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel:4374; -O0:    orr w8, w9, w84375; -O0:    bl __atomic_compare_exchange4376;4377; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel:4378; -O1:    orr w8, w0, w204379; -O1:    bl __atomic_compare_exchange4380    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 14381    ret i16 %r4382}4383 4384define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4385; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst:4386; -O0:    orr w8, w9, w84387; -O0:    bl __atomic_compare_exchange4388;4389; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst:4390; -O1:    orr w8, w0, w204391; -O1:    bl __atomic_compare_exchange4392    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 14393    ret i16 %r4394}4395 4396define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4397; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic:4398; -O0:    orr w8, w9, w84399; -O0:    bl __atomic_compare_exchange4400;4401; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic:4402; -O1:    orr w8, w0, w204403; -O1:    bl __atomic_compare_exchange4404    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 14405    ret i32 %r4406}4407 4408define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) {4409; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire:4410; -O0:    orr w8, w9, w84411; -O0:    bl __atomic_compare_exchange4412;4413; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire:4414; -O1:    orr w8, w0, w204415; -O1:    bl __atomic_compare_exchange4416    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 14417    ret i32 %r4418}4419 4420define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) {4421; -O0-LABEL: atomicrmw_or_i32_unaligned_release:4422; -O0:    orr w8, w9, w84423; -O0:    bl __atomic_compare_exchange4424;4425; -O1-LABEL: atomicrmw_or_i32_unaligned_release:4426; -O1:    orr w8, w0, w204427; -O1:    bl __atomic_compare_exchange4428    %r = atomicrmw or ptr %ptr, i32 %value release, align 14429    ret i32 %r4430}4431 4432define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4433; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel:4434; -O0:    orr w8, w9, w84435; -O0:    bl __atomic_compare_exchange4436;4437; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel:4438; -O1:    orr w8, w0, w204439; -O1:    bl __atomic_compare_exchange4440    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 14441    ret i32 %r4442}4443 4444define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4445; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst:4446; -O0:    orr w8, w9, w84447; -O0:    bl __atomic_compare_exchange4448;4449; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst:4450; -O1:    orr w8, w0, w204451; -O1:    bl __atomic_compare_exchange4452    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 14453    ret i32 %r4454}4455 4456define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4457; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic:4458; -O0:    orr x8, x9, x84459; -O0:    bl __atomic_compare_exchange4460;4461; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic:4462; -O1:    orr x8, x0, x204463; -O1:    bl __atomic_compare_exchange4464    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 14465    ret i64 %r4466}4467 4468define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) {4469; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire:4470; -O0:    orr x8, x9, x84471; -O0:    bl __atomic_compare_exchange4472;4473; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire:4474; -O1:    orr x8, x0, x204475; -O1:    bl __atomic_compare_exchange4476    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 14477    ret i64 %r4478}4479 4480define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) {4481; -O0-LABEL: atomicrmw_or_i64_unaligned_release:4482; -O0:    orr x8, x9, x84483; -O0:    bl __atomic_compare_exchange4484;4485; -O1-LABEL: atomicrmw_or_i64_unaligned_release:4486; -O1:    orr x8, x0, x204487; -O1:    bl __atomic_compare_exchange4488    %r = atomicrmw or ptr %ptr, i64 %value release, align 14489    ret i64 %r4490}4491 4492define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4493; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel:4494; -O0:    orr x8, x9, x84495; -O0:    bl __atomic_compare_exchange4496;4497; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel:4498; -O1:    orr x8, x0, x204499; -O1:    bl __atomic_compare_exchange4500    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 14501    ret i64 %r4502}4503 4504define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4505; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst:4506; -O0:    orr x8, x9, x84507; -O0:    bl __atomic_compare_exchange4508;4509; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst:4510; -O1:    orr x8, x0, x204511; -O1:    bl __atomic_compare_exchange4512    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 14513    ret i64 %r4514}4515 4516define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4517; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic:4518; -O0:    orr x9, x8, x94519; -O0:    orr x8, x8, x104520; -O0:    bl __atomic_compare_exchange4521;4522; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic:4523; -O1:    ldp x0, x1, [x0]4524; -O1:    orr x8, x1, x194525; -O1:    orr x9, x0, x214526; -O1:    bl __atomic_compare_exchange4527    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 14528    ret i128 %r4529}4530 4531define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) {4532; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire:4533; -O0:    orr x9, x8, x94534; -O0:    orr x8, x8, x104535; -O0:    bl __atomic_compare_exchange4536;4537; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire:4538; -O1:    ldp x0, x1, [x0]4539; -O1:    orr x8, x1, x194540; -O1:    orr x9, x0, x214541; -O1:    bl __atomic_compare_exchange4542    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 14543    ret i128 %r4544}4545 4546define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) {4547; -O0-LABEL: atomicrmw_or_i128_unaligned_release:4548; -O0:    orr x9, x8, x94549; -O0:    orr x8, x8, x104550; -O0:    bl __atomic_compare_exchange4551;4552; -O1-LABEL: atomicrmw_or_i128_unaligned_release:4553; -O1:    ldp x0, x1, [x0]4554; -O1:    orr x8, x1, x194555; -O1:    orr x9, x0, x214556; -O1:    bl __atomic_compare_exchange4557    %r = atomicrmw or ptr %ptr, i128 %value release, align 14558    ret i128 %r4559}4560 4561define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4562; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel:4563; -O0:    orr x9, x8, x94564; -O0:    orr x8, x8, x104565; -O0:    bl __atomic_compare_exchange4566;4567; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel:4568; -O1:    ldp x0, x1, [x0]4569; -O1:    orr x8, x1, x194570; -O1:    orr x9, x0, x214571; -O1:    bl __atomic_compare_exchange4572    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 14573    ret i128 %r4574}4575 4576define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4577; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst:4578; -O0:    orr x9, x8, x94579; -O0:    orr x8, x8, x104580; -O0:    bl __atomic_compare_exchange4581;4582; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst:4583; -O1:    ldp x0, x1, [x0]4584; -O1:    orr x8, x1, x194585; -O1:    orr x9, x0, x214586; -O1:    bl __atomic_compare_exchange4587    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 14588    ret i128 %r4589}4590 4591define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) {4592; -O0-LABEL: atomicrmw_xor_i8_aligned_monotonic:4593; -O0:    eor w12, w10, w84594; -O0:    ldaxrb w9, [x11]4595; -O0:    cmp w9, w10, uxtb4596; -O0:    stlxrb w8, w12, [x11]4597; -O0:    and w8, w9, #0xff4598; -O0:    subs w8, w8, w10, uxtb4599;4600; -O1-LABEL: atomicrmw_xor_i8_aligned_monotonic:4601; -O1:    ldxrb w8, [x0]4602; -O1:    eor w9, w8, w14603; -O1:    stxrb w10, w9, [x0]4604    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 14605    ret i8 %r4606}4607 4608define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) {4609; -O0-LABEL: atomicrmw_xor_i8_aligned_acquire:4610; -O0:    eor w12, w10, w84611; -O0:    ldaxrb w9, [x11]4612; -O0:    cmp w9, w10, uxtb4613; -O0:    stlxrb w8, w12, [x11]4614; -O0:    and w8, w9, #0xff4615; -O0:    subs w8, w8, w10, uxtb4616;4617; -O1-LABEL: atomicrmw_xor_i8_aligned_acquire:4618; -O1:    ldaxrb w8, [x0]4619; -O1:    eor w9, w8, w14620; -O1:    stxrb w10, w9, [x0]4621    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 14622    ret i8 %r4623}4624 4625define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) {4626; -O0-LABEL: atomicrmw_xor_i8_aligned_release:4627; -O0:    eor w12, w10, w84628; -O0:    ldaxrb w9, [x11]4629; -O0:    cmp w9, w10, uxtb4630; -O0:    stlxrb w8, w12, [x11]4631; -O0:    and w8, w9, #0xff4632; -O0:    subs w8, w8, w10, uxtb4633;4634; -O1-LABEL: atomicrmw_xor_i8_aligned_release:4635; -O1:    ldxrb w8, [x0]4636; -O1:    eor w9, w8, w14637; -O1:    stlxrb w10, w9, [x0]4638    %r = atomicrmw xor ptr %ptr, i8 %value release, align 14639    ret i8 %r4640}4641 4642define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) {4643; -O0-LABEL: atomicrmw_xor_i8_aligned_acq_rel:4644; -O0:    eor w12, w10, w84645; -O0:    ldaxrb w9, [x11]4646; -O0:    cmp w9, w10, uxtb4647; -O0:    stlxrb w8, w12, [x11]4648; -O0:    and w8, w9, #0xff4649; -O0:    subs w8, w8, w10, uxtb4650;4651; -O1-LABEL: atomicrmw_xor_i8_aligned_acq_rel:4652; -O1:    ldaxrb w8, [x0]4653; -O1:    eor w9, w8, w14654; -O1:    stlxrb w10, w9, [x0]4655    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 14656    ret i8 %r4657}4658 4659define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) {4660; -O0-LABEL: atomicrmw_xor_i8_aligned_seq_cst:4661; -O0:    eor w12, w10, w84662; -O0:    ldaxrb w9, [x11]4663; -O0:    cmp w9, w10, uxtb4664; -O0:    stlxrb w8, w12, [x11]4665; -O0:    and w8, w9, #0xff4666; -O0:    subs w8, w8, w10, uxtb4667;4668; -O1-LABEL: atomicrmw_xor_i8_aligned_seq_cst:4669; -O1:    ldaxrb w8, [x0]4670; -O1:    eor w9, w8, w14671; -O1:    stlxrb w10, w9, [x0]4672    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 14673    ret i8 %r4674}4675 4676define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) {4677; -O0-LABEL: atomicrmw_xor_i16_aligned_monotonic:4678; -O0:    eor w12, w8, w94679; -O0:    ldaxrh w9, [x11]4680; -O0:    cmp w9, w8, uxth4681; -O0:    stlxrh w10, w12, [x11]4682; -O0:    subs w8, w8, w9, uxth4683;4684; -O1-LABEL: atomicrmw_xor_i16_aligned_monotonic:4685; -O1:    ldxrh w8, [x0]4686; -O1:    eor w9, w8, w14687; -O1:    stxrh w10, w9, [x0]4688    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 24689    ret i16 %r4690}4691 4692define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) {4693; -O0-LABEL: atomicrmw_xor_i16_aligned_acquire:4694; -O0:    eor w12, w8, w94695; -O0:    ldaxrh w9, [x11]4696; -O0:    cmp w9, w8, uxth4697; -O0:    stlxrh w10, w12, [x11]4698; -O0:    subs w8, w8, w9, uxth4699;4700; -O1-LABEL: atomicrmw_xor_i16_aligned_acquire:4701; -O1:    ldaxrh w8, [x0]4702; -O1:    eor w9, w8, w14703; -O1:    stxrh w10, w9, [x0]4704    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 24705    ret i16 %r4706}4707 4708define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) {4709; -O0-LABEL: atomicrmw_xor_i16_aligned_release:4710; -O0:    eor w12, w8, w94711; -O0:    ldaxrh w9, [x11]4712; -O0:    cmp w9, w8, uxth4713; -O0:    stlxrh w10, w12, [x11]4714; -O0:    subs w8, w8, w9, uxth4715;4716; -O1-LABEL: atomicrmw_xor_i16_aligned_release:4717; -O1:    ldxrh w8, [x0]4718; -O1:    eor w9, w8, w14719; -O1:    stlxrh w10, w9, [x0]4720    %r = atomicrmw xor ptr %ptr, i16 %value release, align 24721    ret i16 %r4722}4723 4724define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) {4725; -O0-LABEL: atomicrmw_xor_i16_aligned_acq_rel:4726; -O0:    eor w12, w8, w94727; -O0:    ldaxrh w9, [x11]4728; -O0:    cmp w9, w8, uxth4729; -O0:    stlxrh w10, w12, [x11]4730; -O0:    subs w8, w8, w9, uxth4731;4732; -O1-LABEL: atomicrmw_xor_i16_aligned_acq_rel:4733; -O1:    ldaxrh w8, [x0]4734; -O1:    eor w9, w8, w14735; -O1:    stlxrh w10, w9, [x0]4736    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 24737    ret i16 %r4738}4739 4740define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) {4741; -O0-LABEL: atomicrmw_xor_i16_aligned_seq_cst:4742; -O0:    eor w12, w8, w94743; -O0:    ldaxrh w9, [x11]4744; -O0:    cmp w9, w8, uxth4745; -O0:    stlxrh w10, w12, [x11]4746; -O0:    subs w8, w8, w9, uxth4747;4748; -O1-LABEL: atomicrmw_xor_i16_aligned_seq_cst:4749; -O1:    ldaxrh w8, [x0]4750; -O1:    eor w9, w8, w14751; -O1:    stlxrh w10, w9, [x0]4752    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 24753    ret i16 %r4754}4755 4756define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) {4757; -O0-LABEL: atomicrmw_xor_i32_aligned_monotonic:4758; -O0:    eor w12, w8, w94759; -O0:    ldaxr w9, [x11]4760; -O0:    cmp w9, w84761; -O0:    stlxr w10, w12, [x11]4762; -O0:    subs w8, w9, w84763;4764; -O1-LABEL: atomicrmw_xor_i32_aligned_monotonic:4765; -O1:    ldxr w8, [x0]4766; -O1:    eor w9, w8, w14767; -O1:    stxr w10, w9, [x0]4768    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 44769    ret i32 %r4770}4771 4772define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) {4773; -O0-LABEL: atomicrmw_xor_i32_aligned_acquire:4774; -O0:    eor w12, w8, w94775; -O0:    ldaxr w9, [x11]4776; -O0:    cmp w9, w84777; -O0:    stlxr w10, w12, [x11]4778; -O0:    subs w8, w9, w84779;4780; -O1-LABEL: atomicrmw_xor_i32_aligned_acquire:4781; -O1:    ldaxr w8, [x0]4782; -O1:    eor w9, w8, w14783; -O1:    stxr w10, w9, [x0]4784    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 44785    ret i32 %r4786}4787 4788define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) {4789; -O0-LABEL: atomicrmw_xor_i32_aligned_release:4790; -O0:    eor w12, w8, w94791; -O0:    ldaxr w9, [x11]4792; -O0:    cmp w9, w84793; -O0:    stlxr w10, w12, [x11]4794; -O0:    subs w8, w9, w84795;4796; -O1-LABEL: atomicrmw_xor_i32_aligned_release:4797; -O1:    ldxr w8, [x0]4798; -O1:    eor w9, w8, w14799; -O1:    stlxr w10, w9, [x0]4800    %r = atomicrmw xor ptr %ptr, i32 %value release, align 44801    ret i32 %r4802}4803 4804define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4805; -O0-LABEL: atomicrmw_xor_i32_aligned_acq_rel:4806; -O0:    eor w12, w8, w94807; -O0:    ldaxr w9, [x11]4808; -O0:    cmp w9, w84809; -O0:    stlxr w10, w12, [x11]4810; -O0:    subs w8, w9, w84811;4812; -O1-LABEL: atomicrmw_xor_i32_aligned_acq_rel:4813; -O1:    ldaxr w8, [x0]4814; -O1:    eor w9, w8, w14815; -O1:    stlxr w10, w9, [x0]4816    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 44817    ret i32 %r4818}4819 4820define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4821; -O0-LABEL: atomicrmw_xor_i32_aligned_seq_cst:4822; -O0:    eor w12, w8, w94823; -O0:    ldaxr w9, [x11]4824; -O0:    cmp w9, w84825; -O0:    stlxr w10, w12, [x11]4826; -O0:    subs w8, w9, w84827;4828; -O1-LABEL: atomicrmw_xor_i32_aligned_seq_cst:4829; -O1:    ldaxr w8, [x0]4830; -O1:    eor w9, w8, w14831; -O1:    stlxr w10, w9, [x0]4832    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 44833    ret i32 %r4834}4835 4836define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) {4837; -O0-LABEL: atomicrmw_xor_i64_aligned_monotonic:4838; -O0:    eor x12, x8, x94839; -O0:    ldaxr x9, [x11]4840; -O0:    cmp x9, x84841; -O0:    stlxr w10, x12, [x11]4842; -O0:    subs x8, x9, x84843;4844; -O1-LABEL: atomicrmw_xor_i64_aligned_monotonic:4845; -O1:    ldxr x0, [x8]4846; -O1:    eor x9, x0, x14847; -O1:    stxr w10, x9, [x8]4848    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 84849    ret i64 %r4850}4851 4852define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) {4853; -O0-LABEL: atomicrmw_xor_i64_aligned_acquire:4854; -O0:    eor x12, x8, x94855; -O0:    ldaxr x9, [x11]4856; -O0:    cmp x9, x84857; -O0:    stlxr w10, x12, [x11]4858; -O0:    subs x8, x9, x84859;4860; -O1-LABEL: atomicrmw_xor_i64_aligned_acquire:4861; -O1:    ldaxr x0, [x8]4862; -O1:    eor x9, x0, x14863; -O1:    stxr w10, x9, [x8]4864    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 84865    ret i64 %r4866}4867 4868define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) {4869; -O0-LABEL: atomicrmw_xor_i64_aligned_release:4870; -O0:    eor x12, x8, x94871; -O0:    ldaxr x9, [x11]4872; -O0:    cmp x9, x84873; -O0:    stlxr w10, x12, [x11]4874; -O0:    subs x8, x9, x84875;4876; -O1-LABEL: atomicrmw_xor_i64_aligned_release:4877; -O1:    ldxr x0, [x8]4878; -O1:    eor x9, x0, x14879; -O1:    stlxr w10, x9, [x8]4880    %r = atomicrmw xor ptr %ptr, i64 %value release, align 84881    ret i64 %r4882}4883 4884define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4885; -O0-LABEL: atomicrmw_xor_i64_aligned_acq_rel:4886; -O0:    eor x12, x8, x94887; -O0:    ldaxr x9, [x11]4888; -O0:    cmp x9, x84889; -O0:    stlxr w10, x12, [x11]4890; -O0:    subs x8, x9, x84891;4892; -O1-LABEL: atomicrmw_xor_i64_aligned_acq_rel:4893; -O1:    ldaxr x0, [x8]4894; -O1:    eor x9, x0, x14895; -O1:    stlxr w10, x9, [x8]4896    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 84897    ret i64 %r4898}4899 4900define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4901; -O0-LABEL: atomicrmw_xor_i64_aligned_seq_cst:4902; -O0:    eor x12, x8, x94903; -O0:    ldaxr x9, [x11]4904; -O0:    cmp x9, x84905; -O0:    stlxr w10, x12, [x11]4906; -O0:    subs x8, x9, x84907;4908; -O1-LABEL: atomicrmw_xor_i64_aligned_seq_cst:4909; -O1:    ldaxr x0, [x8]4910; -O1:    eor x9, x0, x14911; -O1:    stlxr w10, x9, [x8]4912    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 84913    ret i64 %r4914}4915 4916define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) {4917; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic:4918; -O0:    eor x14, x8, x104919; -O0:    eor x15, x8, x94920; -O0:    ldxp x10, x9, [x11]4921; -O0:    cmp x10, x124922; -O0:    cmp x9, x134923; -O0:    stxp w8, x14, x15, [x11]4924; -O0:    stxp w8, x10, x9, [x11]4925; -O0:    eor x8, x10, x84926; -O0:    eor x11, x9, x114927; -O0:    orr x8, x8, x114928; -O0:    subs x8, x8, #04929;4930; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic:4931; -O1:    ldxp x0, x1, [x8]4932; -O1:    eor x9, x1, x34933; -O1:    eor x10, x0, x24934; -O1:    stxp w11, x10, x9, [x8]4935    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 164936    ret i128 %r4937}4938 4939define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) {4940; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire:4941; -O0:    eor x14, x8, x104942; -O0:    eor x15, x8, x94943; -O0:    ldaxp x10, x9, [x11]4944; -O0:    cmp x10, x124945; -O0:    cmp x9, x134946; -O0:    stxp w8, x14, x15, [x11]4947; -O0:    stxp w8, x10, x9, [x11]4948; -O0:    eor x8, x10, x84949; -O0:    eor x11, x9, x114950; -O0:    orr x8, x8, x114951; -O0:    subs x8, x8, #04952;4953; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire:4954; -O1:    ldaxp x0, x1, [x8]4955; -O1:    eor x9, x1, x34956; -O1:    eor x10, x0, x24957; -O1:    stxp w11, x10, x9, [x8]4958    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 164959    ret i128 %r4960}4961 4962define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) {4963; -O0-LABEL: atomicrmw_xor_i128_aligned_release:4964; -O0:    eor x14, x8, x104965; -O0:    eor x15, x8, x94966; -O0:    ldxp x10, x9, [x11]4967; -O0:    cmp x10, x124968; -O0:    cmp x9, x134969; -O0:    stlxp w8, x14, x15, [x11]4970; -O0:    stlxp w8, x10, x9, [x11]4971; -O0:    eor x8, x10, x84972; -O0:    eor x11, x9, x114973; -O0:    orr x8, x8, x114974; -O0:    subs x8, x8, #04975;4976; -O1-LABEL: atomicrmw_xor_i128_aligned_release:4977; -O1:    ldxp x0, x1, [x8]4978; -O1:    eor x9, x1, x34979; -O1:    eor x10, x0, x24980; -O1:    stlxp w11, x10, x9, [x8]4981    %r = atomicrmw xor ptr %ptr, i128 %value release, align 164982    ret i128 %r4983}4984 4985define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4986; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel:4987; -O0:    eor x14, x8, x104988; -O0:    eor x15, x8, x94989; -O0:    ldaxp x10, x9, [x11]4990; -O0:    cmp x10, x124991; -O0:    cmp x9, x134992; -O0:    stlxp w8, x14, x15, [x11]4993; -O0:    stlxp w8, x10, x9, [x11]4994; -O0:    eor x8, x10, x84995; -O0:    eor x11, x9, x114996; -O0:    orr x8, x8, x114997; -O0:    subs x8, x8, #04998;4999; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel:5000; -O1:    ldaxp x0, x1, [x8]5001; -O1:    eor x9, x1, x35002; -O1:    eor x10, x0, x25003; -O1:    stlxp w11, x10, x9, [x8]5004    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 165005    ret i128 %r5006}5007 5008define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5009; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst:5010; -O0:    eor x14, x8, x105011; -O0:    eor x15, x8, x95012; -O0:    ldaxp x10, x9, [x11]5013; -O0:    cmp x10, x125014; -O0:    cmp x9, x135015; -O0:    stlxp w8, x14, x15, [x11]5016; -O0:    stlxp w8, x10, x9, [x11]5017; -O0:    eor x8, x10, x85018; -O0:    eor x11, x9, x115019; -O0:    orr x8, x8, x115020; -O0:    subs x8, x8, #05021;5022; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst:5023; -O1:    ldaxp x0, x1, [x8]5024; -O1:    eor x9, x1, x35025; -O1:    eor x10, x0, x25026; -O1:    stlxp w11, x10, x9, [x8]5027    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 165028    ret i128 %r5029}5030 5031define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5032; -O0-LABEL: atomicrmw_xor_i8_unaligned_monotonic:5033; -O0:    eor w12, w10, w85034; -O0:    ldaxrb w9, [x11]5035; -O0:    cmp w9, w10, uxtb5036; -O0:    stlxrb w8, w12, [x11]5037; -O0:    and w8, w9, #0xff5038; -O0:    subs w8, w8, w10, uxtb5039;5040; -O1-LABEL: atomicrmw_xor_i8_unaligned_monotonic:5041; -O1:    ldxrb w8, [x0]5042; -O1:    eor w9, w8, w15043; -O1:    stxrb w10, w9, [x0]5044    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 15045    ret i8 %r5046}5047 5048define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) {5049; -O0-LABEL: atomicrmw_xor_i8_unaligned_acquire:5050; -O0:    eor w12, w10, w85051; -O0:    ldaxrb w9, [x11]5052; -O0:    cmp w9, w10, uxtb5053; -O0:    stlxrb w8, w12, [x11]5054; -O0:    and w8, w9, #0xff5055; -O0:    subs w8, w8, w10, uxtb5056;5057; -O1-LABEL: atomicrmw_xor_i8_unaligned_acquire:5058; -O1:    ldaxrb w8, [x0]5059; -O1:    eor w9, w8, w15060; -O1:    stxrb w10, w9, [x0]5061    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 15062    ret i8 %r5063}5064 5065define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) {5066; -O0-LABEL: atomicrmw_xor_i8_unaligned_release:5067; -O0:    eor w12, w10, w85068; -O0:    ldaxrb w9, [x11]5069; -O0:    cmp w9, w10, uxtb5070; -O0:    stlxrb w8, w12, [x11]5071; -O0:    and w8, w9, #0xff5072; -O0:    subs w8, w8, w10, uxtb5073;5074; -O1-LABEL: atomicrmw_xor_i8_unaligned_release:5075; -O1:    ldxrb w8, [x0]5076; -O1:    eor w9, w8, w15077; -O1:    stlxrb w10, w9, [x0]5078    %r = atomicrmw xor ptr %ptr, i8 %value release, align 15079    ret i8 %r5080}5081 5082define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5083; -O0-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:5084; -O0:    eor w12, w10, w85085; -O0:    ldaxrb w9, [x11]5086; -O0:    cmp w9, w10, uxtb5087; -O0:    stlxrb w8, w12, [x11]5088; -O0:    and w8, w9, #0xff5089; -O0:    subs w8, w8, w10, uxtb5090;5091; -O1-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:5092; -O1:    ldaxrb w8, [x0]5093; -O1:    eor w9, w8, w15094; -O1:    stlxrb w10, w9, [x0]5095    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 15096    ret i8 %r5097}5098 5099define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5100; -O0-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:5101; -O0:    eor w12, w10, w85102; -O0:    ldaxrb w9, [x11]5103; -O0:    cmp w9, w10, uxtb5104; -O0:    stlxrb w8, w12, [x11]5105; -O0:    and w8, w9, #0xff5106; -O0:    subs w8, w8, w10, uxtb5107;5108; -O1-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:5109; -O1:    ldaxrb w8, [x0]5110; -O1:    eor w9, w8, w15111; -O1:    stlxrb w10, w9, [x0]5112    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 15113    ret i8 %r5114}5115 5116define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5117; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic:5118; -O0:    eor w8, w9, w85119; -O0:    bl __atomic_compare_exchange5120;5121; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic:5122; -O1:    eor w8, w0, w205123; -O1:    bl __atomic_compare_exchange5124    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 15125    ret i16 %r5126}5127 5128define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) {5129; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire:5130; -O0:    eor w8, w9, w85131; -O0:    bl __atomic_compare_exchange5132;5133; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire:5134; -O1:    eor w8, w0, w205135; -O1:    bl __atomic_compare_exchange5136    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 15137    ret i16 %r5138}5139 5140define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) {5141; -O0-LABEL: atomicrmw_xor_i16_unaligned_release:5142; -O0:    eor w8, w9, w85143; -O0:    bl __atomic_compare_exchange5144;5145; -O1-LABEL: atomicrmw_xor_i16_unaligned_release:5146; -O1:    eor w8, w0, w205147; -O1:    bl __atomic_compare_exchange5148    %r = atomicrmw xor ptr %ptr, i16 %value release, align 15149    ret i16 %r5150}5151 5152define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5153; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:5154; -O0:    eor w8, w9, w85155; -O0:    bl __atomic_compare_exchange5156;5157; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:5158; -O1:    eor w8, w0, w205159; -O1:    bl __atomic_compare_exchange5160    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 15161    ret i16 %r5162}5163 5164define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5165; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:5166; -O0:    eor w8, w9, w85167; -O0:    bl __atomic_compare_exchange5168;5169; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:5170; -O1:    eor w8, w0, w205171; -O1:    bl __atomic_compare_exchange5172    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 15173    ret i16 %r5174}5175 5176define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5177; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic:5178; -O0:    eor w8, w9, w85179; -O0:    bl __atomic_compare_exchange5180;5181; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic:5182; -O1:    eor w8, w0, w205183; -O1:    bl __atomic_compare_exchange5184    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 15185    ret i32 %r5186}5187 5188define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) {5189; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire:5190; -O0:    eor w8, w9, w85191; -O0:    bl __atomic_compare_exchange5192;5193; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire:5194; -O1:    eor w8, w0, w205195; -O1:    bl __atomic_compare_exchange5196    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 15197    ret i32 %r5198}5199 5200define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) {5201; -O0-LABEL: atomicrmw_xor_i32_unaligned_release:5202; -O0:    eor w8, w9, w85203; -O0:    bl __atomic_compare_exchange5204;5205; -O1-LABEL: atomicrmw_xor_i32_unaligned_release:5206; -O1:    eor w8, w0, w205207; -O1:    bl __atomic_compare_exchange5208    %r = atomicrmw xor ptr %ptr, i32 %value release, align 15209    ret i32 %r5210}5211 5212define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5213; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:5214; -O0:    eor w8, w9, w85215; -O0:    bl __atomic_compare_exchange5216;5217; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:5218; -O1:    eor w8, w0, w205219; -O1:    bl __atomic_compare_exchange5220    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 15221    ret i32 %r5222}5223 5224define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5225; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:5226; -O0:    eor w8, w9, w85227; -O0:    bl __atomic_compare_exchange5228;5229; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:5230; -O1:    eor w8, w0, w205231; -O1:    bl __atomic_compare_exchange5232    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 15233    ret i32 %r5234}5235 5236define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5237; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic:5238; -O0:    eor x8, x9, x85239; -O0:    bl __atomic_compare_exchange5240;5241; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic:5242; -O1:    eor x8, x0, x205243; -O1:    bl __atomic_compare_exchange5244    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 15245    ret i64 %r5246}5247 5248define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) {5249; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire:5250; -O0:    eor x8, x9, x85251; -O0:    bl __atomic_compare_exchange5252;5253; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire:5254; -O1:    eor x8, x0, x205255; -O1:    bl __atomic_compare_exchange5256    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 15257    ret i64 %r5258}5259 5260define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) {5261; -O0-LABEL: atomicrmw_xor_i64_unaligned_release:5262; -O0:    eor x8, x9, x85263; -O0:    bl __atomic_compare_exchange5264;5265; -O1-LABEL: atomicrmw_xor_i64_unaligned_release:5266; -O1:    eor x8, x0, x205267; -O1:    bl __atomic_compare_exchange5268    %r = atomicrmw xor ptr %ptr, i64 %value release, align 15269    ret i64 %r5270}5271 5272define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {5273; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:5274; -O0:    eor x8, x9, x85275; -O0:    bl __atomic_compare_exchange5276;5277; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:5278; -O1:    eor x8, x0, x205279; -O1:    bl __atomic_compare_exchange5280    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 15281    ret i64 %r5282}5283 5284define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {5285; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:5286; -O0:    eor x8, x9, x85287; -O0:    bl __atomic_compare_exchange5288;5289; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:5290; -O1:    eor x8, x0, x205291; -O1:    bl __atomic_compare_exchange5292    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 15293    ret i64 %r5294}5295 5296define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5297; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic:5298; -O0:    eor x9, x8, x95299; -O0:    eor x8, x8, x105300; -O0:    bl __atomic_compare_exchange5301;5302; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic:5303; -O1:    ldp x0, x1, [x0]5304; -O1:    eor x8, x1, x195305; -O1:    eor x9, x0, x215306; -O1:    bl __atomic_compare_exchange5307    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 15308    ret i128 %r5309}5310 5311define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) {5312; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire:5313; -O0:    eor x9, x8, x95314; -O0:    eor x8, x8, x105315; -O0:    bl __atomic_compare_exchange5316;5317; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire:5318; -O1:    ldp x0, x1, [x0]5319; -O1:    eor x8, x1, x195320; -O1:    eor x9, x0, x215321; -O1:    bl __atomic_compare_exchange5322    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 15323    ret i128 %r5324}5325 5326define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) {5327; -O0-LABEL: atomicrmw_xor_i128_unaligned_release:5328; -O0:    eor x9, x8, x95329; -O0:    eor x8, x8, x105330; -O0:    bl __atomic_compare_exchange5331;5332; -O1-LABEL: atomicrmw_xor_i128_unaligned_release:5333; -O1:    ldp x0, x1, [x0]5334; -O1:    eor x8, x1, x195335; -O1:    eor x9, x0, x215336; -O1:    bl __atomic_compare_exchange5337    %r = atomicrmw xor ptr %ptr, i128 %value release, align 15338    ret i128 %r5339}5340 5341define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5342; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:5343; -O0:    eor x9, x8, x95344; -O0:    eor x8, x8, x105345; -O0:    bl __atomic_compare_exchange5346;5347; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:5348; -O1:    ldp x0, x1, [x0]5349; -O1:    eor x8, x1, x195350; -O1:    eor x9, x0, x215351; -O1:    bl __atomic_compare_exchange5352    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 15353    ret i128 %r5354}5355 5356define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5357; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:5358; -O0:    eor x9, x8, x95359; -O0:    eor x8, x8, x105360; -O0:    bl __atomic_compare_exchange5361;5362; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:5363; -O1:    ldp x0, x1, [x0]5364; -O1:    eor x8, x1, x195365; -O1:    eor x9, x0, x215366; -O1:    bl __atomic_compare_exchange5367    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 15368    ret i128 %r5369}5370 5371define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) {5372; -O0-LABEL: atomicrmw_max_i8_aligned_monotonic:5373; -O0:    sxtb w9, w105374; -O0:    subs w9, w9, w8, sxtb5375; -O0:    csel w12, w10, w8, gt5376; -O0:    ldaxrb w9, [x11]5377; -O0:    cmp w9, w10, uxtb5378; -O0:    stlxrb w8, w12, [x11]5379; -O0:    and w8, w9, #0xff5380; -O0:    subs w8, w8, w10, uxtb5381;5382; -O1-LABEL: atomicrmw_max_i8_aligned_monotonic:5383; -O1:    ldxrb w9, [x0]5384; -O1:    sxtb w8, w95385; -O1:    cmp w8, w1, sxtb5386; -O1:    csel w9, w9, w1, gt5387; -O1:    stxrb w10, w9, [x0]5388    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 15389    ret i8 %r5390}5391 5392define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) {5393; -O0-LABEL: atomicrmw_max_i8_aligned_acquire:5394; -O0:    sxtb w9, w105395; -O0:    subs w9, w9, w8, sxtb5396; -O0:    csel w12, w10, w8, gt5397; -O0:    ldaxrb w9, [x11]5398; -O0:    cmp w9, w10, uxtb5399; -O0:    stlxrb w8, w12, [x11]5400; -O0:    and w8, w9, #0xff5401; -O0:    subs w8, w8, w10, uxtb5402;5403; -O1-LABEL: atomicrmw_max_i8_aligned_acquire:5404; -O1:    ldaxrb w9, [x0]5405; -O1:    sxtb w8, w95406; -O1:    cmp w8, w1, sxtb5407; -O1:    csel w9, w9, w1, gt5408; -O1:    stxrb w10, w9, [x0]5409    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 15410    ret i8 %r5411}5412 5413define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) {5414; -O0-LABEL: atomicrmw_max_i8_aligned_release:5415; -O0:    sxtb w9, w105416; -O0:    subs w9, w9, w8, sxtb5417; -O0:    csel w12, w10, w8, gt5418; -O0:    ldaxrb w9, [x11]5419; -O0:    cmp w9, w10, uxtb5420; -O0:    stlxrb w8, w12, [x11]5421; -O0:    and w8, w9, #0xff5422; -O0:    subs w8, w8, w10, uxtb5423;5424; -O1-LABEL: atomicrmw_max_i8_aligned_release:5425; -O1:    ldxrb w9, [x0]5426; -O1:    sxtb w8, w95427; -O1:    cmp w8, w1, sxtb5428; -O1:    csel w9, w9, w1, gt5429; -O1:    stlxrb w10, w9, [x0]5430    %r = atomicrmw max ptr %ptr, i8 %value release, align 15431    ret i8 %r5432}5433 5434define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5435; -O0-LABEL: atomicrmw_max_i8_aligned_acq_rel:5436; -O0:    sxtb w9, w105437; -O0:    subs w9, w9, w8, sxtb5438; -O0:    csel w12, w10, w8, gt5439; -O0:    ldaxrb w9, [x11]5440; -O0:    cmp w9, w10, uxtb5441; -O0:    stlxrb w8, w12, [x11]5442; -O0:    and w8, w9, #0xff5443; -O0:    subs w8, w8, w10, uxtb5444;5445; -O1-LABEL: atomicrmw_max_i8_aligned_acq_rel:5446; -O1:    ldaxrb w9, [x0]5447; -O1:    sxtb w8, w95448; -O1:    cmp w8, w1, sxtb5449; -O1:    csel w9, w9, w1, gt5450; -O1:    stlxrb w10, w9, [x0]5451    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 15452    ret i8 %r5453}5454 5455define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5456; -O0-LABEL: atomicrmw_max_i8_aligned_seq_cst:5457; -O0:    sxtb w9, w105458; -O0:    subs w9, w9, w8, sxtb5459; -O0:    csel w12, w10, w8, gt5460; -O0:    ldaxrb w9, [x11]5461; -O0:    cmp w9, w10, uxtb5462; -O0:    stlxrb w8, w12, [x11]5463; -O0:    and w8, w9, #0xff5464; -O0:    subs w8, w8, w10, uxtb5465;5466; -O1-LABEL: atomicrmw_max_i8_aligned_seq_cst:5467; -O1:    ldaxrb w9, [x0]5468; -O1:    sxtb w8, w95469; -O1:    cmp w8, w1, sxtb5470; -O1:    csel w9, w9, w1, gt5471; -O1:    stlxrb w10, w9, [x0]5472    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 15473    ret i8 %r5474}5475 5476define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) {5477; -O0-LABEL: atomicrmw_max_i16_aligned_monotonic:5478; -O0:    sxth w10, w85479; -O0:    subs w10, w10, w9, sxth5480; -O0:    csel w12, w8, w9, gt5481; -O0:    ldaxrh w9, [x11]5482; -O0:    cmp w9, w8, uxth5483; -O0:    stlxrh w10, w12, [x11]5484; -O0:    subs w8, w8, w9, uxth5485;5486; -O1-LABEL: atomicrmw_max_i16_aligned_monotonic:5487; -O1:    ldxrh w9, [x0]5488; -O1:    sxth w8, w95489; -O1:    cmp w8, w1, sxth5490; -O1:    csel w9, w9, w1, gt5491; -O1:    stxrh w10, w9, [x0]5492    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 25493    ret i16 %r5494}5495 5496define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) {5497; -O0-LABEL: atomicrmw_max_i16_aligned_acquire:5498; -O0:    sxth w10, w85499; -O0:    subs w10, w10, w9, sxth5500; -O0:    csel w12, w8, w9, gt5501; -O0:    ldaxrh w9, [x11]5502; -O0:    cmp w9, w8, uxth5503; -O0:    stlxrh w10, w12, [x11]5504; -O0:    subs w8, w8, w9, uxth5505;5506; -O1-LABEL: atomicrmw_max_i16_aligned_acquire:5507; -O1:    ldaxrh w9, [x0]5508; -O1:    sxth w8, w95509; -O1:    cmp w8, w1, sxth5510; -O1:    csel w9, w9, w1, gt5511; -O1:    stxrh w10, w9, [x0]5512    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 25513    ret i16 %r5514}5515 5516define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) {5517; -O0-LABEL: atomicrmw_max_i16_aligned_release:5518; -O0:    sxth w10, w85519; -O0:    subs w10, w10, w9, sxth5520; -O0:    csel w12, w8, w9, gt5521; -O0:    ldaxrh w9, [x11]5522; -O0:    cmp w9, w8, uxth5523; -O0:    stlxrh w10, w12, [x11]5524; -O0:    subs w8, w8, w9, uxth5525;5526; -O1-LABEL: atomicrmw_max_i16_aligned_release:5527; -O1:    ldxrh w9, [x0]5528; -O1:    sxth w8, w95529; -O1:    cmp w8, w1, sxth5530; -O1:    csel w9, w9, w1, gt5531; -O1:    stlxrh w10, w9, [x0]5532    %r = atomicrmw max ptr %ptr, i16 %value release, align 25533    ret i16 %r5534}5535 5536define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5537; -O0-LABEL: atomicrmw_max_i16_aligned_acq_rel:5538; -O0:    sxth w10, w85539; -O0:    subs w10, w10, w9, sxth5540; -O0:    csel w12, w8, w9, gt5541; -O0:    ldaxrh w9, [x11]5542; -O0:    cmp w9, w8, uxth5543; -O0:    stlxrh w10, w12, [x11]5544; -O0:    subs w8, w8, w9, uxth5545;5546; -O1-LABEL: atomicrmw_max_i16_aligned_acq_rel:5547; -O1:    ldaxrh w9, [x0]5548; -O1:    sxth w8, w95549; -O1:    cmp w8, w1, sxth5550; -O1:    csel w9, w9, w1, gt5551; -O1:    stlxrh w10, w9, [x0]5552    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 25553    ret i16 %r5554}5555 5556define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5557; -O0-LABEL: atomicrmw_max_i16_aligned_seq_cst:5558; -O0:    sxth w10, w85559; -O0:    subs w10, w10, w9, sxth5560; -O0:    csel w12, w8, w9, gt5561; -O0:    ldaxrh w9, [x11]5562; -O0:    cmp w9, w8, uxth5563; -O0:    stlxrh w10, w12, [x11]5564; -O0:    subs w8, w8, w9, uxth5565;5566; -O1-LABEL: atomicrmw_max_i16_aligned_seq_cst:5567; -O1:    ldaxrh w9, [x0]5568; -O1:    sxth w8, w95569; -O1:    cmp w8, w1, sxth5570; -O1:    csel w9, w9, w1, gt5571; -O1:    stlxrh w10, w9, [x0]5572    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 25573    ret i16 %r5574}5575 5576define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) {5577; -O0-LABEL: atomicrmw_max_i32_aligned_monotonic:5578; -O0:    subs w10, w8, w95579; -O0:    csel w12, w8, w9, gt5580; -O0:    ldaxr w9, [x11]5581; -O0:    cmp w9, w85582; -O0:    stlxr w10, w12, [x11]5583; -O0:    subs w8, w9, w85584;5585; -O1-LABEL: atomicrmw_max_i32_aligned_monotonic:5586; -O1:    ldxr w8, [x0]5587; -O1:    cmp w8, w15588; -O1:    csel w9, w8, w1, gt5589; -O1:    stxr w10, w9, [x0]5590    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 45591    ret i32 %r5592}5593 5594define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) {5595; -O0-LABEL: atomicrmw_max_i32_aligned_acquire:5596; -O0:    subs w10, w8, w95597; -O0:    csel w12, w8, w9, gt5598; -O0:    ldaxr w9, [x11]5599; -O0:    cmp w9, w85600; -O0:    stlxr w10, w12, [x11]5601; -O0:    subs w8, w9, w85602;5603; -O1-LABEL: atomicrmw_max_i32_aligned_acquire:5604; -O1:    ldaxr w8, [x0]5605; -O1:    cmp w8, w15606; -O1:    csel w9, w8, w1, gt5607; -O1:    stxr w10, w9, [x0]5608    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 45609    ret i32 %r5610}5611 5612define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) {5613; -O0-LABEL: atomicrmw_max_i32_aligned_release:5614; -O0:    subs w10, w8, w95615; -O0:    csel w12, w8, w9, gt5616; -O0:    ldaxr w9, [x11]5617; -O0:    cmp w9, w85618; -O0:    stlxr w10, w12, [x11]5619; -O0:    subs w8, w9, w85620;5621; -O1-LABEL: atomicrmw_max_i32_aligned_release:5622; -O1:    ldxr w8, [x0]5623; -O1:    cmp w8, w15624; -O1:    csel w9, w8, w1, gt5625; -O1:    stlxr w10, w9, [x0]5626    %r = atomicrmw max ptr %ptr, i32 %value release, align 45627    ret i32 %r5628}5629 5630define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5631; -O0-LABEL: atomicrmw_max_i32_aligned_acq_rel:5632; -O0:    subs w10, w8, w95633; -O0:    csel w12, w8, w9, gt5634; -O0:    ldaxr w9, [x11]5635; -O0:    cmp w9, w85636; -O0:    stlxr w10, w12, [x11]5637; -O0:    subs w8, w9, w85638;5639; -O1-LABEL: atomicrmw_max_i32_aligned_acq_rel:5640; -O1:    ldaxr w8, [x0]5641; -O1:    cmp w8, w15642; -O1:    csel w9, w8, w1, gt5643; -O1:    stlxr w10, w9, [x0]5644    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 45645    ret i32 %r5646}5647 5648define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5649; -O0-LABEL: atomicrmw_max_i32_aligned_seq_cst:5650; -O0:    subs w10, w8, w95651; -O0:    csel w12, w8, w9, gt5652; -O0:    ldaxr w9, [x11]5653; -O0:    cmp w9, w85654; -O0:    stlxr w10, w12, [x11]5655; -O0:    subs w8, w9, w85656;5657; -O1-LABEL: atomicrmw_max_i32_aligned_seq_cst:5658; -O1:    ldaxr w8, [x0]5659; -O1:    cmp w8, w15660; -O1:    csel w9, w8, w1, gt5661; -O1:    stlxr w10, w9, [x0]5662    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 45663    ret i32 %r5664}5665 5666define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) {5667; -O0-LABEL: atomicrmw_max_i64_aligned_monotonic:5668; -O0:    subs x10, x8, x95669; -O0:    csel x12, x8, x9, gt5670; -O0:    ldaxr x9, [x11]5671; -O0:    cmp x9, x85672; -O0:    stlxr w10, x12, [x11]5673; -O0:    subs x8, x9, x85674;5675; -O1-LABEL: atomicrmw_max_i64_aligned_monotonic:5676; -O1:    ldxr x0, [x8]5677; -O1:    cmp x0, x15678; -O1:    csel x9, x0, x1, gt5679; -O1:    stxr w10, x9, [x8]5680    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 85681    ret i64 %r5682}5683 5684define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) {5685; -O0-LABEL: atomicrmw_max_i64_aligned_acquire:5686; -O0:    subs x10, x8, x95687; -O0:    csel x12, x8, x9, gt5688; -O0:    ldaxr x9, [x11]5689; -O0:    cmp x9, x85690; -O0:    stlxr w10, x12, [x11]5691; -O0:    subs x8, x9, x85692;5693; -O1-LABEL: atomicrmw_max_i64_aligned_acquire:5694; -O1:    ldaxr x0, [x8]5695; -O1:    cmp x0, x15696; -O1:    csel x9, x0, x1, gt5697; -O1:    stxr w10, x9, [x8]5698    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 85699    ret i64 %r5700}5701 5702define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) {5703; -O0-LABEL: atomicrmw_max_i64_aligned_release:5704; -O0:    subs x10, x8, x95705; -O0:    csel x12, x8, x9, gt5706; -O0:    ldaxr x9, [x11]5707; -O0:    cmp x9, x85708; -O0:    stlxr w10, x12, [x11]5709; -O0:    subs x8, x9, x85710;5711; -O1-LABEL: atomicrmw_max_i64_aligned_release:5712; -O1:    ldxr x0, [x8]5713; -O1:    cmp x0, x15714; -O1:    csel x9, x0, x1, gt5715; -O1:    stlxr w10, x9, [x8]5716    %r = atomicrmw max ptr %ptr, i64 %value release, align 85717    ret i64 %r5718}5719 5720define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5721; -O0-LABEL: atomicrmw_max_i64_aligned_acq_rel:5722; -O0:    subs x10, x8, x95723; -O0:    csel x12, x8, x9, gt5724; -O0:    ldaxr x9, [x11]5725; -O0:    cmp x9, x85726; -O0:    stlxr w10, x12, [x11]5727; -O0:    subs x8, x9, x85728;5729; -O1-LABEL: atomicrmw_max_i64_aligned_acq_rel:5730; -O1:    ldaxr x0, [x8]5731; -O1:    cmp x0, x15732; -O1:    csel x9, x0, x1, gt5733; -O1:    stlxr w10, x9, [x8]5734    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 85735    ret i64 %r5736}5737 5738define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5739; -O0-LABEL: atomicrmw_max_i64_aligned_seq_cst:5740; -O0:    subs x10, x8, x95741; -O0:    csel x12, x8, x9, gt5742; -O0:    ldaxr x9, [x11]5743; -O0:    cmp x9, x85744; -O0:    stlxr w10, x12, [x11]5745; -O0:    subs x8, x9, x85746;5747; -O1-LABEL: atomicrmw_max_i64_aligned_seq_cst:5748; -O1:    ldaxr x0, [x8]5749; -O1:    cmp x0, x15750; -O1:    csel x9, x0, x1, gt5751; -O1:    stlxr w10, x9, [x8]5752    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 85753    ret i64 %r5754}5755 5756define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) {5757; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic:5758; -O0:    subs x8, x8, x125759; -O0:    subs x10, x10, x95760; -O0:    subs x13, x13, x95761; -O0:    csel w10, w8, w10, eq5762; -O0:    ands w13, w10, #0x15763; -O0:    csel x14, x8, x12, ne5764; -O0:    ands w10, w10, #0x15765; -O0:    csel x15, x8, x9, ne5766; -O0:    ldxp x10, x9, [x11]5767; -O0:    cmp x10, x125768; -O0:    cmp x9, x135769; -O0:    stxp w8, x14, x15, [x11]5770; -O0:    stxp w8, x10, x9, [x11]5771; -O0:    eor x8, x10, x85772; -O0:    eor x11, x9, x115773; -O0:    orr x8, x8, x115774; -O0:    subs x8, x8, #05775;5776; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic:5777; -O1:    ldxp x0, x1, [x8]5778; -O1:    cmp x2, x05779; -O1:    csel x9, x1, x3, lt5780; -O1:    csel x10, x0, x2, lt5781; -O1:    stxp w11, x10, x9, [x8]5782    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 165783    ret i128 %r5784}5785 5786define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) {5787; -O0-LABEL: atomicrmw_max_i128_aligned_acquire:5788; -O0:    subs x8, x8, x125789; -O0:    subs x10, x10, x95790; -O0:    subs x13, x13, x95791; -O0:    csel w10, w8, w10, eq5792; -O0:    ands w13, w10, #0x15793; -O0:    csel x14, x8, x12, ne5794; -O0:    ands w10, w10, #0x15795; -O0:    csel x15, x8, x9, ne5796; -O0:    ldaxp x10, x9, [x11]5797; -O0:    cmp x10, x125798; -O0:    cmp x9, x135799; -O0:    stxp w8, x14, x15, [x11]5800; -O0:    stxp w8, x10, x9, [x11]5801; -O0:    eor x8, x10, x85802; -O0:    eor x11, x9, x115803; -O0:    orr x8, x8, x115804; -O0:    subs x8, x8, #05805;5806; -O1-LABEL: atomicrmw_max_i128_aligned_acquire:5807; -O1:    ldaxp x0, x1, [x8]5808; -O1:    cmp x2, x05809; -O1:    csel x9, x1, x3, lt5810; -O1:    csel x10, x0, x2, lt5811; -O1:    stxp w11, x10, x9, [x8]5812    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 165813    ret i128 %r5814}5815 5816define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) {5817; -O0-LABEL: atomicrmw_max_i128_aligned_release:5818; -O0:    subs x8, x8, x125819; -O0:    subs x10, x10, x95820; -O0:    subs x13, x13, x95821; -O0:    csel w10, w8, w10, eq5822; -O0:    ands w13, w10, #0x15823; -O0:    csel x14, x8, x12, ne5824; -O0:    ands w10, w10, #0x15825; -O0:    csel x15, x8, x9, ne5826; -O0:    ldxp x10, x9, [x11]5827; -O0:    cmp x10, x125828; -O0:    cmp x9, x135829; -O0:    stlxp w8, x14, x15, [x11]5830; -O0:    stlxp w8, x10, x9, [x11]5831; -O0:    eor x8, x10, x85832; -O0:    eor x11, x9, x115833; -O0:    orr x8, x8, x115834; -O0:    subs x8, x8, #05835;5836; -O1-LABEL: atomicrmw_max_i128_aligned_release:5837; -O1:    ldxp x0, x1, [x8]5838; -O1:    cmp x2, x05839; -O1:    csel x9, x1, x3, lt5840; -O1:    csel x10, x0, x2, lt5841; -O1:    stlxp w11, x10, x9, [x8]5842    %r = atomicrmw max ptr %ptr, i128 %value release, align 165843    ret i128 %r5844}5845 5846define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5847; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel:5848; -O0:    subs x8, x8, x125849; -O0:    subs x10, x10, x95850; -O0:    subs x13, x13, x95851; -O0:    csel w10, w8, w10, eq5852; -O0:    ands w13, w10, #0x15853; -O0:    csel x14, x8, x12, ne5854; -O0:    ands w10, w10, #0x15855; -O0:    csel x15, x8, x9, ne5856; -O0:    ldaxp x10, x9, [x11]5857; -O0:    cmp x10, x125858; -O0:    cmp x9, x135859; -O0:    stlxp w8, x14, x15, [x11]5860; -O0:    stlxp w8, x10, x9, [x11]5861; -O0:    eor x8, x10, x85862; -O0:    eor x11, x9, x115863; -O0:    orr x8, x8, x115864; -O0:    subs x8, x8, #05865;5866; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel:5867; -O1:    ldaxp x0, x1, [x8]5868; -O1:    cmp x2, x05869; -O1:    csel x9, x1, x3, lt5870; -O1:    csel x10, x0, x2, lt5871; -O1:    stlxp w11, x10, x9, [x8]5872    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 165873    ret i128 %r5874}5875 5876define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5877; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst:5878; -O0:    subs x8, x8, x125879; -O0:    subs x10, x10, x95880; -O0:    subs x13, x13, x95881; -O0:    csel w10, w8, w10, eq5882; -O0:    ands w13, w10, #0x15883; -O0:    csel x14, x8, x12, ne5884; -O0:    ands w10, w10, #0x15885; -O0:    csel x15, x8, x9, ne5886; -O0:    ldaxp x10, x9, [x11]5887; -O0:    cmp x10, x125888; -O0:    cmp x9, x135889; -O0:    stlxp w8, x14, x15, [x11]5890; -O0:    stlxp w8, x10, x9, [x11]5891; -O0:    eor x8, x10, x85892; -O0:    eor x11, x9, x115893; -O0:    orr x8, x8, x115894; -O0:    subs x8, x8, #05895;5896; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst:5897; -O1:    ldaxp x0, x1, [x8]5898; -O1:    cmp x2, x05899; -O1:    csel x9, x1, x3, lt5900; -O1:    csel x10, x0, x2, lt5901; -O1:    stlxp w11, x10, x9, [x8]5902    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 165903    ret i128 %r5904}5905 5906define dso_local i8 @atomicrmw_max_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5907; -O0-LABEL: atomicrmw_max_i8_unaligned_monotonic:5908; -O0:    sxtb w9, w105909; -O0:    subs w9, w9, w8, sxtb5910; -O0:    csel w12, w10, w8, gt5911; -O0:    ldaxrb w9, [x11]5912; -O0:    cmp w9, w10, uxtb5913; -O0:    stlxrb w8, w12, [x11]5914; -O0:    and w8, w9, #0xff5915; -O0:    subs w8, w8, w10, uxtb5916;5917; -O1-LABEL: atomicrmw_max_i8_unaligned_monotonic:5918; -O1:    ldxrb w9, [x0]5919; -O1:    sxtb w8, w95920; -O1:    cmp w8, w1, sxtb5921; -O1:    csel w9, w9, w1, gt5922; -O1:    stxrb w10, w9, [x0]5923    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 15924    ret i8 %r5925}5926 5927define dso_local i8 @atomicrmw_max_i8_unaligned_acquire(ptr %ptr, i8 %value) {5928; -O0-LABEL: atomicrmw_max_i8_unaligned_acquire:5929; -O0:    sxtb w9, w105930; -O0:    subs w9, w9, w8, sxtb5931; -O0:    csel w12, w10, w8, gt5932; -O0:    ldaxrb w9, [x11]5933; -O0:    cmp w9, w10, uxtb5934; -O0:    stlxrb w8, w12, [x11]5935; -O0:    and w8, w9, #0xff5936; -O0:    subs w8, w8, w10, uxtb5937;5938; -O1-LABEL: atomicrmw_max_i8_unaligned_acquire:5939; -O1:    ldaxrb w9, [x0]5940; -O1:    sxtb w8, w95941; -O1:    cmp w8, w1, sxtb5942; -O1:    csel w9, w9, w1, gt5943; -O1:    stxrb w10, w9, [x0]5944    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 15945    ret i8 %r5946}5947 5948define dso_local i8 @atomicrmw_max_i8_unaligned_release(ptr %ptr, i8 %value) {5949; -O0-LABEL: atomicrmw_max_i8_unaligned_release:5950; -O0:    sxtb w9, w105951; -O0:    subs w9, w9, w8, sxtb5952; -O0:    csel w12, w10, w8, gt5953; -O0:    ldaxrb w9, [x11]5954; -O0:    cmp w9, w10, uxtb5955; -O0:    stlxrb w8, w12, [x11]5956; -O0:    and w8, w9, #0xff5957; -O0:    subs w8, w8, w10, uxtb5958;5959; -O1-LABEL: atomicrmw_max_i8_unaligned_release:5960; -O1:    ldxrb w9, [x0]5961; -O1:    sxtb w8, w95962; -O1:    cmp w8, w1, sxtb5963; -O1:    csel w9, w9, w1, gt5964; -O1:    stlxrb w10, w9, [x0]5965    %r = atomicrmw max ptr %ptr, i8 %value release, align 15966    ret i8 %r5967}5968 5969define dso_local i8 @atomicrmw_max_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5970; -O0-LABEL: atomicrmw_max_i8_unaligned_acq_rel:5971; -O0:    sxtb w9, w105972; -O0:    subs w9, w9, w8, sxtb5973; -O0:    csel w12, w10, w8, gt5974; -O0:    ldaxrb w9, [x11]5975; -O0:    cmp w9, w10, uxtb5976; -O0:    stlxrb w8, w12, [x11]5977; -O0:    and w8, w9, #0xff5978; -O0:    subs w8, w8, w10, uxtb5979;5980; -O1-LABEL: atomicrmw_max_i8_unaligned_acq_rel:5981; -O1:    ldaxrb w9, [x0]5982; -O1:    sxtb w8, w95983; -O1:    cmp w8, w1, sxtb5984; -O1:    csel w9, w9, w1, gt5985; -O1:    stlxrb w10, w9, [x0]5986    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 15987    ret i8 %r5988}5989 5990define dso_local i8 @atomicrmw_max_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5991; -O0-LABEL: atomicrmw_max_i8_unaligned_seq_cst:5992; -O0:    sxtb w9, w105993; -O0:    subs w9, w9, w8, sxtb5994; -O0:    csel w12, w10, w8, gt5995; -O0:    ldaxrb w9, [x11]5996; -O0:    cmp w9, w10, uxtb5997; -O0:    stlxrb w8, w12, [x11]5998; -O0:    and w8, w9, #0xff5999; -O0:    subs w8, w8, w10, uxtb6000;6001; -O1-LABEL: atomicrmw_max_i8_unaligned_seq_cst:6002; -O1:    ldaxrb w9, [x0]6003; -O1:    sxtb w8, w96004; -O1:    cmp w8, w1, sxtb6005; -O1:    csel w9, w9, w1, gt6006; -O1:    stlxrb w10, w9, [x0]6007    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 16008    ret i8 %r6009}6010 6011define dso_local i16 @atomicrmw_max_i16_unaligned_monotonic(ptr %ptr, i16 %value) {6012; -O0-LABEL: atomicrmw_max_i16_unaligned_monotonic:6013; -O0:    sxth w10, w96014; -O0:    subs w10, w10, w8, sxth6015; -O0:    csel w8, w9, w8, gt6016; -O0:    bl __atomic_compare_exchange6017;6018; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic:6019; -O1:    sxth w8, w06020; -O1:    cmp w8, w20, sxth6021; -O1:    csel w8, w0, w20, gt6022; -O1:    bl __atomic_compare_exchange6023    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 16024    ret i16 %r6025}6026 6027define dso_local i16 @atomicrmw_max_i16_unaligned_acquire(ptr %ptr, i16 %value) {6028; -O0-LABEL: atomicrmw_max_i16_unaligned_acquire:6029; -O0:    sxth w10, w96030; -O0:    subs w10, w10, w8, sxth6031; -O0:    csel w8, w9, w8, gt6032; -O0:    bl __atomic_compare_exchange6033;6034; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire:6035; -O1:    sxth w8, w06036; -O1:    cmp w8, w20, sxth6037; -O1:    csel w8, w0, w20, gt6038; -O1:    bl __atomic_compare_exchange6039    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 16040    ret i16 %r6041}6042 6043define dso_local i16 @atomicrmw_max_i16_unaligned_release(ptr %ptr, i16 %value) {6044; -O0-LABEL: atomicrmw_max_i16_unaligned_release:6045; -O0:    sxth w10, w96046; -O0:    subs w10, w10, w8, sxth6047; -O0:    csel w8, w9, w8, gt6048; -O0:    bl __atomic_compare_exchange6049;6050; -O1-LABEL: atomicrmw_max_i16_unaligned_release:6051; -O1:    sxth w8, w06052; -O1:    cmp w8, w20, sxth6053; -O1:    csel w8, w0, w20, gt6054; -O1:    bl __atomic_compare_exchange6055    %r = atomicrmw max ptr %ptr, i16 %value release, align 16056    ret i16 %r6057}6058 6059define dso_local i16 @atomicrmw_max_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {6060; -O0-LABEL: atomicrmw_max_i16_unaligned_acq_rel:6061; -O0:    sxth w10, w96062; -O0:    subs w10, w10, w8, sxth6063; -O0:    csel w8, w9, w8, gt6064; -O0:    bl __atomic_compare_exchange6065;6066; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel:6067; -O1:    sxth w8, w06068; -O1:    cmp w8, w20, sxth6069; -O1:    csel w8, w0, w20, gt6070; -O1:    bl __atomic_compare_exchange6071    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 16072    ret i16 %r6073}6074 6075define dso_local i16 @atomicrmw_max_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {6076; -O0-LABEL: atomicrmw_max_i16_unaligned_seq_cst:6077; -O0:    sxth w10, w96078; -O0:    subs w10, w10, w8, sxth6079; -O0:    csel w8, w9, w8, gt6080; -O0:    bl __atomic_compare_exchange6081;6082; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst:6083; -O1:    sxth w8, w06084; -O1:    cmp w8, w20, sxth6085; -O1:    csel w8, w0, w20, gt6086; -O1:    bl __atomic_compare_exchange6087    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 16088    ret i16 %r6089}6090 6091define dso_local i32 @atomicrmw_max_i32_unaligned_monotonic(ptr %ptr, i32 %value) {6092; -O0-LABEL: atomicrmw_max_i32_unaligned_monotonic:6093; -O0:    subs w10, w9, w86094; -O0:    csel w8, w9, w8, gt6095; -O0:    bl __atomic_compare_exchange6096;6097; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic:6098; -O1:    cmp w0, w206099; -O1:    csel w8, w0, w20, gt6100; -O1:    bl __atomic_compare_exchange6101    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 16102    ret i32 %r6103}6104 6105define dso_local i32 @atomicrmw_max_i32_unaligned_acquire(ptr %ptr, i32 %value) {6106; -O0-LABEL: atomicrmw_max_i32_unaligned_acquire:6107; -O0:    subs w10, w9, w86108; -O0:    csel w8, w9, w8, gt6109; -O0:    bl __atomic_compare_exchange6110;6111; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire:6112; -O1:    cmp w0, w206113; -O1:    csel w8, w0, w20, gt6114; -O1:    bl __atomic_compare_exchange6115    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 16116    ret i32 %r6117}6118 6119define dso_local i32 @atomicrmw_max_i32_unaligned_release(ptr %ptr, i32 %value) {6120; -O0-LABEL: atomicrmw_max_i32_unaligned_release:6121; -O0:    subs w10, w9, w86122; -O0:    csel w8, w9, w8, gt6123; -O0:    bl __atomic_compare_exchange6124;6125; -O1-LABEL: atomicrmw_max_i32_unaligned_release:6126; -O1:    cmp w0, w206127; -O1:    csel w8, w0, w20, gt6128; -O1:    bl __atomic_compare_exchange6129    %r = atomicrmw max ptr %ptr, i32 %value release, align 16130    ret i32 %r6131}6132 6133define dso_local i32 @atomicrmw_max_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {6134; -O0-LABEL: atomicrmw_max_i32_unaligned_acq_rel:6135; -O0:    subs w10, w9, w86136; -O0:    csel w8, w9, w8, gt6137; -O0:    bl __atomic_compare_exchange6138;6139; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel:6140; -O1:    cmp w0, w206141; -O1:    csel w8, w0, w20, gt6142; -O1:    bl __atomic_compare_exchange6143    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 16144    ret i32 %r6145}6146 6147define dso_local i32 @atomicrmw_max_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {6148; -O0-LABEL: atomicrmw_max_i32_unaligned_seq_cst:6149; -O0:    subs w10, w9, w86150; -O0:    csel w8, w9, w8, gt6151; -O0:    bl __atomic_compare_exchange6152;6153; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst:6154; -O1:    cmp w0, w206155; -O1:    csel w8, w0, w20, gt6156; -O1:    bl __atomic_compare_exchange6157    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 16158    ret i32 %r6159}6160 6161define dso_local i64 @atomicrmw_max_i64_unaligned_monotonic(ptr %ptr, i64 %value) {6162; -O0-LABEL: atomicrmw_max_i64_unaligned_monotonic:6163; -O0:    subs x10, x9, x86164; -O0:    csel x8, x9, x8, gt6165; -O0:    bl __atomic_compare_exchange6166;6167; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic:6168; -O1:    cmp x0, x206169; -O1:    csel x8, x0, x20, gt6170; -O1:    bl __atomic_compare_exchange6171    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 16172    ret i64 %r6173}6174 6175define dso_local i64 @atomicrmw_max_i64_unaligned_acquire(ptr %ptr, i64 %value) {6176; -O0-LABEL: atomicrmw_max_i64_unaligned_acquire:6177; -O0:    subs x10, x9, x86178; -O0:    csel x8, x9, x8, gt6179; -O0:    bl __atomic_compare_exchange6180;6181; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire:6182; -O1:    cmp x0, x206183; -O1:    csel x8, x0, x20, gt6184; -O1:    bl __atomic_compare_exchange6185    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 16186    ret i64 %r6187}6188 6189define dso_local i64 @atomicrmw_max_i64_unaligned_release(ptr %ptr, i64 %value) {6190; -O0-LABEL: atomicrmw_max_i64_unaligned_release:6191; -O0:    subs x10, x9, x86192; -O0:    csel x8, x9, x8, gt6193; -O0:    bl __atomic_compare_exchange6194;6195; -O1-LABEL: atomicrmw_max_i64_unaligned_release:6196; -O1:    cmp x0, x206197; -O1:    csel x8, x0, x20, gt6198; -O1:    bl __atomic_compare_exchange6199    %r = atomicrmw max ptr %ptr, i64 %value release, align 16200    ret i64 %r6201}6202 6203define dso_local i64 @atomicrmw_max_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {6204; -O0-LABEL: atomicrmw_max_i64_unaligned_acq_rel:6205; -O0:    subs x10, x9, x86206; -O0:    csel x8, x9, x8, gt6207; -O0:    bl __atomic_compare_exchange6208;6209; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel:6210; -O1:    cmp x0, x206211; -O1:    csel x8, x0, x20, gt6212; -O1:    bl __atomic_compare_exchange6213    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 16214    ret i64 %r6215}6216 6217define dso_local i64 @atomicrmw_max_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {6218; -O0-LABEL: atomicrmw_max_i64_unaligned_seq_cst:6219; -O0:    subs x10, x9, x86220; -O0:    csel x8, x9, x8, gt6221; -O0:    bl __atomic_compare_exchange6222;6223; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst:6224; -O1:    cmp x0, x206225; -O1:    csel x8, x0, x20, gt6226; -O1:    bl __atomic_compare_exchange6227    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 16228    ret i64 %r6229}6230 6231define dso_local i128 @atomicrmw_max_i128_unaligned_monotonic(ptr %ptr, i128 %value) {6232; -O0-LABEL: atomicrmw_max_i128_unaligned_monotonic:6233; -O0:    subs x8, x8, x96234; -O0:    subs x11, x11, x106235; -O0:    subs x12, x12, x106236; -O0:    csel w11, w8, w11, eq6237; -O0:    ands w12, w11, #0x16238; -O0:    csel x9, x8, x9, ne6239; -O0:    ands w11, w11, #0x16240; -O0:    csel x8, x8, x10, ne6241; -O0:    bl __atomic_compare_exchange6242;6243; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic:6244; -O1:    ldp x0, x1, [x0]6245; -O1:    cmp x21, x06246; -O1:    csel x8, x1, x19, lt6247; -O1:    csel x9, x0, x21, lt6248; -O1:    bl __atomic_compare_exchange6249    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 16250    ret i128 %r6251}6252 6253define dso_local i128 @atomicrmw_max_i128_unaligned_acquire(ptr %ptr, i128 %value) {6254; -O0-LABEL: atomicrmw_max_i128_unaligned_acquire:6255; -O0:    subs x8, x8, x96256; -O0:    subs x11, x11, x106257; -O0:    subs x12, x12, x106258; -O0:    csel w11, w8, w11, eq6259; -O0:    ands w12, w11, #0x16260; -O0:    csel x9, x8, x9, ne6261; -O0:    ands w11, w11, #0x16262; -O0:    csel x8, x8, x10, ne6263; -O0:    bl __atomic_compare_exchange6264;6265; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire:6266; -O1:    ldp x0, x1, [x0]6267; -O1:    cmp x21, x06268; -O1:    csel x8, x1, x19, lt6269; -O1:    csel x9, x0, x21, lt6270; -O1:    bl __atomic_compare_exchange6271    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 16272    ret i128 %r6273}6274 6275define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) {6276; -O0-LABEL: atomicrmw_max_i128_unaligned_release:6277; -O0:    subs x8, x8, x96278; -O0:    subs x11, x11, x106279; -O0:    subs x12, x12, x106280; -O0:    csel w11, w8, w11, eq6281; -O0:    ands w12, w11, #0x16282; -O0:    csel x9, x8, x9, ne6283; -O0:    ands w11, w11, #0x16284; -O0:    csel x8, x8, x10, ne6285; -O0:    bl __atomic_compare_exchange6286;6287; -O1-LABEL: atomicrmw_max_i128_unaligned_release:6288; -O1:    ldp x0, x1, [x0]6289; -O1:    cmp x21, x06290; -O1:    csel x8, x1, x19, lt6291; -O1:    csel x9, x0, x21, lt6292; -O1:    bl __atomic_compare_exchange6293    %r = atomicrmw max ptr %ptr, i128 %value release, align 16294    ret i128 %r6295}6296 6297define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {6298; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel:6299; -O0:    subs x8, x8, x96300; -O0:    subs x11, x11, x106301; -O0:    subs x12, x12, x106302; -O0:    csel w11, w8, w11, eq6303; -O0:    ands w12, w11, #0x16304; -O0:    csel x9, x8, x9, ne6305; -O0:    ands w11, w11, #0x16306; -O0:    csel x8, x8, x10, ne6307; -O0:    bl __atomic_compare_exchange6308;6309; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel:6310; -O1:    ldp x0, x1, [x0]6311; -O1:    cmp x21, x06312; -O1:    csel x8, x1, x19, lt6313; -O1:    csel x9, x0, x21, lt6314; -O1:    bl __atomic_compare_exchange6315    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 16316    ret i128 %r6317}6318 6319define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {6320; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst:6321; -O0:    subs x8, x8, x96322; -O0:    subs x11, x11, x106323; -O0:    subs x12, x12, x106324; -O0:    csel w11, w8, w11, eq6325; -O0:    ands w12, w11, #0x16326; -O0:    csel x9, x8, x9, ne6327; -O0:    ands w11, w11, #0x16328; -O0:    csel x8, x8, x10, ne6329; -O0:    bl __atomic_compare_exchange6330;6331; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst:6332; -O1:    ldp x0, x1, [x0]6333; -O1:    cmp x21, x06334; -O1:    csel x8, x1, x19, lt6335; -O1:    csel x9, x0, x21, lt6336; -O1:    bl __atomic_compare_exchange6337    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 16338    ret i128 %r6339}6340 6341define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) {6342; -O0-LABEL: atomicrmw_min_i8_aligned_monotonic:6343; -O0:    sxtb w9, w106344; -O0:    subs w9, w9, w8, sxtb6345; -O0:    csel w12, w10, w8, le6346; -O0:    ldaxrb w9, [x11]6347; -O0:    cmp w9, w10, uxtb6348; -O0:    stlxrb w8, w12, [x11]6349; -O0:    and w8, w9, #0xff6350; -O0:    subs w8, w8, w10, uxtb6351;6352; -O1-LABEL: atomicrmw_min_i8_aligned_monotonic:6353; -O1:    ldxrb w9, [x0]6354; -O1:    sxtb w8, w96355; -O1:    cmp w8, w1, sxtb6356; -O1:    csel w9, w9, w1, le6357; -O1:    stxrb w10, w9, [x0]6358    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 16359    ret i8 %r6360}6361 6362define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) {6363; -O0-LABEL: atomicrmw_min_i8_aligned_acquire:6364; -O0:    sxtb w9, w106365; -O0:    subs w9, w9, w8, sxtb6366; -O0:    csel w12, w10, w8, le6367; -O0:    ldaxrb w9, [x11]6368; -O0:    cmp w9, w10, uxtb6369; -O0:    stlxrb w8, w12, [x11]6370; -O0:    and w8, w9, #0xff6371; -O0:    subs w8, w8, w10, uxtb6372;6373; -O1-LABEL: atomicrmw_min_i8_aligned_acquire:6374; -O1:    ldaxrb w9, [x0]6375; -O1:    sxtb w8, w96376; -O1:    cmp w8, w1, sxtb6377; -O1:    csel w9, w9, w1, le6378; -O1:    stxrb w10, w9, [x0]6379    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 16380    ret i8 %r6381}6382 6383define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) {6384; -O0-LABEL: atomicrmw_min_i8_aligned_release:6385; -O0:    sxtb w9, w106386; -O0:    subs w9, w9, w8, sxtb6387; -O0:    csel w12, w10, w8, le6388; -O0:    ldaxrb w9, [x11]6389; -O0:    cmp w9, w10, uxtb6390; -O0:    stlxrb w8, w12, [x11]6391; -O0:    and w8, w9, #0xff6392; -O0:    subs w8, w8, w10, uxtb6393;6394; -O1-LABEL: atomicrmw_min_i8_aligned_release:6395; -O1:    ldxrb w9, [x0]6396; -O1:    sxtb w8, w96397; -O1:    cmp w8, w1, sxtb6398; -O1:    csel w9, w9, w1, le6399; -O1:    stlxrb w10, w9, [x0]6400    %r = atomicrmw min ptr %ptr, i8 %value release, align 16401    ret i8 %r6402}6403 6404define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) {6405; -O0-LABEL: atomicrmw_min_i8_aligned_acq_rel:6406; -O0:    sxtb w9, w106407; -O0:    subs w9, w9, w8, sxtb6408; -O0:    csel w12, w10, w8, le6409; -O0:    ldaxrb w9, [x11]6410; -O0:    cmp w9, w10, uxtb6411; -O0:    stlxrb w8, w12, [x11]6412; -O0:    and w8, w9, #0xff6413; -O0:    subs w8, w8, w10, uxtb6414;6415; -O1-LABEL: atomicrmw_min_i8_aligned_acq_rel:6416; -O1:    ldaxrb w9, [x0]6417; -O1:    sxtb w8, w96418; -O1:    cmp w8, w1, sxtb6419; -O1:    csel w9, w9, w1, le6420; -O1:    stlxrb w10, w9, [x0]6421    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 16422    ret i8 %r6423}6424 6425define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) {6426; -O0-LABEL: atomicrmw_min_i8_aligned_seq_cst:6427; -O0:    sxtb w9, w106428; -O0:    subs w9, w9, w8, sxtb6429; -O0:    csel w12, w10, w8, le6430; -O0:    ldaxrb w9, [x11]6431; -O0:    cmp w9, w10, uxtb6432; -O0:    stlxrb w8, w12, [x11]6433; -O0:    and w8, w9, #0xff6434; -O0:    subs w8, w8, w10, uxtb6435;6436; -O1-LABEL: atomicrmw_min_i8_aligned_seq_cst:6437; -O1:    ldaxrb w9, [x0]6438; -O1:    sxtb w8, w96439; -O1:    cmp w8, w1, sxtb6440; -O1:    csel w9, w9, w1, le6441; -O1:    stlxrb w10, w9, [x0]6442    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 16443    ret i8 %r6444}6445 6446define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) {6447; -O0-LABEL: atomicrmw_min_i16_aligned_monotonic:6448; -O0:    sxth w10, w86449; -O0:    subs w10, w10, w9, sxth6450; -O0:    csel w12, w8, w9, le6451; -O0:    ldaxrh w9, [x11]6452; -O0:    cmp w9, w8, uxth6453; -O0:    stlxrh w10, w12, [x11]6454; -O0:    subs w8, w8, w9, uxth6455;6456; -O1-LABEL: atomicrmw_min_i16_aligned_monotonic:6457; -O1:    ldxrh w9, [x0]6458; -O1:    sxth w8, w96459; -O1:    cmp w8, w1, sxth6460; -O1:    csel w9, w9, w1, le6461; -O1:    stxrh w10, w9, [x0]6462    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 26463    ret i16 %r6464}6465 6466define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) {6467; -O0-LABEL: atomicrmw_min_i16_aligned_acquire:6468; -O0:    sxth w10, w86469; -O0:    subs w10, w10, w9, sxth6470; -O0:    csel w12, w8, w9, le6471; -O0:    ldaxrh w9, [x11]6472; -O0:    cmp w9, w8, uxth6473; -O0:    stlxrh w10, w12, [x11]6474; -O0:    subs w8, w8, w9, uxth6475;6476; -O1-LABEL: atomicrmw_min_i16_aligned_acquire:6477; -O1:    ldaxrh w9, [x0]6478; -O1:    sxth w8, w96479; -O1:    cmp w8, w1, sxth6480; -O1:    csel w9, w9, w1, le6481; -O1:    stxrh w10, w9, [x0]6482    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 26483    ret i16 %r6484}6485 6486define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) {6487; -O0-LABEL: atomicrmw_min_i16_aligned_release:6488; -O0:    sxth w10, w86489; -O0:    subs w10, w10, w9, sxth6490; -O0:    csel w12, w8, w9, le6491; -O0:    ldaxrh w9, [x11]6492; -O0:    cmp w9, w8, uxth6493; -O0:    stlxrh w10, w12, [x11]6494; -O0:    subs w8, w8, w9, uxth6495;6496; -O1-LABEL: atomicrmw_min_i16_aligned_release:6497; -O1:    ldxrh w9, [x0]6498; -O1:    sxth w8, w96499; -O1:    cmp w8, w1, sxth6500; -O1:    csel w9, w9, w1, le6501; -O1:    stlxrh w10, w9, [x0]6502    %r = atomicrmw min ptr %ptr, i16 %value release, align 26503    ret i16 %r6504}6505 6506define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) {6507; -O0-LABEL: atomicrmw_min_i16_aligned_acq_rel:6508; -O0:    sxth w10, w86509; -O0:    subs w10, w10, w9, sxth6510; -O0:    csel w12, w8, w9, le6511; -O0:    ldaxrh w9, [x11]6512; -O0:    cmp w9, w8, uxth6513; -O0:    stlxrh w10, w12, [x11]6514; -O0:    subs w8, w8, w9, uxth6515;6516; -O1-LABEL: atomicrmw_min_i16_aligned_acq_rel:6517; -O1:    ldaxrh w9, [x0]6518; -O1:    sxth w8, w96519; -O1:    cmp w8, w1, sxth6520; -O1:    csel w9, w9, w1, le6521; -O1:    stlxrh w10, w9, [x0]6522    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 26523    ret i16 %r6524}6525 6526define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) {6527; -O0-LABEL: atomicrmw_min_i16_aligned_seq_cst:6528; -O0:    sxth w10, w86529; -O0:    subs w10, w10, w9, sxth6530; -O0:    csel w12, w8, w9, le6531; -O0:    ldaxrh w9, [x11]6532; -O0:    cmp w9, w8, uxth6533; -O0:    stlxrh w10, w12, [x11]6534; -O0:    subs w8, w8, w9, uxth6535;6536; -O1-LABEL: atomicrmw_min_i16_aligned_seq_cst:6537; -O1:    ldaxrh w9, [x0]6538; -O1:    sxth w8, w96539; -O1:    cmp w8, w1, sxth6540; -O1:    csel w9, w9, w1, le6541; -O1:    stlxrh w10, w9, [x0]6542    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 26543    ret i16 %r6544}6545 6546define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) {6547; -O0-LABEL: atomicrmw_min_i32_aligned_monotonic:6548; -O0:    subs w10, w8, w96549; -O0:    csel w12, w8, w9, le6550; -O0:    ldaxr w9, [x11]6551; -O0:    cmp w9, w86552; -O0:    stlxr w10, w12, [x11]6553; -O0:    subs w8, w9, w86554;6555; -O1-LABEL: atomicrmw_min_i32_aligned_monotonic:6556; -O1:    ldxr w8, [x0]6557; -O1:    cmp w8, w16558; -O1:    csel w9, w8, w1, le6559; -O1:    stxr w10, w9, [x0]6560    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 46561    ret i32 %r6562}6563 6564define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) {6565; -O0-LABEL: atomicrmw_min_i32_aligned_acquire:6566; -O0:    subs w10, w8, w96567; -O0:    csel w12, w8, w9, le6568; -O0:    ldaxr w9, [x11]6569; -O0:    cmp w9, w86570; -O0:    stlxr w10, w12, [x11]6571; -O0:    subs w8, w9, w86572;6573; -O1-LABEL: atomicrmw_min_i32_aligned_acquire:6574; -O1:    ldaxr w8, [x0]6575; -O1:    cmp w8, w16576; -O1:    csel w9, w8, w1, le6577; -O1:    stxr w10, w9, [x0]6578    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 46579    ret i32 %r6580}6581 6582define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) {6583; -O0-LABEL: atomicrmw_min_i32_aligned_release:6584; -O0:    subs w10, w8, w96585; -O0:    csel w12, w8, w9, le6586; -O0:    ldaxr w9, [x11]6587; -O0:    cmp w9, w86588; -O0:    stlxr w10, w12, [x11]6589; -O0:    subs w8, w9, w86590;6591; -O1-LABEL: atomicrmw_min_i32_aligned_release:6592; -O1:    ldxr w8, [x0]6593; -O1:    cmp w8, w16594; -O1:    csel w9, w8, w1, le6595; -O1:    stlxr w10, w9, [x0]6596    %r = atomicrmw min ptr %ptr, i32 %value release, align 46597    ret i32 %r6598}6599 6600define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) {6601; -O0-LABEL: atomicrmw_min_i32_aligned_acq_rel:6602; -O0:    subs w10, w8, w96603; -O0:    csel w12, w8, w9, le6604; -O0:    ldaxr w9, [x11]6605; -O0:    cmp w9, w86606; -O0:    stlxr w10, w12, [x11]6607; -O0:    subs w8, w9, w86608;6609; -O1-LABEL: atomicrmw_min_i32_aligned_acq_rel:6610; -O1:    ldaxr w8, [x0]6611; -O1:    cmp w8, w16612; -O1:    csel w9, w8, w1, le6613; -O1:    stlxr w10, w9, [x0]6614    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 46615    ret i32 %r6616}6617 6618define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) {6619; -O0-LABEL: atomicrmw_min_i32_aligned_seq_cst:6620; -O0:    subs w10, w8, w96621; -O0:    csel w12, w8, w9, le6622; -O0:    ldaxr w9, [x11]6623; -O0:    cmp w9, w86624; -O0:    stlxr w10, w12, [x11]6625; -O0:    subs w8, w9, w86626;6627; -O1-LABEL: atomicrmw_min_i32_aligned_seq_cst:6628; -O1:    ldaxr w8, [x0]6629; -O1:    cmp w8, w16630; -O1:    csel w9, w8, w1, le6631; -O1:    stlxr w10, w9, [x0]6632    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 46633    ret i32 %r6634}6635 6636define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) {6637; -O0-LABEL: atomicrmw_min_i64_aligned_monotonic:6638; -O0:    subs x10, x8, x96639; -O0:    csel x12, x8, x9, le6640; -O0:    ldaxr x9, [x11]6641; -O0:    cmp x9, x86642; -O0:    stlxr w10, x12, [x11]6643; -O0:    subs x8, x9, x86644;6645; -O1-LABEL: atomicrmw_min_i64_aligned_monotonic:6646; -O1:    ldxr x0, [x8]6647; -O1:    cmp x0, x16648; -O1:    csel x9, x0, x1, le6649; -O1:    stxr w10, x9, [x8]6650    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 86651    ret i64 %r6652}6653 6654define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) {6655; -O0-LABEL: atomicrmw_min_i64_aligned_acquire:6656; -O0:    subs x10, x8, x96657; -O0:    csel x12, x8, x9, le6658; -O0:    ldaxr x9, [x11]6659; -O0:    cmp x9, x86660; -O0:    stlxr w10, x12, [x11]6661; -O0:    subs x8, x9, x86662;6663; -O1-LABEL: atomicrmw_min_i64_aligned_acquire:6664; -O1:    ldaxr x0, [x8]6665; -O1:    cmp x0, x16666; -O1:    csel x9, x0, x1, le6667; -O1:    stxr w10, x9, [x8]6668    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 86669    ret i64 %r6670}6671 6672define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) {6673; -O0-LABEL: atomicrmw_min_i64_aligned_release:6674; -O0:    subs x10, x8, x96675; -O0:    csel x12, x8, x9, le6676; -O0:    ldaxr x9, [x11]6677; -O0:    cmp x9, x86678; -O0:    stlxr w10, x12, [x11]6679; -O0:    subs x8, x9, x86680;6681; -O1-LABEL: atomicrmw_min_i64_aligned_release:6682; -O1:    ldxr x0, [x8]6683; -O1:    cmp x0, x16684; -O1:    csel x9, x0, x1, le6685; -O1:    stlxr w10, x9, [x8]6686    %r = atomicrmw min ptr %ptr, i64 %value release, align 86687    ret i64 %r6688}6689 6690define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) {6691; -O0-LABEL: atomicrmw_min_i64_aligned_acq_rel:6692; -O0:    subs x10, x8, x96693; -O0:    csel x12, x8, x9, le6694; -O0:    ldaxr x9, [x11]6695; -O0:    cmp x9, x86696; -O0:    stlxr w10, x12, [x11]6697; -O0:    subs x8, x9, x86698;6699; -O1-LABEL: atomicrmw_min_i64_aligned_acq_rel:6700; -O1:    ldaxr x0, [x8]6701; -O1:    cmp x0, x16702; -O1:    csel x9, x0, x1, le6703; -O1:    stlxr w10, x9, [x8]6704    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 86705    ret i64 %r6706}6707 6708define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) {6709; -O0-LABEL: atomicrmw_min_i64_aligned_seq_cst:6710; -O0:    subs x10, x8, x96711; -O0:    csel x12, x8, x9, le6712; -O0:    ldaxr x9, [x11]6713; -O0:    cmp x9, x86714; -O0:    stlxr w10, x12, [x11]6715; -O0:    subs x8, x9, x86716;6717; -O1-LABEL: atomicrmw_min_i64_aligned_seq_cst:6718; -O1:    ldaxr x0, [x8]6719; -O1:    cmp x0, x16720; -O1:    csel x9, x0, x1, le6721; -O1:    stlxr w10, x9, [x8]6722    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 86723    ret i64 %r6724}6725 6726define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) {6727; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic:6728; -O0:    subs x8, x8, x126729; -O0:    subs x10, x10, x96730; -O0:    subs x13, x13, x96731; -O0:    csel w10, w8, w10, eq6732; -O0:    ands w13, w10, #0x16733; -O0:    csel x14, x8, x12, ne6734; -O0:    ands w10, w10, #0x16735; -O0:    csel x15, x8, x9, ne6736; -O0:    ldxp x10, x9, [x11]6737; -O0:    cmp x10, x126738; -O0:    cmp x9, x136739; -O0:    stxp w8, x14, x15, [x11]6740; -O0:    stxp w8, x10, x9, [x11]6741; -O0:    eor x8, x10, x86742; -O0:    eor x11, x9, x116743; -O0:    orr x8, x8, x116744; -O0:    subs x8, x8, #06745;6746; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic:6747; -O1:    ldxp x0, x1, [x8]6748; -O1:    cmp x2, x06749; -O1:    csel x9, x1, x3, ge6750; -O1:    csel x10, x0, x2, ge6751; -O1:    stxp w11, x10, x9, [x8]6752    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 166753    ret i128 %r6754}6755 6756define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) {6757; -O0-LABEL: atomicrmw_min_i128_aligned_acquire:6758; -O0:    subs x8, x8, x126759; -O0:    subs x10, x10, x96760; -O0:    subs x13, x13, x96761; -O0:    csel w10, w8, w10, eq6762; -O0:    ands w13, w10, #0x16763; -O0:    csel x14, x8, x12, ne6764; -O0:    ands w10, w10, #0x16765; -O0:    csel x15, x8, x9, ne6766; -O0:    ldaxp x10, x9, [x11]6767; -O0:    cmp x10, x126768; -O0:    cmp x9, x136769; -O0:    stxp w8, x14, x15, [x11]6770; -O0:    stxp w8, x10, x9, [x11]6771; -O0:    eor x8, x10, x86772; -O0:    eor x11, x9, x116773; -O0:    orr x8, x8, x116774; -O0:    subs x8, x8, #06775;6776; -O1-LABEL: atomicrmw_min_i128_aligned_acquire:6777; -O1:    ldaxp x0, x1, [x8]6778; -O1:    cmp x2, x06779; -O1:    csel x9, x1, x3, ge6780; -O1:    csel x10, x0, x2, ge6781; -O1:    stxp w11, x10, x9, [x8]6782    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 166783    ret i128 %r6784}6785 6786define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) {6787; -O0-LABEL: atomicrmw_min_i128_aligned_release:6788; -O0:    subs x8, x8, x126789; -O0:    subs x10, x10, x96790; -O0:    subs x13, x13, x96791; -O0:    csel w10, w8, w10, eq6792; -O0:    ands w13, w10, #0x16793; -O0:    csel x14, x8, x12, ne6794; -O0:    ands w10, w10, #0x16795; -O0:    csel x15, x8, x9, ne6796; -O0:    ldxp x10, x9, [x11]6797; -O0:    cmp x10, x126798; -O0:    cmp x9, x136799; -O0:    stlxp w8, x14, x15, [x11]6800; -O0:    stlxp w8, x10, x9, [x11]6801; -O0:    eor x8, x10, x86802; -O0:    eor x11, x9, x116803; -O0:    orr x8, x8, x116804; -O0:    subs x8, x8, #06805;6806; -O1-LABEL: atomicrmw_min_i128_aligned_release:6807; -O1:    ldxp x0, x1, [x8]6808; -O1:    cmp x2, x06809; -O1:    csel x9, x1, x3, ge6810; -O1:    csel x10, x0, x2, ge6811; -O1:    stlxp w11, x10, x9, [x8]6812    %r = atomicrmw min ptr %ptr, i128 %value release, align 166813    ret i128 %r6814}6815 6816define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) {6817; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel:6818; -O0:    subs x8, x8, x126819; -O0:    subs x10, x10, x96820; -O0:    subs x13, x13, x96821; -O0:    csel w10, w8, w10, eq6822; -O0:    ands w13, w10, #0x16823; -O0:    csel x14, x8, x12, ne6824; -O0:    ands w10, w10, #0x16825; -O0:    csel x15, x8, x9, ne6826; -O0:    ldaxp x10, x9, [x11]6827; -O0:    cmp x10, x126828; -O0:    cmp x9, x136829; -O0:    stlxp w8, x14, x15, [x11]6830; -O0:    stlxp w8, x10, x9, [x11]6831; -O0:    eor x8, x10, x86832; -O0:    eor x11, x9, x116833; -O0:    orr x8, x8, x116834; -O0:    subs x8, x8, #06835;6836; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel:6837; -O1:    ldaxp x0, x1, [x8]6838; -O1:    cmp x2, x06839; -O1:    csel x9, x1, x3, ge6840; -O1:    csel x10, x0, x2, ge6841; -O1:    stlxp w11, x10, x9, [x8]6842    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 166843    ret i128 %r6844}6845 6846define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) {6847; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst:6848; -O0:    subs x8, x8, x126849; -O0:    subs x10, x10, x96850; -O0:    subs x13, x13, x96851; -O0:    csel w10, w8, w10, eq6852; -O0:    ands w13, w10, #0x16853; -O0:    csel x14, x8, x12, ne6854; -O0:    ands w10, w10, #0x16855; -O0:    csel x15, x8, x9, ne6856; -O0:    ldaxp x10, x9, [x11]6857; -O0:    cmp x10, x126858; -O0:    cmp x9, x136859; -O0:    stlxp w8, x14, x15, [x11]6860; -O0:    stlxp w8, x10, x9, [x11]6861; -O0:    eor x8, x10, x86862; -O0:    eor x11, x9, x116863; -O0:    orr x8, x8, x116864; -O0:    subs x8, x8, #06865;6866; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst:6867; -O1:    ldaxp x0, x1, [x8]6868; -O1:    cmp x2, x06869; -O1:    csel x9, x1, x3, ge6870; -O1:    csel x10, x0, x2, ge6871; -O1:    stlxp w11, x10, x9, [x8]6872    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 166873    ret i128 %r6874}6875 6876define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) {6877; -O0-LABEL: atomicrmw_min_i8_unaligned_monotonic:6878; -O0:    sxtb w9, w106879; -O0:    subs w9, w9, w8, sxtb6880; -O0:    csel w12, w10, w8, le6881; -O0:    ldaxrb w9, [x11]6882; -O0:    cmp w9, w10, uxtb6883; -O0:    stlxrb w8, w12, [x11]6884; -O0:    and w8, w9, #0xff6885; -O0:    subs w8, w8, w10, uxtb6886;6887; -O1-LABEL: atomicrmw_min_i8_unaligned_monotonic:6888; -O1:    ldxrb w9, [x0]6889; -O1:    sxtb w8, w96890; -O1:    cmp w8, w1, sxtb6891; -O1:    csel w9, w9, w1, le6892; -O1:    stxrb w10, w9, [x0]6893    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 16894    ret i8 %r6895}6896 6897define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) {6898; -O0-LABEL: atomicrmw_min_i8_unaligned_acquire:6899; -O0:    sxtb w9, w106900; -O0:    subs w9, w9, w8, sxtb6901; -O0:    csel w12, w10, w8, le6902; -O0:    ldaxrb w9, [x11]6903; -O0:    cmp w9, w10, uxtb6904; -O0:    stlxrb w8, w12, [x11]6905; -O0:    and w8, w9, #0xff6906; -O0:    subs w8, w8, w10, uxtb6907;6908; -O1-LABEL: atomicrmw_min_i8_unaligned_acquire:6909; -O1:    ldaxrb w9, [x0]6910; -O1:    sxtb w8, w96911; -O1:    cmp w8, w1, sxtb6912; -O1:    csel w9, w9, w1, le6913; -O1:    stxrb w10, w9, [x0]6914    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 16915    ret i8 %r6916}6917 6918define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) {6919; -O0-LABEL: atomicrmw_min_i8_unaligned_release:6920; -O0:    sxtb w9, w106921; -O0:    subs w9, w9, w8, sxtb6922; -O0:    csel w12, w10, w8, le6923; -O0:    ldaxrb w9, [x11]6924; -O0:    cmp w9, w10, uxtb6925; -O0:    stlxrb w8, w12, [x11]6926; -O0:    and w8, w9, #0xff6927; -O0:    subs w8, w8, w10, uxtb6928;6929; -O1-LABEL: atomicrmw_min_i8_unaligned_release:6930; -O1:    ldxrb w9, [x0]6931; -O1:    sxtb w8, w96932; -O1:    cmp w8, w1, sxtb6933; -O1:    csel w9, w9, w1, le6934; -O1:    stlxrb w10, w9, [x0]6935    %r = atomicrmw min ptr %ptr, i8 %value release, align 16936    ret i8 %r6937}6938 6939define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {6940; -O0-LABEL: atomicrmw_min_i8_unaligned_acq_rel:6941; -O0:    sxtb w9, w106942; -O0:    subs w9, w9, w8, sxtb6943; -O0:    csel w12, w10, w8, le6944; -O0:    ldaxrb w9, [x11]6945; -O0:    cmp w9, w10, uxtb6946; -O0:    stlxrb w8, w12, [x11]6947; -O0:    and w8, w9, #0xff6948; -O0:    subs w8, w8, w10, uxtb6949;6950; -O1-LABEL: atomicrmw_min_i8_unaligned_acq_rel:6951; -O1:    ldaxrb w9, [x0]6952; -O1:    sxtb w8, w96953; -O1:    cmp w8, w1, sxtb6954; -O1:    csel w9, w9, w1, le6955; -O1:    stlxrb w10, w9, [x0]6956    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 16957    ret i8 %r6958}6959 6960define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {6961; -O0-LABEL: atomicrmw_min_i8_unaligned_seq_cst:6962; -O0:    sxtb w9, w106963; -O0:    subs w9, w9, w8, sxtb6964; -O0:    csel w12, w10, w8, le6965; -O0:    ldaxrb w9, [x11]6966; -O0:    cmp w9, w10, uxtb6967; -O0:    stlxrb w8, w12, [x11]6968; -O0:    and w8, w9, #0xff6969; -O0:    subs w8, w8, w10, uxtb6970;6971; -O1-LABEL: atomicrmw_min_i8_unaligned_seq_cst:6972; -O1:    ldaxrb w9, [x0]6973; -O1:    sxtb w8, w96974; -O1:    cmp w8, w1, sxtb6975; -O1:    csel w9, w9, w1, le6976; -O1:    stlxrb w10, w9, [x0]6977    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 16978    ret i8 %r6979}6980 6981define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) {6982; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic:6983; -O0:    sxth w10, w96984; -O0:    subs w10, w10, w8, sxth6985; -O0:    csel w8, w9, w8, le6986; -O0:    bl __atomic_compare_exchange6987;6988; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic:6989; -O1:    sxth w8, w06990; -O1:    cmp w8, w20, sxth6991; -O1:    csel w8, w0, w20, le6992; -O1:    bl __atomic_compare_exchange6993    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 16994    ret i16 %r6995}6996 6997define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) {6998; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire:6999; -O0:    sxth w10, w97000; -O0:    subs w10, w10, w8, sxth7001; -O0:    csel w8, w9, w8, le7002; -O0:    bl __atomic_compare_exchange7003;7004; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire:7005; -O1:    sxth w8, w07006; -O1:    cmp w8, w20, sxth7007; -O1:    csel w8, w0, w20, le7008; -O1:    bl __atomic_compare_exchange7009    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 17010    ret i16 %r7011}7012 7013define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) {7014; -O0-LABEL: atomicrmw_min_i16_unaligned_release:7015; -O0:    sxth w10, w97016; -O0:    subs w10, w10, w8, sxth7017; -O0:    csel w8, w9, w8, le7018; -O0:    bl __atomic_compare_exchange7019;7020; -O1-LABEL: atomicrmw_min_i16_unaligned_release:7021; -O1:    sxth w8, w07022; -O1:    cmp w8, w20, sxth7023; -O1:    csel w8, w0, w20, le7024; -O1:    bl __atomic_compare_exchange7025    %r = atomicrmw min ptr %ptr, i16 %value release, align 17026    ret i16 %r7027}7028 7029define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {7030; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel:7031; -O0:    sxth w10, w97032; -O0:    subs w10, w10, w8, sxth7033; -O0:    csel w8, w9, w8, le7034; -O0:    bl __atomic_compare_exchange7035;7036; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel:7037; -O1:    sxth w8, w07038; -O1:    cmp w8, w20, sxth7039; -O1:    csel w8, w0, w20, le7040; -O1:    bl __atomic_compare_exchange7041    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 17042    ret i16 %r7043}7044 7045define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {7046; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst:7047; -O0:    sxth w10, w97048; -O0:    subs w10, w10, w8, sxth7049; -O0:    csel w8, w9, w8, le7050; -O0:    bl __atomic_compare_exchange7051;7052; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst:7053; -O1:    sxth w8, w07054; -O1:    cmp w8, w20, sxth7055; -O1:    csel w8, w0, w20, le7056; -O1:    bl __atomic_compare_exchange7057    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 17058    ret i16 %r7059}7060 7061define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) {7062; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic:7063; -O0:    subs w10, w9, w87064; -O0:    csel w8, w9, w8, le7065; -O0:    bl __atomic_compare_exchange7066;7067; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic:7068; -O1:    cmp w0, w207069; -O1:    csel w8, w0, w20, le7070; -O1:    bl __atomic_compare_exchange7071    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 17072    ret i32 %r7073}7074 7075define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) {7076; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire:7077; -O0:    subs w10, w9, w87078; -O0:    csel w8, w9, w8, le7079; -O0:    bl __atomic_compare_exchange7080;7081; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire:7082; -O1:    cmp w0, w207083; -O1:    csel w8, w0, w20, le7084; -O1:    bl __atomic_compare_exchange7085    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 17086    ret i32 %r7087}7088 7089define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) {7090; -O0-LABEL: atomicrmw_min_i32_unaligned_release:7091; -O0:    subs w10, w9, w87092; -O0:    csel w8, w9, w8, le7093; -O0:    bl __atomic_compare_exchange7094;7095; -O1-LABEL: atomicrmw_min_i32_unaligned_release:7096; -O1:    cmp w0, w207097; -O1:    csel w8, w0, w20, le7098; -O1:    bl __atomic_compare_exchange7099    %r = atomicrmw min ptr %ptr, i32 %value release, align 17100    ret i32 %r7101}7102 7103define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {7104; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel:7105; -O0:    subs w10, w9, w87106; -O0:    csel w8, w9, w8, le7107; -O0:    bl __atomic_compare_exchange7108;7109; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel:7110; -O1:    cmp w0, w207111; -O1:    csel w8, w0, w20, le7112; -O1:    bl __atomic_compare_exchange7113    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 17114    ret i32 %r7115}7116 7117define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {7118; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst:7119; -O0:    subs w10, w9, w87120; -O0:    csel w8, w9, w8, le7121; -O0:    bl __atomic_compare_exchange7122;7123; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst:7124; -O1:    cmp w0, w207125; -O1:    csel w8, w0, w20, le7126; -O1:    bl __atomic_compare_exchange7127    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 17128    ret i32 %r7129}7130 7131define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) {7132; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic:7133; -O0:    subs x10, x9, x87134; -O0:    csel x8, x9, x8, le7135; -O0:    bl __atomic_compare_exchange7136;7137; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic:7138; -O1:    cmp x0, x207139; -O1:    csel x8, x0, x20, le7140; -O1:    bl __atomic_compare_exchange7141    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 17142    ret i64 %r7143}7144 7145define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) {7146; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire:7147; -O0:    subs x10, x9, x87148; -O0:    csel x8, x9, x8, le7149; -O0:    bl __atomic_compare_exchange7150;7151; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire:7152; -O1:    cmp x0, x207153; -O1:    csel x8, x0, x20, le7154; -O1:    bl __atomic_compare_exchange7155    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 17156    ret i64 %r7157}7158 7159define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) {7160; -O0-LABEL: atomicrmw_min_i64_unaligned_release:7161; -O0:    subs x10, x9, x87162; -O0:    csel x8, x9, x8, le7163; -O0:    bl __atomic_compare_exchange7164;7165; -O1-LABEL: atomicrmw_min_i64_unaligned_release:7166; -O1:    cmp x0, x207167; -O1:    csel x8, x0, x20, le7168; -O1:    bl __atomic_compare_exchange7169    %r = atomicrmw min ptr %ptr, i64 %value release, align 17170    ret i64 %r7171}7172 7173define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {7174; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel:7175; -O0:    subs x10, x9, x87176; -O0:    csel x8, x9, x8, le7177; -O0:    bl __atomic_compare_exchange7178;7179; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel:7180; -O1:    cmp x0, x207181; -O1:    csel x8, x0, x20, le7182; -O1:    bl __atomic_compare_exchange7183    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 17184    ret i64 %r7185}7186 7187define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {7188; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst:7189; -O0:    subs x10, x9, x87190; -O0:    csel x8, x9, x8, le7191; -O0:    bl __atomic_compare_exchange7192;7193; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst:7194; -O1:    cmp x0, x207195; -O1:    csel x8, x0, x20, le7196; -O1:    bl __atomic_compare_exchange7197    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 17198    ret i64 %r7199}7200 7201define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) {7202; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic:7203; -O0:    subs x8, x8, x97204; -O0:    subs x11, x11, x107205; -O0:    subs x12, x12, x107206; -O0:    csel w11, w8, w11, eq7207; -O0:    ands w12, w11, #0x17208; -O0:    csel x9, x8, x9, ne7209; -O0:    ands w11, w11, #0x17210; -O0:    csel x8, x8, x10, ne7211; -O0:    bl __atomic_compare_exchange7212;7213; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic:7214; -O1:    ldp x0, x1, [x0]7215; -O1:    cmp x21, x07216; -O1:    csel x8, x1, x19, ge7217; -O1:    csel x9, x0, x21, ge7218; -O1:    bl __atomic_compare_exchange7219    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 17220    ret i128 %r7221}7222 7223define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) {7224; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire:7225; -O0:    subs x8, x8, x97226; -O0:    subs x11, x11, x107227; -O0:    subs x12, x12, x107228; -O0:    csel w11, w8, w11, eq7229; -O0:    ands w12, w11, #0x17230; -O0:    csel x9, x8, x9, ne7231; -O0:    ands w11, w11, #0x17232; -O0:    csel x8, x8, x10, ne7233; -O0:    bl __atomic_compare_exchange7234;7235; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire:7236; -O1:    ldp x0, x1, [x0]7237; -O1:    cmp x21, x07238; -O1:    csel x8, x1, x19, ge7239; -O1:    csel x9, x0, x21, ge7240; -O1:    bl __atomic_compare_exchange7241    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 17242    ret i128 %r7243}7244 7245define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) {7246; -O0-LABEL: atomicrmw_min_i128_unaligned_release:7247; -O0:    subs x8, x8, x97248; -O0:    subs x11, x11, x107249; -O0:    subs x12, x12, x107250; -O0:    csel w11, w8, w11, eq7251; -O0:    ands w12, w11, #0x17252; -O0:    csel x9, x8, x9, ne7253; -O0:    ands w11, w11, #0x17254; -O0:    csel x8, x8, x10, ne7255; -O0:    bl __atomic_compare_exchange7256;7257; -O1-LABEL: atomicrmw_min_i128_unaligned_release:7258; -O1:    ldp x0, x1, [x0]7259; -O1:    cmp x21, x07260; -O1:    csel x8, x1, x19, ge7261; -O1:    csel x9, x0, x21, ge7262; -O1:    bl __atomic_compare_exchange7263    %r = atomicrmw min ptr %ptr, i128 %value release, align 17264    ret i128 %r7265}7266 7267define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {7268; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel:7269; -O0:    subs x8, x8, x97270; -O0:    subs x11, x11, x107271; -O0:    subs x12, x12, x107272; -O0:    csel w11, w8, w11, eq7273; -O0:    ands w12, w11, #0x17274; -O0:    csel x9, x8, x9, ne7275; -O0:    ands w11, w11, #0x17276; -O0:    csel x8, x8, x10, ne7277; -O0:    bl __atomic_compare_exchange7278;7279; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel:7280; -O1:    ldp x0, x1, [x0]7281; -O1:    cmp x21, x07282; -O1:    csel x8, x1, x19, ge7283; -O1:    csel x9, x0, x21, ge7284; -O1:    bl __atomic_compare_exchange7285    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 17286    ret i128 %r7287}7288 7289define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {7290; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst:7291; -O0:    subs x8, x8, x97292; -O0:    subs x11, x11, x107293; -O0:    subs x12, x12, x107294; -O0:    csel w11, w8, w11, eq7295; -O0:    ands w12, w11, #0x17296; -O0:    csel x9, x8, x9, ne7297; -O0:    ands w11, w11, #0x17298; -O0:    csel x8, x8, x10, ne7299; -O0:    bl __atomic_compare_exchange7300;7301; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst:7302; -O1:    ldp x0, x1, [x0]7303; -O1:    cmp x21, x07304; -O1:    csel x8, x1, x19, ge7305; -O1:    csel x9, x0, x21, ge7306; -O1:    bl __atomic_compare_exchange7307    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 17308    ret i128 %r7309}7310 7311define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) {7312; -O0-LABEL: atomicrmw_umax_i8_aligned_monotonic:7313; -O0:    and w9, w10, #0xff7314; -O0:    subs w9, w9, w8, uxtb7315; -O0:    csel w12, w10, w8, hi7316; -O0:    ldaxrb w9, [x11]7317; -O0:    cmp w9, w10, uxtb7318; -O0:    stlxrb w8, w12, [x11]7319; -O0:    and w8, w9, #0xff7320; -O0:    subs w8, w8, w10, uxtb7321;7322; -O1-LABEL: atomicrmw_umax_i8_aligned_monotonic:7323; -O1:    and w9, w1, #0xff7324; -O1:    ldxrb w8, [x0]7325; -O1:    cmp w8, w97326; -O1:    csel w10, w8, w9, hi7327; -O1:    stxrb w11, w10, [x0]7328    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 17329    ret i8 %r7330}7331 7332define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) {7333; -O0-LABEL: atomicrmw_umax_i8_aligned_acquire:7334; -O0:    and w9, w10, #0xff7335; -O0:    subs w9, w9, w8, uxtb7336; -O0:    csel w12, w10, w8, hi7337; -O0:    ldaxrb w9, [x11]7338; -O0:    cmp w9, w10, uxtb7339; -O0:    stlxrb w8, w12, [x11]7340; -O0:    and w8, w9, #0xff7341; -O0:    subs w8, w8, w10, uxtb7342;7343; -O1-LABEL: atomicrmw_umax_i8_aligned_acquire:7344; -O1:    and w9, w1, #0xff7345; -O1:    ldaxrb w8, [x0]7346; -O1:    cmp w8, w97347; -O1:    csel w10, w8, w9, hi7348; -O1:    stxrb w11, w10, [x0]7349    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 17350    ret i8 %r7351}7352 7353define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) {7354; -O0-LABEL: atomicrmw_umax_i8_aligned_release:7355; -O0:    and w9, w10, #0xff7356; -O0:    subs w9, w9, w8, uxtb7357; -O0:    csel w12, w10, w8, hi7358; -O0:    ldaxrb w9, [x11]7359; -O0:    cmp w9, w10, uxtb7360; -O0:    stlxrb w8, w12, [x11]7361; -O0:    and w8, w9, #0xff7362; -O0:    subs w8, w8, w10, uxtb7363;7364; -O1-LABEL: atomicrmw_umax_i8_aligned_release:7365; -O1:    and w9, w1, #0xff7366; -O1:    ldxrb w8, [x0]7367; -O1:    cmp w8, w97368; -O1:    csel w10, w8, w9, hi7369; -O1:    stlxrb w11, w10, [x0]7370    %r = atomicrmw umax ptr %ptr, i8 %value release, align 17371    ret i8 %r7372}7373 7374define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) {7375; -O0-LABEL: atomicrmw_umax_i8_aligned_acq_rel:7376; -O0:    and w9, w10, #0xff7377; -O0:    subs w9, w9, w8, uxtb7378; -O0:    csel w12, w10, w8, hi7379; -O0:    ldaxrb w9, [x11]7380; -O0:    cmp w9, w10, uxtb7381; -O0:    stlxrb w8, w12, [x11]7382; -O0:    and w8, w9, #0xff7383; -O0:    subs w8, w8, w10, uxtb7384;7385; -O1-LABEL: atomicrmw_umax_i8_aligned_acq_rel:7386; -O1:    and w9, w1, #0xff7387; -O1:    ldaxrb w8, [x0]7388; -O1:    cmp w8, w97389; -O1:    csel w10, w8, w9, hi7390; -O1:    stlxrb w11, w10, [x0]7391    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 17392    ret i8 %r7393}7394 7395define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) {7396; -O0-LABEL: atomicrmw_umax_i8_aligned_seq_cst:7397; -O0:    and w9, w10, #0xff7398; -O0:    subs w9, w9, w8, uxtb7399; -O0:    csel w12, w10, w8, hi7400; -O0:    ldaxrb w9, [x11]7401; -O0:    cmp w9, w10, uxtb7402; -O0:    stlxrb w8, w12, [x11]7403; -O0:    and w8, w9, #0xff7404; -O0:    subs w8, w8, w10, uxtb7405;7406; -O1-LABEL: atomicrmw_umax_i8_aligned_seq_cst:7407; -O1:    and w9, w1, #0xff7408; -O1:    ldaxrb w8, [x0]7409; -O1:    cmp w8, w97410; -O1:    csel w10, w8, w9, hi7411; -O1:    stlxrb w11, w10, [x0]7412    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 17413    ret i8 %r7414}7415 7416define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) {7417; -O0-LABEL: atomicrmw_umax_i16_aligned_monotonic:7418; -O0:    subs w10, w10, w9, uxth7419; -O0:    csel w12, w8, w9, hi7420; -O0:    ldaxrh w9, [x11]7421; -O0:    cmp w9, w8, uxth7422; -O0:    stlxrh w10, w12, [x11]7423; -O0:    subs w8, w8, w9, uxth7424;7425; -O1-LABEL: atomicrmw_umax_i16_aligned_monotonic:7426; -O1:    and w9, w1, #0xffff7427; -O1:    ldxrh w8, [x0]7428; -O1:    cmp w8, w97429; -O1:    csel w10, w8, w9, hi7430; -O1:    stxrh w11, w10, [x0]7431    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 27432    ret i16 %r7433}7434 7435define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) {7436; -O0-LABEL: atomicrmw_umax_i16_aligned_acquire:7437; -O0:    subs w10, w10, w9, uxth7438; -O0:    csel w12, w8, w9, hi7439; -O0:    ldaxrh w9, [x11]7440; -O0:    cmp w9, w8, uxth7441; -O0:    stlxrh w10, w12, [x11]7442; -O0:    subs w8, w8, w9, uxth7443;7444; -O1-LABEL: atomicrmw_umax_i16_aligned_acquire:7445; -O1:    and w9, w1, #0xffff7446; -O1:    ldaxrh w8, [x0]7447; -O1:    cmp w8, w97448; -O1:    csel w10, w8, w9, hi7449; -O1:    stxrh w11, w10, [x0]7450    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 27451    ret i16 %r7452}7453 7454define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) {7455; -O0-LABEL: atomicrmw_umax_i16_aligned_release:7456; -O0:    subs w10, w10, w9, uxth7457; -O0:    csel w12, w8, w9, hi7458; -O0:    ldaxrh w9, [x11]7459; -O0:    cmp w9, w8, uxth7460; -O0:    stlxrh w10, w12, [x11]7461; -O0:    subs w8, w8, w9, uxth7462;7463; -O1-LABEL: atomicrmw_umax_i16_aligned_release:7464; -O1:    and w9, w1, #0xffff7465; -O1:    ldxrh w8, [x0]7466; -O1:    cmp w8, w97467; -O1:    csel w10, w8, w9, hi7468; -O1:    stlxrh w11, w10, [x0]7469    %r = atomicrmw umax ptr %ptr, i16 %value release, align 27470    ret i16 %r7471}7472 7473define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) {7474; -O0-LABEL: atomicrmw_umax_i16_aligned_acq_rel:7475; -O0:    subs w10, w10, w9, uxth7476; -O0:    csel w12, w8, w9, hi7477; -O0:    ldaxrh w9, [x11]7478; -O0:    cmp w9, w8, uxth7479; -O0:    stlxrh w10, w12, [x11]7480; -O0:    subs w8, w8, w9, uxth7481;7482; -O1-LABEL: atomicrmw_umax_i16_aligned_acq_rel:7483; -O1:    and w9, w1, #0xffff7484; -O1:    ldaxrh w8, [x0]7485; -O1:    cmp w8, w97486; -O1:    csel w10, w8, w9, hi7487; -O1:    stlxrh w11, w10, [x0]7488    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 27489    ret i16 %r7490}7491 7492define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) {7493; -O0-LABEL: atomicrmw_umax_i16_aligned_seq_cst:7494; -O0:    subs w10, w10, w9, uxth7495; -O0:    csel w12, w8, w9, hi7496; -O0:    ldaxrh w9, [x11]7497; -O0:    cmp w9, w8, uxth7498; -O0:    stlxrh w10, w12, [x11]7499; -O0:    subs w8, w8, w9, uxth7500;7501; -O1-LABEL: atomicrmw_umax_i16_aligned_seq_cst:7502; -O1:    and w9, w1, #0xffff7503; -O1:    ldaxrh w8, [x0]7504; -O1:    cmp w8, w97505; -O1:    csel w10, w8, w9, hi7506; -O1:    stlxrh w11, w10, [x0]7507    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 27508    ret i16 %r7509}7510 7511define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) {7512; -O0-LABEL: atomicrmw_umax_i32_aligned_monotonic:7513; -O0:    subs w10, w8, w97514; -O0:    csel w12, w8, w9, hi7515; -O0:    ldaxr w9, [x11]7516; -O0:    cmp w9, w87517; -O0:    stlxr w10, w12, [x11]7518; -O0:    subs w8, w9, w87519;7520; -O1-LABEL: atomicrmw_umax_i32_aligned_monotonic:7521; -O1:    ldxr w8, [x0]7522; -O1:    cmp w8, w17523; -O1:    csel w9, w8, w1, hi7524; -O1:    stxr w10, w9, [x0]7525    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 47526    ret i32 %r7527}7528 7529define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) {7530; -O0-LABEL: atomicrmw_umax_i32_aligned_acquire:7531; -O0:    subs w10, w8, w97532; -O0:    csel w12, w8, w9, hi7533; -O0:    ldaxr w9, [x11]7534; -O0:    cmp w9, w87535; -O0:    stlxr w10, w12, [x11]7536; -O0:    subs w8, w9, w87537;7538; -O1-LABEL: atomicrmw_umax_i32_aligned_acquire:7539; -O1:    ldaxr w8, [x0]7540; -O1:    cmp w8, w17541; -O1:    csel w9, w8, w1, hi7542; -O1:    stxr w10, w9, [x0]7543    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 47544    ret i32 %r7545}7546 7547define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) {7548; -O0-LABEL: atomicrmw_umax_i32_aligned_release:7549; -O0:    subs w10, w8, w97550; -O0:    csel w12, w8, w9, hi7551; -O0:    ldaxr w9, [x11]7552; -O0:    cmp w9, w87553; -O0:    stlxr w10, w12, [x11]7554; -O0:    subs w8, w9, w87555;7556; -O1-LABEL: atomicrmw_umax_i32_aligned_release:7557; -O1:    ldxr w8, [x0]7558; -O1:    cmp w8, w17559; -O1:    csel w9, w8, w1, hi7560; -O1:    stlxr w10, w9, [x0]7561    %r = atomicrmw umax ptr %ptr, i32 %value release, align 47562    ret i32 %r7563}7564 7565define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) {7566; -O0-LABEL: atomicrmw_umax_i32_aligned_acq_rel:7567; -O0:    subs w10, w8, w97568; -O0:    csel w12, w8, w9, hi7569; -O0:    ldaxr w9, [x11]7570; -O0:    cmp w9, w87571; -O0:    stlxr w10, w12, [x11]7572; -O0:    subs w8, w9, w87573;7574; -O1-LABEL: atomicrmw_umax_i32_aligned_acq_rel:7575; -O1:    ldaxr w8, [x0]7576; -O1:    cmp w8, w17577; -O1:    csel w9, w8, w1, hi7578; -O1:    stlxr w10, w9, [x0]7579    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 47580    ret i32 %r7581}7582 7583define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) {7584; -O0-LABEL: atomicrmw_umax_i32_aligned_seq_cst:7585; -O0:    subs w10, w8, w97586; -O0:    csel w12, w8, w9, hi7587; -O0:    ldaxr w9, [x11]7588; -O0:    cmp w9, w87589; -O0:    stlxr w10, w12, [x11]7590; -O0:    subs w8, w9, w87591;7592; -O1-LABEL: atomicrmw_umax_i32_aligned_seq_cst:7593; -O1:    ldaxr w8, [x0]7594; -O1:    cmp w8, w17595; -O1:    csel w9, w8, w1, hi7596; -O1:    stlxr w10, w9, [x0]7597    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 47598    ret i32 %r7599}7600 7601define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) {7602; -O0-LABEL: atomicrmw_umax_i64_aligned_monotonic:7603; -O0:    subs x10, x8, x97604; -O0:    csel x12, x8, x9, hi7605; -O0:    ldaxr x9, [x11]7606; -O0:    cmp x9, x87607; -O0:    stlxr w10, x12, [x11]7608; -O0:    subs x8, x9, x87609;7610; -O1-LABEL: atomicrmw_umax_i64_aligned_monotonic:7611; -O1:    ldxr x0, [x8]7612; -O1:    cmp x0, x17613; -O1:    csel x9, x0, x1, hi7614; -O1:    stxr w10, x9, [x8]7615    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 87616    ret i64 %r7617}7618 7619define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) {7620; -O0-LABEL: atomicrmw_umax_i64_aligned_acquire:7621; -O0:    subs x10, x8, x97622; -O0:    csel x12, x8, x9, hi7623; -O0:    ldaxr x9, [x11]7624; -O0:    cmp x9, x87625; -O0:    stlxr w10, x12, [x11]7626; -O0:    subs x8, x9, x87627;7628; -O1-LABEL: atomicrmw_umax_i64_aligned_acquire:7629; -O1:    ldaxr x0, [x8]7630; -O1:    cmp x0, x17631; -O1:    csel x9, x0, x1, hi7632; -O1:    stxr w10, x9, [x8]7633    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 87634    ret i64 %r7635}7636 7637define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) {7638; -O0-LABEL: atomicrmw_umax_i64_aligned_release:7639; -O0:    subs x10, x8, x97640; -O0:    csel x12, x8, x9, hi7641; -O0:    ldaxr x9, [x11]7642; -O0:    cmp x9, x87643; -O0:    stlxr w10, x12, [x11]7644; -O0:    subs x8, x9, x87645;7646; -O1-LABEL: atomicrmw_umax_i64_aligned_release:7647; -O1:    ldxr x0, [x8]7648; -O1:    cmp x0, x17649; -O1:    csel x9, x0, x1, hi7650; -O1:    stlxr w10, x9, [x8]7651    %r = atomicrmw umax ptr %ptr, i64 %value release, align 87652    ret i64 %r7653}7654 7655define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) {7656; -O0-LABEL: atomicrmw_umax_i64_aligned_acq_rel:7657; -O0:    subs x10, x8, x97658; -O0:    csel x12, x8, x9, hi7659; -O0:    ldaxr x9, [x11]7660; -O0:    cmp x9, x87661; -O0:    stlxr w10, x12, [x11]7662; -O0:    subs x8, x9, x87663;7664; -O1-LABEL: atomicrmw_umax_i64_aligned_acq_rel:7665; -O1:    ldaxr x0, [x8]7666; -O1:    cmp x0, x17667; -O1:    csel x9, x0, x1, hi7668; -O1:    stlxr w10, x9, [x8]7669    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 87670    ret i64 %r7671}7672 7673define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) {7674; -O0-LABEL: atomicrmw_umax_i64_aligned_seq_cst:7675; -O0:    subs x10, x8, x97676; -O0:    csel x12, x8, x9, hi7677; -O0:    ldaxr x9, [x11]7678; -O0:    cmp x9, x87679; -O0:    stlxr w10, x12, [x11]7680; -O0:    subs x8, x9, x87681;7682; -O1-LABEL: atomicrmw_umax_i64_aligned_seq_cst:7683; -O1:    ldaxr x0, [x8]7684; -O1:    cmp x0, x17685; -O1:    csel x9, x0, x1, hi7686; -O1:    stlxr w10, x9, [x8]7687    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 87688    ret i64 %r7689}7690 7691define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) {7692; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic:7693; -O0:    subs x8, x8, x127694; -O0:    subs x10, x10, x97695; -O0:    subs x13, x13, x97696; -O0:    csel w10, w8, w10, eq7697; -O0:    ands w13, w10, #0x17698; -O0:    csel x14, x8, x12, ne7699; -O0:    ands w10, w10, #0x17700; -O0:    csel x15, x8, x9, ne7701; -O0:    ldxp x10, x9, [x11]7702; -O0:    cmp x10, x127703; -O0:    cmp x9, x137704; -O0:    stxp w8, x14, x15, [x11]7705; -O0:    stxp w8, x10, x9, [x11]7706; -O0:    eor x8, x10, x87707; -O0:    eor x11, x9, x117708; -O0:    orr x8, x8, x117709; -O0:    subs x8, x8, #07710;7711; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic:7712; -O1:    ldxp x0, x1, [x8]7713; -O1:    cmp x2, x07714; -O1:    csel x9, x1, x3, lo7715; -O1:    csel x10, x0, x2, lo7716; -O1:    stxp w11, x10, x9, [x8]7717    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 167718    ret i128 %r7719}7720 7721define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) {7722; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire:7723; -O0:    subs x8, x8, x127724; -O0:    subs x10, x10, x97725; -O0:    subs x13, x13, x97726; -O0:    csel w10, w8, w10, eq7727; -O0:    ands w13, w10, #0x17728; -O0:    csel x14, x8, x12, ne7729; -O0:    ands w10, w10, #0x17730; -O0:    csel x15, x8, x9, ne7731; -O0:    ldaxp x10, x9, [x11]7732; -O0:    cmp x10, x127733; -O0:    cmp x9, x137734; -O0:    stxp w8, x14, x15, [x11]7735; -O0:    stxp w8, x10, x9, [x11]7736; -O0:    eor x8, x10, x87737; -O0:    eor x11, x9, x117738; -O0:    orr x8, x8, x117739; -O0:    subs x8, x8, #07740;7741; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire:7742; -O1:    ldaxp x0, x1, [x8]7743; -O1:    cmp x2, x07744; -O1:    csel x9, x1, x3, lo7745; -O1:    csel x10, x0, x2, lo7746; -O1:    stxp w11, x10, x9, [x8]7747    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 167748    ret i128 %r7749}7750 7751define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) {7752; -O0-LABEL: atomicrmw_umax_i128_aligned_release:7753; -O0:    subs x8, x8, x127754; -O0:    subs x10, x10, x97755; -O0:    subs x13, x13, x97756; -O0:    csel w10, w8, w10, eq7757; -O0:    ands w13, w10, #0x17758; -O0:    csel x14, x8, x12, ne7759; -O0:    ands w10, w10, #0x17760; -O0:    csel x15, x8, x9, ne7761; -O0:    ldxp x10, x9, [x11]7762; -O0:    cmp x10, x127763; -O0:    cmp x9, x137764; -O0:    stlxp w8, x14, x15, [x11]7765; -O0:    stlxp w8, x10, x9, [x11]7766; -O0:    eor x8, x10, x87767; -O0:    eor x11, x9, x117768; -O0:    orr x8, x8, x117769; -O0:    subs x8, x8, #07770;7771; -O1-LABEL: atomicrmw_umax_i128_aligned_release:7772; -O1:    ldxp x0, x1, [x8]7773; -O1:    cmp x2, x07774; -O1:    csel x9, x1, x3, lo7775; -O1:    csel x10, x0, x2, lo7776; -O1:    stlxp w11, x10, x9, [x8]7777    %r = atomicrmw umax ptr %ptr, i128 %value release, align 167778    ret i128 %r7779}7780 7781define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) {7782; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel:7783; -O0:    subs x8, x8, x127784; -O0:    subs x10, x10, x97785; -O0:    subs x13, x13, x97786; -O0:    csel w10, w8, w10, eq7787; -O0:    ands w13, w10, #0x17788; -O0:    csel x14, x8, x12, ne7789; -O0:    ands w10, w10, #0x17790; -O0:    csel x15, x8, x9, ne7791; -O0:    ldaxp x10, x9, [x11]7792; -O0:    cmp x10, x127793; -O0:    cmp x9, x137794; -O0:    stlxp w8, x14, x15, [x11]7795; -O0:    stlxp w8, x10, x9, [x11]7796; -O0:    eor x8, x10, x87797; -O0:    eor x11, x9, x117798; -O0:    orr x8, x8, x117799; -O0:    subs x8, x8, #07800;7801; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel:7802; -O1:    ldaxp x0, x1, [x8]7803; -O1:    cmp x2, x07804; -O1:    csel x9, x1, x3, lo7805; -O1:    csel x10, x0, x2, lo7806; -O1:    stlxp w11, x10, x9, [x8]7807    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 167808    ret i128 %r7809}7810 7811define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) {7812; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst:7813; -O0:    subs x8, x8, x127814; -O0:    subs x10, x10, x97815; -O0:    subs x13, x13, x97816; -O0:    csel w10, w8, w10, eq7817; -O0:    ands w13, w10, #0x17818; -O0:    csel x14, x8, x12, ne7819; -O0:    ands w10, w10, #0x17820; -O0:    csel x15, x8, x9, ne7821; -O0:    ldaxp x10, x9, [x11]7822; -O0:    cmp x10, x127823; -O0:    cmp x9, x137824; -O0:    stlxp w8, x14, x15, [x11]7825; -O0:    stlxp w8, x10, x9, [x11]7826; -O0:    eor x8, x10, x87827; -O0:    eor x11, x9, x117828; -O0:    orr x8, x8, x117829; -O0:    subs x8, x8, #07830;7831; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst:7832; -O1:    ldaxp x0, x1, [x8]7833; -O1:    cmp x2, x07834; -O1:    csel x9, x1, x3, lo7835; -O1:    csel x10, x0, x2, lo7836; -O1:    stlxp w11, x10, x9, [x8]7837    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 167838    ret i128 %r7839}7840 7841define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) {7842; -O0-LABEL: atomicrmw_umax_i8_unaligned_monotonic:7843; -O0:    and w9, w10, #0xff7844; -O0:    subs w9, w9, w8, uxtb7845; -O0:    csel w12, w10, w8, hi7846; -O0:    ldaxrb w9, [x11]7847; -O0:    cmp w9, w10, uxtb7848; -O0:    stlxrb w8, w12, [x11]7849; -O0:    and w8, w9, #0xff7850; -O0:    subs w8, w8, w10, uxtb7851;7852; -O1-LABEL: atomicrmw_umax_i8_unaligned_monotonic:7853; -O1:    and w9, w1, #0xff7854; -O1:    ldxrb w8, [x0]7855; -O1:    cmp w8, w97856; -O1:    csel w10, w8, w9, hi7857; -O1:    stxrb w11, w10, [x0]7858    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 17859    ret i8 %r7860}7861 7862define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) {7863; -O0-LABEL: atomicrmw_umax_i8_unaligned_acquire:7864; -O0:    and w9, w10, #0xff7865; -O0:    subs w9, w9, w8, uxtb7866; -O0:    csel w12, w10, w8, hi7867; -O0:    ldaxrb w9, [x11]7868; -O0:    cmp w9, w10, uxtb7869; -O0:    stlxrb w8, w12, [x11]7870; -O0:    and w8, w9, #0xff7871; -O0:    subs w8, w8, w10, uxtb7872;7873; -O1-LABEL: atomicrmw_umax_i8_unaligned_acquire:7874; -O1:    and w9, w1, #0xff7875; -O1:    ldaxrb w8, [x0]7876; -O1:    cmp w8, w97877; -O1:    csel w10, w8, w9, hi7878; -O1:    stxrb w11, w10, [x0]7879    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 17880    ret i8 %r7881}7882 7883define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) {7884; -O0-LABEL: atomicrmw_umax_i8_unaligned_release:7885; -O0:    and w9, w10, #0xff7886; -O0:    subs w9, w9, w8, uxtb7887; -O0:    csel w12, w10, w8, hi7888; -O0:    ldaxrb w9, [x11]7889; -O0:    cmp w9, w10, uxtb7890; -O0:    stlxrb w8, w12, [x11]7891; -O0:    and w8, w9, #0xff7892; -O0:    subs w8, w8, w10, uxtb7893;7894; -O1-LABEL: atomicrmw_umax_i8_unaligned_release:7895; -O1:    and w9, w1, #0xff7896; -O1:    ldxrb w8, [x0]7897; -O1:    cmp w8, w97898; -O1:    csel w10, w8, w9, hi7899; -O1:    stlxrb w11, w10, [x0]7900    %r = atomicrmw umax ptr %ptr, i8 %value release, align 17901    ret i8 %r7902}7903 7904define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {7905; -O0-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:7906; -O0:    and w9, w10, #0xff7907; -O0:    subs w9, w9, w8, uxtb7908; -O0:    csel w12, w10, w8, hi7909; -O0:    ldaxrb w9, [x11]7910; -O0:    cmp w9, w10, uxtb7911; -O0:    stlxrb w8, w12, [x11]7912; -O0:    and w8, w9, #0xff7913; -O0:    subs w8, w8, w10, uxtb7914;7915; -O1-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:7916; -O1:    and w9, w1, #0xff7917; -O1:    ldaxrb w8, [x0]7918; -O1:    cmp w8, w97919; -O1:    csel w10, w8, w9, hi7920; -O1:    stlxrb w11, w10, [x0]7921    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 17922    ret i8 %r7923}7924 7925define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {7926; -O0-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:7927; -O0:    and w9, w10, #0xff7928; -O0:    subs w9, w9, w8, uxtb7929; -O0:    csel w12, w10, w8, hi7930; -O0:    ldaxrb w9, [x11]7931; -O0:    cmp w9, w10, uxtb7932; -O0:    stlxrb w8, w12, [x11]7933; -O0:    and w8, w9, #0xff7934; -O0:    subs w8, w8, w10, uxtb7935;7936; -O1-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:7937; -O1:    and w9, w1, #0xff7938; -O1:    ldaxrb w8, [x0]7939; -O1:    cmp w8, w97940; -O1:    csel w10, w8, w9, hi7941; -O1:    stlxrb w11, w10, [x0]7942    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 17943    ret i8 %r7944}7945 7946define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) {7947; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic:7948; -O0:    subs w10, w10, w8, uxth7949; -O0:    csel w8, w9, w8, hi7950; -O0:    bl __atomic_compare_exchange7951;7952; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic:7953; -O1:    and w8, w0, #0xffff7954; -O1:    cmp w8, w20, uxth7955; -O1:    csel w8, w0, w20, hi7956; -O1:    bl __atomic_compare_exchange7957    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 17958    ret i16 %r7959}7960 7961define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) {7962; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire:7963; -O0:    subs w10, w10, w8, uxth7964; -O0:    csel w8, w9, w8, hi7965; -O0:    bl __atomic_compare_exchange7966;7967; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire:7968; -O1:    and w8, w0, #0xffff7969; -O1:    cmp w8, w20, uxth7970; -O1:    csel w8, w0, w20, hi7971; -O1:    bl __atomic_compare_exchange7972    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 17973    ret i16 %r7974}7975 7976define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) {7977; -O0-LABEL: atomicrmw_umax_i16_unaligned_release:7978; -O0:    subs w10, w10, w8, uxth7979; -O0:    csel w8, w9, w8, hi7980; -O0:    bl __atomic_compare_exchange7981;7982; -O1-LABEL: atomicrmw_umax_i16_unaligned_release:7983; -O1:    and w8, w0, #0xffff7984; -O1:    cmp w8, w20, uxth7985; -O1:    csel w8, w0, w20, hi7986; -O1:    bl __atomic_compare_exchange7987    %r = atomicrmw umax ptr %ptr, i16 %value release, align 17988    ret i16 %r7989}7990 7991define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {7992; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:7993; -O0:    subs w10, w10, w8, uxth7994; -O0:    csel w8, w9, w8, hi7995; -O0:    bl __atomic_compare_exchange7996;7997; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:7998; -O1:    and w8, w0, #0xffff7999; -O1:    cmp w8, w20, uxth8000; -O1:    csel w8, w0, w20, hi8001; -O1:    bl __atomic_compare_exchange8002    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 18003    ret i16 %r8004}8005 8006define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {8007; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:8008; -O0:    subs w10, w10, w8, uxth8009; -O0:    csel w8, w9, w8, hi8010; -O0:    bl __atomic_compare_exchange8011;8012; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:8013; -O1:    and w8, w0, #0xffff8014; -O1:    cmp w8, w20, uxth8015; -O1:    csel w8, w0, w20, hi8016; -O1:    bl __atomic_compare_exchange8017    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 18018    ret i16 %r8019}8020 8021define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) {8022; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic:8023; -O0:    subs w10, w9, w88024; -O0:    csel w8, w9, w8, hi8025; -O0:    bl __atomic_compare_exchange8026;8027; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic:8028; -O1:    cmp w0, w208029; -O1:    csel w8, w0, w20, hi8030; -O1:    bl __atomic_compare_exchange8031    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 18032    ret i32 %r8033}8034 8035define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) {8036; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire:8037; -O0:    subs w10, w9, w88038; -O0:    csel w8, w9, w8, hi8039; -O0:    bl __atomic_compare_exchange8040;8041; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire:8042; -O1:    cmp w0, w208043; -O1:    csel w8, w0, w20, hi8044; -O1:    bl __atomic_compare_exchange8045    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 18046    ret i32 %r8047}8048 8049define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) {8050; -O0-LABEL: atomicrmw_umax_i32_unaligned_release:8051; -O0:    subs w10, w9, w88052; -O0:    csel w8, w9, w8, hi8053; -O0:    bl __atomic_compare_exchange8054;8055; -O1-LABEL: atomicrmw_umax_i32_unaligned_release:8056; -O1:    cmp w0, w208057; -O1:    csel w8, w0, w20, hi8058; -O1:    bl __atomic_compare_exchange8059    %r = atomicrmw umax ptr %ptr, i32 %value release, align 18060    ret i32 %r8061}8062 8063define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {8064; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:8065; -O0:    subs w10, w9, w88066; -O0:    csel w8, w9, w8, hi8067; -O0:    bl __atomic_compare_exchange8068;8069; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:8070; -O1:    cmp w0, w208071; -O1:    csel w8, w0, w20, hi8072; -O1:    bl __atomic_compare_exchange8073    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 18074    ret i32 %r8075}8076 8077define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {8078; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:8079; -O0:    subs w10, w9, w88080; -O0:    csel w8, w9, w8, hi8081; -O0:    bl __atomic_compare_exchange8082;8083; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:8084; -O1:    cmp w0, w208085; -O1:    csel w8, w0, w20, hi8086; -O1:    bl __atomic_compare_exchange8087    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 18088    ret i32 %r8089}8090 8091define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) {8092; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic:8093; -O0:    subs x10, x9, x88094; -O0:    csel x8, x9, x8, hi8095; -O0:    bl __atomic_compare_exchange8096;8097; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic:8098; -O1:    cmp x0, x208099; -O1:    csel x8, x0, x20, hi8100; -O1:    bl __atomic_compare_exchange8101    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 18102    ret i64 %r8103}8104 8105define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) {8106; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire:8107; -O0:    subs x10, x9, x88108; -O0:    csel x8, x9, x8, hi8109; -O0:    bl __atomic_compare_exchange8110;8111; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire:8112; -O1:    cmp x0, x208113; -O1:    csel x8, x0, x20, hi8114; -O1:    bl __atomic_compare_exchange8115    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 18116    ret i64 %r8117}8118 8119define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) {8120; -O0-LABEL: atomicrmw_umax_i64_unaligned_release:8121; -O0:    subs x10, x9, x88122; -O0:    csel x8, x9, x8, hi8123; -O0:    bl __atomic_compare_exchange8124;8125; -O1-LABEL: atomicrmw_umax_i64_unaligned_release:8126; -O1:    cmp x0, x208127; -O1:    csel x8, x0, x20, hi8128; -O1:    bl __atomic_compare_exchange8129    %r = atomicrmw umax ptr %ptr, i64 %value release, align 18130    ret i64 %r8131}8132 8133define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {8134; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:8135; -O0:    subs x10, x9, x88136; -O0:    csel x8, x9, x8, hi8137; -O0:    bl __atomic_compare_exchange8138;8139; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:8140; -O1:    cmp x0, x208141; -O1:    csel x8, x0, x20, hi8142; -O1:    bl __atomic_compare_exchange8143    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 18144    ret i64 %r8145}8146 8147define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {8148; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:8149; -O0:    subs x10, x9, x88150; -O0:    csel x8, x9, x8, hi8151; -O0:    bl __atomic_compare_exchange8152;8153; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:8154; -O1:    cmp x0, x208155; -O1:    csel x8, x0, x20, hi8156; -O1:    bl __atomic_compare_exchange8157    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 18158    ret i64 %r8159}8160 8161define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) {8162; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic:8163; -O0:    subs x8, x8, x98164; -O0:    subs x11, x11, x108165; -O0:    subs x12, x12, x108166; -O0:    csel w11, w8, w11, eq8167; -O0:    ands w12, w11, #0x18168; -O0:    csel x9, x8, x9, ne8169; -O0:    ands w11, w11, #0x18170; -O0:    csel x8, x8, x10, ne8171; -O0:    bl __atomic_compare_exchange8172;8173; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic:8174; -O1:    ldp x0, x1, [x0]8175; -O1:    cmp x21, x08176; -O1:    csel x8, x1, x19, lo8177; -O1:    csel x9, x0, x21, lo8178; -O1:    bl __atomic_compare_exchange8179    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 18180    ret i128 %r8181}8182 8183define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) {8184; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire:8185; -O0:    subs x8, x8, x98186; -O0:    subs x11, x11, x108187; -O0:    subs x12, x12, x108188; -O0:    csel w11, w8, w11, eq8189; -O0:    ands w12, w11, #0x18190; -O0:    csel x9, x8, x9, ne8191; -O0:    ands w11, w11, #0x18192; -O0:    csel x8, x8, x10, ne8193; -O0:    bl __atomic_compare_exchange8194;8195; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire:8196; -O1:    ldp x0, x1, [x0]8197; -O1:    cmp x21, x08198; -O1:    csel x8, x1, x19, lo8199; -O1:    csel x9, x0, x21, lo8200; -O1:    bl __atomic_compare_exchange8201    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 18202    ret i128 %r8203}8204 8205define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) {8206; -O0-LABEL: atomicrmw_umax_i128_unaligned_release:8207; -O0:    subs x8, x8, x98208; -O0:    subs x11, x11, x108209; -O0:    subs x12, x12, x108210; -O0:    csel w11, w8, w11, eq8211; -O0:    ands w12, w11, #0x18212; -O0:    csel x9, x8, x9, ne8213; -O0:    ands w11, w11, #0x18214; -O0:    csel x8, x8, x10, ne8215; -O0:    bl __atomic_compare_exchange8216;8217; -O1-LABEL: atomicrmw_umax_i128_unaligned_release:8218; -O1:    ldp x0, x1, [x0]8219; -O1:    cmp x21, x08220; -O1:    csel x8, x1, x19, lo8221; -O1:    csel x9, x0, x21, lo8222; -O1:    bl __atomic_compare_exchange8223    %r = atomicrmw umax ptr %ptr, i128 %value release, align 18224    ret i128 %r8225}8226 8227define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {8228; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:8229; -O0:    subs x8, x8, x98230; -O0:    subs x11, x11, x108231; -O0:    subs x12, x12, x108232; -O0:    csel w11, w8, w11, eq8233; -O0:    ands w12, w11, #0x18234; -O0:    csel x9, x8, x9, ne8235; -O0:    ands w11, w11, #0x18236; -O0:    csel x8, x8, x10, ne8237; -O0:    bl __atomic_compare_exchange8238;8239; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:8240; -O1:    ldp x0, x1, [x0]8241; -O1:    cmp x21, x08242; -O1:    csel x8, x1, x19, lo8243; -O1:    csel x9, x0, x21, lo8244; -O1:    bl __atomic_compare_exchange8245    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 18246    ret i128 %r8247}8248 8249define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {8250; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:8251; -O0:    subs x8, x8, x98252; -O0:    subs x11, x11, x108253; -O0:    subs x12, x12, x108254; -O0:    csel w11, w8, w11, eq8255; -O0:    ands w12, w11, #0x18256; -O0:    csel x9, x8, x9, ne8257; -O0:    ands w11, w11, #0x18258; -O0:    csel x8, x8, x10, ne8259; -O0:    bl __atomic_compare_exchange8260;8261; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:8262; -O1:    ldp x0, x1, [x0]8263; -O1:    cmp x21, x08264; -O1:    csel x8, x1, x19, lo8265; -O1:    csel x9, x0, x21, lo8266; -O1:    bl __atomic_compare_exchange8267    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 18268    ret i128 %r8269}8270 8271define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) {8272; -O0-LABEL: atomicrmw_umin_i8_aligned_monotonic:8273; -O0:    and w9, w10, #0xff8274; -O0:    subs w9, w9, w8, uxtb8275; -O0:    csel w12, w10, w8, ls8276; -O0:    ldaxrb w9, [x11]8277; -O0:    cmp w9, w10, uxtb8278; -O0:    stlxrb w8, w12, [x11]8279; -O0:    and w8, w9, #0xff8280; -O0:    subs w8, w8, w10, uxtb8281;8282; -O1-LABEL: atomicrmw_umin_i8_aligned_monotonic:8283; -O1:    and w9, w1, #0xff8284; -O1:    ldxrb w8, [x0]8285; -O1:    cmp w8, w98286; -O1:    csel w10, w8, w9, ls8287; -O1:    stxrb w11, w10, [x0]8288    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 18289    ret i8 %r8290}8291 8292define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) {8293; -O0-LABEL: atomicrmw_umin_i8_aligned_acquire:8294; -O0:    and w9, w10, #0xff8295; -O0:    subs w9, w9, w8, uxtb8296; -O0:    csel w12, w10, w8, ls8297; -O0:    ldaxrb w9, [x11]8298; -O0:    cmp w9, w10, uxtb8299; -O0:    stlxrb w8, w12, [x11]8300; -O0:    and w8, w9, #0xff8301; -O0:    subs w8, w8, w10, uxtb8302;8303; -O1-LABEL: atomicrmw_umin_i8_aligned_acquire:8304; -O1:    and w9, w1, #0xff8305; -O1:    ldaxrb w8, [x0]8306; -O1:    cmp w8, w98307; -O1:    csel w10, w8, w9, ls8308; -O1:    stxrb w11, w10, [x0]8309    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 18310    ret i8 %r8311}8312 8313define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) {8314; -O0-LABEL: atomicrmw_umin_i8_aligned_release:8315; -O0:    and w9, w10, #0xff8316; -O0:    subs w9, w9, w8, uxtb8317; -O0:    csel w12, w10, w8, ls8318; -O0:    ldaxrb w9, [x11]8319; -O0:    cmp w9, w10, uxtb8320; -O0:    stlxrb w8, w12, [x11]8321; -O0:    and w8, w9, #0xff8322; -O0:    subs w8, w8, w10, uxtb8323;8324; -O1-LABEL: atomicrmw_umin_i8_aligned_release:8325; -O1:    and w9, w1, #0xff8326; -O1:    ldxrb w8, [x0]8327; -O1:    cmp w8, w98328; -O1:    csel w10, w8, w9, ls8329; -O1:    stlxrb w11, w10, [x0]8330    %r = atomicrmw umin ptr %ptr, i8 %value release, align 18331    ret i8 %r8332}8333 8334define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) {8335; -O0-LABEL: atomicrmw_umin_i8_aligned_acq_rel:8336; -O0:    and w9, w10, #0xff8337; -O0:    subs w9, w9, w8, uxtb8338; -O0:    csel w12, w10, w8, ls8339; -O0:    ldaxrb w9, [x11]8340; -O0:    cmp w9, w10, uxtb8341; -O0:    stlxrb w8, w12, [x11]8342; -O0:    and w8, w9, #0xff8343; -O0:    subs w8, w8, w10, uxtb8344;8345; -O1-LABEL: atomicrmw_umin_i8_aligned_acq_rel:8346; -O1:    and w9, w1, #0xff8347; -O1:    ldaxrb w8, [x0]8348; -O1:    cmp w8, w98349; -O1:    csel w10, w8, w9, ls8350; -O1:    stlxrb w11, w10, [x0]8351    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 18352    ret i8 %r8353}8354 8355define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) {8356; -O0-LABEL: atomicrmw_umin_i8_aligned_seq_cst:8357; -O0:    and w9, w10, #0xff8358; -O0:    subs w9, w9, w8, uxtb8359; -O0:    csel w12, w10, w8, ls8360; -O0:    ldaxrb w9, [x11]8361; -O0:    cmp w9, w10, uxtb8362; -O0:    stlxrb w8, w12, [x11]8363; -O0:    and w8, w9, #0xff8364; -O0:    subs w8, w8, w10, uxtb8365;8366; -O1-LABEL: atomicrmw_umin_i8_aligned_seq_cst:8367; -O1:    and w9, w1, #0xff8368; -O1:    ldaxrb w8, [x0]8369; -O1:    cmp w8, w98370; -O1:    csel w10, w8, w9, ls8371; -O1:    stlxrb w11, w10, [x0]8372    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 18373    ret i8 %r8374}8375 8376define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) {8377; -O0-LABEL: atomicrmw_umin_i16_aligned_monotonic:8378; -O0:    subs w10, w10, w9, uxth8379; -O0:    csel w12, w8, w9, ls8380; -O0:    ldaxrh w9, [x11]8381; -O0:    cmp w9, w8, uxth8382; -O0:    stlxrh w10, w12, [x11]8383; -O0:    subs w8, w8, w9, uxth8384;8385; -O1-LABEL: atomicrmw_umin_i16_aligned_monotonic:8386; -O1:    and w9, w1, #0xffff8387; -O1:    ldxrh w8, [x0]8388; -O1:    cmp w8, w98389; -O1:    csel w10, w8, w9, ls8390; -O1:    stxrh w11, w10, [x0]8391    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 28392    ret i16 %r8393}8394 8395define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) {8396; -O0-LABEL: atomicrmw_umin_i16_aligned_acquire:8397; -O0:    subs w10, w10, w9, uxth8398; -O0:    csel w12, w8, w9, ls8399; -O0:    ldaxrh w9, [x11]8400; -O0:    cmp w9, w8, uxth8401; -O0:    stlxrh w10, w12, [x11]8402; -O0:    subs w8, w8, w9, uxth8403;8404; -O1-LABEL: atomicrmw_umin_i16_aligned_acquire:8405; -O1:    and w9, w1, #0xffff8406; -O1:    ldaxrh w8, [x0]8407; -O1:    cmp w8, w98408; -O1:    csel w10, w8, w9, ls8409; -O1:    stxrh w11, w10, [x0]8410    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 28411    ret i16 %r8412}8413 8414define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) {8415; -O0-LABEL: atomicrmw_umin_i16_aligned_release:8416; -O0:    subs w10, w10, w9, uxth8417; -O0:    csel w12, w8, w9, ls8418; -O0:    ldaxrh w9, [x11]8419; -O0:    cmp w9, w8, uxth8420; -O0:    stlxrh w10, w12, [x11]8421; -O0:    subs w8, w8, w9, uxth8422;8423; -O1-LABEL: atomicrmw_umin_i16_aligned_release:8424; -O1:    and w9, w1, #0xffff8425; -O1:    ldxrh w8, [x0]8426; -O1:    cmp w8, w98427; -O1:    csel w10, w8, w9, ls8428; -O1:    stlxrh w11, w10, [x0]8429    %r = atomicrmw umin ptr %ptr, i16 %value release, align 28430    ret i16 %r8431}8432 8433define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) {8434; -O0-LABEL: atomicrmw_umin_i16_aligned_acq_rel:8435; -O0:    subs w10, w10, w9, uxth8436; -O0:    csel w12, w8, w9, ls8437; -O0:    ldaxrh w9, [x11]8438; -O0:    cmp w9, w8, uxth8439; -O0:    stlxrh w10, w12, [x11]8440; -O0:    subs w8, w8, w9, uxth8441;8442; -O1-LABEL: atomicrmw_umin_i16_aligned_acq_rel:8443; -O1:    and w9, w1, #0xffff8444; -O1:    ldaxrh w8, [x0]8445; -O1:    cmp w8, w98446; -O1:    csel w10, w8, w9, ls8447; -O1:    stlxrh w11, w10, [x0]8448    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 28449    ret i16 %r8450}8451 8452define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) {8453; -O0-LABEL: atomicrmw_umin_i16_aligned_seq_cst:8454; -O0:    subs w10, w10, w9, uxth8455; -O0:    csel w12, w8, w9, ls8456; -O0:    ldaxrh w9, [x11]8457; -O0:    cmp w9, w8, uxth8458; -O0:    stlxrh w10, w12, [x11]8459; -O0:    subs w8, w8, w9, uxth8460;8461; -O1-LABEL: atomicrmw_umin_i16_aligned_seq_cst:8462; -O1:    and w9, w1, #0xffff8463; -O1:    ldaxrh w8, [x0]8464; -O1:    cmp w8, w98465; -O1:    csel w10, w8, w9, ls8466; -O1:    stlxrh w11, w10, [x0]8467    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 28468    ret i16 %r8469}8470 8471define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) {8472; -O0-LABEL: atomicrmw_umin_i32_aligned_monotonic:8473; -O0:    subs w10, w8, w98474; -O0:    csel w12, w8, w9, ls8475; -O0:    ldaxr w9, [x11]8476; -O0:    cmp w9, w88477; -O0:    stlxr w10, w12, [x11]8478; -O0:    subs w8, w9, w88479;8480; -O1-LABEL: atomicrmw_umin_i32_aligned_monotonic:8481; -O1:    ldxr w8, [x0]8482; -O1:    cmp w8, w18483; -O1:    csel w9, w8, w1, ls8484; -O1:    stxr w10, w9, [x0]8485    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 48486    ret i32 %r8487}8488 8489define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) {8490; -O0-LABEL: atomicrmw_umin_i32_aligned_acquire:8491; -O0:    subs w10, w8, w98492; -O0:    csel w12, w8, w9, ls8493; -O0:    ldaxr w9, [x11]8494; -O0:    cmp w9, w88495; -O0:    stlxr w10, w12, [x11]8496; -O0:    subs w8, w9, w88497;8498; -O1-LABEL: atomicrmw_umin_i32_aligned_acquire:8499; -O1:    ldaxr w8, [x0]8500; -O1:    cmp w8, w18501; -O1:    csel w9, w8, w1, ls8502; -O1:    stxr w10, w9, [x0]8503    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 48504    ret i32 %r8505}8506 8507define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) {8508; -O0-LABEL: atomicrmw_umin_i32_aligned_release:8509; -O0:    subs w10, w8, w98510; -O0:    csel w12, w8, w9, ls8511; -O0:    ldaxr w9, [x11]8512; -O0:    cmp w9, w88513; -O0:    stlxr w10, w12, [x11]8514; -O0:    subs w8, w9, w88515;8516; -O1-LABEL: atomicrmw_umin_i32_aligned_release:8517; -O1:    ldxr w8, [x0]8518; -O1:    cmp w8, w18519; -O1:    csel w9, w8, w1, ls8520; -O1:    stlxr w10, w9, [x0]8521    %r = atomicrmw umin ptr %ptr, i32 %value release, align 48522    ret i32 %r8523}8524 8525define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) {8526; -O0-LABEL: atomicrmw_umin_i32_aligned_acq_rel:8527; -O0:    subs w10, w8, w98528; -O0:    csel w12, w8, w9, ls8529; -O0:    ldaxr w9, [x11]8530; -O0:    cmp w9, w88531; -O0:    stlxr w10, w12, [x11]8532; -O0:    subs w8, w9, w88533;8534; -O1-LABEL: atomicrmw_umin_i32_aligned_acq_rel:8535; -O1:    ldaxr w8, [x0]8536; -O1:    cmp w8, w18537; -O1:    csel w9, w8, w1, ls8538; -O1:    stlxr w10, w9, [x0]8539    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 48540    ret i32 %r8541}8542 8543define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) {8544; -O0-LABEL: atomicrmw_umin_i32_aligned_seq_cst:8545; -O0:    subs w10, w8, w98546; -O0:    csel w12, w8, w9, ls8547; -O0:    ldaxr w9, [x11]8548; -O0:    cmp w9, w88549; -O0:    stlxr w10, w12, [x11]8550; -O0:    subs w8, w9, w88551;8552; -O1-LABEL: atomicrmw_umin_i32_aligned_seq_cst:8553; -O1:    ldaxr w8, [x0]8554; -O1:    cmp w8, w18555; -O1:    csel w9, w8, w1, ls8556; -O1:    stlxr w10, w9, [x0]8557    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 48558    ret i32 %r8559}8560 8561define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) {8562; -O0-LABEL: atomicrmw_umin_i64_aligned_monotonic:8563; -O0:    subs x10, x8, x98564; -O0:    csel x12, x8, x9, ls8565; -O0:    ldaxr x9, [x11]8566; -O0:    cmp x9, x88567; -O0:    stlxr w10, x12, [x11]8568; -O0:    subs x8, x9, x88569;8570; -O1-LABEL: atomicrmw_umin_i64_aligned_monotonic:8571; -O1:    ldxr x0, [x8]8572; -O1:    cmp x0, x18573; -O1:    csel x9, x0, x1, ls8574; -O1:    stxr w10, x9, [x8]8575    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 88576    ret i64 %r8577}8578 8579define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) {8580; -O0-LABEL: atomicrmw_umin_i64_aligned_acquire:8581; -O0:    subs x10, x8, x98582; -O0:    csel x12, x8, x9, ls8583; -O0:    ldaxr x9, [x11]8584; -O0:    cmp x9, x88585; -O0:    stlxr w10, x12, [x11]8586; -O0:    subs x8, x9, x88587;8588; -O1-LABEL: atomicrmw_umin_i64_aligned_acquire:8589; -O1:    ldaxr x0, [x8]8590; -O1:    cmp x0, x18591; -O1:    csel x9, x0, x1, ls8592; -O1:    stxr w10, x9, [x8]8593    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 88594    ret i64 %r8595}8596 8597define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) {8598; -O0-LABEL: atomicrmw_umin_i64_aligned_release:8599; -O0:    subs x10, x8, x98600; -O0:    csel x12, x8, x9, ls8601; -O0:    ldaxr x9, [x11]8602; -O0:    cmp x9, x88603; -O0:    stlxr w10, x12, [x11]8604; -O0:    subs x8, x9, x88605;8606; -O1-LABEL: atomicrmw_umin_i64_aligned_release:8607; -O1:    ldxr x0, [x8]8608; -O1:    cmp x0, x18609; -O1:    csel x9, x0, x1, ls8610; -O1:    stlxr w10, x9, [x8]8611    %r = atomicrmw umin ptr %ptr, i64 %value release, align 88612    ret i64 %r8613}8614 8615define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) {8616; -O0-LABEL: atomicrmw_umin_i64_aligned_acq_rel:8617; -O0:    subs x10, x8, x98618; -O0:    csel x12, x8, x9, ls8619; -O0:    ldaxr x9, [x11]8620; -O0:    cmp x9, x88621; -O0:    stlxr w10, x12, [x11]8622; -O0:    subs x8, x9, x88623;8624; -O1-LABEL: atomicrmw_umin_i64_aligned_acq_rel:8625; -O1:    ldaxr x0, [x8]8626; -O1:    cmp x0, x18627; -O1:    csel x9, x0, x1, ls8628; -O1:    stlxr w10, x9, [x8]8629    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 88630    ret i64 %r8631}8632 8633define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) {8634; -O0-LABEL: atomicrmw_umin_i64_aligned_seq_cst:8635; -O0:    subs x10, x8, x98636; -O0:    csel x12, x8, x9, ls8637; -O0:    ldaxr x9, [x11]8638; -O0:    cmp x9, x88639; -O0:    stlxr w10, x12, [x11]8640; -O0:    subs x8, x9, x88641;8642; -O1-LABEL: atomicrmw_umin_i64_aligned_seq_cst:8643; -O1:    ldaxr x0, [x8]8644; -O1:    cmp x0, x18645; -O1:    csel x9, x0, x1, ls8646; -O1:    stlxr w10, x9, [x8]8647    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 88648    ret i64 %r8649}8650 8651define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) {8652; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic:8653; -O0:    subs x8, x8, x128654; -O0:    subs x10, x10, x98655; -O0:    subs x13, x13, x98656; -O0:    csel w10, w8, w10, eq8657; -O0:    ands w13, w10, #0x18658; -O0:    csel x14, x8, x12, ne8659; -O0:    ands w10, w10, #0x18660; -O0:    csel x15, x8, x9, ne8661; -O0:    ldxp x10, x9, [x11]8662; -O0:    cmp x10, x128663; -O0:    cmp x9, x138664; -O0:    stxp w8, x14, x15, [x11]8665; -O0:    stxp w8, x10, x9, [x11]8666; -O0:    eor x8, x10, x88667; -O0:    eor x11, x9, x118668; -O0:    orr x8, x8, x118669; -O0:    subs x8, x8, #08670;8671; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic:8672; -O1:    ldxp x0, x1, [x8]8673; -O1:    cmp x2, x08674; -O1:    csel x9, x1, x3, hs8675; -O1:    csel x10, x0, x2, hs8676; -O1:    stxp w11, x10, x9, [x8]8677    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 168678    ret i128 %r8679}8680 8681define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) {8682; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire:8683; -O0:    subs x8, x8, x128684; -O0:    subs x10, x10, x98685; -O0:    subs x13, x13, x98686; -O0:    csel w10, w8, w10, eq8687; -O0:    ands w13, w10, #0x18688; -O0:    csel x14, x8, x12, ne8689; -O0:    ands w10, w10, #0x18690; -O0:    csel x15, x8, x9, ne8691; -O0:    ldaxp x10, x9, [x11]8692; -O0:    cmp x10, x128693; -O0:    cmp x9, x138694; -O0:    stxp w8, x14, x15, [x11]8695; -O0:    stxp w8, x10, x9, [x11]8696; -O0:    eor x8, x10, x88697; -O0:    eor x11, x9, x118698; -O0:    orr x8, x8, x118699; -O0:    subs x8, x8, #08700;8701; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire:8702; -O1:    ldaxp x0, x1, [x8]8703; -O1:    cmp x2, x08704; -O1:    csel x9, x1, x3, hs8705; -O1:    csel x10, x0, x2, hs8706; -O1:    stxp w11, x10, x9, [x8]8707    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 168708    ret i128 %r8709}8710 8711define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) {8712; -O0-LABEL: atomicrmw_umin_i128_aligned_release:8713; -O0:    subs x8, x8, x128714; -O0:    subs x10, x10, x98715; -O0:    subs x13, x13, x98716; -O0:    csel w10, w8, w10, eq8717; -O0:    ands w13, w10, #0x18718; -O0:    csel x14, x8, x12, ne8719; -O0:    ands w10, w10, #0x18720; -O0:    csel x15, x8, x9, ne8721; -O0:    ldxp x10, x9, [x11]8722; -O0:    cmp x10, x128723; -O0:    cmp x9, x138724; -O0:    stlxp w8, x14, x15, [x11]8725; -O0:    stlxp w8, x10, x9, [x11]8726; -O0:    eor x8, x10, x88727; -O0:    eor x11, x9, x118728; -O0:    orr x8, x8, x118729; -O0:    subs x8, x8, #08730;8731; -O1-LABEL: atomicrmw_umin_i128_aligned_release:8732; -O1:    ldxp x0, x1, [x8]8733; -O1:    cmp x2, x08734; -O1:    csel x9, x1, x3, hs8735; -O1:    csel x10, x0, x2, hs8736; -O1:    stlxp w11, x10, x9, [x8]8737    %r = atomicrmw umin ptr %ptr, i128 %value release, align 168738    ret i128 %r8739}8740 8741define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) {8742; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel:8743; -O0:    subs x8, x8, x128744; -O0:    subs x10, x10, x98745; -O0:    subs x13, x13, x98746; -O0:    csel w10, w8, w10, eq8747; -O0:    ands w13, w10, #0x18748; -O0:    csel x14, x8, x12, ne8749; -O0:    ands w10, w10, #0x18750; -O0:    csel x15, x8, x9, ne8751; -O0:    ldaxp x10, x9, [x11]8752; -O0:    cmp x10, x128753; -O0:    cmp x9, x138754; -O0:    stlxp w8, x14, x15, [x11]8755; -O0:    stlxp w8, x10, x9, [x11]8756; -O0:    eor x8, x10, x88757; -O0:    eor x11, x9, x118758; -O0:    orr x8, x8, x118759; -O0:    subs x8, x8, #08760;8761; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel:8762; -O1:    ldaxp x0, x1, [x8]8763; -O1:    cmp x2, x08764; -O1:    csel x9, x1, x3, hs8765; -O1:    csel x10, x0, x2, hs8766; -O1:    stlxp w11, x10, x9, [x8]8767    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 168768    ret i128 %r8769}8770 8771define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) {8772; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst:8773; -O0:    subs x8, x8, x128774; -O0:    subs x10, x10, x98775; -O0:    subs x13, x13, x98776; -O0:    csel w10, w8, w10, eq8777; -O0:    ands w13, w10, #0x18778; -O0:    csel x14, x8, x12, ne8779; -O0:    ands w10, w10, #0x18780; -O0:    csel x15, x8, x9, ne8781; -O0:    ldaxp x10, x9, [x11]8782; -O0:    cmp x10, x128783; -O0:    cmp x9, x138784; -O0:    stlxp w8, x14, x15, [x11]8785; -O0:    stlxp w8, x10, x9, [x11]8786; -O0:    eor x8, x10, x88787; -O0:    eor x11, x9, x118788; -O0:    orr x8, x8, x118789; -O0:    subs x8, x8, #08790;8791; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst:8792; -O1:    ldaxp x0, x1, [x8]8793; -O1:    cmp x2, x08794; -O1:    csel x9, x1, x3, hs8795; -O1:    csel x10, x0, x2, hs8796; -O1:    stlxp w11, x10, x9, [x8]8797    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 168798    ret i128 %r8799}8800 8801define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) {8802; -O0-LABEL: atomicrmw_umin_i8_unaligned_monotonic:8803; -O0:    and w9, w10, #0xff8804; -O0:    subs w9, w9, w8, uxtb8805; -O0:    csel w12, w10, w8, ls8806; -O0:    ldaxrb w9, [x11]8807; -O0:    cmp w9, w10, uxtb8808; -O0:    stlxrb w8, w12, [x11]8809; -O0:    and w8, w9, #0xff8810; -O0:    subs w8, w8, w10, uxtb8811;8812; -O1-LABEL: atomicrmw_umin_i8_unaligned_monotonic:8813; -O1:    and w9, w1, #0xff8814; -O1:    ldxrb w8, [x0]8815; -O1:    cmp w8, w98816; -O1:    csel w10, w8, w9, ls8817; -O1:    stxrb w11, w10, [x0]8818    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 18819    ret i8 %r8820}8821 8822define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) {8823; -O0-LABEL: atomicrmw_umin_i8_unaligned_acquire:8824; -O0:    and w9, w10, #0xff8825; -O0:    subs w9, w9, w8, uxtb8826; -O0:    csel w12, w10, w8, ls8827; -O0:    ldaxrb w9, [x11]8828; -O0:    cmp w9, w10, uxtb8829; -O0:    stlxrb w8, w12, [x11]8830; -O0:    and w8, w9, #0xff8831; -O0:    subs w8, w8, w10, uxtb8832;8833; -O1-LABEL: atomicrmw_umin_i8_unaligned_acquire:8834; -O1:    and w9, w1, #0xff8835; -O1:    ldaxrb w8, [x0]8836; -O1:    cmp w8, w98837; -O1:    csel w10, w8, w9, ls8838; -O1:    stxrb w11, w10, [x0]8839    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 18840    ret i8 %r8841}8842 8843define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) {8844; -O0-LABEL: atomicrmw_umin_i8_unaligned_release:8845; -O0:    and w9, w10, #0xff8846; -O0:    subs w9, w9, w8, uxtb8847; -O0:    csel w12, w10, w8, ls8848; -O0:    ldaxrb w9, [x11]8849; -O0:    cmp w9, w10, uxtb8850; -O0:    stlxrb w8, w12, [x11]8851; -O0:    and w8, w9, #0xff8852; -O0:    subs w8, w8, w10, uxtb8853;8854; -O1-LABEL: atomicrmw_umin_i8_unaligned_release:8855; -O1:    and w9, w1, #0xff8856; -O1:    ldxrb w8, [x0]8857; -O1:    cmp w8, w98858; -O1:    csel w10, w8, w9, ls8859; -O1:    stlxrb w11, w10, [x0]8860    %r = atomicrmw umin ptr %ptr, i8 %value release, align 18861    ret i8 %r8862}8863 8864define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {8865; -O0-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:8866; -O0:    and w9, w10, #0xff8867; -O0:    subs w9, w9, w8, uxtb8868; -O0:    csel w12, w10, w8, ls8869; -O0:    ldaxrb w9, [x11]8870; -O0:    cmp w9, w10, uxtb8871; -O0:    stlxrb w8, w12, [x11]8872; -O0:    and w8, w9, #0xff8873; -O0:    subs w8, w8, w10, uxtb8874;8875; -O1-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:8876; -O1:    and w9, w1, #0xff8877; -O1:    ldaxrb w8, [x0]8878; -O1:    cmp w8, w98879; -O1:    csel w10, w8, w9, ls8880; -O1:    stlxrb w11, w10, [x0]8881    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 18882    ret i8 %r8883}8884 8885define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {8886; -O0-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:8887; -O0:    and w9, w10, #0xff8888; -O0:    subs w9, w9, w8, uxtb8889; -O0:    csel w12, w10, w8, ls8890; -O0:    ldaxrb w9, [x11]8891; -O0:    cmp w9, w10, uxtb8892; -O0:    stlxrb w8, w12, [x11]8893; -O0:    and w8, w9, #0xff8894; -O0:    subs w8, w8, w10, uxtb8895;8896; -O1-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:8897; -O1:    and w9, w1, #0xff8898; -O1:    ldaxrb w8, [x0]8899; -O1:    cmp w8, w98900; -O1:    csel w10, w8, w9, ls8901; -O1:    stlxrb w11, w10, [x0]8902    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 18903    ret i8 %r8904}8905 8906define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) {8907; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic:8908; -O0:    subs w10, w10, w8, uxth8909; -O0:    csel w8, w9, w8, ls8910; -O0:    bl __atomic_compare_exchange8911;8912; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic:8913; -O1:    and w8, w0, #0xffff8914; -O1:    cmp w8, w20, uxth8915; -O1:    csel w8, w0, w20, ls8916; -O1:    bl __atomic_compare_exchange8917    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 18918    ret i16 %r8919}8920 8921define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) {8922; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire:8923; -O0:    subs w10, w10, w8, uxth8924; -O0:    csel w8, w9, w8, ls8925; -O0:    bl __atomic_compare_exchange8926;8927; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire:8928; -O1:    and w8, w0, #0xffff8929; -O1:    cmp w8, w20, uxth8930; -O1:    csel w8, w0, w20, ls8931; -O1:    bl __atomic_compare_exchange8932    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 18933    ret i16 %r8934}8935 8936define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) {8937; -O0-LABEL: atomicrmw_umin_i16_unaligned_release:8938; -O0:    subs w10, w10, w8, uxth8939; -O0:    csel w8, w9, w8, ls8940; -O0:    bl __atomic_compare_exchange8941;8942; -O1-LABEL: atomicrmw_umin_i16_unaligned_release:8943; -O1:    and w8, w0, #0xffff8944; -O1:    cmp w8, w20, uxth8945; -O1:    csel w8, w0, w20, ls8946; -O1:    bl __atomic_compare_exchange8947    %r = atomicrmw umin ptr %ptr, i16 %value release, align 18948    ret i16 %r8949}8950 8951define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {8952; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:8953; -O0:    subs w10, w10, w8, uxth8954; -O0:    csel w8, w9, w8, ls8955; -O0:    bl __atomic_compare_exchange8956;8957; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:8958; -O1:    and w8, w0, #0xffff8959; -O1:    cmp w8, w20, uxth8960; -O1:    csel w8, w0, w20, ls8961; -O1:    bl __atomic_compare_exchange8962    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 18963    ret i16 %r8964}8965 8966define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {8967; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:8968; -O0:    subs w10, w10, w8, uxth8969; -O0:    csel w8, w9, w8, ls8970; -O0:    bl __atomic_compare_exchange8971;8972; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:8973; -O1:    and w8, w0, #0xffff8974; -O1:    cmp w8, w20, uxth8975; -O1:    csel w8, w0, w20, ls8976; -O1:    bl __atomic_compare_exchange8977    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 18978    ret i16 %r8979}8980 8981define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) {8982; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic:8983; -O0:    subs w10, w9, w88984; -O0:    csel w8, w9, w8, ls8985; -O0:    bl __atomic_compare_exchange8986;8987; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic:8988; -O1:    cmp w0, w208989; -O1:    csel w8, w0, w20, ls8990; -O1:    bl __atomic_compare_exchange8991    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 18992    ret i32 %r8993}8994 8995define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) {8996; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire:8997; -O0:    subs w10, w9, w88998; -O0:    csel w8, w9, w8, ls8999; -O0:    bl __atomic_compare_exchange9000;9001; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire:9002; -O1:    cmp w0, w209003; -O1:    csel w8, w0, w20, ls9004; -O1:    bl __atomic_compare_exchange9005    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 19006    ret i32 %r9007}9008 9009define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) {9010; -O0-LABEL: atomicrmw_umin_i32_unaligned_release:9011; -O0:    subs w10, w9, w89012; -O0:    csel w8, w9, w8, ls9013; -O0:    bl __atomic_compare_exchange9014;9015; -O1-LABEL: atomicrmw_umin_i32_unaligned_release:9016; -O1:    cmp w0, w209017; -O1:    csel w8, w0, w20, ls9018; -O1:    bl __atomic_compare_exchange9019    %r = atomicrmw umin ptr %ptr, i32 %value release, align 19020    ret i32 %r9021}9022 9023define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {9024; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:9025; -O0:    subs w10, w9, w89026; -O0:    csel w8, w9, w8, ls9027; -O0:    bl __atomic_compare_exchange9028;9029; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:9030; -O1:    cmp w0, w209031; -O1:    csel w8, w0, w20, ls9032; -O1:    bl __atomic_compare_exchange9033    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 19034    ret i32 %r9035}9036 9037define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {9038; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:9039; -O0:    subs w10, w9, w89040; -O0:    csel w8, w9, w8, ls9041; -O0:    bl __atomic_compare_exchange9042;9043; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:9044; -O1:    cmp w0, w209045; -O1:    csel w8, w0, w20, ls9046; -O1:    bl __atomic_compare_exchange9047    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 19048    ret i32 %r9049}9050 9051define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) {9052; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic:9053; -O0:    subs x10, x9, x89054; -O0:    csel x8, x9, x8, ls9055; -O0:    bl __atomic_compare_exchange9056;9057; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic:9058; -O1:    cmp x0, x209059; -O1:    csel x8, x0, x20, ls9060; -O1:    bl __atomic_compare_exchange9061    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 19062    ret i64 %r9063}9064 9065define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) {9066; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire:9067; -O0:    subs x10, x9, x89068; -O0:    csel x8, x9, x8, ls9069; -O0:    bl __atomic_compare_exchange9070;9071; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire:9072; -O1:    cmp x0, x209073; -O1:    csel x8, x0, x20, ls9074; -O1:    bl __atomic_compare_exchange9075    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 19076    ret i64 %r9077}9078 9079define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) {9080; -O0-LABEL: atomicrmw_umin_i64_unaligned_release:9081; -O0:    subs x10, x9, x89082; -O0:    csel x8, x9, x8, ls9083; -O0:    bl __atomic_compare_exchange9084;9085; -O1-LABEL: atomicrmw_umin_i64_unaligned_release:9086; -O1:    cmp x0, x209087; -O1:    csel x8, x0, x20, ls9088; -O1:    bl __atomic_compare_exchange9089    %r = atomicrmw umin ptr %ptr, i64 %value release, align 19090    ret i64 %r9091}9092 9093define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {9094; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:9095; -O0:    subs x10, x9, x89096; -O0:    csel x8, x9, x8, ls9097; -O0:    bl __atomic_compare_exchange9098;9099; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:9100; -O1:    cmp x0, x209101; -O1:    csel x8, x0, x20, ls9102; -O1:    bl __atomic_compare_exchange9103    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 19104    ret i64 %r9105}9106 9107define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {9108; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:9109; -O0:    subs x10, x9, x89110; -O0:    csel x8, x9, x8, ls9111; -O0:    bl __atomic_compare_exchange9112;9113; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:9114; -O1:    cmp x0, x209115; -O1:    csel x8, x0, x20, ls9116; -O1:    bl __atomic_compare_exchange9117    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 19118    ret i64 %r9119}9120 9121define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) {9122; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic:9123; -O0:    subs x8, x8, x99124; -O0:    subs x11, x11, x109125; -O0:    subs x12, x12, x109126; -O0:    csel w11, w8, w11, eq9127; -O0:    ands w12, w11, #0x19128; -O0:    csel x9, x8, x9, ne9129; -O0:    ands w11, w11, #0x19130; -O0:    csel x8, x8, x10, ne9131; -O0:    bl __atomic_compare_exchange9132;9133; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic:9134; -O1:    ldp x0, x1, [x0]9135; -O1:    cmp x21, x09136; -O1:    csel x8, x1, x19, hs9137; -O1:    csel x9, x0, x21, hs9138; -O1:    bl __atomic_compare_exchange9139    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 19140    ret i128 %r9141}9142 9143define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) {9144; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire:9145; -O0:    subs x8, x8, x99146; -O0:    subs x11, x11, x109147; -O0:    subs x12, x12, x109148; -O0:    csel w11, w8, w11, eq9149; -O0:    ands w12, w11, #0x19150; -O0:    csel x9, x8, x9, ne9151; -O0:    ands w11, w11, #0x19152; -O0:    csel x8, x8, x10, ne9153; -O0:    bl __atomic_compare_exchange9154;9155; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire:9156; -O1:    ldp x0, x1, [x0]9157; -O1:    cmp x21, x09158; -O1:    csel x8, x1, x19, hs9159; -O1:    csel x9, x0, x21, hs9160; -O1:    bl __atomic_compare_exchange9161    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 19162    ret i128 %r9163}9164 9165define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) {9166; -O0-LABEL: atomicrmw_umin_i128_unaligned_release:9167; -O0:    subs x8, x8, x99168; -O0:    subs x11, x11, x109169; -O0:    subs x12, x12, x109170; -O0:    csel w11, w8, w11, eq9171; -O0:    ands w12, w11, #0x19172; -O0:    csel x9, x8, x9, ne9173; -O0:    ands w11, w11, #0x19174; -O0:    csel x8, x8, x10, ne9175; -O0:    bl __atomic_compare_exchange9176;9177; -O1-LABEL: atomicrmw_umin_i128_unaligned_release:9178; -O1:    ldp x0, x1, [x0]9179; -O1:    cmp x21, x09180; -O1:    csel x8, x1, x19, hs9181; -O1:    csel x9, x0, x21, hs9182; -O1:    bl __atomic_compare_exchange9183    %r = atomicrmw umin ptr %ptr, i128 %value release, align 19184    ret i128 %r9185}9186 9187define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {9188; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:9189; -O0:    subs x8, x8, x99190; -O0:    subs x11, x11, x109191; -O0:    subs x12, x12, x109192; -O0:    csel w11, w8, w11, eq9193; -O0:    ands w12, w11, #0x19194; -O0:    csel x9, x8, x9, ne9195; -O0:    ands w11, w11, #0x19196; -O0:    csel x8, x8, x10, ne9197; -O0:    bl __atomic_compare_exchange9198;9199; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:9200; -O1:    ldp x0, x1, [x0]9201; -O1:    cmp x21, x09202; -O1:    csel x8, x1, x19, hs9203; -O1:    csel x9, x0, x21, hs9204; -O1:    bl __atomic_compare_exchange9205    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 19206    ret i128 %r9207}9208 9209define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {9210; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:9211; -O0:    subs x8, x8, x99212; -O0:    subs x11, x11, x109213; -O0:    subs x12, x12, x109214; -O0:    csel w11, w8, w11, eq9215; -O0:    ands w12, w11, #0x19216; -O0:    csel x9, x8, x9, ne9217; -O0:    ands w11, w11, #0x19218; -O0:    csel x8, x8, x10, ne9219; -O0:    bl __atomic_compare_exchange9220;9221; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:9222; -O1:    ldp x0, x1, [x0]9223; -O1:    cmp x21, x09224; -O1:    csel x8, x1, x19, hs9225; -O1:    csel x9, x0, x21, hs9226; -O1:    bl __atomic_compare_exchange9227    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 19228    ret i128 %r9229}9230