brintos

brintos / llvm-project-archived public Read only

0
0
Text · 266.0 KiB · ea6ebe0 Raw
8820 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st[^r]|swp|cas|bl|add|and|eor|orn|orr|sub|mvn|sxt|cmp|ccmp|csel|dmb)"2; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+lse2 -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+lse2 -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 w8, [x11]9; -O0:    cmp w8, w9, uxtb10; -O0:    stlxrb w10, w12, [x11]11; -O0:    subs w9, w8, w9, uxtb12;13; -O1-LABEL: atomicrmw_xchg_i8_aligned_monotonic:14; -O1:    ldxrb w0, [x8]15; -O1:    stxrb w9, w1, [x8]16    %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 117    ret i8 %r18}19 20define dso_local i8 @atomicrmw_xchg_i8_aligned_acquire(ptr %ptr, i8 %value) {21; -O0-LABEL: atomicrmw_xchg_i8_aligned_acquire:22; -O0:    ldaxrb w8, [x11]23; -O0:    cmp w8, w9, uxtb24; -O0:    stlxrb w10, w12, [x11]25; -O0:    subs w9, w8, w9, uxtb26;27; -O1-LABEL: atomicrmw_xchg_i8_aligned_acquire:28; -O1:    ldaxrb w0, [x8]29; -O1:    stxrb w9, w1, [x8]30    %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 131    ret i8 %r32}33 34define dso_local i8 @atomicrmw_xchg_i8_aligned_release(ptr %ptr, i8 %value) {35; -O0-LABEL: atomicrmw_xchg_i8_aligned_release:36; -O0:    ldaxrb w8, [x11]37; -O0:    cmp w8, w9, uxtb38; -O0:    stlxrb w10, w12, [x11]39; -O0:    subs w9, w8, w9, uxtb40;41; -O1-LABEL: atomicrmw_xchg_i8_aligned_release:42; -O1:    ldxrb w0, [x8]43; -O1:    stlxrb w9, w1, [x8]44    %r = atomicrmw xchg ptr %ptr, i8 %value release, align 145    ret i8 %r46}47 48define dso_local i8 @atomicrmw_xchg_i8_aligned_acq_rel(ptr %ptr, i8 %value) {49; -O0-LABEL: atomicrmw_xchg_i8_aligned_acq_rel:50; -O0:    ldaxrb w8, [x11]51; -O0:    cmp w8, w9, uxtb52; -O0:    stlxrb w10, w12, [x11]53; -O0:    subs w9, w8, w9, uxtb54;55; -O1-LABEL: atomicrmw_xchg_i8_aligned_acq_rel:56; -O1:    ldaxrb w0, [x8]57; -O1:    stlxrb w9, w1, [x8]58    %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 159    ret i8 %r60}61 62define dso_local i8 @atomicrmw_xchg_i8_aligned_seq_cst(ptr %ptr, i8 %value) {63; -O0-LABEL: atomicrmw_xchg_i8_aligned_seq_cst:64; -O0:    ldaxrb w8, [x11]65; -O0:    cmp w8, w9, uxtb66; -O0:    stlxrb w10, w12, [x11]67; -O0:    subs w9, w8, w9, uxtb68;69; -O1-LABEL: atomicrmw_xchg_i8_aligned_seq_cst:70; -O1:    ldaxrb w0, [x8]71; -O1:    stlxrb w9, w1, [x8]72    %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 173    ret i8 %r74}75 76define dso_local i16 @atomicrmw_xchg_i16_aligned_monotonic(ptr %ptr, i16 %value) {77; -O0-LABEL: atomicrmw_xchg_i16_aligned_monotonic:78; -O0:    ldaxrh w8, [x11]79; -O0:    cmp w8, w9, uxth80; -O0:    stlxrh w10, w12, [x11]81; -O0:    subs w9, w8, w9, uxth82;83; -O1-LABEL: atomicrmw_xchg_i16_aligned_monotonic:84; -O1:    ldxrh w0, [x8]85; -O1:    stxrh w9, w1, [x8]86    %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 287    ret i16 %r88}89 90define dso_local i16 @atomicrmw_xchg_i16_aligned_acquire(ptr %ptr, i16 %value) {91; -O0-LABEL: atomicrmw_xchg_i16_aligned_acquire:92; -O0:    ldaxrh w8, [x11]93; -O0:    cmp w8, w9, uxth94; -O0:    stlxrh w10, w12, [x11]95; -O0:    subs w9, w8, w9, uxth96;97; -O1-LABEL: atomicrmw_xchg_i16_aligned_acquire:98; -O1:    ldaxrh w0, [x8]99; -O1:    stxrh w9, w1, [x8]100    %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 2101    ret i16 %r102}103 104define dso_local i16 @atomicrmw_xchg_i16_aligned_release(ptr %ptr, i16 %value) {105; -O0-LABEL: atomicrmw_xchg_i16_aligned_release:106; -O0:    ldaxrh w8, [x11]107; -O0:    cmp w8, w9, uxth108; -O0:    stlxrh w10, w12, [x11]109; -O0:    subs w9, w8, w9, uxth110;111; -O1-LABEL: atomicrmw_xchg_i16_aligned_release:112; -O1:    ldxrh w0, [x8]113; -O1:    stlxrh w9, w1, [x8]114    %r = atomicrmw xchg ptr %ptr, i16 %value release, align 2115    ret i16 %r116}117 118define dso_local i16 @atomicrmw_xchg_i16_aligned_acq_rel(ptr %ptr, i16 %value) {119; -O0-LABEL: atomicrmw_xchg_i16_aligned_acq_rel:120; -O0:    ldaxrh w8, [x11]121; -O0:    cmp w8, w9, uxth122; -O0:    stlxrh w10, w12, [x11]123; -O0:    subs w9, w8, w9, uxth124;125; -O1-LABEL: atomicrmw_xchg_i16_aligned_acq_rel:126; -O1:    ldaxrh w0, [x8]127; -O1:    stlxrh w9, w1, [x8]128    %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 2129    ret i16 %r130}131 132define dso_local i16 @atomicrmw_xchg_i16_aligned_seq_cst(ptr %ptr, i16 %value) {133; -O0-LABEL: atomicrmw_xchg_i16_aligned_seq_cst:134; -O0:    ldaxrh w8, [x11]135; -O0:    cmp w8, w9, uxth136; -O0:    stlxrh w10, w12, [x11]137; -O0:    subs w9, w8, w9, uxth138;139; -O1-LABEL: atomicrmw_xchg_i16_aligned_seq_cst:140; -O1:    ldaxrh w0, [x8]141; -O1:    stlxrh w9, w1, [x8]142    %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 2143    ret i16 %r144}145 146define dso_local i32 @atomicrmw_xchg_i32_aligned_monotonic(ptr %ptr, i32 %value) {147; -O0-LABEL: atomicrmw_xchg_i32_aligned_monotonic:148; -O0:    ldaxr w8, [x11]149; -O0:    cmp w8, w9150; -O0:    stlxr w10, w12, [x11]151; -O0:    subs w9, w8, w9152;153; -O1-LABEL: atomicrmw_xchg_i32_aligned_monotonic:154; -O1:    ldxr w0, [x8]155; -O1:    stxr w9, w1, [x8]156    %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 4157    ret i32 %r158}159 160define dso_local i32 @atomicrmw_xchg_i32_aligned_acquire(ptr %ptr, i32 %value) {161; -O0-LABEL: atomicrmw_xchg_i32_aligned_acquire:162; -O0:    ldaxr w8, [x11]163; -O0:    cmp w8, w9164; -O0:    stlxr w10, w12, [x11]165; -O0:    subs w9, w8, w9166;167; -O1-LABEL: atomicrmw_xchg_i32_aligned_acquire:168; -O1:    ldaxr w0, [x8]169; -O1:    stxr w9, w1, [x8]170    %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 4171    ret i32 %r172}173 174define dso_local i32 @atomicrmw_xchg_i32_aligned_release(ptr %ptr, i32 %value) {175; -O0-LABEL: atomicrmw_xchg_i32_aligned_release:176; -O0:    ldaxr w8, [x11]177; -O0:    cmp w8, w9178; -O0:    stlxr w10, w12, [x11]179; -O0:    subs w9, w8, w9180;181; -O1-LABEL: atomicrmw_xchg_i32_aligned_release:182; -O1:    ldxr w0, [x8]183; -O1:    stlxr w9, w1, [x8]184    %r = atomicrmw xchg ptr %ptr, i32 %value release, align 4185    ret i32 %r186}187 188define dso_local i32 @atomicrmw_xchg_i32_aligned_acq_rel(ptr %ptr, i32 %value) {189; -O0-LABEL: atomicrmw_xchg_i32_aligned_acq_rel:190; -O0:    ldaxr w8, [x11]191; -O0:    cmp w8, w9192; -O0:    stlxr w10, w12, [x11]193; -O0:    subs w9, w8, w9194;195; -O1-LABEL: atomicrmw_xchg_i32_aligned_acq_rel:196; -O1:    ldaxr w0, [x8]197; -O1:    stlxr w9, w1, [x8]198    %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 4199    ret i32 %r200}201 202define dso_local i32 @atomicrmw_xchg_i32_aligned_seq_cst(ptr %ptr, i32 %value) {203; -O0-LABEL: atomicrmw_xchg_i32_aligned_seq_cst:204; -O0:    ldaxr w8, [x11]205; -O0:    cmp w8, w9206; -O0:    stlxr w10, w12, [x11]207; -O0:    subs w9, w8, w9208;209; -O1-LABEL: atomicrmw_xchg_i32_aligned_seq_cst:210; -O1:    ldaxr w0, [x8]211; -O1:    stlxr w9, w1, [x8]212    %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 4213    ret i32 %r214}215 216define dso_local i64 @atomicrmw_xchg_i64_aligned_monotonic(ptr %ptr, i64 %value) {217; -O0-LABEL: atomicrmw_xchg_i64_aligned_monotonic:218; -O0:    ldaxr x8, [x11]219; -O0:    cmp x8, x9220; -O0:    stlxr w10, x12, [x11]221; -O0:    subs x9, x8, x9222;223; -O1-LABEL: atomicrmw_xchg_i64_aligned_monotonic:224; -O1:    ldxr x0, [x8]225; -O1:    stxr w9, x1, [x8]226    %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 8227    ret i64 %r228}229 230define dso_local i64 @atomicrmw_xchg_i64_aligned_acquire(ptr %ptr, i64 %value) {231; -O0-LABEL: atomicrmw_xchg_i64_aligned_acquire:232; -O0:    ldaxr x8, [x11]233; -O0:    cmp x8, x9234; -O0:    stlxr w10, x12, [x11]235; -O0:    subs x9, x8, x9236;237; -O1-LABEL: atomicrmw_xchg_i64_aligned_acquire:238; -O1:    ldaxr x0, [x8]239; -O1:    stxr w9, x1, [x8]240    %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 8241    ret i64 %r242}243 244define dso_local i64 @atomicrmw_xchg_i64_aligned_release(ptr %ptr, i64 %value) {245; -O0-LABEL: atomicrmw_xchg_i64_aligned_release:246; -O0:    ldaxr x8, [x11]247; -O0:    cmp x8, x9248; -O0:    stlxr w10, x12, [x11]249; -O0:    subs x9, x8, x9250;251; -O1-LABEL: atomicrmw_xchg_i64_aligned_release:252; -O1:    ldxr x0, [x8]253; -O1:    stlxr w9, x1, [x8]254    %r = atomicrmw xchg ptr %ptr, i64 %value release, align 8255    ret i64 %r256}257 258define dso_local i64 @atomicrmw_xchg_i64_aligned_acq_rel(ptr %ptr, i64 %value) {259; -O0-LABEL: atomicrmw_xchg_i64_aligned_acq_rel:260; -O0:    ldaxr x8, [x11]261; -O0:    cmp x8, x9262; -O0:    stlxr w10, x12, [x11]263; -O0:    subs x9, x8, x9264;265; -O1-LABEL: atomicrmw_xchg_i64_aligned_acq_rel:266; -O1:    ldaxr x0, [x8]267; -O1:    stlxr w9, x1, [x8]268    %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 8269    ret i64 %r270}271 272define dso_local i64 @atomicrmw_xchg_i64_aligned_seq_cst(ptr %ptr, i64 %value) {273; -O0-LABEL: atomicrmw_xchg_i64_aligned_seq_cst:274; -O0:    ldaxr x8, [x11]275; -O0:    cmp x8, x9276; -O0:    stlxr w10, x12, [x11]277; -O0:    subs x9, x8, x9278;279; -O1-LABEL: atomicrmw_xchg_i64_aligned_seq_cst:280; -O1:    ldaxr x0, [x8]281; -O1:    stlxr w9, x1, [x8]282    %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 8283    ret i64 %r284}285 286define dso_local i128 @atomicrmw_xchg_i128_aligned_monotonic(ptr %ptr, i128 %value) {287; -O0-LABEL: atomicrmw_xchg_i128_aligned_monotonic:288; -O0:    ldxp x10, x12, [x9]289; -O0:    cmp x10, x11290; -O0:    cmp x12, x13291; -O0:    stxp w8, x14, x15, [x9]292; -O0:    stxp w8, x10, x12, [x9]293; -O0:    subs x12, x12, x13294; -O0:    ccmp x10, x11, #0, eq295;296; -O1-LABEL: atomicrmw_xchg_i128_aligned_monotonic:297; -O1:    ldxp x1, x8, [x0]298; -O1:    stxp w9, x3, x2, [x0]299    %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 16300    ret i128 %r301}302 303define dso_local i128 @atomicrmw_xchg_i128_aligned_acquire(ptr %ptr, i128 %value) {304; -O0-LABEL: atomicrmw_xchg_i128_aligned_acquire:305; -O0:    ldaxp x10, x12, [x9]306; -O0:    cmp x10, x11307; -O0:    cmp x12, x13308; -O0:    stxp w8, x14, x15, [x9]309; -O0:    stxp w8, x10, x12, [x9]310; -O0:    subs x12, x12, x13311; -O0:    ccmp x10, x11, #0, eq312;313; -O1-LABEL: atomicrmw_xchg_i128_aligned_acquire:314; -O1:    ldaxp x1, x8, [x0]315; -O1:    stxp w9, x3, x2, [x0]316    %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 16317    ret i128 %r318}319 320define dso_local i128 @atomicrmw_xchg_i128_aligned_release(ptr %ptr, i128 %value) {321; -O0-LABEL: atomicrmw_xchg_i128_aligned_release:322; -O0:    ldxp x10, x12, [x9]323; -O0:    cmp x10, x11324; -O0:    cmp x12, x13325; -O0:    stlxp w8, x14, x15, [x9]326; -O0:    stlxp w8, x10, x12, [x9]327; -O0:    subs x12, x12, x13328; -O0:    ccmp x10, x11, #0, eq329;330; -O1-LABEL: atomicrmw_xchg_i128_aligned_release:331; -O1:    ldxp x1, x8, [x0]332; -O1:    stlxp w9, x3, x2, [x0]333    %r = atomicrmw xchg ptr %ptr, i128 %value release, align 16334    ret i128 %r335}336 337define dso_local i128 @atomicrmw_xchg_i128_aligned_acq_rel(ptr %ptr, i128 %value) {338; -O0-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:339; -O0:    ldaxp x10, x12, [x9]340; -O0:    cmp x10, x11341; -O0:    cmp x12, x13342; -O0:    stlxp w8, x14, x15, [x9]343; -O0:    stlxp w8, x10, x12, [x9]344; -O0:    subs x12, x12, x13345; -O0:    ccmp x10, x11, #0, eq346;347; -O1-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:348; -O1:    ldaxp x1, x8, [x0]349; -O1:    stlxp w9, x3, x2, [x0]350    %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 16351    ret i128 %r352}353 354define dso_local i128 @atomicrmw_xchg_i128_aligned_seq_cst(ptr %ptr, i128 %value) {355; -O0-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:356; -O0:    ldaxp x10, x12, [x9]357; -O0:    cmp x10, x11358; -O0:    cmp x12, x13359; -O0:    stlxp w8, x14, x15, [x9]360; -O0:    stlxp w8, x10, x12, [x9]361; -O0:    subs x12, x12, x13362; -O0:    ccmp x10, x11, #0, eq363;364; -O1-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:365; -O1:    ldaxp x1, x8, [x0]366; -O1:    stlxp w9, x3, x2, [x0]367    %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 16368    ret i128 %r369}370 371define dso_local i8 @atomicrmw_xchg_i8_unaligned_monotonic(ptr %ptr, i8 %value) {372; -O0-LABEL: atomicrmw_xchg_i8_unaligned_monotonic:373; -O0:    ldaxrb w8, [x11]374; -O0:    cmp w8, w9, uxtb375; -O0:    stlxrb w10, w12, [x11]376; -O0:    subs w9, w8, w9, uxtb377;378; -O1-LABEL: atomicrmw_xchg_i8_unaligned_monotonic:379; -O1:    ldxrb w0, [x8]380; -O1:    stxrb w9, w1, [x8]381    %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 1382    ret i8 %r383}384 385define dso_local i8 @atomicrmw_xchg_i8_unaligned_acquire(ptr %ptr, i8 %value) {386; -O0-LABEL: atomicrmw_xchg_i8_unaligned_acquire:387; -O0:    ldaxrb w8, [x11]388; -O0:    cmp w8, w9, uxtb389; -O0:    stlxrb w10, w12, [x11]390; -O0:    subs w9, w8, w9, uxtb391;392; -O1-LABEL: atomicrmw_xchg_i8_unaligned_acquire:393; -O1:    ldaxrb w0, [x8]394; -O1:    stxrb w9, w1, [x8]395    %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 1396    ret i8 %r397}398 399define dso_local i8 @atomicrmw_xchg_i8_unaligned_release(ptr %ptr, i8 %value) {400; -O0-LABEL: atomicrmw_xchg_i8_unaligned_release:401; -O0:    ldaxrb w8, [x11]402; -O0:    cmp w8, w9, uxtb403; -O0:    stlxrb w10, w12, [x11]404; -O0:    subs w9, w8, w9, uxtb405;406; -O1-LABEL: atomicrmw_xchg_i8_unaligned_release:407; -O1:    ldxrb w0, [x8]408; -O1:    stlxrb w9, w1, [x8]409    %r = atomicrmw xchg ptr %ptr, i8 %value release, align 1410    ret i8 %r411}412 413define dso_local i8 @atomicrmw_xchg_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {414; -O0-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel:415; -O0:    ldaxrb w8, [x11]416; -O0:    cmp w8, w9, uxtb417; -O0:    stlxrb w10, w12, [x11]418; -O0:    subs w9, w8, w9, uxtb419;420; -O1-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel:421; -O1:    ldaxrb w0, [x8]422; -O1:    stlxrb w9, w1, [x8]423    %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 1424    ret i8 %r425}426 427define dso_local i8 @atomicrmw_xchg_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {428; -O0-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst:429; -O0:    ldaxrb w8, [x11]430; -O0:    cmp w8, w9, uxtb431; -O0:    stlxrb w10, w12, [x11]432; -O0:    subs w9, w8, w9, uxtb433;434; -O1-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst:435; -O1:    ldaxrb w0, [x8]436; -O1:    stlxrb w9, w1, [x8]437    %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 1438    ret i8 %r439}440 441define dso_local i16 @atomicrmw_xchg_i16_unaligned_monotonic(ptr %ptr, i16 %value) {442; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_monotonic:443; CHECK:    bl __atomic_exchange444    %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 1445    ret i16 %r446}447 448define dso_local i16 @atomicrmw_xchg_i16_unaligned_acquire(ptr %ptr, i16 %value) {449; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acquire:450; CHECK:    bl __atomic_exchange451    %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 1452    ret i16 %r453}454 455define dso_local i16 @atomicrmw_xchg_i16_unaligned_release(ptr %ptr, i16 %value) {456; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_release:457; CHECK:    bl __atomic_exchange458    %r = atomicrmw xchg ptr %ptr, i16 %value release, align 1459    ret i16 %r460}461 462define dso_local i16 @atomicrmw_xchg_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {463; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acq_rel:464; CHECK:    bl __atomic_exchange465    %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 1466    ret i16 %r467}468 469define dso_local i16 @atomicrmw_xchg_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {470; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_seq_cst:471; CHECK:    bl __atomic_exchange472    %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 1473    ret i16 %r474}475 476define dso_local i32 @atomicrmw_xchg_i32_unaligned_monotonic(ptr %ptr, i32 %value) {477; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_monotonic:478; CHECK:    bl __atomic_exchange479    %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 1480    ret i32 %r481}482 483define dso_local i32 @atomicrmw_xchg_i32_unaligned_acquire(ptr %ptr, i32 %value) {484; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acquire:485; CHECK:    bl __atomic_exchange486    %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 1487    ret i32 %r488}489 490define dso_local i32 @atomicrmw_xchg_i32_unaligned_release(ptr %ptr, i32 %value) {491; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_release:492; CHECK:    bl __atomic_exchange493    %r = atomicrmw xchg ptr %ptr, i32 %value release, align 1494    ret i32 %r495}496 497define dso_local i32 @atomicrmw_xchg_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {498; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acq_rel:499; CHECK:    bl __atomic_exchange500    %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 1501    ret i32 %r502}503 504define dso_local i32 @atomicrmw_xchg_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {505; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_seq_cst:506; CHECK:    bl __atomic_exchange507    %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 1508    ret i32 %r509}510 511define dso_local i64 @atomicrmw_xchg_i64_unaligned_monotonic(ptr %ptr, i64 %value) {512; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_monotonic:513; CHECK:    bl __atomic_exchange514    %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 1515    ret i64 %r516}517 518define dso_local i64 @atomicrmw_xchg_i64_unaligned_acquire(ptr %ptr, i64 %value) {519; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acquire:520; CHECK:    bl __atomic_exchange521    %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 1522    ret i64 %r523}524 525define dso_local i64 @atomicrmw_xchg_i64_unaligned_release(ptr %ptr, i64 %value) {526; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_release:527; CHECK:    bl __atomic_exchange528    %r = atomicrmw xchg ptr %ptr, i64 %value release, align 1529    ret i64 %r530}531 532define dso_local i64 @atomicrmw_xchg_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {533; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acq_rel:534; CHECK:    bl __atomic_exchange535    %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 1536    ret i64 %r537}538 539define dso_local i64 @atomicrmw_xchg_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {540; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_seq_cst:541; CHECK:    bl __atomic_exchange542    %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 1543    ret i64 %r544}545 546define dso_local i128 @atomicrmw_xchg_i128_unaligned_monotonic(ptr %ptr, i128 %value) {547; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_monotonic:548; CHECK:    bl __atomic_exchange549    %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 1550    ret i128 %r551}552 553define dso_local i128 @atomicrmw_xchg_i128_unaligned_acquire(ptr %ptr, i128 %value) {554; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acquire:555; CHECK:    bl __atomic_exchange556    %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 1557    ret i128 %r558}559 560define dso_local i128 @atomicrmw_xchg_i128_unaligned_release(ptr %ptr, i128 %value) {561; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_release:562; CHECK:    bl __atomic_exchange563    %r = atomicrmw xchg ptr %ptr, i128 %value release, align 1564    ret i128 %r565}566 567define dso_local i128 @atomicrmw_xchg_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {568; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acq_rel:569; CHECK:    bl __atomic_exchange570    %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 1571    ret i128 %r572}573 574define dso_local i128 @atomicrmw_xchg_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {575; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_seq_cst:576; CHECK:    bl __atomic_exchange577    %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 1578    ret i128 %r579}580 581define dso_local i8 @atomicrmw_add_i8_aligned_monotonic(ptr %ptr, i8 %value) {582; -O0-LABEL: atomicrmw_add_i8_aligned_monotonic:583; -O0:    add w12, w9, w8584; -O0:    ldaxrb w8, [x11]585; -O0:    cmp w8, w9, uxtb586; -O0:    stlxrb w10, w12, [x11]587; -O0:    subs w9, w8, w9, uxtb588;589; -O1-LABEL: atomicrmw_add_i8_aligned_monotonic:590; -O1:    ldxrb w8, [x0]591; -O1:    add w9, w8, w1592; -O1:    stxrb w10, w9, [x0]593    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1594    ret i8 %r595}596 597define dso_local i8 @atomicrmw_add_i8_aligned_acquire(ptr %ptr, i8 %value) {598; -O0-LABEL: atomicrmw_add_i8_aligned_acquire:599; -O0:    add w12, w9, w8600; -O0:    ldaxrb w8, [x11]601; -O0:    cmp w8, w9, uxtb602; -O0:    stlxrb w10, w12, [x11]603; -O0:    subs w9, w8, w9, uxtb604;605; -O1-LABEL: atomicrmw_add_i8_aligned_acquire:606; -O1:    ldaxrb w8, [x0]607; -O1:    add w9, w8, w1608; -O1:    stxrb w10, w9, [x0]609    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1610    ret i8 %r611}612 613define dso_local i8 @atomicrmw_add_i8_aligned_release(ptr %ptr, i8 %value) {614; -O0-LABEL: atomicrmw_add_i8_aligned_release:615; -O0:    add w12, w9, w8616; -O0:    ldaxrb w8, [x11]617; -O0:    cmp w8, w9, uxtb618; -O0:    stlxrb w10, w12, [x11]619; -O0:    subs w9, w8, w9, uxtb620;621; -O1-LABEL: atomicrmw_add_i8_aligned_release:622; -O1:    ldxrb w8, [x0]623; -O1:    add w9, w8, w1624; -O1:    stlxrb w10, w9, [x0]625    %r = atomicrmw add ptr %ptr, i8 %value release, align 1626    ret i8 %r627}628 629define dso_local i8 @atomicrmw_add_i8_aligned_acq_rel(ptr %ptr, i8 %value) {630; -O0-LABEL: atomicrmw_add_i8_aligned_acq_rel:631; -O0:    add w12, w9, w8632; -O0:    ldaxrb w8, [x11]633; -O0:    cmp w8, w9, uxtb634; -O0:    stlxrb w10, w12, [x11]635; -O0:    subs w9, w8, w9, uxtb636;637; -O1-LABEL: atomicrmw_add_i8_aligned_acq_rel:638; -O1:    ldaxrb w8, [x0]639; -O1:    add w9, w8, w1640; -O1:    stlxrb w10, w9, [x0]641    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1642    ret i8 %r643}644 645define dso_local i8 @atomicrmw_add_i8_aligned_seq_cst(ptr %ptr, i8 %value) {646; -O0-LABEL: atomicrmw_add_i8_aligned_seq_cst:647; -O0:    add w12, w9, w8648; -O0:    ldaxrb w8, [x11]649; -O0:    cmp w8, w9, uxtb650; -O0:    stlxrb w10, w12, [x11]651; -O0:    subs w9, w8, w9, uxtb652;653; -O1-LABEL: atomicrmw_add_i8_aligned_seq_cst:654; -O1:    ldaxrb w8, [x0]655; -O1:    add w9, w8, w1656; -O1:    stlxrb w10, w9, [x0]657    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1658    ret i8 %r659}660 661define dso_local i16 @atomicrmw_add_i16_aligned_monotonic(ptr %ptr, i16 %value) {662; -O0-LABEL: atomicrmw_add_i16_aligned_monotonic:663; -O0:    add w12, w9, w8664; -O0:    ldaxrh w8, [x11]665; -O0:    cmp w8, w9, uxth666; -O0:    stlxrh w10, w12, [x11]667; -O0:    subs w9, w8, w9, uxth668;669; -O1-LABEL: atomicrmw_add_i16_aligned_monotonic:670; -O1:    ldxrh w8, [x0]671; -O1:    add w9, w8, w1672; -O1:    stxrh w10, w9, [x0]673    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 2674    ret i16 %r675}676 677define dso_local i16 @atomicrmw_add_i16_aligned_acquire(ptr %ptr, i16 %value) {678; -O0-LABEL: atomicrmw_add_i16_aligned_acquire:679; -O0:    add w12, w9, w8680; -O0:    ldaxrh w8, [x11]681; -O0:    cmp w8, w9, uxth682; -O0:    stlxrh w10, w12, [x11]683; -O0:    subs w9, w8, w9, uxth684;685; -O1-LABEL: atomicrmw_add_i16_aligned_acquire:686; -O1:    ldaxrh w8, [x0]687; -O1:    add w9, w8, w1688; -O1:    stxrh w10, w9, [x0]689    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 2690    ret i16 %r691}692 693define dso_local i16 @atomicrmw_add_i16_aligned_release(ptr %ptr, i16 %value) {694; -O0-LABEL: atomicrmw_add_i16_aligned_release:695; -O0:    add w12, w9, w8696; -O0:    ldaxrh w8, [x11]697; -O0:    cmp w8, w9, uxth698; -O0:    stlxrh w10, w12, [x11]699; -O0:    subs w9, w8, w9, uxth700;701; -O1-LABEL: atomicrmw_add_i16_aligned_release:702; -O1:    ldxrh w8, [x0]703; -O1:    add w9, w8, w1704; -O1:    stlxrh w10, w9, [x0]705    %r = atomicrmw add ptr %ptr, i16 %value release, align 2706    ret i16 %r707}708 709define dso_local i16 @atomicrmw_add_i16_aligned_acq_rel(ptr %ptr, i16 %value) {710; -O0-LABEL: atomicrmw_add_i16_aligned_acq_rel:711; -O0:    add w12, w9, w8712; -O0:    ldaxrh w8, [x11]713; -O0:    cmp w8, w9, uxth714; -O0:    stlxrh w10, w12, [x11]715; -O0:    subs w9, w8, w9, uxth716;717; -O1-LABEL: atomicrmw_add_i16_aligned_acq_rel:718; -O1:    ldaxrh w8, [x0]719; -O1:    add w9, w8, w1720; -O1:    stlxrh w10, w9, [x0]721    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 2722    ret i16 %r723}724 725define dso_local i16 @atomicrmw_add_i16_aligned_seq_cst(ptr %ptr, i16 %value) {726; -O0-LABEL: atomicrmw_add_i16_aligned_seq_cst:727; -O0:    add w12, w9, w8728; -O0:    ldaxrh w8, [x11]729; -O0:    cmp w8, w9, uxth730; -O0:    stlxrh w10, w12, [x11]731; -O0:    subs w9, w8, w9, uxth732;733; -O1-LABEL: atomicrmw_add_i16_aligned_seq_cst:734; -O1:    ldaxrh w8, [x0]735; -O1:    add w9, w8, w1736; -O1:    stlxrh w10, w9, [x0]737    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 2738    ret i16 %r739}740 741define dso_local i32 @atomicrmw_add_i32_aligned_monotonic(ptr %ptr, i32 %value) {742; -O0-LABEL: atomicrmw_add_i32_aligned_monotonic:743; -O0:    add w12, w9, w8744; -O0:    ldaxr w8, [x11]745; -O0:    cmp w8, w9746; -O0:    stlxr w10, w12, [x11]747; -O0:    subs w9, w8, w9748;749; -O1-LABEL: atomicrmw_add_i32_aligned_monotonic:750; -O1:    ldxr w8, [x0]751; -O1:    add w9, w8, w1752; -O1:    stxr w10, w9, [x0]753    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 4754    ret i32 %r755}756 757define dso_local i32 @atomicrmw_add_i32_aligned_acquire(ptr %ptr, i32 %value) {758; -O0-LABEL: atomicrmw_add_i32_aligned_acquire:759; -O0:    add w12, w9, w8760; -O0:    ldaxr w8, [x11]761; -O0:    cmp w8, w9762; -O0:    stlxr w10, w12, [x11]763; -O0:    subs w9, w8, w9764;765; -O1-LABEL: atomicrmw_add_i32_aligned_acquire:766; -O1:    ldaxr w8, [x0]767; -O1:    add w9, w8, w1768; -O1:    stxr w10, w9, [x0]769    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 4770    ret i32 %r771}772 773define dso_local i32 @atomicrmw_add_i32_aligned_release(ptr %ptr, i32 %value) {774; -O0-LABEL: atomicrmw_add_i32_aligned_release:775; -O0:    add w12, w9, w8776; -O0:    ldaxr w8, [x11]777; -O0:    cmp w8, w9778; -O0:    stlxr w10, w12, [x11]779; -O0:    subs w9, w8, w9780;781; -O1-LABEL: atomicrmw_add_i32_aligned_release:782; -O1:    ldxr w8, [x0]783; -O1:    add w9, w8, w1784; -O1:    stlxr w10, w9, [x0]785    %r = atomicrmw add ptr %ptr, i32 %value release, align 4786    ret i32 %r787}788 789define dso_local i32 @atomicrmw_add_i32_aligned_acq_rel(ptr %ptr, i32 %value) {790; -O0-LABEL: atomicrmw_add_i32_aligned_acq_rel:791; -O0:    add w12, w9, w8792; -O0:    ldaxr w8, [x11]793; -O0:    cmp w8, w9794; -O0:    stlxr w10, w12, [x11]795; -O0:    subs w9, w8, w9796;797; -O1-LABEL: atomicrmw_add_i32_aligned_acq_rel:798; -O1:    ldaxr w8, [x0]799; -O1:    add w9, w8, w1800; -O1:    stlxr w10, w9, [x0]801    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 4802    ret i32 %r803}804 805define dso_local i32 @atomicrmw_add_i32_aligned_seq_cst(ptr %ptr, i32 %value) {806; -O0-LABEL: atomicrmw_add_i32_aligned_seq_cst:807; -O0:    add w12, w9, w8808; -O0:    ldaxr w8, [x11]809; -O0:    cmp w8, w9810; -O0:    stlxr w10, w12, [x11]811; -O0:    subs w9, w8, w9812;813; -O1-LABEL: atomicrmw_add_i32_aligned_seq_cst:814; -O1:    ldaxr w8, [x0]815; -O1:    add w9, w8, w1816; -O1:    stlxr w10, w9, [x0]817    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 4818    ret i32 %r819}820 821define dso_local i64 @atomicrmw_add_i64_aligned_monotonic(ptr %ptr, i64 %value) {822; -O0-LABEL: atomicrmw_add_i64_aligned_monotonic:823; -O0:    add x12, x9, x8824; -O0:    ldaxr x8, [x11]825; -O0:    cmp x8, x9826; -O0:    stlxr w10, x12, [x11]827; -O0:    subs x9, x8, x9828;829; -O1-LABEL: atomicrmw_add_i64_aligned_monotonic:830; -O1:    ldxr x0, [x8]831; -O1:    add x9, x0, x1832; -O1:    stxr w10, x9, [x8]833    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 8834    ret i64 %r835}836 837define dso_local i64 @atomicrmw_add_i64_aligned_acquire(ptr %ptr, i64 %value) {838; -O0-LABEL: atomicrmw_add_i64_aligned_acquire:839; -O0:    add x12, x9, x8840; -O0:    ldaxr x8, [x11]841; -O0:    cmp x8, x9842; -O0:    stlxr w10, x12, [x11]843; -O0:    subs x9, x8, x9844;845; -O1-LABEL: atomicrmw_add_i64_aligned_acquire:846; -O1:    ldaxr x0, [x8]847; -O1:    add x9, x0, x1848; -O1:    stxr w10, x9, [x8]849    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 8850    ret i64 %r851}852 853define dso_local i64 @atomicrmw_add_i64_aligned_release(ptr %ptr, i64 %value) {854; -O0-LABEL: atomicrmw_add_i64_aligned_release:855; -O0:    add x12, x9, x8856; -O0:    ldaxr x8, [x11]857; -O0:    cmp x8, x9858; -O0:    stlxr w10, x12, [x11]859; -O0:    subs x9, x8, x9860;861; -O1-LABEL: atomicrmw_add_i64_aligned_release:862; -O1:    ldxr x0, [x8]863; -O1:    add x9, x0, x1864; -O1:    stlxr w10, x9, [x8]865    %r = atomicrmw add ptr %ptr, i64 %value release, align 8866    ret i64 %r867}868 869define dso_local i64 @atomicrmw_add_i64_aligned_acq_rel(ptr %ptr, i64 %value) {870; -O0-LABEL: atomicrmw_add_i64_aligned_acq_rel:871; -O0:    add x12, x9, x8872; -O0:    ldaxr x8, [x11]873; -O0:    cmp x8, x9874; -O0:    stlxr w10, x12, [x11]875; -O0:    subs x9, x8, x9876;877; -O1-LABEL: atomicrmw_add_i64_aligned_acq_rel:878; -O1:    ldaxr x0, [x8]879; -O1:    add x9, x0, x1880; -O1:    stlxr w10, x9, [x8]881    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 8882    ret i64 %r883}884 885define dso_local i64 @atomicrmw_add_i64_aligned_seq_cst(ptr %ptr, i64 %value) {886; -O0-LABEL: atomicrmw_add_i64_aligned_seq_cst:887; -O0:    add x12, x9, x8888; -O0:    ldaxr x8, [x11]889; -O0:    cmp x8, x9890; -O0:    stlxr w10, x12, [x11]891; -O0:    subs x9, x8, x9892;893; -O1-LABEL: atomicrmw_add_i64_aligned_seq_cst:894; -O1:    ldaxr x0, [x8]895; -O1:    add x9, x0, x1896; -O1:    stlxr w10, x9, [x8]897    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 8898    ret i64 %r899}900 901define dso_local i128 @atomicrmw_add_i128_aligned_monotonic(ptr %ptr, i128 %value) {902; -O0-LABEL: atomicrmw_add_i128_aligned_monotonic:903; -O0:    adds x14, x11, x10904; -O0:    ldxp x10, x12, [x9]905; -O0:    cmp x10, x11906; -O0:    cmp x12, x13907; -O0:    stxp w8, x14, x15, [x9]908; -O0:    stxp w8, x10, x12, [x9]909; -O0:    subs x12, x12, x13910; -O0:    ccmp x10, x11, #0, eq911;912; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic:913; -O1:    ldxp x1, x0, [x8]914; -O1:    adds x9, x1, x3915; -O1:    stxp w11, x9, x10, [x8]916    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16917    ret i128 %r918}919 920define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) {921; -O0-LABEL: atomicrmw_add_i128_aligned_acquire:922; -O0:    adds x14, x11, x10923; -O0:    ldaxp x10, x12, [x9]924; -O0:    cmp x10, x11925; -O0:    cmp x12, x13926; -O0:    stxp w8, x14, x15, [x9]927; -O0:    stxp w8, x10, x12, [x9]928; -O0:    subs x12, x12, x13929; -O0:    ccmp x10, x11, #0, eq930;931; -O1-LABEL: atomicrmw_add_i128_aligned_acquire:932; -O1:    ldaxp x1, x0, [x8]933; -O1:    adds x9, x1, x3934; -O1:    stxp w11, x9, x10, [x8]935    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16936    ret i128 %r937}938 939define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) {940; -O0-LABEL: atomicrmw_add_i128_aligned_release:941; -O0:    adds x14, x11, x10942; -O0:    ldxp x10, x12, [x9]943; -O0:    cmp x10, x11944; -O0:    cmp x12, x13945; -O0:    stlxp w8, x14, x15, [x9]946; -O0:    stlxp w8, x10, x12, [x9]947; -O0:    subs x12, x12, x13948; -O0:    ccmp x10, x11, #0, eq949;950; -O1-LABEL: atomicrmw_add_i128_aligned_release:951; -O1:    ldxp x1, x0, [x8]952; -O1:    adds x9, x1, x3953; -O1:    stlxp w11, x9, x10, [x8]954    %r = atomicrmw add ptr %ptr, i128 %value release, align 16955    ret i128 %r956}957 958define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) {959; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel:960; -O0:    adds x14, x11, x10961; -O0:    ldaxp x10, x12, [x9]962; -O0:    cmp x10, x11963; -O0:    cmp x12, x13964; -O0:    stlxp w8, x14, x15, [x9]965; -O0:    stlxp w8, x10, x12, [x9]966; -O0:    subs x12, x12, x13967; -O0:    ccmp x10, x11, #0, eq968;969; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel:970; -O1:    ldaxp x1, x0, [x8]971; -O1:    adds x9, x1, x3972; -O1:    stlxp w11, x9, x10, [x8]973    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 16974    ret i128 %r975}976 977define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) {978; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst:979; -O0:    adds x14, x11, x10980; -O0:    ldaxp x10, x12, [x9]981; -O0:    cmp x10, x11982; -O0:    cmp x12, x13983; -O0:    stlxp w8, x14, x15, [x9]984; -O0:    stlxp w8, x10, x12, [x9]985; -O0:    subs x12, x12, x13986; -O0:    ccmp x10, x11, #0, eq987;988; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst:989; -O1:    ldaxp x1, x0, [x8]990; -O1:    adds x9, x1, x3991; -O1:    stlxp w11, x9, x10, [x8]992    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 16993    ret i128 %r994}995 996define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) {997; -O0-LABEL: atomicrmw_add_i8_unaligned_monotonic:998; -O0:    add w12, w9, w8999; -O0:    ldaxrb w8, [x11]1000; -O0:    cmp w8, w9, uxtb1001; -O0:    stlxrb w10, w12, [x11]1002; -O0:    subs w9, w8, w9, uxtb1003;1004; -O1-LABEL: atomicrmw_add_i8_unaligned_monotonic:1005; -O1:    ldxrb w8, [x0]1006; -O1:    add w9, w8, w11007; -O1:    stxrb w10, w9, [x0]1008    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 11009    ret i8 %r1010}1011 1012define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) {1013; -O0-LABEL: atomicrmw_add_i8_unaligned_acquire:1014; -O0:    add w12, w9, w81015; -O0:    ldaxrb w8, [x11]1016; -O0:    cmp w8, w9, uxtb1017; -O0:    stlxrb w10, w12, [x11]1018; -O0:    subs w9, w8, w9, uxtb1019;1020; -O1-LABEL: atomicrmw_add_i8_unaligned_acquire:1021; -O1:    ldaxrb w8, [x0]1022; -O1:    add w9, w8, w11023; -O1:    stxrb w10, w9, [x0]1024    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 11025    ret i8 %r1026}1027 1028define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) {1029; -O0-LABEL: atomicrmw_add_i8_unaligned_release:1030; -O0:    add w12, w9, w81031; -O0:    ldaxrb w8, [x11]1032; -O0:    cmp w8, w9, uxtb1033; -O0:    stlxrb w10, w12, [x11]1034; -O0:    subs w9, w8, w9, uxtb1035;1036; -O1-LABEL: atomicrmw_add_i8_unaligned_release:1037; -O1:    ldxrb w8, [x0]1038; -O1:    add w9, w8, w11039; -O1:    stlxrb w10, w9, [x0]1040    %r = atomicrmw add ptr %ptr, i8 %value release, align 11041    ret i8 %r1042}1043 1044define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1045; -O0-LABEL: atomicrmw_add_i8_unaligned_acq_rel:1046; -O0:    add w12, w9, w81047; -O0:    ldaxrb w8, [x11]1048; -O0:    cmp w8, w9, uxtb1049; -O0:    stlxrb w10, w12, [x11]1050; -O0:    subs w9, w8, w9, uxtb1051;1052; -O1-LABEL: atomicrmw_add_i8_unaligned_acq_rel:1053; -O1:    ldaxrb w8, [x0]1054; -O1:    add w9, w8, w11055; -O1:    stlxrb w10, w9, [x0]1056    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 11057    ret i8 %r1058}1059 1060define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1061; -O0-LABEL: atomicrmw_add_i8_unaligned_seq_cst:1062; -O0:    add w12, w9, w81063; -O0:    ldaxrb w8, [x11]1064; -O0:    cmp w8, w9, uxtb1065; -O0:    stlxrb w10, w12, [x11]1066; -O0:    subs w9, w8, w9, uxtb1067;1068; -O1-LABEL: atomicrmw_add_i8_unaligned_seq_cst:1069; -O1:    ldaxrb w8, [x0]1070; -O1:    add w9, w8, w11071; -O1:    stlxrb w10, w9, [x0]1072    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 11073    ret i8 %r1074}1075 1076define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1077; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic:1078; -O0:    add w8, w9, w81079; -O0:    bl __atomic_compare_exchange1080;1081; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic:1082; -O1:    add w8, w0, w201083; -O1:    bl __atomic_compare_exchange1084    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 11085    ret i16 %r1086}1087 1088define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) {1089; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire:1090; -O0:    add w8, w9, w81091; -O0:    bl __atomic_compare_exchange1092;1093; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire:1094; -O1:    add w8, w0, w201095; -O1:    bl __atomic_compare_exchange1096    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 11097    ret i16 %r1098}1099 1100define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) {1101; -O0-LABEL: atomicrmw_add_i16_unaligned_release:1102; -O0:    add w8, w9, w81103; -O0:    bl __atomic_compare_exchange1104;1105; -O1-LABEL: atomicrmw_add_i16_unaligned_release:1106; -O1:    add w8, w0, w201107; -O1:    bl __atomic_compare_exchange1108    %r = atomicrmw add ptr %ptr, i16 %value release, align 11109    ret i16 %r1110}1111 1112define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1113; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel:1114; -O0:    add w8, w9, w81115; -O0:    bl __atomic_compare_exchange1116;1117; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel:1118; -O1:    add w8, w0, w201119; -O1:    bl __atomic_compare_exchange1120    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 11121    ret i16 %r1122}1123 1124define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1125; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst:1126; -O0:    add w8, w9, w81127; -O0:    bl __atomic_compare_exchange1128;1129; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst:1130; -O1:    add w8, w0, w201131; -O1:    bl __atomic_compare_exchange1132    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 11133    ret i16 %r1134}1135 1136define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1137; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic:1138; -O0:    add w8, w9, w81139; -O0:    bl __atomic_compare_exchange1140;1141; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic:1142; -O1:    add w8, w0, w201143; -O1:    bl __atomic_compare_exchange1144    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 11145    ret i32 %r1146}1147 1148define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) {1149; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire:1150; -O0:    add w8, w9, w81151; -O0:    bl __atomic_compare_exchange1152;1153; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire:1154; -O1:    add w8, w0, w201155; -O1:    bl __atomic_compare_exchange1156    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 11157    ret i32 %r1158}1159 1160define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) {1161; -O0-LABEL: atomicrmw_add_i32_unaligned_release:1162; -O0:    add w8, w9, w81163; -O0:    bl __atomic_compare_exchange1164;1165; -O1-LABEL: atomicrmw_add_i32_unaligned_release:1166; -O1:    add w8, w0, w201167; -O1:    bl __atomic_compare_exchange1168    %r = atomicrmw add ptr %ptr, i32 %value release, align 11169    ret i32 %r1170}1171 1172define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1173; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel:1174; -O0:    add w8, w9, w81175; -O0:    bl __atomic_compare_exchange1176;1177; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel:1178; -O1:    add w8, w0, w201179; -O1:    bl __atomic_compare_exchange1180    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 11181    ret i32 %r1182}1183 1184define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1185; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst:1186; -O0:    add w8, w9, w81187; -O0:    bl __atomic_compare_exchange1188;1189; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst:1190; -O1:    add w8, w0, w201191; -O1:    bl __atomic_compare_exchange1192    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 11193    ret i32 %r1194}1195 1196define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1197; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic:1198; -O0:    add x8, x9, x81199; -O0:    bl __atomic_compare_exchange1200;1201; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic:1202; -O1:    add x8, x0, x201203; -O1:    bl __atomic_compare_exchange1204    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 11205    ret i64 %r1206}1207 1208define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) {1209; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire:1210; -O0:    add x8, x9, x81211; -O0:    bl __atomic_compare_exchange1212;1213; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire:1214; -O1:    add x8, x0, x201215; -O1:    bl __atomic_compare_exchange1216    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 11217    ret i64 %r1218}1219 1220define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) {1221; -O0-LABEL: atomicrmw_add_i64_unaligned_release:1222; -O0:    add x8, x9, x81223; -O0:    bl __atomic_compare_exchange1224;1225; -O1-LABEL: atomicrmw_add_i64_unaligned_release:1226; -O1:    add x8, x0, x201227; -O1:    bl __atomic_compare_exchange1228    %r = atomicrmw add ptr %ptr, i64 %value release, align 11229    ret i64 %r1230}1231 1232define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1233; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel:1234; -O0:    add x8, x9, x81235; -O0:    bl __atomic_compare_exchange1236;1237; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel:1238; -O1:    add x8, x0, x201239; -O1:    bl __atomic_compare_exchange1240    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 11241    ret i64 %r1242}1243 1244define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1245; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst:1246; -O0:    add x8, x9, x81247; -O0:    bl __atomic_compare_exchange1248;1249; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst:1250; -O1:    add x8, x0, x201251; -O1:    bl __atomic_compare_exchange1252    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 11253    ret i64 %r1254}1255 1256define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1257; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic:1258; -O0:    adds x9, x10, x91259; -O0:    bl __atomic_compare_exchange1260;1261; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic:1262; -O1:    ldp x0, x1, [x0]1263; -O1:    adds x8, x1, x191264; -O1:    bl __atomic_compare_exchange1265    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 11266    ret i128 %r1267}1268 1269define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) {1270; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire:1271; -O0:    adds x9, x10, x91272; -O0:    bl __atomic_compare_exchange1273;1274; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire:1275; -O1:    ldp x0, x1, [x0]1276; -O1:    adds x8, x1, x191277; -O1:    bl __atomic_compare_exchange1278    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 11279    ret i128 %r1280}1281 1282define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) {1283; -O0-LABEL: atomicrmw_add_i128_unaligned_release:1284; -O0:    adds x9, x10, x91285; -O0:    bl __atomic_compare_exchange1286;1287; -O1-LABEL: atomicrmw_add_i128_unaligned_release:1288; -O1:    ldp x0, x1, [x0]1289; -O1:    adds x8, x1, x191290; -O1:    bl __atomic_compare_exchange1291    %r = atomicrmw add ptr %ptr, i128 %value release, align 11292    ret i128 %r1293}1294 1295define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1296; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel:1297; -O0:    adds x9, x10, x91298; -O0:    bl __atomic_compare_exchange1299;1300; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel:1301; -O1:    ldp x0, x1, [x0]1302; -O1:    adds x8, x1, x191303; -O1:    bl __atomic_compare_exchange1304    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 11305    ret i128 %r1306}1307 1308define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1309; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst:1310; -O0:    adds x9, x10, x91311; -O0:    bl __atomic_compare_exchange1312;1313; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst:1314; -O1:    ldp x0, x1, [x0]1315; -O1:    adds x8, x1, x191316; -O1:    bl __atomic_compare_exchange1317    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 11318    ret i128 %r1319}1320 1321define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) {1322; -O0-LABEL: atomicrmw_sub_i8_aligned_monotonic:1323; -O0:    subs w12, w9, w81324; -O0:    ldaxrb w8, [x11]1325; -O0:    cmp w8, w9, uxtb1326; -O0:    stlxrb w10, w12, [x11]1327; -O0:    subs w9, w8, w9, uxtb1328;1329; -O1-LABEL: atomicrmw_sub_i8_aligned_monotonic:1330; -O1:    ldxrb w8, [x0]1331; -O1:    sub w9, w8, w11332; -O1:    stxrb w10, w9, [x0]1333    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11334    ret i8 %r1335}1336 1337define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) {1338; -O0-LABEL: atomicrmw_sub_i8_aligned_acquire:1339; -O0:    subs w12, w9, w81340; -O0:    ldaxrb w8, [x11]1341; -O0:    cmp w8, w9, uxtb1342; -O0:    stlxrb w10, w12, [x11]1343; -O0:    subs w9, w8, w9, uxtb1344;1345; -O1-LABEL: atomicrmw_sub_i8_aligned_acquire:1346; -O1:    ldaxrb w8, [x0]1347; -O1:    sub w9, w8, w11348; -O1:    stxrb w10, w9, [x0]1349    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11350    ret i8 %r1351}1352 1353define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) {1354; -O0-LABEL: atomicrmw_sub_i8_aligned_release:1355; -O0:    subs w12, w9, w81356; -O0:    ldaxrb w8, [x11]1357; -O0:    cmp w8, w9, uxtb1358; -O0:    stlxrb w10, w12, [x11]1359; -O0:    subs w9, w8, w9, uxtb1360;1361; -O1-LABEL: atomicrmw_sub_i8_aligned_release:1362; -O1:    ldxrb w8, [x0]1363; -O1:    sub w9, w8, w11364; -O1:    stlxrb w10, w9, [x0]1365    %r = atomicrmw sub ptr %ptr, i8 %value release, align 11366    ret i8 %r1367}1368 1369define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) {1370; -O0-LABEL: atomicrmw_sub_i8_aligned_acq_rel:1371; -O0:    subs w12, w9, w81372; -O0:    ldaxrb w8, [x11]1373; -O0:    cmp w8, w9, uxtb1374; -O0:    stlxrb w10, w12, [x11]1375; -O0:    subs w9, w8, w9, uxtb1376;1377; -O1-LABEL: atomicrmw_sub_i8_aligned_acq_rel:1378; -O1:    ldaxrb w8, [x0]1379; -O1:    sub w9, w8, w11380; -O1:    stlxrb w10, w9, [x0]1381    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11382    ret i8 %r1383}1384 1385define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) {1386; -O0-LABEL: atomicrmw_sub_i8_aligned_seq_cst:1387; -O0:    subs w12, w9, w81388; -O0:    ldaxrb w8, [x11]1389; -O0:    cmp w8, w9, uxtb1390; -O0:    stlxrb w10, w12, [x11]1391; -O0:    subs w9, w8, w9, uxtb1392;1393; -O1-LABEL: atomicrmw_sub_i8_aligned_seq_cst:1394; -O1:    ldaxrb w8, [x0]1395; -O1:    sub w9, w8, w11396; -O1:    stlxrb w10, w9, [x0]1397    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11398    ret i8 %r1399}1400 1401define dso_local i16 @atomicrmw_sub_i16_aligned_monotonic(ptr %ptr, i16 %value) {1402; -O0-LABEL: atomicrmw_sub_i16_aligned_monotonic:1403; -O0:    subs w12, w9, w81404; -O0:    ldaxrh w8, [x11]1405; -O0:    cmp w8, w9, uxth1406; -O0:    stlxrh w10, w12, [x11]1407; -O0:    subs w9, w8, w9, uxth1408;1409; -O1-LABEL: atomicrmw_sub_i16_aligned_monotonic:1410; -O1:    ldxrh w8, [x0]1411; -O1:    sub w9, w8, w11412; -O1:    stxrh w10, w9, [x0]1413    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 21414    ret i16 %r1415}1416 1417define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) {1418; -O0-LABEL: atomicrmw_sub_i16_aligned_acquire:1419; -O0:    subs w12, w9, w81420; -O0:    ldaxrh w8, [x11]1421; -O0:    cmp w8, w9, uxth1422; -O0:    stlxrh w10, w12, [x11]1423; -O0:    subs w9, w8, w9, uxth1424;1425; -O1-LABEL: atomicrmw_sub_i16_aligned_acquire:1426; -O1:    ldaxrh w8, [x0]1427; -O1:    sub w9, w8, w11428; -O1:    stxrh w10, w9, [x0]1429    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 21430    ret i16 %r1431}1432 1433define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) {1434; -O0-LABEL: atomicrmw_sub_i16_aligned_release:1435; -O0:    subs w12, w9, w81436; -O0:    ldaxrh w8, [x11]1437; -O0:    cmp w8, w9, uxth1438; -O0:    stlxrh w10, w12, [x11]1439; -O0:    subs w9, w8, w9, uxth1440;1441; -O1-LABEL: atomicrmw_sub_i16_aligned_release:1442; -O1:    ldxrh w8, [x0]1443; -O1:    sub w9, w8, w11444; -O1:    stlxrh w10, w9, [x0]1445    %r = atomicrmw sub ptr %ptr, i16 %value release, align 21446    ret i16 %r1447}1448 1449define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) {1450; -O0-LABEL: atomicrmw_sub_i16_aligned_acq_rel:1451; -O0:    subs w12, w9, w81452; -O0:    ldaxrh w8, [x11]1453; -O0:    cmp w8, w9, uxth1454; -O0:    stlxrh w10, w12, [x11]1455; -O0:    subs w9, w8, w9, uxth1456;1457; -O1-LABEL: atomicrmw_sub_i16_aligned_acq_rel:1458; -O1:    ldaxrh w8, [x0]1459; -O1:    sub w9, w8, w11460; -O1:    stlxrh w10, w9, [x0]1461    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 21462    ret i16 %r1463}1464 1465define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1466; -O0-LABEL: atomicrmw_sub_i16_aligned_seq_cst:1467; -O0:    subs w12, w9, w81468; -O0:    ldaxrh w8, [x11]1469; -O0:    cmp w8, w9, uxth1470; -O0:    stlxrh w10, w12, [x11]1471; -O0:    subs w9, w8, w9, uxth1472;1473; -O1-LABEL: atomicrmw_sub_i16_aligned_seq_cst:1474; -O1:    ldaxrh w8, [x0]1475; -O1:    sub w9, w8, w11476; -O1:    stlxrh w10, w9, [x0]1477    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 21478    ret i16 %r1479}1480 1481define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) {1482; -O0-LABEL: atomicrmw_sub_i32_aligned_monotonic:1483; -O0:    subs w12, w9, w81484; -O0:    ldaxr w8, [x11]1485; -O0:    cmp w8, w91486; -O0:    stlxr w10, w12, [x11]1487; -O0:    subs w9, w8, w91488;1489; -O1-LABEL: atomicrmw_sub_i32_aligned_monotonic:1490; -O1:    ldxr w8, [x0]1491; -O1:    sub w9, w8, w11492; -O1:    stxr w10, w9, [x0]1493    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 41494    ret i32 %r1495}1496 1497define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) {1498; -O0-LABEL: atomicrmw_sub_i32_aligned_acquire:1499; -O0:    subs w12, w9, w81500; -O0:    ldaxr w8, [x11]1501; -O0:    cmp w8, w91502; -O0:    stlxr w10, w12, [x11]1503; -O0:    subs w9, w8, w91504;1505; -O1-LABEL: atomicrmw_sub_i32_aligned_acquire:1506; -O1:    ldaxr w8, [x0]1507; -O1:    sub w9, w8, w11508; -O1:    stxr w10, w9, [x0]1509    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 41510    ret i32 %r1511}1512 1513define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) {1514; -O0-LABEL: atomicrmw_sub_i32_aligned_release:1515; -O0:    subs w12, w9, w81516; -O0:    ldaxr w8, [x11]1517; -O0:    cmp w8, w91518; -O0:    stlxr w10, w12, [x11]1519; -O0:    subs w9, w8, w91520;1521; -O1-LABEL: atomicrmw_sub_i32_aligned_release:1522; -O1:    ldxr w8, [x0]1523; -O1:    sub w9, w8, w11524; -O1:    stlxr w10, w9, [x0]1525    %r = atomicrmw sub ptr %ptr, i32 %value release, align 41526    ret i32 %r1527}1528 1529define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1530; -O0-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1531; -O0:    subs w12, w9, w81532; -O0:    ldaxr w8, [x11]1533; -O0:    cmp w8, w91534; -O0:    stlxr w10, w12, [x11]1535; -O0:    subs w9, w8, w91536;1537; -O1-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1538; -O1:    ldaxr w8, [x0]1539; -O1:    sub w9, w8, w11540; -O1:    stlxr w10, w9, [x0]1541    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 41542    ret i32 %r1543}1544 1545define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1546; -O0-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1547; -O0:    subs w12, w9, w81548; -O0:    ldaxr w8, [x11]1549; -O0:    cmp w8, w91550; -O0:    stlxr w10, w12, [x11]1551; -O0:    subs w9, w8, w91552;1553; -O1-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1554; -O1:    ldaxr w8, [x0]1555; -O1:    sub w9, w8, w11556; -O1:    stlxr w10, w9, [x0]1557    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 41558    ret i32 %r1559}1560 1561define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) {1562; -O0-LABEL: atomicrmw_sub_i64_aligned_monotonic:1563; -O0:    subs x12, x9, x81564; -O0:    ldaxr x8, [x11]1565; -O0:    cmp x8, x91566; -O0:    stlxr w10, x12, [x11]1567; -O0:    subs x9, x8, x91568;1569; -O1-LABEL: atomicrmw_sub_i64_aligned_monotonic:1570; -O1:    ldxr x0, [x8]1571; -O1:    sub x9, x0, x11572; -O1:    stxr w10, x9, [x8]1573    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 81574    ret i64 %r1575}1576 1577define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) {1578; -O0-LABEL: atomicrmw_sub_i64_aligned_acquire:1579; -O0:    subs x12, x9, x81580; -O0:    ldaxr x8, [x11]1581; -O0:    cmp x8, x91582; -O0:    stlxr w10, x12, [x11]1583; -O0:    subs x9, x8, x91584;1585; -O1-LABEL: atomicrmw_sub_i64_aligned_acquire:1586; -O1:    ldaxr x0, [x8]1587; -O1:    sub x9, x0, x11588; -O1:    stxr w10, x9, [x8]1589    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 81590    ret i64 %r1591}1592 1593define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) {1594; -O0-LABEL: atomicrmw_sub_i64_aligned_release:1595; -O0:    subs x12, x9, x81596; -O0:    ldaxr x8, [x11]1597; -O0:    cmp x8, x91598; -O0:    stlxr w10, x12, [x11]1599; -O0:    subs x9, x8, x91600;1601; -O1-LABEL: atomicrmw_sub_i64_aligned_release:1602; -O1:    ldxr x0, [x8]1603; -O1:    sub x9, x0, x11604; -O1:    stlxr w10, x9, [x8]1605    %r = atomicrmw sub ptr %ptr, i64 %value release, align 81606    ret i64 %r1607}1608 1609define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1610; -O0-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1611; -O0:    subs x12, x9, x81612; -O0:    ldaxr x8, [x11]1613; -O0:    cmp x8, x91614; -O0:    stlxr w10, x12, [x11]1615; -O0:    subs x9, x8, x91616;1617; -O1-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1618; -O1:    ldaxr x0, [x8]1619; -O1:    sub x9, x0, x11620; -O1:    stlxr w10, x9, [x8]1621    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 81622    ret i64 %r1623}1624 1625define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1626; -O0-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1627; -O0:    subs x12, x9, x81628; -O0:    ldaxr x8, [x11]1629; -O0:    cmp x8, x91630; -O0:    stlxr w10, x12, [x11]1631; -O0:    subs x9, x8, x91632;1633; -O1-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1634; -O1:    ldaxr x0, [x8]1635; -O1:    sub x9, x0, x11636; -O1:    stlxr w10, x9, [x8]1637    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 81638    ret i64 %r1639}1640 1641define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) {1642; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic:1643; -O0:    subs x14, x11, x101644; -O0:    ldxp x10, x12, [x9]1645; -O0:    cmp x10, x111646; -O0:    cmp x12, x131647; -O0:    stxp w8, x14, x15, [x9]1648; -O0:    stxp w8, x10, x12, [x9]1649; -O0:    subs x12, x12, x131650; -O0:    ccmp x10, x11, #0, eq1651;1652; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic:1653; -O1:    ldxp x1, x0, [x8]1654; -O1:    subs x9, x1, x31655; -O1:    stxp w11, x9, x10, [x8]1656    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 161657    ret i128 %r1658}1659 1660define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) {1661; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire:1662; -O0:    subs x14, x11, x101663; -O0:    ldaxp x10, x12, [x9]1664; -O0:    cmp x10, x111665; -O0:    cmp x12, x131666; -O0:    stxp w8, x14, x15, [x9]1667; -O0:    stxp w8, x10, x12, [x9]1668; -O0:    subs x12, x12, x131669; -O0:    ccmp x10, x11, #0, eq1670;1671; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire:1672; -O1:    ldaxp x1, x0, [x8]1673; -O1:    subs x9, x1, x31674; -O1:    stxp w11, x9, x10, [x8]1675    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 161676    ret i128 %r1677}1678 1679define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) {1680; -O0-LABEL: atomicrmw_sub_i128_aligned_release:1681; -O0:    subs x14, x11, x101682; -O0:    ldxp x10, x12, [x9]1683; -O0:    cmp x10, x111684; -O0:    cmp x12, x131685; -O0:    stlxp w8, x14, x15, [x9]1686; -O0:    stlxp w8, x10, x12, [x9]1687; -O0:    subs x12, x12, x131688; -O0:    ccmp x10, x11, #0, eq1689;1690; -O1-LABEL: atomicrmw_sub_i128_aligned_release:1691; -O1:    ldxp x1, x0, [x8]1692; -O1:    subs x9, x1, x31693; -O1:    stlxp w11, x9, x10, [x8]1694    %r = atomicrmw sub ptr %ptr, i128 %value release, align 161695    ret i128 %r1696}1697 1698define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1699; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1700; -O0:    subs x14, x11, x101701; -O0:    ldaxp x10, x12, [x9]1702; -O0:    cmp x10, x111703; -O0:    cmp x12, x131704; -O0:    stlxp w8, x14, x15, [x9]1705; -O0:    stlxp w8, x10, x12, [x9]1706; -O0:    subs x12, x12, x131707; -O0:    ccmp x10, x11, #0, eq1708;1709; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1710; -O1:    ldaxp x1, x0, [x8]1711; -O1:    subs x9, x1, x31712; -O1:    stlxp w11, x9, x10, [x8]1713    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 161714    ret i128 %r1715}1716 1717define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1718; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1719; -O0:    subs x14, x11, x101720; -O0:    ldaxp x10, x12, [x9]1721; -O0:    cmp x10, x111722; -O0:    cmp x12, x131723; -O0:    stlxp w8, x14, x15, [x9]1724; -O0:    stlxp w8, x10, x12, [x9]1725; -O0:    subs x12, x12, x131726; -O0:    ccmp x10, x11, #0, eq1727;1728; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1729; -O1:    ldaxp x1, x0, [x8]1730; -O1:    subs x9, x1, x31731; -O1:    stlxp w11, x9, x10, [x8]1732    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 161733    ret i128 %r1734}1735 1736define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1737; -O0-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1738; -O0:    subs w12, w9, w81739; -O0:    ldaxrb w8, [x11]1740; -O0:    cmp w8, w9, uxtb1741; -O0:    stlxrb w10, w12, [x11]1742; -O0:    subs w9, w8, w9, uxtb1743;1744; -O1-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1745; -O1:    ldxrb w8, [x0]1746; -O1:    sub w9, w8, w11747; -O1:    stxrb w10, w9, [x0]1748    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11749    ret i8 %r1750}1751 1752define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) {1753; -O0-LABEL: atomicrmw_sub_i8_unaligned_acquire:1754; -O0:    subs w12, w9, w81755; -O0:    ldaxrb w8, [x11]1756; -O0:    cmp w8, w9, uxtb1757; -O0:    stlxrb w10, w12, [x11]1758; -O0:    subs w9, w8, w9, uxtb1759;1760; -O1-LABEL: atomicrmw_sub_i8_unaligned_acquire:1761; -O1:    ldaxrb w8, [x0]1762; -O1:    sub w9, w8, w11763; -O1:    stxrb w10, w9, [x0]1764    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11765    ret i8 %r1766}1767 1768define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) {1769; -O0-LABEL: atomicrmw_sub_i8_unaligned_release:1770; -O0:    subs w12, w9, w81771; -O0:    ldaxrb w8, [x11]1772; -O0:    cmp w8, w9, uxtb1773; -O0:    stlxrb w10, w12, [x11]1774; -O0:    subs w9, w8, w9, uxtb1775;1776; -O1-LABEL: atomicrmw_sub_i8_unaligned_release:1777; -O1:    ldxrb w8, [x0]1778; -O1:    sub w9, w8, w11779; -O1:    stlxrb w10, w9, [x0]1780    %r = atomicrmw sub ptr %ptr, i8 %value release, align 11781    ret i8 %r1782}1783 1784define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1785; -O0-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1786; -O0:    subs w12, w9, w81787; -O0:    ldaxrb w8, [x11]1788; -O0:    cmp w8, w9, uxtb1789; -O0:    stlxrb w10, w12, [x11]1790; -O0:    subs w9, w8, w9, uxtb1791;1792; -O1-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1793; -O1:    ldaxrb w8, [x0]1794; -O1:    sub w9, w8, w11795; -O1:    stlxrb w10, w9, [x0]1796    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11797    ret i8 %r1798}1799 1800define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1801; -O0-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1802; -O0:    subs w12, w9, w81803; -O0:    ldaxrb w8, [x11]1804; -O0:    cmp w8, w9, uxtb1805; -O0:    stlxrb w10, w12, [x11]1806; -O0:    subs w9, w8, w9, uxtb1807;1808; -O1-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1809; -O1:    ldaxrb w8, [x0]1810; -O1:    sub w9, w8, w11811; -O1:    stlxrb w10, w9, [x0]1812    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11813    ret i8 %r1814}1815 1816define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1817; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1818; -O0:    subs w8, w9, w81819; -O0:    bl __atomic_compare_exchange1820;1821; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1822; -O1:    sub w8, w0, w201823; -O1:    bl __atomic_compare_exchange1824    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 11825    ret i16 %r1826}1827 1828define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) {1829; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire:1830; -O0:    subs w8, w9, w81831; -O0:    bl __atomic_compare_exchange1832;1833; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire:1834; -O1:    sub w8, w0, w201835; -O1:    bl __atomic_compare_exchange1836    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 11837    ret i16 %r1838}1839 1840define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) {1841; -O0-LABEL: atomicrmw_sub_i16_unaligned_release:1842; -O0:    subs w8, w9, w81843; -O0:    bl __atomic_compare_exchange1844;1845; -O1-LABEL: atomicrmw_sub_i16_unaligned_release:1846; -O1:    sub w8, w0, w201847; -O1:    bl __atomic_compare_exchange1848    %r = atomicrmw sub ptr %ptr, i16 %value release, align 11849    ret i16 %r1850}1851 1852define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1853; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1854; -O0:    subs w8, w9, w81855; -O0:    bl __atomic_compare_exchange1856;1857; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1858; -O1:    sub w8, w0, w201859; -O1:    bl __atomic_compare_exchange1860    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 11861    ret i16 %r1862}1863 1864define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1865; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1866; -O0:    subs w8, w9, w81867; -O0:    bl __atomic_compare_exchange1868;1869; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1870; -O1:    sub w8, w0, w201871; -O1:    bl __atomic_compare_exchange1872    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 11873    ret i16 %r1874}1875 1876define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1877; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1878; -O0:    subs w8, w9, w81879; -O0:    bl __atomic_compare_exchange1880;1881; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1882; -O1:    sub w8, w0, w201883; -O1:    bl __atomic_compare_exchange1884    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 11885    ret i32 %r1886}1887 1888define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) {1889; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire:1890; -O0:    subs w8, w9, w81891; -O0:    bl __atomic_compare_exchange1892;1893; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire:1894; -O1:    sub w8, w0, w201895; -O1:    bl __atomic_compare_exchange1896    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 11897    ret i32 %r1898}1899 1900define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) {1901; -O0-LABEL: atomicrmw_sub_i32_unaligned_release:1902; -O0:    subs w8, w9, w81903; -O0:    bl __atomic_compare_exchange1904;1905; -O1-LABEL: atomicrmw_sub_i32_unaligned_release:1906; -O1:    sub w8, w0, w201907; -O1:    bl __atomic_compare_exchange1908    %r = atomicrmw sub ptr %ptr, i32 %value release, align 11909    ret i32 %r1910}1911 1912define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1913; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1914; -O0:    subs w8, w9, w81915; -O0:    bl __atomic_compare_exchange1916;1917; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1918; -O1:    sub w8, w0, w201919; -O1:    bl __atomic_compare_exchange1920    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 11921    ret i32 %r1922}1923 1924define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1925; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1926; -O0:    subs w8, w9, w81927; -O0:    bl __atomic_compare_exchange1928;1929; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1930; -O1:    sub w8, w0, w201931; -O1:    bl __atomic_compare_exchange1932    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 11933    ret i32 %r1934}1935 1936define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1937; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1938; -O0:    subs x8, x9, x81939; -O0:    bl __atomic_compare_exchange1940;1941; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1942; -O1:    sub x8, x0, x201943; -O1:    bl __atomic_compare_exchange1944    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 11945    ret i64 %r1946}1947 1948define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) {1949; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire:1950; -O0:    subs x8, x9, x81951; -O0:    bl __atomic_compare_exchange1952;1953; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire:1954; -O1:    sub x8, x0, x201955; -O1:    bl __atomic_compare_exchange1956    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 11957    ret i64 %r1958}1959 1960define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) {1961; -O0-LABEL: atomicrmw_sub_i64_unaligned_release:1962; -O0:    subs x8, x9, x81963; -O0:    bl __atomic_compare_exchange1964;1965; -O1-LABEL: atomicrmw_sub_i64_unaligned_release:1966; -O1:    sub x8, x0, x201967; -O1:    bl __atomic_compare_exchange1968    %r = atomicrmw sub ptr %ptr, i64 %value release, align 11969    ret i64 %r1970}1971 1972define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1973; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1974; -O0:    subs x8, x9, x81975; -O0:    bl __atomic_compare_exchange1976;1977; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1978; -O1:    sub x8, x0, x201979; -O1:    bl __atomic_compare_exchange1980    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 11981    ret i64 %r1982}1983 1984define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1985; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1986; -O0:    subs x8, x9, x81987; -O0:    bl __atomic_compare_exchange1988;1989; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1990; -O1:    sub x8, x0, x201991; -O1:    bl __atomic_compare_exchange1992    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 11993    ret i64 %r1994}1995 1996define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1997; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1998; -O0:    subs x9, x10, x91999; -O0:    bl __atomic_compare_exchange2000;2001; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic:2002; -O1:    ldp x0, x1, [x0]2003; -O1:    subs x8, x1, x192004; -O1:    bl __atomic_compare_exchange2005    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 12006    ret i128 %r2007}2008 2009define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) {2010; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire:2011; -O0:    subs x9, x10, x92012; -O0:    bl __atomic_compare_exchange2013;2014; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire:2015; -O1:    ldp x0, x1, [x0]2016; -O1:    subs x8, x1, x192017; -O1:    bl __atomic_compare_exchange2018    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 12019    ret i128 %r2020}2021 2022define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) {2023; -O0-LABEL: atomicrmw_sub_i128_unaligned_release:2024; -O0:    subs x9, x10, x92025; -O0:    bl __atomic_compare_exchange2026;2027; -O1-LABEL: atomicrmw_sub_i128_unaligned_release:2028; -O1:    ldp x0, x1, [x0]2029; -O1:    subs x8, x1, x192030; -O1:    bl __atomic_compare_exchange2031    %r = atomicrmw sub ptr %ptr, i128 %value release, align 12032    ret i128 %r2033}2034 2035define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2036; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:2037; -O0:    subs x9, x10, x92038; -O0:    bl __atomic_compare_exchange2039;2040; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:2041; -O1:    ldp x0, x1, [x0]2042; -O1:    subs x8, x1, x192043; -O1:    bl __atomic_compare_exchange2044    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 12045    ret i128 %r2046}2047 2048define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2049; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:2050; -O0:    subs x9, x10, x92051; -O0:    bl __atomic_compare_exchange2052;2053; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:2054; -O1:    ldp x0, x1, [x0]2055; -O1:    subs x8, x1, x192056; -O1:    bl __atomic_compare_exchange2057    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 12058    ret i128 %r2059}2060 2061define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) {2062; -O0-LABEL: atomicrmw_and_i8_aligned_monotonic:2063; -O0:    and w12, w9, w82064; -O0:    ldaxrb w8, [x11]2065; -O0:    cmp w8, w9, uxtb2066; -O0:    stlxrb w10, w12, [x11]2067; -O0:    subs w9, w8, w9, uxtb2068;2069; -O1-LABEL: atomicrmw_and_i8_aligned_monotonic:2070; -O1:    ldxrb w8, [x0]2071; -O1:    and w9, w8, w12072; -O1:    stxrb w10, w9, [x0]2073    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 12074    ret i8 %r2075}2076 2077define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) {2078; -O0-LABEL: atomicrmw_and_i8_aligned_acquire:2079; -O0:    and w12, w9, w82080; -O0:    ldaxrb w8, [x11]2081; -O0:    cmp w8, w9, uxtb2082; -O0:    stlxrb w10, w12, [x11]2083; -O0:    subs w9, w8, w9, uxtb2084;2085; -O1-LABEL: atomicrmw_and_i8_aligned_acquire:2086; -O1:    ldaxrb w8, [x0]2087; -O1:    and w9, w8, w12088; -O1:    stxrb w10, w9, [x0]2089    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 12090    ret i8 %r2091}2092 2093define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) {2094; -O0-LABEL: atomicrmw_and_i8_aligned_release:2095; -O0:    and w12, w9, w82096; -O0:    ldaxrb w8, [x11]2097; -O0:    cmp w8, w9, uxtb2098; -O0:    stlxrb w10, w12, [x11]2099; -O0:    subs w9, w8, w9, uxtb2100;2101; -O1-LABEL: atomicrmw_and_i8_aligned_release:2102; -O1:    ldxrb w8, [x0]2103; -O1:    and w9, w8, w12104; -O1:    stlxrb w10, w9, [x0]2105    %r = atomicrmw and ptr %ptr, i8 %value release, align 12106    ret i8 %r2107}2108 2109define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2110; -O0-LABEL: atomicrmw_and_i8_aligned_acq_rel:2111; -O0:    and w12, w9, w82112; -O0:    ldaxrb w8, [x11]2113; -O0:    cmp w8, w9, uxtb2114; -O0:    stlxrb w10, w12, [x11]2115; -O0:    subs w9, w8, w9, uxtb2116;2117; -O1-LABEL: atomicrmw_and_i8_aligned_acq_rel:2118; -O1:    ldaxrb w8, [x0]2119; -O1:    and w9, w8, w12120; -O1:    stlxrb w10, w9, [x0]2121    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 12122    ret i8 %r2123}2124 2125define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2126; -O0-LABEL: atomicrmw_and_i8_aligned_seq_cst:2127; -O0:    and w12, w9, w82128; -O0:    ldaxrb w8, [x11]2129; -O0:    cmp w8, w9, uxtb2130; -O0:    stlxrb w10, w12, [x11]2131; -O0:    subs w9, w8, w9, uxtb2132;2133; -O1-LABEL: atomicrmw_and_i8_aligned_seq_cst:2134; -O1:    ldaxrb w8, [x0]2135; -O1:    and w9, w8, w12136; -O1:    stlxrb w10, w9, [x0]2137    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 12138    ret i8 %r2139}2140 2141define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) {2142; -O0-LABEL: atomicrmw_and_i16_aligned_monotonic:2143; -O0:    and w12, w9, w82144; -O0:    ldaxrh w8, [x11]2145; -O0:    cmp w8, w9, uxth2146; -O0:    stlxrh w10, w12, [x11]2147; -O0:    subs w9, w8, w9, uxth2148;2149; -O1-LABEL: atomicrmw_and_i16_aligned_monotonic:2150; -O1:    ldxrh w8, [x0]2151; -O1:    and w9, w8, w12152; -O1:    stxrh w10, w9, [x0]2153    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 22154    ret i16 %r2155}2156 2157define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) {2158; -O0-LABEL: atomicrmw_and_i16_aligned_acquire:2159; -O0:    and w12, w9, w82160; -O0:    ldaxrh w8, [x11]2161; -O0:    cmp w8, w9, uxth2162; -O0:    stlxrh w10, w12, [x11]2163; -O0:    subs w9, w8, w9, uxth2164;2165; -O1-LABEL: atomicrmw_and_i16_aligned_acquire:2166; -O1:    ldaxrh w8, [x0]2167; -O1:    and w9, w8, w12168; -O1:    stxrh w10, w9, [x0]2169    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 22170    ret i16 %r2171}2172 2173define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) {2174; -O0-LABEL: atomicrmw_and_i16_aligned_release:2175; -O0:    and w12, w9, w82176; -O0:    ldaxrh w8, [x11]2177; -O0:    cmp w8, w9, uxth2178; -O0:    stlxrh w10, w12, [x11]2179; -O0:    subs w9, w8, w9, uxth2180;2181; -O1-LABEL: atomicrmw_and_i16_aligned_release:2182; -O1:    ldxrh w8, [x0]2183; -O1:    and w9, w8, w12184; -O1:    stlxrh w10, w9, [x0]2185    %r = atomicrmw and ptr %ptr, i16 %value release, align 22186    ret i16 %r2187}2188 2189define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2190; -O0-LABEL: atomicrmw_and_i16_aligned_acq_rel:2191; -O0:    and w12, w9, w82192; -O0:    ldaxrh w8, [x11]2193; -O0:    cmp w8, w9, uxth2194; -O0:    stlxrh w10, w12, [x11]2195; -O0:    subs w9, w8, w9, uxth2196;2197; -O1-LABEL: atomicrmw_and_i16_aligned_acq_rel:2198; -O1:    ldaxrh w8, [x0]2199; -O1:    and w9, w8, w12200; -O1:    stlxrh w10, w9, [x0]2201    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 22202    ret i16 %r2203}2204 2205define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2206; -O0-LABEL: atomicrmw_and_i16_aligned_seq_cst:2207; -O0:    and w12, w9, w82208; -O0:    ldaxrh w8, [x11]2209; -O0:    cmp w8, w9, uxth2210; -O0:    stlxrh w10, w12, [x11]2211; -O0:    subs w9, w8, w9, uxth2212;2213; -O1-LABEL: atomicrmw_and_i16_aligned_seq_cst:2214; -O1:    ldaxrh w8, [x0]2215; -O1:    and w9, w8, w12216; -O1:    stlxrh w10, w9, [x0]2217    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 22218    ret i16 %r2219}2220 2221define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) {2222; -O0-LABEL: atomicrmw_and_i32_aligned_monotonic:2223; -O0:    and w12, w9, w82224; -O0:    ldaxr w8, [x11]2225; -O0:    cmp w8, w92226; -O0:    stlxr w10, w12, [x11]2227; -O0:    subs w9, w8, w92228;2229; -O1-LABEL: atomicrmw_and_i32_aligned_monotonic:2230; -O1:    ldxr w8, [x0]2231; -O1:    and w9, w8, w12232; -O1:    stxr w10, w9, [x0]2233    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 42234    ret i32 %r2235}2236 2237define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) {2238; -O0-LABEL: atomicrmw_and_i32_aligned_acquire:2239; -O0:    and w12, w9, w82240; -O0:    ldaxr w8, [x11]2241; -O0:    cmp w8, w92242; -O0:    stlxr w10, w12, [x11]2243; -O0:    subs w9, w8, w92244;2245; -O1-LABEL: atomicrmw_and_i32_aligned_acquire:2246; -O1:    ldaxr w8, [x0]2247; -O1:    and w9, w8, w12248; -O1:    stxr w10, w9, [x0]2249    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 42250    ret i32 %r2251}2252 2253define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) {2254; -O0-LABEL: atomicrmw_and_i32_aligned_release:2255; -O0:    and w12, w9, w82256; -O0:    ldaxr w8, [x11]2257; -O0:    cmp w8, w92258; -O0:    stlxr w10, w12, [x11]2259; -O0:    subs w9, w8, w92260;2261; -O1-LABEL: atomicrmw_and_i32_aligned_release:2262; -O1:    ldxr w8, [x0]2263; -O1:    and w9, w8, w12264; -O1:    stlxr w10, w9, [x0]2265    %r = atomicrmw and ptr %ptr, i32 %value release, align 42266    ret i32 %r2267}2268 2269define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2270; -O0-LABEL: atomicrmw_and_i32_aligned_acq_rel:2271; -O0:    and w12, w9, w82272; -O0:    ldaxr w8, [x11]2273; -O0:    cmp w8, w92274; -O0:    stlxr w10, w12, [x11]2275; -O0:    subs w9, w8, w92276;2277; -O1-LABEL: atomicrmw_and_i32_aligned_acq_rel:2278; -O1:    ldaxr w8, [x0]2279; -O1:    and w9, w8, w12280; -O1:    stlxr w10, w9, [x0]2281    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 42282    ret i32 %r2283}2284 2285define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2286; -O0-LABEL: atomicrmw_and_i32_aligned_seq_cst:2287; -O0:    and w12, w9, w82288; -O0:    ldaxr w8, [x11]2289; -O0:    cmp w8, w92290; -O0:    stlxr w10, w12, [x11]2291; -O0:    subs w9, w8, w92292;2293; -O1-LABEL: atomicrmw_and_i32_aligned_seq_cst:2294; -O1:    ldaxr w8, [x0]2295; -O1:    and w9, w8, w12296; -O1:    stlxr w10, w9, [x0]2297    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 42298    ret i32 %r2299}2300 2301define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) {2302; -O0-LABEL: atomicrmw_and_i64_aligned_monotonic:2303; -O0:    and x12, x9, x82304; -O0:    ldaxr x8, [x11]2305; -O0:    cmp x8, x92306; -O0:    stlxr w10, x12, [x11]2307; -O0:    subs x9, x8, x92308;2309; -O1-LABEL: atomicrmw_and_i64_aligned_monotonic:2310; -O1:    ldxr x0, [x8]2311; -O1:    and x9, x0, x12312; -O1:    stxr w10, x9, [x8]2313    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 82314    ret i64 %r2315}2316 2317define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) {2318; -O0-LABEL: atomicrmw_and_i64_aligned_acquire:2319; -O0:    and x12, x9, x82320; -O0:    ldaxr x8, [x11]2321; -O0:    cmp x8, x92322; -O0:    stlxr w10, x12, [x11]2323; -O0:    subs x9, x8, x92324;2325; -O1-LABEL: atomicrmw_and_i64_aligned_acquire:2326; -O1:    ldaxr x0, [x8]2327; -O1:    and x9, x0, x12328; -O1:    stxr w10, x9, [x8]2329    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 82330    ret i64 %r2331}2332 2333define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) {2334; -O0-LABEL: atomicrmw_and_i64_aligned_release:2335; -O0:    and x12, x9, x82336; -O0:    ldaxr x8, [x11]2337; -O0:    cmp x8, x92338; -O0:    stlxr w10, x12, [x11]2339; -O0:    subs x9, x8, x92340;2341; -O1-LABEL: atomicrmw_and_i64_aligned_release:2342; -O1:    ldxr x0, [x8]2343; -O1:    and x9, x0, x12344; -O1:    stlxr w10, x9, [x8]2345    %r = atomicrmw and ptr %ptr, i64 %value release, align 82346    ret i64 %r2347}2348 2349define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2350; -O0-LABEL: atomicrmw_and_i64_aligned_acq_rel:2351; -O0:    and x12, x9, x82352; -O0:    ldaxr x8, [x11]2353; -O0:    cmp x8, x92354; -O0:    stlxr w10, x12, [x11]2355; -O0:    subs x9, x8, x92356;2357; -O1-LABEL: atomicrmw_and_i64_aligned_acq_rel:2358; -O1:    ldaxr x0, [x8]2359; -O1:    and x9, x0, x12360; -O1:    stlxr w10, x9, [x8]2361    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 82362    ret i64 %r2363}2364 2365define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2366; -O0-LABEL: atomicrmw_and_i64_aligned_seq_cst:2367; -O0:    and x12, x9, x82368; -O0:    ldaxr x8, [x11]2369; -O0:    cmp x8, x92370; -O0:    stlxr w10, x12, [x11]2371; -O0:    subs x9, x8, x92372;2373; -O1-LABEL: atomicrmw_and_i64_aligned_seq_cst:2374; -O1:    ldaxr x0, [x8]2375; -O1:    and x9, x0, x12376; -O1:    stlxr w10, x9, [x8]2377    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 82378    ret i64 %r2379}2380 2381define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) {2382; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic:2383; -O0:    and x15, x13, x102384; -O0:    and x14, x11, x82385; -O0:    ldxp x10, x12, [x9]2386; -O0:    cmp x10, x112387; -O0:    cmp x12, x132388; -O0:    stxp w8, x14, x15, [x9]2389; -O0:    stxp w8, x10, x12, [x9]2390; -O0:    subs x12, x12, x132391; -O0:    ccmp x10, x11, #0, eq2392;2393; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic:2394; -O1:    ldxp x1, x0, [x8]2395; -O1:    and x9, x0, x22396; -O1:    and x10, x1, x32397; -O1:    stxp w11, x10, x9, [x8]2398    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 162399    ret i128 %r2400}2401 2402define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) {2403; -O0-LABEL: atomicrmw_and_i128_aligned_acquire:2404; -O0:    and x15, x13, x102405; -O0:    and x14, x11, x82406; -O0:    ldaxp x10, x12, [x9]2407; -O0:    cmp x10, x112408; -O0:    cmp x12, x132409; -O0:    stxp w8, x14, x15, [x9]2410; -O0:    stxp w8, x10, x12, [x9]2411; -O0:    subs x12, x12, x132412; -O0:    ccmp x10, x11, #0, eq2413;2414; -O1-LABEL: atomicrmw_and_i128_aligned_acquire:2415; -O1:    ldaxp x1, x0, [x8]2416; -O1:    and x9, x0, x22417; -O1:    and x10, x1, x32418; -O1:    stxp w11, x10, x9, [x8]2419    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 162420    ret i128 %r2421}2422 2423define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) {2424; -O0-LABEL: atomicrmw_and_i128_aligned_release:2425; -O0:    and x15, x13, x102426; -O0:    and x14, x11, x82427; -O0:    ldxp x10, x12, [x9]2428; -O0:    cmp x10, x112429; -O0:    cmp x12, x132430; -O0:    stlxp w8, x14, x15, [x9]2431; -O0:    stlxp w8, x10, x12, [x9]2432; -O0:    subs x12, x12, x132433; -O0:    ccmp x10, x11, #0, eq2434;2435; -O1-LABEL: atomicrmw_and_i128_aligned_release:2436; -O1:    ldxp x1, x0, [x8]2437; -O1:    and x9, x0, x22438; -O1:    and x10, x1, x32439; -O1:    stlxp w11, x10, x9, [x8]2440    %r = atomicrmw and ptr %ptr, i128 %value release, align 162441    ret i128 %r2442}2443 2444define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2445; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel:2446; -O0:    and x15, x13, x102447; -O0:    and x14, x11, x82448; -O0:    ldaxp x10, x12, [x9]2449; -O0:    cmp x10, x112450; -O0:    cmp x12, x132451; -O0:    stlxp w8, x14, x15, [x9]2452; -O0:    stlxp w8, x10, x12, [x9]2453; -O0:    subs x12, x12, x132454; -O0:    ccmp x10, x11, #0, eq2455;2456; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel:2457; -O1:    ldaxp x1, x0, [x8]2458; -O1:    and x9, x0, x22459; -O1:    and x10, x1, x32460; -O1:    stlxp w11, x10, x9, [x8]2461    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 162462    ret i128 %r2463}2464 2465define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) {2466; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst:2467; -O0:    and x15, x13, x102468; -O0:    and x14, x11, x82469; -O0:    ldaxp x10, x12, [x9]2470; -O0:    cmp x10, x112471; -O0:    cmp x12, x132472; -O0:    stlxp w8, x14, x15, [x9]2473; -O0:    stlxp w8, x10, x12, [x9]2474; -O0:    subs x12, x12, x132475; -O0:    ccmp x10, x11, #0, eq2476;2477; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst:2478; -O1:    ldaxp x1, x0, [x8]2479; -O1:    and x9, x0, x22480; -O1:    and x10, x1, x32481; -O1:    stlxp w11, x10, x9, [x8]2482    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 162483    ret i128 %r2484}2485 2486define dso_local i8 @atomicrmw_and_i8_unaligned_monotonic(ptr %ptr, i8 %value) {2487; -O0-LABEL: atomicrmw_and_i8_unaligned_monotonic:2488; -O0:    and w12, w9, w82489; -O0:    ldaxrb w8, [x11]2490; -O0:    cmp w8, w9, uxtb2491; -O0:    stlxrb w10, w12, [x11]2492; -O0:    subs w9, w8, w9, uxtb2493;2494; -O1-LABEL: atomicrmw_and_i8_unaligned_monotonic:2495; -O1:    ldxrb w8, [x0]2496; -O1:    and w9, w8, w12497; -O1:    stxrb w10, w9, [x0]2498    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 12499    ret i8 %r2500}2501 2502define dso_local i8 @atomicrmw_and_i8_unaligned_acquire(ptr %ptr, i8 %value) {2503; -O0-LABEL: atomicrmw_and_i8_unaligned_acquire:2504; -O0:    and w12, w9, w82505; -O0:    ldaxrb w8, [x11]2506; -O0:    cmp w8, w9, uxtb2507; -O0:    stlxrb w10, w12, [x11]2508; -O0:    subs w9, w8, w9, uxtb2509;2510; -O1-LABEL: atomicrmw_and_i8_unaligned_acquire:2511; -O1:    ldaxrb w8, [x0]2512; -O1:    and w9, w8, w12513; -O1:    stxrb w10, w9, [x0]2514    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 12515    ret i8 %r2516}2517 2518define dso_local i8 @atomicrmw_and_i8_unaligned_release(ptr %ptr, i8 %value) {2519; -O0-LABEL: atomicrmw_and_i8_unaligned_release:2520; -O0:    and w12, w9, w82521; -O0:    ldaxrb w8, [x11]2522; -O0:    cmp w8, w9, uxtb2523; -O0:    stlxrb w10, w12, [x11]2524; -O0:    subs w9, w8, w9, uxtb2525;2526; -O1-LABEL: atomicrmw_and_i8_unaligned_release:2527; -O1:    ldxrb w8, [x0]2528; -O1:    and w9, w8, w12529; -O1:    stlxrb w10, w9, [x0]2530    %r = atomicrmw and ptr %ptr, i8 %value release, align 12531    ret i8 %r2532}2533 2534define dso_local i8 @atomicrmw_and_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {2535; -O0-LABEL: atomicrmw_and_i8_unaligned_acq_rel:2536; -O0:    and w12, w9, w82537; -O0:    ldaxrb w8, [x11]2538; -O0:    cmp w8, w9, uxtb2539; -O0:    stlxrb w10, w12, [x11]2540; -O0:    subs w9, w8, w9, uxtb2541;2542; -O1-LABEL: atomicrmw_and_i8_unaligned_acq_rel:2543; -O1:    ldaxrb w8, [x0]2544; -O1:    and w9, w8, w12545; -O1:    stlxrb w10, w9, [x0]2546    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 12547    ret i8 %r2548}2549 2550define dso_local i8 @atomicrmw_and_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {2551; -O0-LABEL: atomicrmw_and_i8_unaligned_seq_cst:2552; -O0:    and w12, w9, w82553; -O0:    ldaxrb w8, [x11]2554; -O0:    cmp w8, w9, uxtb2555; -O0:    stlxrb w10, w12, [x11]2556; -O0:    subs w9, w8, w9, uxtb2557;2558; -O1-LABEL: atomicrmw_and_i8_unaligned_seq_cst:2559; -O1:    ldaxrb w8, [x0]2560; -O1:    and w9, w8, w12561; -O1:    stlxrb w10, w9, [x0]2562    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 12563    ret i8 %r2564}2565 2566define dso_local i16 @atomicrmw_and_i16_unaligned_monotonic(ptr %ptr, i16 %value) {2567; -O0-LABEL: atomicrmw_and_i16_unaligned_monotonic:2568; -O0:    and w8, w9, w82569; -O0:    bl __atomic_compare_exchange2570;2571; -O1-LABEL: atomicrmw_and_i16_unaligned_monotonic:2572; -O1:    and w8, w0, w202573; -O1:    bl __atomic_compare_exchange2574    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 12575    ret i16 %r2576}2577 2578define dso_local i16 @atomicrmw_and_i16_unaligned_acquire(ptr %ptr, i16 %value) {2579; -O0-LABEL: atomicrmw_and_i16_unaligned_acquire:2580; -O0:    and w8, w9, w82581; -O0:    bl __atomic_compare_exchange2582;2583; -O1-LABEL: atomicrmw_and_i16_unaligned_acquire:2584; -O1:    and w8, w0, w202585; -O1:    bl __atomic_compare_exchange2586    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 12587    ret i16 %r2588}2589 2590define dso_local i16 @atomicrmw_and_i16_unaligned_release(ptr %ptr, i16 %value) {2591; -O0-LABEL: atomicrmw_and_i16_unaligned_release:2592; -O0:    and w8, w9, w82593; -O0:    bl __atomic_compare_exchange2594;2595; -O1-LABEL: atomicrmw_and_i16_unaligned_release:2596; -O1:    and w8, w0, w202597; -O1:    bl __atomic_compare_exchange2598    %r = atomicrmw and ptr %ptr, i16 %value release, align 12599    ret i16 %r2600}2601 2602define dso_local i16 @atomicrmw_and_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {2603; -O0-LABEL: atomicrmw_and_i16_unaligned_acq_rel:2604; -O0:    and w8, w9, w82605; -O0:    bl __atomic_compare_exchange2606;2607; -O1-LABEL: atomicrmw_and_i16_unaligned_acq_rel:2608; -O1:    and w8, w0, w202609; -O1:    bl __atomic_compare_exchange2610    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 12611    ret i16 %r2612}2613 2614define dso_local i16 @atomicrmw_and_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {2615; -O0-LABEL: atomicrmw_and_i16_unaligned_seq_cst:2616; -O0:    and w8, w9, w82617; -O0:    bl __atomic_compare_exchange2618;2619; -O1-LABEL: atomicrmw_and_i16_unaligned_seq_cst:2620; -O1:    and w8, w0, w202621; -O1:    bl __atomic_compare_exchange2622    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 12623    ret i16 %r2624}2625 2626define dso_local i32 @atomicrmw_and_i32_unaligned_monotonic(ptr %ptr, i32 %value) {2627; -O0-LABEL: atomicrmw_and_i32_unaligned_monotonic:2628; -O0:    and w8, w9, w82629; -O0:    bl __atomic_compare_exchange2630;2631; -O1-LABEL: atomicrmw_and_i32_unaligned_monotonic:2632; -O1:    and w8, w0, w202633; -O1:    bl __atomic_compare_exchange2634    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 12635    ret i32 %r2636}2637 2638define dso_local i32 @atomicrmw_and_i32_unaligned_acquire(ptr %ptr, i32 %value) {2639; -O0-LABEL: atomicrmw_and_i32_unaligned_acquire:2640; -O0:    and w8, w9, w82641; -O0:    bl __atomic_compare_exchange2642;2643; -O1-LABEL: atomicrmw_and_i32_unaligned_acquire:2644; -O1:    and w8, w0, w202645; -O1:    bl __atomic_compare_exchange2646    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 12647    ret i32 %r2648}2649 2650define dso_local i32 @atomicrmw_and_i32_unaligned_release(ptr %ptr, i32 %value) {2651; -O0-LABEL: atomicrmw_and_i32_unaligned_release:2652; -O0:    and w8, w9, w82653; -O0:    bl __atomic_compare_exchange2654;2655; -O1-LABEL: atomicrmw_and_i32_unaligned_release:2656; -O1:    and w8, w0, w202657; -O1:    bl __atomic_compare_exchange2658    %r = atomicrmw and ptr %ptr, i32 %value release, align 12659    ret i32 %r2660}2661 2662define dso_local i32 @atomicrmw_and_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {2663; -O0-LABEL: atomicrmw_and_i32_unaligned_acq_rel:2664; -O0:    and w8, w9, w82665; -O0:    bl __atomic_compare_exchange2666;2667; -O1-LABEL: atomicrmw_and_i32_unaligned_acq_rel:2668; -O1:    and w8, w0, w202669; -O1:    bl __atomic_compare_exchange2670    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 12671    ret i32 %r2672}2673 2674define dso_local i32 @atomicrmw_and_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {2675; -O0-LABEL: atomicrmw_and_i32_unaligned_seq_cst:2676; -O0:    and w8, w9, w82677; -O0:    bl __atomic_compare_exchange2678;2679; -O1-LABEL: atomicrmw_and_i32_unaligned_seq_cst:2680; -O1:    and w8, w0, w202681; -O1:    bl __atomic_compare_exchange2682    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 12683    ret i32 %r2684}2685 2686define dso_local i64 @atomicrmw_and_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2687; -O0-LABEL: atomicrmw_and_i64_unaligned_monotonic:2688; -O0:    and x8, x9, x82689; -O0:    bl __atomic_compare_exchange2690;2691; -O1-LABEL: atomicrmw_and_i64_unaligned_monotonic:2692; -O1:    and x8, x0, x202693; -O1:    bl __atomic_compare_exchange2694    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 12695    ret i64 %r2696}2697 2698define dso_local i64 @atomicrmw_and_i64_unaligned_acquire(ptr %ptr, i64 %value) {2699; -O0-LABEL: atomicrmw_and_i64_unaligned_acquire:2700; -O0:    and x8, x9, x82701; -O0:    bl __atomic_compare_exchange2702;2703; -O1-LABEL: atomicrmw_and_i64_unaligned_acquire:2704; -O1:    and x8, x0, x202705; -O1:    bl __atomic_compare_exchange2706    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 12707    ret i64 %r2708}2709 2710define dso_local i64 @atomicrmw_and_i64_unaligned_release(ptr %ptr, i64 %value) {2711; -O0-LABEL: atomicrmw_and_i64_unaligned_release:2712; -O0:    and x8, x9, x82713; -O0:    bl __atomic_compare_exchange2714;2715; -O1-LABEL: atomicrmw_and_i64_unaligned_release:2716; -O1:    and x8, x0, x202717; -O1:    bl __atomic_compare_exchange2718    %r = atomicrmw and ptr %ptr, i64 %value release, align 12719    ret i64 %r2720}2721 2722define dso_local i64 @atomicrmw_and_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2723; -O0-LABEL: atomicrmw_and_i64_unaligned_acq_rel:2724; -O0:    and x8, x9, x82725; -O0:    bl __atomic_compare_exchange2726;2727; -O1-LABEL: atomicrmw_and_i64_unaligned_acq_rel:2728; -O1:    and x8, x0, x202729; -O1:    bl __atomic_compare_exchange2730    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 12731    ret i64 %r2732}2733 2734define dso_local i64 @atomicrmw_and_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2735; -O0-LABEL: atomicrmw_and_i64_unaligned_seq_cst:2736; -O0:    and x8, x9, x82737; -O0:    bl __atomic_compare_exchange2738;2739; -O1-LABEL: atomicrmw_and_i64_unaligned_seq_cst:2740; -O1:    and x8, x0, x202741; -O1:    bl __atomic_compare_exchange2742    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 12743    ret i64 %r2744}2745 2746define dso_local i128 @atomicrmw_and_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2747; -O0-LABEL: atomicrmw_and_i128_unaligned_monotonic:2748; -O0:    and x8, x11, x82749; -O0:    and x9, x10, x92750; -O0:    bl __atomic_compare_exchange2751;2752; -O1-LABEL: atomicrmw_and_i128_unaligned_monotonic:2753; -O1:    ldp x0, x1, [x0]2754; -O1:    and x8, x1, x192755; -O1:    and x9, x0, x212756; -O1:    bl __atomic_compare_exchange2757    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 12758    ret i128 %r2759}2760 2761define dso_local i128 @atomicrmw_and_i128_unaligned_acquire(ptr %ptr, i128 %value) {2762; -O0-LABEL: atomicrmw_and_i128_unaligned_acquire:2763; -O0:    and x8, x11, x82764; -O0:    and x9, x10, x92765; -O0:    bl __atomic_compare_exchange2766;2767; -O1-LABEL: atomicrmw_and_i128_unaligned_acquire:2768; -O1:    ldp x0, x1, [x0]2769; -O1:    and x8, x1, x192770; -O1:    and x9, x0, x212771; -O1:    bl __atomic_compare_exchange2772    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 12773    ret i128 %r2774}2775 2776define dso_local i128 @atomicrmw_and_i128_unaligned_release(ptr %ptr, i128 %value) {2777; -O0-LABEL: atomicrmw_and_i128_unaligned_release:2778; -O0:    and x8, x11, x82779; -O0:    and x9, x10, x92780; -O0:    bl __atomic_compare_exchange2781;2782; -O1-LABEL: atomicrmw_and_i128_unaligned_release:2783; -O1:    ldp x0, x1, [x0]2784; -O1:    and x8, x1, x192785; -O1:    and x9, x0, x212786; -O1:    bl __atomic_compare_exchange2787    %r = atomicrmw and ptr %ptr, i128 %value release, align 12788    ret i128 %r2789}2790 2791define dso_local i128 @atomicrmw_and_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2792; -O0-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2793; -O0:    and x8, x11, x82794; -O0:    and x9, x10, x92795; -O0:    bl __atomic_compare_exchange2796;2797; -O1-LABEL: atomicrmw_and_i128_unaligned_acq_rel:2798; -O1:    ldp x0, x1, [x0]2799; -O1:    and x8, x1, x192800; -O1:    and x9, x0, x212801; -O1:    bl __atomic_compare_exchange2802    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 12803    ret i128 %r2804}2805 2806define dso_local i128 @atomicrmw_and_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2807; -O0-LABEL: atomicrmw_and_i128_unaligned_seq_cst:2808; -O0:    and x8, x11, x82809; -O0:    and x9, x10, x92810; -O0:    bl __atomic_compare_exchange2811;2812; -O1-LABEL: atomicrmw_and_i128_unaligned_seq_cst:2813; -O1:    ldp x0, x1, [x0]2814; -O1:    and x8, x1, x192815; -O1:    and x9, x0, x212816; -O1:    bl __atomic_compare_exchange2817    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 12818    ret i128 %r2819}2820 2821define dso_local i8 @atomicrmw_nand_i8_aligned_monotonic(ptr %ptr, i8 %value) {2822; -O0-LABEL: atomicrmw_nand_i8_aligned_monotonic:2823; -O0:    and w8, w9, w82824; -O0:    mvn w12, w82825; -O0:    ldaxrb w8, [x11]2826; -O0:    cmp w8, w9, uxtb2827; -O0:    stlxrb w10, w12, [x11]2828; -O0:    subs w9, w8, w9, uxtb2829;2830; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic:2831; -O1:    ldxrb w8, [x0]2832; -O1:    and w9, w8, w12833; -O1:    mvn w9, w92834; -O1:    stxrb w10, w9, [x0]2835    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12836    ret i8 %r2837}2838 2839define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) {2840; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire:2841; -O0:    and w8, w9, w82842; -O0:    mvn w12, w82843; -O0:    ldaxrb w8, [x11]2844; -O0:    cmp w8, w9, uxtb2845; -O0:    stlxrb w10, w12, [x11]2846; -O0:    subs w9, w8, w9, uxtb2847;2848; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire:2849; -O1:    ldaxrb w8, [x0]2850; -O1:    and w9, w8, w12851; -O1:    mvn w9, w92852; -O1:    stxrb w10, w9, [x0]2853    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12854    ret i8 %r2855}2856 2857define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) {2858; -O0-LABEL: atomicrmw_nand_i8_aligned_release:2859; -O0:    and w8, w9, w82860; -O0:    mvn w12, w82861; -O0:    ldaxrb w8, [x11]2862; -O0:    cmp w8, w9, uxtb2863; -O0:    stlxrb w10, w12, [x11]2864; -O0:    subs w9, w8, w9, uxtb2865;2866; -O1-LABEL: atomicrmw_nand_i8_aligned_release:2867; -O1:    ldxrb w8, [x0]2868; -O1:    and w9, w8, w12869; -O1:    mvn w9, w92870; -O1:    stlxrb w10, w9, [x0]2871    %r = atomicrmw nand ptr %ptr, i8 %value release, align 12872    ret i8 %r2873}2874 2875define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2876; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2877; -O0:    and w8, w9, w82878; -O0:    mvn w12, w82879; -O0:    ldaxrb w8, [x11]2880; -O0:    cmp w8, w9, uxtb2881; -O0:    stlxrb w10, w12, [x11]2882; -O0:    subs w9, w8, w9, uxtb2883;2884; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2885; -O1:    ldaxrb w8, [x0]2886; -O1:    and w9, w8, w12887; -O1:    mvn w9, w92888; -O1:    stlxrb w10, w9, [x0]2889    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12890    ret i8 %r2891}2892 2893define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2894; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2895; -O0:    and w8, w9, w82896; -O0:    mvn w12, w82897; -O0:    ldaxrb w8, [x11]2898; -O0:    cmp w8, w9, uxtb2899; -O0:    stlxrb w10, w12, [x11]2900; -O0:    subs w9, w8, w9, uxtb2901;2902; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2903; -O1:    ldaxrb w8, [x0]2904; -O1:    and w9, w8, w12905; -O1:    mvn w9, w92906; -O1:    stlxrb w10, w9, [x0]2907    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12908    ret i8 %r2909}2910 2911define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) {2912; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic:2913; -O0:    and w8, w9, w82914; -O0:    mvn w12, w82915; -O0:    ldaxrh w8, [x11]2916; -O0:    cmp w8, w9, uxth2917; -O0:    stlxrh w10, w12, [x11]2918; -O0:    subs w9, w8, w9, uxth2919;2920; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic:2921; -O1:    ldxrh w8, [x0]2922; -O1:    and w9, w8, w12923; -O1:    mvn w9, w92924; -O1:    stxrh w10, w9, [x0]2925    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 22926    ret i16 %r2927}2928 2929define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) {2930; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire:2931; -O0:    and w8, w9, w82932; -O0:    mvn w12, w82933; -O0:    ldaxrh w8, [x11]2934; -O0:    cmp w8, w9, uxth2935; -O0:    stlxrh w10, w12, [x11]2936; -O0:    subs w9, w8, w9, uxth2937;2938; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire:2939; -O1:    ldaxrh w8, [x0]2940; -O1:    and w9, w8, w12941; -O1:    mvn w9, w92942; -O1:    stxrh w10, w9, [x0]2943    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 22944    ret i16 %r2945}2946 2947define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) {2948; -O0-LABEL: atomicrmw_nand_i16_aligned_release:2949; -O0:    and w8, w9, w82950; -O0:    mvn w12, w82951; -O0:    ldaxrh w8, [x11]2952; -O0:    cmp w8, w9, uxth2953; -O0:    stlxrh w10, w12, [x11]2954; -O0:    subs w9, w8, w9, uxth2955;2956; -O1-LABEL: atomicrmw_nand_i16_aligned_release:2957; -O1:    ldxrh w8, [x0]2958; -O1:    and w9, w8, w12959; -O1:    mvn w9, w92960; -O1:    stlxrh w10, w9, [x0]2961    %r = atomicrmw nand ptr %ptr, i16 %value release, align 22962    ret i16 %r2963}2964 2965define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2966; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2967; -O0:    and w8, w9, w82968; -O0:    mvn w12, w82969; -O0:    ldaxrh w8, [x11]2970; -O0:    cmp w8, w9, uxth2971; -O0:    stlxrh w10, w12, [x11]2972; -O0:    subs w9, w8, w9, uxth2973;2974; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2975; -O1:    ldaxrh w8, [x0]2976; -O1:    and w9, w8, w12977; -O1:    mvn w9, w92978; -O1:    stlxrh w10, w9, [x0]2979    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 22980    ret i16 %r2981}2982 2983define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2984; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2985; -O0:    and w8, w9, w82986; -O0:    mvn w12, w82987; -O0:    ldaxrh w8, [x11]2988; -O0:    cmp w8, w9, uxth2989; -O0:    stlxrh w10, w12, [x11]2990; -O0:    subs w9, w8, w9, uxth2991;2992; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2993; -O1:    ldaxrh w8, [x0]2994; -O1:    and w9, w8, w12995; -O1:    mvn w9, w92996; -O1:    stlxrh w10, w9, [x0]2997    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 22998    ret i16 %r2999}3000 3001define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) {3002; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic:3003; -O0:    and w8, w9, w83004; -O0:    mvn w12, w83005; -O0:    ldaxr w8, [x11]3006; -O0:    cmp w8, w93007; -O0:    stlxr w10, w12, [x11]3008; -O0:    subs w9, w8, w93009;3010; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic:3011; -O1:    ldxr w8, [x0]3012; -O1:    and w9, w8, w13013; -O1:    mvn w9, w93014; -O1:    stxr w10, w9, [x0]3015    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 43016    ret i32 %r3017}3018 3019define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) {3020; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire:3021; -O0:    and w8, w9, w83022; -O0:    mvn w12, w83023; -O0:    ldaxr w8, [x11]3024; -O0:    cmp w8, w93025; -O0:    stlxr w10, w12, [x11]3026; -O0:    subs w9, w8, w93027;3028; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire:3029; -O1:    ldaxr w8, [x0]3030; -O1:    and w9, w8, w13031; -O1:    mvn w9, w93032; -O1:    stxr w10, w9, [x0]3033    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 43034    ret i32 %r3035}3036 3037define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) {3038; -O0-LABEL: atomicrmw_nand_i32_aligned_release:3039; -O0:    and w8, w9, w83040; -O0:    mvn w12, w83041; -O0:    ldaxr w8, [x11]3042; -O0:    cmp w8, w93043; -O0:    stlxr w10, w12, [x11]3044; -O0:    subs w9, w8, w93045;3046; -O1-LABEL: atomicrmw_nand_i32_aligned_release:3047; -O1:    ldxr w8, [x0]3048; -O1:    and w9, w8, w13049; -O1:    mvn w9, w93050; -O1:    stlxr w10, w9, [x0]3051    %r = atomicrmw nand ptr %ptr, i32 %value release, align 43052    ret i32 %r3053}3054 3055define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3056; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel:3057; -O0:    and w8, w9, w83058; -O0:    mvn w12, w83059; -O0:    ldaxr w8, [x11]3060; -O0:    cmp w8, w93061; -O0:    stlxr w10, w12, [x11]3062; -O0:    subs w9, w8, w93063;3064; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel:3065; -O1:    ldaxr w8, [x0]3066; -O1:    and w9, w8, w13067; -O1:    mvn w9, w93068; -O1:    stlxr w10, w9, [x0]3069    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 43070    ret i32 %r3071}3072 3073define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3074; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst:3075; -O0:    and w8, w9, w83076; -O0:    mvn w12, w83077; -O0:    ldaxr w8, [x11]3078; -O0:    cmp w8, w93079; -O0:    stlxr w10, w12, [x11]3080; -O0:    subs w9, w8, w93081;3082; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst:3083; -O1:    ldaxr w8, [x0]3084; -O1:    and w9, w8, w13085; -O1:    mvn w9, w93086; -O1:    stlxr w10, w9, [x0]3087    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 43088    ret i32 %r3089}3090 3091define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) {3092; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic:3093; -O0:    and x8, x9, x83094; -O0:    mvn x12, x83095; -O0:    ldaxr x8, [x11]3096; -O0:    cmp x8, x93097; -O0:    stlxr w10, x12, [x11]3098; -O0:    subs x9, x8, x93099;3100; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic:3101; -O1:    ldxr x0, [x8]3102; -O1:    and x9, x0, x13103; -O1:    mvn x9, x93104; -O1:    stxr w10, x9, [x8]3105    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 83106    ret i64 %r3107}3108 3109define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) {3110; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire:3111; -O0:    and x8, x9, x83112; -O0:    mvn x12, x83113; -O0:    ldaxr x8, [x11]3114; -O0:    cmp x8, x93115; -O0:    stlxr w10, x12, [x11]3116; -O0:    subs x9, x8, x93117;3118; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire:3119; -O1:    ldaxr x0, [x8]3120; -O1:    and x9, x0, x13121; -O1:    mvn x9, x93122; -O1:    stxr w10, x9, [x8]3123    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 83124    ret i64 %r3125}3126 3127define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) {3128; -O0-LABEL: atomicrmw_nand_i64_aligned_release:3129; -O0:    and x8, x9, x83130; -O0:    mvn x12, x83131; -O0:    ldaxr x8, [x11]3132; -O0:    cmp x8, x93133; -O0:    stlxr w10, x12, [x11]3134; -O0:    subs x9, x8, x93135;3136; -O1-LABEL: atomicrmw_nand_i64_aligned_release:3137; -O1:    ldxr x0, [x8]3138; -O1:    and x9, x0, x13139; -O1:    mvn x9, x93140; -O1:    stlxr w10, x9, [x8]3141    %r = atomicrmw nand ptr %ptr, i64 %value release, align 83142    ret i64 %r3143}3144 3145define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3146; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel:3147; -O0:    and x8, x9, x83148; -O0:    mvn x12, x83149; -O0:    ldaxr x8, [x11]3150; -O0:    cmp x8, x93151; -O0:    stlxr w10, x12, [x11]3152; -O0:    subs x9, x8, x93153;3154; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel:3155; -O1:    ldaxr x0, [x8]3156; -O1:    and x9, x0, x13157; -O1:    mvn x9, x93158; -O1:    stlxr w10, x9, [x8]3159    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 83160    ret i64 %r3161}3162 3163define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3164; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst:3165; -O0:    and x8, x9, x83166; -O0:    mvn x12, x83167; -O0:    ldaxr x8, [x11]3168; -O0:    cmp x8, x93169; -O0:    stlxr w10, x12, [x11]3170; -O0:    subs x9, x8, x93171;3172; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst:3173; -O1:    ldaxr x0, [x8]3174; -O1:    and x9, x0, x13175; -O1:    mvn x9, x93176; -O1:    stlxr w10, x9, [x8]3177    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 83178    ret i64 %r3179}3180 3181define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) {3182; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic:3183; -O0:    and x8, x11, x83184; -O0:    and x10, x13, x103185; -O0:    mvn x15, x103186; -O0:    mvn x14, x83187; -O0:    ldxp x10, x12, [x9]3188; -O0:    cmp x10, x113189; -O0:    cmp x12, x133190; -O0:    stxp w8, x14, x15, [x9]3191; -O0:    stxp w8, x10, x12, [x9]3192; -O0:    subs x12, x12, x133193; -O0:    ccmp x10, x11, #0, eq3194;3195; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic:3196; -O1:    ldxp x1, x0, [x8]3197; -O1:    and x9, x1, x33198; -O1:    and x10, x0, x23199; -O1:    mvn x10, x103200; -O1:    mvn x9, x93201; -O1:    stxp w11, x9, x10, [x8]3202    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 163203    ret i128 %r3204}3205 3206define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) {3207; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire:3208; -O0:    and x8, x11, x83209; -O0:    and x10, x13, x103210; -O0:    mvn x15, x103211; -O0:    mvn x14, x83212; -O0:    ldaxp x10, x12, [x9]3213; -O0:    cmp x10, x113214; -O0:    cmp x12, x133215; -O0:    stxp w8, x14, x15, [x9]3216; -O0:    stxp w8, x10, x12, [x9]3217; -O0:    subs x12, x12, x133218; -O0:    ccmp x10, x11, #0, eq3219;3220; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire:3221; -O1:    ldaxp x1, x0, [x8]3222; -O1:    and x9, x1, x33223; -O1:    and x10, x0, x23224; -O1:    mvn x10, x103225; -O1:    mvn x9, x93226; -O1:    stxp w11, x9, x10, [x8]3227    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 163228    ret i128 %r3229}3230 3231define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) {3232; -O0-LABEL: atomicrmw_nand_i128_aligned_release:3233; -O0:    and x8, x11, x83234; -O0:    and x10, x13, x103235; -O0:    mvn x15, x103236; -O0:    mvn x14, x83237; -O0:    ldxp x10, x12, [x9]3238; -O0:    cmp x10, x113239; -O0:    cmp x12, x133240; -O0:    stlxp w8, x14, x15, [x9]3241; -O0:    stlxp w8, x10, x12, [x9]3242; -O0:    subs x12, x12, x133243; -O0:    ccmp x10, x11, #0, eq3244;3245; -O1-LABEL: atomicrmw_nand_i128_aligned_release:3246; -O1:    ldxp x1, x0, [x8]3247; -O1:    and x9, x1, x33248; -O1:    and x10, x0, x23249; -O1:    mvn x10, x103250; -O1:    mvn x9, x93251; -O1:    stlxp w11, x9, x10, [x8]3252    %r = atomicrmw nand ptr %ptr, i128 %value release, align 163253    ret i128 %r3254}3255 3256define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3257; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel:3258; -O0:    and x8, x11, x83259; -O0:    and x10, x13, x103260; -O0:    mvn x15, x103261; -O0:    mvn x14, x83262; -O0:    ldaxp x10, x12, [x9]3263; -O0:    cmp x10, x113264; -O0:    cmp x12, x133265; -O0:    stlxp w8, x14, x15, [x9]3266; -O0:    stlxp w8, x10, x12, [x9]3267; -O0:    subs x12, x12, x133268; -O0:    ccmp x10, x11, #0, eq3269;3270; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel:3271; -O1:    ldaxp x1, x0, [x8]3272; -O1:    and x9, x1, x33273; -O1:    and x10, x0, x23274; -O1:    mvn x10, x103275; -O1:    mvn x9, x93276; -O1:    stlxp w11, x9, x10, [x8]3277    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 163278    ret i128 %r3279}3280 3281define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3282; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst:3283; -O0:    and x8, x11, x83284; -O0:    and x10, x13, x103285; -O0:    mvn x15, x103286; -O0:    mvn x14, x83287; -O0:    ldaxp x10, x12, [x9]3288; -O0:    cmp x10, x113289; -O0:    cmp x12, x133290; -O0:    stlxp w8, x14, x15, [x9]3291; -O0:    stlxp w8, x10, x12, [x9]3292; -O0:    subs x12, x12, x133293; -O0:    ccmp x10, x11, #0, eq3294;3295; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst:3296; -O1:    ldaxp x1, x0, [x8]3297; -O1:    and x9, x1, x33298; -O1:    and x10, x0, x23299; -O1:    mvn x10, x103300; -O1:    mvn x9, x93301; -O1:    stlxp w11, x9, x10, [x8]3302    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 163303    ret i128 %r3304}3305 3306define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3307; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic:3308; -O0:    and w8, w9, w83309; -O0:    mvn w12, w83310; -O0:    ldaxrb w8, [x11]3311; -O0:    cmp w8, w9, uxtb3312; -O0:    stlxrb w10, w12, [x11]3313; -O0:    subs w9, w8, w9, uxtb3314;3315; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic:3316; -O1:    ldxrb w8, [x0]3317; -O1:    and w9, w8, w13318; -O1:    mvn w9, w93319; -O1:    stxrb w10, w9, [x0]3320    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 13321    ret i8 %r3322}3323 3324define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) {3325; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire:3326; -O0:    and w8, w9, w83327; -O0:    mvn w12, w83328; -O0:    ldaxrb w8, [x11]3329; -O0:    cmp w8, w9, uxtb3330; -O0:    stlxrb w10, w12, [x11]3331; -O0:    subs w9, w8, w9, uxtb3332;3333; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire:3334; -O1:    ldaxrb w8, [x0]3335; -O1:    and w9, w8, w13336; -O1:    mvn w9, w93337; -O1:    stxrb w10, w9, [x0]3338    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 13339    ret i8 %r3340}3341 3342define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) {3343; -O0-LABEL: atomicrmw_nand_i8_unaligned_release:3344; -O0:    and w8, w9, w83345; -O0:    mvn w12, w83346; -O0:    ldaxrb w8, [x11]3347; -O0:    cmp w8, w9, uxtb3348; -O0:    stlxrb w10, w12, [x11]3349; -O0:    subs w9, w8, w9, uxtb3350;3351; -O1-LABEL: atomicrmw_nand_i8_unaligned_release:3352; -O1:    ldxrb w8, [x0]3353; -O1:    and w9, w8, w13354; -O1:    mvn w9, w93355; -O1:    stlxrb w10, w9, [x0]3356    %r = atomicrmw nand ptr %ptr, i8 %value release, align 13357    ret i8 %r3358}3359 3360define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3361; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:3362; -O0:    and w8, w9, w83363; -O0:    mvn w12, w83364; -O0:    ldaxrb w8, [x11]3365; -O0:    cmp w8, w9, uxtb3366; -O0:    stlxrb w10, w12, [x11]3367; -O0:    subs w9, w8, w9, uxtb3368;3369; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:3370; -O1:    ldaxrb w8, [x0]3371; -O1:    and w9, w8, w13372; -O1:    mvn w9, w93373; -O1:    stlxrb w10, w9, [x0]3374    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 13375    ret i8 %r3376}3377 3378define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3379; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:3380; -O0:    and w8, w9, w83381; -O0:    mvn w12, w83382; -O0:    ldaxrb w8, [x11]3383; -O0:    cmp w8, w9, uxtb3384; -O0:    stlxrb w10, w12, [x11]3385; -O0:    subs w9, w8, w9, uxtb3386;3387; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:3388; -O1:    ldaxrb w8, [x0]3389; -O1:    and w9, w8, w13390; -O1:    mvn w9, w93391; -O1:    stlxrb w10, w9, [x0]3392    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 13393    ret i8 %r3394}3395 3396define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3397; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic:3398; -O0:    and w8, w9, w83399; -O0:    mvn w8, w83400; -O0:    bl __atomic_compare_exchange3401;3402; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic:3403; -O1:    and w8, w0, w203404; -O1:    mvn w8, w83405; -O1:    bl __atomic_compare_exchange3406    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 13407    ret i16 %r3408}3409 3410define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) {3411; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire:3412; -O0:    and w8, w9, w83413; -O0:    mvn w8, w83414; -O0:    bl __atomic_compare_exchange3415;3416; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire:3417; -O1:    and w8, w0, w203418; -O1:    mvn w8, w83419; -O1:    bl __atomic_compare_exchange3420    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 13421    ret i16 %r3422}3423 3424define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) {3425; -O0-LABEL: atomicrmw_nand_i16_unaligned_release:3426; -O0:    and w8, w9, w83427; -O0:    mvn w8, w83428; -O0:    bl __atomic_compare_exchange3429;3430; -O1-LABEL: atomicrmw_nand_i16_unaligned_release:3431; -O1:    and w8, w0, w203432; -O1:    mvn w8, w83433; -O1:    bl __atomic_compare_exchange3434    %r = atomicrmw nand ptr %ptr, i16 %value release, align 13435    ret i16 %r3436}3437 3438define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3439; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:3440; -O0:    and w8, w9, w83441; -O0:    mvn w8, w83442; -O0:    bl __atomic_compare_exchange3443;3444; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:3445; -O1:    and w8, w0, w203446; -O1:    mvn w8, w83447; -O1:    bl __atomic_compare_exchange3448    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 13449    ret i16 %r3450}3451 3452define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3453; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:3454; -O0:    and w8, w9, w83455; -O0:    mvn w8, w83456; -O0:    bl __atomic_compare_exchange3457;3458; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:3459; -O1:    and w8, w0, w203460; -O1:    mvn w8, w83461; -O1:    bl __atomic_compare_exchange3462    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 13463    ret i16 %r3464}3465 3466define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3467; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic:3468; -O0:    and w8, w9, w83469; -O0:    mvn w8, w83470; -O0:    bl __atomic_compare_exchange3471;3472; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic:3473; -O1:    and w8, w0, w203474; -O1:    mvn w8, w83475; -O1:    bl __atomic_compare_exchange3476    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 13477    ret i32 %r3478}3479 3480define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) {3481; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire:3482; -O0:    and w8, w9, w83483; -O0:    mvn w8, w83484; -O0:    bl __atomic_compare_exchange3485;3486; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire:3487; -O1:    and w8, w0, w203488; -O1:    mvn w8, w83489; -O1:    bl __atomic_compare_exchange3490    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 13491    ret i32 %r3492}3493 3494define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) {3495; -O0-LABEL: atomicrmw_nand_i32_unaligned_release:3496; -O0:    and w8, w9, w83497; -O0:    mvn w8, w83498; -O0:    bl __atomic_compare_exchange3499;3500; -O1-LABEL: atomicrmw_nand_i32_unaligned_release:3501; -O1:    and w8, w0, w203502; -O1:    mvn w8, w83503; -O1:    bl __atomic_compare_exchange3504    %r = atomicrmw nand ptr %ptr, i32 %value release, align 13505    ret i32 %r3506}3507 3508define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3509; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:3510; -O0:    and w8, w9, w83511; -O0:    mvn w8, w83512; -O0:    bl __atomic_compare_exchange3513;3514; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:3515; -O1:    and w8, w0, w203516; -O1:    mvn w8, w83517; -O1:    bl __atomic_compare_exchange3518    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 13519    ret i32 %r3520}3521 3522define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3523; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:3524; -O0:    and w8, w9, w83525; -O0:    mvn w8, w83526; -O0:    bl __atomic_compare_exchange3527;3528; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:3529; -O1:    and w8, w0, w203530; -O1:    mvn w8, w83531; -O1:    bl __atomic_compare_exchange3532    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 13533    ret i32 %r3534}3535 3536define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3537; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic:3538; -O0:    and x8, x9, x83539; -O0:    mvn x8, x83540; -O0:    bl __atomic_compare_exchange3541;3542; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic:3543; -O1:    and x8, x0, x203544; -O1:    mvn x8, x83545; -O1:    bl __atomic_compare_exchange3546    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 13547    ret i64 %r3548}3549 3550define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) {3551; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire:3552; -O0:    and x8, x9, x83553; -O0:    mvn x8, x83554; -O0:    bl __atomic_compare_exchange3555;3556; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire:3557; -O1:    and x8, x0, x203558; -O1:    mvn x8, x83559; -O1:    bl __atomic_compare_exchange3560    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 13561    ret i64 %r3562}3563 3564define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) {3565; -O0-LABEL: atomicrmw_nand_i64_unaligned_release:3566; -O0:    and x8, x9, x83567; -O0:    mvn x8, x83568; -O0:    bl __atomic_compare_exchange3569;3570; -O1-LABEL: atomicrmw_nand_i64_unaligned_release:3571; -O1:    and x8, x0, x203572; -O1:    mvn x8, x83573; -O1:    bl __atomic_compare_exchange3574    %r = atomicrmw nand ptr %ptr, i64 %value release, align 13575    ret i64 %r3576}3577 3578define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3579; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:3580; -O0:    and x8, x9, x83581; -O0:    mvn x8, x83582; -O0:    bl __atomic_compare_exchange3583;3584; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:3585; -O1:    and x8, x0, x203586; -O1:    mvn x8, x83587; -O1:    bl __atomic_compare_exchange3588    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 13589    ret i64 %r3590}3591 3592define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3593; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:3594; -O0:    and x8, x9, x83595; -O0:    mvn x8, x83596; -O0:    bl __atomic_compare_exchange3597;3598; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:3599; -O1:    and x8, x0, x203600; -O1:    mvn x8, x83601; -O1:    bl __atomic_compare_exchange3602    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 13603    ret i64 %r3604}3605 3606define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3607; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic:3608; -O0:    and x9, x11, x93609; -O0:    and x8, x10, x83610; -O0:    mvn x8, x83611; -O0:    mvn x9, x93612; -O0:    bl __atomic_compare_exchange3613;3614; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic:3615; -O1:    ldp x0, x1, [x0]3616; -O1:    and x8, x1, x193617; -O1:    and x9, x0, x213618; -O1:    mvn x8, x83619; -O1:    mvn x9, x93620; -O1:    bl __atomic_compare_exchange3621    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 13622    ret i128 %r3623}3624 3625define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) {3626; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire:3627; -O0:    and x9, x11, x93628; -O0:    and x8, x10, x83629; -O0:    mvn x8, x83630; -O0:    mvn x9, x93631; -O0:    bl __atomic_compare_exchange3632;3633; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire:3634; -O1:    ldp x0, x1, [x0]3635; -O1:    and x8, x1, x193636; -O1:    and x9, x0, x213637; -O1:    mvn x8, x83638; -O1:    mvn x9, x93639; -O1:    bl __atomic_compare_exchange3640    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 13641    ret i128 %r3642}3643 3644define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) {3645; -O0-LABEL: atomicrmw_nand_i128_unaligned_release:3646; -O0:    and x9, x11, x93647; -O0:    and x8, x10, x83648; -O0:    mvn x8, x83649; -O0:    mvn x9, x93650; -O0:    bl __atomic_compare_exchange3651;3652; -O1-LABEL: atomicrmw_nand_i128_unaligned_release:3653; -O1:    ldp x0, x1, [x0]3654; -O1:    and x8, x1, x193655; -O1:    and x9, x0, x213656; -O1:    mvn x8, x83657; -O1:    mvn x9, x93658; -O1:    bl __atomic_compare_exchange3659    %r = atomicrmw nand ptr %ptr, i128 %value release, align 13660    ret i128 %r3661}3662 3663define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3664; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:3665; -O0:    and x9, x11, x93666; -O0:    and x8, x10, x83667; -O0:    mvn x8, x83668; -O0:    mvn x9, x93669; -O0:    bl __atomic_compare_exchange3670;3671; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:3672; -O1:    ldp x0, x1, [x0]3673; -O1:    and x8, x1, x193674; -O1:    and x9, x0, x213675; -O1:    mvn x8, x83676; -O1:    mvn x9, x93677; -O1:    bl __atomic_compare_exchange3678    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 13679    ret i128 %r3680}3681 3682define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3683; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:3684; -O0:    and x9, x11, x93685; -O0:    and x8, x10, x83686; -O0:    mvn x8, x83687; -O0:    mvn x9, x93688; -O0:    bl __atomic_compare_exchange3689;3690; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:3691; -O1:    ldp x0, x1, [x0]3692; -O1:    and x8, x1, x193693; -O1:    and x9, x0, x213694; -O1:    mvn x8, x83695; -O1:    mvn x9, x93696; -O1:    bl __atomic_compare_exchange3697    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 13698    ret i128 %r3699}3700 3701define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) {3702; -O0-LABEL: atomicrmw_or_i8_aligned_monotonic:3703; -O0:    orr w12, w9, w83704; -O0:    ldaxrb w8, [x11]3705; -O0:    cmp w8, w9, uxtb3706; -O0:    stlxrb w10, w12, [x11]3707; -O0:    subs w9, w8, w9, uxtb3708;3709; -O1-LABEL: atomicrmw_or_i8_aligned_monotonic:3710; -O1:    ldxrb w8, [x0]3711; -O1:    orr w9, w8, w13712; -O1:    stxrb w10, w9, [x0]3713    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 13714    ret i8 %r3715}3716 3717define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) {3718; -O0-LABEL: atomicrmw_or_i8_aligned_acquire:3719; -O0:    orr w12, w9, w83720; -O0:    ldaxrb w8, [x11]3721; -O0:    cmp w8, w9, uxtb3722; -O0:    stlxrb w10, w12, [x11]3723; -O0:    subs w9, w8, w9, uxtb3724;3725; -O1-LABEL: atomicrmw_or_i8_aligned_acquire:3726; -O1:    ldaxrb w8, [x0]3727; -O1:    orr w9, w8, w13728; -O1:    stxrb w10, w9, [x0]3729    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 13730    ret i8 %r3731}3732 3733define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) {3734; -O0-LABEL: atomicrmw_or_i8_aligned_release:3735; -O0:    orr w12, w9, w83736; -O0:    ldaxrb w8, [x11]3737; -O0:    cmp w8, w9, uxtb3738; -O0:    stlxrb w10, w12, [x11]3739; -O0:    subs w9, w8, w9, uxtb3740;3741; -O1-LABEL: atomicrmw_or_i8_aligned_release:3742; -O1:    ldxrb w8, [x0]3743; -O1:    orr w9, w8, w13744; -O1:    stlxrb w10, w9, [x0]3745    %r = atomicrmw or ptr %ptr, i8 %value release, align 13746    ret i8 %r3747}3748 3749define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3750; -O0-LABEL: atomicrmw_or_i8_aligned_acq_rel:3751; -O0:    orr w12, w9, w83752; -O0:    ldaxrb w8, [x11]3753; -O0:    cmp w8, w9, uxtb3754; -O0:    stlxrb w10, w12, [x11]3755; -O0:    subs w9, w8, w9, uxtb3756;3757; -O1-LABEL: atomicrmw_or_i8_aligned_acq_rel:3758; -O1:    ldaxrb w8, [x0]3759; -O1:    orr w9, w8, w13760; -O1:    stlxrb w10, w9, [x0]3761    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 13762    ret i8 %r3763}3764 3765define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3766; -O0-LABEL: atomicrmw_or_i8_aligned_seq_cst:3767; -O0:    orr w12, w9, w83768; -O0:    ldaxrb w8, [x11]3769; -O0:    cmp w8, w9, uxtb3770; -O0:    stlxrb w10, w12, [x11]3771; -O0:    subs w9, w8, w9, uxtb3772;3773; -O1-LABEL: atomicrmw_or_i8_aligned_seq_cst:3774; -O1:    ldaxrb w8, [x0]3775; -O1:    orr w9, w8, w13776; -O1:    stlxrb w10, w9, [x0]3777    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 13778    ret i8 %r3779}3780 3781define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) {3782; -O0-LABEL: atomicrmw_or_i16_aligned_monotonic:3783; -O0:    orr w12, w9, w83784; -O0:    ldaxrh w8, [x11]3785; -O0:    cmp w8, w9, uxth3786; -O0:    stlxrh w10, w12, [x11]3787; -O0:    subs w9, w8, w9, uxth3788;3789; -O1-LABEL: atomicrmw_or_i16_aligned_monotonic:3790; -O1:    ldxrh w8, [x0]3791; -O1:    orr w9, w8, w13792; -O1:    stxrh w10, w9, [x0]3793    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 23794    ret i16 %r3795}3796 3797define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) {3798; -O0-LABEL: atomicrmw_or_i16_aligned_acquire:3799; -O0:    orr w12, w9, w83800; -O0:    ldaxrh w8, [x11]3801; -O0:    cmp w8, w9, uxth3802; -O0:    stlxrh w10, w12, [x11]3803; -O0:    subs w9, w8, w9, uxth3804;3805; -O1-LABEL: atomicrmw_or_i16_aligned_acquire:3806; -O1:    ldaxrh w8, [x0]3807; -O1:    orr w9, w8, w13808; -O1:    stxrh w10, w9, [x0]3809    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 23810    ret i16 %r3811}3812 3813define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) {3814; -O0-LABEL: atomicrmw_or_i16_aligned_release:3815; -O0:    orr w12, w9, w83816; -O0:    ldaxrh w8, [x11]3817; -O0:    cmp w8, w9, uxth3818; -O0:    stlxrh w10, w12, [x11]3819; -O0:    subs w9, w8, w9, uxth3820;3821; -O1-LABEL: atomicrmw_or_i16_aligned_release:3822; -O1:    ldxrh w8, [x0]3823; -O1:    orr w9, w8, w13824; -O1:    stlxrh w10, w9, [x0]3825    %r = atomicrmw or ptr %ptr, i16 %value release, align 23826    ret i16 %r3827}3828 3829define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3830; -O0-LABEL: atomicrmw_or_i16_aligned_acq_rel:3831; -O0:    orr w12, w9, w83832; -O0:    ldaxrh w8, [x11]3833; -O0:    cmp w8, w9, uxth3834; -O0:    stlxrh w10, w12, [x11]3835; -O0:    subs w9, w8, w9, uxth3836;3837; -O1-LABEL: atomicrmw_or_i16_aligned_acq_rel:3838; -O1:    ldaxrh w8, [x0]3839; -O1:    orr w9, w8, w13840; -O1:    stlxrh w10, w9, [x0]3841    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 23842    ret i16 %r3843}3844 3845define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3846; -O0-LABEL: atomicrmw_or_i16_aligned_seq_cst:3847; -O0:    orr w12, w9, w83848; -O0:    ldaxrh w8, [x11]3849; -O0:    cmp w8, w9, uxth3850; -O0:    stlxrh w10, w12, [x11]3851; -O0:    subs w9, w8, w9, uxth3852;3853; -O1-LABEL: atomicrmw_or_i16_aligned_seq_cst:3854; -O1:    ldaxrh w8, [x0]3855; -O1:    orr w9, w8, w13856; -O1:    stlxrh w10, w9, [x0]3857    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 23858    ret i16 %r3859}3860 3861define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) {3862; -O0-LABEL: atomicrmw_or_i32_aligned_monotonic:3863; -O0:    orr w12, w9, w83864; -O0:    ldaxr w8, [x11]3865; -O0:    cmp w8, w93866; -O0:    stlxr w10, w12, [x11]3867; -O0:    subs w9, w8, w93868;3869; -O1-LABEL: atomicrmw_or_i32_aligned_monotonic:3870; -O1:    ldxr w8, [x0]3871; -O1:    orr w9, w8, w13872; -O1:    stxr w10, w9, [x0]3873    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 43874    ret i32 %r3875}3876 3877define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) {3878; -O0-LABEL: atomicrmw_or_i32_aligned_acquire:3879; -O0:    orr w12, w9, w83880; -O0:    ldaxr w8, [x11]3881; -O0:    cmp w8, w93882; -O0:    stlxr w10, w12, [x11]3883; -O0:    subs w9, w8, w93884;3885; -O1-LABEL: atomicrmw_or_i32_aligned_acquire:3886; -O1:    ldaxr w8, [x0]3887; -O1:    orr w9, w8, w13888; -O1:    stxr w10, w9, [x0]3889    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 43890    ret i32 %r3891}3892 3893define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) {3894; -O0-LABEL: atomicrmw_or_i32_aligned_release:3895; -O0:    orr w12, w9, w83896; -O0:    ldaxr w8, [x11]3897; -O0:    cmp w8, w93898; -O0:    stlxr w10, w12, [x11]3899; -O0:    subs w9, w8, w93900;3901; -O1-LABEL: atomicrmw_or_i32_aligned_release:3902; -O1:    ldxr w8, [x0]3903; -O1:    orr w9, w8, w13904; -O1:    stlxr w10, w9, [x0]3905    %r = atomicrmw or ptr %ptr, i32 %value release, align 43906    ret i32 %r3907}3908 3909define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3910; -O0-LABEL: atomicrmw_or_i32_aligned_acq_rel:3911; -O0:    orr w12, w9, w83912; -O0:    ldaxr w8, [x11]3913; -O0:    cmp w8, w93914; -O0:    stlxr w10, w12, [x11]3915; -O0:    subs w9, w8, w93916;3917; -O1-LABEL: atomicrmw_or_i32_aligned_acq_rel:3918; -O1:    ldaxr w8, [x0]3919; -O1:    orr w9, w8, w13920; -O1:    stlxr w10, w9, [x0]3921    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 43922    ret i32 %r3923}3924 3925define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3926; -O0-LABEL: atomicrmw_or_i32_aligned_seq_cst:3927; -O0:    orr w12, w9, w83928; -O0:    ldaxr w8, [x11]3929; -O0:    cmp w8, w93930; -O0:    stlxr w10, w12, [x11]3931; -O0:    subs w9, w8, w93932;3933; -O1-LABEL: atomicrmw_or_i32_aligned_seq_cst:3934; -O1:    ldaxr w8, [x0]3935; -O1:    orr w9, w8, w13936; -O1:    stlxr w10, w9, [x0]3937    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 43938    ret i32 %r3939}3940 3941define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) {3942; -O0-LABEL: atomicrmw_or_i64_aligned_monotonic:3943; -O0:    orr x12, x9, x83944; -O0:    ldaxr x8, [x11]3945; -O0:    cmp x8, x93946; -O0:    stlxr w10, x12, [x11]3947; -O0:    subs x9, x8, x93948;3949; -O1-LABEL: atomicrmw_or_i64_aligned_monotonic:3950; -O1:    ldxr x0, [x8]3951; -O1:    orr x9, x0, x13952; -O1:    stxr w10, x9, [x8]3953    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 83954    ret i64 %r3955}3956 3957define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) {3958; -O0-LABEL: atomicrmw_or_i64_aligned_acquire:3959; -O0:    orr x12, x9, x83960; -O0:    ldaxr x8, [x11]3961; -O0:    cmp x8, x93962; -O0:    stlxr w10, x12, [x11]3963; -O0:    subs x9, x8, x93964;3965; -O1-LABEL: atomicrmw_or_i64_aligned_acquire:3966; -O1:    ldaxr x0, [x8]3967; -O1:    orr x9, x0, x13968; -O1:    stxr w10, x9, [x8]3969    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 83970    ret i64 %r3971}3972 3973define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) {3974; -O0-LABEL: atomicrmw_or_i64_aligned_release:3975; -O0:    orr x12, x9, x83976; -O0:    ldaxr x8, [x11]3977; -O0:    cmp x8, x93978; -O0:    stlxr w10, x12, [x11]3979; -O0:    subs x9, x8, x93980;3981; -O1-LABEL: atomicrmw_or_i64_aligned_release:3982; -O1:    ldxr x0, [x8]3983; -O1:    orr x9, x0, x13984; -O1:    stlxr w10, x9, [x8]3985    %r = atomicrmw or ptr %ptr, i64 %value release, align 83986    ret i64 %r3987}3988 3989define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3990; -O0-LABEL: atomicrmw_or_i64_aligned_acq_rel:3991; -O0:    orr x12, x9, x83992; -O0:    ldaxr x8, [x11]3993; -O0:    cmp x8, x93994; -O0:    stlxr w10, x12, [x11]3995; -O0:    subs x9, x8, x93996;3997; -O1-LABEL: atomicrmw_or_i64_aligned_acq_rel:3998; -O1:    ldaxr x0, [x8]3999; -O1:    orr x9, x0, x14000; -O1:    stlxr w10, x9, [x8]4001    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 84002    ret i64 %r4003}4004 4005define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4006; -O0-LABEL: atomicrmw_or_i64_aligned_seq_cst:4007; -O0:    orr x12, x9, x84008; -O0:    ldaxr x8, [x11]4009; -O0:    cmp x8, x94010; -O0:    stlxr w10, x12, [x11]4011; -O0:    subs x9, x8, x94012;4013; -O1-LABEL: atomicrmw_or_i64_aligned_seq_cst:4014; -O1:    ldaxr x0, [x8]4015; -O1:    orr x9, x0, x14016; -O1:    stlxr w10, x9, [x8]4017    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 84018    ret i64 %r4019}4020 4021define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) {4022; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic:4023; -O0:    orr x15, x13, x104024; -O0:    orr x14, x11, x84025; -O0:    ldxp x10, x12, [x9]4026; -O0:    cmp x10, x114027; -O0:    cmp x12, x134028; -O0:    stxp w8, x14, x15, [x9]4029; -O0:    stxp w8, x10, x12, [x9]4030; -O0:    subs x12, x12, x134031; -O0:    ccmp x10, x11, #0, eq4032;4033; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic:4034; -O1:    ldxp x1, x0, [x8]4035; -O1:    orr x9, x0, x24036; -O1:    orr x10, x1, x34037; -O1:    stxp w11, x10, x9, [x8]4038    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 164039    ret i128 %r4040}4041 4042define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) {4043; -O0-LABEL: atomicrmw_or_i128_aligned_acquire:4044; -O0:    orr x15, x13, x104045; -O0:    orr x14, x11, x84046; -O0:    ldaxp x10, x12, [x9]4047; -O0:    cmp x10, x114048; -O0:    cmp x12, x134049; -O0:    stxp w8, x14, x15, [x9]4050; -O0:    stxp w8, x10, x12, [x9]4051; -O0:    subs x12, x12, x134052; -O0:    ccmp x10, x11, #0, eq4053;4054; -O1-LABEL: atomicrmw_or_i128_aligned_acquire:4055; -O1:    ldaxp x1, x0, [x8]4056; -O1:    orr x9, x0, x24057; -O1:    orr x10, x1, x34058; -O1:    stxp w11, x10, x9, [x8]4059    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 164060    ret i128 %r4061}4062 4063define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) {4064; -O0-LABEL: atomicrmw_or_i128_aligned_release:4065; -O0:    orr x15, x13, x104066; -O0:    orr x14, x11, x84067; -O0:    ldxp x10, x12, [x9]4068; -O0:    cmp x10, x114069; -O0:    cmp x12, x134070; -O0:    stlxp w8, x14, x15, [x9]4071; -O0:    stlxp w8, x10, x12, [x9]4072; -O0:    subs x12, x12, x134073; -O0:    ccmp x10, x11, #0, eq4074;4075; -O1-LABEL: atomicrmw_or_i128_aligned_release:4076; -O1:    ldxp x1, x0, [x8]4077; -O1:    orr x9, x0, x24078; -O1:    orr x10, x1, x34079; -O1:    stlxp w11, x10, x9, [x8]4080    %r = atomicrmw or ptr %ptr, i128 %value release, align 164081    ret i128 %r4082}4083 4084define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4085; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel:4086; -O0:    orr x15, x13, x104087; -O0:    orr x14, x11, x84088; -O0:    ldaxp x10, x12, [x9]4089; -O0:    cmp x10, x114090; -O0:    cmp x12, x134091; -O0:    stlxp w8, x14, x15, [x9]4092; -O0:    stlxp w8, x10, x12, [x9]4093; -O0:    subs x12, x12, x134094; -O0:    ccmp x10, x11, #0, eq4095;4096; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel:4097; -O1:    ldaxp x1, x0, [x8]4098; -O1:    orr x9, x0, x24099; -O1:    orr x10, x1, x34100; -O1:    stlxp w11, x10, x9, [x8]4101    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 164102    ret i128 %r4103}4104 4105define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4106; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst:4107; -O0:    orr x15, x13, x104108; -O0:    orr x14, x11, x84109; -O0:    ldaxp x10, x12, [x9]4110; -O0:    cmp x10, x114111; -O0:    cmp x12, x134112; -O0:    stlxp w8, x14, x15, [x9]4113; -O0:    stlxp w8, x10, x12, [x9]4114; -O0:    subs x12, x12, x134115; -O0:    ccmp x10, x11, #0, eq4116;4117; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst:4118; -O1:    ldaxp x1, x0, [x8]4119; -O1:    orr x9, x0, x24120; -O1:    orr x10, x1, x34121; -O1:    stlxp w11, x10, x9, [x8]4122    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 164123    ret i128 %r4124}4125 4126define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4127; -O0-LABEL: atomicrmw_or_i8_unaligned_monotonic:4128; -O0:    orr w12, w9, w84129; -O0:    ldaxrb w8, [x11]4130; -O0:    cmp w8, w9, uxtb4131; -O0:    stlxrb w10, w12, [x11]4132; -O0:    subs w9, w8, w9, uxtb4133;4134; -O1-LABEL: atomicrmw_or_i8_unaligned_monotonic:4135; -O1:    ldxrb w8, [x0]4136; -O1:    orr w9, w8, w14137; -O1:    stxrb w10, w9, [x0]4138    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 14139    ret i8 %r4140}4141 4142define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) {4143; -O0-LABEL: atomicrmw_or_i8_unaligned_acquire:4144; -O0:    orr w12, w9, w84145; -O0:    ldaxrb w8, [x11]4146; -O0:    cmp w8, w9, uxtb4147; -O0:    stlxrb w10, w12, [x11]4148; -O0:    subs w9, w8, w9, uxtb4149;4150; -O1-LABEL: atomicrmw_or_i8_unaligned_acquire:4151; -O1:    ldaxrb w8, [x0]4152; -O1:    orr w9, w8, w14153; -O1:    stxrb w10, w9, [x0]4154    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 14155    ret i8 %r4156}4157 4158define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) {4159; -O0-LABEL: atomicrmw_or_i8_unaligned_release:4160; -O0:    orr w12, w9, w84161; -O0:    ldaxrb w8, [x11]4162; -O0:    cmp w8, w9, uxtb4163; -O0:    stlxrb w10, w12, [x11]4164; -O0:    subs w9, w8, w9, uxtb4165;4166; -O1-LABEL: atomicrmw_or_i8_unaligned_release:4167; -O1:    ldxrb w8, [x0]4168; -O1:    orr w9, w8, w14169; -O1:    stlxrb w10, w9, [x0]4170    %r = atomicrmw or ptr %ptr, i8 %value release, align 14171    ret i8 %r4172}4173 4174define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4175; -O0-LABEL: atomicrmw_or_i8_unaligned_acq_rel:4176; -O0:    orr w12, w9, w84177; -O0:    ldaxrb w8, [x11]4178; -O0:    cmp w8, w9, uxtb4179; -O0:    stlxrb w10, w12, [x11]4180; -O0:    subs w9, w8, w9, uxtb4181;4182; -O1-LABEL: atomicrmw_or_i8_unaligned_acq_rel:4183; -O1:    ldaxrb w8, [x0]4184; -O1:    orr w9, w8, w14185; -O1:    stlxrb w10, w9, [x0]4186    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 14187    ret i8 %r4188}4189 4190define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4191; -O0-LABEL: atomicrmw_or_i8_unaligned_seq_cst:4192; -O0:    orr w12, w9, w84193; -O0:    ldaxrb w8, [x11]4194; -O0:    cmp w8, w9, uxtb4195; -O0:    stlxrb w10, w12, [x11]4196; -O0:    subs w9, w8, w9, uxtb4197;4198; -O1-LABEL: atomicrmw_or_i8_unaligned_seq_cst:4199; -O1:    ldaxrb w8, [x0]4200; -O1:    orr w9, w8, w14201; -O1:    stlxrb w10, w9, [x0]4202    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 14203    ret i8 %r4204}4205 4206define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4207; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic:4208; -O0:    orr w8, w9, w84209; -O0:    bl __atomic_compare_exchange4210;4211; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic:4212; -O1:    orr w8, w0, w204213; -O1:    bl __atomic_compare_exchange4214    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 14215    ret i16 %r4216}4217 4218define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) {4219; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire:4220; -O0:    orr w8, w9, w84221; -O0:    bl __atomic_compare_exchange4222;4223; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire:4224; -O1:    orr w8, w0, w204225; -O1:    bl __atomic_compare_exchange4226    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 14227    ret i16 %r4228}4229 4230define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) {4231; -O0-LABEL: atomicrmw_or_i16_unaligned_release:4232; -O0:    orr w8, w9, w84233; -O0:    bl __atomic_compare_exchange4234;4235; -O1-LABEL: atomicrmw_or_i16_unaligned_release:4236; -O1:    orr w8, w0, w204237; -O1:    bl __atomic_compare_exchange4238    %r = atomicrmw or ptr %ptr, i16 %value release, align 14239    ret i16 %r4240}4241 4242define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4243; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel:4244; -O0:    orr w8, w9, w84245; -O0:    bl __atomic_compare_exchange4246;4247; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel:4248; -O1:    orr w8, w0, w204249; -O1:    bl __atomic_compare_exchange4250    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 14251    ret i16 %r4252}4253 4254define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4255; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst:4256; -O0:    orr w8, w9, w84257; -O0:    bl __atomic_compare_exchange4258;4259; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst:4260; -O1:    orr w8, w0, w204261; -O1:    bl __atomic_compare_exchange4262    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 14263    ret i16 %r4264}4265 4266define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4267; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic:4268; -O0:    orr w8, w9, w84269; -O0:    bl __atomic_compare_exchange4270;4271; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic:4272; -O1:    orr w8, w0, w204273; -O1:    bl __atomic_compare_exchange4274    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 14275    ret i32 %r4276}4277 4278define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) {4279; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire:4280; -O0:    orr w8, w9, w84281; -O0:    bl __atomic_compare_exchange4282;4283; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire:4284; -O1:    orr w8, w0, w204285; -O1:    bl __atomic_compare_exchange4286    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 14287    ret i32 %r4288}4289 4290define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) {4291; -O0-LABEL: atomicrmw_or_i32_unaligned_release:4292; -O0:    orr w8, w9, w84293; -O0:    bl __atomic_compare_exchange4294;4295; -O1-LABEL: atomicrmw_or_i32_unaligned_release:4296; -O1:    orr w8, w0, w204297; -O1:    bl __atomic_compare_exchange4298    %r = atomicrmw or ptr %ptr, i32 %value release, align 14299    ret i32 %r4300}4301 4302define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4303; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel:4304; -O0:    orr w8, w9, w84305; -O0:    bl __atomic_compare_exchange4306;4307; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel:4308; -O1:    orr w8, w0, w204309; -O1:    bl __atomic_compare_exchange4310    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 14311    ret i32 %r4312}4313 4314define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4315; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst:4316; -O0:    orr w8, w9, w84317; -O0:    bl __atomic_compare_exchange4318;4319; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst:4320; -O1:    orr w8, w0, w204321; -O1:    bl __atomic_compare_exchange4322    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 14323    ret i32 %r4324}4325 4326define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4327; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic:4328; -O0:    orr x8, x9, x84329; -O0:    bl __atomic_compare_exchange4330;4331; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic:4332; -O1:    orr x8, x0, x204333; -O1:    bl __atomic_compare_exchange4334    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 14335    ret i64 %r4336}4337 4338define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) {4339; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire:4340; -O0:    orr x8, x9, x84341; -O0:    bl __atomic_compare_exchange4342;4343; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire:4344; -O1:    orr x8, x0, x204345; -O1:    bl __atomic_compare_exchange4346    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 14347    ret i64 %r4348}4349 4350define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) {4351; -O0-LABEL: atomicrmw_or_i64_unaligned_release:4352; -O0:    orr x8, x9, x84353; -O0:    bl __atomic_compare_exchange4354;4355; -O1-LABEL: atomicrmw_or_i64_unaligned_release:4356; -O1:    orr x8, x0, x204357; -O1:    bl __atomic_compare_exchange4358    %r = atomicrmw or ptr %ptr, i64 %value release, align 14359    ret i64 %r4360}4361 4362define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4363; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel:4364; -O0:    orr x8, x9, x84365; -O0:    bl __atomic_compare_exchange4366;4367; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel:4368; -O1:    orr x8, x0, x204369; -O1:    bl __atomic_compare_exchange4370    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 14371    ret i64 %r4372}4373 4374define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4375; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst:4376; -O0:    orr x8, x9, x84377; -O0:    bl __atomic_compare_exchange4378;4379; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst:4380; -O1:    orr x8, x0, x204381; -O1:    bl __atomic_compare_exchange4382    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 14383    ret i64 %r4384}4385 4386define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4387; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic:4388; -O0:    orr x8, x11, x84389; -O0:    orr x9, x10, x94390; -O0:    bl __atomic_compare_exchange4391;4392; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic:4393; -O1:    ldp x0, x1, [x0]4394; -O1:    orr x8, x1, x194395; -O1:    orr x9, x0, x214396; -O1:    bl __atomic_compare_exchange4397    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 14398    ret i128 %r4399}4400 4401define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) {4402; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire:4403; -O0:    orr x8, x11, x84404; -O0:    orr x9, x10, x94405; -O0:    bl __atomic_compare_exchange4406;4407; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire:4408; -O1:    ldp x0, x1, [x0]4409; -O1:    orr x8, x1, x194410; -O1:    orr x9, x0, x214411; -O1:    bl __atomic_compare_exchange4412    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 14413    ret i128 %r4414}4415 4416define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) {4417; -O0-LABEL: atomicrmw_or_i128_unaligned_release:4418; -O0:    orr x8, x11, x84419; -O0:    orr x9, x10, x94420; -O0:    bl __atomic_compare_exchange4421;4422; -O1-LABEL: atomicrmw_or_i128_unaligned_release:4423; -O1:    ldp x0, x1, [x0]4424; -O1:    orr x8, x1, x194425; -O1:    orr x9, x0, x214426; -O1:    bl __atomic_compare_exchange4427    %r = atomicrmw or ptr %ptr, i128 %value release, align 14428    ret i128 %r4429}4430 4431define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4432; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel:4433; -O0:    orr x8, x11, x84434; -O0:    orr x9, x10, x94435; -O0:    bl __atomic_compare_exchange4436;4437; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel:4438; -O1:    ldp x0, x1, [x0]4439; -O1:    orr x8, x1, x194440; -O1:    orr x9, x0, x214441; -O1:    bl __atomic_compare_exchange4442    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 14443    ret i128 %r4444}4445 4446define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4447; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst:4448; -O0:    orr x8, x11, x84449; -O0:    orr x9, x10, x94450; -O0:    bl __atomic_compare_exchange4451;4452; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst:4453; -O1:    ldp x0, x1, [x0]4454; -O1:    orr x8, x1, x194455; -O1:    orr x9, x0, x214456; -O1:    bl __atomic_compare_exchange4457    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 14458    ret i128 %r4459}4460 4461define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) {4462; -O0-LABEL: atomicrmw_xor_i8_aligned_monotonic:4463; -O0:    eor w12, w9, w84464; -O0:    ldaxrb w8, [x11]4465; -O0:    cmp w8, w9, uxtb4466; -O0:    stlxrb w10, w12, [x11]4467; -O0:    subs w9, w8, w9, uxtb4468;4469; -O1-LABEL: atomicrmw_xor_i8_aligned_monotonic:4470; -O1:    ldxrb w8, [x0]4471; -O1:    eor w9, w8, w14472; -O1:    stxrb w10, w9, [x0]4473    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 14474    ret i8 %r4475}4476 4477define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) {4478; -O0-LABEL: atomicrmw_xor_i8_aligned_acquire:4479; -O0:    eor w12, w9, w84480; -O0:    ldaxrb w8, [x11]4481; -O0:    cmp w8, w9, uxtb4482; -O0:    stlxrb w10, w12, [x11]4483; -O0:    subs w9, w8, w9, uxtb4484;4485; -O1-LABEL: atomicrmw_xor_i8_aligned_acquire:4486; -O1:    ldaxrb w8, [x0]4487; -O1:    eor w9, w8, w14488; -O1:    stxrb w10, w9, [x0]4489    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 14490    ret i8 %r4491}4492 4493define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) {4494; -O0-LABEL: atomicrmw_xor_i8_aligned_release:4495; -O0:    eor w12, w9, w84496; -O0:    ldaxrb w8, [x11]4497; -O0:    cmp w8, w9, uxtb4498; -O0:    stlxrb w10, w12, [x11]4499; -O0:    subs w9, w8, w9, uxtb4500;4501; -O1-LABEL: atomicrmw_xor_i8_aligned_release:4502; -O1:    ldxrb w8, [x0]4503; -O1:    eor w9, w8, w14504; -O1:    stlxrb w10, w9, [x0]4505    %r = atomicrmw xor ptr %ptr, i8 %value release, align 14506    ret i8 %r4507}4508 4509define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) {4510; -O0-LABEL: atomicrmw_xor_i8_aligned_acq_rel:4511; -O0:    eor w12, w9, w84512; -O0:    ldaxrb w8, [x11]4513; -O0:    cmp w8, w9, uxtb4514; -O0:    stlxrb w10, w12, [x11]4515; -O0:    subs w9, w8, w9, uxtb4516;4517; -O1-LABEL: atomicrmw_xor_i8_aligned_acq_rel:4518; -O1:    ldaxrb w8, [x0]4519; -O1:    eor w9, w8, w14520; -O1:    stlxrb w10, w9, [x0]4521    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 14522    ret i8 %r4523}4524 4525define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) {4526; -O0-LABEL: atomicrmw_xor_i8_aligned_seq_cst:4527; -O0:    eor w12, w9, w84528; -O0:    ldaxrb w8, [x11]4529; -O0:    cmp w8, w9, uxtb4530; -O0:    stlxrb w10, w12, [x11]4531; -O0:    subs w9, w8, w9, uxtb4532;4533; -O1-LABEL: atomicrmw_xor_i8_aligned_seq_cst:4534; -O1:    ldaxrb w8, [x0]4535; -O1:    eor w9, w8, w14536; -O1:    stlxrb w10, w9, [x0]4537    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 14538    ret i8 %r4539}4540 4541define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) {4542; -O0-LABEL: atomicrmw_xor_i16_aligned_monotonic:4543; -O0:    eor w12, w9, w84544; -O0:    ldaxrh w8, [x11]4545; -O0:    cmp w8, w9, uxth4546; -O0:    stlxrh w10, w12, [x11]4547; -O0:    subs w9, w8, w9, uxth4548;4549; -O1-LABEL: atomicrmw_xor_i16_aligned_monotonic:4550; -O1:    ldxrh w8, [x0]4551; -O1:    eor w9, w8, w14552; -O1:    stxrh w10, w9, [x0]4553    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 24554    ret i16 %r4555}4556 4557define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) {4558; -O0-LABEL: atomicrmw_xor_i16_aligned_acquire:4559; -O0:    eor w12, w9, w84560; -O0:    ldaxrh w8, [x11]4561; -O0:    cmp w8, w9, uxth4562; -O0:    stlxrh w10, w12, [x11]4563; -O0:    subs w9, w8, w9, uxth4564;4565; -O1-LABEL: atomicrmw_xor_i16_aligned_acquire:4566; -O1:    ldaxrh w8, [x0]4567; -O1:    eor w9, w8, w14568; -O1:    stxrh w10, w9, [x0]4569    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 24570    ret i16 %r4571}4572 4573define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) {4574; -O0-LABEL: atomicrmw_xor_i16_aligned_release:4575; -O0:    eor w12, w9, w84576; -O0:    ldaxrh w8, [x11]4577; -O0:    cmp w8, w9, uxth4578; -O0:    stlxrh w10, w12, [x11]4579; -O0:    subs w9, w8, w9, uxth4580;4581; -O1-LABEL: atomicrmw_xor_i16_aligned_release:4582; -O1:    ldxrh w8, [x0]4583; -O1:    eor w9, w8, w14584; -O1:    stlxrh w10, w9, [x0]4585    %r = atomicrmw xor ptr %ptr, i16 %value release, align 24586    ret i16 %r4587}4588 4589define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) {4590; -O0-LABEL: atomicrmw_xor_i16_aligned_acq_rel:4591; -O0:    eor w12, w9, w84592; -O0:    ldaxrh w8, [x11]4593; -O0:    cmp w8, w9, uxth4594; -O0:    stlxrh w10, w12, [x11]4595; -O0:    subs w9, w8, w9, uxth4596;4597; -O1-LABEL: atomicrmw_xor_i16_aligned_acq_rel:4598; -O1:    ldaxrh w8, [x0]4599; -O1:    eor w9, w8, w14600; -O1:    stlxrh w10, w9, [x0]4601    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 24602    ret i16 %r4603}4604 4605define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) {4606; -O0-LABEL: atomicrmw_xor_i16_aligned_seq_cst:4607; -O0:    eor w12, w9, w84608; -O0:    ldaxrh w8, [x11]4609; -O0:    cmp w8, w9, uxth4610; -O0:    stlxrh w10, w12, [x11]4611; -O0:    subs w9, w8, w9, uxth4612;4613; -O1-LABEL: atomicrmw_xor_i16_aligned_seq_cst:4614; -O1:    ldaxrh w8, [x0]4615; -O1:    eor w9, w8, w14616; -O1:    stlxrh w10, w9, [x0]4617    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 24618    ret i16 %r4619}4620 4621define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) {4622; -O0-LABEL: atomicrmw_xor_i32_aligned_monotonic:4623; -O0:    eor w12, w9, w84624; -O0:    ldaxr w8, [x11]4625; -O0:    cmp w8, w94626; -O0:    stlxr w10, w12, [x11]4627; -O0:    subs w9, w8, w94628;4629; -O1-LABEL: atomicrmw_xor_i32_aligned_monotonic:4630; -O1:    ldxr w8, [x0]4631; -O1:    eor w9, w8, w14632; -O1:    stxr w10, w9, [x0]4633    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 44634    ret i32 %r4635}4636 4637define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) {4638; -O0-LABEL: atomicrmw_xor_i32_aligned_acquire:4639; -O0:    eor w12, w9, w84640; -O0:    ldaxr w8, [x11]4641; -O0:    cmp w8, w94642; -O0:    stlxr w10, w12, [x11]4643; -O0:    subs w9, w8, w94644;4645; -O1-LABEL: atomicrmw_xor_i32_aligned_acquire:4646; -O1:    ldaxr w8, [x0]4647; -O1:    eor w9, w8, w14648; -O1:    stxr w10, w9, [x0]4649    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 44650    ret i32 %r4651}4652 4653define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) {4654; -O0-LABEL: atomicrmw_xor_i32_aligned_release:4655; -O0:    eor w12, w9, w84656; -O0:    ldaxr w8, [x11]4657; -O0:    cmp w8, w94658; -O0:    stlxr w10, w12, [x11]4659; -O0:    subs w9, w8, w94660;4661; -O1-LABEL: atomicrmw_xor_i32_aligned_release:4662; -O1:    ldxr w8, [x0]4663; -O1:    eor w9, w8, w14664; -O1:    stlxr w10, w9, [x0]4665    %r = atomicrmw xor ptr %ptr, i32 %value release, align 44666    ret i32 %r4667}4668 4669define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4670; -O0-LABEL: atomicrmw_xor_i32_aligned_acq_rel:4671; -O0:    eor w12, w9, w84672; -O0:    ldaxr w8, [x11]4673; -O0:    cmp w8, w94674; -O0:    stlxr w10, w12, [x11]4675; -O0:    subs w9, w8, w94676;4677; -O1-LABEL: atomicrmw_xor_i32_aligned_acq_rel:4678; -O1:    ldaxr w8, [x0]4679; -O1:    eor w9, w8, w14680; -O1:    stlxr w10, w9, [x0]4681    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 44682    ret i32 %r4683}4684 4685define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4686; -O0-LABEL: atomicrmw_xor_i32_aligned_seq_cst:4687; -O0:    eor w12, w9, w84688; -O0:    ldaxr w8, [x11]4689; -O0:    cmp w8, w94690; -O0:    stlxr w10, w12, [x11]4691; -O0:    subs w9, w8, w94692;4693; -O1-LABEL: atomicrmw_xor_i32_aligned_seq_cst:4694; -O1:    ldaxr w8, [x0]4695; -O1:    eor w9, w8, w14696; -O1:    stlxr w10, w9, [x0]4697    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 44698    ret i32 %r4699}4700 4701define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) {4702; -O0-LABEL: atomicrmw_xor_i64_aligned_monotonic:4703; -O0:    eor x12, x9, x84704; -O0:    ldaxr x8, [x11]4705; -O0:    cmp x8, x94706; -O0:    stlxr w10, x12, [x11]4707; -O0:    subs x9, x8, x94708;4709; -O1-LABEL: atomicrmw_xor_i64_aligned_monotonic:4710; -O1:    ldxr x0, [x8]4711; -O1:    eor x9, x0, x14712; -O1:    stxr w10, x9, [x8]4713    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 84714    ret i64 %r4715}4716 4717define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) {4718; -O0-LABEL: atomicrmw_xor_i64_aligned_acquire:4719; -O0:    eor x12, x9, x84720; -O0:    ldaxr x8, [x11]4721; -O0:    cmp x8, x94722; -O0:    stlxr w10, x12, [x11]4723; -O0:    subs x9, x8, x94724;4725; -O1-LABEL: atomicrmw_xor_i64_aligned_acquire:4726; -O1:    ldaxr x0, [x8]4727; -O1:    eor x9, x0, x14728; -O1:    stxr w10, x9, [x8]4729    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 84730    ret i64 %r4731}4732 4733define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) {4734; -O0-LABEL: atomicrmw_xor_i64_aligned_release:4735; -O0:    eor x12, x9, x84736; -O0:    ldaxr x8, [x11]4737; -O0:    cmp x8, x94738; -O0:    stlxr w10, x12, [x11]4739; -O0:    subs x9, x8, x94740;4741; -O1-LABEL: atomicrmw_xor_i64_aligned_release:4742; -O1:    ldxr x0, [x8]4743; -O1:    eor x9, x0, x14744; -O1:    stlxr w10, x9, [x8]4745    %r = atomicrmw xor ptr %ptr, i64 %value release, align 84746    ret i64 %r4747}4748 4749define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4750; -O0-LABEL: atomicrmw_xor_i64_aligned_acq_rel:4751; -O0:    eor x12, x9, x84752; -O0:    ldaxr x8, [x11]4753; -O0:    cmp x8, x94754; -O0:    stlxr w10, x12, [x11]4755; -O0:    subs x9, x8, x94756;4757; -O1-LABEL: atomicrmw_xor_i64_aligned_acq_rel:4758; -O1:    ldaxr x0, [x8]4759; -O1:    eor x9, x0, x14760; -O1:    stlxr w10, x9, [x8]4761    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 84762    ret i64 %r4763}4764 4765define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4766; -O0-LABEL: atomicrmw_xor_i64_aligned_seq_cst:4767; -O0:    eor x12, x9, x84768; -O0:    ldaxr x8, [x11]4769; -O0:    cmp x8, x94770; -O0:    stlxr w10, x12, [x11]4771; -O0:    subs x9, x8, x94772;4773; -O1-LABEL: atomicrmw_xor_i64_aligned_seq_cst:4774; -O1:    ldaxr x0, [x8]4775; -O1:    eor x9, x0, x14776; -O1:    stlxr w10, x9, [x8]4777    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 84778    ret i64 %r4779}4780 4781define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) {4782; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic:4783; -O0:    eor x15, x13, x104784; -O0:    eor x14, x11, x84785; -O0:    ldxp x10, x12, [x9]4786; -O0:    cmp x10, x114787; -O0:    cmp x12, x134788; -O0:    stxp w8, x14, x15, [x9]4789; -O0:    stxp w8, x10, x12, [x9]4790; -O0:    subs x12, x12, x134791; -O0:    ccmp x10, x11, #0, eq4792;4793; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic:4794; -O1:    ldxp x1, x0, [x8]4795; -O1:    eor x9, x0, x24796; -O1:    eor x10, x1, x34797; -O1:    stxp w11, x10, x9, [x8]4798    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 164799    ret i128 %r4800}4801 4802define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) {4803; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire:4804; -O0:    eor x15, x13, x104805; -O0:    eor x14, x11, x84806; -O0:    ldaxp x10, x12, [x9]4807; -O0:    cmp x10, x114808; -O0:    cmp x12, x134809; -O0:    stxp w8, x14, x15, [x9]4810; -O0:    stxp w8, x10, x12, [x9]4811; -O0:    subs x12, x12, x134812; -O0:    ccmp x10, x11, #0, eq4813;4814; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire:4815; -O1:    ldaxp x1, x0, [x8]4816; -O1:    eor x9, x0, x24817; -O1:    eor x10, x1, x34818; -O1:    stxp w11, x10, x9, [x8]4819    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 164820    ret i128 %r4821}4822 4823define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) {4824; -O0-LABEL: atomicrmw_xor_i128_aligned_release:4825; -O0:    eor x15, x13, x104826; -O0:    eor x14, x11, x84827; -O0:    ldxp x10, x12, [x9]4828; -O0:    cmp x10, x114829; -O0:    cmp x12, x134830; -O0:    stlxp w8, x14, x15, [x9]4831; -O0:    stlxp w8, x10, x12, [x9]4832; -O0:    subs x12, x12, x134833; -O0:    ccmp x10, x11, #0, eq4834;4835; -O1-LABEL: atomicrmw_xor_i128_aligned_release:4836; -O1:    ldxp x1, x0, [x8]4837; -O1:    eor x9, x0, x24838; -O1:    eor x10, x1, x34839; -O1:    stlxp w11, x10, x9, [x8]4840    %r = atomicrmw xor ptr %ptr, i128 %value release, align 164841    ret i128 %r4842}4843 4844define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4845; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel:4846; -O0:    eor x15, x13, x104847; -O0:    eor x14, x11, x84848; -O0:    ldaxp x10, x12, [x9]4849; -O0:    cmp x10, x114850; -O0:    cmp x12, x134851; -O0:    stlxp w8, x14, x15, [x9]4852; -O0:    stlxp w8, x10, x12, [x9]4853; -O0:    subs x12, x12, x134854; -O0:    ccmp x10, x11, #0, eq4855;4856; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel:4857; -O1:    ldaxp x1, x0, [x8]4858; -O1:    eor x9, x0, x24859; -O1:    eor x10, x1, x34860; -O1:    stlxp w11, x10, x9, [x8]4861    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 164862    ret i128 %r4863}4864 4865define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4866; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst:4867; -O0:    eor x15, x13, x104868; -O0:    eor x14, x11, x84869; -O0:    ldaxp x10, x12, [x9]4870; -O0:    cmp x10, x114871; -O0:    cmp x12, x134872; -O0:    stlxp w8, x14, x15, [x9]4873; -O0:    stlxp w8, x10, x12, [x9]4874; -O0:    subs x12, x12, x134875; -O0:    ccmp x10, x11, #0, eq4876;4877; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst:4878; -O1:    ldaxp x1, x0, [x8]4879; -O1:    eor x9, x0, x24880; -O1:    eor x10, x1, x34881; -O1:    stlxp w11, x10, x9, [x8]4882    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 164883    ret i128 %r4884}4885 4886define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4887; -O0-LABEL: atomicrmw_xor_i8_unaligned_monotonic:4888; -O0:    eor w12, w9, w84889; -O0:    ldaxrb w8, [x11]4890; -O0:    cmp w8, w9, uxtb4891; -O0:    stlxrb w10, w12, [x11]4892; -O0:    subs w9, w8, w9, uxtb4893;4894; -O1-LABEL: atomicrmw_xor_i8_unaligned_monotonic:4895; -O1:    ldxrb w8, [x0]4896; -O1:    eor w9, w8, w14897; -O1:    stxrb w10, w9, [x0]4898    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 14899    ret i8 %r4900}4901 4902define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) {4903; -O0-LABEL: atomicrmw_xor_i8_unaligned_acquire:4904; -O0:    eor w12, w9, w84905; -O0:    ldaxrb w8, [x11]4906; -O0:    cmp w8, w9, uxtb4907; -O0:    stlxrb w10, w12, [x11]4908; -O0:    subs w9, w8, w9, uxtb4909;4910; -O1-LABEL: atomicrmw_xor_i8_unaligned_acquire:4911; -O1:    ldaxrb w8, [x0]4912; -O1:    eor w9, w8, w14913; -O1:    stxrb w10, w9, [x0]4914    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 14915    ret i8 %r4916}4917 4918define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) {4919; -O0-LABEL: atomicrmw_xor_i8_unaligned_release:4920; -O0:    eor w12, w9, w84921; -O0:    ldaxrb w8, [x11]4922; -O0:    cmp w8, w9, uxtb4923; -O0:    stlxrb w10, w12, [x11]4924; -O0:    subs w9, w8, w9, uxtb4925;4926; -O1-LABEL: atomicrmw_xor_i8_unaligned_release:4927; -O1:    ldxrb w8, [x0]4928; -O1:    eor w9, w8, w14929; -O1:    stlxrb w10, w9, [x0]4930    %r = atomicrmw xor ptr %ptr, i8 %value release, align 14931    ret i8 %r4932}4933 4934define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4935; -O0-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:4936; -O0:    eor w12, w9, w84937; -O0:    ldaxrb w8, [x11]4938; -O0:    cmp w8, w9, uxtb4939; -O0:    stlxrb w10, w12, [x11]4940; -O0:    subs w9, w8, w9, uxtb4941;4942; -O1-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:4943; -O1:    ldaxrb w8, [x0]4944; -O1:    eor w9, w8, w14945; -O1:    stlxrb w10, w9, [x0]4946    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 14947    ret i8 %r4948}4949 4950define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4951; -O0-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:4952; -O0:    eor w12, w9, w84953; -O0:    ldaxrb w8, [x11]4954; -O0:    cmp w8, w9, uxtb4955; -O0:    stlxrb w10, w12, [x11]4956; -O0:    subs w9, w8, w9, uxtb4957;4958; -O1-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:4959; -O1:    ldaxrb w8, [x0]4960; -O1:    eor w9, w8, w14961; -O1:    stlxrb w10, w9, [x0]4962    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 14963    ret i8 %r4964}4965 4966define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4967; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic:4968; -O0:    eor w8, w9, w84969; -O0:    bl __atomic_compare_exchange4970;4971; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic:4972; -O1:    eor w8, w0, w204973; -O1:    bl __atomic_compare_exchange4974    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 14975    ret i16 %r4976}4977 4978define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) {4979; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire:4980; -O0:    eor w8, w9, w84981; -O0:    bl __atomic_compare_exchange4982;4983; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire:4984; -O1:    eor w8, w0, w204985; -O1:    bl __atomic_compare_exchange4986    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 14987    ret i16 %r4988}4989 4990define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) {4991; -O0-LABEL: atomicrmw_xor_i16_unaligned_release:4992; -O0:    eor w8, w9, w84993; -O0:    bl __atomic_compare_exchange4994;4995; -O1-LABEL: atomicrmw_xor_i16_unaligned_release:4996; -O1:    eor w8, w0, w204997; -O1:    bl __atomic_compare_exchange4998    %r = atomicrmw xor ptr %ptr, i16 %value release, align 14999    ret i16 %r5000}5001 5002define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5003; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:5004; -O0:    eor w8, w9, w85005; -O0:    bl __atomic_compare_exchange5006;5007; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:5008; -O1:    eor w8, w0, w205009; -O1:    bl __atomic_compare_exchange5010    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 15011    ret i16 %r5012}5013 5014define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5015; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:5016; -O0:    eor w8, w9, w85017; -O0:    bl __atomic_compare_exchange5018;5019; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:5020; -O1:    eor w8, w0, w205021; -O1:    bl __atomic_compare_exchange5022    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 15023    ret i16 %r5024}5025 5026define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5027; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic:5028; -O0:    eor w8, w9, w85029; -O0:    bl __atomic_compare_exchange5030;5031; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic:5032; -O1:    eor w8, w0, w205033; -O1:    bl __atomic_compare_exchange5034    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 15035    ret i32 %r5036}5037 5038define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) {5039; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire:5040; -O0:    eor w8, w9, w85041; -O0:    bl __atomic_compare_exchange5042;5043; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire:5044; -O1:    eor w8, w0, w205045; -O1:    bl __atomic_compare_exchange5046    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 15047    ret i32 %r5048}5049 5050define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) {5051; -O0-LABEL: atomicrmw_xor_i32_unaligned_release:5052; -O0:    eor w8, w9, w85053; -O0:    bl __atomic_compare_exchange5054;5055; -O1-LABEL: atomicrmw_xor_i32_unaligned_release:5056; -O1:    eor w8, w0, w205057; -O1:    bl __atomic_compare_exchange5058    %r = atomicrmw xor ptr %ptr, i32 %value release, align 15059    ret i32 %r5060}5061 5062define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5063; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:5064; -O0:    eor w8, w9, w85065; -O0:    bl __atomic_compare_exchange5066;5067; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:5068; -O1:    eor w8, w0, w205069; -O1:    bl __atomic_compare_exchange5070    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 15071    ret i32 %r5072}5073 5074define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5075; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:5076; -O0:    eor w8, w9, w85077; -O0:    bl __atomic_compare_exchange5078;5079; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:5080; -O1:    eor w8, w0, w205081; -O1:    bl __atomic_compare_exchange5082    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 15083    ret i32 %r5084}5085 5086define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5087; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic:5088; -O0:    eor x8, x9, x85089; -O0:    bl __atomic_compare_exchange5090;5091; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic:5092; -O1:    eor x8, x0, x205093; -O1:    bl __atomic_compare_exchange5094    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 15095    ret i64 %r5096}5097 5098define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) {5099; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire:5100; -O0:    eor x8, x9, x85101; -O0:    bl __atomic_compare_exchange5102;5103; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire:5104; -O1:    eor x8, x0, x205105; -O1:    bl __atomic_compare_exchange5106    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 15107    ret i64 %r5108}5109 5110define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) {5111; -O0-LABEL: atomicrmw_xor_i64_unaligned_release:5112; -O0:    eor x8, x9, x85113; -O0:    bl __atomic_compare_exchange5114;5115; -O1-LABEL: atomicrmw_xor_i64_unaligned_release:5116; -O1:    eor x8, x0, x205117; -O1:    bl __atomic_compare_exchange5118    %r = atomicrmw xor ptr %ptr, i64 %value release, align 15119    ret i64 %r5120}5121 5122define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {5123; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:5124; -O0:    eor x8, x9, x85125; -O0:    bl __atomic_compare_exchange5126;5127; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:5128; -O1:    eor x8, x0, x205129; -O1:    bl __atomic_compare_exchange5130    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 15131    ret i64 %r5132}5133 5134define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {5135; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:5136; -O0:    eor x8, x9, x85137; -O0:    bl __atomic_compare_exchange5138;5139; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:5140; -O1:    eor x8, x0, x205141; -O1:    bl __atomic_compare_exchange5142    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 15143    ret i64 %r5144}5145 5146define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5147; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic:5148; -O0:    eor x8, x11, x85149; -O0:    eor x9, x10, x95150; -O0:    bl __atomic_compare_exchange5151;5152; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic:5153; -O1:    ldp x0, x1, [x0]5154; -O1:    eor x8, x1, x195155; -O1:    eor x9, x0, x215156; -O1:    bl __atomic_compare_exchange5157    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 15158    ret i128 %r5159}5160 5161define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) {5162; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire:5163; -O0:    eor x8, x11, x85164; -O0:    eor x9, x10, x95165; -O0:    bl __atomic_compare_exchange5166;5167; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire:5168; -O1:    ldp x0, x1, [x0]5169; -O1:    eor x8, x1, x195170; -O1:    eor x9, x0, x215171; -O1:    bl __atomic_compare_exchange5172    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 15173    ret i128 %r5174}5175 5176define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) {5177; -O0-LABEL: atomicrmw_xor_i128_unaligned_release:5178; -O0:    eor x8, x11, x85179; -O0:    eor x9, x10, x95180; -O0:    bl __atomic_compare_exchange5181;5182; -O1-LABEL: atomicrmw_xor_i128_unaligned_release:5183; -O1:    ldp x0, x1, [x0]5184; -O1:    eor x8, x1, x195185; -O1:    eor x9, x0, x215186; -O1:    bl __atomic_compare_exchange5187    %r = atomicrmw xor ptr %ptr, i128 %value release, align 15188    ret i128 %r5189}5190 5191define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5192; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:5193; -O0:    eor x8, x11, x85194; -O0:    eor x9, x10, x95195; -O0:    bl __atomic_compare_exchange5196;5197; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:5198; -O1:    ldp x0, x1, [x0]5199; -O1:    eor x8, x1, x195200; -O1:    eor x9, x0, x215201; -O1:    bl __atomic_compare_exchange5202    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 15203    ret i128 %r5204}5205 5206define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5207; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:5208; -O0:    eor x8, x11, x85209; -O0:    eor x9, x10, x95210; -O0:    bl __atomic_compare_exchange5211;5212; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:5213; -O1:    ldp x0, x1, [x0]5214; -O1:    eor x8, x1, x195215; -O1:    eor x9, x0, x215216; -O1:    bl __atomic_compare_exchange5217    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 15218    ret i128 %r5219}5220 5221define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) {5222; -O0-LABEL: atomicrmw_max_i8_aligned_monotonic:5223; -O0:    sxtb w10, w95224; -O0:    subs w10, w10, w8, sxtb5225; -O0:    csel w12, w9, w8, gt5226; -O0:    ldaxrb w8, [x11]5227; -O0:    cmp w8, w9, uxtb5228; -O0:    stlxrb w10, w12, [x11]5229; -O0:    subs w9, w8, w9, uxtb5230;5231; -O1-LABEL: atomicrmw_max_i8_aligned_monotonic:5232; -O1:    ldxrb w9, [x0]5233; -O1:    sxtb w8, w95234; -O1:    cmp w8, w1, sxtb5235; -O1:    csel w9, w9, w1, gt5236; -O1:    stxrb w10, w9, [x0]5237    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 15238    ret i8 %r5239}5240 5241define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) {5242; -O0-LABEL: atomicrmw_max_i8_aligned_acquire:5243; -O0:    sxtb w10, w95244; -O0:    subs w10, w10, w8, sxtb5245; -O0:    csel w12, w9, w8, gt5246; -O0:    ldaxrb w8, [x11]5247; -O0:    cmp w8, w9, uxtb5248; -O0:    stlxrb w10, w12, [x11]5249; -O0:    subs w9, w8, w9, uxtb5250;5251; -O1-LABEL: atomicrmw_max_i8_aligned_acquire:5252; -O1:    ldaxrb w9, [x0]5253; -O1:    sxtb w8, w95254; -O1:    cmp w8, w1, sxtb5255; -O1:    csel w9, w9, w1, gt5256; -O1:    stxrb w10, w9, [x0]5257    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 15258    ret i8 %r5259}5260 5261define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) {5262; -O0-LABEL: atomicrmw_max_i8_aligned_release:5263; -O0:    sxtb w10, w95264; -O0:    subs w10, w10, w8, sxtb5265; -O0:    csel w12, w9, w8, gt5266; -O0:    ldaxrb w8, [x11]5267; -O0:    cmp w8, w9, uxtb5268; -O0:    stlxrb w10, w12, [x11]5269; -O0:    subs w9, w8, w9, uxtb5270;5271; -O1-LABEL: atomicrmw_max_i8_aligned_release:5272; -O1:    ldxrb w9, [x0]5273; -O1:    sxtb w8, w95274; -O1:    cmp w8, w1, sxtb5275; -O1:    csel w9, w9, w1, gt5276; -O1:    stlxrb w10, w9, [x0]5277    %r = atomicrmw max ptr %ptr, i8 %value release, align 15278    ret i8 %r5279}5280 5281define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5282; -O0-LABEL: atomicrmw_max_i8_aligned_acq_rel:5283; -O0:    sxtb w10, w95284; -O0:    subs w10, w10, w8, sxtb5285; -O0:    csel w12, w9, w8, gt5286; -O0:    ldaxrb w8, [x11]5287; -O0:    cmp w8, w9, uxtb5288; -O0:    stlxrb w10, w12, [x11]5289; -O0:    subs w9, w8, w9, uxtb5290;5291; -O1-LABEL: atomicrmw_max_i8_aligned_acq_rel:5292; -O1:    ldaxrb w9, [x0]5293; -O1:    sxtb w8, w95294; -O1:    cmp w8, w1, sxtb5295; -O1:    csel w9, w9, w1, gt5296; -O1:    stlxrb w10, w9, [x0]5297    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 15298    ret i8 %r5299}5300 5301define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5302; -O0-LABEL: atomicrmw_max_i8_aligned_seq_cst:5303; -O0:    sxtb w10, w95304; -O0:    subs w10, w10, w8, sxtb5305; -O0:    csel w12, w9, w8, gt5306; -O0:    ldaxrb w8, [x11]5307; -O0:    cmp w8, w9, uxtb5308; -O0:    stlxrb w10, w12, [x11]5309; -O0:    subs w9, w8, w9, uxtb5310;5311; -O1-LABEL: atomicrmw_max_i8_aligned_seq_cst:5312; -O1:    ldaxrb w9, [x0]5313; -O1:    sxtb w8, w95314; -O1:    cmp w8, w1, sxtb5315; -O1:    csel w9, w9, w1, gt5316; -O1:    stlxrb w10, w9, [x0]5317    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 15318    ret i8 %r5319}5320 5321define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) {5322; -O0-LABEL: atomicrmw_max_i16_aligned_monotonic:5323; -O0:    sxth w10, w95324; -O0:    subs w10, w10, w8, sxth5325; -O0:    csel w12, w9, w8, gt5326; -O0:    ldaxrh w8, [x11]5327; -O0:    cmp w8, w9, uxth5328; -O0:    stlxrh w10, w12, [x11]5329; -O0:    subs w9, w8, w9, uxth5330;5331; -O1-LABEL: atomicrmw_max_i16_aligned_monotonic:5332; -O1:    ldxrh w9, [x0]5333; -O1:    sxth w8, w95334; -O1:    cmp w8, w1, sxth5335; -O1:    csel w9, w9, w1, gt5336; -O1:    stxrh w10, w9, [x0]5337    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 25338    ret i16 %r5339}5340 5341define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) {5342; -O0-LABEL: atomicrmw_max_i16_aligned_acquire:5343; -O0:    sxth w10, w95344; -O0:    subs w10, w10, w8, sxth5345; -O0:    csel w12, w9, w8, gt5346; -O0:    ldaxrh w8, [x11]5347; -O0:    cmp w8, w9, uxth5348; -O0:    stlxrh w10, w12, [x11]5349; -O0:    subs w9, w8, w9, uxth5350;5351; -O1-LABEL: atomicrmw_max_i16_aligned_acquire:5352; -O1:    ldaxrh w9, [x0]5353; -O1:    sxth w8, w95354; -O1:    cmp w8, w1, sxth5355; -O1:    csel w9, w9, w1, gt5356; -O1:    stxrh w10, w9, [x0]5357    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 25358    ret i16 %r5359}5360 5361define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) {5362; -O0-LABEL: atomicrmw_max_i16_aligned_release:5363; -O0:    sxth w10, w95364; -O0:    subs w10, w10, w8, sxth5365; -O0:    csel w12, w9, w8, gt5366; -O0:    ldaxrh w8, [x11]5367; -O0:    cmp w8, w9, uxth5368; -O0:    stlxrh w10, w12, [x11]5369; -O0:    subs w9, w8, w9, uxth5370;5371; -O1-LABEL: atomicrmw_max_i16_aligned_release:5372; -O1:    ldxrh w9, [x0]5373; -O1:    sxth w8, w95374; -O1:    cmp w8, w1, sxth5375; -O1:    csel w9, w9, w1, gt5376; -O1:    stlxrh w10, w9, [x0]5377    %r = atomicrmw max ptr %ptr, i16 %value release, align 25378    ret i16 %r5379}5380 5381define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5382; -O0-LABEL: atomicrmw_max_i16_aligned_acq_rel:5383; -O0:    sxth w10, w95384; -O0:    subs w10, w10, w8, sxth5385; -O0:    csel w12, w9, w8, gt5386; -O0:    ldaxrh w8, [x11]5387; -O0:    cmp w8, w9, uxth5388; -O0:    stlxrh w10, w12, [x11]5389; -O0:    subs w9, w8, w9, uxth5390;5391; -O1-LABEL: atomicrmw_max_i16_aligned_acq_rel:5392; -O1:    ldaxrh w9, [x0]5393; -O1:    sxth w8, w95394; -O1:    cmp w8, w1, sxth5395; -O1:    csel w9, w9, w1, gt5396; -O1:    stlxrh w10, w9, [x0]5397    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 25398    ret i16 %r5399}5400 5401define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5402; -O0-LABEL: atomicrmw_max_i16_aligned_seq_cst:5403; -O0:    sxth w10, w95404; -O0:    subs w10, w10, w8, sxth5405; -O0:    csel w12, w9, w8, gt5406; -O0:    ldaxrh w8, [x11]5407; -O0:    cmp w8, w9, uxth5408; -O0:    stlxrh w10, w12, [x11]5409; -O0:    subs w9, w8, w9, uxth5410;5411; -O1-LABEL: atomicrmw_max_i16_aligned_seq_cst:5412; -O1:    ldaxrh w9, [x0]5413; -O1:    sxth w8, w95414; -O1:    cmp w8, w1, sxth5415; -O1:    csel w9, w9, w1, gt5416; -O1:    stlxrh w10, w9, [x0]5417    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 25418    ret i16 %r5419}5420 5421define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) {5422; -O0-LABEL: atomicrmw_max_i32_aligned_monotonic:5423; -O0:    subs w10, w9, w85424; -O0:    csel w12, w9, w8, gt5425; -O0:    ldaxr w8, [x11]5426; -O0:    cmp w8, w95427; -O0:    stlxr w10, w12, [x11]5428; -O0:    subs w9, w8, w95429;5430; -O1-LABEL: atomicrmw_max_i32_aligned_monotonic:5431; -O1:    ldxr w8, [x0]5432; -O1:    cmp w8, w15433; -O1:    csel w9, w8, w1, gt5434; -O1:    stxr w10, w9, [x0]5435    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 45436    ret i32 %r5437}5438 5439define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) {5440; -O0-LABEL: atomicrmw_max_i32_aligned_acquire:5441; -O0:    subs w10, w9, w85442; -O0:    csel w12, w9, w8, gt5443; -O0:    ldaxr w8, [x11]5444; -O0:    cmp w8, w95445; -O0:    stlxr w10, w12, [x11]5446; -O0:    subs w9, w8, w95447;5448; -O1-LABEL: atomicrmw_max_i32_aligned_acquire:5449; -O1:    ldaxr w8, [x0]5450; -O1:    cmp w8, w15451; -O1:    csel w9, w8, w1, gt5452; -O1:    stxr w10, w9, [x0]5453    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 45454    ret i32 %r5455}5456 5457define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) {5458; -O0-LABEL: atomicrmw_max_i32_aligned_release:5459; -O0:    subs w10, w9, w85460; -O0:    csel w12, w9, w8, gt5461; -O0:    ldaxr w8, [x11]5462; -O0:    cmp w8, w95463; -O0:    stlxr w10, w12, [x11]5464; -O0:    subs w9, w8, w95465;5466; -O1-LABEL: atomicrmw_max_i32_aligned_release:5467; -O1:    ldxr w8, [x0]5468; -O1:    cmp w8, w15469; -O1:    csel w9, w8, w1, gt5470; -O1:    stlxr w10, w9, [x0]5471    %r = atomicrmw max ptr %ptr, i32 %value release, align 45472    ret i32 %r5473}5474 5475define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5476; -O0-LABEL: atomicrmw_max_i32_aligned_acq_rel:5477; -O0:    subs w10, w9, w85478; -O0:    csel w12, w9, w8, gt5479; -O0:    ldaxr w8, [x11]5480; -O0:    cmp w8, w95481; -O0:    stlxr w10, w12, [x11]5482; -O0:    subs w9, w8, w95483;5484; -O1-LABEL: atomicrmw_max_i32_aligned_acq_rel:5485; -O1:    ldaxr w8, [x0]5486; -O1:    cmp w8, w15487; -O1:    csel w9, w8, w1, gt5488; -O1:    stlxr w10, w9, [x0]5489    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 45490    ret i32 %r5491}5492 5493define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5494; -O0-LABEL: atomicrmw_max_i32_aligned_seq_cst:5495; -O0:    subs w10, w9, w85496; -O0:    csel w12, w9, w8, gt5497; -O0:    ldaxr w8, [x11]5498; -O0:    cmp w8, w95499; -O0:    stlxr w10, w12, [x11]5500; -O0:    subs w9, w8, w95501;5502; -O1-LABEL: atomicrmw_max_i32_aligned_seq_cst:5503; -O1:    ldaxr w8, [x0]5504; -O1:    cmp w8, w15505; -O1:    csel w9, w8, w1, gt5506; -O1:    stlxr w10, w9, [x0]5507    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 45508    ret i32 %r5509}5510 5511define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) {5512; -O0-LABEL: atomicrmw_max_i64_aligned_monotonic:5513; -O0:    subs x10, x9, x85514; -O0:    csel x12, x9, x8, gt5515; -O0:    ldaxr x8, [x11]5516; -O0:    cmp x8, x95517; -O0:    stlxr w10, x12, [x11]5518; -O0:    subs x9, x8, x95519;5520; -O1-LABEL: atomicrmw_max_i64_aligned_monotonic:5521; -O1:    ldxr x0, [x8]5522; -O1:    cmp x0, x15523; -O1:    csel x9, x0, x1, gt5524; -O1:    stxr w10, x9, [x8]5525    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 85526    ret i64 %r5527}5528 5529define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) {5530; -O0-LABEL: atomicrmw_max_i64_aligned_acquire:5531; -O0:    subs x10, x9, x85532; -O0:    csel x12, x9, x8, gt5533; -O0:    ldaxr x8, [x11]5534; -O0:    cmp x8, x95535; -O0:    stlxr w10, x12, [x11]5536; -O0:    subs x9, x8, x95537;5538; -O1-LABEL: atomicrmw_max_i64_aligned_acquire:5539; -O1:    ldaxr x0, [x8]5540; -O1:    cmp x0, x15541; -O1:    csel x9, x0, x1, gt5542; -O1:    stxr w10, x9, [x8]5543    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 85544    ret i64 %r5545}5546 5547define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) {5548; -O0-LABEL: atomicrmw_max_i64_aligned_release:5549; -O0:    subs x10, x9, x85550; -O0:    csel x12, x9, x8, gt5551; -O0:    ldaxr x8, [x11]5552; -O0:    cmp x8, x95553; -O0:    stlxr w10, x12, [x11]5554; -O0:    subs x9, x8, x95555;5556; -O1-LABEL: atomicrmw_max_i64_aligned_release:5557; -O1:    ldxr x0, [x8]5558; -O1:    cmp x0, x15559; -O1:    csel x9, x0, x1, gt5560; -O1:    stlxr w10, x9, [x8]5561    %r = atomicrmw max ptr %ptr, i64 %value release, align 85562    ret i64 %r5563}5564 5565define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5566; -O0-LABEL: atomicrmw_max_i64_aligned_acq_rel:5567; -O0:    subs x10, x9, x85568; -O0:    csel x12, x9, x8, gt5569; -O0:    ldaxr x8, [x11]5570; -O0:    cmp x8, x95571; -O0:    stlxr w10, x12, [x11]5572; -O0:    subs x9, x8, x95573;5574; -O1-LABEL: atomicrmw_max_i64_aligned_acq_rel:5575; -O1:    ldaxr x0, [x8]5576; -O1:    cmp x0, x15577; -O1:    csel x9, x0, x1, gt5578; -O1:    stlxr w10, x9, [x8]5579    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 85580    ret i64 %r5581}5582 5583define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5584; -O0-LABEL: atomicrmw_max_i64_aligned_seq_cst:5585; -O0:    subs x10, x9, x85586; -O0:    csel x12, x9, x8, gt5587; -O0:    ldaxr x8, [x11]5588; -O0:    cmp x8, x95589; -O0:    stlxr w10, x12, [x11]5590; -O0:    subs x9, x8, x95591;5592; -O1-LABEL: atomicrmw_max_i64_aligned_seq_cst:5593; -O1:    ldaxr x0, [x8]5594; -O1:    cmp x0, x15595; -O1:    csel x9, x0, x1, gt5596; -O1:    stlxr w10, x9, [x8]5597    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 85598    ret i64 %r5599}5600 5601define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) {5602; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic:5603; -O0:    subs x12, x8, x115604; -O0:    csel x15, x13, x10, lt5605; -O0:    csel x14, x11, x8, lt5606; -O0:    ldxp x10, x12, [x9]5607; -O0:    cmp x10, x115608; -O0:    cmp x12, x135609; -O0:    stxp w8, x14, x15, [x9]5610; -O0:    stxp w8, x10, x12, [x9]5611; -O0:    subs x12, x12, x135612; -O0:    ccmp x10, x11, #0, eq5613;5614; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic:5615; -O1:    ldxp x1, x0, [x8]5616; -O1:    cmp x3, x15617; -O1:    csel x9, x0, x2, lt5618; -O1:    csel x10, x1, x3, lt5619; -O1:    stxp w11, x10, x9, [x8]5620    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 165621    ret i128 %r5622}5623 5624define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) {5625; -O0-LABEL: atomicrmw_max_i128_aligned_acquire:5626; -O0:    subs x12, x8, x115627; -O0:    csel x15, x13, x10, lt5628; -O0:    csel x14, x11, x8, lt5629; -O0:    ldaxp x10, x12, [x9]5630; -O0:    cmp x10, x115631; -O0:    cmp x12, x135632; -O0:    stxp w8, x14, x15, [x9]5633; -O0:    stxp w8, x10, x12, [x9]5634; -O0:    subs x12, x12, x135635; -O0:    ccmp x10, x11, #0, eq5636;5637; -O1-LABEL: atomicrmw_max_i128_aligned_acquire:5638; -O1:    ldaxp x1, x0, [x8]5639; -O1:    cmp x3, x15640; -O1:    csel x9, x0, x2, lt5641; -O1:    csel x10, x1, x3, lt5642; -O1:    stxp w11, x10, x9, [x8]5643    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 165644    ret i128 %r5645}5646 5647define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) {5648; -O0-LABEL: atomicrmw_max_i128_aligned_release:5649; -O0:    subs x12, x8, x115650; -O0:    csel x15, x13, x10, lt5651; -O0:    csel x14, x11, x8, lt5652; -O0:    ldxp x10, x12, [x9]5653; -O0:    cmp x10, x115654; -O0:    cmp x12, x135655; -O0:    stlxp w8, x14, x15, [x9]5656; -O0:    stlxp w8, x10, x12, [x9]5657; -O0:    subs x12, x12, x135658; -O0:    ccmp x10, x11, #0, eq5659;5660; -O1-LABEL: atomicrmw_max_i128_aligned_release:5661; -O1:    ldxp x1, x0, [x8]5662; -O1:    cmp x3, x15663; -O1:    csel x9, x0, x2, lt5664; -O1:    csel x10, x1, x3, lt5665; -O1:    stlxp w11, x10, x9, [x8]5666    %r = atomicrmw max ptr %ptr, i128 %value release, align 165667    ret i128 %r5668}5669 5670define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5671; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel:5672; -O0:    subs x12, x8, x115673; -O0:    csel x15, x13, x10, lt5674; -O0:    csel x14, x11, x8, lt5675; -O0:    ldaxp x10, x12, [x9]5676; -O0:    cmp x10, x115677; -O0:    cmp x12, x135678; -O0:    stlxp w8, x14, x15, [x9]5679; -O0:    stlxp w8, x10, x12, [x9]5680; -O0:    subs x12, x12, x135681; -O0:    ccmp x10, x11, #0, eq5682;5683; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel:5684; -O1:    ldaxp x1, x0, [x8]5685; -O1:    cmp x3, x15686; -O1:    csel x9, x0, x2, lt5687; -O1:    csel x10, x1, x3, lt5688; -O1:    stlxp w11, x10, x9, [x8]5689    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 165690    ret i128 %r5691}5692 5693define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5694; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst:5695; -O0:    subs x12, x8, x115696; -O0:    csel x15, x13, x10, lt5697; -O0:    csel x14, x11, x8, lt5698; -O0:    ldaxp x10, x12, [x9]5699; -O0:    cmp x10, x115700; -O0:    cmp x12, x135701; -O0:    stlxp w8, x14, x15, [x9]5702; -O0:    stlxp w8, x10, x12, [x9]5703; -O0:    subs x12, x12, x135704; -O0:    ccmp x10, x11, #0, eq5705;5706; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst:5707; -O1:    ldaxp x1, x0, [x8]5708; -O1:    cmp x3, x15709; -O1:    csel x9, x0, x2, lt5710; -O1:    csel x10, x1, x3, lt5711; -O1:    stlxp w11, x10, x9, [x8]5712    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 165713    ret i128 %r5714}5715 5716define dso_local i8 @atomicrmw_max_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5717; -O0-LABEL: atomicrmw_max_i8_unaligned_monotonic:5718; -O0:    sxtb w10, w95719; -O0:    subs w10, w10, w8, sxtb5720; -O0:    csel w12, w9, w8, gt5721; -O0:    ldaxrb w8, [x11]5722; -O0:    cmp w8, w9, uxtb5723; -O0:    stlxrb w10, w12, [x11]5724; -O0:    subs w9, w8, w9, uxtb5725;5726; -O1-LABEL: atomicrmw_max_i8_unaligned_monotonic:5727; -O1:    ldxrb w9, [x0]5728; -O1:    sxtb w8, w95729; -O1:    cmp w8, w1, sxtb5730; -O1:    csel w9, w9, w1, gt5731; -O1:    stxrb w10, w9, [x0]5732    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 15733    ret i8 %r5734}5735 5736define dso_local i8 @atomicrmw_max_i8_unaligned_acquire(ptr %ptr, i8 %value) {5737; -O0-LABEL: atomicrmw_max_i8_unaligned_acquire:5738; -O0:    sxtb w10, w95739; -O0:    subs w10, w10, w8, sxtb5740; -O0:    csel w12, w9, w8, gt5741; -O0:    ldaxrb w8, [x11]5742; -O0:    cmp w8, w9, uxtb5743; -O0:    stlxrb w10, w12, [x11]5744; -O0:    subs w9, w8, w9, uxtb5745;5746; -O1-LABEL: atomicrmw_max_i8_unaligned_acquire:5747; -O1:    ldaxrb w9, [x0]5748; -O1:    sxtb w8, w95749; -O1:    cmp w8, w1, sxtb5750; -O1:    csel w9, w9, w1, gt5751; -O1:    stxrb w10, w9, [x0]5752    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 15753    ret i8 %r5754}5755 5756define dso_local i8 @atomicrmw_max_i8_unaligned_release(ptr %ptr, i8 %value) {5757; -O0-LABEL: atomicrmw_max_i8_unaligned_release:5758; -O0:    sxtb w10, w95759; -O0:    subs w10, w10, w8, sxtb5760; -O0:    csel w12, w9, w8, gt5761; -O0:    ldaxrb w8, [x11]5762; -O0:    cmp w8, w9, uxtb5763; -O0:    stlxrb w10, w12, [x11]5764; -O0:    subs w9, w8, w9, uxtb5765;5766; -O1-LABEL: atomicrmw_max_i8_unaligned_release:5767; -O1:    ldxrb w9, [x0]5768; -O1:    sxtb w8, w95769; -O1:    cmp w8, w1, sxtb5770; -O1:    csel w9, w9, w1, gt5771; -O1:    stlxrb w10, w9, [x0]5772    %r = atomicrmw max ptr %ptr, i8 %value release, align 15773    ret i8 %r5774}5775 5776define dso_local i8 @atomicrmw_max_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5777; -O0-LABEL: atomicrmw_max_i8_unaligned_acq_rel:5778; -O0:    sxtb w10, w95779; -O0:    subs w10, w10, w8, sxtb5780; -O0:    csel w12, w9, w8, gt5781; -O0:    ldaxrb w8, [x11]5782; -O0:    cmp w8, w9, uxtb5783; -O0:    stlxrb w10, w12, [x11]5784; -O0:    subs w9, w8, w9, uxtb5785;5786; -O1-LABEL: atomicrmw_max_i8_unaligned_acq_rel:5787; -O1:    ldaxrb w9, [x0]5788; -O1:    sxtb w8, w95789; -O1:    cmp w8, w1, sxtb5790; -O1:    csel w9, w9, w1, gt5791; -O1:    stlxrb w10, w9, [x0]5792    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 15793    ret i8 %r5794}5795 5796define dso_local i8 @atomicrmw_max_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5797; -O0-LABEL: atomicrmw_max_i8_unaligned_seq_cst:5798; -O0:    sxtb w10, w95799; -O0:    subs w10, w10, w8, sxtb5800; -O0:    csel w12, w9, w8, gt5801; -O0:    ldaxrb w8, [x11]5802; -O0:    cmp w8, w9, uxtb5803; -O0:    stlxrb w10, w12, [x11]5804; -O0:    subs w9, w8, w9, uxtb5805;5806; -O1-LABEL: atomicrmw_max_i8_unaligned_seq_cst:5807; -O1:    ldaxrb w9, [x0]5808; -O1:    sxtb w8, w95809; -O1:    cmp w8, w1, sxtb5810; -O1:    csel w9, w9, w1, gt5811; -O1:    stlxrb w10, w9, [x0]5812    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 15813    ret i8 %r5814}5815 5816define dso_local i16 @atomicrmw_max_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5817; -O0-LABEL: atomicrmw_max_i16_unaligned_monotonic:5818; -O0:    sxth w10, w95819; -O0:    subs w10, w10, w8, sxth5820; -O0:    csel w8, w9, w8, gt5821; -O0:    bl __atomic_compare_exchange5822;5823; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic:5824; -O1:    sxth w8, w05825; -O1:    cmp w8, w20, sxth5826; -O1:    csel w8, w0, w20, gt5827; -O1:    bl __atomic_compare_exchange5828    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 15829    ret i16 %r5830}5831 5832define dso_local i16 @atomicrmw_max_i16_unaligned_acquire(ptr %ptr, i16 %value) {5833; -O0-LABEL: atomicrmw_max_i16_unaligned_acquire:5834; -O0:    sxth w10, w95835; -O0:    subs w10, w10, w8, sxth5836; -O0:    csel w8, w9, w8, gt5837; -O0:    bl __atomic_compare_exchange5838;5839; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire:5840; -O1:    sxth w8, w05841; -O1:    cmp w8, w20, sxth5842; -O1:    csel w8, w0, w20, gt5843; -O1:    bl __atomic_compare_exchange5844    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 15845    ret i16 %r5846}5847 5848define dso_local i16 @atomicrmw_max_i16_unaligned_release(ptr %ptr, i16 %value) {5849; -O0-LABEL: atomicrmw_max_i16_unaligned_release:5850; -O0:    sxth w10, w95851; -O0:    subs w10, w10, w8, sxth5852; -O0:    csel w8, w9, w8, gt5853; -O0:    bl __atomic_compare_exchange5854;5855; -O1-LABEL: atomicrmw_max_i16_unaligned_release:5856; -O1:    sxth w8, w05857; -O1:    cmp w8, w20, sxth5858; -O1:    csel w8, w0, w20, gt5859; -O1:    bl __atomic_compare_exchange5860    %r = atomicrmw max ptr %ptr, i16 %value release, align 15861    ret i16 %r5862}5863 5864define dso_local i16 @atomicrmw_max_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5865; -O0-LABEL: atomicrmw_max_i16_unaligned_acq_rel:5866; -O0:    sxth w10, w95867; -O0:    subs w10, w10, w8, sxth5868; -O0:    csel w8, w9, w8, gt5869; -O0:    bl __atomic_compare_exchange5870;5871; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel:5872; -O1:    sxth w8, w05873; -O1:    cmp w8, w20, sxth5874; -O1:    csel w8, w0, w20, gt5875; -O1:    bl __atomic_compare_exchange5876    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 15877    ret i16 %r5878}5879 5880define dso_local i16 @atomicrmw_max_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5881; -O0-LABEL: atomicrmw_max_i16_unaligned_seq_cst:5882; -O0:    sxth w10, w95883; -O0:    subs w10, w10, w8, sxth5884; -O0:    csel w8, w9, w8, gt5885; -O0:    bl __atomic_compare_exchange5886;5887; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst:5888; -O1:    sxth w8, w05889; -O1:    cmp w8, w20, sxth5890; -O1:    csel w8, w0, w20, gt5891; -O1:    bl __atomic_compare_exchange5892    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 15893    ret i16 %r5894}5895 5896define dso_local i32 @atomicrmw_max_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5897; -O0-LABEL: atomicrmw_max_i32_unaligned_monotonic:5898; -O0:    subs w10, w9, w85899; -O0:    csel w8, w9, w8, gt5900; -O0:    bl __atomic_compare_exchange5901;5902; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic:5903; -O1:    cmp w0, w205904; -O1:    csel w8, w0, w20, gt5905; -O1:    bl __atomic_compare_exchange5906    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 15907    ret i32 %r5908}5909 5910define dso_local i32 @atomicrmw_max_i32_unaligned_acquire(ptr %ptr, i32 %value) {5911; -O0-LABEL: atomicrmw_max_i32_unaligned_acquire:5912; -O0:    subs w10, w9, w85913; -O0:    csel w8, w9, w8, gt5914; -O0:    bl __atomic_compare_exchange5915;5916; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire:5917; -O1:    cmp w0, w205918; -O1:    csel w8, w0, w20, gt5919; -O1:    bl __atomic_compare_exchange5920    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 15921    ret i32 %r5922}5923 5924define dso_local i32 @atomicrmw_max_i32_unaligned_release(ptr %ptr, i32 %value) {5925; -O0-LABEL: atomicrmw_max_i32_unaligned_release:5926; -O0:    subs w10, w9, w85927; -O0:    csel w8, w9, w8, gt5928; -O0:    bl __atomic_compare_exchange5929;5930; -O1-LABEL: atomicrmw_max_i32_unaligned_release:5931; -O1:    cmp w0, w205932; -O1:    csel w8, w0, w20, gt5933; -O1:    bl __atomic_compare_exchange5934    %r = atomicrmw max ptr %ptr, i32 %value release, align 15935    ret i32 %r5936}5937 5938define dso_local i32 @atomicrmw_max_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5939; -O0-LABEL: atomicrmw_max_i32_unaligned_acq_rel:5940; -O0:    subs w10, w9, w85941; -O0:    csel w8, w9, w8, gt5942; -O0:    bl __atomic_compare_exchange5943;5944; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel:5945; -O1:    cmp w0, w205946; -O1:    csel w8, w0, w20, gt5947; -O1:    bl __atomic_compare_exchange5948    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 15949    ret i32 %r5950}5951 5952define dso_local i32 @atomicrmw_max_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5953; -O0-LABEL: atomicrmw_max_i32_unaligned_seq_cst:5954; -O0:    subs w10, w9, w85955; -O0:    csel w8, w9, w8, gt5956; -O0:    bl __atomic_compare_exchange5957;5958; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst:5959; -O1:    cmp w0, w205960; -O1:    csel w8, w0, w20, gt5961; -O1:    bl __atomic_compare_exchange5962    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 15963    ret i32 %r5964}5965 5966define dso_local i64 @atomicrmw_max_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5967; -O0-LABEL: atomicrmw_max_i64_unaligned_monotonic:5968; -O0:    subs x10, x9, x85969; -O0:    csel x8, x9, x8, gt5970; -O0:    bl __atomic_compare_exchange5971;5972; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic:5973; -O1:    cmp x0, x205974; -O1:    csel x8, x0, x20, gt5975; -O1:    bl __atomic_compare_exchange5976    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 15977    ret i64 %r5978}5979 5980define dso_local i64 @atomicrmw_max_i64_unaligned_acquire(ptr %ptr, i64 %value) {5981; -O0-LABEL: atomicrmw_max_i64_unaligned_acquire:5982; -O0:    subs x10, x9, x85983; -O0:    csel x8, x9, x8, gt5984; -O0:    bl __atomic_compare_exchange5985;5986; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire:5987; -O1:    cmp x0, x205988; -O1:    csel x8, x0, x20, gt5989; -O1:    bl __atomic_compare_exchange5990    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 15991    ret i64 %r5992}5993 5994define dso_local i64 @atomicrmw_max_i64_unaligned_release(ptr %ptr, i64 %value) {5995; -O0-LABEL: atomicrmw_max_i64_unaligned_release:5996; -O0:    subs x10, x9, x85997; -O0:    csel x8, x9, x8, gt5998; -O0:    bl __atomic_compare_exchange5999;6000; -O1-LABEL: atomicrmw_max_i64_unaligned_release:6001; -O1:    cmp x0, x206002; -O1:    csel x8, x0, x20, gt6003; -O1:    bl __atomic_compare_exchange6004    %r = atomicrmw max ptr %ptr, i64 %value release, align 16005    ret i64 %r6006}6007 6008define dso_local i64 @atomicrmw_max_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {6009; -O0-LABEL: atomicrmw_max_i64_unaligned_acq_rel:6010; -O0:    subs x10, x9, x86011; -O0:    csel x8, x9, x8, gt6012; -O0:    bl __atomic_compare_exchange6013;6014; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel:6015; -O1:    cmp x0, x206016; -O1:    csel x8, x0, x20, gt6017; -O1:    bl __atomic_compare_exchange6018    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 16019    ret i64 %r6020}6021 6022define dso_local i64 @atomicrmw_max_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {6023; -O0-LABEL: atomicrmw_max_i64_unaligned_seq_cst:6024; -O0:    subs x10, x9, x86025; -O0:    csel x8, x9, x8, gt6026; -O0:    bl __atomic_compare_exchange6027;6028; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst:6029; -O1:    cmp x0, x206030; -O1:    csel x8, x0, x20, gt6031; -O1:    bl __atomic_compare_exchange6032    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 16033    ret i64 %r6034}6035 6036define dso_local i128 @atomicrmw_max_i128_unaligned_monotonic(ptr %ptr, i128 %value) {6037; -O0-LABEL: atomicrmw_max_i128_unaligned_monotonic:6038; -O0:    subs x12, x9, x106039; -O0:    csel x8, x11, x8, lt6040; -O0:    csel x9, x10, x9, lt6041; -O0:    bl __atomic_compare_exchange6042;6043; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic:6044; -O1:    ldp x0, x1, [x0]6045; -O1:    cmp x19, x16046; -O1:    csel x8, x1, x19, lt6047; -O1:    csel x9, x0, x21, lt6048; -O1:    bl __atomic_compare_exchange6049    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 16050    ret i128 %r6051}6052 6053define dso_local i128 @atomicrmw_max_i128_unaligned_acquire(ptr %ptr, i128 %value) {6054; -O0-LABEL: atomicrmw_max_i128_unaligned_acquire:6055; -O0:    subs x12, x9, x106056; -O0:    csel x8, x11, x8, lt6057; -O0:    csel x9, x10, x9, lt6058; -O0:    bl __atomic_compare_exchange6059;6060; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire:6061; -O1:    ldp x0, x1, [x0]6062; -O1:    cmp x19, x16063; -O1:    csel x8, x1, x19, lt6064; -O1:    csel x9, x0, x21, lt6065; -O1:    bl __atomic_compare_exchange6066    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 16067    ret i128 %r6068}6069 6070define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) {6071; -O0-LABEL: atomicrmw_max_i128_unaligned_release:6072; -O0:    subs x12, x9, x106073; -O0:    csel x8, x11, x8, lt6074; -O0:    csel x9, x10, x9, lt6075; -O0:    bl __atomic_compare_exchange6076;6077; -O1-LABEL: atomicrmw_max_i128_unaligned_release:6078; -O1:    ldp x0, x1, [x0]6079; -O1:    cmp x19, x16080; -O1:    csel x8, x1, x19, lt6081; -O1:    csel x9, x0, x21, lt6082; -O1:    bl __atomic_compare_exchange6083    %r = atomicrmw max ptr %ptr, i128 %value release, align 16084    ret i128 %r6085}6086 6087define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {6088; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel:6089; -O0:    subs x12, x9, x106090; -O0:    csel x8, x11, x8, lt6091; -O0:    csel x9, x10, x9, lt6092; -O0:    bl __atomic_compare_exchange6093;6094; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel:6095; -O1:    ldp x0, x1, [x0]6096; -O1:    cmp x19, x16097; -O1:    csel x8, x1, x19, lt6098; -O1:    csel x9, x0, x21, lt6099; -O1:    bl __atomic_compare_exchange6100    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 16101    ret i128 %r6102}6103 6104define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {6105; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst:6106; -O0:    subs x12, x9, x106107; -O0:    csel x8, x11, x8, lt6108; -O0:    csel x9, x10, x9, lt6109; -O0:    bl __atomic_compare_exchange6110;6111; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst:6112; -O1:    ldp x0, x1, [x0]6113; -O1:    cmp x19, x16114; -O1:    csel x8, x1, x19, lt6115; -O1:    csel x9, x0, x21, lt6116; -O1:    bl __atomic_compare_exchange6117    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 16118    ret i128 %r6119}6120 6121define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) {6122; -O0-LABEL: atomicrmw_min_i8_aligned_monotonic:6123; -O0:    sxtb w10, w96124; -O0:    subs w10, w10, w8, sxtb6125; -O0:    csel w12, w9, w8, le6126; -O0:    ldaxrb w8, [x11]6127; -O0:    cmp w8, w9, uxtb6128; -O0:    stlxrb w10, w12, [x11]6129; -O0:    subs w9, w8, w9, uxtb6130;6131; -O1-LABEL: atomicrmw_min_i8_aligned_monotonic:6132; -O1:    ldxrb w9, [x0]6133; -O1:    sxtb w8, w96134; -O1:    cmp w8, w1, sxtb6135; -O1:    csel w9, w9, w1, le6136; -O1:    stxrb w10, w9, [x0]6137    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 16138    ret i8 %r6139}6140 6141define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) {6142; -O0-LABEL: atomicrmw_min_i8_aligned_acquire:6143; -O0:    sxtb w10, w96144; -O0:    subs w10, w10, w8, sxtb6145; -O0:    csel w12, w9, w8, le6146; -O0:    ldaxrb w8, [x11]6147; -O0:    cmp w8, w9, uxtb6148; -O0:    stlxrb w10, w12, [x11]6149; -O0:    subs w9, w8, w9, uxtb6150;6151; -O1-LABEL: atomicrmw_min_i8_aligned_acquire:6152; -O1:    ldaxrb w9, [x0]6153; -O1:    sxtb w8, w96154; -O1:    cmp w8, w1, sxtb6155; -O1:    csel w9, w9, w1, le6156; -O1:    stxrb w10, w9, [x0]6157    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 16158    ret i8 %r6159}6160 6161define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) {6162; -O0-LABEL: atomicrmw_min_i8_aligned_release:6163; -O0:    sxtb w10, w96164; -O0:    subs w10, w10, w8, sxtb6165; -O0:    csel w12, w9, w8, le6166; -O0:    ldaxrb w8, [x11]6167; -O0:    cmp w8, w9, uxtb6168; -O0:    stlxrb w10, w12, [x11]6169; -O0:    subs w9, w8, w9, uxtb6170;6171; -O1-LABEL: atomicrmw_min_i8_aligned_release:6172; -O1:    ldxrb w9, [x0]6173; -O1:    sxtb w8, w96174; -O1:    cmp w8, w1, sxtb6175; -O1:    csel w9, w9, w1, le6176; -O1:    stlxrb w10, w9, [x0]6177    %r = atomicrmw min ptr %ptr, i8 %value release, align 16178    ret i8 %r6179}6180 6181define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) {6182; -O0-LABEL: atomicrmw_min_i8_aligned_acq_rel:6183; -O0:    sxtb w10, w96184; -O0:    subs w10, w10, w8, sxtb6185; -O0:    csel w12, w9, w8, le6186; -O0:    ldaxrb w8, [x11]6187; -O0:    cmp w8, w9, uxtb6188; -O0:    stlxrb w10, w12, [x11]6189; -O0:    subs w9, w8, w9, uxtb6190;6191; -O1-LABEL: atomicrmw_min_i8_aligned_acq_rel:6192; -O1:    ldaxrb w9, [x0]6193; -O1:    sxtb w8, w96194; -O1:    cmp w8, w1, sxtb6195; -O1:    csel w9, w9, w1, le6196; -O1:    stlxrb w10, w9, [x0]6197    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 16198    ret i8 %r6199}6200 6201define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) {6202; -O0-LABEL: atomicrmw_min_i8_aligned_seq_cst:6203; -O0:    sxtb w10, w96204; -O0:    subs w10, w10, w8, sxtb6205; -O0:    csel w12, w9, w8, le6206; -O0:    ldaxrb w8, [x11]6207; -O0:    cmp w8, w9, uxtb6208; -O0:    stlxrb w10, w12, [x11]6209; -O0:    subs w9, w8, w9, uxtb6210;6211; -O1-LABEL: atomicrmw_min_i8_aligned_seq_cst:6212; -O1:    ldaxrb w9, [x0]6213; -O1:    sxtb w8, w96214; -O1:    cmp w8, w1, sxtb6215; -O1:    csel w9, w9, w1, le6216; -O1:    stlxrb w10, w9, [x0]6217    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 16218    ret i8 %r6219}6220 6221define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) {6222; -O0-LABEL: atomicrmw_min_i16_aligned_monotonic:6223; -O0:    sxth w10, w96224; -O0:    subs w10, w10, w8, sxth6225; -O0:    csel w12, w9, w8, le6226; -O0:    ldaxrh w8, [x11]6227; -O0:    cmp w8, w9, uxth6228; -O0:    stlxrh w10, w12, [x11]6229; -O0:    subs w9, w8, w9, uxth6230;6231; -O1-LABEL: atomicrmw_min_i16_aligned_monotonic:6232; -O1:    ldxrh w9, [x0]6233; -O1:    sxth w8, w96234; -O1:    cmp w8, w1, sxth6235; -O1:    csel w9, w9, w1, le6236; -O1:    stxrh w10, w9, [x0]6237    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 26238    ret i16 %r6239}6240 6241define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) {6242; -O0-LABEL: atomicrmw_min_i16_aligned_acquire:6243; -O0:    sxth w10, w96244; -O0:    subs w10, w10, w8, sxth6245; -O0:    csel w12, w9, w8, le6246; -O0:    ldaxrh w8, [x11]6247; -O0:    cmp w8, w9, uxth6248; -O0:    stlxrh w10, w12, [x11]6249; -O0:    subs w9, w8, w9, uxth6250;6251; -O1-LABEL: atomicrmw_min_i16_aligned_acquire:6252; -O1:    ldaxrh w9, [x0]6253; -O1:    sxth w8, w96254; -O1:    cmp w8, w1, sxth6255; -O1:    csel w9, w9, w1, le6256; -O1:    stxrh w10, w9, [x0]6257    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 26258    ret i16 %r6259}6260 6261define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) {6262; -O0-LABEL: atomicrmw_min_i16_aligned_release:6263; -O0:    sxth w10, w96264; -O0:    subs w10, w10, w8, sxth6265; -O0:    csel w12, w9, w8, le6266; -O0:    ldaxrh w8, [x11]6267; -O0:    cmp w8, w9, uxth6268; -O0:    stlxrh w10, w12, [x11]6269; -O0:    subs w9, w8, w9, uxth6270;6271; -O1-LABEL: atomicrmw_min_i16_aligned_release:6272; -O1:    ldxrh w9, [x0]6273; -O1:    sxth w8, w96274; -O1:    cmp w8, w1, sxth6275; -O1:    csel w9, w9, w1, le6276; -O1:    stlxrh w10, w9, [x0]6277    %r = atomicrmw min ptr %ptr, i16 %value release, align 26278    ret i16 %r6279}6280 6281define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) {6282; -O0-LABEL: atomicrmw_min_i16_aligned_acq_rel:6283; -O0:    sxth w10, w96284; -O0:    subs w10, w10, w8, sxth6285; -O0:    csel w12, w9, w8, le6286; -O0:    ldaxrh w8, [x11]6287; -O0:    cmp w8, w9, uxth6288; -O0:    stlxrh w10, w12, [x11]6289; -O0:    subs w9, w8, w9, uxth6290;6291; -O1-LABEL: atomicrmw_min_i16_aligned_acq_rel:6292; -O1:    ldaxrh w9, [x0]6293; -O1:    sxth w8, w96294; -O1:    cmp w8, w1, sxth6295; -O1:    csel w9, w9, w1, le6296; -O1:    stlxrh w10, w9, [x0]6297    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 26298    ret i16 %r6299}6300 6301define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) {6302; -O0-LABEL: atomicrmw_min_i16_aligned_seq_cst:6303; -O0:    sxth w10, w96304; -O0:    subs w10, w10, w8, sxth6305; -O0:    csel w12, w9, w8, le6306; -O0:    ldaxrh w8, [x11]6307; -O0:    cmp w8, w9, uxth6308; -O0:    stlxrh w10, w12, [x11]6309; -O0:    subs w9, w8, w9, uxth6310;6311; -O1-LABEL: atomicrmw_min_i16_aligned_seq_cst:6312; -O1:    ldaxrh w9, [x0]6313; -O1:    sxth w8, w96314; -O1:    cmp w8, w1, sxth6315; -O1:    csel w9, w9, w1, le6316; -O1:    stlxrh w10, w9, [x0]6317    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 26318    ret i16 %r6319}6320 6321define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) {6322; -O0-LABEL: atomicrmw_min_i32_aligned_monotonic:6323; -O0:    subs w10, w9, w86324; -O0:    csel w12, w9, w8, le6325; -O0:    ldaxr w8, [x11]6326; -O0:    cmp w8, w96327; -O0:    stlxr w10, w12, [x11]6328; -O0:    subs w9, w8, w96329;6330; -O1-LABEL: atomicrmw_min_i32_aligned_monotonic:6331; -O1:    ldxr w8, [x0]6332; -O1:    cmp w8, w16333; -O1:    csel w9, w8, w1, le6334; -O1:    stxr w10, w9, [x0]6335    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 46336    ret i32 %r6337}6338 6339define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) {6340; -O0-LABEL: atomicrmw_min_i32_aligned_acquire:6341; -O0:    subs w10, w9, w86342; -O0:    csel w12, w9, w8, le6343; -O0:    ldaxr w8, [x11]6344; -O0:    cmp w8, w96345; -O0:    stlxr w10, w12, [x11]6346; -O0:    subs w9, w8, w96347;6348; -O1-LABEL: atomicrmw_min_i32_aligned_acquire:6349; -O1:    ldaxr w8, [x0]6350; -O1:    cmp w8, w16351; -O1:    csel w9, w8, w1, le6352; -O1:    stxr w10, w9, [x0]6353    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 46354    ret i32 %r6355}6356 6357define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) {6358; -O0-LABEL: atomicrmw_min_i32_aligned_release:6359; -O0:    subs w10, w9, w86360; -O0:    csel w12, w9, w8, le6361; -O0:    ldaxr w8, [x11]6362; -O0:    cmp w8, w96363; -O0:    stlxr w10, w12, [x11]6364; -O0:    subs w9, w8, w96365;6366; -O1-LABEL: atomicrmw_min_i32_aligned_release:6367; -O1:    ldxr w8, [x0]6368; -O1:    cmp w8, w16369; -O1:    csel w9, w8, w1, le6370; -O1:    stlxr w10, w9, [x0]6371    %r = atomicrmw min ptr %ptr, i32 %value release, align 46372    ret i32 %r6373}6374 6375define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) {6376; -O0-LABEL: atomicrmw_min_i32_aligned_acq_rel:6377; -O0:    subs w10, w9, w86378; -O0:    csel w12, w9, w8, le6379; -O0:    ldaxr w8, [x11]6380; -O0:    cmp w8, w96381; -O0:    stlxr w10, w12, [x11]6382; -O0:    subs w9, w8, w96383;6384; -O1-LABEL: atomicrmw_min_i32_aligned_acq_rel:6385; -O1:    ldaxr w8, [x0]6386; -O1:    cmp w8, w16387; -O1:    csel w9, w8, w1, le6388; -O1:    stlxr w10, w9, [x0]6389    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 46390    ret i32 %r6391}6392 6393define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) {6394; -O0-LABEL: atomicrmw_min_i32_aligned_seq_cst:6395; -O0:    subs w10, w9, w86396; -O0:    csel w12, w9, w8, le6397; -O0:    ldaxr w8, [x11]6398; -O0:    cmp w8, w96399; -O0:    stlxr w10, w12, [x11]6400; -O0:    subs w9, w8, w96401;6402; -O1-LABEL: atomicrmw_min_i32_aligned_seq_cst:6403; -O1:    ldaxr w8, [x0]6404; -O1:    cmp w8, w16405; -O1:    csel w9, w8, w1, le6406; -O1:    stlxr w10, w9, [x0]6407    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 46408    ret i32 %r6409}6410 6411define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) {6412; -O0-LABEL: atomicrmw_min_i64_aligned_monotonic:6413; -O0:    subs x10, x9, x86414; -O0:    csel x12, x9, x8, le6415; -O0:    ldaxr x8, [x11]6416; -O0:    cmp x8, x96417; -O0:    stlxr w10, x12, [x11]6418; -O0:    subs x9, x8, x96419;6420; -O1-LABEL: atomicrmw_min_i64_aligned_monotonic:6421; -O1:    ldxr x0, [x8]6422; -O1:    cmp x0, x16423; -O1:    csel x9, x0, x1, le6424; -O1:    stxr w10, x9, [x8]6425    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 86426    ret i64 %r6427}6428 6429define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) {6430; -O0-LABEL: atomicrmw_min_i64_aligned_acquire:6431; -O0:    subs x10, x9, x86432; -O0:    csel x12, x9, x8, le6433; -O0:    ldaxr x8, [x11]6434; -O0:    cmp x8, x96435; -O0:    stlxr w10, x12, [x11]6436; -O0:    subs x9, x8, x96437;6438; -O1-LABEL: atomicrmw_min_i64_aligned_acquire:6439; -O1:    ldaxr x0, [x8]6440; -O1:    cmp x0, x16441; -O1:    csel x9, x0, x1, le6442; -O1:    stxr w10, x9, [x8]6443    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 86444    ret i64 %r6445}6446 6447define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) {6448; -O0-LABEL: atomicrmw_min_i64_aligned_release:6449; -O0:    subs x10, x9, x86450; -O0:    csel x12, x9, x8, le6451; -O0:    ldaxr x8, [x11]6452; -O0:    cmp x8, x96453; -O0:    stlxr w10, x12, [x11]6454; -O0:    subs x9, x8, x96455;6456; -O1-LABEL: atomicrmw_min_i64_aligned_release:6457; -O1:    ldxr x0, [x8]6458; -O1:    cmp x0, x16459; -O1:    csel x9, x0, x1, le6460; -O1:    stlxr w10, x9, [x8]6461    %r = atomicrmw min ptr %ptr, i64 %value release, align 86462    ret i64 %r6463}6464 6465define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) {6466; -O0-LABEL: atomicrmw_min_i64_aligned_acq_rel:6467; -O0:    subs x10, x9, x86468; -O0:    csel x12, x9, x8, le6469; -O0:    ldaxr x8, [x11]6470; -O0:    cmp x8, x96471; -O0:    stlxr w10, x12, [x11]6472; -O0:    subs x9, x8, x96473;6474; -O1-LABEL: atomicrmw_min_i64_aligned_acq_rel:6475; -O1:    ldaxr x0, [x8]6476; -O1:    cmp x0, x16477; -O1:    csel x9, x0, x1, le6478; -O1:    stlxr w10, x9, [x8]6479    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 86480    ret i64 %r6481}6482 6483define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) {6484; -O0-LABEL: atomicrmw_min_i64_aligned_seq_cst:6485; -O0:    subs x10, x9, x86486; -O0:    csel x12, x9, x8, le6487; -O0:    ldaxr x8, [x11]6488; -O0:    cmp x8, x96489; -O0:    stlxr w10, x12, [x11]6490; -O0:    subs x9, x8, x96491;6492; -O1-LABEL: atomicrmw_min_i64_aligned_seq_cst:6493; -O1:    ldaxr x0, [x8]6494; -O1:    cmp x0, x16495; -O1:    csel x9, x0, x1, le6496; -O1:    stlxr w10, x9, [x8]6497    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 86498    ret i64 %r6499}6500 6501define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) {6502; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic:6503; -O0:    subs x12, x8, x116504; -O0:    csel x15, x13, x10, ge6505; -O0:    csel x14, x11, x8, ge6506; -O0:    ldxp x10, x12, [x9]6507; -O0:    cmp x10, x116508; -O0:    cmp x12, x136509; -O0:    stxp w8, x14, x15, [x9]6510; -O0:    stxp w8, x10, x12, [x9]6511; -O0:    subs x12, x12, x136512; -O0:    ccmp x10, x11, #0, eq6513;6514; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic:6515; -O1:    ldxp x1, x0, [x8]6516; -O1:    cmp x3, x16517; -O1:    csel x9, x0, x2, ge6518; -O1:    csel x10, x1, x3, ge6519; -O1:    stxp w11, x10, x9, [x8]6520    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 166521    ret i128 %r6522}6523 6524define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) {6525; -O0-LABEL: atomicrmw_min_i128_aligned_acquire:6526; -O0:    subs x12, x8, x116527; -O0:    csel x15, x13, x10, ge6528; -O0:    csel x14, x11, x8, ge6529; -O0:    ldaxp x10, x12, [x9]6530; -O0:    cmp x10, x116531; -O0:    cmp x12, x136532; -O0:    stxp w8, x14, x15, [x9]6533; -O0:    stxp w8, x10, x12, [x9]6534; -O0:    subs x12, x12, x136535; -O0:    ccmp x10, x11, #0, eq6536;6537; -O1-LABEL: atomicrmw_min_i128_aligned_acquire:6538; -O1:    ldaxp x1, x0, [x8]6539; -O1:    cmp x3, x16540; -O1:    csel x9, x0, x2, ge6541; -O1:    csel x10, x1, x3, ge6542; -O1:    stxp w11, x10, x9, [x8]6543    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 166544    ret i128 %r6545}6546 6547define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) {6548; -O0-LABEL: atomicrmw_min_i128_aligned_release:6549; -O0:    subs x12, x8, x116550; -O0:    csel x15, x13, x10, ge6551; -O0:    csel x14, x11, x8, ge6552; -O0:    ldxp x10, x12, [x9]6553; -O0:    cmp x10, x116554; -O0:    cmp x12, x136555; -O0:    stlxp w8, x14, x15, [x9]6556; -O0:    stlxp w8, x10, x12, [x9]6557; -O0:    subs x12, x12, x136558; -O0:    ccmp x10, x11, #0, eq6559;6560; -O1-LABEL: atomicrmw_min_i128_aligned_release:6561; -O1:    ldxp x1, x0, [x8]6562; -O1:    cmp x3, x16563; -O1:    csel x9, x0, x2, ge6564; -O1:    csel x10, x1, x3, ge6565; -O1:    stlxp w11, x10, x9, [x8]6566    %r = atomicrmw min ptr %ptr, i128 %value release, align 166567    ret i128 %r6568}6569 6570define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) {6571; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel:6572; -O0:    subs x12, x8, x116573; -O0:    csel x15, x13, x10, ge6574; -O0:    csel x14, x11, x8, ge6575; -O0:    ldaxp x10, x12, [x9]6576; -O0:    cmp x10, x116577; -O0:    cmp x12, x136578; -O0:    stlxp w8, x14, x15, [x9]6579; -O0:    stlxp w8, x10, x12, [x9]6580; -O0:    subs x12, x12, x136581; -O0:    ccmp x10, x11, #0, eq6582;6583; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel:6584; -O1:    ldaxp x1, x0, [x8]6585; -O1:    cmp x3, x16586; -O1:    csel x9, x0, x2, ge6587; -O1:    csel x10, x1, x3, ge6588; -O1:    stlxp w11, x10, x9, [x8]6589    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 166590    ret i128 %r6591}6592 6593define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) {6594; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst:6595; -O0:    subs x12, x8, x116596; -O0:    csel x15, x13, x10, ge6597; -O0:    csel x14, x11, x8, ge6598; -O0:    ldaxp x10, x12, [x9]6599; -O0:    cmp x10, x116600; -O0:    cmp x12, x136601; -O0:    stlxp w8, x14, x15, [x9]6602; -O0:    stlxp w8, x10, x12, [x9]6603; -O0:    subs x12, x12, x136604; -O0:    ccmp x10, x11, #0, eq6605;6606; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst:6607; -O1:    ldaxp x1, x0, [x8]6608; -O1:    cmp x3, x16609; -O1:    csel x9, x0, x2, ge6610; -O1:    csel x10, x1, x3, ge6611; -O1:    stlxp w11, x10, x9, [x8]6612    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 166613    ret i128 %r6614}6615 6616define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) {6617; -O0-LABEL: atomicrmw_min_i8_unaligned_monotonic:6618; -O0:    sxtb w10, w96619; -O0:    subs w10, w10, w8, sxtb6620; -O0:    csel w12, w9, w8, le6621; -O0:    ldaxrb w8, [x11]6622; -O0:    cmp w8, w9, uxtb6623; -O0:    stlxrb w10, w12, [x11]6624; -O0:    subs w9, w8, w9, uxtb6625;6626; -O1-LABEL: atomicrmw_min_i8_unaligned_monotonic:6627; -O1:    ldxrb w9, [x0]6628; -O1:    sxtb w8, w96629; -O1:    cmp w8, w1, sxtb6630; -O1:    csel w9, w9, w1, le6631; -O1:    stxrb w10, w9, [x0]6632    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 16633    ret i8 %r6634}6635 6636define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) {6637; -O0-LABEL: atomicrmw_min_i8_unaligned_acquire:6638; -O0:    sxtb w10, w96639; -O0:    subs w10, w10, w8, sxtb6640; -O0:    csel w12, w9, w8, le6641; -O0:    ldaxrb w8, [x11]6642; -O0:    cmp w8, w9, uxtb6643; -O0:    stlxrb w10, w12, [x11]6644; -O0:    subs w9, w8, w9, uxtb6645;6646; -O1-LABEL: atomicrmw_min_i8_unaligned_acquire:6647; -O1:    ldaxrb w9, [x0]6648; -O1:    sxtb w8, w96649; -O1:    cmp w8, w1, sxtb6650; -O1:    csel w9, w9, w1, le6651; -O1:    stxrb w10, w9, [x0]6652    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 16653    ret i8 %r6654}6655 6656define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) {6657; -O0-LABEL: atomicrmw_min_i8_unaligned_release:6658; -O0:    sxtb w10, w96659; -O0:    subs w10, w10, w8, sxtb6660; -O0:    csel w12, w9, w8, le6661; -O0:    ldaxrb w8, [x11]6662; -O0:    cmp w8, w9, uxtb6663; -O0:    stlxrb w10, w12, [x11]6664; -O0:    subs w9, w8, w9, uxtb6665;6666; -O1-LABEL: atomicrmw_min_i8_unaligned_release:6667; -O1:    ldxrb w9, [x0]6668; -O1:    sxtb w8, w96669; -O1:    cmp w8, w1, sxtb6670; -O1:    csel w9, w9, w1, le6671; -O1:    stlxrb w10, w9, [x0]6672    %r = atomicrmw min ptr %ptr, i8 %value release, align 16673    ret i8 %r6674}6675 6676define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {6677; -O0-LABEL: atomicrmw_min_i8_unaligned_acq_rel:6678; -O0:    sxtb w10, w96679; -O0:    subs w10, w10, w8, sxtb6680; -O0:    csel w12, w9, w8, le6681; -O0:    ldaxrb w8, [x11]6682; -O0:    cmp w8, w9, uxtb6683; -O0:    stlxrb w10, w12, [x11]6684; -O0:    subs w9, w8, w9, uxtb6685;6686; -O1-LABEL: atomicrmw_min_i8_unaligned_acq_rel:6687; -O1:    ldaxrb w9, [x0]6688; -O1:    sxtb w8, w96689; -O1:    cmp w8, w1, sxtb6690; -O1:    csel w9, w9, w1, le6691; -O1:    stlxrb w10, w9, [x0]6692    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 16693    ret i8 %r6694}6695 6696define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {6697; -O0-LABEL: atomicrmw_min_i8_unaligned_seq_cst:6698; -O0:    sxtb w10, w96699; -O0:    subs w10, w10, w8, sxtb6700; -O0:    csel w12, w9, w8, le6701; -O0:    ldaxrb w8, [x11]6702; -O0:    cmp w8, w9, uxtb6703; -O0:    stlxrb w10, w12, [x11]6704; -O0:    subs w9, w8, w9, uxtb6705;6706; -O1-LABEL: atomicrmw_min_i8_unaligned_seq_cst:6707; -O1:    ldaxrb w9, [x0]6708; -O1:    sxtb w8, w96709; -O1:    cmp w8, w1, sxtb6710; -O1:    csel w9, w9, w1, le6711; -O1:    stlxrb w10, w9, [x0]6712    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 16713    ret i8 %r6714}6715 6716define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) {6717; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic:6718; -O0:    sxth w10, w96719; -O0:    subs w10, w10, w8, sxth6720; -O0:    csel w8, w9, w8, le6721; -O0:    bl __atomic_compare_exchange6722;6723; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic:6724; -O1:    sxth w8, w06725; -O1:    cmp w8, w20, sxth6726; -O1:    csel w8, w0, w20, le6727; -O1:    bl __atomic_compare_exchange6728    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 16729    ret i16 %r6730}6731 6732define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) {6733; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire:6734; -O0:    sxth w10, w96735; -O0:    subs w10, w10, w8, sxth6736; -O0:    csel w8, w9, w8, le6737; -O0:    bl __atomic_compare_exchange6738;6739; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire:6740; -O1:    sxth w8, w06741; -O1:    cmp w8, w20, sxth6742; -O1:    csel w8, w0, w20, le6743; -O1:    bl __atomic_compare_exchange6744    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 16745    ret i16 %r6746}6747 6748define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) {6749; -O0-LABEL: atomicrmw_min_i16_unaligned_release:6750; -O0:    sxth w10, w96751; -O0:    subs w10, w10, w8, sxth6752; -O0:    csel w8, w9, w8, le6753; -O0:    bl __atomic_compare_exchange6754;6755; -O1-LABEL: atomicrmw_min_i16_unaligned_release:6756; -O1:    sxth w8, w06757; -O1:    cmp w8, w20, sxth6758; -O1:    csel w8, w0, w20, le6759; -O1:    bl __atomic_compare_exchange6760    %r = atomicrmw min ptr %ptr, i16 %value release, align 16761    ret i16 %r6762}6763 6764define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {6765; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel:6766; -O0:    sxth w10, w96767; -O0:    subs w10, w10, w8, sxth6768; -O0:    csel w8, w9, w8, le6769; -O0:    bl __atomic_compare_exchange6770;6771; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel:6772; -O1:    sxth w8, w06773; -O1:    cmp w8, w20, sxth6774; -O1:    csel w8, w0, w20, le6775; -O1:    bl __atomic_compare_exchange6776    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 16777    ret i16 %r6778}6779 6780define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {6781; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst:6782; -O0:    sxth w10, w96783; -O0:    subs w10, w10, w8, sxth6784; -O0:    csel w8, w9, w8, le6785; -O0:    bl __atomic_compare_exchange6786;6787; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst:6788; -O1:    sxth w8, w06789; -O1:    cmp w8, w20, sxth6790; -O1:    csel w8, w0, w20, le6791; -O1:    bl __atomic_compare_exchange6792    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 16793    ret i16 %r6794}6795 6796define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) {6797; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic:6798; -O0:    subs w10, w9, w86799; -O0:    csel w8, w9, w8, le6800; -O0:    bl __atomic_compare_exchange6801;6802; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic:6803; -O1:    cmp w0, w206804; -O1:    csel w8, w0, w20, le6805; -O1:    bl __atomic_compare_exchange6806    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 16807    ret i32 %r6808}6809 6810define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) {6811; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire:6812; -O0:    subs w10, w9, w86813; -O0:    csel w8, w9, w8, le6814; -O0:    bl __atomic_compare_exchange6815;6816; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire:6817; -O1:    cmp w0, w206818; -O1:    csel w8, w0, w20, le6819; -O1:    bl __atomic_compare_exchange6820    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 16821    ret i32 %r6822}6823 6824define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) {6825; -O0-LABEL: atomicrmw_min_i32_unaligned_release:6826; -O0:    subs w10, w9, w86827; -O0:    csel w8, w9, w8, le6828; -O0:    bl __atomic_compare_exchange6829;6830; -O1-LABEL: atomicrmw_min_i32_unaligned_release:6831; -O1:    cmp w0, w206832; -O1:    csel w8, w0, w20, le6833; -O1:    bl __atomic_compare_exchange6834    %r = atomicrmw min ptr %ptr, i32 %value release, align 16835    ret i32 %r6836}6837 6838define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {6839; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel:6840; -O0:    subs w10, w9, w86841; -O0:    csel w8, w9, w8, le6842; -O0:    bl __atomic_compare_exchange6843;6844; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel:6845; -O1:    cmp w0, w206846; -O1:    csel w8, w0, w20, le6847; -O1:    bl __atomic_compare_exchange6848    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 16849    ret i32 %r6850}6851 6852define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {6853; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst:6854; -O0:    subs w10, w9, w86855; -O0:    csel w8, w9, w8, le6856; -O0:    bl __atomic_compare_exchange6857;6858; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst:6859; -O1:    cmp w0, w206860; -O1:    csel w8, w0, w20, le6861; -O1:    bl __atomic_compare_exchange6862    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 16863    ret i32 %r6864}6865 6866define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) {6867; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic:6868; -O0:    subs x10, x9, x86869; -O0:    csel x8, x9, x8, le6870; -O0:    bl __atomic_compare_exchange6871;6872; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic:6873; -O1:    cmp x0, x206874; -O1:    csel x8, x0, x20, le6875; -O1:    bl __atomic_compare_exchange6876    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 16877    ret i64 %r6878}6879 6880define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) {6881; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire:6882; -O0:    subs x10, x9, x86883; -O0:    csel x8, x9, x8, le6884; -O0:    bl __atomic_compare_exchange6885;6886; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire:6887; -O1:    cmp x0, x206888; -O1:    csel x8, x0, x20, le6889; -O1:    bl __atomic_compare_exchange6890    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 16891    ret i64 %r6892}6893 6894define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) {6895; -O0-LABEL: atomicrmw_min_i64_unaligned_release:6896; -O0:    subs x10, x9, x86897; -O0:    csel x8, x9, x8, le6898; -O0:    bl __atomic_compare_exchange6899;6900; -O1-LABEL: atomicrmw_min_i64_unaligned_release:6901; -O1:    cmp x0, x206902; -O1:    csel x8, x0, x20, le6903; -O1:    bl __atomic_compare_exchange6904    %r = atomicrmw min ptr %ptr, i64 %value release, align 16905    ret i64 %r6906}6907 6908define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {6909; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel:6910; -O0:    subs x10, x9, x86911; -O0:    csel x8, x9, x8, le6912; -O0:    bl __atomic_compare_exchange6913;6914; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel:6915; -O1:    cmp x0, x206916; -O1:    csel x8, x0, x20, le6917; -O1:    bl __atomic_compare_exchange6918    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 16919    ret i64 %r6920}6921 6922define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {6923; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst:6924; -O0:    subs x10, x9, x86925; -O0:    csel x8, x9, x8, le6926; -O0:    bl __atomic_compare_exchange6927;6928; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst:6929; -O1:    cmp x0, x206930; -O1:    csel x8, x0, x20, le6931; -O1:    bl __atomic_compare_exchange6932    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 16933    ret i64 %r6934}6935 6936define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) {6937; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic:6938; -O0:    subs x12, x9, x106939; -O0:    csel x8, x11, x8, ge6940; -O0:    csel x9, x10, x9, ge6941; -O0:    bl __atomic_compare_exchange6942;6943; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic:6944; -O1:    ldp x0, x1, [x0]6945; -O1:    cmp x19, x16946; -O1:    csel x8, x1, x19, ge6947; -O1:    csel x9, x0, x21, ge6948; -O1:    bl __atomic_compare_exchange6949    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 16950    ret i128 %r6951}6952 6953define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) {6954; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire:6955; -O0:    subs x12, x9, x106956; -O0:    csel x8, x11, x8, ge6957; -O0:    csel x9, x10, x9, ge6958; -O0:    bl __atomic_compare_exchange6959;6960; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire:6961; -O1:    ldp x0, x1, [x0]6962; -O1:    cmp x19, x16963; -O1:    csel x8, x1, x19, ge6964; -O1:    csel x9, x0, x21, ge6965; -O1:    bl __atomic_compare_exchange6966    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 16967    ret i128 %r6968}6969 6970define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) {6971; -O0-LABEL: atomicrmw_min_i128_unaligned_release:6972; -O0:    subs x12, x9, x106973; -O0:    csel x8, x11, x8, ge6974; -O0:    csel x9, x10, x9, ge6975; -O0:    bl __atomic_compare_exchange6976;6977; -O1-LABEL: atomicrmw_min_i128_unaligned_release:6978; -O1:    ldp x0, x1, [x0]6979; -O1:    cmp x19, x16980; -O1:    csel x8, x1, x19, ge6981; -O1:    csel x9, x0, x21, ge6982; -O1:    bl __atomic_compare_exchange6983    %r = atomicrmw min ptr %ptr, i128 %value release, align 16984    ret i128 %r6985}6986 6987define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {6988; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel:6989; -O0:    subs x12, x9, x106990; -O0:    csel x8, x11, x8, ge6991; -O0:    csel x9, x10, x9, ge6992; -O0:    bl __atomic_compare_exchange6993;6994; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel:6995; -O1:    ldp x0, x1, [x0]6996; -O1:    cmp x19, x16997; -O1:    csel x8, x1, x19, ge6998; -O1:    csel x9, x0, x21, ge6999; -O1:    bl __atomic_compare_exchange7000    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 17001    ret i128 %r7002}7003 7004define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {7005; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst:7006; -O0:    subs x12, x9, x107007; -O0:    csel x8, x11, x8, ge7008; -O0:    csel x9, x10, x9, ge7009; -O0:    bl __atomic_compare_exchange7010;7011; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst:7012; -O1:    ldp x0, x1, [x0]7013; -O1:    cmp x19, x17014; -O1:    csel x8, x1, x19, ge7015; -O1:    csel x9, x0, x21, ge7016; -O1:    bl __atomic_compare_exchange7017    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 17018    ret i128 %r7019}7020 7021define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) {7022; -O0-LABEL: atomicrmw_umax_i8_aligned_monotonic:7023; -O0:    and w9, w12, #0xff7024; -O0:    subs w10, w9, w8, uxtb7025; -O0:    csel w13, w12, w8, hi7026; -O0:    ldaxrb w8, [x11]7027; -O0:    cmp w8, w12, uxtb7028; -O0:    stlxrb w10, w13, [x11]7029; -O0:    subs w9, w8, w97030;7031; -O1-LABEL: atomicrmw_umax_i8_aligned_monotonic:7032; -O1:    and w9, w1, #0xff7033; -O1:    ldxrb w8, [x0]7034; -O1:    cmp w8, w97035; -O1:    csel w10, w8, w9, hi7036; -O1:    stxrb w11, w10, [x0]7037    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 17038    ret i8 %r7039}7040 7041define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) {7042; -O0-LABEL: atomicrmw_umax_i8_aligned_acquire:7043; -O0:    and w9, w12, #0xff7044; -O0:    subs w10, w9, w8, uxtb7045; -O0:    csel w13, w12, w8, hi7046; -O0:    ldaxrb w8, [x11]7047; -O0:    cmp w8, w12, uxtb7048; -O0:    stlxrb w10, w13, [x11]7049; -O0:    subs w9, w8, w97050;7051; -O1-LABEL: atomicrmw_umax_i8_aligned_acquire:7052; -O1:    and w9, w1, #0xff7053; -O1:    ldaxrb w8, [x0]7054; -O1:    cmp w8, w97055; -O1:    csel w10, w8, w9, hi7056; -O1:    stxrb w11, w10, [x0]7057    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 17058    ret i8 %r7059}7060 7061define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) {7062; -O0-LABEL: atomicrmw_umax_i8_aligned_release:7063; -O0:    and w9, w12, #0xff7064; -O0:    subs w10, w9, w8, uxtb7065; -O0:    csel w13, w12, w8, hi7066; -O0:    ldaxrb w8, [x11]7067; -O0:    cmp w8, w12, uxtb7068; -O0:    stlxrb w10, w13, [x11]7069; -O0:    subs w9, w8, w97070;7071; -O1-LABEL: atomicrmw_umax_i8_aligned_release:7072; -O1:    and w9, w1, #0xff7073; -O1:    ldxrb w8, [x0]7074; -O1:    cmp w8, w97075; -O1:    csel w10, w8, w9, hi7076; -O1:    stlxrb w11, w10, [x0]7077    %r = atomicrmw umax ptr %ptr, i8 %value release, align 17078    ret i8 %r7079}7080 7081define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) {7082; -O0-LABEL: atomicrmw_umax_i8_aligned_acq_rel:7083; -O0:    and w9, w12, #0xff7084; -O0:    subs w10, w9, w8, uxtb7085; -O0:    csel w13, w12, w8, hi7086; -O0:    ldaxrb w8, [x11]7087; -O0:    cmp w8, w12, uxtb7088; -O0:    stlxrb w10, w13, [x11]7089; -O0:    subs w9, w8, w97090;7091; -O1-LABEL: atomicrmw_umax_i8_aligned_acq_rel:7092; -O1:    and w9, w1, #0xff7093; -O1:    ldaxrb w8, [x0]7094; -O1:    cmp w8, w97095; -O1:    csel w10, w8, w9, hi7096; -O1:    stlxrb w11, w10, [x0]7097    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 17098    ret i8 %r7099}7100 7101define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) {7102; -O0-LABEL: atomicrmw_umax_i8_aligned_seq_cst:7103; -O0:    and w9, w12, #0xff7104; -O0:    subs w10, w9, w8, uxtb7105; -O0:    csel w13, w12, w8, hi7106; -O0:    ldaxrb w8, [x11]7107; -O0:    cmp w8, w12, uxtb7108; -O0:    stlxrb w10, w13, [x11]7109; -O0:    subs w9, w8, w97110;7111; -O1-LABEL: atomicrmw_umax_i8_aligned_seq_cst:7112; -O1:    and w9, w1, #0xff7113; -O1:    ldaxrb w8, [x0]7114; -O1:    cmp w8, w97115; -O1:    csel w10, w8, w9, hi7116; -O1:    stlxrb w11, w10, [x0]7117    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 17118    ret i8 %r7119}7120 7121define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) {7122; -O0-LABEL: atomicrmw_umax_i16_aligned_monotonic:7123; -O0:    and w9, w12, #0xffff7124; -O0:    subs w10, w9, w8, uxth7125; -O0:    csel w13, w12, w8, hi7126; -O0:    ldaxrh w8, [x11]7127; -O0:    cmp w8, w12, uxth7128; -O0:    stlxrh w10, w13, [x11]7129; -O0:    subs w9, w8, w97130;7131; -O1-LABEL: atomicrmw_umax_i16_aligned_monotonic:7132; -O1:    and w9, w1, #0xffff7133; -O1:    ldxrh w8, [x0]7134; -O1:    cmp w8, w97135; -O1:    csel w10, w8, w9, hi7136; -O1:    stxrh w11, w10, [x0]7137    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 27138    ret i16 %r7139}7140 7141define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) {7142; -O0-LABEL: atomicrmw_umax_i16_aligned_acquire:7143; -O0:    and w9, w12, #0xffff7144; -O0:    subs w10, w9, w8, uxth7145; -O0:    csel w13, w12, w8, hi7146; -O0:    ldaxrh w8, [x11]7147; -O0:    cmp w8, w12, uxth7148; -O0:    stlxrh w10, w13, [x11]7149; -O0:    subs w9, w8, w97150;7151; -O1-LABEL: atomicrmw_umax_i16_aligned_acquire:7152; -O1:    and w9, w1, #0xffff7153; -O1:    ldaxrh w8, [x0]7154; -O1:    cmp w8, w97155; -O1:    csel w10, w8, w9, hi7156; -O1:    stxrh w11, w10, [x0]7157    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 27158    ret i16 %r7159}7160 7161define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) {7162; -O0-LABEL: atomicrmw_umax_i16_aligned_release:7163; -O0:    and w9, w12, #0xffff7164; -O0:    subs w10, w9, w8, uxth7165; -O0:    csel w13, w12, w8, hi7166; -O0:    ldaxrh w8, [x11]7167; -O0:    cmp w8, w12, uxth7168; -O0:    stlxrh w10, w13, [x11]7169; -O0:    subs w9, w8, w97170;7171; -O1-LABEL: atomicrmw_umax_i16_aligned_release:7172; -O1:    and w9, w1, #0xffff7173; -O1:    ldxrh w8, [x0]7174; -O1:    cmp w8, w97175; -O1:    csel w10, w8, w9, hi7176; -O1:    stlxrh w11, w10, [x0]7177    %r = atomicrmw umax ptr %ptr, i16 %value release, align 27178    ret i16 %r7179}7180 7181define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) {7182; -O0-LABEL: atomicrmw_umax_i16_aligned_acq_rel:7183; -O0:    and w9, w12, #0xffff7184; -O0:    subs w10, w9, w8, uxth7185; -O0:    csel w13, w12, w8, hi7186; -O0:    ldaxrh w8, [x11]7187; -O0:    cmp w8, w12, uxth7188; -O0:    stlxrh w10, w13, [x11]7189; -O0:    subs w9, w8, w97190;7191; -O1-LABEL: atomicrmw_umax_i16_aligned_acq_rel:7192; -O1:    and w9, w1, #0xffff7193; -O1:    ldaxrh w8, [x0]7194; -O1:    cmp w8, w97195; -O1:    csel w10, w8, w9, hi7196; -O1:    stlxrh w11, w10, [x0]7197    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 27198    ret i16 %r7199}7200 7201define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) {7202; -O0-LABEL: atomicrmw_umax_i16_aligned_seq_cst:7203; -O0:    and w9, w12, #0xffff7204; -O0:    subs w10, w9, w8, uxth7205; -O0:    csel w13, w12, w8, hi7206; -O0:    ldaxrh w8, [x11]7207; -O0:    cmp w8, w12, uxth7208; -O0:    stlxrh w10, w13, [x11]7209; -O0:    subs w9, w8, w97210;7211; -O1-LABEL: atomicrmw_umax_i16_aligned_seq_cst:7212; -O1:    and w9, w1, #0xffff7213; -O1:    ldaxrh w8, [x0]7214; -O1:    cmp w8, w97215; -O1:    csel w10, w8, w9, hi7216; -O1:    stlxrh w11, w10, [x0]7217    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 27218    ret i16 %r7219}7220 7221define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) {7222; -O0-LABEL: atomicrmw_umax_i32_aligned_monotonic:7223; -O0:    subs w10, w9, w87224; -O0:    csel w12, w9, w8, hi7225; -O0:    ldaxr w8, [x11]7226; -O0:    cmp w8, w97227; -O0:    stlxr w10, w12, [x11]7228; -O0:    subs w9, w8, w97229;7230; -O1-LABEL: atomicrmw_umax_i32_aligned_monotonic:7231; -O1:    ldxr w8, [x0]7232; -O1:    cmp w8, w17233; -O1:    csel w9, w8, w1, hi7234; -O1:    stxr w10, w9, [x0]7235    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 47236    ret i32 %r7237}7238 7239define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) {7240; -O0-LABEL: atomicrmw_umax_i32_aligned_acquire:7241; -O0:    subs w10, w9, w87242; -O0:    csel w12, w9, w8, hi7243; -O0:    ldaxr w8, [x11]7244; -O0:    cmp w8, w97245; -O0:    stlxr w10, w12, [x11]7246; -O0:    subs w9, w8, w97247;7248; -O1-LABEL: atomicrmw_umax_i32_aligned_acquire:7249; -O1:    ldaxr w8, [x0]7250; -O1:    cmp w8, w17251; -O1:    csel w9, w8, w1, hi7252; -O1:    stxr w10, w9, [x0]7253    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 47254    ret i32 %r7255}7256 7257define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) {7258; -O0-LABEL: atomicrmw_umax_i32_aligned_release:7259; -O0:    subs w10, w9, w87260; -O0:    csel w12, w9, w8, hi7261; -O0:    ldaxr w8, [x11]7262; -O0:    cmp w8, w97263; -O0:    stlxr w10, w12, [x11]7264; -O0:    subs w9, w8, w97265;7266; -O1-LABEL: atomicrmw_umax_i32_aligned_release:7267; -O1:    ldxr w8, [x0]7268; -O1:    cmp w8, w17269; -O1:    csel w9, w8, w1, hi7270; -O1:    stlxr w10, w9, [x0]7271    %r = atomicrmw umax ptr %ptr, i32 %value release, align 47272    ret i32 %r7273}7274 7275define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) {7276; -O0-LABEL: atomicrmw_umax_i32_aligned_acq_rel:7277; -O0:    subs w10, w9, w87278; -O0:    csel w12, w9, w8, hi7279; -O0:    ldaxr w8, [x11]7280; -O0:    cmp w8, w97281; -O0:    stlxr w10, w12, [x11]7282; -O0:    subs w9, w8, w97283;7284; -O1-LABEL: atomicrmw_umax_i32_aligned_acq_rel:7285; -O1:    ldaxr w8, [x0]7286; -O1:    cmp w8, w17287; -O1:    csel w9, w8, w1, hi7288; -O1:    stlxr w10, w9, [x0]7289    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 47290    ret i32 %r7291}7292 7293define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) {7294; -O0-LABEL: atomicrmw_umax_i32_aligned_seq_cst:7295; -O0:    subs w10, w9, w87296; -O0:    csel w12, w9, w8, hi7297; -O0:    ldaxr w8, [x11]7298; -O0:    cmp w8, w97299; -O0:    stlxr w10, w12, [x11]7300; -O0:    subs w9, w8, w97301;7302; -O1-LABEL: atomicrmw_umax_i32_aligned_seq_cst:7303; -O1:    ldaxr w8, [x0]7304; -O1:    cmp w8, w17305; -O1:    csel w9, w8, w1, hi7306; -O1:    stlxr w10, w9, [x0]7307    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 47308    ret i32 %r7309}7310 7311define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) {7312; -O0-LABEL: atomicrmw_umax_i64_aligned_monotonic:7313; -O0:    subs x10, x9, x87314; -O0:    csel x12, x9, x8, hi7315; -O0:    ldaxr x8, [x11]7316; -O0:    cmp x8, x97317; -O0:    stlxr w10, x12, [x11]7318; -O0:    subs x9, x8, x97319;7320; -O1-LABEL: atomicrmw_umax_i64_aligned_monotonic:7321; -O1:    ldxr x0, [x8]7322; -O1:    cmp x0, x17323; -O1:    csel x9, x0, x1, hi7324; -O1:    stxr w10, x9, [x8]7325    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 87326    ret i64 %r7327}7328 7329define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) {7330; -O0-LABEL: atomicrmw_umax_i64_aligned_acquire:7331; -O0:    subs x10, x9, x87332; -O0:    csel x12, x9, x8, hi7333; -O0:    ldaxr x8, [x11]7334; -O0:    cmp x8, x97335; -O0:    stlxr w10, x12, [x11]7336; -O0:    subs x9, x8, x97337;7338; -O1-LABEL: atomicrmw_umax_i64_aligned_acquire:7339; -O1:    ldaxr x0, [x8]7340; -O1:    cmp x0, x17341; -O1:    csel x9, x0, x1, hi7342; -O1:    stxr w10, x9, [x8]7343    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 87344    ret i64 %r7345}7346 7347define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) {7348; -O0-LABEL: atomicrmw_umax_i64_aligned_release:7349; -O0:    subs x10, x9, x87350; -O0:    csel x12, x9, x8, hi7351; -O0:    ldaxr x8, [x11]7352; -O0:    cmp x8, x97353; -O0:    stlxr w10, x12, [x11]7354; -O0:    subs x9, x8, x97355;7356; -O1-LABEL: atomicrmw_umax_i64_aligned_release:7357; -O1:    ldxr x0, [x8]7358; -O1:    cmp x0, x17359; -O1:    csel x9, x0, x1, hi7360; -O1:    stlxr w10, x9, [x8]7361    %r = atomicrmw umax ptr %ptr, i64 %value release, align 87362    ret i64 %r7363}7364 7365define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) {7366; -O0-LABEL: atomicrmw_umax_i64_aligned_acq_rel:7367; -O0:    subs x10, x9, x87368; -O0:    csel x12, x9, x8, hi7369; -O0:    ldaxr x8, [x11]7370; -O0:    cmp x8, x97371; -O0:    stlxr w10, x12, [x11]7372; -O0:    subs x9, x8, x97373;7374; -O1-LABEL: atomicrmw_umax_i64_aligned_acq_rel:7375; -O1:    ldaxr x0, [x8]7376; -O1:    cmp x0, x17377; -O1:    csel x9, x0, x1, hi7378; -O1:    stlxr w10, x9, [x8]7379    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 87380    ret i64 %r7381}7382 7383define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) {7384; -O0-LABEL: atomicrmw_umax_i64_aligned_seq_cst:7385; -O0:    subs x10, x9, x87386; -O0:    csel x12, x9, x8, hi7387; -O0:    ldaxr x8, [x11]7388; -O0:    cmp x8, x97389; -O0:    stlxr w10, x12, [x11]7390; -O0:    subs x9, x8, x97391;7392; -O1-LABEL: atomicrmw_umax_i64_aligned_seq_cst:7393; -O1:    ldaxr x0, [x8]7394; -O1:    cmp x0, x17395; -O1:    csel x9, x0, x1, hi7396; -O1:    stlxr w10, x9, [x8]7397    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 87398    ret i64 %r7399}7400 7401define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) {7402; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic:7403; -O0:    subs x12, x8, x117404; -O0:    csel x15, x13, x10, lo7405; -O0:    csel x14, x11, x8, lo7406; -O0:    ldxp x10, x12, [x9]7407; -O0:    cmp x10, x117408; -O0:    cmp x12, x137409; -O0:    stxp w8, x14, x15, [x9]7410; -O0:    stxp w8, x10, x12, [x9]7411; -O0:    subs x12, x12, x137412; -O0:    ccmp x10, x11, #0, eq7413;7414; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic:7415; -O1:    ldxp x1, x0, [x8]7416; -O1:    cmp x3, x17417; -O1:    csel x9, x0, x2, lo7418; -O1:    csel x10, x1, x3, lo7419; -O1:    stxp w11, x10, x9, [x8]7420    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 167421    ret i128 %r7422}7423 7424define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) {7425; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire:7426; -O0:    subs x12, x8, x117427; -O0:    csel x15, x13, x10, lo7428; -O0:    csel x14, x11, x8, lo7429; -O0:    ldaxp x10, x12, [x9]7430; -O0:    cmp x10, x117431; -O0:    cmp x12, x137432; -O0:    stxp w8, x14, x15, [x9]7433; -O0:    stxp w8, x10, x12, [x9]7434; -O0:    subs x12, x12, x137435; -O0:    ccmp x10, x11, #0, eq7436;7437; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire:7438; -O1:    ldaxp x1, x0, [x8]7439; -O1:    cmp x3, x17440; -O1:    csel x9, x0, x2, lo7441; -O1:    csel x10, x1, x3, lo7442; -O1:    stxp w11, x10, x9, [x8]7443    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 167444    ret i128 %r7445}7446 7447define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) {7448; -O0-LABEL: atomicrmw_umax_i128_aligned_release:7449; -O0:    subs x12, x8, x117450; -O0:    csel x15, x13, x10, lo7451; -O0:    csel x14, x11, x8, lo7452; -O0:    ldxp x10, x12, [x9]7453; -O0:    cmp x10, x117454; -O0:    cmp x12, x137455; -O0:    stlxp w8, x14, x15, [x9]7456; -O0:    stlxp w8, x10, x12, [x9]7457; -O0:    subs x12, x12, x137458; -O0:    ccmp x10, x11, #0, eq7459;7460; -O1-LABEL: atomicrmw_umax_i128_aligned_release:7461; -O1:    ldxp x1, x0, [x8]7462; -O1:    cmp x3, x17463; -O1:    csel x9, x0, x2, lo7464; -O1:    csel x10, x1, x3, lo7465; -O1:    stlxp w11, x10, x9, [x8]7466    %r = atomicrmw umax ptr %ptr, i128 %value release, align 167467    ret i128 %r7468}7469 7470define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) {7471; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel:7472; -O0:    subs x12, x8, x117473; -O0:    csel x15, x13, x10, lo7474; -O0:    csel x14, x11, x8, lo7475; -O0:    ldaxp x10, x12, [x9]7476; -O0:    cmp x10, x117477; -O0:    cmp x12, x137478; -O0:    stlxp w8, x14, x15, [x9]7479; -O0:    stlxp w8, x10, x12, [x9]7480; -O0:    subs x12, x12, x137481; -O0:    ccmp x10, x11, #0, eq7482;7483; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel:7484; -O1:    ldaxp x1, x0, [x8]7485; -O1:    cmp x3, x17486; -O1:    csel x9, x0, x2, lo7487; -O1:    csel x10, x1, x3, lo7488; -O1:    stlxp w11, x10, x9, [x8]7489    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 167490    ret i128 %r7491}7492 7493define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) {7494; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst:7495; -O0:    subs x12, x8, x117496; -O0:    csel x15, x13, x10, lo7497; -O0:    csel x14, x11, x8, lo7498; -O0:    ldaxp x10, x12, [x9]7499; -O0:    cmp x10, x117500; -O0:    cmp x12, x137501; -O0:    stlxp w8, x14, x15, [x9]7502; -O0:    stlxp w8, x10, x12, [x9]7503; -O0:    subs x12, x12, x137504; -O0:    ccmp x10, x11, #0, eq7505;7506; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst:7507; -O1:    ldaxp x1, x0, [x8]7508; -O1:    cmp x3, x17509; -O1:    csel x9, x0, x2, lo7510; -O1:    csel x10, x1, x3, lo7511; -O1:    stlxp w11, x10, x9, [x8]7512    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 167513    ret i128 %r7514}7515 7516define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) {7517; -O0-LABEL: atomicrmw_umax_i8_unaligned_monotonic:7518; -O0:    and w9, w12, #0xff7519; -O0:    subs w10, w9, w8, uxtb7520; -O0:    csel w13, w12, w8, hi7521; -O0:    ldaxrb w8, [x11]7522; -O0:    cmp w8, w12, uxtb7523; -O0:    stlxrb w10, w13, [x11]7524; -O0:    subs w9, w8, w97525;7526; -O1-LABEL: atomicrmw_umax_i8_unaligned_monotonic:7527; -O1:    and w9, w1, #0xff7528; -O1:    ldxrb w8, [x0]7529; -O1:    cmp w8, w97530; -O1:    csel w10, w8, w9, hi7531; -O1:    stxrb w11, w10, [x0]7532    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 17533    ret i8 %r7534}7535 7536define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) {7537; -O0-LABEL: atomicrmw_umax_i8_unaligned_acquire:7538; -O0:    and w9, w12, #0xff7539; -O0:    subs w10, w9, w8, uxtb7540; -O0:    csel w13, w12, w8, hi7541; -O0:    ldaxrb w8, [x11]7542; -O0:    cmp w8, w12, uxtb7543; -O0:    stlxrb w10, w13, [x11]7544; -O0:    subs w9, w8, w97545;7546; -O1-LABEL: atomicrmw_umax_i8_unaligned_acquire:7547; -O1:    and w9, w1, #0xff7548; -O1:    ldaxrb w8, [x0]7549; -O1:    cmp w8, w97550; -O1:    csel w10, w8, w9, hi7551; -O1:    stxrb w11, w10, [x0]7552    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 17553    ret i8 %r7554}7555 7556define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) {7557; -O0-LABEL: atomicrmw_umax_i8_unaligned_release:7558; -O0:    and w9, w12, #0xff7559; -O0:    subs w10, w9, w8, uxtb7560; -O0:    csel w13, w12, w8, hi7561; -O0:    ldaxrb w8, [x11]7562; -O0:    cmp w8, w12, uxtb7563; -O0:    stlxrb w10, w13, [x11]7564; -O0:    subs w9, w8, w97565;7566; -O1-LABEL: atomicrmw_umax_i8_unaligned_release:7567; -O1:    and w9, w1, #0xff7568; -O1:    ldxrb w8, [x0]7569; -O1:    cmp w8, w97570; -O1:    csel w10, w8, w9, hi7571; -O1:    stlxrb w11, w10, [x0]7572    %r = atomicrmw umax ptr %ptr, i8 %value release, align 17573    ret i8 %r7574}7575 7576define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {7577; -O0-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:7578; -O0:    and w9, w12, #0xff7579; -O0:    subs w10, w9, w8, uxtb7580; -O0:    csel w13, w12, w8, hi7581; -O0:    ldaxrb w8, [x11]7582; -O0:    cmp w8, w12, uxtb7583; -O0:    stlxrb w10, w13, [x11]7584; -O0:    subs w9, w8, w97585;7586; -O1-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:7587; -O1:    and w9, w1, #0xff7588; -O1:    ldaxrb w8, [x0]7589; -O1:    cmp w8, w97590; -O1:    csel w10, w8, w9, hi7591; -O1:    stlxrb w11, w10, [x0]7592    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 17593    ret i8 %r7594}7595 7596define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {7597; -O0-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:7598; -O0:    and w9, w12, #0xff7599; -O0:    subs w10, w9, w8, uxtb7600; -O0:    csel w13, w12, w8, hi7601; -O0:    ldaxrb w8, [x11]7602; -O0:    cmp w8, w12, uxtb7603; -O0:    stlxrb w10, w13, [x11]7604; -O0:    subs w9, w8, w97605;7606; -O1-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:7607; -O1:    and w9, w1, #0xff7608; -O1:    ldaxrb w8, [x0]7609; -O1:    cmp w8, w97610; -O1:    csel w10, w8, w9, hi7611; -O1:    stlxrb w11, w10, [x0]7612    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 17613    ret i8 %r7614}7615 7616define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) {7617; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic:7618; -O0:    and w10, w9, #0xffff7619; -O0:    subs w10, w10, w8, uxth7620; -O0:    csel w8, w9, w8, hi7621; -O0:    bl __atomic_compare_exchange7622;7623; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic:7624; -O1:    and w8, w0, #0xffff7625; -O1:    cmp w8, w20, uxth7626; -O1:    csel w8, w0, w20, hi7627; -O1:    bl __atomic_compare_exchange7628    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 17629    ret i16 %r7630}7631 7632define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) {7633; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire:7634; -O0:    and w10, w9, #0xffff7635; -O0:    subs w10, w10, w8, uxth7636; -O0:    csel w8, w9, w8, hi7637; -O0:    bl __atomic_compare_exchange7638;7639; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire:7640; -O1:    and w8, w0, #0xffff7641; -O1:    cmp w8, w20, uxth7642; -O1:    csel w8, w0, w20, hi7643; -O1:    bl __atomic_compare_exchange7644    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 17645    ret i16 %r7646}7647 7648define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) {7649; -O0-LABEL: atomicrmw_umax_i16_unaligned_release:7650; -O0:    and w10, w9, #0xffff7651; -O0:    subs w10, w10, w8, uxth7652; -O0:    csel w8, w9, w8, hi7653; -O0:    bl __atomic_compare_exchange7654;7655; -O1-LABEL: atomicrmw_umax_i16_unaligned_release:7656; -O1:    and w8, w0, #0xffff7657; -O1:    cmp w8, w20, uxth7658; -O1:    csel w8, w0, w20, hi7659; -O1:    bl __atomic_compare_exchange7660    %r = atomicrmw umax ptr %ptr, i16 %value release, align 17661    ret i16 %r7662}7663 7664define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {7665; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:7666; -O0:    and w10, w9, #0xffff7667; -O0:    subs w10, w10, w8, uxth7668; -O0:    csel w8, w9, w8, hi7669; -O0:    bl __atomic_compare_exchange7670;7671; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:7672; -O1:    and w8, w0, #0xffff7673; -O1:    cmp w8, w20, uxth7674; -O1:    csel w8, w0, w20, hi7675; -O1:    bl __atomic_compare_exchange7676    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 17677    ret i16 %r7678}7679 7680define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {7681; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:7682; -O0:    and w10, w9, #0xffff7683; -O0:    subs w10, w10, w8, uxth7684; -O0:    csel w8, w9, w8, hi7685; -O0:    bl __atomic_compare_exchange7686;7687; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:7688; -O1:    and w8, w0, #0xffff7689; -O1:    cmp w8, w20, uxth7690; -O1:    csel w8, w0, w20, hi7691; -O1:    bl __atomic_compare_exchange7692    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 17693    ret i16 %r7694}7695 7696define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) {7697; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic:7698; -O0:    subs w10, w9, w87699; -O0:    csel w8, w9, w8, hi7700; -O0:    bl __atomic_compare_exchange7701;7702; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic:7703; -O1:    cmp w0, w207704; -O1:    csel w8, w0, w20, hi7705; -O1:    bl __atomic_compare_exchange7706    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 17707    ret i32 %r7708}7709 7710define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) {7711; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire:7712; -O0:    subs w10, w9, w87713; -O0:    csel w8, w9, w8, hi7714; -O0:    bl __atomic_compare_exchange7715;7716; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire:7717; -O1:    cmp w0, w207718; -O1:    csel w8, w0, w20, hi7719; -O1:    bl __atomic_compare_exchange7720    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 17721    ret i32 %r7722}7723 7724define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) {7725; -O0-LABEL: atomicrmw_umax_i32_unaligned_release:7726; -O0:    subs w10, w9, w87727; -O0:    csel w8, w9, w8, hi7728; -O0:    bl __atomic_compare_exchange7729;7730; -O1-LABEL: atomicrmw_umax_i32_unaligned_release:7731; -O1:    cmp w0, w207732; -O1:    csel w8, w0, w20, hi7733; -O1:    bl __atomic_compare_exchange7734    %r = atomicrmw umax ptr %ptr, i32 %value release, align 17735    ret i32 %r7736}7737 7738define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {7739; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:7740; -O0:    subs w10, w9, w87741; -O0:    csel w8, w9, w8, hi7742; -O0:    bl __atomic_compare_exchange7743;7744; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:7745; -O1:    cmp w0, w207746; -O1:    csel w8, w0, w20, hi7747; -O1:    bl __atomic_compare_exchange7748    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 17749    ret i32 %r7750}7751 7752define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {7753; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:7754; -O0:    subs w10, w9, w87755; -O0:    csel w8, w9, w8, hi7756; -O0:    bl __atomic_compare_exchange7757;7758; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:7759; -O1:    cmp w0, w207760; -O1:    csel w8, w0, w20, hi7761; -O1:    bl __atomic_compare_exchange7762    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 17763    ret i32 %r7764}7765 7766define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) {7767; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic:7768; -O0:    subs x10, x9, x87769; -O0:    csel x8, x9, x8, hi7770; -O0:    bl __atomic_compare_exchange7771;7772; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic:7773; -O1:    cmp x0, x207774; -O1:    csel x8, x0, x20, hi7775; -O1:    bl __atomic_compare_exchange7776    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 17777    ret i64 %r7778}7779 7780define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) {7781; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire:7782; -O0:    subs x10, x9, x87783; -O0:    csel x8, x9, x8, hi7784; -O0:    bl __atomic_compare_exchange7785;7786; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire:7787; -O1:    cmp x0, x207788; -O1:    csel x8, x0, x20, hi7789; -O1:    bl __atomic_compare_exchange7790    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 17791    ret i64 %r7792}7793 7794define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) {7795; -O0-LABEL: atomicrmw_umax_i64_unaligned_release:7796; -O0:    subs x10, x9, x87797; -O0:    csel x8, x9, x8, hi7798; -O0:    bl __atomic_compare_exchange7799;7800; -O1-LABEL: atomicrmw_umax_i64_unaligned_release:7801; -O1:    cmp x0, x207802; -O1:    csel x8, x0, x20, hi7803; -O1:    bl __atomic_compare_exchange7804    %r = atomicrmw umax ptr %ptr, i64 %value release, align 17805    ret i64 %r7806}7807 7808define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {7809; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:7810; -O0:    subs x10, x9, x87811; -O0:    csel x8, x9, x8, hi7812; -O0:    bl __atomic_compare_exchange7813;7814; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:7815; -O1:    cmp x0, x207816; -O1:    csel x8, x0, x20, hi7817; -O1:    bl __atomic_compare_exchange7818    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 17819    ret i64 %r7820}7821 7822define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {7823; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:7824; -O0:    subs x10, x9, x87825; -O0:    csel x8, x9, x8, hi7826; -O0:    bl __atomic_compare_exchange7827;7828; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:7829; -O1:    cmp x0, x207830; -O1:    csel x8, x0, x20, hi7831; -O1:    bl __atomic_compare_exchange7832    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 17833    ret i64 %r7834}7835 7836define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) {7837; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic:7838; -O0:    subs x12, x9, x107839; -O0:    csel x8, x11, x8, lo7840; -O0:    csel x9, x10, x9, lo7841; -O0:    bl __atomic_compare_exchange7842;7843; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic:7844; -O1:    ldp x0, x1, [x0]7845; -O1:    cmp x19, x17846; -O1:    csel x8, x1, x19, lo7847; -O1:    csel x9, x0, x21, lo7848; -O1:    bl __atomic_compare_exchange7849    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 17850    ret i128 %r7851}7852 7853define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) {7854; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire:7855; -O0:    subs x12, x9, x107856; -O0:    csel x8, x11, x8, lo7857; -O0:    csel x9, x10, x9, lo7858; -O0:    bl __atomic_compare_exchange7859;7860; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire:7861; -O1:    ldp x0, x1, [x0]7862; -O1:    cmp x19, x17863; -O1:    csel x8, x1, x19, lo7864; -O1:    csel x9, x0, x21, lo7865; -O1:    bl __atomic_compare_exchange7866    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 17867    ret i128 %r7868}7869 7870define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) {7871; -O0-LABEL: atomicrmw_umax_i128_unaligned_release:7872; -O0:    subs x12, x9, x107873; -O0:    csel x8, x11, x8, lo7874; -O0:    csel x9, x10, x9, lo7875; -O0:    bl __atomic_compare_exchange7876;7877; -O1-LABEL: atomicrmw_umax_i128_unaligned_release:7878; -O1:    ldp x0, x1, [x0]7879; -O1:    cmp x19, x17880; -O1:    csel x8, x1, x19, lo7881; -O1:    csel x9, x0, x21, lo7882; -O1:    bl __atomic_compare_exchange7883    %r = atomicrmw umax ptr %ptr, i128 %value release, align 17884    ret i128 %r7885}7886 7887define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {7888; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:7889; -O0:    subs x12, x9, x107890; -O0:    csel x8, x11, x8, lo7891; -O0:    csel x9, x10, x9, lo7892; -O0:    bl __atomic_compare_exchange7893;7894; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:7895; -O1:    ldp x0, x1, [x0]7896; -O1:    cmp x19, x17897; -O1:    csel x8, x1, x19, lo7898; -O1:    csel x9, x0, x21, lo7899; -O1:    bl __atomic_compare_exchange7900    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 17901    ret i128 %r7902}7903 7904define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {7905; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:7906; -O0:    subs x12, x9, x107907; -O0:    csel x8, x11, x8, lo7908; -O0:    csel x9, x10, x9, lo7909; -O0:    bl __atomic_compare_exchange7910;7911; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:7912; -O1:    ldp x0, x1, [x0]7913; -O1:    cmp x19, x17914; -O1:    csel x8, x1, x19, lo7915; -O1:    csel x9, x0, x21, lo7916; -O1:    bl __atomic_compare_exchange7917    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 17918    ret i128 %r7919}7920 7921define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) {7922; -O0-LABEL: atomicrmw_umin_i8_aligned_monotonic:7923; -O0:    and w9, w12, #0xff7924; -O0:    subs w10, w9, w8, uxtb7925; -O0:    csel w13, w12, w8, ls7926; -O0:    ldaxrb w8, [x11]7927; -O0:    cmp w8, w12, uxtb7928; -O0:    stlxrb w10, w13, [x11]7929; -O0:    subs w9, w8, w97930;7931; -O1-LABEL: atomicrmw_umin_i8_aligned_monotonic:7932; -O1:    and w9, w1, #0xff7933; -O1:    ldxrb w8, [x0]7934; -O1:    cmp w8, w97935; -O1:    csel w10, w8, w9, ls7936; -O1:    stxrb w11, w10, [x0]7937    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 17938    ret i8 %r7939}7940 7941define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) {7942; -O0-LABEL: atomicrmw_umin_i8_aligned_acquire:7943; -O0:    and w9, w12, #0xff7944; -O0:    subs w10, w9, w8, uxtb7945; -O0:    csel w13, w12, w8, ls7946; -O0:    ldaxrb w8, [x11]7947; -O0:    cmp w8, w12, uxtb7948; -O0:    stlxrb w10, w13, [x11]7949; -O0:    subs w9, w8, w97950;7951; -O1-LABEL: atomicrmw_umin_i8_aligned_acquire:7952; -O1:    and w9, w1, #0xff7953; -O1:    ldaxrb w8, [x0]7954; -O1:    cmp w8, w97955; -O1:    csel w10, w8, w9, ls7956; -O1:    stxrb w11, w10, [x0]7957    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 17958    ret i8 %r7959}7960 7961define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) {7962; -O0-LABEL: atomicrmw_umin_i8_aligned_release:7963; -O0:    and w9, w12, #0xff7964; -O0:    subs w10, w9, w8, uxtb7965; -O0:    csel w13, w12, w8, ls7966; -O0:    ldaxrb w8, [x11]7967; -O0:    cmp w8, w12, uxtb7968; -O0:    stlxrb w10, w13, [x11]7969; -O0:    subs w9, w8, w97970;7971; -O1-LABEL: atomicrmw_umin_i8_aligned_release:7972; -O1:    and w9, w1, #0xff7973; -O1:    ldxrb w8, [x0]7974; -O1:    cmp w8, w97975; -O1:    csel w10, w8, w9, ls7976; -O1:    stlxrb w11, w10, [x0]7977    %r = atomicrmw umin ptr %ptr, i8 %value release, align 17978    ret i8 %r7979}7980 7981define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) {7982; -O0-LABEL: atomicrmw_umin_i8_aligned_acq_rel:7983; -O0:    and w9, w12, #0xff7984; -O0:    subs w10, w9, w8, uxtb7985; -O0:    csel w13, w12, w8, ls7986; -O0:    ldaxrb w8, [x11]7987; -O0:    cmp w8, w12, uxtb7988; -O0:    stlxrb w10, w13, [x11]7989; -O0:    subs w9, w8, w97990;7991; -O1-LABEL: atomicrmw_umin_i8_aligned_acq_rel:7992; -O1:    and w9, w1, #0xff7993; -O1:    ldaxrb w8, [x0]7994; -O1:    cmp w8, w97995; -O1:    csel w10, w8, w9, ls7996; -O1:    stlxrb w11, w10, [x0]7997    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 17998    ret i8 %r7999}8000 8001define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) {8002; -O0-LABEL: atomicrmw_umin_i8_aligned_seq_cst:8003; -O0:    and w9, w12, #0xff8004; -O0:    subs w10, w9, w8, uxtb8005; -O0:    csel w13, w12, w8, ls8006; -O0:    ldaxrb w8, [x11]8007; -O0:    cmp w8, w12, uxtb8008; -O0:    stlxrb w10, w13, [x11]8009; -O0:    subs w9, w8, w98010;8011; -O1-LABEL: atomicrmw_umin_i8_aligned_seq_cst:8012; -O1:    and w9, w1, #0xff8013; -O1:    ldaxrb w8, [x0]8014; -O1:    cmp w8, w98015; -O1:    csel w10, w8, w9, ls8016; -O1:    stlxrb w11, w10, [x0]8017    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 18018    ret i8 %r8019}8020 8021define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) {8022; -O0-LABEL: atomicrmw_umin_i16_aligned_monotonic:8023; -O0:    and w9, w12, #0xffff8024; -O0:    subs w10, w9, w8, uxth8025; -O0:    csel w13, w12, w8, ls8026; -O0:    ldaxrh w8, [x11]8027; -O0:    cmp w8, w12, uxth8028; -O0:    stlxrh w10, w13, [x11]8029; -O0:    subs w9, w8, w98030;8031; -O1-LABEL: atomicrmw_umin_i16_aligned_monotonic:8032; -O1:    and w9, w1, #0xffff8033; -O1:    ldxrh w8, [x0]8034; -O1:    cmp w8, w98035; -O1:    csel w10, w8, w9, ls8036; -O1:    stxrh w11, w10, [x0]8037    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 28038    ret i16 %r8039}8040 8041define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) {8042; -O0-LABEL: atomicrmw_umin_i16_aligned_acquire:8043; -O0:    and w9, w12, #0xffff8044; -O0:    subs w10, w9, w8, uxth8045; -O0:    csel w13, w12, w8, ls8046; -O0:    ldaxrh w8, [x11]8047; -O0:    cmp w8, w12, uxth8048; -O0:    stlxrh w10, w13, [x11]8049; -O0:    subs w9, w8, w98050;8051; -O1-LABEL: atomicrmw_umin_i16_aligned_acquire:8052; -O1:    and w9, w1, #0xffff8053; -O1:    ldaxrh w8, [x0]8054; -O1:    cmp w8, w98055; -O1:    csel w10, w8, w9, ls8056; -O1:    stxrh w11, w10, [x0]8057    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 28058    ret i16 %r8059}8060 8061define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) {8062; -O0-LABEL: atomicrmw_umin_i16_aligned_release:8063; -O0:    and w9, w12, #0xffff8064; -O0:    subs w10, w9, w8, uxth8065; -O0:    csel w13, w12, w8, ls8066; -O0:    ldaxrh w8, [x11]8067; -O0:    cmp w8, w12, uxth8068; -O0:    stlxrh w10, w13, [x11]8069; -O0:    subs w9, w8, w98070;8071; -O1-LABEL: atomicrmw_umin_i16_aligned_release:8072; -O1:    and w9, w1, #0xffff8073; -O1:    ldxrh w8, [x0]8074; -O1:    cmp w8, w98075; -O1:    csel w10, w8, w9, ls8076; -O1:    stlxrh w11, w10, [x0]8077    %r = atomicrmw umin ptr %ptr, i16 %value release, align 28078    ret i16 %r8079}8080 8081define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) {8082; -O0-LABEL: atomicrmw_umin_i16_aligned_acq_rel:8083; -O0:    and w9, w12, #0xffff8084; -O0:    subs w10, w9, w8, uxth8085; -O0:    csel w13, w12, w8, ls8086; -O0:    ldaxrh w8, [x11]8087; -O0:    cmp w8, w12, uxth8088; -O0:    stlxrh w10, w13, [x11]8089; -O0:    subs w9, w8, w98090;8091; -O1-LABEL: atomicrmw_umin_i16_aligned_acq_rel:8092; -O1:    and w9, w1, #0xffff8093; -O1:    ldaxrh w8, [x0]8094; -O1:    cmp w8, w98095; -O1:    csel w10, w8, w9, ls8096; -O1:    stlxrh w11, w10, [x0]8097    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 28098    ret i16 %r8099}8100 8101define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) {8102; -O0-LABEL: atomicrmw_umin_i16_aligned_seq_cst:8103; -O0:    and w9, w12, #0xffff8104; -O0:    subs w10, w9, w8, uxth8105; -O0:    csel w13, w12, w8, ls8106; -O0:    ldaxrh w8, [x11]8107; -O0:    cmp w8, w12, uxth8108; -O0:    stlxrh w10, w13, [x11]8109; -O0:    subs w9, w8, w98110;8111; -O1-LABEL: atomicrmw_umin_i16_aligned_seq_cst:8112; -O1:    and w9, w1, #0xffff8113; -O1:    ldaxrh w8, [x0]8114; -O1:    cmp w8, w98115; -O1:    csel w10, w8, w9, ls8116; -O1:    stlxrh w11, w10, [x0]8117    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 28118    ret i16 %r8119}8120 8121define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) {8122; -O0-LABEL: atomicrmw_umin_i32_aligned_monotonic:8123; -O0:    subs w10, w9, w88124; -O0:    csel w12, w9, w8, ls8125; -O0:    ldaxr w8, [x11]8126; -O0:    cmp w8, w98127; -O0:    stlxr w10, w12, [x11]8128; -O0:    subs w9, w8, w98129;8130; -O1-LABEL: atomicrmw_umin_i32_aligned_monotonic:8131; -O1:    ldxr w8, [x0]8132; -O1:    cmp w8, w18133; -O1:    csel w9, w8, w1, ls8134; -O1:    stxr w10, w9, [x0]8135    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 48136    ret i32 %r8137}8138 8139define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) {8140; -O0-LABEL: atomicrmw_umin_i32_aligned_acquire:8141; -O0:    subs w10, w9, w88142; -O0:    csel w12, w9, w8, ls8143; -O0:    ldaxr w8, [x11]8144; -O0:    cmp w8, w98145; -O0:    stlxr w10, w12, [x11]8146; -O0:    subs w9, w8, w98147;8148; -O1-LABEL: atomicrmw_umin_i32_aligned_acquire:8149; -O1:    ldaxr w8, [x0]8150; -O1:    cmp w8, w18151; -O1:    csel w9, w8, w1, ls8152; -O1:    stxr w10, w9, [x0]8153    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 48154    ret i32 %r8155}8156 8157define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) {8158; -O0-LABEL: atomicrmw_umin_i32_aligned_release:8159; -O0:    subs w10, w9, w88160; -O0:    csel w12, w9, w8, ls8161; -O0:    ldaxr w8, [x11]8162; -O0:    cmp w8, w98163; -O0:    stlxr w10, w12, [x11]8164; -O0:    subs w9, w8, w98165;8166; -O1-LABEL: atomicrmw_umin_i32_aligned_release:8167; -O1:    ldxr w8, [x0]8168; -O1:    cmp w8, w18169; -O1:    csel w9, w8, w1, ls8170; -O1:    stlxr w10, w9, [x0]8171    %r = atomicrmw umin ptr %ptr, i32 %value release, align 48172    ret i32 %r8173}8174 8175define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) {8176; -O0-LABEL: atomicrmw_umin_i32_aligned_acq_rel:8177; -O0:    subs w10, w9, w88178; -O0:    csel w12, w9, w8, ls8179; -O0:    ldaxr w8, [x11]8180; -O0:    cmp w8, w98181; -O0:    stlxr w10, w12, [x11]8182; -O0:    subs w9, w8, w98183;8184; -O1-LABEL: atomicrmw_umin_i32_aligned_acq_rel:8185; -O1:    ldaxr w8, [x0]8186; -O1:    cmp w8, w18187; -O1:    csel w9, w8, w1, ls8188; -O1:    stlxr w10, w9, [x0]8189    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 48190    ret i32 %r8191}8192 8193define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) {8194; -O0-LABEL: atomicrmw_umin_i32_aligned_seq_cst:8195; -O0:    subs w10, w9, w88196; -O0:    csel w12, w9, w8, ls8197; -O0:    ldaxr w8, [x11]8198; -O0:    cmp w8, w98199; -O0:    stlxr w10, w12, [x11]8200; -O0:    subs w9, w8, w98201;8202; -O1-LABEL: atomicrmw_umin_i32_aligned_seq_cst:8203; -O1:    ldaxr w8, [x0]8204; -O1:    cmp w8, w18205; -O1:    csel w9, w8, w1, ls8206; -O1:    stlxr w10, w9, [x0]8207    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 48208    ret i32 %r8209}8210 8211define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) {8212; -O0-LABEL: atomicrmw_umin_i64_aligned_monotonic:8213; -O0:    subs x10, x9, x88214; -O0:    csel x12, x9, x8, ls8215; -O0:    ldaxr x8, [x11]8216; -O0:    cmp x8, x98217; -O0:    stlxr w10, x12, [x11]8218; -O0:    subs x9, x8, x98219;8220; -O1-LABEL: atomicrmw_umin_i64_aligned_monotonic:8221; -O1:    ldxr x0, [x8]8222; -O1:    cmp x0, x18223; -O1:    csel x9, x0, x1, ls8224; -O1:    stxr w10, x9, [x8]8225    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 88226    ret i64 %r8227}8228 8229define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) {8230; -O0-LABEL: atomicrmw_umin_i64_aligned_acquire:8231; -O0:    subs x10, x9, x88232; -O0:    csel x12, x9, x8, ls8233; -O0:    ldaxr x8, [x11]8234; -O0:    cmp x8, x98235; -O0:    stlxr w10, x12, [x11]8236; -O0:    subs x9, x8, x98237;8238; -O1-LABEL: atomicrmw_umin_i64_aligned_acquire:8239; -O1:    ldaxr x0, [x8]8240; -O1:    cmp x0, x18241; -O1:    csel x9, x0, x1, ls8242; -O1:    stxr w10, x9, [x8]8243    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 88244    ret i64 %r8245}8246 8247define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) {8248; -O0-LABEL: atomicrmw_umin_i64_aligned_release:8249; -O0:    subs x10, x9, x88250; -O0:    csel x12, x9, x8, ls8251; -O0:    ldaxr x8, [x11]8252; -O0:    cmp x8, x98253; -O0:    stlxr w10, x12, [x11]8254; -O0:    subs x9, x8, x98255;8256; -O1-LABEL: atomicrmw_umin_i64_aligned_release:8257; -O1:    ldxr x0, [x8]8258; -O1:    cmp x0, x18259; -O1:    csel x9, x0, x1, ls8260; -O1:    stlxr w10, x9, [x8]8261    %r = atomicrmw umin ptr %ptr, i64 %value release, align 88262    ret i64 %r8263}8264 8265define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) {8266; -O0-LABEL: atomicrmw_umin_i64_aligned_acq_rel:8267; -O0:    subs x10, x9, x88268; -O0:    csel x12, x9, x8, ls8269; -O0:    ldaxr x8, [x11]8270; -O0:    cmp x8, x98271; -O0:    stlxr w10, x12, [x11]8272; -O0:    subs x9, x8, x98273;8274; -O1-LABEL: atomicrmw_umin_i64_aligned_acq_rel:8275; -O1:    ldaxr x0, [x8]8276; -O1:    cmp x0, x18277; -O1:    csel x9, x0, x1, ls8278; -O1:    stlxr w10, x9, [x8]8279    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 88280    ret i64 %r8281}8282 8283define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) {8284; -O0-LABEL: atomicrmw_umin_i64_aligned_seq_cst:8285; -O0:    subs x10, x9, x88286; -O0:    csel x12, x9, x8, ls8287; -O0:    ldaxr x8, [x11]8288; -O0:    cmp x8, x98289; -O0:    stlxr w10, x12, [x11]8290; -O0:    subs x9, x8, x98291;8292; -O1-LABEL: atomicrmw_umin_i64_aligned_seq_cst:8293; -O1:    ldaxr x0, [x8]8294; -O1:    cmp x0, x18295; -O1:    csel x9, x0, x1, ls8296; -O1:    stlxr w10, x9, [x8]8297    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 88298    ret i64 %r8299}8300 8301define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) {8302; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic:8303; -O0:    subs x12, x8, x118304; -O0:    csel x15, x13, x10, hs8305; -O0:    csel x14, x11, x8, hs8306; -O0:    ldxp x10, x12, [x9]8307; -O0:    cmp x10, x118308; -O0:    cmp x12, x138309; -O0:    stxp w8, x14, x15, [x9]8310; -O0:    stxp w8, x10, x12, [x9]8311; -O0:    subs x12, x12, x138312; -O0:    ccmp x10, x11, #0, eq8313;8314; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic:8315; -O1:    ldxp x1, x0, [x8]8316; -O1:    cmp x3, x18317; -O1:    csel x9, x0, x2, hs8318; -O1:    csel x10, x1, x3, hs8319; -O1:    stxp w11, x10, x9, [x8]8320    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 168321    ret i128 %r8322}8323 8324define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) {8325; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire:8326; -O0:    subs x12, x8, x118327; -O0:    csel x15, x13, x10, hs8328; -O0:    csel x14, x11, x8, hs8329; -O0:    ldaxp x10, x12, [x9]8330; -O0:    cmp x10, x118331; -O0:    cmp x12, x138332; -O0:    stxp w8, x14, x15, [x9]8333; -O0:    stxp w8, x10, x12, [x9]8334; -O0:    subs x12, x12, x138335; -O0:    ccmp x10, x11, #0, eq8336;8337; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire:8338; -O1:    ldaxp x1, x0, [x8]8339; -O1:    cmp x3, x18340; -O1:    csel x9, x0, x2, hs8341; -O1:    csel x10, x1, x3, hs8342; -O1:    stxp w11, x10, x9, [x8]8343    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 168344    ret i128 %r8345}8346 8347define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) {8348; -O0-LABEL: atomicrmw_umin_i128_aligned_release:8349; -O0:    subs x12, x8, x118350; -O0:    csel x15, x13, x10, hs8351; -O0:    csel x14, x11, x8, hs8352; -O0:    ldxp x10, x12, [x9]8353; -O0:    cmp x10, x118354; -O0:    cmp x12, x138355; -O0:    stlxp w8, x14, x15, [x9]8356; -O0:    stlxp w8, x10, x12, [x9]8357; -O0:    subs x12, x12, x138358; -O0:    ccmp x10, x11, #0, eq8359;8360; -O1-LABEL: atomicrmw_umin_i128_aligned_release:8361; -O1:    ldxp x1, x0, [x8]8362; -O1:    cmp x3, x18363; -O1:    csel x9, x0, x2, hs8364; -O1:    csel x10, x1, x3, hs8365; -O1:    stlxp w11, x10, x9, [x8]8366    %r = atomicrmw umin ptr %ptr, i128 %value release, align 168367    ret i128 %r8368}8369 8370define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) {8371; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel:8372; -O0:    subs x12, x8, x118373; -O0:    csel x15, x13, x10, hs8374; -O0:    csel x14, x11, x8, hs8375; -O0:    ldaxp x10, x12, [x9]8376; -O0:    cmp x10, x118377; -O0:    cmp x12, x138378; -O0:    stlxp w8, x14, x15, [x9]8379; -O0:    stlxp w8, x10, x12, [x9]8380; -O0:    subs x12, x12, x138381; -O0:    ccmp x10, x11, #0, eq8382;8383; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel:8384; -O1:    ldaxp x1, x0, [x8]8385; -O1:    cmp x3, x18386; -O1:    csel x9, x0, x2, hs8387; -O1:    csel x10, x1, x3, hs8388; -O1:    stlxp w11, x10, x9, [x8]8389    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 168390    ret i128 %r8391}8392 8393define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) {8394; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst:8395; -O0:    subs x12, x8, x118396; -O0:    csel x15, x13, x10, hs8397; -O0:    csel x14, x11, x8, hs8398; -O0:    ldaxp x10, x12, [x9]8399; -O0:    cmp x10, x118400; -O0:    cmp x12, x138401; -O0:    stlxp w8, x14, x15, [x9]8402; -O0:    stlxp w8, x10, x12, [x9]8403; -O0:    subs x12, x12, x138404; -O0:    ccmp x10, x11, #0, eq8405;8406; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst:8407; -O1:    ldaxp x1, x0, [x8]8408; -O1:    cmp x3, x18409; -O1:    csel x9, x0, x2, hs8410; -O1:    csel x10, x1, x3, hs8411; -O1:    stlxp w11, x10, x9, [x8]8412    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 168413    ret i128 %r8414}8415 8416define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) {8417; -O0-LABEL: atomicrmw_umin_i8_unaligned_monotonic:8418; -O0:    and w9, w12, #0xff8419; -O0:    subs w10, w9, w8, uxtb8420; -O0:    csel w13, w12, w8, ls8421; -O0:    ldaxrb w8, [x11]8422; -O0:    cmp w8, w12, uxtb8423; -O0:    stlxrb w10, w13, [x11]8424; -O0:    subs w9, w8, w98425;8426; -O1-LABEL: atomicrmw_umin_i8_unaligned_monotonic:8427; -O1:    and w9, w1, #0xff8428; -O1:    ldxrb w8, [x0]8429; -O1:    cmp w8, w98430; -O1:    csel w10, w8, w9, ls8431; -O1:    stxrb w11, w10, [x0]8432    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 18433    ret i8 %r8434}8435 8436define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) {8437; -O0-LABEL: atomicrmw_umin_i8_unaligned_acquire:8438; -O0:    and w9, w12, #0xff8439; -O0:    subs w10, w9, w8, uxtb8440; -O0:    csel w13, w12, w8, ls8441; -O0:    ldaxrb w8, [x11]8442; -O0:    cmp w8, w12, uxtb8443; -O0:    stlxrb w10, w13, [x11]8444; -O0:    subs w9, w8, w98445;8446; -O1-LABEL: atomicrmw_umin_i8_unaligned_acquire:8447; -O1:    and w9, w1, #0xff8448; -O1:    ldaxrb w8, [x0]8449; -O1:    cmp w8, w98450; -O1:    csel w10, w8, w9, ls8451; -O1:    stxrb w11, w10, [x0]8452    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 18453    ret i8 %r8454}8455 8456define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) {8457; -O0-LABEL: atomicrmw_umin_i8_unaligned_release:8458; -O0:    and w9, w12, #0xff8459; -O0:    subs w10, w9, w8, uxtb8460; -O0:    csel w13, w12, w8, ls8461; -O0:    ldaxrb w8, [x11]8462; -O0:    cmp w8, w12, uxtb8463; -O0:    stlxrb w10, w13, [x11]8464; -O0:    subs w9, w8, w98465;8466; -O1-LABEL: atomicrmw_umin_i8_unaligned_release:8467; -O1:    and w9, w1, #0xff8468; -O1:    ldxrb w8, [x0]8469; -O1:    cmp w8, w98470; -O1:    csel w10, w8, w9, ls8471; -O1:    stlxrb w11, w10, [x0]8472    %r = atomicrmw umin ptr %ptr, i8 %value release, align 18473    ret i8 %r8474}8475 8476define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {8477; -O0-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:8478; -O0:    and w9, w12, #0xff8479; -O0:    subs w10, w9, w8, uxtb8480; -O0:    csel w13, w12, w8, ls8481; -O0:    ldaxrb w8, [x11]8482; -O0:    cmp w8, w12, uxtb8483; -O0:    stlxrb w10, w13, [x11]8484; -O0:    subs w9, w8, w98485;8486; -O1-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:8487; -O1:    and w9, w1, #0xff8488; -O1:    ldaxrb w8, [x0]8489; -O1:    cmp w8, w98490; -O1:    csel w10, w8, w9, ls8491; -O1:    stlxrb w11, w10, [x0]8492    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 18493    ret i8 %r8494}8495 8496define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {8497; -O0-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:8498; -O0:    and w9, w12, #0xff8499; -O0:    subs w10, w9, w8, uxtb8500; -O0:    csel w13, w12, w8, ls8501; -O0:    ldaxrb w8, [x11]8502; -O0:    cmp w8, w12, uxtb8503; -O0:    stlxrb w10, w13, [x11]8504; -O0:    subs w9, w8, w98505;8506; -O1-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:8507; -O1:    and w9, w1, #0xff8508; -O1:    ldaxrb w8, [x0]8509; -O1:    cmp w8, w98510; -O1:    csel w10, w8, w9, ls8511; -O1:    stlxrb w11, w10, [x0]8512    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 18513    ret i8 %r8514}8515 8516define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) {8517; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic:8518; -O0:    and w10, w9, #0xffff8519; -O0:    subs w10, w10, w8, uxth8520; -O0:    csel w8, w9, w8, ls8521; -O0:    bl __atomic_compare_exchange8522;8523; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic:8524; -O1:    and w8, w0, #0xffff8525; -O1:    cmp w8, w20, uxth8526; -O1:    csel w8, w0, w20, ls8527; -O1:    bl __atomic_compare_exchange8528    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 18529    ret i16 %r8530}8531 8532define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) {8533; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire:8534; -O0:    and w10, w9, #0xffff8535; -O0:    subs w10, w10, w8, uxth8536; -O0:    csel w8, w9, w8, ls8537; -O0:    bl __atomic_compare_exchange8538;8539; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire:8540; -O1:    and w8, w0, #0xffff8541; -O1:    cmp w8, w20, uxth8542; -O1:    csel w8, w0, w20, ls8543; -O1:    bl __atomic_compare_exchange8544    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 18545    ret i16 %r8546}8547 8548define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) {8549; -O0-LABEL: atomicrmw_umin_i16_unaligned_release:8550; -O0:    and w10, w9, #0xffff8551; -O0:    subs w10, w10, w8, uxth8552; -O0:    csel w8, w9, w8, ls8553; -O0:    bl __atomic_compare_exchange8554;8555; -O1-LABEL: atomicrmw_umin_i16_unaligned_release:8556; -O1:    and w8, w0, #0xffff8557; -O1:    cmp w8, w20, uxth8558; -O1:    csel w8, w0, w20, ls8559; -O1:    bl __atomic_compare_exchange8560    %r = atomicrmw umin ptr %ptr, i16 %value release, align 18561    ret i16 %r8562}8563 8564define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {8565; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:8566; -O0:    and w10, w9, #0xffff8567; -O0:    subs w10, w10, w8, uxth8568; -O0:    csel w8, w9, w8, ls8569; -O0:    bl __atomic_compare_exchange8570;8571; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:8572; -O1:    and w8, w0, #0xffff8573; -O1:    cmp w8, w20, uxth8574; -O1:    csel w8, w0, w20, ls8575; -O1:    bl __atomic_compare_exchange8576    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 18577    ret i16 %r8578}8579 8580define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {8581; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:8582; -O0:    and w10, w9, #0xffff8583; -O0:    subs w10, w10, w8, uxth8584; -O0:    csel w8, w9, w8, ls8585; -O0:    bl __atomic_compare_exchange8586;8587; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:8588; -O1:    and w8, w0, #0xffff8589; -O1:    cmp w8, w20, uxth8590; -O1:    csel w8, w0, w20, ls8591; -O1:    bl __atomic_compare_exchange8592    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 18593    ret i16 %r8594}8595 8596define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) {8597; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic:8598; -O0:    subs w10, w9, w88599; -O0:    csel w8, w9, w8, ls8600; -O0:    bl __atomic_compare_exchange8601;8602; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic:8603; -O1:    cmp w0, w208604; -O1:    csel w8, w0, w20, ls8605; -O1:    bl __atomic_compare_exchange8606    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 18607    ret i32 %r8608}8609 8610define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) {8611; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire:8612; -O0:    subs w10, w9, w88613; -O0:    csel w8, w9, w8, ls8614; -O0:    bl __atomic_compare_exchange8615;8616; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire:8617; -O1:    cmp w0, w208618; -O1:    csel w8, w0, w20, ls8619; -O1:    bl __atomic_compare_exchange8620    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 18621    ret i32 %r8622}8623 8624define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) {8625; -O0-LABEL: atomicrmw_umin_i32_unaligned_release:8626; -O0:    subs w10, w9, w88627; -O0:    csel w8, w9, w8, ls8628; -O0:    bl __atomic_compare_exchange8629;8630; -O1-LABEL: atomicrmw_umin_i32_unaligned_release:8631; -O1:    cmp w0, w208632; -O1:    csel w8, w0, w20, ls8633; -O1:    bl __atomic_compare_exchange8634    %r = atomicrmw umin ptr %ptr, i32 %value release, align 18635    ret i32 %r8636}8637 8638define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {8639; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:8640; -O0:    subs w10, w9, w88641; -O0:    csel w8, w9, w8, ls8642; -O0:    bl __atomic_compare_exchange8643;8644; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:8645; -O1:    cmp w0, w208646; -O1:    csel w8, w0, w20, ls8647; -O1:    bl __atomic_compare_exchange8648    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 18649    ret i32 %r8650}8651 8652define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {8653; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:8654; -O0:    subs w10, w9, w88655; -O0:    csel w8, w9, w8, ls8656; -O0:    bl __atomic_compare_exchange8657;8658; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:8659; -O1:    cmp w0, w208660; -O1:    csel w8, w0, w20, ls8661; -O1:    bl __atomic_compare_exchange8662    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 18663    ret i32 %r8664}8665 8666define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) {8667; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic:8668; -O0:    subs x10, x9, x88669; -O0:    csel x8, x9, x8, ls8670; -O0:    bl __atomic_compare_exchange8671;8672; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic:8673; -O1:    cmp x0, x208674; -O1:    csel x8, x0, x20, ls8675; -O1:    bl __atomic_compare_exchange8676    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 18677    ret i64 %r8678}8679 8680define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) {8681; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire:8682; -O0:    subs x10, x9, x88683; -O0:    csel x8, x9, x8, ls8684; -O0:    bl __atomic_compare_exchange8685;8686; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire:8687; -O1:    cmp x0, x208688; -O1:    csel x8, x0, x20, ls8689; -O1:    bl __atomic_compare_exchange8690    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 18691    ret i64 %r8692}8693 8694define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) {8695; -O0-LABEL: atomicrmw_umin_i64_unaligned_release:8696; -O0:    subs x10, x9, x88697; -O0:    csel x8, x9, x8, ls8698; -O0:    bl __atomic_compare_exchange8699;8700; -O1-LABEL: atomicrmw_umin_i64_unaligned_release:8701; -O1:    cmp x0, x208702; -O1:    csel x8, x0, x20, ls8703; -O1:    bl __atomic_compare_exchange8704    %r = atomicrmw umin ptr %ptr, i64 %value release, align 18705    ret i64 %r8706}8707 8708define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {8709; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:8710; -O0:    subs x10, x9, x88711; -O0:    csel x8, x9, x8, ls8712; -O0:    bl __atomic_compare_exchange8713;8714; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:8715; -O1:    cmp x0, x208716; -O1:    csel x8, x0, x20, ls8717; -O1:    bl __atomic_compare_exchange8718    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 18719    ret i64 %r8720}8721 8722define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {8723; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:8724; -O0:    subs x10, x9, x88725; -O0:    csel x8, x9, x8, ls8726; -O0:    bl __atomic_compare_exchange8727;8728; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:8729; -O1:    cmp x0, x208730; -O1:    csel x8, x0, x20, ls8731; -O1:    bl __atomic_compare_exchange8732    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 18733    ret i64 %r8734}8735 8736define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) {8737; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic:8738; -O0:    subs x12, x9, x108739; -O0:    csel x8, x11, x8, hs8740; -O0:    csel x9, x10, x9, hs8741; -O0:    bl __atomic_compare_exchange8742;8743; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic:8744; -O1:    ldp x0, x1, [x0]8745; -O1:    cmp x19, x18746; -O1:    csel x8, x1, x19, hs8747; -O1:    csel x9, x0, x21, hs8748; -O1:    bl __atomic_compare_exchange8749    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 18750    ret i128 %r8751}8752 8753define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) {8754; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire:8755; -O0:    subs x12, x9, x108756; -O0:    csel x8, x11, x8, hs8757; -O0:    csel x9, x10, x9, hs8758; -O0:    bl __atomic_compare_exchange8759;8760; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire:8761; -O1:    ldp x0, x1, [x0]8762; -O1:    cmp x19, x18763; -O1:    csel x8, x1, x19, hs8764; -O1:    csel x9, x0, x21, hs8765; -O1:    bl __atomic_compare_exchange8766    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 18767    ret i128 %r8768}8769 8770define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) {8771; -O0-LABEL: atomicrmw_umin_i128_unaligned_release:8772; -O0:    subs x12, x9, x108773; -O0:    csel x8, x11, x8, hs8774; -O0:    csel x9, x10, x9, hs8775; -O0:    bl __atomic_compare_exchange8776;8777; -O1-LABEL: atomicrmw_umin_i128_unaligned_release:8778; -O1:    ldp x0, x1, [x0]8779; -O1:    cmp x19, x18780; -O1:    csel x8, x1, x19, hs8781; -O1:    csel x9, x0, x21, hs8782; -O1:    bl __atomic_compare_exchange8783    %r = atomicrmw umin ptr %ptr, i128 %value release, align 18784    ret i128 %r8785}8786 8787define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {8788; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:8789; -O0:    subs x12, x9, x108790; -O0:    csel x8, x11, x8, hs8791; -O0:    csel x9, x10, x9, hs8792; -O0:    bl __atomic_compare_exchange8793;8794; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:8795; -O1:    ldp x0, x1, [x0]8796; -O1:    cmp x19, x18797; -O1:    csel x8, x1, x19, hs8798; -O1:    csel x9, x0, x21, hs8799; -O1:    bl __atomic_compare_exchange8800    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 18801    ret i128 %r8802}8803 8804define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {8805; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:8806; -O0:    subs x12, x9, x108807; -O0:    csel x8, x11, x8, hs8808; -O0:    csel x9, x10, x9, hs8809; -O0:    bl __atomic_compare_exchange8810;8811; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:8812; -O1:    ldp x0, x1, [x0]8813; -O1:    cmp x19, x18814; -O1:    csel x8, x1, x19, hs8815; -O1:    csel x9, x0, x21, hs8816; -O1:    bl __atomic_compare_exchange8817    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 18818    ret i128 %r8819}8820