brintos

brintos / llvm-project-archived public Read only

0
0
Text · 205.1 KiB · 5193326 Raw
6485 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st[^r]|swp|cas|bl|add|and|eor|orn|orr|sub|mvn|sxt|cmp|ccmp|csel|dmb)"2; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+v8.1a -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+v8.1a -O1 | FileCheck %s --check-prefixes=CHECK,-O15 6define dso_local i8 @atomicrmw_xchg_i8_aligned_monotonic(ptr %ptr, i8 %value) {7; CHECK-LABEL: atomicrmw_xchg_i8_aligned_monotonic:8; CHECK:    swpb w1, w0, [x0]9    %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 110    ret i8 %r11}12 13define dso_local i8 @atomicrmw_xchg_i8_aligned_acquire(ptr %ptr, i8 %value) {14; CHECK-LABEL: atomicrmw_xchg_i8_aligned_acquire:15; CHECK:    swpab w1, w0, [x0]16    %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 117    ret i8 %r18}19 20define dso_local i8 @atomicrmw_xchg_i8_aligned_release(ptr %ptr, i8 %value) {21; CHECK-LABEL: atomicrmw_xchg_i8_aligned_release:22; CHECK:    swplb w1, w0, [x0]23    %r = atomicrmw xchg ptr %ptr, i8 %value release, align 124    ret i8 %r25}26 27define dso_local i8 @atomicrmw_xchg_i8_aligned_acq_rel(ptr %ptr, i8 %value) {28; CHECK-LABEL: atomicrmw_xchg_i8_aligned_acq_rel:29; CHECK:    swpalb w1, w0, [x0]30    %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 131    ret i8 %r32}33 34define dso_local i8 @atomicrmw_xchg_i8_aligned_seq_cst(ptr %ptr, i8 %value) {35; CHECK-LABEL: atomicrmw_xchg_i8_aligned_seq_cst:36; CHECK:    swpalb w1, w0, [x0]37    %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 138    ret i8 %r39}40 41define dso_local i16 @atomicrmw_xchg_i16_aligned_monotonic(ptr %ptr, i16 %value) {42; CHECK-LABEL: atomicrmw_xchg_i16_aligned_monotonic:43; CHECK:    swph w1, w0, [x0]44    %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 245    ret i16 %r46}47 48define dso_local i16 @atomicrmw_xchg_i16_aligned_acquire(ptr %ptr, i16 %value) {49; CHECK-LABEL: atomicrmw_xchg_i16_aligned_acquire:50; CHECK:    swpah w1, w0, [x0]51    %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 252    ret i16 %r53}54 55define dso_local i16 @atomicrmw_xchg_i16_aligned_release(ptr %ptr, i16 %value) {56; CHECK-LABEL: atomicrmw_xchg_i16_aligned_release:57; CHECK:    swplh w1, w0, [x0]58    %r = atomicrmw xchg ptr %ptr, i16 %value release, align 259    ret i16 %r60}61 62define dso_local i16 @atomicrmw_xchg_i16_aligned_acq_rel(ptr %ptr, i16 %value) {63; CHECK-LABEL: atomicrmw_xchg_i16_aligned_acq_rel:64; CHECK:    swpalh w1, w0, [x0]65    %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 266    ret i16 %r67}68 69define dso_local i16 @atomicrmw_xchg_i16_aligned_seq_cst(ptr %ptr, i16 %value) {70; CHECK-LABEL: atomicrmw_xchg_i16_aligned_seq_cst:71; CHECK:    swpalh w1, w0, [x0]72    %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 273    ret i16 %r74}75 76define dso_local i32 @atomicrmw_xchg_i32_aligned_monotonic(ptr %ptr, i32 %value) {77; CHECK-LABEL: atomicrmw_xchg_i32_aligned_monotonic:78; CHECK:    swp w1, w0, [x0]79    %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 480    ret i32 %r81}82 83define dso_local i32 @atomicrmw_xchg_i32_aligned_acquire(ptr %ptr, i32 %value) {84; CHECK-LABEL: atomicrmw_xchg_i32_aligned_acquire:85; CHECK:    swpa w1, w0, [x0]86    %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 487    ret i32 %r88}89 90define dso_local i32 @atomicrmw_xchg_i32_aligned_release(ptr %ptr, i32 %value) {91; CHECK-LABEL: atomicrmw_xchg_i32_aligned_release:92; CHECK:    swpl w1, w0, [x0]93    %r = atomicrmw xchg ptr %ptr, i32 %value release, align 494    ret i32 %r95}96 97define dso_local i32 @atomicrmw_xchg_i32_aligned_acq_rel(ptr %ptr, i32 %value) {98; CHECK-LABEL: atomicrmw_xchg_i32_aligned_acq_rel:99; CHECK:    swpal w1, w0, [x0]100    %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 4101    ret i32 %r102}103 104define dso_local i32 @atomicrmw_xchg_i32_aligned_seq_cst(ptr %ptr, i32 %value) {105; CHECK-LABEL: atomicrmw_xchg_i32_aligned_seq_cst:106; CHECK:    swpal w1, w0, [x0]107    %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 4108    ret i32 %r109}110 111define dso_local i64 @atomicrmw_xchg_i64_aligned_monotonic(ptr %ptr, i64 %value) {112; CHECK-LABEL: atomicrmw_xchg_i64_aligned_monotonic:113; CHECK:    swp x1, x0, [x0]114    %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 8115    ret i64 %r116}117 118define dso_local i64 @atomicrmw_xchg_i64_aligned_acquire(ptr %ptr, i64 %value) {119; CHECK-LABEL: atomicrmw_xchg_i64_aligned_acquire:120; CHECK:    swpa x1, x0, [x0]121    %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 8122    ret i64 %r123}124 125define dso_local i64 @atomicrmw_xchg_i64_aligned_release(ptr %ptr, i64 %value) {126; CHECK-LABEL: atomicrmw_xchg_i64_aligned_release:127; CHECK:    swpl x1, x0, [x0]128    %r = atomicrmw xchg ptr %ptr, i64 %value release, align 8129    ret i64 %r130}131 132define dso_local i64 @atomicrmw_xchg_i64_aligned_acq_rel(ptr %ptr, i64 %value) {133; CHECK-LABEL: atomicrmw_xchg_i64_aligned_acq_rel:134; CHECK:    swpal x1, x0, [x0]135    %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 8136    ret i64 %r137}138 139define dso_local i64 @atomicrmw_xchg_i64_aligned_seq_cst(ptr %ptr, i64 %value) {140; CHECK-LABEL: atomicrmw_xchg_i64_aligned_seq_cst:141; CHECK:    swpal x1, x0, [x0]142    %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 8143    ret i64 %r144}145 146define dso_local i128 @atomicrmw_xchg_i128_aligned_monotonic(ptr %ptr, i128 %value) {147; -O0-LABEL: atomicrmw_xchg_i128_aligned_monotonic:148; -O0:    casp x0, x1, x2, x3, [x8]149; -O0:    eor x8, x10, x8150; -O0:    eor x11, x9, x11151; -O0:    orr x8, x8, x11152; -O0:    subs x8, x8, #0153;154; -O1-LABEL: atomicrmw_xchg_i128_aligned_monotonic:155; -O1:    ldp x4, x5, [x0]156; -O1:    casp x4, x5, x2, x3, [x0]157; -O1:    cmp x5, x7158; -O1:    ccmp x4, x6, #0, eq159    %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 16160    ret i128 %r161}162 163define dso_local i128 @atomicrmw_xchg_i128_aligned_acquire(ptr %ptr, i128 %value) {164; -O0-LABEL: atomicrmw_xchg_i128_aligned_acquire:165; -O0:    caspa x0, x1, x2, x3, [x8]166; -O0:    eor x8, x10, x8167; -O0:    eor x11, x9, x11168; -O0:    orr x8, x8, x11169; -O0:    subs x8, x8, #0170;171; -O1-LABEL: atomicrmw_xchg_i128_aligned_acquire:172; -O1:    ldp x4, x5, [x0]173; -O1:    caspa x4, x5, x2, x3, [x0]174; -O1:    cmp x5, x7175; -O1:    ccmp x4, x6, #0, eq176    %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 16177    ret i128 %r178}179 180define dso_local i128 @atomicrmw_xchg_i128_aligned_release(ptr %ptr, i128 %value) {181; -O0-LABEL: atomicrmw_xchg_i128_aligned_release:182; -O0:    caspl x0, x1, x2, x3, [x8]183; -O0:    eor x8, x10, x8184; -O0:    eor x11, x9, x11185; -O0:    orr x8, x8, x11186; -O0:    subs x8, x8, #0187;188; -O1-LABEL: atomicrmw_xchg_i128_aligned_release:189; -O1:    ldp x4, x5, [x0]190; -O1:    caspl x4, x5, x2, x3, [x0]191; -O1:    cmp x5, x7192; -O1:    ccmp x4, x6, #0, eq193    %r = atomicrmw xchg ptr %ptr, i128 %value release, align 16194    ret i128 %r195}196 197define dso_local i128 @atomicrmw_xchg_i128_aligned_acq_rel(ptr %ptr, i128 %value) {198; -O0-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:199; -O0:    caspal x0, x1, x2, x3, [x8]200; -O0:    eor x8, x10, x8201; -O0:    eor x11, x9, x11202; -O0:    orr x8, x8, x11203; -O0:    subs x8, x8, #0204;205; -O1-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:206; -O1:    ldp x4, x5, [x0]207; -O1:    caspal x4, x5, x2, x3, [x0]208; -O1:    cmp x5, x7209; -O1:    ccmp x4, x6, #0, eq210    %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 16211    ret i128 %r212}213 214define dso_local i128 @atomicrmw_xchg_i128_aligned_seq_cst(ptr %ptr, i128 %value) {215; -O0-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:216; -O0:    caspal x0, x1, x2, x3, [x8]217; -O0:    eor x8, x10, x8218; -O0:    eor x11, x9, x11219; -O0:    orr x8, x8, x11220; -O0:    subs x8, x8, #0221;222; -O1-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:223; -O1:    ldp x4, x5, [x0]224; -O1:    caspal x4, x5, x2, x3, [x0]225; -O1:    cmp x5, x7226; -O1:    ccmp x4, x6, #0, eq227    %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 16228    ret i128 %r229}230 231define dso_local i8 @atomicrmw_xchg_i8_unaligned_monotonic(ptr %ptr, i8 %value) {232; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_monotonic:233; CHECK:    swpb w1, w0, [x0]234    %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 1235    ret i8 %r236}237 238define dso_local i8 @atomicrmw_xchg_i8_unaligned_acquire(ptr %ptr, i8 %value) {239; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acquire:240; CHECK:    swpab w1, w0, [x0]241    %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 1242    ret i8 %r243}244 245define dso_local i8 @atomicrmw_xchg_i8_unaligned_release(ptr %ptr, i8 %value) {246; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_release:247; CHECK:    swplb w1, w0, [x0]248    %r = atomicrmw xchg ptr %ptr, i8 %value release, align 1249    ret i8 %r250}251 252define dso_local i8 @atomicrmw_xchg_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {253; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel:254; CHECK:    swpalb w1, w0, [x0]255    %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 1256    ret i8 %r257}258 259define dso_local i8 @atomicrmw_xchg_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {260; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst:261; CHECK:    swpalb w1, w0, [x0]262    %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 1263    ret i8 %r264}265 266define dso_local i16 @atomicrmw_xchg_i16_unaligned_monotonic(ptr %ptr, i16 %value) {267; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_monotonic:268; CHECK:    bl __atomic_exchange269    %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 1270    ret i16 %r271}272 273define dso_local i16 @atomicrmw_xchg_i16_unaligned_acquire(ptr %ptr, i16 %value) {274; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acquire:275; CHECK:    bl __atomic_exchange276    %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 1277    ret i16 %r278}279 280define dso_local i16 @atomicrmw_xchg_i16_unaligned_release(ptr %ptr, i16 %value) {281; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_release:282; CHECK:    bl __atomic_exchange283    %r = atomicrmw xchg ptr %ptr, i16 %value release, align 1284    ret i16 %r285}286 287define dso_local i16 @atomicrmw_xchg_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {288; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acq_rel:289; CHECK:    bl __atomic_exchange290    %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 1291    ret i16 %r292}293 294define dso_local i16 @atomicrmw_xchg_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {295; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_seq_cst:296; CHECK:    bl __atomic_exchange297    %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 1298    ret i16 %r299}300 301define dso_local i32 @atomicrmw_xchg_i32_unaligned_monotonic(ptr %ptr, i32 %value) {302; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_monotonic:303; CHECK:    bl __atomic_exchange304    %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 1305    ret i32 %r306}307 308define dso_local i32 @atomicrmw_xchg_i32_unaligned_acquire(ptr %ptr, i32 %value) {309; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acquire:310; CHECK:    bl __atomic_exchange311    %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 1312    ret i32 %r313}314 315define dso_local i32 @atomicrmw_xchg_i32_unaligned_release(ptr %ptr, i32 %value) {316; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_release:317; CHECK:    bl __atomic_exchange318    %r = atomicrmw xchg ptr %ptr, i32 %value release, align 1319    ret i32 %r320}321 322define dso_local i32 @atomicrmw_xchg_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {323; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acq_rel:324; CHECK:    bl __atomic_exchange325    %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 1326    ret i32 %r327}328 329define dso_local i32 @atomicrmw_xchg_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {330; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_seq_cst:331; CHECK:    bl __atomic_exchange332    %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 1333    ret i32 %r334}335 336define dso_local i64 @atomicrmw_xchg_i64_unaligned_monotonic(ptr %ptr, i64 %value) {337; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_monotonic:338; CHECK:    bl __atomic_exchange339    %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 1340    ret i64 %r341}342 343define dso_local i64 @atomicrmw_xchg_i64_unaligned_acquire(ptr %ptr, i64 %value) {344; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acquire:345; CHECK:    bl __atomic_exchange346    %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 1347    ret i64 %r348}349 350define dso_local i64 @atomicrmw_xchg_i64_unaligned_release(ptr %ptr, i64 %value) {351; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_release:352; CHECK:    bl __atomic_exchange353    %r = atomicrmw xchg ptr %ptr, i64 %value release, align 1354    ret i64 %r355}356 357define dso_local i64 @atomicrmw_xchg_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {358; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acq_rel:359; CHECK:    bl __atomic_exchange360    %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 1361    ret i64 %r362}363 364define dso_local i64 @atomicrmw_xchg_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {365; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_seq_cst:366; CHECK:    bl __atomic_exchange367    %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 1368    ret i64 %r369}370 371define dso_local i128 @atomicrmw_xchg_i128_unaligned_monotonic(ptr %ptr, i128 %value) {372; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_monotonic:373; CHECK:    bl __atomic_exchange374    %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 1375    ret i128 %r376}377 378define dso_local i128 @atomicrmw_xchg_i128_unaligned_acquire(ptr %ptr, i128 %value) {379; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acquire:380; CHECK:    bl __atomic_exchange381    %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 1382    ret i128 %r383}384 385define dso_local i128 @atomicrmw_xchg_i128_unaligned_release(ptr %ptr, i128 %value) {386; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_release:387; CHECK:    bl __atomic_exchange388    %r = atomicrmw xchg ptr %ptr, i128 %value release, align 1389    ret i128 %r390}391 392define dso_local i128 @atomicrmw_xchg_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {393; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acq_rel:394; CHECK:    bl __atomic_exchange395    %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 1396    ret i128 %r397}398 399define dso_local i128 @atomicrmw_xchg_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {400; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_seq_cst:401; CHECK:    bl __atomic_exchange402    %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 1403    ret i128 %r404}405 406define dso_local i8 @atomicrmw_add_i8_aligned_monotonic(ptr %ptr, i8 %value) {407; CHECK-LABEL: atomicrmw_add_i8_aligned_monotonic:408; CHECK:    ldaddb w1, w0, [x0]409    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1410    ret i8 %r411}412 413define dso_local i8 @atomicrmw_add_i8_aligned_acquire(ptr %ptr, i8 %value) {414; CHECK-LABEL: atomicrmw_add_i8_aligned_acquire:415; CHECK:    ldaddab w1, w0, [x0]416    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1417    ret i8 %r418}419 420define dso_local i8 @atomicrmw_add_i8_aligned_release(ptr %ptr, i8 %value) {421; CHECK-LABEL: atomicrmw_add_i8_aligned_release:422; CHECK:    ldaddlb w1, w0, [x0]423    %r = atomicrmw add ptr %ptr, i8 %value release, align 1424    ret i8 %r425}426 427define dso_local i8 @atomicrmw_add_i8_aligned_acq_rel(ptr %ptr, i8 %value) {428; CHECK-LABEL: atomicrmw_add_i8_aligned_acq_rel:429; CHECK:    ldaddalb w1, w0, [x0]430    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1431    ret i8 %r432}433 434define dso_local i8 @atomicrmw_add_i8_aligned_seq_cst(ptr %ptr, i8 %value) {435; CHECK-LABEL: atomicrmw_add_i8_aligned_seq_cst:436; CHECK:    ldaddalb w1, w0, [x0]437    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1438    ret i8 %r439}440 441define dso_local i16 @atomicrmw_add_i16_aligned_monotonic(ptr %ptr, i16 %value) {442; CHECK-LABEL: atomicrmw_add_i16_aligned_monotonic:443; CHECK:    ldaddh w1, w0, [x0]444    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 2445    ret i16 %r446}447 448define dso_local i16 @atomicrmw_add_i16_aligned_acquire(ptr %ptr, i16 %value) {449; CHECK-LABEL: atomicrmw_add_i16_aligned_acquire:450; CHECK:    ldaddah w1, w0, [x0]451    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 2452    ret i16 %r453}454 455define dso_local i16 @atomicrmw_add_i16_aligned_release(ptr %ptr, i16 %value) {456; CHECK-LABEL: atomicrmw_add_i16_aligned_release:457; CHECK:    ldaddlh w1, w0, [x0]458    %r = atomicrmw add ptr %ptr, i16 %value release, align 2459    ret i16 %r460}461 462define dso_local i16 @atomicrmw_add_i16_aligned_acq_rel(ptr %ptr, i16 %value) {463; CHECK-LABEL: atomicrmw_add_i16_aligned_acq_rel:464; CHECK:    ldaddalh w1, w0, [x0]465    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 2466    ret i16 %r467}468 469define dso_local i16 @atomicrmw_add_i16_aligned_seq_cst(ptr %ptr, i16 %value) {470; CHECK-LABEL: atomicrmw_add_i16_aligned_seq_cst:471; CHECK:    ldaddalh w1, w0, [x0]472    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 2473    ret i16 %r474}475 476define dso_local i32 @atomicrmw_add_i32_aligned_monotonic(ptr %ptr, i32 %value) {477; CHECK-LABEL: atomicrmw_add_i32_aligned_monotonic:478; CHECK:    ldadd w1, w0, [x0]479    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 4480    ret i32 %r481}482 483define dso_local i32 @atomicrmw_add_i32_aligned_acquire(ptr %ptr, i32 %value) {484; CHECK-LABEL: atomicrmw_add_i32_aligned_acquire:485; CHECK:    ldadda w1, w0, [x0]486    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 4487    ret i32 %r488}489 490define dso_local i32 @atomicrmw_add_i32_aligned_release(ptr %ptr, i32 %value) {491; CHECK-LABEL: atomicrmw_add_i32_aligned_release:492; CHECK:    ldaddl w1, w0, [x0]493    %r = atomicrmw add ptr %ptr, i32 %value release, align 4494    ret i32 %r495}496 497define dso_local i32 @atomicrmw_add_i32_aligned_acq_rel(ptr %ptr, i32 %value) {498; CHECK-LABEL: atomicrmw_add_i32_aligned_acq_rel:499; CHECK:    ldaddal w1, w0, [x0]500    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 4501    ret i32 %r502}503 504define dso_local i32 @atomicrmw_add_i32_aligned_seq_cst(ptr %ptr, i32 %value) {505; CHECK-LABEL: atomicrmw_add_i32_aligned_seq_cst:506; CHECK:    ldaddal w1, w0, [x0]507    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 4508    ret i32 %r509}510 511define dso_local i64 @atomicrmw_add_i64_aligned_monotonic(ptr %ptr, i64 %value) {512; CHECK-LABEL: atomicrmw_add_i64_aligned_monotonic:513; CHECK:    ldadd x1, x0, [x0]514    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 8515    ret i64 %r516}517 518define dso_local i64 @atomicrmw_add_i64_aligned_acquire(ptr %ptr, i64 %value) {519; CHECK-LABEL: atomicrmw_add_i64_aligned_acquire:520; CHECK:    ldadda x1, x0, [x0]521    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 8522    ret i64 %r523}524 525define dso_local i64 @atomicrmw_add_i64_aligned_release(ptr %ptr, i64 %value) {526; CHECK-LABEL: atomicrmw_add_i64_aligned_release:527; CHECK:    ldaddl x1, x0, [x0]528    %r = atomicrmw add ptr %ptr, i64 %value release, align 8529    ret i64 %r530}531 532define dso_local i64 @atomicrmw_add_i64_aligned_acq_rel(ptr %ptr, i64 %value) {533; CHECK-LABEL: atomicrmw_add_i64_aligned_acq_rel:534; CHECK:    ldaddal x1, x0, [x0]535    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 8536    ret i64 %r537}538 539define dso_local i64 @atomicrmw_add_i64_aligned_seq_cst(ptr %ptr, i64 %value) {540; CHECK-LABEL: atomicrmw_add_i64_aligned_seq_cst:541; CHECK:    ldaddal x1, x0, [x0]542    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 8543    ret i64 %r544}545 546define dso_local i128 @atomicrmw_add_i128_aligned_monotonic(ptr %ptr, i128 %value) {547; -O0-LABEL: atomicrmw_add_i128_aligned_monotonic:548; -O0:    adds x2, x9, x11549; -O0:    subs w11, w11, #1550; -O0:    casp x0, x1, x2, x3, [x8]551; -O0:    eor x8, x10, x8552; -O0:    eor x11, x9, x11553; -O0:    orr x8, x8, x11554; -O0:    subs x8, x8, #0555;556; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic:557; -O1:    ldp x4, x5, [x0]558; -O1:    adds x8, x4, x2559; -O1:    casp x4, x5, x8, x9, [x0]560; -O1:    cmp x5, x7561; -O1:    ccmp x4, x6, #0, eq562    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16563    ret i128 %r564}565 566define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) {567; -O0-LABEL: atomicrmw_add_i128_aligned_acquire:568; -O0:    adds x2, x9, x11569; -O0:    subs w11, w11, #1570; -O0:    caspa x0, x1, x2, x3, [x8]571; -O0:    eor x8, x10, x8572; -O0:    eor x11, x9, x11573; -O0:    orr x8, x8, x11574; -O0:    subs x8, x8, #0575;576; -O1-LABEL: atomicrmw_add_i128_aligned_acquire:577; -O1:    ldp x4, x5, [x0]578; -O1:    adds x8, x4, x2579; -O1:    caspa x4, x5, x8, x9, [x0]580; -O1:    cmp x5, x7581; -O1:    ccmp x4, x6, #0, eq582    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16583    ret i128 %r584}585 586define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) {587; -O0-LABEL: atomicrmw_add_i128_aligned_release:588; -O0:    adds x2, x9, x11589; -O0:    subs w11, w11, #1590; -O0:    caspl x0, x1, x2, x3, [x8]591; -O0:    eor x8, x10, x8592; -O0:    eor x11, x9, x11593; -O0:    orr x8, x8, x11594; -O0:    subs x8, x8, #0595;596; -O1-LABEL: atomicrmw_add_i128_aligned_release:597; -O1:    ldp x4, x5, [x0]598; -O1:    adds x8, x4, x2599; -O1:    caspl x4, x5, x8, x9, [x0]600; -O1:    cmp x5, x7601; -O1:    ccmp x4, x6, #0, eq602    %r = atomicrmw add ptr %ptr, i128 %value release, align 16603    ret i128 %r604}605 606define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) {607; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel:608; -O0:    adds x2, x9, x11609; -O0:    subs w11, w11, #1610; -O0:    caspal x0, x1, x2, x3, [x8]611; -O0:    eor x8, x10, x8612; -O0:    eor x11, x9, x11613; -O0:    orr x8, x8, x11614; -O0:    subs x8, x8, #0615;616; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel:617; -O1:    ldp x4, x5, [x0]618; -O1:    adds x8, x4, x2619; -O1:    caspal x4, x5, x8, x9, [x0]620; -O1:    cmp x5, x7621; -O1:    ccmp x4, x6, #0, eq622    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 16623    ret i128 %r624}625 626define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) {627; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst:628; -O0:    adds x2, x9, x11629; -O0:    subs w11, w11, #1630; -O0:    caspal x0, x1, x2, x3, [x8]631; -O0:    eor x8, x10, x8632; -O0:    eor x11, x9, x11633; -O0:    orr x8, x8, x11634; -O0:    subs x8, x8, #0635;636; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst:637; -O1:    ldp x4, x5, [x0]638; -O1:    adds x8, x4, x2639; -O1:    caspal x4, x5, x8, x9, [x0]640; -O1:    cmp x5, x7641; -O1:    ccmp x4, x6, #0, eq642    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 16643    ret i128 %r644}645 646define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) {647; CHECK-LABEL: atomicrmw_add_i8_unaligned_monotonic:648; CHECK:    ldaddb w1, w0, [x0]649    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1650    ret i8 %r651}652 653define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) {654; CHECK-LABEL: atomicrmw_add_i8_unaligned_acquire:655; CHECK:    ldaddab w1, w0, [x0]656    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1657    ret i8 %r658}659 660define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) {661; CHECK-LABEL: atomicrmw_add_i8_unaligned_release:662; CHECK:    ldaddlb w1, w0, [x0]663    %r = atomicrmw add ptr %ptr, i8 %value release, align 1664    ret i8 %r665}666 667define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {668; CHECK-LABEL: atomicrmw_add_i8_unaligned_acq_rel:669; CHECK:    ldaddalb w1, w0, [x0]670    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1671    ret i8 %r672}673 674define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {675; CHECK-LABEL: atomicrmw_add_i8_unaligned_seq_cst:676; CHECK:    ldaddalb w1, w0, [x0]677    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1678    ret i8 %r679}680 681define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) {682; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic:683; -O0:    add w8, w8, w9, uxth684; -O0:    bl __atomic_compare_exchange685;686; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic:687; -O1:    add w8, w0, w20688; -O1:    bl __atomic_compare_exchange689    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 1690    ret i16 %r691}692 693define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) {694; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire:695; -O0:    add w8, w8, w9, uxth696; -O0:    bl __atomic_compare_exchange697;698; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire:699; -O1:    add w8, w0, w20700; -O1:    bl __atomic_compare_exchange701    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 1702    ret i16 %r703}704 705define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) {706; -O0-LABEL: atomicrmw_add_i16_unaligned_release:707; -O0:    add w8, w8, w9, uxth708; -O0:    bl __atomic_compare_exchange709;710; -O1-LABEL: atomicrmw_add_i16_unaligned_release:711; -O1:    add w8, w0, w20712; -O1:    bl __atomic_compare_exchange713    %r = atomicrmw add ptr %ptr, i16 %value release, align 1714    ret i16 %r715}716 717define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {718; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel:719; -O0:    add w8, w8, w9, uxth720; -O0:    bl __atomic_compare_exchange721;722; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel:723; -O1:    add w8, w0, w20724; -O1:    bl __atomic_compare_exchange725    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 1726    ret i16 %r727}728 729define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {730; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst:731; -O0:    add w8, w8, w9, uxth732; -O0:    bl __atomic_compare_exchange733;734; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst:735; -O1:    add w8, w0, w20736; -O1:    bl __atomic_compare_exchange737    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 1738    ret i16 %r739}740 741define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) {742; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic:743; -O0:    add w8, w9, w8744; -O0:    bl __atomic_compare_exchange745;746; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic:747; -O1:    add w8, w0, w20748; -O1:    bl __atomic_compare_exchange749    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 1750    ret i32 %r751}752 753define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) {754; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire:755; -O0:    add w8, w9, w8756; -O0:    bl __atomic_compare_exchange757;758; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire:759; -O1:    add w8, w0, w20760; -O1:    bl __atomic_compare_exchange761    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 1762    ret i32 %r763}764 765define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) {766; -O0-LABEL: atomicrmw_add_i32_unaligned_release:767; -O0:    add w8, w9, w8768; -O0:    bl __atomic_compare_exchange769;770; -O1-LABEL: atomicrmw_add_i32_unaligned_release:771; -O1:    add w8, w0, w20772; -O1:    bl __atomic_compare_exchange773    %r = atomicrmw add ptr %ptr, i32 %value release, align 1774    ret i32 %r775}776 777define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {778; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel:779; -O0:    add w8, w9, w8780; -O0:    bl __atomic_compare_exchange781;782; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel:783; -O1:    add w8, w0, w20784; -O1:    bl __atomic_compare_exchange785    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 1786    ret i32 %r787}788 789define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {790; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst:791; -O0:    add w8, w9, w8792; -O0:    bl __atomic_compare_exchange793;794; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst:795; -O1:    add w8, w0, w20796; -O1:    bl __atomic_compare_exchange797    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 1798    ret i32 %r799}800 801define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) {802; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic:803; -O0:    add x8, x9, x8804; -O0:    bl __atomic_compare_exchange805;806; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic:807; -O1:    add x8, x0, x20808; -O1:    bl __atomic_compare_exchange809    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 1810    ret i64 %r811}812 813define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) {814; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire:815; -O0:    add x8, x9, x8816; -O0:    bl __atomic_compare_exchange817;818; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire:819; -O1:    add x8, x0, x20820; -O1:    bl __atomic_compare_exchange821    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 1822    ret i64 %r823}824 825define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) {826; -O0-LABEL: atomicrmw_add_i64_unaligned_release:827; -O0:    add x8, x9, x8828; -O0:    bl __atomic_compare_exchange829;830; -O1-LABEL: atomicrmw_add_i64_unaligned_release:831; -O1:    add x8, x0, x20832; -O1:    bl __atomic_compare_exchange833    %r = atomicrmw add ptr %ptr, i64 %value release, align 1834    ret i64 %r835}836 837define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {838; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel:839; -O0:    add x8, x9, x8840; -O0:    bl __atomic_compare_exchange841;842; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel:843; -O1:    add x8, x0, x20844; -O1:    bl __atomic_compare_exchange845    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 1846    ret i64 %r847}848 849define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {850; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst:851; -O0:    add x8, x9, x8852; -O0:    bl __atomic_compare_exchange853;854; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst:855; -O1:    add x8, x0, x20856; -O1:    bl __atomic_compare_exchange857    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 1858    ret i64 %r859}860 861define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) {862; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic:863; -O0:    adds x9, x8, x9864; -O0:    subs w11, w11, #1865; -O0:    bl __atomic_compare_exchange866;867; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic:868; -O1:    ldp x0, x1, [x0]869; -O1:    adds x8, x0, x21870; -O1:    bl __atomic_compare_exchange871    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 1872    ret i128 %r873}874 875define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) {876; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire:877; -O0:    adds x9, x8, x9878; -O0:    subs w11, w11, #1879; -O0:    bl __atomic_compare_exchange880;881; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire:882; -O1:    ldp x0, x1, [x0]883; -O1:    adds x8, x0, x21884; -O1:    bl __atomic_compare_exchange885    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 1886    ret i128 %r887}888 889define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) {890; -O0-LABEL: atomicrmw_add_i128_unaligned_release:891; -O0:    adds x9, x8, x9892; -O0:    subs w11, w11, #1893; -O0:    bl __atomic_compare_exchange894;895; -O1-LABEL: atomicrmw_add_i128_unaligned_release:896; -O1:    ldp x0, x1, [x0]897; -O1:    adds x8, x0, x21898; -O1:    bl __atomic_compare_exchange899    %r = atomicrmw add ptr %ptr, i128 %value release, align 1900    ret i128 %r901}902 903define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {904; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel:905; -O0:    adds x9, x8, x9906; -O0:    subs w11, w11, #1907; -O0:    bl __atomic_compare_exchange908;909; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel:910; -O1:    ldp x0, x1, [x0]911; -O1:    adds x8, x0, x21912; -O1:    bl __atomic_compare_exchange913    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 1914    ret i128 %r915}916 917define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {918; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst:919; -O0:    adds x9, x8, x9920; -O0:    subs w11, w11, #1921; -O0:    bl __atomic_compare_exchange922;923; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst:924; -O1:    ldp x0, x1, [x0]925; -O1:    adds x8, x0, x21926; -O1:    bl __atomic_compare_exchange927    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 1928    ret i128 %r929}930 931define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) {932; CHECK-LABEL: atomicrmw_sub_i8_aligned_monotonic:933; CHECK:    ldaddb w8, w0, [x0]934    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1935    ret i8 %r936}937 938define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) {939; CHECK-LABEL: atomicrmw_sub_i8_aligned_acquire:940; CHECK:    ldaddab w8, w0, [x0]941    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1942    ret i8 %r943}944 945define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) {946; CHECK-LABEL: atomicrmw_sub_i8_aligned_release:947; CHECK:    ldaddlb w8, w0, [x0]948    %r = atomicrmw sub ptr %ptr, i8 %value release, align 1949    ret i8 %r950}951 952define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) {953; CHECK-LABEL: atomicrmw_sub_i8_aligned_acq_rel:954; CHECK:    ldaddalb w8, w0, [x0]955    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1956    ret i8 %r957}958 959define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) {960; CHECK-LABEL: atomicrmw_sub_i8_aligned_seq_cst:961; CHECK:    ldaddalb w8, w0, [x0]962    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 1963    ret i8 %r964}965 966define dso_local i16 @atomicrmw_sub_i16_aligned_monotonic(ptr %ptr, i16 %value) {967; CHECK-LABEL: atomicrmw_sub_i16_aligned_monotonic:968; CHECK:    ldaddh w8, w0, [x0]969    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 2970    ret i16 %r971}972 973define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) {974; CHECK-LABEL: atomicrmw_sub_i16_aligned_acquire:975; CHECK:    ldaddah w8, w0, [x0]976    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 2977    ret i16 %r978}979 980define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) {981; CHECK-LABEL: atomicrmw_sub_i16_aligned_release:982; CHECK:    ldaddlh w8, w0, [x0]983    %r = atomicrmw sub ptr %ptr, i16 %value release, align 2984    ret i16 %r985}986 987define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) {988; CHECK-LABEL: atomicrmw_sub_i16_aligned_acq_rel:989; CHECK:    ldaddalh w8, w0, [x0]990    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 2991    ret i16 %r992}993 994define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) {995; CHECK-LABEL: atomicrmw_sub_i16_aligned_seq_cst:996; CHECK:    ldaddalh w8, w0, [x0]997    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 2998    ret i16 %r999}1000 1001define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) {1002; CHECK-LABEL: atomicrmw_sub_i32_aligned_monotonic:1003; CHECK:    ldadd w8, w0, [x0]1004    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 41005    ret i32 %r1006}1007 1008define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) {1009; CHECK-LABEL: atomicrmw_sub_i32_aligned_acquire:1010; CHECK:    ldadda w8, w0, [x0]1011    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 41012    ret i32 %r1013}1014 1015define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) {1016; CHECK-LABEL: atomicrmw_sub_i32_aligned_release:1017; CHECK:    ldaddl w8, w0, [x0]1018    %r = atomicrmw sub ptr %ptr, i32 %value release, align 41019    ret i32 %r1020}1021 1022define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1023; CHECK-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1024; CHECK:    ldaddal w8, w0, [x0]1025    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 41026    ret i32 %r1027}1028 1029define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1030; CHECK-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1031; CHECK:    ldaddal w8, w0, [x0]1032    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 41033    ret i32 %r1034}1035 1036define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) {1037; CHECK-LABEL: atomicrmw_sub_i64_aligned_monotonic:1038; CHECK:    ldadd x8, x0, [x0]1039    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 81040    ret i64 %r1041}1042 1043define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) {1044; CHECK-LABEL: atomicrmw_sub_i64_aligned_acquire:1045; CHECK:    ldadda x8, x0, [x0]1046    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 81047    ret i64 %r1048}1049 1050define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) {1051; CHECK-LABEL: atomicrmw_sub_i64_aligned_release:1052; CHECK:    ldaddl x8, x0, [x0]1053    %r = atomicrmw sub ptr %ptr, i64 %value release, align 81054    ret i64 %r1055}1056 1057define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1058; CHECK-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1059; CHECK:    ldaddal x8, x0, [x0]1060    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 81061    ret i64 %r1062}1063 1064define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1065; CHECK-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1066; CHECK:    ldaddal x8, x0, [x0]1067    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 81068    ret i64 %r1069}1070 1071define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) {1072; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic:1073; -O0:    subs x2, x9, x111074; -O0:    casp x0, x1, x2, x3, [x8]1075; -O0:    eor x8, x10, x81076; -O0:    eor x11, x9, x111077; -O0:    orr x8, x8, x111078; -O0:    subs x8, x8, #01079;1080; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic:1081; -O1:    ldp x4, x5, [x0]1082; -O1:    subs x8, x4, x21083; -O1:    casp x4, x5, x8, x9, [x0]1084; -O1:    cmp x5, x71085; -O1:    ccmp x4, x6, #0, eq1086    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 161087    ret i128 %r1088}1089 1090define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) {1091; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire:1092; -O0:    subs x2, x9, x111093; -O0:    caspa x0, x1, x2, x3, [x8]1094; -O0:    eor x8, x10, x81095; -O0:    eor x11, x9, x111096; -O0:    orr x8, x8, x111097; -O0:    subs x8, x8, #01098;1099; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire:1100; -O1:    ldp x4, x5, [x0]1101; -O1:    subs x8, x4, x21102; -O1:    caspa x4, x5, x8, x9, [x0]1103; -O1:    cmp x5, x71104; -O1:    ccmp x4, x6, #0, eq1105    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 161106    ret i128 %r1107}1108 1109define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) {1110; -O0-LABEL: atomicrmw_sub_i128_aligned_release:1111; -O0:    subs x2, x9, x111112; -O0:    caspl x0, x1, x2, x3, [x8]1113; -O0:    eor x8, x10, x81114; -O0:    eor x11, x9, x111115; -O0:    orr x8, x8, x111116; -O0:    subs x8, x8, #01117;1118; -O1-LABEL: atomicrmw_sub_i128_aligned_release:1119; -O1:    ldp x4, x5, [x0]1120; -O1:    subs x8, x4, x21121; -O1:    caspl x4, x5, x8, x9, [x0]1122; -O1:    cmp x5, x71123; -O1:    ccmp x4, x6, #0, eq1124    %r = atomicrmw sub ptr %ptr, i128 %value release, align 161125    ret i128 %r1126}1127 1128define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1129; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1130; -O0:    subs x2, x9, x111131; -O0:    caspal x0, x1, x2, x3, [x8]1132; -O0:    eor x8, x10, x81133; -O0:    eor x11, x9, x111134; -O0:    orr x8, x8, x111135; -O0:    subs x8, x8, #01136;1137; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1138; -O1:    ldp x4, x5, [x0]1139; -O1:    subs x8, x4, x21140; -O1:    caspal x4, x5, x8, x9, [x0]1141; -O1:    cmp x5, x71142; -O1:    ccmp x4, x6, #0, eq1143    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 161144    ret i128 %r1145}1146 1147define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1148; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1149; -O0:    subs x2, x9, x111150; -O0:    caspal x0, x1, x2, x3, [x8]1151; -O0:    eor x8, x10, x81152; -O0:    eor x11, x9, x111153; -O0:    orr x8, x8, x111154; -O0:    subs x8, x8, #01155;1156; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1157; -O1:    ldp x4, x5, [x0]1158; -O1:    subs x8, x4, x21159; -O1:    caspal x4, x5, x8, x9, [x0]1160; -O1:    cmp x5, x71161; -O1:    ccmp x4, x6, #0, eq1162    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 161163    ret i128 %r1164}1165 1166define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1167; CHECK-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1168; CHECK:    ldaddb w8, w0, [x0]1169    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11170    ret i8 %r1171}1172 1173define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) {1174; CHECK-LABEL: atomicrmw_sub_i8_unaligned_acquire:1175; CHECK:    ldaddab w8, w0, [x0]1176    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11177    ret i8 %r1178}1179 1180define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) {1181; CHECK-LABEL: atomicrmw_sub_i8_unaligned_release:1182; CHECK:    ldaddlb w8, w0, [x0]1183    %r = atomicrmw sub ptr %ptr, i8 %value release, align 11184    ret i8 %r1185}1186 1187define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1188; CHECK-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1189; CHECK:    ldaddalb w8, w0, [x0]1190    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11191    ret i8 %r1192}1193 1194define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1195; CHECK-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1196; CHECK:    ldaddalb w8, w0, [x0]1197    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11198    ret i8 %r1199}1200 1201define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1202; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1203; -O0:    subs w8, w9, w81204; -O0:    bl __atomic_compare_exchange1205;1206; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1207; -O1:    sub w8, w0, w201208; -O1:    bl __atomic_compare_exchange1209    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 11210    ret i16 %r1211}1212 1213define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) {1214; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire:1215; -O0:    subs w8, w9, w81216; -O0:    bl __atomic_compare_exchange1217;1218; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire:1219; -O1:    sub w8, w0, w201220; -O1:    bl __atomic_compare_exchange1221    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 11222    ret i16 %r1223}1224 1225define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) {1226; -O0-LABEL: atomicrmw_sub_i16_unaligned_release:1227; -O0:    subs w8, w9, w81228; -O0:    bl __atomic_compare_exchange1229;1230; -O1-LABEL: atomicrmw_sub_i16_unaligned_release:1231; -O1:    sub w8, w0, w201232; -O1:    bl __atomic_compare_exchange1233    %r = atomicrmw sub ptr %ptr, i16 %value release, align 11234    ret i16 %r1235}1236 1237define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1238; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1239; -O0:    subs w8, w9, w81240; -O0:    bl __atomic_compare_exchange1241;1242; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1243; -O1:    sub w8, w0, w201244; -O1:    bl __atomic_compare_exchange1245    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 11246    ret i16 %r1247}1248 1249define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1250; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1251; -O0:    subs w8, w9, w81252; -O0:    bl __atomic_compare_exchange1253;1254; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1255; -O1:    sub w8, w0, w201256; -O1:    bl __atomic_compare_exchange1257    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 11258    ret i16 %r1259}1260 1261define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1262; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1263; -O0:    subs w8, w9, w81264; -O0:    bl __atomic_compare_exchange1265;1266; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1267; -O1:    sub w8, w0, w201268; -O1:    bl __atomic_compare_exchange1269    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 11270    ret i32 %r1271}1272 1273define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) {1274; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire:1275; -O0:    subs w8, w9, w81276; -O0:    bl __atomic_compare_exchange1277;1278; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire:1279; -O1:    sub w8, w0, w201280; -O1:    bl __atomic_compare_exchange1281    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 11282    ret i32 %r1283}1284 1285define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) {1286; -O0-LABEL: atomicrmw_sub_i32_unaligned_release:1287; -O0:    subs w8, w9, w81288; -O0:    bl __atomic_compare_exchange1289;1290; -O1-LABEL: atomicrmw_sub_i32_unaligned_release:1291; -O1:    sub w8, w0, w201292; -O1:    bl __atomic_compare_exchange1293    %r = atomicrmw sub ptr %ptr, i32 %value release, align 11294    ret i32 %r1295}1296 1297define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1298; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1299; -O0:    subs w8, w9, w81300; -O0:    bl __atomic_compare_exchange1301;1302; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1303; -O1:    sub w8, w0, w201304; -O1:    bl __atomic_compare_exchange1305    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 11306    ret i32 %r1307}1308 1309define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1310; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1311; -O0:    subs w8, w9, w81312; -O0:    bl __atomic_compare_exchange1313;1314; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1315; -O1:    sub w8, w0, w201316; -O1:    bl __atomic_compare_exchange1317    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 11318    ret i32 %r1319}1320 1321define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1322; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1323; -O0:    subs x8, x9, x81324; -O0:    bl __atomic_compare_exchange1325;1326; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1327; -O1:    sub x8, x0, x201328; -O1:    bl __atomic_compare_exchange1329    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 11330    ret i64 %r1331}1332 1333define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) {1334; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire:1335; -O0:    subs x8, x9, x81336; -O0:    bl __atomic_compare_exchange1337;1338; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire:1339; -O1:    sub x8, x0, x201340; -O1:    bl __atomic_compare_exchange1341    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 11342    ret i64 %r1343}1344 1345define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) {1346; -O0-LABEL: atomicrmw_sub_i64_unaligned_release:1347; -O0:    subs x8, x9, x81348; -O0:    bl __atomic_compare_exchange1349;1350; -O1-LABEL: atomicrmw_sub_i64_unaligned_release:1351; -O1:    sub x8, x0, x201352; -O1:    bl __atomic_compare_exchange1353    %r = atomicrmw sub ptr %ptr, i64 %value release, align 11354    ret i64 %r1355}1356 1357define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1358; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1359; -O0:    subs x8, x9, x81360; -O0:    bl __atomic_compare_exchange1361;1362; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1363; -O1:    sub x8, x0, x201364; -O1:    bl __atomic_compare_exchange1365    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 11366    ret i64 %r1367}1368 1369define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1370; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1371; -O0:    subs x8, x9, x81372; -O0:    bl __atomic_compare_exchange1373;1374; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1375; -O1:    sub x8, x0, x201376; -O1:    bl __atomic_compare_exchange1377    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 11378    ret i64 %r1379}1380 1381define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1382; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1383; -O0:    subs x9, x8, x91384; -O0:    bl __atomic_compare_exchange1385;1386; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1387; -O1:    ldp x0, x1, [x0]1388; -O1:    subs x8, x0, x211389; -O1:    bl __atomic_compare_exchange1390    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 11391    ret i128 %r1392}1393 1394define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) {1395; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire:1396; -O0:    subs x9, x8, x91397; -O0:    bl __atomic_compare_exchange1398;1399; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire:1400; -O1:    ldp x0, x1, [x0]1401; -O1:    subs x8, x0, x211402; -O1:    bl __atomic_compare_exchange1403    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 11404    ret i128 %r1405}1406 1407define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) {1408; -O0-LABEL: atomicrmw_sub_i128_unaligned_release:1409; -O0:    subs x9, x8, x91410; -O0:    bl __atomic_compare_exchange1411;1412; -O1-LABEL: atomicrmw_sub_i128_unaligned_release:1413; -O1:    ldp x0, x1, [x0]1414; -O1:    subs x8, x0, x211415; -O1:    bl __atomic_compare_exchange1416    %r = atomicrmw sub ptr %ptr, i128 %value release, align 11417    ret i128 %r1418}1419 1420define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1421; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1422; -O0:    subs x9, x8, x91423; -O0:    bl __atomic_compare_exchange1424;1425; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1426; -O1:    ldp x0, x1, [x0]1427; -O1:    subs x8, x0, x211428; -O1:    bl __atomic_compare_exchange1429    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 11430    ret i128 %r1431}1432 1433define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1434; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1435; -O0:    subs x9, x8, x91436; -O0:    bl __atomic_compare_exchange1437;1438; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1439; -O1:    ldp x0, x1, [x0]1440; -O1:    subs x8, x0, x211441; -O1:    bl __atomic_compare_exchange1442    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 11443    ret i128 %r1444}1445 1446define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) {1447; CHECK-LABEL: atomicrmw_and_i8_aligned_monotonic:1448; CHECK:    mvn w8, w11449; CHECK:    ldclrb w8, w0, [x0]1450    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11451    ret i8 %r1452}1453 1454define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) {1455; CHECK-LABEL: atomicrmw_and_i8_aligned_acquire:1456; CHECK:    mvn w8, w11457; CHECK:    ldclrab w8, w0, [x0]1458    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11459    ret i8 %r1460}1461 1462define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) {1463; CHECK-LABEL: atomicrmw_and_i8_aligned_release:1464; CHECK:    mvn w8, w11465; CHECK:    ldclrlb w8, w0, [x0]1466    %r = atomicrmw and ptr %ptr, i8 %value release, align 11467    ret i8 %r1468}1469 1470define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) {1471; CHECK-LABEL: atomicrmw_and_i8_aligned_acq_rel:1472; CHECK:    mvn w8, w11473; CHECK:    ldclralb w8, w0, [x0]1474    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11475    ret i8 %r1476}1477 1478define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) {1479; CHECK-LABEL: atomicrmw_and_i8_aligned_seq_cst:1480; CHECK:    mvn w8, w11481; CHECK:    ldclralb w8, w0, [x0]1482    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11483    ret i8 %r1484}1485 1486define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) {1487; CHECK-LABEL: atomicrmw_and_i16_aligned_monotonic:1488; CHECK:    mvn w8, w11489; CHECK:    ldclrh w8, w0, [x0]1490    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 21491    ret i16 %r1492}1493 1494define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) {1495; CHECK-LABEL: atomicrmw_and_i16_aligned_acquire:1496; CHECK:    mvn w8, w11497; CHECK:    ldclrah w8, w0, [x0]1498    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 21499    ret i16 %r1500}1501 1502define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) {1503; CHECK-LABEL: atomicrmw_and_i16_aligned_release:1504; CHECK:    mvn w8, w11505; CHECK:    ldclrlh w8, w0, [x0]1506    %r = atomicrmw and ptr %ptr, i16 %value release, align 21507    ret i16 %r1508}1509 1510define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) {1511; CHECK-LABEL: atomicrmw_and_i16_aligned_acq_rel:1512; CHECK:    mvn w8, w11513; CHECK:    ldclralh w8, w0, [x0]1514    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 21515    ret i16 %r1516}1517 1518define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1519; CHECK-LABEL: atomicrmw_and_i16_aligned_seq_cst:1520; CHECK:    mvn w8, w11521; CHECK:    ldclralh w8, w0, [x0]1522    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 21523    ret i16 %r1524}1525 1526define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) {1527; CHECK-LABEL: atomicrmw_and_i32_aligned_monotonic:1528; CHECK:    mvn w8, w11529; CHECK:    ldclr w8, w0, [x0]1530    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 41531    ret i32 %r1532}1533 1534define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) {1535; CHECK-LABEL: atomicrmw_and_i32_aligned_acquire:1536; CHECK:    mvn w8, w11537; CHECK:    ldclra w8, w0, [x0]1538    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 41539    ret i32 %r1540}1541 1542define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) {1543; CHECK-LABEL: atomicrmw_and_i32_aligned_release:1544; CHECK:    mvn w8, w11545; CHECK:    ldclrl w8, w0, [x0]1546    %r = atomicrmw and ptr %ptr, i32 %value release, align 41547    ret i32 %r1548}1549 1550define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1551; CHECK-LABEL: atomicrmw_and_i32_aligned_acq_rel:1552; CHECK:    mvn w8, w11553; CHECK:    ldclral w8, w0, [x0]1554    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 41555    ret i32 %r1556}1557 1558define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1559; CHECK-LABEL: atomicrmw_and_i32_aligned_seq_cst:1560; CHECK:    mvn w8, w11561; CHECK:    ldclral w8, w0, [x0]1562    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 41563    ret i32 %r1564}1565 1566define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) {1567; CHECK-LABEL: atomicrmw_and_i64_aligned_monotonic:1568; CHECK:    mvn x8, x11569; CHECK:    ldclr x8, x0, [x0]1570    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 81571    ret i64 %r1572}1573 1574define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) {1575; CHECK-LABEL: atomicrmw_and_i64_aligned_acquire:1576; CHECK:    mvn x8, x11577; CHECK:    ldclra x8, x0, [x0]1578    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 81579    ret i64 %r1580}1581 1582define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) {1583; CHECK-LABEL: atomicrmw_and_i64_aligned_release:1584; CHECK:    mvn x8, x11585; CHECK:    ldclrl x8, x0, [x0]1586    %r = atomicrmw and ptr %ptr, i64 %value release, align 81587    ret i64 %r1588}1589 1590define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1591; CHECK-LABEL: atomicrmw_and_i64_aligned_acq_rel:1592; CHECK:    mvn x8, x11593; CHECK:    ldclral x8, x0, [x0]1594    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 81595    ret i64 %r1596}1597 1598define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1599; CHECK-LABEL: atomicrmw_and_i64_aligned_seq_cst:1600; CHECK:    mvn x8, x11601; CHECK:    ldclral x8, x0, [x0]1602    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 81603    ret i64 %r1604}1605 1606define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) {1607; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic:1608; -O0:    and x2, x9, x111609; -O0:    and x9, x9, x101610; -O0:    casp x0, x1, x2, x3, [x8]1611; -O0:    eor x8, x10, x81612; -O0:    eor x11, x9, x111613; -O0:    orr x8, x8, x111614; -O0:    subs x8, x8, #01615;1616; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic:1617; -O1:    ldp x4, x5, [x0]1618; -O1:    and x8, x4, x21619; -O1:    and x9, x7, x31620; -O1:    casp x4, x5, x8, x9, [x0]1621; -O1:    cmp x5, x71622; -O1:    ccmp x4, x6, #0, eq1623    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 161624    ret i128 %r1625}1626 1627define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) {1628; -O0-LABEL: atomicrmw_and_i128_aligned_acquire:1629; -O0:    and x2, x9, x111630; -O0:    and x9, x9, x101631; -O0:    caspa x0, x1, x2, x3, [x8]1632; -O0:    eor x8, x10, x81633; -O0:    eor x11, x9, x111634; -O0:    orr x8, x8, x111635; -O0:    subs x8, x8, #01636;1637; -O1-LABEL: atomicrmw_and_i128_aligned_acquire:1638; -O1:    ldp x4, x5, [x0]1639; -O1:    and x8, x4, x21640; -O1:    and x9, x7, x31641; -O1:    caspa x4, x5, x8, x9, [x0]1642; -O1:    cmp x5, x71643; -O1:    ccmp x4, x6, #0, eq1644    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 161645    ret i128 %r1646}1647 1648define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) {1649; -O0-LABEL: atomicrmw_and_i128_aligned_release:1650; -O0:    and x2, x9, x111651; -O0:    and x9, x9, x101652; -O0:    caspl x0, x1, x2, x3, [x8]1653; -O0:    eor x8, x10, x81654; -O0:    eor x11, x9, x111655; -O0:    orr x8, x8, x111656; -O0:    subs x8, x8, #01657;1658; -O1-LABEL: atomicrmw_and_i128_aligned_release:1659; -O1:    ldp x4, x5, [x0]1660; -O1:    and x8, x4, x21661; -O1:    and x9, x7, x31662; -O1:    caspl x4, x5, x8, x9, [x0]1663; -O1:    cmp x5, x71664; -O1:    ccmp x4, x6, #0, eq1665    %r = atomicrmw and ptr %ptr, i128 %value release, align 161666    ret i128 %r1667}1668 1669define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1670; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel:1671; -O0:    and x2, x9, x111672; -O0:    and x9, x9, x101673; -O0:    caspal x0, x1, x2, x3, [x8]1674; -O0:    eor x8, x10, x81675; -O0:    eor x11, x9, x111676; -O0:    orr x8, x8, x111677; -O0:    subs x8, x8, #01678;1679; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel:1680; -O1:    ldp x4, x5, [x0]1681; -O1:    and x8, x4, x21682; -O1:    and x9, x7, x31683; -O1:    caspal x4, x5, x8, x9, [x0]1684; -O1:    cmp x5, x71685; -O1:    ccmp x4, x6, #0, eq1686    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 161687    ret i128 %r1688}1689 1690define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1691; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst:1692; -O0:    and x2, x9, x111693; -O0:    and x9, x9, x101694; -O0:    caspal x0, x1, x2, x3, [x8]1695; -O0:    eor x8, x10, x81696; -O0:    eor x11, x9, x111697; -O0:    orr x8, x8, x111698; -O0:    subs x8, x8, #01699;1700; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst:1701; -O1:    ldp x4, x5, [x0]1702; -O1:    and x8, x4, x21703; -O1:    and x9, x7, x31704; -O1:    caspal x4, x5, x8, x9, [x0]1705; -O1:    cmp x5, x71706; -O1:    ccmp x4, x6, #0, eq1707    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 161708    ret i128 %r1709}1710 1711define dso_local i8 @atomicrmw_and_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1712; CHECK-LABEL: atomicrmw_and_i8_unaligned_monotonic:1713; CHECK:    mvn w8, w11714; CHECK:    ldclrb w8, w0, [x0]1715    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11716    ret i8 %r1717}1718 1719define dso_local i8 @atomicrmw_and_i8_unaligned_acquire(ptr %ptr, i8 %value) {1720; CHECK-LABEL: atomicrmw_and_i8_unaligned_acquire:1721; CHECK:    mvn w8, w11722; CHECK:    ldclrab w8, w0, [x0]1723    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11724    ret i8 %r1725}1726 1727define dso_local i8 @atomicrmw_and_i8_unaligned_release(ptr %ptr, i8 %value) {1728; CHECK-LABEL: atomicrmw_and_i8_unaligned_release:1729; CHECK:    mvn w8, w11730; CHECK:    ldclrlb w8, w0, [x0]1731    %r = atomicrmw and ptr %ptr, i8 %value release, align 11732    ret i8 %r1733}1734 1735define dso_local i8 @atomicrmw_and_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1736; CHECK-LABEL: atomicrmw_and_i8_unaligned_acq_rel:1737; CHECK:    mvn w8, w11738; CHECK:    ldclralb w8, w0, [x0]1739    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11740    ret i8 %r1741}1742 1743define dso_local i8 @atomicrmw_and_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1744; CHECK-LABEL: atomicrmw_and_i8_unaligned_seq_cst:1745; CHECK:    mvn w8, w11746; CHECK:    ldclralb w8, w0, [x0]1747    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11748    ret i8 %r1749}1750 1751define dso_local i16 @atomicrmw_and_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1752; -O0-LABEL: atomicrmw_and_i16_unaligned_monotonic:1753; -O0:    and w8, w9, w81754; -O0:    bl __atomic_compare_exchange1755;1756; -O1-LABEL: atomicrmw_and_i16_unaligned_monotonic:1757; -O1:    and w8, w0, w201758; -O1:    bl __atomic_compare_exchange1759    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 11760    ret i16 %r1761}1762 1763define dso_local i16 @atomicrmw_and_i16_unaligned_acquire(ptr %ptr, i16 %value) {1764; -O0-LABEL: atomicrmw_and_i16_unaligned_acquire:1765; -O0:    and w8, w9, w81766; -O0:    bl __atomic_compare_exchange1767;1768; -O1-LABEL: atomicrmw_and_i16_unaligned_acquire:1769; -O1:    and w8, w0, w201770; -O1:    bl __atomic_compare_exchange1771    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 11772    ret i16 %r1773}1774 1775define dso_local i16 @atomicrmw_and_i16_unaligned_release(ptr %ptr, i16 %value) {1776; -O0-LABEL: atomicrmw_and_i16_unaligned_release:1777; -O0:    and w8, w9, w81778; -O0:    bl __atomic_compare_exchange1779;1780; -O1-LABEL: atomicrmw_and_i16_unaligned_release:1781; -O1:    and w8, w0, w201782; -O1:    bl __atomic_compare_exchange1783    %r = atomicrmw and ptr %ptr, i16 %value release, align 11784    ret i16 %r1785}1786 1787define dso_local i16 @atomicrmw_and_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1788; -O0-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1789; -O0:    and w8, w9, w81790; -O0:    bl __atomic_compare_exchange1791;1792; -O1-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1793; -O1:    and w8, w0, w201794; -O1:    bl __atomic_compare_exchange1795    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 11796    ret i16 %r1797}1798 1799define dso_local i16 @atomicrmw_and_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1800; -O0-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1801; -O0:    and w8, w9, w81802; -O0:    bl __atomic_compare_exchange1803;1804; -O1-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1805; -O1:    and w8, w0, w201806; -O1:    bl __atomic_compare_exchange1807    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 11808    ret i16 %r1809}1810 1811define dso_local i32 @atomicrmw_and_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1812; -O0-LABEL: atomicrmw_and_i32_unaligned_monotonic:1813; -O0:    and w8, w9, w81814; -O0:    bl __atomic_compare_exchange1815;1816; -O1-LABEL: atomicrmw_and_i32_unaligned_monotonic:1817; -O1:    and w8, w0, w201818; -O1:    bl __atomic_compare_exchange1819    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 11820    ret i32 %r1821}1822 1823define dso_local i32 @atomicrmw_and_i32_unaligned_acquire(ptr %ptr, i32 %value) {1824; -O0-LABEL: atomicrmw_and_i32_unaligned_acquire:1825; -O0:    and w8, w9, w81826; -O0:    bl __atomic_compare_exchange1827;1828; -O1-LABEL: atomicrmw_and_i32_unaligned_acquire:1829; -O1:    and w8, w0, w201830; -O1:    bl __atomic_compare_exchange1831    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 11832    ret i32 %r1833}1834 1835define dso_local i32 @atomicrmw_and_i32_unaligned_release(ptr %ptr, i32 %value) {1836; -O0-LABEL: atomicrmw_and_i32_unaligned_release:1837; -O0:    and w8, w9, w81838; -O0:    bl __atomic_compare_exchange1839;1840; -O1-LABEL: atomicrmw_and_i32_unaligned_release:1841; -O1:    and w8, w0, w201842; -O1:    bl __atomic_compare_exchange1843    %r = atomicrmw and ptr %ptr, i32 %value release, align 11844    ret i32 %r1845}1846 1847define dso_local i32 @atomicrmw_and_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1848; -O0-LABEL: atomicrmw_and_i32_unaligned_acq_rel:1849; -O0:    and w8, w9, w81850; -O0:    bl __atomic_compare_exchange1851;1852; -O1-LABEL: atomicrmw_and_i32_unaligned_acq_rel:1853; -O1:    and w8, w0, w201854; -O1:    bl __atomic_compare_exchange1855    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 11856    ret i32 %r1857}1858 1859define dso_local i32 @atomicrmw_and_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1860; -O0-LABEL: atomicrmw_and_i32_unaligned_seq_cst:1861; -O0:    and w8, w9, w81862; -O0:    bl __atomic_compare_exchange1863;1864; -O1-LABEL: atomicrmw_and_i32_unaligned_seq_cst:1865; -O1:    and w8, w0, w201866; -O1:    bl __atomic_compare_exchange1867    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 11868    ret i32 %r1869}1870 1871define dso_local i64 @atomicrmw_and_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1872; -O0-LABEL: atomicrmw_and_i64_unaligned_monotonic:1873; -O0:    and x8, x9, x81874; -O0:    bl __atomic_compare_exchange1875;1876; -O1-LABEL: atomicrmw_and_i64_unaligned_monotonic:1877; -O1:    and x8, x0, x201878; -O1:    bl __atomic_compare_exchange1879    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 11880    ret i64 %r1881}1882 1883define dso_local i64 @atomicrmw_and_i64_unaligned_acquire(ptr %ptr, i64 %value) {1884; -O0-LABEL: atomicrmw_and_i64_unaligned_acquire:1885; -O0:    and x8, x9, x81886; -O0:    bl __atomic_compare_exchange1887;1888; -O1-LABEL: atomicrmw_and_i64_unaligned_acquire:1889; -O1:    and x8, x0, x201890; -O1:    bl __atomic_compare_exchange1891    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 11892    ret i64 %r1893}1894 1895define dso_local i64 @atomicrmw_and_i64_unaligned_release(ptr %ptr, i64 %value) {1896; -O0-LABEL: atomicrmw_and_i64_unaligned_release:1897; -O0:    and x8, x9, x81898; -O0:    bl __atomic_compare_exchange1899;1900; -O1-LABEL: atomicrmw_and_i64_unaligned_release:1901; -O1:    and x8, x0, x201902; -O1:    bl __atomic_compare_exchange1903    %r = atomicrmw and ptr %ptr, i64 %value release, align 11904    ret i64 %r1905}1906 1907define dso_local i64 @atomicrmw_and_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1908; -O0-LABEL: atomicrmw_and_i64_unaligned_acq_rel:1909; -O0:    and x8, x9, x81910; -O0:    bl __atomic_compare_exchange1911;1912; -O1-LABEL: atomicrmw_and_i64_unaligned_acq_rel:1913; -O1:    and x8, x0, x201914; -O1:    bl __atomic_compare_exchange1915    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 11916    ret i64 %r1917}1918 1919define dso_local i64 @atomicrmw_and_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1920; -O0-LABEL: atomicrmw_and_i64_unaligned_seq_cst:1921; -O0:    and x8, x9, x81922; -O0:    bl __atomic_compare_exchange1923;1924; -O1-LABEL: atomicrmw_and_i64_unaligned_seq_cst:1925; -O1:    and x8, x0, x201926; -O1:    bl __atomic_compare_exchange1927    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 11928    ret i64 %r1929}1930 1931define dso_local i128 @atomicrmw_and_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1932; -O0-LABEL: atomicrmw_and_i128_unaligned_monotonic:1933; -O0:    and x9, x8, x91934; -O0:    and x8, x8, x101935; -O0:    bl __atomic_compare_exchange1936;1937; -O1-LABEL: atomicrmw_and_i128_unaligned_monotonic:1938; -O1:    ldp x0, x1, [x0]1939; -O1:    and x8, x1, x191940; -O1:    and x9, x0, x211941; -O1:    bl __atomic_compare_exchange1942    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 11943    ret i128 %r1944}1945 1946define dso_local i128 @atomicrmw_and_i128_unaligned_acquire(ptr %ptr, i128 %value) {1947; -O0-LABEL: atomicrmw_and_i128_unaligned_acquire:1948; -O0:    and x9, x8, x91949; -O0:    and x8, x8, x101950; -O0:    bl __atomic_compare_exchange1951;1952; -O1-LABEL: atomicrmw_and_i128_unaligned_acquire:1953; -O1:    ldp x0, x1, [x0]1954; -O1:    and x8, x1, x191955; -O1:    and x9, x0, x211956; -O1:    bl __atomic_compare_exchange1957    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 11958    ret i128 %r1959}1960 1961define dso_local i128 @atomicrmw_and_i128_unaligned_release(ptr %ptr, i128 %value) {1962; -O0-LABEL: atomicrmw_and_i128_unaligned_release:1963; -O0:    and x9, x8, x91964; -O0:    and x8, x8, x101965; -O0:    bl __atomic_compare_exchange1966;1967; -O1-LABEL: atomicrmw_and_i128_unaligned_release:1968; -O1:    ldp x0, x1, [x0]1969; -O1:    and x8, x1, x191970; -O1:    and x9, x0, x211971; -O1:    bl __atomic_compare_exchange1972    %r = atomicrmw and ptr %ptr, i128 %value release, align 11973    ret i128 %r1974}1975 1976define dso_local i128 @atomicrmw_and_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1977; -O0-LABEL: atomicrmw_and_i128_unaligned_acq_rel:1978; -O0:    and x9, x8, x91979; -O0:    and x8, x8, x101980; -O0:    bl __atomic_compare_exchange1981;1982; -O1-LABEL: atomicrmw_and_i128_unaligned_acq_rel:1983; -O1:    ldp x0, x1, [x0]1984; -O1:    and x8, x1, x191985; -O1:    and x9, x0, x211986; -O1:    bl __atomic_compare_exchange1987    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 11988    ret i128 %r1989}1990 1991define dso_local i128 @atomicrmw_and_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1992; -O0-LABEL: atomicrmw_and_i128_unaligned_seq_cst:1993; -O0:    and x9, x8, x91994; -O0:    and x8, x8, x101995; -O0:    bl __atomic_compare_exchange1996;1997; -O1-LABEL: atomicrmw_and_i128_unaligned_seq_cst:1998; -O1:    ldp x0, x1, [x0]1999; -O1:    and x8, x1, x192000; -O1:    and x9, x0, x212001; -O1:    bl __atomic_compare_exchange2002    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 12003    ret i128 %r2004}2005 2006define dso_local i8 @atomicrmw_nand_i8_aligned_monotonic(ptr %ptr, i8 %value) {2007; -O0-LABEL: atomicrmw_nand_i8_aligned_monotonic:2008; -O0:    and w8, w10, w82009; -O0:    mvn w8, w82010; -O0:    casb w9, w8, [x11]2011; -O0:    and w8, w9, #0xff2012; -O0:    subs w8, w8, w10, uxtb2013;2014; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic:2015; -O1:    and w10, w8, w12016; -O1:    mvn w10, w102017; -O1:    casb w9, w10, [x0]2018; -O1:    cmp w9, w8, uxtb2019    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12020    ret i8 %r2021}2022 2023define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) {2024; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire:2025; -O0:    and w8, w10, w82026; -O0:    mvn w8, w82027; -O0:    casab w9, w8, [x11]2028; -O0:    and w8, w9, #0xff2029; -O0:    subs w8, w8, w10, uxtb2030;2031; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire:2032; -O1:    and w10, w8, w12033; -O1:    mvn w10, w102034; -O1:    casab w9, w10, [x0]2035; -O1:    cmp w9, w8, uxtb2036    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12037    ret i8 %r2038}2039 2040define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) {2041; -O0-LABEL: atomicrmw_nand_i8_aligned_release:2042; -O0:    and w8, w10, w82043; -O0:    mvn w8, w82044; -O0:    caslb w9, w8, [x11]2045; -O0:    and w8, w9, #0xff2046; -O0:    subs w8, w8, w10, uxtb2047;2048; -O1-LABEL: atomicrmw_nand_i8_aligned_release:2049; -O1:    and w10, w8, w12050; -O1:    mvn w10, w102051; -O1:    caslb w9, w10, [x0]2052; -O1:    cmp w9, w8, uxtb2053    %r = atomicrmw nand ptr %ptr, i8 %value release, align 12054    ret i8 %r2055}2056 2057define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2058; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2059; -O0:    and w8, w10, w82060; -O0:    mvn w8, w82061; -O0:    casalb w9, w8, [x11]2062; -O0:    and w8, w9, #0xff2063; -O0:    subs w8, w8, w10, uxtb2064;2065; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2066; -O1:    and w10, w8, w12067; -O1:    mvn w10, w102068; -O1:    casalb w9, w10, [x0]2069; -O1:    cmp w9, w8, uxtb2070    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12071    ret i8 %r2072}2073 2074define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2075; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2076; -O0:    and w8, w10, w82077; -O0:    mvn w8, w82078; -O0:    casalb w9, w8, [x11]2079; -O0:    and w8, w9, #0xff2080; -O0:    subs w8, w8, w10, uxtb2081;2082; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2083; -O1:    and w10, w8, w12084; -O1:    mvn w10, w102085; -O1:    casalb w9, w10, [x0]2086; -O1:    cmp w9, w8, uxtb2087    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12088    ret i8 %r2089}2090 2091define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) {2092; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic:2093; -O0:    and w9, w8, w92094; -O0:    mvn w10, w92095; -O0:    cash w9, w10, [x11]2096; -O0:    subs w8, w8, w9, uxth2097;2098; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic:2099; -O1:    and w10, w8, w12100; -O1:    mvn w10, w102101; -O1:    cash w9, w10, [x0]2102; -O1:    cmp w9, w8, uxth2103    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 22104    ret i16 %r2105}2106 2107define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) {2108; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire:2109; -O0:    and w9, w8, w92110; -O0:    mvn w10, w92111; -O0:    casah w9, w10, [x11]2112; -O0:    subs w8, w8, w9, uxth2113;2114; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire:2115; -O1:    and w10, w8, w12116; -O1:    mvn w10, w102117; -O1:    casah w9, w10, [x0]2118; -O1:    cmp w9, w8, uxth2119    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 22120    ret i16 %r2121}2122 2123define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) {2124; -O0-LABEL: atomicrmw_nand_i16_aligned_release:2125; -O0:    and w9, w8, w92126; -O0:    mvn w10, w92127; -O0:    caslh w9, w10, [x11]2128; -O0:    subs w8, w8, w9, uxth2129;2130; -O1-LABEL: atomicrmw_nand_i16_aligned_release:2131; -O1:    and w10, w8, w12132; -O1:    mvn w10, w102133; -O1:    caslh w9, w10, [x0]2134; -O1:    cmp w9, w8, uxth2135    %r = atomicrmw nand ptr %ptr, i16 %value release, align 22136    ret i16 %r2137}2138 2139define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2140; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2141; -O0:    and w9, w8, w92142; -O0:    mvn w10, w92143; -O0:    casalh w9, w10, [x11]2144; -O0:    subs w8, w8, w9, uxth2145;2146; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2147; -O1:    and w10, w8, w12148; -O1:    mvn w10, w102149; -O1:    casalh w9, w10, [x0]2150; -O1:    cmp w9, w8, uxth2151    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 22152    ret i16 %r2153}2154 2155define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2156; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2157; -O0:    and w9, w8, w92158; -O0:    mvn w10, w92159; -O0:    casalh w9, w10, [x11]2160; -O0:    subs w8, w8, w9, uxth2161;2162; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2163; -O1:    and w10, w8, w12164; -O1:    mvn w10, w102165; -O1:    casalh w9, w10, [x0]2166; -O1:    cmp w9, w8, uxth2167    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 22168    ret i16 %r2169}2170 2171define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) {2172; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic:2173; -O0:    and w9, w8, w92174; -O0:    mvn w10, w92175; -O0:    cas w9, w10, [x11]2176; -O0:    subs w8, w9, w82177;2178; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic:2179; -O1:    and w10, w8, w12180; -O1:    mvn w10, w102181; -O1:    cas w9, w10, [x0]2182; -O1:    cmp w9, w82183    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 42184    ret i32 %r2185}2186 2187define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) {2188; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire:2189; -O0:    and w9, w8, w92190; -O0:    mvn w10, w92191; -O0:    casa w9, w10, [x11]2192; -O0:    subs w8, w9, w82193;2194; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire:2195; -O1:    and w10, w8, w12196; -O1:    mvn w10, w102197; -O1:    casa w9, w10, [x0]2198; -O1:    cmp w9, w82199    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 42200    ret i32 %r2201}2202 2203define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) {2204; -O0-LABEL: atomicrmw_nand_i32_aligned_release:2205; -O0:    and w9, w8, w92206; -O0:    mvn w10, w92207; -O0:    casl w9, w10, [x11]2208; -O0:    subs w8, w9, w82209;2210; -O1-LABEL: atomicrmw_nand_i32_aligned_release:2211; -O1:    and w10, w8, w12212; -O1:    mvn w10, w102213; -O1:    casl w9, w10, [x0]2214; -O1:    cmp w9, w82215    %r = atomicrmw nand ptr %ptr, i32 %value release, align 42216    ret i32 %r2217}2218 2219define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2220; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2221; -O0:    and w9, w8, w92222; -O0:    mvn w10, w92223; -O0:    casal w9, w10, [x11]2224; -O0:    subs w8, w9, w82225;2226; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2227; -O1:    and w10, w8, w12228; -O1:    mvn w10, w102229; -O1:    casal w9, w10, [x0]2230; -O1:    cmp w9, w82231    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 42232    ret i32 %r2233}2234 2235define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2236; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2237; -O0:    and w9, w8, w92238; -O0:    mvn w10, w92239; -O0:    casal w9, w10, [x11]2240; -O0:    subs w8, w9, w82241;2242; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2243; -O1:    and w10, w8, w12244; -O1:    mvn w10, w102245; -O1:    casal w9, w10, [x0]2246; -O1:    cmp w9, w82247    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 42248    ret i32 %r2249}2250 2251define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) {2252; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic:2253; -O0:    and x9, x8, x92254; -O0:    mvn x10, x92255; -O0:    cas x9, x10, [x11]2256; -O0:    subs x8, x9, x82257;2258; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic:2259; -O1:    and x10, x8, x12260; -O1:    mvn x10, x102261; -O1:    cas x9, x10, [x0]2262; -O1:    cmp x9, x82263    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 82264    ret i64 %r2265}2266 2267define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) {2268; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire:2269; -O0:    and x9, x8, x92270; -O0:    mvn x10, x92271; -O0:    casa x9, x10, [x11]2272; -O0:    subs x8, x9, x82273;2274; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire:2275; -O1:    and x10, x8, x12276; -O1:    mvn x10, x102277; -O1:    casa x9, x10, [x0]2278; -O1:    cmp x9, x82279    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 82280    ret i64 %r2281}2282 2283define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) {2284; -O0-LABEL: atomicrmw_nand_i64_aligned_release:2285; -O0:    and x9, x8, x92286; -O0:    mvn x10, x92287; -O0:    casl x9, x10, [x11]2288; -O0:    subs x8, x9, x82289;2290; -O1-LABEL: atomicrmw_nand_i64_aligned_release:2291; -O1:    and x10, x8, x12292; -O1:    mvn x10, x102293; -O1:    casl x9, x10, [x0]2294; -O1:    cmp x9, x82295    %r = atomicrmw nand ptr %ptr, i64 %value release, align 82296    ret i64 %r2297}2298 2299define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2300; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2301; -O0:    and x9, x8, x92302; -O0:    mvn x10, x92303; -O0:    casal x9, x10, [x11]2304; -O0:    subs x8, x9, x82305;2306; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2307; -O1:    and x10, x8, x12308; -O1:    mvn x10, x102309; -O1:    casal x9, x10, [x0]2310; -O1:    cmp x9, x82311    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 82312    ret i64 %r2313}2314 2315define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2316; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2317; -O0:    and x9, x8, x92318; -O0:    mvn x10, x92319; -O0:    casal x9, x10, [x11]2320; -O0:    subs x8, x9, x82321;2322; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2323; -O1:    and x10, x8, x12324; -O1:    mvn x10, x102325; -O1:    casal x9, x10, [x0]2326; -O1:    cmp x9, x82327    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 82328    ret i64 %r2329}2330 2331define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) {2332; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic:2333; -O0:    and x10, x9, x102334; -O0:    and x9, x9, x112335; -O0:    mvn x2, x102336; -O0:    mvn x9, x92337; -O0:    casp x0, x1, x2, x3, [x8]2338; -O0:    eor x8, x10, x82339; -O0:    eor x11, x9, x112340; -O0:    orr x8, x8, x112341; -O0:    subs x8, x8, #02342;2343; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic:2344; -O1:    ldp x4, x5, [x0]2345; -O1:    and x8, x4, x22346; -O1:    and x9, x7, x32347; -O1:    mvn x10, x82348; -O1:    mvn x11, x92349; -O1:    casp x4, x5, x10, x11, [x0]2350; -O1:    cmp x5, x72351; -O1:    ccmp x4, x6, #0, eq2352    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 162353    ret i128 %r2354}2355 2356define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) {2357; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire:2358; -O0:    and x10, x9, x102359; -O0:    and x9, x9, x112360; -O0:    mvn x2, x102361; -O0:    mvn x9, x92362; -O0:    caspa x0, x1, x2, x3, [x8]2363; -O0:    eor x8, x10, x82364; -O0:    eor x11, x9, x112365; -O0:    orr x8, x8, x112366; -O0:    subs x8, x8, #02367;2368; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire:2369; -O1:    ldp x4, x5, [x0]2370; -O1:    and x8, x4, x22371; -O1:    and x9, x7, x32372; -O1:    mvn x10, x82373; -O1:    mvn x11, x92374; -O1:    caspa x4, x5, x10, x11, [x0]2375; -O1:    cmp x5, x72376; -O1:    ccmp x4, x6, #0, eq2377    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 162378    ret i128 %r2379}2380 2381define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) {2382; -O0-LABEL: atomicrmw_nand_i128_aligned_release:2383; -O0:    and x10, x9, x102384; -O0:    and x9, x9, x112385; -O0:    mvn x2, x102386; -O0:    mvn x9, x92387; -O0:    caspl x0, x1, x2, x3, [x8]2388; -O0:    eor x8, x10, x82389; -O0:    eor x11, x9, x112390; -O0:    orr x8, x8, x112391; -O0:    subs x8, x8, #02392;2393; -O1-LABEL: atomicrmw_nand_i128_aligned_release:2394; -O1:    ldp x4, x5, [x0]2395; -O1:    and x8, x4, x22396; -O1:    and x9, x7, x32397; -O1:    mvn x10, x82398; -O1:    mvn x11, x92399; -O1:    caspl x4, x5, x10, x11, [x0]2400; -O1:    cmp x5, x72401; -O1:    ccmp x4, x6, #0, eq2402    %r = atomicrmw nand ptr %ptr, i128 %value release, align 162403    ret i128 %r2404}2405 2406define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2407; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2408; -O0:    and x10, x9, x102409; -O0:    and x9, x9, x112410; -O0:    mvn x2, x102411; -O0:    mvn x9, x92412; -O0:    caspal x0, x1, x2, x3, [x8]2413; -O0:    eor x8, x10, x82414; -O0:    eor x11, x9, x112415; -O0:    orr x8, x8, x112416; -O0:    subs x8, x8, #02417;2418; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2419; -O1:    ldp x4, x5, [x0]2420; -O1:    and x8, x4, x22421; -O1:    and x9, x7, x32422; -O1:    mvn x10, x82423; -O1:    mvn x11, x92424; -O1:    caspal x4, x5, x10, x11, [x0]2425; -O1:    cmp x5, x72426; -O1:    ccmp x4, x6, #0, eq2427    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 162428    ret i128 %r2429}2430 2431define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) {2432; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2433; -O0:    and x10, x9, x102434; -O0:    and x9, x9, x112435; -O0:    mvn x2, x102436; -O0:    mvn x9, x92437; -O0:    caspal x0, x1, x2, x3, [x8]2438; -O0:    eor x8, x10, x82439; -O0:    eor x11, x9, x112440; -O0:    orr x8, x8, x112441; -O0:    subs x8, x8, #02442;2443; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2444; -O1:    ldp x4, x5, [x0]2445; -O1:    and x8, x4, x22446; -O1:    and x9, x7, x32447; -O1:    mvn x10, x82448; -O1:    mvn x11, x92449; -O1:    caspal x4, x5, x10, x11, [x0]2450; -O1:    cmp x5, x72451; -O1:    ccmp x4, x6, #0, eq2452    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 162453    ret i128 %r2454}2455 2456define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) {2457; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2458; -O0:    and w8, w10, w82459; -O0:    mvn w8, w82460; -O0:    casb w9, w8, [x11]2461; -O0:    and w8, w9, #0xff2462; -O0:    subs w8, w8, w10, uxtb2463;2464; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2465; -O1:    and w10, w8, w12466; -O1:    mvn w10, w102467; -O1:    casb w9, w10, [x0]2468; -O1:    cmp w9, w8, uxtb2469    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12470    ret i8 %r2471}2472 2473define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) {2474; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire:2475; -O0:    and w8, w10, w82476; -O0:    mvn w8, w82477; -O0:    casab w9, w8, [x11]2478; -O0:    and w8, w9, #0xff2479; -O0:    subs w8, w8, w10, uxtb2480;2481; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire:2482; -O1:    and w10, w8, w12483; -O1:    mvn w10, w102484; -O1:    casab w9, w10, [x0]2485; -O1:    cmp w9, w8, uxtb2486    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12487    ret i8 %r2488}2489 2490define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) {2491; -O0-LABEL: atomicrmw_nand_i8_unaligned_release:2492; -O0:    and w8, w10, w82493; -O0:    mvn w8, w82494; -O0:    caslb w9, w8, [x11]2495; -O0:    and w8, w9, #0xff2496; -O0:    subs w8, w8, w10, uxtb2497;2498; -O1-LABEL: atomicrmw_nand_i8_unaligned_release:2499; -O1:    and w10, w8, w12500; -O1:    mvn w10, w102501; -O1:    caslb w9, w10, [x0]2502; -O1:    cmp w9, w8, uxtb2503    %r = atomicrmw nand ptr %ptr, i8 %value release, align 12504    ret i8 %r2505}2506 2507define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {2508; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2509; -O0:    and w8, w10, w82510; -O0:    mvn w8, w82511; -O0:    casalb w9, w8, [x11]2512; -O0:    and w8, w9, #0xff2513; -O0:    subs w8, w8, w10, uxtb2514;2515; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2516; -O1:    and w10, w8, w12517; -O1:    mvn w10, w102518; -O1:    casalb w9, w10, [x0]2519; -O1:    cmp w9, w8, uxtb2520    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12521    ret i8 %r2522}2523 2524define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {2525; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2526; -O0:    and w8, w10, w82527; -O0:    mvn w8, w82528; -O0:    casalb w9, w8, [x11]2529; -O0:    and w8, w9, #0xff2530; -O0:    subs w8, w8, w10, uxtb2531;2532; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2533; -O1:    and w10, w8, w12534; -O1:    mvn w10, w102535; -O1:    casalb w9, w10, [x0]2536; -O1:    cmp w9, w8, uxtb2537    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12538    ret i8 %r2539}2540 2541define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) {2542; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2543; -O0:    and w8, w9, w82544; -O0:    mvn w8, w82545; -O0:    bl __atomic_compare_exchange2546;2547; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2548; -O1:    and w8, w0, w202549; -O1:    mvn w8, w82550; -O1:    bl __atomic_compare_exchange2551    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 12552    ret i16 %r2553}2554 2555define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) {2556; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire:2557; -O0:    and w8, w9, w82558; -O0:    mvn w8, w82559; -O0:    bl __atomic_compare_exchange2560;2561; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire:2562; -O1:    and w8, w0, w202563; -O1:    mvn w8, w82564; -O1:    bl __atomic_compare_exchange2565    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 12566    ret i16 %r2567}2568 2569define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) {2570; -O0-LABEL: atomicrmw_nand_i16_unaligned_release:2571; -O0:    and w8, w9, w82572; -O0:    mvn w8, w82573; -O0:    bl __atomic_compare_exchange2574;2575; -O1-LABEL: atomicrmw_nand_i16_unaligned_release:2576; -O1:    and w8, w0, w202577; -O1:    mvn w8, w82578; -O1:    bl __atomic_compare_exchange2579    %r = atomicrmw nand ptr %ptr, i16 %value release, align 12580    ret i16 %r2581}2582 2583define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {2584; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2585; -O0:    and w8, w9, w82586; -O0:    mvn w8, w82587; -O0:    bl __atomic_compare_exchange2588;2589; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2590; -O1:    and w8, w0, w202591; -O1:    mvn w8, w82592; -O1:    bl __atomic_compare_exchange2593    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 12594    ret i16 %r2595}2596 2597define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {2598; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2599; -O0:    and w8, w9, w82600; -O0:    mvn w8, w82601; -O0:    bl __atomic_compare_exchange2602;2603; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2604; -O1:    and w8, w0, w202605; -O1:    mvn w8, w82606; -O1:    bl __atomic_compare_exchange2607    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 12608    ret i16 %r2609}2610 2611define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) {2612; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2613; -O0:    and w8, w9, w82614; -O0:    mvn w8, w82615; -O0:    bl __atomic_compare_exchange2616;2617; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2618; -O1:    and w8, w0, w202619; -O1:    mvn w8, w82620; -O1:    bl __atomic_compare_exchange2621    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 12622    ret i32 %r2623}2624 2625define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) {2626; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire:2627; -O0:    and w8, w9, w82628; -O0:    mvn w8, w82629; -O0:    bl __atomic_compare_exchange2630;2631; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire:2632; -O1:    and w8, w0, w202633; -O1:    mvn w8, w82634; -O1:    bl __atomic_compare_exchange2635    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 12636    ret i32 %r2637}2638 2639define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) {2640; -O0-LABEL: atomicrmw_nand_i32_unaligned_release:2641; -O0:    and w8, w9, w82642; -O0:    mvn w8, w82643; -O0:    bl __atomic_compare_exchange2644;2645; -O1-LABEL: atomicrmw_nand_i32_unaligned_release:2646; -O1:    and w8, w0, w202647; -O1:    mvn w8, w82648; -O1:    bl __atomic_compare_exchange2649    %r = atomicrmw nand ptr %ptr, i32 %value release, align 12650    ret i32 %r2651}2652 2653define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {2654; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2655; -O0:    and w8, w9, w82656; -O0:    mvn w8, w82657; -O0:    bl __atomic_compare_exchange2658;2659; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2660; -O1:    and w8, w0, w202661; -O1:    mvn w8, w82662; -O1:    bl __atomic_compare_exchange2663    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 12664    ret i32 %r2665}2666 2667define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {2668; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2669; -O0:    and w8, w9, w82670; -O0:    mvn w8, w82671; -O0:    bl __atomic_compare_exchange2672;2673; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2674; -O1:    and w8, w0, w202675; -O1:    mvn w8, w82676; -O1:    bl __atomic_compare_exchange2677    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 12678    ret i32 %r2679}2680 2681define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2682; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2683; -O0:    and x8, x9, x82684; -O0:    mvn x8, x82685; -O0:    bl __atomic_compare_exchange2686;2687; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2688; -O1:    and x8, x0, x202689; -O1:    mvn x8, x82690; -O1:    bl __atomic_compare_exchange2691    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 12692    ret i64 %r2693}2694 2695define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) {2696; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire:2697; -O0:    and x8, x9, x82698; -O0:    mvn x8, x82699; -O0:    bl __atomic_compare_exchange2700;2701; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire:2702; -O1:    and x8, x0, x202703; -O1:    mvn x8, x82704; -O1:    bl __atomic_compare_exchange2705    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 12706    ret i64 %r2707}2708 2709define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) {2710; -O0-LABEL: atomicrmw_nand_i64_unaligned_release:2711; -O0:    and x8, x9, x82712; -O0:    mvn x8, x82713; -O0:    bl __atomic_compare_exchange2714;2715; -O1-LABEL: atomicrmw_nand_i64_unaligned_release:2716; -O1:    and x8, x0, x202717; -O1:    mvn x8, x82718; -O1:    bl __atomic_compare_exchange2719    %r = atomicrmw nand ptr %ptr, i64 %value release, align 12720    ret i64 %r2721}2722 2723define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2724; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2725; -O0:    and x8, x9, x82726; -O0:    mvn x8, x82727; -O0:    bl __atomic_compare_exchange2728;2729; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2730; -O1:    and x8, x0, x202731; -O1:    mvn x8, x82732; -O1:    bl __atomic_compare_exchange2733    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 12734    ret i64 %r2735}2736 2737define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2738; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2739; -O0:    and x8, x9, x82740; -O0:    mvn x8, x82741; -O0:    bl __atomic_compare_exchange2742;2743; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2744; -O1:    and x8, x0, x202745; -O1:    mvn x8, x82746; -O1:    bl __atomic_compare_exchange2747    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 12748    ret i64 %r2749}2750 2751define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2752; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2753; -O0:    and x9, x8, x92754; -O0:    and x8, x8, x102755; -O0:    mvn x9, x92756; -O0:    mvn x8, x82757; -O0:    bl __atomic_compare_exchange2758;2759; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2760; -O1:    ldp x0, x1, [x0]2761; -O1:    and x8, x1, x192762; -O1:    and x9, x0, x212763; -O1:    mvn x8, x82764; -O1:    mvn x9, x92765; -O1:    bl __atomic_compare_exchange2766    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 12767    ret i128 %r2768}2769 2770define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) {2771; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire:2772; -O0:    and x9, x8, x92773; -O0:    and x8, x8, x102774; -O0:    mvn x9, x92775; -O0:    mvn x8, x82776; -O0:    bl __atomic_compare_exchange2777;2778; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire:2779; -O1:    ldp x0, x1, [x0]2780; -O1:    and x8, x1, x192781; -O1:    and x9, x0, x212782; -O1:    mvn x8, x82783; -O1:    mvn x9, x92784; -O1:    bl __atomic_compare_exchange2785    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 12786    ret i128 %r2787}2788 2789define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) {2790; -O0-LABEL: atomicrmw_nand_i128_unaligned_release:2791; -O0:    and x9, x8, x92792; -O0:    and x8, x8, x102793; -O0:    mvn x9, x92794; -O0:    mvn x8, x82795; -O0:    bl __atomic_compare_exchange2796;2797; -O1-LABEL: atomicrmw_nand_i128_unaligned_release:2798; -O1:    ldp x0, x1, [x0]2799; -O1:    and x8, x1, x192800; -O1:    and x9, x0, x212801; -O1:    mvn x8, x82802; -O1:    mvn x9, x92803; -O1:    bl __atomic_compare_exchange2804    %r = atomicrmw nand ptr %ptr, i128 %value release, align 12805    ret i128 %r2806}2807 2808define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2809; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2810; -O0:    and x9, x8, x92811; -O0:    and x8, x8, x102812; -O0:    mvn x9, x92813; -O0:    mvn x8, x82814; -O0:    bl __atomic_compare_exchange2815;2816; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2817; -O1:    ldp x0, x1, [x0]2818; -O1:    and x8, x1, x192819; -O1:    and x9, x0, x212820; -O1:    mvn x8, x82821; -O1:    mvn x9, x92822; -O1:    bl __atomic_compare_exchange2823    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 12824    ret i128 %r2825}2826 2827define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2828; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2829; -O0:    and x9, x8, x92830; -O0:    and x8, x8, x102831; -O0:    mvn x9, x92832; -O0:    mvn x8, x82833; -O0:    bl __atomic_compare_exchange2834;2835; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2836; -O1:    ldp x0, x1, [x0]2837; -O1:    and x8, x1, x192838; -O1:    and x9, x0, x212839; -O1:    mvn x8, x82840; -O1:    mvn x9, x92841; -O1:    bl __atomic_compare_exchange2842    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 12843    ret i128 %r2844}2845 2846define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) {2847; CHECK-LABEL: atomicrmw_or_i8_aligned_monotonic:2848; CHECK:    ldsetb w1, w0, [x0]2849    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 12850    ret i8 %r2851}2852 2853define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) {2854; CHECK-LABEL: atomicrmw_or_i8_aligned_acquire:2855; CHECK:    ldsetab w1, w0, [x0]2856    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 12857    ret i8 %r2858}2859 2860define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) {2861; CHECK-LABEL: atomicrmw_or_i8_aligned_release:2862; CHECK:    ldsetlb w1, w0, [x0]2863    %r = atomicrmw or ptr %ptr, i8 %value release, align 12864    ret i8 %r2865}2866 2867define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2868; CHECK-LABEL: atomicrmw_or_i8_aligned_acq_rel:2869; CHECK:    ldsetalb w1, w0, [x0]2870    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 12871    ret i8 %r2872}2873 2874define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2875; CHECK-LABEL: atomicrmw_or_i8_aligned_seq_cst:2876; CHECK:    ldsetalb w1, w0, [x0]2877    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 12878    ret i8 %r2879}2880 2881define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) {2882; CHECK-LABEL: atomicrmw_or_i16_aligned_monotonic:2883; CHECK:    ldseth w1, w0, [x0]2884    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 22885    ret i16 %r2886}2887 2888define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) {2889; CHECK-LABEL: atomicrmw_or_i16_aligned_acquire:2890; CHECK:    ldsetah w1, w0, [x0]2891    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 22892    ret i16 %r2893}2894 2895define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) {2896; CHECK-LABEL: atomicrmw_or_i16_aligned_release:2897; CHECK:    ldsetlh w1, w0, [x0]2898    %r = atomicrmw or ptr %ptr, i16 %value release, align 22899    ret i16 %r2900}2901 2902define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2903; CHECK-LABEL: atomicrmw_or_i16_aligned_acq_rel:2904; CHECK:    ldsetalh w1, w0, [x0]2905    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 22906    ret i16 %r2907}2908 2909define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2910; CHECK-LABEL: atomicrmw_or_i16_aligned_seq_cst:2911; CHECK:    ldsetalh w1, w0, [x0]2912    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 22913    ret i16 %r2914}2915 2916define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) {2917; CHECK-LABEL: atomicrmw_or_i32_aligned_monotonic:2918; CHECK:    ldset w1, w0, [x0]2919    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 42920    ret i32 %r2921}2922 2923define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) {2924; CHECK-LABEL: atomicrmw_or_i32_aligned_acquire:2925; CHECK:    ldseta w1, w0, [x0]2926    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 42927    ret i32 %r2928}2929 2930define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) {2931; CHECK-LABEL: atomicrmw_or_i32_aligned_release:2932; CHECK:    ldsetl w1, w0, [x0]2933    %r = atomicrmw or ptr %ptr, i32 %value release, align 42934    ret i32 %r2935}2936 2937define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2938; CHECK-LABEL: atomicrmw_or_i32_aligned_acq_rel:2939; CHECK:    ldsetal w1, w0, [x0]2940    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 42941    ret i32 %r2942}2943 2944define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2945; CHECK-LABEL: atomicrmw_or_i32_aligned_seq_cst:2946; CHECK:    ldsetal w1, w0, [x0]2947    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 42948    ret i32 %r2949}2950 2951define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) {2952; CHECK-LABEL: atomicrmw_or_i64_aligned_monotonic:2953; CHECK:    ldset x1, x0, [x0]2954    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 82955    ret i64 %r2956}2957 2958define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) {2959; CHECK-LABEL: atomicrmw_or_i64_aligned_acquire:2960; CHECK:    ldseta x1, x0, [x0]2961    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 82962    ret i64 %r2963}2964 2965define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) {2966; CHECK-LABEL: atomicrmw_or_i64_aligned_release:2967; CHECK:    ldsetl x1, x0, [x0]2968    %r = atomicrmw or ptr %ptr, i64 %value release, align 82969    ret i64 %r2970}2971 2972define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2973; CHECK-LABEL: atomicrmw_or_i64_aligned_acq_rel:2974; CHECK:    ldsetal x1, x0, [x0]2975    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 82976    ret i64 %r2977}2978 2979define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2980; CHECK-LABEL: atomicrmw_or_i64_aligned_seq_cst:2981; CHECK:    ldsetal x1, x0, [x0]2982    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 82983    ret i64 %r2984}2985 2986define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) {2987; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic:2988; -O0:    orr x2, x9, x112989; -O0:    orr x9, x9, x102990; -O0:    casp x0, x1, x2, x3, [x8]2991; -O0:    eor x8, x10, x82992; -O0:    eor x11, x9, x112993; -O0:    orr x8, x8, x112994; -O0:    subs x8, x8, #02995;2996; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic:2997; -O1:    ldp x4, x5, [x0]2998; -O1:    orr x8, x4, x22999; -O1:    orr x9, x7, x33000; -O1:    casp x4, x5, x8, x9, [x0]3001; -O1:    cmp x5, x73002; -O1:    ccmp x4, x6, #0, eq3003    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 163004    ret i128 %r3005}3006 3007define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) {3008; -O0-LABEL: atomicrmw_or_i128_aligned_acquire:3009; -O0:    orr x2, x9, x113010; -O0:    orr x9, x9, x103011; -O0:    caspa x0, x1, x2, x3, [x8]3012; -O0:    eor x8, x10, x83013; -O0:    eor x11, x9, x113014; -O0:    orr x8, x8, x113015; -O0:    subs x8, x8, #03016;3017; -O1-LABEL: atomicrmw_or_i128_aligned_acquire:3018; -O1:    ldp x4, x5, [x0]3019; -O1:    orr x8, x4, x23020; -O1:    orr x9, x7, x33021; -O1:    caspa x4, x5, x8, x9, [x0]3022; -O1:    cmp x5, x73023; -O1:    ccmp x4, x6, #0, eq3024    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 163025    ret i128 %r3026}3027 3028define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) {3029; -O0-LABEL: atomicrmw_or_i128_aligned_release:3030; -O0:    orr x2, x9, x113031; -O0:    orr x9, x9, x103032; -O0:    caspl x0, x1, x2, x3, [x8]3033; -O0:    eor x8, x10, x83034; -O0:    eor x11, x9, x113035; -O0:    orr x8, x8, x113036; -O0:    subs x8, x8, #03037;3038; -O1-LABEL: atomicrmw_or_i128_aligned_release:3039; -O1:    ldp x4, x5, [x0]3040; -O1:    orr x8, x4, x23041; -O1:    orr x9, x7, x33042; -O1:    caspl x4, x5, x8, x9, [x0]3043; -O1:    cmp x5, x73044; -O1:    ccmp x4, x6, #0, eq3045    %r = atomicrmw or ptr %ptr, i128 %value release, align 163046    ret i128 %r3047}3048 3049define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3050; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel:3051; -O0:    orr x2, x9, x113052; -O0:    orr x9, x9, x103053; -O0:    caspal x0, x1, x2, x3, [x8]3054; -O0:    eor x8, x10, x83055; -O0:    eor x11, x9, x113056; -O0:    orr x8, x8, x113057; -O0:    subs x8, x8, #03058;3059; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel:3060; -O1:    ldp x4, x5, [x0]3061; -O1:    orr x8, x4, x23062; -O1:    orr x9, x7, x33063; -O1:    caspal x4, x5, x8, x9, [x0]3064; -O1:    cmp x5, x73065; -O1:    ccmp x4, x6, #0, eq3066    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 163067    ret i128 %r3068}3069 3070define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3071; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst:3072; -O0:    orr x2, x9, x113073; -O0:    orr x9, x9, x103074; -O0:    caspal x0, x1, x2, x3, [x8]3075; -O0:    eor x8, x10, x83076; -O0:    eor x11, x9, x113077; -O0:    orr x8, x8, x113078; -O0:    subs x8, x8, #03079;3080; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst:3081; -O1:    ldp x4, x5, [x0]3082; -O1:    orr x8, x4, x23083; -O1:    orr x9, x7, x33084; -O1:    caspal x4, x5, x8, x9, [x0]3085; -O1:    cmp x5, x73086; -O1:    ccmp x4, x6, #0, eq3087    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 163088    ret i128 %r3089}3090 3091define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3092; CHECK-LABEL: atomicrmw_or_i8_unaligned_monotonic:3093; CHECK:    ldsetb w1, w0, [x0]3094    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 13095    ret i8 %r3096}3097 3098define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) {3099; CHECK-LABEL: atomicrmw_or_i8_unaligned_acquire:3100; CHECK:    ldsetab w1, w0, [x0]3101    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 13102    ret i8 %r3103}3104 3105define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) {3106; CHECK-LABEL: atomicrmw_or_i8_unaligned_release:3107; CHECK:    ldsetlb w1, w0, [x0]3108    %r = atomicrmw or ptr %ptr, i8 %value release, align 13109    ret i8 %r3110}3111 3112define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3113; CHECK-LABEL: atomicrmw_or_i8_unaligned_acq_rel:3114; CHECK:    ldsetalb w1, w0, [x0]3115    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 13116    ret i8 %r3117}3118 3119define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3120; CHECK-LABEL: atomicrmw_or_i8_unaligned_seq_cst:3121; CHECK:    ldsetalb w1, w0, [x0]3122    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 13123    ret i8 %r3124}3125 3126define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3127; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic:3128; -O0:    orr w8, w9, w83129; -O0:    bl __atomic_compare_exchange3130;3131; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic:3132; -O1:    orr w8, w0, w203133; -O1:    bl __atomic_compare_exchange3134    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 13135    ret i16 %r3136}3137 3138define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) {3139; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire:3140; -O0:    orr w8, w9, w83141; -O0:    bl __atomic_compare_exchange3142;3143; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire:3144; -O1:    orr w8, w0, w203145; -O1:    bl __atomic_compare_exchange3146    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 13147    ret i16 %r3148}3149 3150define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) {3151; -O0-LABEL: atomicrmw_or_i16_unaligned_release:3152; -O0:    orr w8, w9, w83153; -O0:    bl __atomic_compare_exchange3154;3155; -O1-LABEL: atomicrmw_or_i16_unaligned_release:3156; -O1:    orr w8, w0, w203157; -O1:    bl __atomic_compare_exchange3158    %r = atomicrmw or ptr %ptr, i16 %value release, align 13159    ret i16 %r3160}3161 3162define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3163; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3164; -O0:    orr w8, w9, w83165; -O0:    bl __atomic_compare_exchange3166;3167; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3168; -O1:    orr w8, w0, w203169; -O1:    bl __atomic_compare_exchange3170    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 13171    ret i16 %r3172}3173 3174define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3175; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3176; -O0:    orr w8, w9, w83177; -O0:    bl __atomic_compare_exchange3178;3179; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3180; -O1:    orr w8, w0, w203181; -O1:    bl __atomic_compare_exchange3182    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 13183    ret i16 %r3184}3185 3186define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3187; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic:3188; -O0:    orr w8, w9, w83189; -O0:    bl __atomic_compare_exchange3190;3191; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic:3192; -O1:    orr w8, w0, w203193; -O1:    bl __atomic_compare_exchange3194    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 13195    ret i32 %r3196}3197 3198define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) {3199; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire:3200; -O0:    orr w8, w9, w83201; -O0:    bl __atomic_compare_exchange3202;3203; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire:3204; -O1:    orr w8, w0, w203205; -O1:    bl __atomic_compare_exchange3206    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 13207    ret i32 %r3208}3209 3210define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) {3211; -O0-LABEL: atomicrmw_or_i32_unaligned_release:3212; -O0:    orr w8, w9, w83213; -O0:    bl __atomic_compare_exchange3214;3215; -O1-LABEL: atomicrmw_or_i32_unaligned_release:3216; -O1:    orr w8, w0, w203217; -O1:    bl __atomic_compare_exchange3218    %r = atomicrmw or ptr %ptr, i32 %value release, align 13219    ret i32 %r3220}3221 3222define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3223; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3224; -O0:    orr w8, w9, w83225; -O0:    bl __atomic_compare_exchange3226;3227; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3228; -O1:    orr w8, w0, w203229; -O1:    bl __atomic_compare_exchange3230    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 13231    ret i32 %r3232}3233 3234define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3235; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3236; -O0:    orr w8, w9, w83237; -O0:    bl __atomic_compare_exchange3238;3239; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3240; -O1:    orr w8, w0, w203241; -O1:    bl __atomic_compare_exchange3242    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 13243    ret i32 %r3244}3245 3246define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3247; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic:3248; -O0:    orr x8, x9, x83249; -O0:    bl __atomic_compare_exchange3250;3251; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic:3252; -O1:    orr x8, x0, x203253; -O1:    bl __atomic_compare_exchange3254    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 13255    ret i64 %r3256}3257 3258define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) {3259; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire:3260; -O0:    orr x8, x9, x83261; -O0:    bl __atomic_compare_exchange3262;3263; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire:3264; -O1:    orr x8, x0, x203265; -O1:    bl __atomic_compare_exchange3266    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 13267    ret i64 %r3268}3269 3270define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) {3271; -O0-LABEL: atomicrmw_or_i64_unaligned_release:3272; -O0:    orr x8, x9, x83273; -O0:    bl __atomic_compare_exchange3274;3275; -O1-LABEL: atomicrmw_or_i64_unaligned_release:3276; -O1:    orr x8, x0, x203277; -O1:    bl __atomic_compare_exchange3278    %r = atomicrmw or ptr %ptr, i64 %value release, align 13279    ret i64 %r3280}3281 3282define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3283; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3284; -O0:    orr x8, x9, x83285; -O0:    bl __atomic_compare_exchange3286;3287; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3288; -O1:    orr x8, x0, x203289; -O1:    bl __atomic_compare_exchange3290    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 13291    ret i64 %r3292}3293 3294define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3295; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3296; -O0:    orr x8, x9, x83297; -O0:    bl __atomic_compare_exchange3298;3299; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3300; -O1:    orr x8, x0, x203301; -O1:    bl __atomic_compare_exchange3302    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 13303    ret i64 %r3304}3305 3306define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3307; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic:3308; -O0:    orr x9, x8, x93309; -O0:    orr x8, x8, x103310; -O0:    bl __atomic_compare_exchange3311;3312; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic:3313; -O1:    ldp x0, x1, [x0]3314; -O1:    orr x8, x1, x193315; -O1:    orr x9, x0, x213316; -O1:    bl __atomic_compare_exchange3317    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 13318    ret i128 %r3319}3320 3321define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) {3322; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire:3323; -O0:    orr x9, x8, x93324; -O0:    orr x8, x8, x103325; -O0:    bl __atomic_compare_exchange3326;3327; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire:3328; -O1:    ldp x0, x1, [x0]3329; -O1:    orr x8, x1, x193330; -O1:    orr x9, x0, x213331; -O1:    bl __atomic_compare_exchange3332    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 13333    ret i128 %r3334}3335 3336define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) {3337; -O0-LABEL: atomicrmw_or_i128_unaligned_release:3338; -O0:    orr x9, x8, x93339; -O0:    orr x8, x8, x103340; -O0:    bl __atomic_compare_exchange3341;3342; -O1-LABEL: atomicrmw_or_i128_unaligned_release:3343; -O1:    ldp x0, x1, [x0]3344; -O1:    orr x8, x1, x193345; -O1:    orr x9, x0, x213346; -O1:    bl __atomic_compare_exchange3347    %r = atomicrmw or ptr %ptr, i128 %value release, align 13348    ret i128 %r3349}3350 3351define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3352; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3353; -O0:    orr x9, x8, x93354; -O0:    orr x8, x8, x103355; -O0:    bl __atomic_compare_exchange3356;3357; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3358; -O1:    ldp x0, x1, [x0]3359; -O1:    orr x8, x1, x193360; -O1:    orr x9, x0, x213361; -O1:    bl __atomic_compare_exchange3362    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 13363    ret i128 %r3364}3365 3366define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3367; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3368; -O0:    orr x9, x8, x93369; -O0:    orr x8, x8, x103370; -O0:    bl __atomic_compare_exchange3371;3372; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3373; -O1:    ldp x0, x1, [x0]3374; -O1:    orr x8, x1, x193375; -O1:    orr x9, x0, x213376; -O1:    bl __atomic_compare_exchange3377    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 13378    ret i128 %r3379}3380 3381define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) {3382; CHECK-LABEL: atomicrmw_xor_i8_aligned_monotonic:3383; CHECK:    ldeorb w1, w0, [x0]3384    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13385    ret i8 %r3386}3387 3388define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) {3389; CHECK-LABEL: atomicrmw_xor_i8_aligned_acquire:3390; CHECK:    ldeorab w1, w0, [x0]3391    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13392    ret i8 %r3393}3394 3395define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) {3396; CHECK-LABEL: atomicrmw_xor_i8_aligned_release:3397; CHECK:    ldeorlb w1, w0, [x0]3398    %r = atomicrmw xor ptr %ptr, i8 %value release, align 13399    ret i8 %r3400}3401 3402define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3403; CHECK-LABEL: atomicrmw_xor_i8_aligned_acq_rel:3404; CHECK:    ldeoralb w1, w0, [x0]3405    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13406    ret i8 %r3407}3408 3409define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3410; CHECK-LABEL: atomicrmw_xor_i8_aligned_seq_cst:3411; CHECK:    ldeoralb w1, w0, [x0]3412    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13413    ret i8 %r3414}3415 3416define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) {3417; CHECK-LABEL: atomicrmw_xor_i16_aligned_monotonic:3418; CHECK:    ldeorh w1, w0, [x0]3419    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 23420    ret i16 %r3421}3422 3423define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) {3424; CHECK-LABEL: atomicrmw_xor_i16_aligned_acquire:3425; CHECK:    ldeorah w1, w0, [x0]3426    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 23427    ret i16 %r3428}3429 3430define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) {3431; CHECK-LABEL: atomicrmw_xor_i16_aligned_release:3432; CHECK:    ldeorlh w1, w0, [x0]3433    %r = atomicrmw xor ptr %ptr, i16 %value release, align 23434    ret i16 %r3435}3436 3437define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3438; CHECK-LABEL: atomicrmw_xor_i16_aligned_acq_rel:3439; CHECK:    ldeoralh w1, w0, [x0]3440    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 23441    ret i16 %r3442}3443 3444define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3445; CHECK-LABEL: atomicrmw_xor_i16_aligned_seq_cst:3446; CHECK:    ldeoralh w1, w0, [x0]3447    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 23448    ret i16 %r3449}3450 3451define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) {3452; CHECK-LABEL: atomicrmw_xor_i32_aligned_monotonic:3453; CHECK:    ldeor w1, w0, [x0]3454    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 43455    ret i32 %r3456}3457 3458define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) {3459; CHECK-LABEL: atomicrmw_xor_i32_aligned_acquire:3460; CHECK:    ldeora w1, w0, [x0]3461    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 43462    ret i32 %r3463}3464 3465define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) {3466; CHECK-LABEL: atomicrmw_xor_i32_aligned_release:3467; CHECK:    ldeorl w1, w0, [x0]3468    %r = atomicrmw xor ptr %ptr, i32 %value release, align 43469    ret i32 %r3470}3471 3472define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3473; CHECK-LABEL: atomicrmw_xor_i32_aligned_acq_rel:3474; CHECK:    ldeoral w1, w0, [x0]3475    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 43476    ret i32 %r3477}3478 3479define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3480; CHECK-LABEL: atomicrmw_xor_i32_aligned_seq_cst:3481; CHECK:    ldeoral w1, w0, [x0]3482    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 43483    ret i32 %r3484}3485 3486define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) {3487; CHECK-LABEL: atomicrmw_xor_i64_aligned_monotonic:3488; CHECK:    ldeor x1, x0, [x0]3489    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 83490    ret i64 %r3491}3492 3493define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) {3494; CHECK-LABEL: atomicrmw_xor_i64_aligned_acquire:3495; CHECK:    ldeora x1, x0, [x0]3496    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 83497    ret i64 %r3498}3499 3500define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) {3501; CHECK-LABEL: atomicrmw_xor_i64_aligned_release:3502; CHECK:    ldeorl x1, x0, [x0]3503    %r = atomicrmw xor ptr %ptr, i64 %value release, align 83504    ret i64 %r3505}3506 3507define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3508; CHECK-LABEL: atomicrmw_xor_i64_aligned_acq_rel:3509; CHECK:    ldeoral x1, x0, [x0]3510    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 83511    ret i64 %r3512}3513 3514define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3515; CHECK-LABEL: atomicrmw_xor_i64_aligned_seq_cst:3516; CHECK:    ldeoral x1, x0, [x0]3517    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 83518    ret i64 %r3519}3520 3521define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) {3522; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic:3523; -O0:    eor x2, x9, x113524; -O0:    eor x9, x9, x103525; -O0:    casp x0, x1, x2, x3, [x8]3526; -O0:    eor x8, x10, x83527; -O0:    eor x11, x9, x113528; -O0:    orr x8, x8, x113529; -O0:    subs x8, x8, #03530;3531; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic:3532; -O1:    ldp x4, x5, [x0]3533; -O1:    eor x8, x4, x23534; -O1:    eor x9, x7, x33535; -O1:    casp x4, x5, x8, x9, [x0]3536; -O1:    cmp x5, x73537; -O1:    ccmp x4, x6, #0, eq3538    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 163539    ret i128 %r3540}3541 3542define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) {3543; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire:3544; -O0:    eor x2, x9, x113545; -O0:    eor x9, x9, x103546; -O0:    caspa x0, x1, x2, x3, [x8]3547; -O0:    eor x8, x10, x83548; -O0:    eor x11, x9, x113549; -O0:    orr x8, x8, x113550; -O0:    subs x8, x8, #03551;3552; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire:3553; -O1:    ldp x4, x5, [x0]3554; -O1:    eor x8, x4, x23555; -O1:    eor x9, x7, x33556; -O1:    caspa x4, x5, x8, x9, [x0]3557; -O1:    cmp x5, x73558; -O1:    ccmp x4, x6, #0, eq3559    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 163560    ret i128 %r3561}3562 3563define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) {3564; -O0-LABEL: atomicrmw_xor_i128_aligned_release:3565; -O0:    eor x2, x9, x113566; -O0:    eor x9, x9, x103567; -O0:    caspl x0, x1, x2, x3, [x8]3568; -O0:    eor x8, x10, x83569; -O0:    eor x11, x9, x113570; -O0:    orr x8, x8, x113571; -O0:    subs x8, x8, #03572;3573; -O1-LABEL: atomicrmw_xor_i128_aligned_release:3574; -O1:    ldp x4, x5, [x0]3575; -O1:    eor x8, x4, x23576; -O1:    eor x9, x7, x33577; -O1:    caspl x4, x5, x8, x9, [x0]3578; -O1:    cmp x5, x73579; -O1:    ccmp x4, x6, #0, eq3580    %r = atomicrmw xor ptr %ptr, i128 %value release, align 163581    ret i128 %r3582}3583 3584define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3585; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3586; -O0:    eor x2, x9, x113587; -O0:    eor x9, x9, x103588; -O0:    caspal x0, x1, x2, x3, [x8]3589; -O0:    eor x8, x10, x83590; -O0:    eor x11, x9, x113591; -O0:    orr x8, x8, x113592; -O0:    subs x8, x8, #03593;3594; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3595; -O1:    ldp x4, x5, [x0]3596; -O1:    eor x8, x4, x23597; -O1:    eor x9, x7, x33598; -O1:    caspal x4, x5, x8, x9, [x0]3599; -O1:    cmp x5, x73600; -O1:    ccmp x4, x6, #0, eq3601    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 163602    ret i128 %r3603}3604 3605define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3606; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3607; -O0:    eor x2, x9, x113608; -O0:    eor x9, x9, x103609; -O0:    caspal x0, x1, x2, x3, [x8]3610; -O0:    eor x8, x10, x83611; -O0:    eor x11, x9, x113612; -O0:    orr x8, x8, x113613; -O0:    subs x8, x8, #03614;3615; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3616; -O1:    ldp x4, x5, [x0]3617; -O1:    eor x8, x4, x23618; -O1:    eor x9, x7, x33619; -O1:    caspal x4, x5, x8, x9, [x0]3620; -O1:    cmp x5, x73621; -O1:    ccmp x4, x6, #0, eq3622    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 163623    ret i128 %r3624}3625 3626define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3627; CHECK-LABEL: atomicrmw_xor_i8_unaligned_monotonic:3628; CHECK:    ldeorb w1, w0, [x0]3629    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13630    ret i8 %r3631}3632 3633define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) {3634; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acquire:3635; CHECK:    ldeorab w1, w0, [x0]3636    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13637    ret i8 %r3638}3639 3640define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) {3641; CHECK-LABEL: atomicrmw_xor_i8_unaligned_release:3642; CHECK:    ldeorlb w1, w0, [x0]3643    %r = atomicrmw xor ptr %ptr, i8 %value release, align 13644    ret i8 %r3645}3646 3647define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3648; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:3649; CHECK:    ldeoralb w1, w0, [x0]3650    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13651    ret i8 %r3652}3653 3654define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3655; CHECK-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:3656; CHECK:    ldeoralb w1, w0, [x0]3657    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13658    ret i8 %r3659}3660 3661define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3662; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3663; -O0:    eor w8, w9, w83664; -O0:    bl __atomic_compare_exchange3665;3666; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3667; -O1:    eor w8, w0, w203668; -O1:    bl __atomic_compare_exchange3669    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 13670    ret i16 %r3671}3672 3673define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) {3674; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire:3675; -O0:    eor w8, w9, w83676; -O0:    bl __atomic_compare_exchange3677;3678; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire:3679; -O1:    eor w8, w0, w203680; -O1:    bl __atomic_compare_exchange3681    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 13682    ret i16 %r3683}3684 3685define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) {3686; -O0-LABEL: atomicrmw_xor_i16_unaligned_release:3687; -O0:    eor w8, w9, w83688; -O0:    bl __atomic_compare_exchange3689;3690; -O1-LABEL: atomicrmw_xor_i16_unaligned_release:3691; -O1:    eor w8, w0, w203692; -O1:    bl __atomic_compare_exchange3693    %r = atomicrmw xor ptr %ptr, i16 %value release, align 13694    ret i16 %r3695}3696 3697define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3698; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3699; -O0:    eor w8, w9, w83700; -O0:    bl __atomic_compare_exchange3701;3702; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3703; -O1:    eor w8, w0, w203704; -O1:    bl __atomic_compare_exchange3705    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 13706    ret i16 %r3707}3708 3709define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3710; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3711; -O0:    eor w8, w9, w83712; -O0:    bl __atomic_compare_exchange3713;3714; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3715; -O1:    eor w8, w0, w203716; -O1:    bl __atomic_compare_exchange3717    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 13718    ret i16 %r3719}3720 3721define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3722; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3723; -O0:    eor w8, w9, w83724; -O0:    bl __atomic_compare_exchange3725;3726; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3727; -O1:    eor w8, w0, w203728; -O1:    bl __atomic_compare_exchange3729    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 13730    ret i32 %r3731}3732 3733define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) {3734; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire:3735; -O0:    eor w8, w9, w83736; -O0:    bl __atomic_compare_exchange3737;3738; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire:3739; -O1:    eor w8, w0, w203740; -O1:    bl __atomic_compare_exchange3741    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 13742    ret i32 %r3743}3744 3745define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) {3746; -O0-LABEL: atomicrmw_xor_i32_unaligned_release:3747; -O0:    eor w8, w9, w83748; -O0:    bl __atomic_compare_exchange3749;3750; -O1-LABEL: atomicrmw_xor_i32_unaligned_release:3751; -O1:    eor w8, w0, w203752; -O1:    bl __atomic_compare_exchange3753    %r = atomicrmw xor ptr %ptr, i32 %value release, align 13754    ret i32 %r3755}3756 3757define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3758; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3759; -O0:    eor w8, w9, w83760; -O0:    bl __atomic_compare_exchange3761;3762; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3763; -O1:    eor w8, w0, w203764; -O1:    bl __atomic_compare_exchange3765    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 13766    ret i32 %r3767}3768 3769define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3770; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3771; -O0:    eor w8, w9, w83772; -O0:    bl __atomic_compare_exchange3773;3774; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3775; -O1:    eor w8, w0, w203776; -O1:    bl __atomic_compare_exchange3777    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 13778    ret i32 %r3779}3780 3781define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3782; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3783; -O0:    eor x8, x9, x83784; -O0:    bl __atomic_compare_exchange3785;3786; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3787; -O1:    eor x8, x0, x203788; -O1:    bl __atomic_compare_exchange3789    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 13790    ret i64 %r3791}3792 3793define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) {3794; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire:3795; -O0:    eor x8, x9, x83796; -O0:    bl __atomic_compare_exchange3797;3798; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire:3799; -O1:    eor x8, x0, x203800; -O1:    bl __atomic_compare_exchange3801    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 13802    ret i64 %r3803}3804 3805define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) {3806; -O0-LABEL: atomicrmw_xor_i64_unaligned_release:3807; -O0:    eor x8, x9, x83808; -O0:    bl __atomic_compare_exchange3809;3810; -O1-LABEL: atomicrmw_xor_i64_unaligned_release:3811; -O1:    eor x8, x0, x203812; -O1:    bl __atomic_compare_exchange3813    %r = atomicrmw xor ptr %ptr, i64 %value release, align 13814    ret i64 %r3815}3816 3817define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3818; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3819; -O0:    eor x8, x9, x83820; -O0:    bl __atomic_compare_exchange3821;3822; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3823; -O1:    eor x8, x0, x203824; -O1:    bl __atomic_compare_exchange3825    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 13826    ret i64 %r3827}3828 3829define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3830; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3831; -O0:    eor x8, x9, x83832; -O0:    bl __atomic_compare_exchange3833;3834; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3835; -O1:    eor x8, x0, x203836; -O1:    bl __atomic_compare_exchange3837    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 13838    ret i64 %r3839}3840 3841define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3842; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3843; -O0:    eor x9, x8, x93844; -O0:    eor x8, x8, x103845; -O0:    bl __atomic_compare_exchange3846;3847; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3848; -O1:    ldp x0, x1, [x0]3849; -O1:    eor x8, x1, x193850; -O1:    eor x9, x0, x213851; -O1:    bl __atomic_compare_exchange3852    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 13853    ret i128 %r3854}3855 3856define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) {3857; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire:3858; -O0:    eor x9, x8, x93859; -O0:    eor x8, x8, x103860; -O0:    bl __atomic_compare_exchange3861;3862; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire:3863; -O1:    ldp x0, x1, [x0]3864; -O1:    eor x8, x1, x193865; -O1:    eor x9, x0, x213866; -O1:    bl __atomic_compare_exchange3867    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 13868    ret i128 %r3869}3870 3871define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) {3872; -O0-LABEL: atomicrmw_xor_i128_unaligned_release:3873; -O0:    eor x9, x8, x93874; -O0:    eor x8, x8, x103875; -O0:    bl __atomic_compare_exchange3876;3877; -O1-LABEL: atomicrmw_xor_i128_unaligned_release:3878; -O1:    ldp x0, x1, [x0]3879; -O1:    eor x8, x1, x193880; -O1:    eor x9, x0, x213881; -O1:    bl __atomic_compare_exchange3882    %r = atomicrmw xor ptr %ptr, i128 %value release, align 13883    ret i128 %r3884}3885 3886define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3887; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:3888; -O0:    eor x9, x8, x93889; -O0:    eor x8, x8, x103890; -O0:    bl __atomic_compare_exchange3891;3892; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:3893; -O1:    ldp x0, x1, [x0]3894; -O1:    eor x8, x1, x193895; -O1:    eor x9, x0, x213896; -O1:    bl __atomic_compare_exchange3897    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 13898    ret i128 %r3899}3900 3901define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3902; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:3903; -O0:    eor x9, x8, x93904; -O0:    eor x8, x8, x103905; -O0:    bl __atomic_compare_exchange3906;3907; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:3908; -O1:    ldp x0, x1, [x0]3909; -O1:    eor x8, x1, x193910; -O1:    eor x9, x0, x213911; -O1:    bl __atomic_compare_exchange3912    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 13913    ret i128 %r3914}3915 3916define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) {3917; CHECK-LABEL: atomicrmw_max_i8_aligned_monotonic:3918; CHECK:    ldsmaxb w1, w0, [x0]3919    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 13920    ret i8 %r3921}3922 3923define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) {3924; CHECK-LABEL: atomicrmw_max_i8_aligned_acquire:3925; CHECK:    ldsmaxab w1, w0, [x0]3926    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 13927    ret i8 %r3928}3929 3930define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) {3931; CHECK-LABEL: atomicrmw_max_i8_aligned_release:3932; CHECK:    ldsmaxlb w1, w0, [x0]3933    %r = atomicrmw max ptr %ptr, i8 %value release, align 13934    ret i8 %r3935}3936 3937define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3938; CHECK-LABEL: atomicrmw_max_i8_aligned_acq_rel:3939; CHECK:    ldsmaxalb w1, w0, [x0]3940    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 13941    ret i8 %r3942}3943 3944define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3945; CHECK-LABEL: atomicrmw_max_i8_aligned_seq_cst:3946; CHECK:    ldsmaxalb w1, w0, [x0]3947    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 13948    ret i8 %r3949}3950 3951define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) {3952; CHECK-LABEL: atomicrmw_max_i16_aligned_monotonic:3953; CHECK:    ldsmaxh w1, w0, [x0]3954    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 23955    ret i16 %r3956}3957 3958define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) {3959; CHECK-LABEL: atomicrmw_max_i16_aligned_acquire:3960; CHECK:    ldsmaxah w1, w0, [x0]3961    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 23962    ret i16 %r3963}3964 3965define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) {3966; CHECK-LABEL: atomicrmw_max_i16_aligned_release:3967; CHECK:    ldsmaxlh w1, w0, [x0]3968    %r = atomicrmw max ptr %ptr, i16 %value release, align 23969    ret i16 %r3970}3971 3972define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3973; CHECK-LABEL: atomicrmw_max_i16_aligned_acq_rel:3974; CHECK:    ldsmaxalh w1, w0, [x0]3975    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 23976    ret i16 %r3977}3978 3979define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3980; CHECK-LABEL: atomicrmw_max_i16_aligned_seq_cst:3981; CHECK:    ldsmaxalh w1, w0, [x0]3982    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 23983    ret i16 %r3984}3985 3986define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) {3987; CHECK-LABEL: atomicrmw_max_i32_aligned_monotonic:3988; CHECK:    ldsmax w1, w0, [x0]3989    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 43990    ret i32 %r3991}3992 3993define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) {3994; CHECK-LABEL: atomicrmw_max_i32_aligned_acquire:3995; CHECK:    ldsmaxa w1, w0, [x0]3996    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 43997    ret i32 %r3998}3999 4000define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) {4001; CHECK-LABEL: atomicrmw_max_i32_aligned_release:4002; CHECK:    ldsmaxl w1, w0, [x0]4003    %r = atomicrmw max ptr %ptr, i32 %value release, align 44004    ret i32 %r4005}4006 4007define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4008; CHECK-LABEL: atomicrmw_max_i32_aligned_acq_rel:4009; CHECK:    ldsmaxal w1, w0, [x0]4010    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 44011    ret i32 %r4012}4013 4014define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4015; CHECK-LABEL: atomicrmw_max_i32_aligned_seq_cst:4016; CHECK:    ldsmaxal w1, w0, [x0]4017    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 44018    ret i32 %r4019}4020 4021define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) {4022; CHECK-LABEL: atomicrmw_max_i64_aligned_monotonic:4023; CHECK:    ldsmax x1, x0, [x0]4024    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 84025    ret i64 %r4026}4027 4028define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) {4029; CHECK-LABEL: atomicrmw_max_i64_aligned_acquire:4030; CHECK:    ldsmaxa x1, x0, [x0]4031    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 84032    ret i64 %r4033}4034 4035define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) {4036; CHECK-LABEL: atomicrmw_max_i64_aligned_release:4037; CHECK:    ldsmaxl x1, x0, [x0]4038    %r = atomicrmw max ptr %ptr, i64 %value release, align 84039    ret i64 %r4040}4041 4042define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4043; CHECK-LABEL: atomicrmw_max_i64_aligned_acq_rel:4044; CHECK:    ldsmaxal x1, x0, [x0]4045    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 84046    ret i64 %r4047}4048 4049define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4050; CHECK-LABEL: atomicrmw_max_i64_aligned_seq_cst:4051; CHECK:    ldsmaxal x1, x0, [x0]4052    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 84053    ret i64 %r4054}4055 4056define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) {4057; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic:4058; -O0:    subs x9, x9, x124059; -O0:    subs x11, x11, x104060; -O0:    subs x13, x13, x104061; -O0:    csel w11, w9, w11, eq4062; -O0:    ands w13, w11, #0x14063; -O0:    csel x2, x9, x12, ne4064; -O0:    ands w11, w11, #0x14065; -O0:    csel x9, x9, x10, ne4066; -O0:    casp x0, x1, x2, x3, [x8]4067; -O0:    eor x8, x10, x84068; -O0:    eor x11, x9, x114069; -O0:    orr x8, x8, x114070; -O0:    subs x8, x8, #04071;4072; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic:4073; -O1:    ldp x4, x5, [x0]4074; -O1:    cmp x2, x44075; -O1:    csel x9, x7, x3, lt4076; -O1:    csel x8, x4, x2, lt4077; -O1:    casp x4, x5, x8, x9, [x0]4078; -O1:    cmp x5, x74079; -O1:    ccmp x4, x6, #0, eq4080    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 164081    ret i128 %r4082}4083 4084define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) {4085; -O0-LABEL: atomicrmw_max_i128_aligned_acquire:4086; -O0:    subs x9, x9, x124087; -O0:    subs x11, x11, x104088; -O0:    subs x13, x13, x104089; -O0:    csel w11, w9, w11, eq4090; -O0:    ands w13, w11, #0x14091; -O0:    csel x2, x9, x12, ne4092; -O0:    ands w11, w11, #0x14093; -O0:    csel x9, x9, x10, ne4094; -O0:    caspa x0, x1, x2, x3, [x8]4095; -O0:    eor x8, x10, x84096; -O0:    eor x11, x9, x114097; -O0:    orr x8, x8, x114098; -O0:    subs x8, x8, #04099;4100; -O1-LABEL: atomicrmw_max_i128_aligned_acquire:4101; -O1:    ldp x4, x5, [x0]4102; -O1:    cmp x2, x44103; -O1:    csel x9, x7, x3, lt4104; -O1:    csel x8, x4, x2, lt4105; -O1:    caspa x4, x5, x8, x9, [x0]4106; -O1:    cmp x5, x74107; -O1:    ccmp x4, x6, #0, eq4108    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 164109    ret i128 %r4110}4111 4112define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) {4113; -O0-LABEL: atomicrmw_max_i128_aligned_release:4114; -O0:    subs x9, x9, x124115; -O0:    subs x11, x11, x104116; -O0:    subs x13, x13, x104117; -O0:    csel w11, w9, w11, eq4118; -O0:    ands w13, w11, #0x14119; -O0:    csel x2, x9, x12, ne4120; -O0:    ands w11, w11, #0x14121; -O0:    csel x9, x9, x10, ne4122; -O0:    caspl x0, x1, x2, x3, [x8]4123; -O0:    eor x8, x10, x84124; -O0:    eor x11, x9, x114125; -O0:    orr x8, x8, x114126; -O0:    subs x8, x8, #04127;4128; -O1-LABEL: atomicrmw_max_i128_aligned_release:4129; -O1:    ldp x4, x5, [x0]4130; -O1:    cmp x2, x44131; -O1:    csel x9, x7, x3, lt4132; -O1:    csel x8, x4, x2, lt4133; -O1:    caspl x4, x5, x8, x9, [x0]4134; -O1:    cmp x5, x74135; -O1:    ccmp x4, x6, #0, eq4136    %r = atomicrmw max ptr %ptr, i128 %value release, align 164137    ret i128 %r4138}4139 4140define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4141; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel:4142; -O0:    subs x9, x9, x124143; -O0:    subs x11, x11, x104144; -O0:    subs x13, x13, x104145; -O0:    csel w11, w9, w11, eq4146; -O0:    ands w13, w11, #0x14147; -O0:    csel x2, x9, x12, ne4148; -O0:    ands w11, w11, #0x14149; -O0:    csel x9, x9, x10, ne4150; -O0:    caspal x0, x1, x2, x3, [x8]4151; -O0:    eor x8, x10, x84152; -O0:    eor x11, x9, x114153; -O0:    orr x8, x8, x114154; -O0:    subs x8, x8, #04155;4156; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel:4157; -O1:    ldp x4, x5, [x0]4158; -O1:    cmp x2, x44159; -O1:    csel x9, x7, x3, lt4160; -O1:    csel x8, x4, x2, lt4161; -O1:    caspal x4, x5, x8, x9, [x0]4162; -O1:    cmp x5, x74163; -O1:    ccmp x4, x6, #0, eq4164    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 164165    ret i128 %r4166}4167 4168define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4169; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst:4170; -O0:    subs x9, x9, x124171; -O0:    subs x11, x11, x104172; -O0:    subs x13, x13, x104173; -O0:    csel w11, w9, w11, eq4174; -O0:    ands w13, w11, #0x14175; -O0:    csel x2, x9, x12, ne4176; -O0:    ands w11, w11, #0x14177; -O0:    csel x9, x9, x10, ne4178; -O0:    caspal x0, x1, x2, x3, [x8]4179; -O0:    eor x8, x10, x84180; -O0:    eor x11, x9, x114181; -O0:    orr x8, x8, x114182; -O0:    subs x8, x8, #04183;4184; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst:4185; -O1:    ldp x4, x5, [x0]4186; -O1:    cmp x2, x44187; -O1:    csel x9, x7, x3, lt4188; -O1:    csel x8, x4, x2, lt4189; -O1:    caspal x4, x5, x8, x9, [x0]4190; -O1:    cmp x5, x74191; -O1:    ccmp x4, x6, #0, eq4192    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 164193    ret i128 %r4194}4195 4196define dso_local i8 @atomicrmw_max_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4197; CHECK-LABEL: atomicrmw_max_i8_unaligned_monotonic:4198; CHECK:    ldsmaxb w1, w0, [x0]4199    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 14200    ret i8 %r4201}4202 4203define dso_local i8 @atomicrmw_max_i8_unaligned_acquire(ptr %ptr, i8 %value) {4204; CHECK-LABEL: atomicrmw_max_i8_unaligned_acquire:4205; CHECK:    ldsmaxab w1, w0, [x0]4206    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 14207    ret i8 %r4208}4209 4210define dso_local i8 @atomicrmw_max_i8_unaligned_release(ptr %ptr, i8 %value) {4211; CHECK-LABEL: atomicrmw_max_i8_unaligned_release:4212; CHECK:    ldsmaxlb w1, w0, [x0]4213    %r = atomicrmw max ptr %ptr, i8 %value release, align 14214    ret i8 %r4215}4216 4217define dso_local i8 @atomicrmw_max_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4218; CHECK-LABEL: atomicrmw_max_i8_unaligned_acq_rel:4219; CHECK:    ldsmaxalb w1, w0, [x0]4220    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 14221    ret i8 %r4222}4223 4224define dso_local i8 @atomicrmw_max_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4225; CHECK-LABEL: atomicrmw_max_i8_unaligned_seq_cst:4226; CHECK:    ldsmaxalb w1, w0, [x0]4227    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 14228    ret i8 %r4229}4230 4231define dso_local i16 @atomicrmw_max_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4232; -O0-LABEL: atomicrmw_max_i16_unaligned_monotonic:4233; -O0:    sxth w10, w94234; -O0:    subs w10, w10, w8, sxth4235; -O0:    csel w8, w9, w8, gt4236; -O0:    bl __atomic_compare_exchange4237;4238; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic:4239; -O1:    sxth w8, w04240; -O1:    cmp w8, w20, sxth4241; -O1:    csel w8, w0, w20, gt4242; -O1:    bl __atomic_compare_exchange4243    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 14244    ret i16 %r4245}4246 4247define dso_local i16 @atomicrmw_max_i16_unaligned_acquire(ptr %ptr, i16 %value) {4248; -O0-LABEL: atomicrmw_max_i16_unaligned_acquire:4249; -O0:    sxth w10, w94250; -O0:    subs w10, w10, w8, sxth4251; -O0:    csel w8, w9, w8, gt4252; -O0:    bl __atomic_compare_exchange4253;4254; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire:4255; -O1:    sxth w8, w04256; -O1:    cmp w8, w20, sxth4257; -O1:    csel w8, w0, w20, gt4258; -O1:    bl __atomic_compare_exchange4259    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 14260    ret i16 %r4261}4262 4263define dso_local i16 @atomicrmw_max_i16_unaligned_release(ptr %ptr, i16 %value) {4264; -O0-LABEL: atomicrmw_max_i16_unaligned_release:4265; -O0:    sxth w10, w94266; -O0:    subs w10, w10, w8, sxth4267; -O0:    csel w8, w9, w8, gt4268; -O0:    bl __atomic_compare_exchange4269;4270; -O1-LABEL: atomicrmw_max_i16_unaligned_release:4271; -O1:    sxth w8, w04272; -O1:    cmp w8, w20, sxth4273; -O1:    csel w8, w0, w20, gt4274; -O1:    bl __atomic_compare_exchange4275    %r = atomicrmw max ptr %ptr, i16 %value release, align 14276    ret i16 %r4277}4278 4279define dso_local i16 @atomicrmw_max_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4280; -O0-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4281; -O0:    sxth w10, w94282; -O0:    subs w10, w10, w8, sxth4283; -O0:    csel w8, w9, w8, gt4284; -O0:    bl __atomic_compare_exchange4285;4286; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4287; -O1:    sxth w8, w04288; -O1:    cmp w8, w20, sxth4289; -O1:    csel w8, w0, w20, gt4290; -O1:    bl __atomic_compare_exchange4291    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 14292    ret i16 %r4293}4294 4295define dso_local i16 @atomicrmw_max_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4296; -O0-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4297; -O0:    sxth w10, w94298; -O0:    subs w10, w10, w8, sxth4299; -O0:    csel w8, w9, w8, gt4300; -O0:    bl __atomic_compare_exchange4301;4302; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4303; -O1:    sxth w8, w04304; -O1:    cmp w8, w20, sxth4305; -O1:    csel w8, w0, w20, gt4306; -O1:    bl __atomic_compare_exchange4307    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 14308    ret i16 %r4309}4310 4311define dso_local i32 @atomicrmw_max_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4312; -O0-LABEL: atomicrmw_max_i32_unaligned_monotonic:4313; -O0:    subs w10, w9, w84314; -O0:    csel w8, w9, w8, gt4315; -O0:    bl __atomic_compare_exchange4316;4317; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic:4318; -O1:    cmp w0, w204319; -O1:    csel w8, w0, w20, gt4320; -O1:    bl __atomic_compare_exchange4321    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 14322    ret i32 %r4323}4324 4325define dso_local i32 @atomicrmw_max_i32_unaligned_acquire(ptr %ptr, i32 %value) {4326; -O0-LABEL: atomicrmw_max_i32_unaligned_acquire:4327; -O0:    subs w10, w9, w84328; -O0:    csel w8, w9, w8, gt4329; -O0:    bl __atomic_compare_exchange4330;4331; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire:4332; -O1:    cmp w0, w204333; -O1:    csel w8, w0, w20, gt4334; -O1:    bl __atomic_compare_exchange4335    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 14336    ret i32 %r4337}4338 4339define dso_local i32 @atomicrmw_max_i32_unaligned_release(ptr %ptr, i32 %value) {4340; -O0-LABEL: atomicrmw_max_i32_unaligned_release:4341; -O0:    subs w10, w9, w84342; -O0:    csel w8, w9, w8, gt4343; -O0:    bl __atomic_compare_exchange4344;4345; -O1-LABEL: atomicrmw_max_i32_unaligned_release:4346; -O1:    cmp w0, w204347; -O1:    csel w8, w0, w20, gt4348; -O1:    bl __atomic_compare_exchange4349    %r = atomicrmw max ptr %ptr, i32 %value release, align 14350    ret i32 %r4351}4352 4353define dso_local i32 @atomicrmw_max_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4354; -O0-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4355; -O0:    subs w10, w9, w84356; -O0:    csel w8, w9, w8, gt4357; -O0:    bl __atomic_compare_exchange4358;4359; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4360; -O1:    cmp w0, w204361; -O1:    csel w8, w0, w20, gt4362; -O1:    bl __atomic_compare_exchange4363    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 14364    ret i32 %r4365}4366 4367define dso_local i32 @atomicrmw_max_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4368; -O0-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4369; -O0:    subs w10, w9, w84370; -O0:    csel w8, w9, w8, gt4371; -O0:    bl __atomic_compare_exchange4372;4373; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4374; -O1:    cmp w0, w204375; -O1:    csel w8, w0, w20, gt4376; -O1:    bl __atomic_compare_exchange4377    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 14378    ret i32 %r4379}4380 4381define dso_local i64 @atomicrmw_max_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4382; -O0-LABEL: atomicrmw_max_i64_unaligned_monotonic:4383; -O0:    subs x10, x9, x84384; -O0:    csel x8, x9, x8, gt4385; -O0:    bl __atomic_compare_exchange4386;4387; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic:4388; -O1:    cmp x0, x204389; -O1:    csel x8, x0, x20, gt4390; -O1:    bl __atomic_compare_exchange4391    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 14392    ret i64 %r4393}4394 4395define dso_local i64 @atomicrmw_max_i64_unaligned_acquire(ptr %ptr, i64 %value) {4396; -O0-LABEL: atomicrmw_max_i64_unaligned_acquire:4397; -O0:    subs x10, x9, x84398; -O0:    csel x8, x9, x8, gt4399; -O0:    bl __atomic_compare_exchange4400;4401; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire:4402; -O1:    cmp x0, x204403; -O1:    csel x8, x0, x20, gt4404; -O1:    bl __atomic_compare_exchange4405    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 14406    ret i64 %r4407}4408 4409define dso_local i64 @atomicrmw_max_i64_unaligned_release(ptr %ptr, i64 %value) {4410; -O0-LABEL: atomicrmw_max_i64_unaligned_release:4411; -O0:    subs x10, x9, x84412; -O0:    csel x8, x9, x8, gt4413; -O0:    bl __atomic_compare_exchange4414;4415; -O1-LABEL: atomicrmw_max_i64_unaligned_release:4416; -O1:    cmp x0, x204417; -O1:    csel x8, x0, x20, gt4418; -O1:    bl __atomic_compare_exchange4419    %r = atomicrmw max ptr %ptr, i64 %value release, align 14420    ret i64 %r4421}4422 4423define dso_local i64 @atomicrmw_max_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4424; -O0-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4425; -O0:    subs x10, x9, x84426; -O0:    csel x8, x9, x8, gt4427; -O0:    bl __atomic_compare_exchange4428;4429; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4430; -O1:    cmp x0, x204431; -O1:    csel x8, x0, x20, gt4432; -O1:    bl __atomic_compare_exchange4433    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 14434    ret i64 %r4435}4436 4437define dso_local i64 @atomicrmw_max_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4438; -O0-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4439; -O0:    subs x10, x9, x84440; -O0:    csel x8, x9, x8, gt4441; -O0:    bl __atomic_compare_exchange4442;4443; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4444; -O1:    cmp x0, x204445; -O1:    csel x8, x0, x20, gt4446; -O1:    bl __atomic_compare_exchange4447    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 14448    ret i64 %r4449}4450 4451define dso_local i128 @atomicrmw_max_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4452; -O0-LABEL: atomicrmw_max_i128_unaligned_monotonic:4453; -O0:    subs x8, x8, x94454; -O0:    subs x11, x11, x104455; -O0:    subs x12, x12, x104456; -O0:    csel w11, w8, w11, eq4457; -O0:    ands w12, w11, #0x14458; -O0:    csel x9, x8, x9, ne4459; -O0:    ands w11, w11, #0x14460; -O0:    csel x8, x8, x10, ne4461; -O0:    bl __atomic_compare_exchange4462;4463; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic:4464; -O1:    ldp x0, x1, [x0]4465; -O1:    cmp x21, x04466; -O1:    csel x8, x1, x19, lt4467; -O1:    csel x9, x0, x21, lt4468; -O1:    bl __atomic_compare_exchange4469    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 14470    ret i128 %r4471}4472 4473define dso_local i128 @atomicrmw_max_i128_unaligned_acquire(ptr %ptr, i128 %value) {4474; -O0-LABEL: atomicrmw_max_i128_unaligned_acquire:4475; -O0:    subs x8, x8, x94476; -O0:    subs x11, x11, x104477; -O0:    subs x12, x12, x104478; -O0:    csel w11, w8, w11, eq4479; -O0:    ands w12, w11, #0x14480; -O0:    csel x9, x8, x9, ne4481; -O0:    ands w11, w11, #0x14482; -O0:    csel x8, x8, x10, ne4483; -O0:    bl __atomic_compare_exchange4484;4485; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire:4486; -O1:    ldp x0, x1, [x0]4487; -O1:    cmp x21, x04488; -O1:    csel x8, x1, x19, lt4489; -O1:    csel x9, x0, x21, lt4490; -O1:    bl __atomic_compare_exchange4491    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 14492    ret i128 %r4493}4494 4495define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) {4496; -O0-LABEL: atomicrmw_max_i128_unaligned_release:4497; -O0:    subs x8, x8, x94498; -O0:    subs x11, x11, x104499; -O0:    subs x12, x12, x104500; -O0:    csel w11, w8, w11, eq4501; -O0:    ands w12, w11, #0x14502; -O0:    csel x9, x8, x9, ne4503; -O0:    ands w11, w11, #0x14504; -O0:    csel x8, x8, x10, ne4505; -O0:    bl __atomic_compare_exchange4506;4507; -O1-LABEL: atomicrmw_max_i128_unaligned_release:4508; -O1:    ldp x0, x1, [x0]4509; -O1:    cmp x21, x04510; -O1:    csel x8, x1, x19, lt4511; -O1:    csel x9, x0, x21, lt4512; -O1:    bl __atomic_compare_exchange4513    %r = atomicrmw max ptr %ptr, i128 %value release, align 14514    ret i128 %r4515}4516 4517define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4518; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4519; -O0:    subs x8, x8, x94520; -O0:    subs x11, x11, x104521; -O0:    subs x12, x12, x104522; -O0:    csel w11, w8, w11, eq4523; -O0:    ands w12, w11, #0x14524; -O0:    csel x9, x8, x9, ne4525; -O0:    ands w11, w11, #0x14526; -O0:    csel x8, x8, x10, ne4527; -O0:    bl __atomic_compare_exchange4528;4529; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4530; -O1:    ldp x0, x1, [x0]4531; -O1:    cmp x21, x04532; -O1:    csel x8, x1, x19, lt4533; -O1:    csel x9, x0, x21, lt4534; -O1:    bl __atomic_compare_exchange4535    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 14536    ret i128 %r4537}4538 4539define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4540; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4541; -O0:    subs x8, x8, x94542; -O0:    subs x11, x11, x104543; -O0:    subs x12, x12, x104544; -O0:    csel w11, w8, w11, eq4545; -O0:    ands w12, w11, #0x14546; -O0:    csel x9, x8, x9, ne4547; -O0:    ands w11, w11, #0x14548; -O0:    csel x8, x8, x10, ne4549; -O0:    bl __atomic_compare_exchange4550;4551; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4552; -O1:    ldp x0, x1, [x0]4553; -O1:    cmp x21, x04554; -O1:    csel x8, x1, x19, lt4555; -O1:    csel x9, x0, x21, lt4556; -O1:    bl __atomic_compare_exchange4557    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 14558    ret i128 %r4559}4560 4561define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) {4562; CHECK-LABEL: atomicrmw_min_i8_aligned_monotonic:4563; CHECK:    ldsminb w1, w0, [x0]4564    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14565    ret i8 %r4566}4567 4568define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) {4569; CHECK-LABEL: atomicrmw_min_i8_aligned_acquire:4570; CHECK:    ldsminab w1, w0, [x0]4571    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14572    ret i8 %r4573}4574 4575define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) {4576; CHECK-LABEL: atomicrmw_min_i8_aligned_release:4577; CHECK:    ldsminlb w1, w0, [x0]4578    %r = atomicrmw min ptr %ptr, i8 %value release, align 14579    ret i8 %r4580}4581 4582define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) {4583; CHECK-LABEL: atomicrmw_min_i8_aligned_acq_rel:4584; CHECK:    ldsminalb w1, w0, [x0]4585    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 14586    ret i8 %r4587}4588 4589define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) {4590; CHECK-LABEL: atomicrmw_min_i8_aligned_seq_cst:4591; CHECK:    ldsminalb w1, w0, [x0]4592    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 14593    ret i8 %r4594}4595 4596define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) {4597; CHECK-LABEL: atomicrmw_min_i16_aligned_monotonic:4598; CHECK:    ldsminh w1, w0, [x0]4599    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 24600    ret i16 %r4601}4602 4603define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) {4604; CHECK-LABEL: atomicrmw_min_i16_aligned_acquire:4605; CHECK:    ldsminah w1, w0, [x0]4606    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 24607    ret i16 %r4608}4609 4610define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) {4611; CHECK-LABEL: atomicrmw_min_i16_aligned_release:4612; CHECK:    ldsminlh w1, w0, [x0]4613    %r = atomicrmw min ptr %ptr, i16 %value release, align 24614    ret i16 %r4615}4616 4617define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) {4618; CHECK-LABEL: atomicrmw_min_i16_aligned_acq_rel:4619; CHECK:    ldsminalh w1, w0, [x0]4620    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 24621    ret i16 %r4622}4623 4624define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) {4625; CHECK-LABEL: atomicrmw_min_i16_aligned_seq_cst:4626; CHECK:    ldsminalh w1, w0, [x0]4627    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 24628    ret i16 %r4629}4630 4631define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) {4632; CHECK-LABEL: atomicrmw_min_i32_aligned_monotonic:4633; CHECK:    ldsmin w1, w0, [x0]4634    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 44635    ret i32 %r4636}4637 4638define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) {4639; CHECK-LABEL: atomicrmw_min_i32_aligned_acquire:4640; CHECK:    ldsmina w1, w0, [x0]4641    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 44642    ret i32 %r4643}4644 4645define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) {4646; CHECK-LABEL: atomicrmw_min_i32_aligned_release:4647; CHECK:    ldsminl w1, w0, [x0]4648    %r = atomicrmw min ptr %ptr, i32 %value release, align 44649    ret i32 %r4650}4651 4652define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4653; CHECK-LABEL: atomicrmw_min_i32_aligned_acq_rel:4654; CHECK:    ldsminal w1, w0, [x0]4655    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 44656    ret i32 %r4657}4658 4659define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4660; CHECK-LABEL: atomicrmw_min_i32_aligned_seq_cst:4661; CHECK:    ldsminal w1, w0, [x0]4662    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 44663    ret i32 %r4664}4665 4666define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) {4667; CHECK-LABEL: atomicrmw_min_i64_aligned_monotonic:4668; CHECK:    ldsmin x1, x0, [x0]4669    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 84670    ret i64 %r4671}4672 4673define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) {4674; CHECK-LABEL: atomicrmw_min_i64_aligned_acquire:4675; CHECK:    ldsmina x1, x0, [x0]4676    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 84677    ret i64 %r4678}4679 4680define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) {4681; CHECK-LABEL: atomicrmw_min_i64_aligned_release:4682; CHECK:    ldsminl x1, x0, [x0]4683    %r = atomicrmw min ptr %ptr, i64 %value release, align 84684    ret i64 %r4685}4686 4687define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4688; CHECK-LABEL: atomicrmw_min_i64_aligned_acq_rel:4689; CHECK:    ldsminal x1, x0, [x0]4690    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 84691    ret i64 %r4692}4693 4694define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4695; CHECK-LABEL: atomicrmw_min_i64_aligned_seq_cst:4696; CHECK:    ldsminal x1, x0, [x0]4697    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 84698    ret i64 %r4699}4700 4701define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) {4702; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic:4703; -O0:    subs x9, x9, x124704; -O0:    subs x11, x11, x104705; -O0:    subs x13, x13, x104706; -O0:    csel w11, w9, w11, eq4707; -O0:    ands w13, w11, #0x14708; -O0:    csel x2, x9, x12, ne4709; -O0:    ands w11, w11, #0x14710; -O0:    csel x9, x9, x10, ne4711; -O0:    casp x0, x1, x2, x3, [x8]4712; -O0:    eor x8, x10, x84713; -O0:    eor x11, x9, x114714; -O0:    orr x8, x8, x114715; -O0:    subs x8, x8, #04716;4717; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic:4718; -O1:    ldp x4, x5, [x0]4719; -O1:    cmp x2, x44720; -O1:    csel x9, x7, x3, ge4721; -O1:    csel x8, x4, x2, ge4722; -O1:    casp x4, x5, x8, x9, [x0]4723; -O1:    cmp x5, x74724; -O1:    ccmp x4, x6, #0, eq4725    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 164726    ret i128 %r4727}4728 4729define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) {4730; -O0-LABEL: atomicrmw_min_i128_aligned_acquire:4731; -O0:    subs x9, x9, x124732; -O0:    subs x11, x11, x104733; -O0:    subs x13, x13, x104734; -O0:    csel w11, w9, w11, eq4735; -O0:    ands w13, w11, #0x14736; -O0:    csel x2, x9, x12, ne4737; -O0:    ands w11, w11, #0x14738; -O0:    csel x9, x9, x10, ne4739; -O0:    caspa x0, x1, x2, x3, [x8]4740; -O0:    eor x8, x10, x84741; -O0:    eor x11, x9, x114742; -O0:    orr x8, x8, x114743; -O0:    subs x8, x8, #04744;4745; -O1-LABEL: atomicrmw_min_i128_aligned_acquire:4746; -O1:    ldp x4, x5, [x0]4747; -O1:    cmp x2, x44748; -O1:    csel x9, x7, x3, ge4749; -O1:    csel x8, x4, x2, ge4750; -O1:    caspa x4, x5, x8, x9, [x0]4751; -O1:    cmp x5, x74752; -O1:    ccmp x4, x6, #0, eq4753    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 164754    ret i128 %r4755}4756 4757define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) {4758; -O0-LABEL: atomicrmw_min_i128_aligned_release:4759; -O0:    subs x9, x9, x124760; -O0:    subs x11, x11, x104761; -O0:    subs x13, x13, x104762; -O0:    csel w11, w9, w11, eq4763; -O0:    ands w13, w11, #0x14764; -O0:    csel x2, x9, x12, ne4765; -O0:    ands w11, w11, #0x14766; -O0:    csel x9, x9, x10, ne4767; -O0:    caspl x0, x1, x2, x3, [x8]4768; -O0:    eor x8, x10, x84769; -O0:    eor x11, x9, x114770; -O0:    orr x8, x8, x114771; -O0:    subs x8, x8, #04772;4773; -O1-LABEL: atomicrmw_min_i128_aligned_release:4774; -O1:    ldp x4, x5, [x0]4775; -O1:    cmp x2, x44776; -O1:    csel x9, x7, x3, ge4777; -O1:    csel x8, x4, x2, ge4778; -O1:    caspl x4, x5, x8, x9, [x0]4779; -O1:    cmp x5, x74780; -O1:    ccmp x4, x6, #0, eq4781    %r = atomicrmw min ptr %ptr, i128 %value release, align 164782    ret i128 %r4783}4784 4785define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4786; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel:4787; -O0:    subs x9, x9, x124788; -O0:    subs x11, x11, x104789; -O0:    subs x13, x13, x104790; -O0:    csel w11, w9, w11, eq4791; -O0:    ands w13, w11, #0x14792; -O0:    csel x2, x9, x12, ne4793; -O0:    ands w11, w11, #0x14794; -O0:    csel x9, x9, x10, ne4795; -O0:    caspal x0, x1, x2, x3, [x8]4796; -O0:    eor x8, x10, x84797; -O0:    eor x11, x9, x114798; -O0:    orr x8, x8, x114799; -O0:    subs x8, x8, #04800;4801; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel:4802; -O1:    ldp x4, x5, [x0]4803; -O1:    cmp x2, x44804; -O1:    csel x9, x7, x3, ge4805; -O1:    csel x8, x4, x2, ge4806; -O1:    caspal x4, x5, x8, x9, [x0]4807; -O1:    cmp x5, x74808; -O1:    ccmp x4, x6, #0, eq4809    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 164810    ret i128 %r4811}4812 4813define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4814; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst:4815; -O0:    subs x9, x9, x124816; -O0:    subs x11, x11, x104817; -O0:    subs x13, x13, x104818; -O0:    csel w11, w9, w11, eq4819; -O0:    ands w13, w11, #0x14820; -O0:    csel x2, x9, x12, ne4821; -O0:    ands w11, w11, #0x14822; -O0:    csel x9, x9, x10, ne4823; -O0:    caspal x0, x1, x2, x3, [x8]4824; -O0:    eor x8, x10, x84825; -O0:    eor x11, x9, x114826; -O0:    orr x8, x8, x114827; -O0:    subs x8, x8, #04828;4829; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst:4830; -O1:    ldp x4, x5, [x0]4831; -O1:    cmp x2, x44832; -O1:    csel x9, x7, x3, ge4833; -O1:    csel x8, x4, x2, ge4834; -O1:    caspal x4, x5, x8, x9, [x0]4835; -O1:    cmp x5, x74836; -O1:    ccmp x4, x6, #0, eq4837    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 164838    ret i128 %r4839}4840 4841define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4842; CHECK-LABEL: atomicrmw_min_i8_unaligned_monotonic:4843; CHECK:    ldsminb w1, w0, [x0]4844    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14845    ret i8 %r4846}4847 4848define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) {4849; CHECK-LABEL: atomicrmw_min_i8_unaligned_acquire:4850; CHECK:    ldsminab w1, w0, [x0]4851    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14852    ret i8 %r4853}4854 4855define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) {4856; CHECK-LABEL: atomicrmw_min_i8_unaligned_release:4857; CHECK:    ldsminlb w1, w0, [x0]4858    %r = atomicrmw min ptr %ptr, i8 %value release, align 14859    ret i8 %r4860}4861 4862define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4863; CHECK-LABEL: atomicrmw_min_i8_unaligned_acq_rel:4864; CHECK:    ldsminalb w1, w0, [x0]4865    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 14866    ret i8 %r4867}4868 4869define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4870; CHECK-LABEL: atomicrmw_min_i8_unaligned_seq_cst:4871; CHECK:    ldsminalb w1, w0, [x0]4872    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 14873    ret i8 %r4874}4875 4876define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4877; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic:4878; -O0:    sxth w10, w94879; -O0:    subs w10, w10, w8, sxth4880; -O0:    csel w8, w9, w8, le4881; -O0:    bl __atomic_compare_exchange4882;4883; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic:4884; -O1:    sxth w8, w04885; -O1:    cmp w8, w20, sxth4886; -O1:    csel w8, w0, w20, le4887; -O1:    bl __atomic_compare_exchange4888    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 14889    ret i16 %r4890}4891 4892define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) {4893; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire:4894; -O0:    sxth w10, w94895; -O0:    subs w10, w10, w8, sxth4896; -O0:    csel w8, w9, w8, le4897; -O0:    bl __atomic_compare_exchange4898;4899; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire:4900; -O1:    sxth w8, w04901; -O1:    cmp w8, w20, sxth4902; -O1:    csel w8, w0, w20, le4903; -O1:    bl __atomic_compare_exchange4904    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 14905    ret i16 %r4906}4907 4908define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) {4909; -O0-LABEL: atomicrmw_min_i16_unaligned_release:4910; -O0:    sxth w10, w94911; -O0:    subs w10, w10, w8, sxth4912; -O0:    csel w8, w9, w8, le4913; -O0:    bl __atomic_compare_exchange4914;4915; -O1-LABEL: atomicrmw_min_i16_unaligned_release:4916; -O1:    sxth w8, w04917; -O1:    cmp w8, w20, sxth4918; -O1:    csel w8, w0, w20, le4919; -O1:    bl __atomic_compare_exchange4920    %r = atomicrmw min ptr %ptr, i16 %value release, align 14921    ret i16 %r4922}4923 4924define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4925; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel:4926; -O0:    sxth w10, w94927; -O0:    subs w10, w10, w8, sxth4928; -O0:    csel w8, w9, w8, le4929; -O0:    bl __atomic_compare_exchange4930;4931; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel:4932; -O1:    sxth w8, w04933; -O1:    cmp w8, w20, sxth4934; -O1:    csel w8, w0, w20, le4935; -O1:    bl __atomic_compare_exchange4936    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 14937    ret i16 %r4938}4939 4940define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4941; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst:4942; -O0:    sxth w10, w94943; -O0:    subs w10, w10, w8, sxth4944; -O0:    csel w8, w9, w8, le4945; -O0:    bl __atomic_compare_exchange4946;4947; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst:4948; -O1:    sxth w8, w04949; -O1:    cmp w8, w20, sxth4950; -O1:    csel w8, w0, w20, le4951; -O1:    bl __atomic_compare_exchange4952    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 14953    ret i16 %r4954}4955 4956define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4957; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic:4958; -O0:    subs w10, w9, w84959; -O0:    csel w8, w9, w8, le4960; -O0:    bl __atomic_compare_exchange4961;4962; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic:4963; -O1:    cmp w0, w204964; -O1:    csel w8, w0, w20, le4965; -O1:    bl __atomic_compare_exchange4966    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 14967    ret i32 %r4968}4969 4970define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) {4971; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire:4972; -O0:    subs w10, w9, w84973; -O0:    csel w8, w9, w8, le4974; -O0:    bl __atomic_compare_exchange4975;4976; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire:4977; -O1:    cmp w0, w204978; -O1:    csel w8, w0, w20, le4979; -O1:    bl __atomic_compare_exchange4980    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 14981    ret i32 %r4982}4983 4984define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) {4985; -O0-LABEL: atomicrmw_min_i32_unaligned_release:4986; -O0:    subs w10, w9, w84987; -O0:    csel w8, w9, w8, le4988; -O0:    bl __atomic_compare_exchange4989;4990; -O1-LABEL: atomicrmw_min_i32_unaligned_release:4991; -O1:    cmp w0, w204992; -O1:    csel w8, w0, w20, le4993; -O1:    bl __atomic_compare_exchange4994    %r = atomicrmw min ptr %ptr, i32 %value release, align 14995    ret i32 %r4996}4997 4998define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4999; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel:5000; -O0:    subs w10, w9, w85001; -O0:    csel w8, w9, w8, le5002; -O0:    bl __atomic_compare_exchange5003;5004; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel:5005; -O1:    cmp w0, w205006; -O1:    csel w8, w0, w20, le5007; -O1:    bl __atomic_compare_exchange5008    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 15009    ret i32 %r5010}5011 5012define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5013; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst:5014; -O0:    subs w10, w9, w85015; -O0:    csel w8, w9, w8, le5016; -O0:    bl __atomic_compare_exchange5017;5018; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst:5019; -O1:    cmp w0, w205020; -O1:    csel w8, w0, w20, le5021; -O1:    bl __atomic_compare_exchange5022    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 15023    ret i32 %r5024}5025 5026define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5027; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic:5028; -O0:    subs x10, x9, x85029; -O0:    csel x8, x9, x8, le5030; -O0:    bl __atomic_compare_exchange5031;5032; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic:5033; -O1:    cmp x0, x205034; -O1:    csel x8, x0, x20, le5035; -O1:    bl __atomic_compare_exchange5036    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 15037    ret i64 %r5038}5039 5040define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) {5041; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire:5042; -O0:    subs x10, x9, x85043; -O0:    csel x8, x9, x8, le5044; -O0:    bl __atomic_compare_exchange5045;5046; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire:5047; -O1:    cmp x0, x205048; -O1:    csel x8, x0, x20, le5049; -O1:    bl __atomic_compare_exchange5050    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 15051    ret i64 %r5052}5053 5054define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) {5055; -O0-LABEL: atomicrmw_min_i64_unaligned_release:5056; -O0:    subs x10, x9, x85057; -O0:    csel x8, x9, x8, le5058; -O0:    bl __atomic_compare_exchange5059;5060; -O1-LABEL: atomicrmw_min_i64_unaligned_release:5061; -O1:    cmp x0, x205062; -O1:    csel x8, x0, x20, le5063; -O1:    bl __atomic_compare_exchange5064    %r = atomicrmw min ptr %ptr, i64 %value release, align 15065    ret i64 %r5066}5067 5068define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {5069; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel:5070; -O0:    subs x10, x9, x85071; -O0:    csel x8, x9, x8, le5072; -O0:    bl __atomic_compare_exchange5073;5074; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel:5075; -O1:    cmp x0, x205076; -O1:    csel x8, x0, x20, le5077; -O1:    bl __atomic_compare_exchange5078    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 15079    ret i64 %r5080}5081 5082define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {5083; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst:5084; -O0:    subs x10, x9, x85085; -O0:    csel x8, x9, x8, le5086; -O0:    bl __atomic_compare_exchange5087;5088; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst:5089; -O1:    cmp x0, x205090; -O1:    csel x8, x0, x20, le5091; -O1:    bl __atomic_compare_exchange5092    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 15093    ret i64 %r5094}5095 5096define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5097; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic:5098; -O0:    subs x8, x8, x95099; -O0:    subs x11, x11, x105100; -O0:    subs x12, x12, x105101; -O0:    csel w11, w8, w11, eq5102; -O0:    ands w12, w11, #0x15103; -O0:    csel x9, x8, x9, ne5104; -O0:    ands w11, w11, #0x15105; -O0:    csel x8, x8, x10, ne5106; -O0:    bl __atomic_compare_exchange5107;5108; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic:5109; -O1:    ldp x0, x1, [x0]5110; -O1:    cmp x21, x05111; -O1:    csel x8, x1, x19, ge5112; -O1:    csel x9, x0, x21, ge5113; -O1:    bl __atomic_compare_exchange5114    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 15115    ret i128 %r5116}5117 5118define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) {5119; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire:5120; -O0:    subs x8, x8, x95121; -O0:    subs x11, x11, x105122; -O0:    subs x12, x12, x105123; -O0:    csel w11, w8, w11, eq5124; -O0:    ands w12, w11, #0x15125; -O0:    csel x9, x8, x9, ne5126; -O0:    ands w11, w11, #0x15127; -O0:    csel x8, x8, x10, ne5128; -O0:    bl __atomic_compare_exchange5129;5130; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire:5131; -O1:    ldp x0, x1, [x0]5132; -O1:    cmp x21, x05133; -O1:    csel x8, x1, x19, ge5134; -O1:    csel x9, x0, x21, ge5135; -O1:    bl __atomic_compare_exchange5136    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 15137    ret i128 %r5138}5139 5140define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) {5141; -O0-LABEL: atomicrmw_min_i128_unaligned_release:5142; -O0:    subs x8, x8, x95143; -O0:    subs x11, x11, x105144; -O0:    subs x12, x12, x105145; -O0:    csel w11, w8, w11, eq5146; -O0:    ands w12, w11, #0x15147; -O0:    csel x9, x8, x9, ne5148; -O0:    ands w11, w11, #0x15149; -O0:    csel x8, x8, x10, ne5150; -O0:    bl __atomic_compare_exchange5151;5152; -O1-LABEL: atomicrmw_min_i128_unaligned_release:5153; -O1:    ldp x0, x1, [x0]5154; -O1:    cmp x21, x05155; -O1:    csel x8, x1, x19, ge5156; -O1:    csel x9, x0, x21, ge5157; -O1:    bl __atomic_compare_exchange5158    %r = atomicrmw min ptr %ptr, i128 %value release, align 15159    ret i128 %r5160}5161 5162define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5163; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5164; -O0:    subs x8, x8, x95165; -O0:    subs x11, x11, x105166; -O0:    subs x12, x12, x105167; -O0:    csel w11, w8, w11, eq5168; -O0:    ands w12, w11, #0x15169; -O0:    csel x9, x8, x9, ne5170; -O0:    ands w11, w11, #0x15171; -O0:    csel x8, x8, x10, ne5172; -O0:    bl __atomic_compare_exchange5173;5174; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5175; -O1:    ldp x0, x1, [x0]5176; -O1:    cmp x21, x05177; -O1:    csel x8, x1, x19, ge5178; -O1:    csel x9, x0, x21, ge5179; -O1:    bl __atomic_compare_exchange5180    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 15181    ret i128 %r5182}5183 5184define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5185; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5186; -O0:    subs x8, x8, x95187; -O0:    subs x11, x11, x105188; -O0:    subs x12, x12, x105189; -O0:    csel w11, w8, w11, eq5190; -O0:    ands w12, w11, #0x15191; -O0:    csel x9, x8, x9, ne5192; -O0:    ands w11, w11, #0x15193; -O0:    csel x8, x8, x10, ne5194; -O0:    bl __atomic_compare_exchange5195;5196; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5197; -O1:    ldp x0, x1, [x0]5198; -O1:    cmp x21, x05199; -O1:    csel x8, x1, x19, ge5200; -O1:    csel x9, x0, x21, ge5201; -O1:    bl __atomic_compare_exchange5202    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 15203    ret i128 %r5204}5205 5206define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) {5207; CHECK-LABEL: atomicrmw_umax_i8_aligned_monotonic:5208; CHECK:    ldumaxb w1, w0, [x0]5209    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15210    ret i8 %r5211}5212 5213define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) {5214; CHECK-LABEL: atomicrmw_umax_i8_aligned_acquire:5215; CHECK:    ldumaxab w1, w0, [x0]5216    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15217    ret i8 %r5218}5219 5220define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) {5221; CHECK-LABEL: atomicrmw_umax_i8_aligned_release:5222; CHECK:    ldumaxlb w1, w0, [x0]5223    %r = atomicrmw umax ptr %ptr, i8 %value release, align 15224    ret i8 %r5225}5226 5227define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5228; CHECK-LABEL: atomicrmw_umax_i8_aligned_acq_rel:5229; CHECK:    ldumaxalb w1, w0, [x0]5230    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15231    ret i8 %r5232}5233 5234define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5235; CHECK-LABEL: atomicrmw_umax_i8_aligned_seq_cst:5236; CHECK:    ldumaxalb w1, w0, [x0]5237    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15238    ret i8 %r5239}5240 5241define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) {5242; CHECK-LABEL: atomicrmw_umax_i16_aligned_monotonic:5243; CHECK:    ldumaxh w1, w0, [x0]5244    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 25245    ret i16 %r5246}5247 5248define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) {5249; CHECK-LABEL: atomicrmw_umax_i16_aligned_acquire:5250; CHECK:    ldumaxah w1, w0, [x0]5251    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 25252    ret i16 %r5253}5254 5255define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) {5256; CHECK-LABEL: atomicrmw_umax_i16_aligned_release:5257; CHECK:    ldumaxlh w1, w0, [x0]5258    %r = atomicrmw umax ptr %ptr, i16 %value release, align 25259    ret i16 %r5260}5261 5262define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5263; CHECK-LABEL: atomicrmw_umax_i16_aligned_acq_rel:5264; CHECK:    ldumaxalh w1, w0, [x0]5265    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 25266    ret i16 %r5267}5268 5269define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5270; CHECK-LABEL: atomicrmw_umax_i16_aligned_seq_cst:5271; CHECK:    ldumaxalh w1, w0, [x0]5272    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 25273    ret i16 %r5274}5275 5276define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) {5277; CHECK-LABEL: atomicrmw_umax_i32_aligned_monotonic:5278; CHECK:    ldumax w1, w0, [x0]5279    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 45280    ret i32 %r5281}5282 5283define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) {5284; CHECK-LABEL: atomicrmw_umax_i32_aligned_acquire:5285; CHECK:    ldumaxa w1, w0, [x0]5286    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 45287    ret i32 %r5288}5289 5290define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) {5291; CHECK-LABEL: atomicrmw_umax_i32_aligned_release:5292; CHECK:    ldumaxl w1, w0, [x0]5293    %r = atomicrmw umax ptr %ptr, i32 %value release, align 45294    ret i32 %r5295}5296 5297define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5298; CHECK-LABEL: atomicrmw_umax_i32_aligned_acq_rel:5299; CHECK:    ldumaxal w1, w0, [x0]5300    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 45301    ret i32 %r5302}5303 5304define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5305; CHECK-LABEL: atomicrmw_umax_i32_aligned_seq_cst:5306; CHECK:    ldumaxal w1, w0, [x0]5307    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 45308    ret i32 %r5309}5310 5311define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) {5312; CHECK-LABEL: atomicrmw_umax_i64_aligned_monotonic:5313; CHECK:    ldumax x1, x0, [x0]5314    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 85315    ret i64 %r5316}5317 5318define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) {5319; CHECK-LABEL: atomicrmw_umax_i64_aligned_acquire:5320; CHECK:    ldumaxa x1, x0, [x0]5321    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 85322    ret i64 %r5323}5324 5325define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) {5326; CHECK-LABEL: atomicrmw_umax_i64_aligned_release:5327; CHECK:    ldumaxl x1, x0, [x0]5328    %r = atomicrmw umax ptr %ptr, i64 %value release, align 85329    ret i64 %r5330}5331 5332define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5333; CHECK-LABEL: atomicrmw_umax_i64_aligned_acq_rel:5334; CHECK:    ldumaxal x1, x0, [x0]5335    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 85336    ret i64 %r5337}5338 5339define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5340; CHECK-LABEL: atomicrmw_umax_i64_aligned_seq_cst:5341; CHECK:    ldumaxal x1, x0, [x0]5342    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 85343    ret i64 %r5344}5345 5346define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) {5347; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic:5348; -O0:    subs x9, x9, x125349; -O0:    subs x11, x11, x105350; -O0:    subs x13, x13, x105351; -O0:    csel w11, w9, w11, eq5352; -O0:    ands w13, w11, #0x15353; -O0:    csel x2, x9, x12, ne5354; -O0:    ands w11, w11, #0x15355; -O0:    csel x9, x9, x10, ne5356; -O0:    casp x0, x1, x2, x3, [x8]5357; -O0:    eor x8, x10, x85358; -O0:    eor x11, x9, x115359; -O0:    orr x8, x8, x115360; -O0:    subs x8, x8, #05361;5362; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic:5363; -O1:    ldp x4, x5, [x0]5364; -O1:    cmp x2, x45365; -O1:    csel x9, x7, x3, lo5366; -O1:    csel x8, x4, x2, lo5367; -O1:    casp x4, x5, x8, x9, [x0]5368; -O1:    cmp x5, x75369; -O1:    ccmp x4, x6, #0, eq5370    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 165371    ret i128 %r5372}5373 5374define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) {5375; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire:5376; -O0:    subs x9, x9, x125377; -O0:    subs x11, x11, x105378; -O0:    subs x13, x13, x105379; -O0:    csel w11, w9, w11, eq5380; -O0:    ands w13, w11, #0x15381; -O0:    csel x2, x9, x12, ne5382; -O0:    ands w11, w11, #0x15383; -O0:    csel x9, x9, x10, ne5384; -O0:    caspa x0, x1, x2, x3, [x8]5385; -O0:    eor x8, x10, x85386; -O0:    eor x11, x9, x115387; -O0:    orr x8, x8, x115388; -O0:    subs x8, x8, #05389;5390; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire:5391; -O1:    ldp x4, x5, [x0]5392; -O1:    cmp x2, x45393; -O1:    csel x9, x7, x3, lo5394; -O1:    csel x8, x4, x2, lo5395; -O1:    caspa x4, x5, x8, x9, [x0]5396; -O1:    cmp x5, x75397; -O1:    ccmp x4, x6, #0, eq5398    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 165399    ret i128 %r5400}5401 5402define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) {5403; -O0-LABEL: atomicrmw_umax_i128_aligned_release:5404; -O0:    subs x9, x9, x125405; -O0:    subs x11, x11, x105406; -O0:    subs x13, x13, x105407; -O0:    csel w11, w9, w11, eq5408; -O0:    ands w13, w11, #0x15409; -O0:    csel x2, x9, x12, ne5410; -O0:    ands w11, w11, #0x15411; -O0:    csel x9, x9, x10, ne5412; -O0:    caspl x0, x1, x2, x3, [x8]5413; -O0:    eor x8, x10, x85414; -O0:    eor x11, x9, x115415; -O0:    orr x8, x8, x115416; -O0:    subs x8, x8, #05417;5418; -O1-LABEL: atomicrmw_umax_i128_aligned_release:5419; -O1:    ldp x4, x5, [x0]5420; -O1:    cmp x2, x45421; -O1:    csel x9, x7, x3, lo5422; -O1:    csel x8, x4, x2, lo5423; -O1:    caspl x4, x5, x8, x9, [x0]5424; -O1:    cmp x5, x75425; -O1:    ccmp x4, x6, #0, eq5426    %r = atomicrmw umax ptr %ptr, i128 %value release, align 165427    ret i128 %r5428}5429 5430define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5431; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel:5432; -O0:    subs x9, x9, x125433; -O0:    subs x11, x11, x105434; -O0:    subs x13, x13, x105435; -O0:    csel w11, w9, w11, eq5436; -O0:    ands w13, w11, #0x15437; -O0:    csel x2, x9, x12, ne5438; -O0:    ands w11, w11, #0x15439; -O0:    csel x9, x9, x10, ne5440; -O0:    caspal x0, x1, x2, x3, [x8]5441; -O0:    eor x8, x10, x85442; -O0:    eor x11, x9, x115443; -O0:    orr x8, x8, x115444; -O0:    subs x8, x8, #05445;5446; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel:5447; -O1:    ldp x4, x5, [x0]5448; -O1:    cmp x2, x45449; -O1:    csel x9, x7, x3, lo5450; -O1:    csel x8, x4, x2, lo5451; -O1:    caspal x4, x5, x8, x9, [x0]5452; -O1:    cmp x5, x75453; -O1:    ccmp x4, x6, #0, eq5454    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 165455    ret i128 %r5456}5457 5458define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5459; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst:5460; -O0:    subs x9, x9, x125461; -O0:    subs x11, x11, x105462; -O0:    subs x13, x13, x105463; -O0:    csel w11, w9, w11, eq5464; -O0:    ands w13, w11, #0x15465; -O0:    csel x2, x9, x12, ne5466; -O0:    ands w11, w11, #0x15467; -O0:    csel x9, x9, x10, ne5468; -O0:    caspal x0, x1, x2, x3, [x8]5469; -O0:    eor x8, x10, x85470; -O0:    eor x11, x9, x115471; -O0:    orr x8, x8, x115472; -O0:    subs x8, x8, #05473;5474; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst:5475; -O1:    ldp x4, x5, [x0]5476; -O1:    cmp x2, x45477; -O1:    csel x9, x7, x3, lo5478; -O1:    csel x8, x4, x2, lo5479; -O1:    caspal x4, x5, x8, x9, [x0]5480; -O1:    cmp x5, x75481; -O1:    ccmp x4, x6, #0, eq5482    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 165483    ret i128 %r5484}5485 5486define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5487; CHECK-LABEL: atomicrmw_umax_i8_unaligned_monotonic:5488; CHECK:    ldumaxb w1, w0, [x0]5489    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15490    ret i8 %r5491}5492 5493define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) {5494; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acquire:5495; CHECK:    ldumaxab w1, w0, [x0]5496    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15497    ret i8 %r5498}5499 5500define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) {5501; CHECK-LABEL: atomicrmw_umax_i8_unaligned_release:5502; CHECK:    ldumaxlb w1, w0, [x0]5503    %r = atomicrmw umax ptr %ptr, i8 %value release, align 15504    ret i8 %r5505}5506 5507define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5508; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:5509; CHECK:    ldumaxalb w1, w0, [x0]5510    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15511    ret i8 %r5512}5513 5514define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5515; CHECK-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:5516; CHECK:    ldumaxalb w1, w0, [x0]5517    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15518    ret i8 %r5519}5520 5521define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5522; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic:5523; -O0:    subs w10, w10, w8, uxth5524; -O0:    csel w8, w9, w8, hi5525; -O0:    bl __atomic_compare_exchange5526;5527; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic:5528; -O1:    and w8, w0, #0xffff5529; -O1:    cmp w8, w20, uxth5530; -O1:    csel w8, w0, w20, hi5531; -O1:    bl __atomic_compare_exchange5532    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 15533    ret i16 %r5534}5535 5536define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) {5537; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire:5538; -O0:    subs w10, w10, w8, uxth5539; -O0:    csel w8, w9, w8, hi5540; -O0:    bl __atomic_compare_exchange5541;5542; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire:5543; -O1:    and w8, w0, #0xffff5544; -O1:    cmp w8, w20, uxth5545; -O1:    csel w8, w0, w20, hi5546; -O1:    bl __atomic_compare_exchange5547    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 15548    ret i16 %r5549}5550 5551define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) {5552; -O0-LABEL: atomicrmw_umax_i16_unaligned_release:5553; -O0:    subs w10, w10, w8, uxth5554; -O0:    csel w8, w9, w8, hi5555; -O0:    bl __atomic_compare_exchange5556;5557; -O1-LABEL: atomicrmw_umax_i16_unaligned_release:5558; -O1:    and w8, w0, #0xffff5559; -O1:    cmp w8, w20, uxth5560; -O1:    csel w8, w0, w20, hi5561; -O1:    bl __atomic_compare_exchange5562    %r = atomicrmw umax ptr %ptr, i16 %value release, align 15563    ret i16 %r5564}5565 5566define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5567; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:5568; -O0:    subs w10, w10, w8, uxth5569; -O0:    csel w8, w9, w8, hi5570; -O0:    bl __atomic_compare_exchange5571;5572; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:5573; -O1:    and w8, w0, #0xffff5574; -O1:    cmp w8, w20, uxth5575; -O1:    csel w8, w0, w20, hi5576; -O1:    bl __atomic_compare_exchange5577    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 15578    ret i16 %r5579}5580 5581define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5582; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:5583; -O0:    subs w10, w10, w8, uxth5584; -O0:    csel w8, w9, w8, hi5585; -O0:    bl __atomic_compare_exchange5586;5587; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:5588; -O1:    and w8, w0, #0xffff5589; -O1:    cmp w8, w20, uxth5590; -O1:    csel w8, w0, w20, hi5591; -O1:    bl __atomic_compare_exchange5592    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 15593    ret i16 %r5594}5595 5596define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5597; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic:5598; -O0:    subs w10, w9, w85599; -O0:    csel w8, w9, w8, hi5600; -O0:    bl __atomic_compare_exchange5601;5602; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic:5603; -O1:    cmp w0, w205604; -O1:    csel w8, w0, w20, hi5605; -O1:    bl __atomic_compare_exchange5606    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 15607    ret i32 %r5608}5609 5610define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) {5611; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire:5612; -O0:    subs w10, w9, w85613; -O0:    csel w8, w9, w8, hi5614; -O0:    bl __atomic_compare_exchange5615;5616; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire:5617; -O1:    cmp w0, w205618; -O1:    csel w8, w0, w20, hi5619; -O1:    bl __atomic_compare_exchange5620    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 15621    ret i32 %r5622}5623 5624define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) {5625; -O0-LABEL: atomicrmw_umax_i32_unaligned_release:5626; -O0:    subs w10, w9, w85627; -O0:    csel w8, w9, w8, hi5628; -O0:    bl __atomic_compare_exchange5629;5630; -O1-LABEL: atomicrmw_umax_i32_unaligned_release:5631; -O1:    cmp w0, w205632; -O1:    csel w8, w0, w20, hi5633; -O1:    bl __atomic_compare_exchange5634    %r = atomicrmw umax ptr %ptr, i32 %value release, align 15635    ret i32 %r5636}5637 5638define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5639; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:5640; -O0:    subs w10, w9, w85641; -O0:    csel w8, w9, w8, hi5642; -O0:    bl __atomic_compare_exchange5643;5644; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:5645; -O1:    cmp w0, w205646; -O1:    csel w8, w0, w20, hi5647; -O1:    bl __atomic_compare_exchange5648    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 15649    ret i32 %r5650}5651 5652define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5653; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:5654; -O0:    subs w10, w9, w85655; -O0:    csel w8, w9, w8, hi5656; -O0:    bl __atomic_compare_exchange5657;5658; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:5659; -O1:    cmp w0, w205660; -O1:    csel w8, w0, w20, hi5661; -O1:    bl __atomic_compare_exchange5662    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 15663    ret i32 %r5664}5665 5666define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5667; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic:5668; -O0:    subs x10, x9, x85669; -O0:    csel x8, x9, x8, hi5670; -O0:    bl __atomic_compare_exchange5671;5672; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic:5673; -O1:    cmp x0, x205674; -O1:    csel x8, x0, x20, hi5675; -O1:    bl __atomic_compare_exchange5676    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 15677    ret i64 %r5678}5679 5680define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) {5681; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire:5682; -O0:    subs x10, x9, x85683; -O0:    csel x8, x9, x8, hi5684; -O0:    bl __atomic_compare_exchange5685;5686; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire:5687; -O1:    cmp x0, x205688; -O1:    csel x8, x0, x20, hi5689; -O1:    bl __atomic_compare_exchange5690    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 15691    ret i64 %r5692}5693 5694define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) {5695; -O0-LABEL: atomicrmw_umax_i64_unaligned_release:5696; -O0:    subs x10, x9, x85697; -O0:    csel x8, x9, x8, hi5698; -O0:    bl __atomic_compare_exchange5699;5700; -O1-LABEL: atomicrmw_umax_i64_unaligned_release:5701; -O1:    cmp x0, x205702; -O1:    csel x8, x0, x20, hi5703; -O1:    bl __atomic_compare_exchange5704    %r = atomicrmw umax ptr %ptr, i64 %value release, align 15705    ret i64 %r5706}5707 5708define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {5709; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:5710; -O0:    subs x10, x9, x85711; -O0:    csel x8, x9, x8, hi5712; -O0:    bl __atomic_compare_exchange5713;5714; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:5715; -O1:    cmp x0, x205716; -O1:    csel x8, x0, x20, hi5717; -O1:    bl __atomic_compare_exchange5718    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 15719    ret i64 %r5720}5721 5722define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {5723; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:5724; -O0:    subs x10, x9, x85725; -O0:    csel x8, x9, x8, hi5726; -O0:    bl __atomic_compare_exchange5727;5728; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:5729; -O1:    cmp x0, x205730; -O1:    csel x8, x0, x20, hi5731; -O1:    bl __atomic_compare_exchange5732    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 15733    ret i64 %r5734}5735 5736define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5737; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic:5738; -O0:    subs x8, x8, x95739; -O0:    subs x11, x11, x105740; -O0:    subs x12, x12, x105741; -O0:    csel w11, w8, w11, eq5742; -O0:    ands w12, w11, #0x15743; -O0:    csel x9, x8, x9, ne5744; -O0:    ands w11, w11, #0x15745; -O0:    csel x8, x8, x10, ne5746; -O0:    bl __atomic_compare_exchange5747;5748; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic:5749; -O1:    ldp x0, x1, [x0]5750; -O1:    cmp x21, x05751; -O1:    csel x8, x1, x19, lo5752; -O1:    csel x9, x0, x21, lo5753; -O1:    bl __atomic_compare_exchange5754    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 15755    ret i128 %r5756}5757 5758define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) {5759; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire:5760; -O0:    subs x8, x8, x95761; -O0:    subs x11, x11, x105762; -O0:    subs x12, x12, x105763; -O0:    csel w11, w8, w11, eq5764; -O0:    ands w12, w11, #0x15765; -O0:    csel x9, x8, x9, ne5766; -O0:    ands w11, w11, #0x15767; -O0:    csel x8, x8, x10, ne5768; -O0:    bl __atomic_compare_exchange5769;5770; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire:5771; -O1:    ldp x0, x1, [x0]5772; -O1:    cmp x21, x05773; -O1:    csel x8, x1, x19, lo5774; -O1:    csel x9, x0, x21, lo5775; -O1:    bl __atomic_compare_exchange5776    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 15777    ret i128 %r5778}5779 5780define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) {5781; -O0-LABEL: atomicrmw_umax_i128_unaligned_release:5782; -O0:    subs x8, x8, x95783; -O0:    subs x11, x11, x105784; -O0:    subs x12, x12, x105785; -O0:    csel w11, w8, w11, eq5786; -O0:    ands w12, w11, #0x15787; -O0:    csel x9, x8, x9, ne5788; -O0:    ands w11, w11, #0x15789; -O0:    csel x8, x8, x10, ne5790; -O0:    bl __atomic_compare_exchange5791;5792; -O1-LABEL: atomicrmw_umax_i128_unaligned_release:5793; -O1:    ldp x0, x1, [x0]5794; -O1:    cmp x21, x05795; -O1:    csel x8, x1, x19, lo5796; -O1:    csel x9, x0, x21, lo5797; -O1:    bl __atomic_compare_exchange5798    %r = atomicrmw umax ptr %ptr, i128 %value release, align 15799    ret i128 %r5800}5801 5802define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5803; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:5804; -O0:    subs x8, x8, x95805; -O0:    subs x11, x11, x105806; -O0:    subs x12, x12, x105807; -O0:    csel w11, w8, w11, eq5808; -O0:    ands w12, w11, #0x15809; -O0:    csel x9, x8, x9, ne5810; -O0:    ands w11, w11, #0x15811; -O0:    csel x8, x8, x10, ne5812; -O0:    bl __atomic_compare_exchange5813;5814; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:5815; -O1:    ldp x0, x1, [x0]5816; -O1:    cmp x21, x05817; -O1:    csel x8, x1, x19, lo5818; -O1:    csel x9, x0, x21, lo5819; -O1:    bl __atomic_compare_exchange5820    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 15821    ret i128 %r5822}5823 5824define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5825; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:5826; -O0:    subs x8, x8, x95827; -O0:    subs x11, x11, x105828; -O0:    subs x12, x12, x105829; -O0:    csel w11, w8, w11, eq5830; -O0:    ands w12, w11, #0x15831; -O0:    csel x9, x8, x9, ne5832; -O0:    ands w11, w11, #0x15833; -O0:    csel x8, x8, x10, ne5834; -O0:    bl __atomic_compare_exchange5835;5836; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:5837; -O1:    ldp x0, x1, [x0]5838; -O1:    cmp x21, x05839; -O1:    csel x8, x1, x19, lo5840; -O1:    csel x9, x0, x21, lo5841; -O1:    bl __atomic_compare_exchange5842    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 15843    ret i128 %r5844}5845 5846define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) {5847; CHECK-LABEL: atomicrmw_umin_i8_aligned_monotonic:5848; CHECK:    lduminb w1, w0, [x0]5849    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 15850    ret i8 %r5851}5852 5853define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) {5854; CHECK-LABEL: atomicrmw_umin_i8_aligned_acquire:5855; CHECK:    lduminab w1, w0, [x0]5856    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 15857    ret i8 %r5858}5859 5860define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) {5861; CHECK-LABEL: atomicrmw_umin_i8_aligned_release:5862; CHECK:    lduminlb w1, w0, [x0]5863    %r = atomicrmw umin ptr %ptr, i8 %value release, align 15864    ret i8 %r5865}5866 5867define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5868; CHECK-LABEL: atomicrmw_umin_i8_aligned_acq_rel:5869; CHECK:    lduminalb w1, w0, [x0]5870    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 15871    ret i8 %r5872}5873 5874define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5875; CHECK-LABEL: atomicrmw_umin_i8_aligned_seq_cst:5876; CHECK:    lduminalb w1, w0, [x0]5877    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 15878    ret i8 %r5879}5880 5881define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) {5882; CHECK-LABEL: atomicrmw_umin_i16_aligned_monotonic:5883; CHECK:    lduminh w1, w0, [x0]5884    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 25885    ret i16 %r5886}5887 5888define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) {5889; CHECK-LABEL: atomicrmw_umin_i16_aligned_acquire:5890; CHECK:    lduminah w1, w0, [x0]5891    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 25892    ret i16 %r5893}5894 5895define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) {5896; CHECK-LABEL: atomicrmw_umin_i16_aligned_release:5897; CHECK:    lduminlh w1, w0, [x0]5898    %r = atomicrmw umin ptr %ptr, i16 %value release, align 25899    ret i16 %r5900}5901 5902define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5903; CHECK-LABEL: atomicrmw_umin_i16_aligned_acq_rel:5904; CHECK:    lduminalh w1, w0, [x0]5905    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 25906    ret i16 %r5907}5908 5909define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5910; CHECK-LABEL: atomicrmw_umin_i16_aligned_seq_cst:5911; CHECK:    lduminalh w1, w0, [x0]5912    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 25913    ret i16 %r5914}5915 5916define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) {5917; CHECK-LABEL: atomicrmw_umin_i32_aligned_monotonic:5918; CHECK:    ldumin w1, w0, [x0]5919    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 45920    ret i32 %r5921}5922 5923define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) {5924; CHECK-LABEL: atomicrmw_umin_i32_aligned_acquire:5925; CHECK:    ldumina w1, w0, [x0]5926    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 45927    ret i32 %r5928}5929 5930define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) {5931; CHECK-LABEL: atomicrmw_umin_i32_aligned_release:5932; CHECK:    lduminl w1, w0, [x0]5933    %r = atomicrmw umin ptr %ptr, i32 %value release, align 45934    ret i32 %r5935}5936 5937define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5938; CHECK-LABEL: atomicrmw_umin_i32_aligned_acq_rel:5939; CHECK:    lduminal w1, w0, [x0]5940    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 45941    ret i32 %r5942}5943 5944define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5945; CHECK-LABEL: atomicrmw_umin_i32_aligned_seq_cst:5946; CHECK:    lduminal w1, w0, [x0]5947    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 45948    ret i32 %r5949}5950 5951define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) {5952; CHECK-LABEL: atomicrmw_umin_i64_aligned_monotonic:5953; CHECK:    ldumin x1, x0, [x0]5954    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 85955    ret i64 %r5956}5957 5958define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) {5959; CHECK-LABEL: atomicrmw_umin_i64_aligned_acquire:5960; CHECK:    ldumina x1, x0, [x0]5961    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 85962    ret i64 %r5963}5964 5965define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) {5966; CHECK-LABEL: atomicrmw_umin_i64_aligned_release:5967; CHECK:    lduminl x1, x0, [x0]5968    %r = atomicrmw umin ptr %ptr, i64 %value release, align 85969    ret i64 %r5970}5971 5972define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5973; CHECK-LABEL: atomicrmw_umin_i64_aligned_acq_rel:5974; CHECK:    lduminal x1, x0, [x0]5975    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 85976    ret i64 %r5977}5978 5979define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5980; CHECK-LABEL: atomicrmw_umin_i64_aligned_seq_cst:5981; CHECK:    lduminal x1, x0, [x0]5982    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 85983    ret i64 %r5984}5985 5986define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) {5987; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic:5988; -O0:    subs x9, x9, x125989; -O0:    subs x11, x11, x105990; -O0:    subs x13, x13, x105991; -O0:    csel w11, w9, w11, eq5992; -O0:    ands w13, w11, #0x15993; -O0:    csel x2, x9, x12, ne5994; -O0:    ands w11, w11, #0x15995; -O0:    csel x9, x9, x10, ne5996; -O0:    casp x0, x1, x2, x3, [x8]5997; -O0:    eor x8, x10, x85998; -O0:    eor x11, x9, x115999; -O0:    orr x8, x8, x116000; -O0:    subs x8, x8, #06001;6002; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic:6003; -O1:    ldp x4, x5, [x0]6004; -O1:    cmp x2, x46005; -O1:    csel x9, x7, x3, hs6006; -O1:    csel x8, x4, x2, hs6007; -O1:    casp x4, x5, x8, x9, [x0]6008; -O1:    cmp x5, x76009; -O1:    ccmp x4, x6, #0, eq6010    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 166011    ret i128 %r6012}6013 6014define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) {6015; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire:6016; -O0:    subs x9, x9, x126017; -O0:    subs x11, x11, x106018; -O0:    subs x13, x13, x106019; -O0:    csel w11, w9, w11, eq6020; -O0:    ands w13, w11, #0x16021; -O0:    csel x2, x9, x12, ne6022; -O0:    ands w11, w11, #0x16023; -O0:    csel x9, x9, x10, ne6024; -O0:    caspa x0, x1, x2, x3, [x8]6025; -O0:    eor x8, x10, x86026; -O0:    eor x11, x9, x116027; -O0:    orr x8, x8, x116028; -O0:    subs x8, x8, #06029;6030; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire:6031; -O1:    ldp x4, x5, [x0]6032; -O1:    cmp x2, x46033; -O1:    csel x9, x7, x3, hs6034; -O1:    csel x8, x4, x2, hs6035; -O1:    caspa x4, x5, x8, x9, [x0]6036; -O1:    cmp x5, x76037; -O1:    ccmp x4, x6, #0, eq6038    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 166039    ret i128 %r6040}6041 6042define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) {6043; -O0-LABEL: atomicrmw_umin_i128_aligned_release:6044; -O0:    subs x9, x9, x126045; -O0:    subs x11, x11, x106046; -O0:    subs x13, x13, x106047; -O0:    csel w11, w9, w11, eq6048; -O0:    ands w13, w11, #0x16049; -O0:    csel x2, x9, x12, ne6050; -O0:    ands w11, w11, #0x16051; -O0:    csel x9, x9, x10, ne6052; -O0:    caspl x0, x1, x2, x3, [x8]6053; -O0:    eor x8, x10, x86054; -O0:    eor x11, x9, x116055; -O0:    orr x8, x8, x116056; -O0:    subs x8, x8, #06057;6058; -O1-LABEL: atomicrmw_umin_i128_aligned_release:6059; -O1:    ldp x4, x5, [x0]6060; -O1:    cmp x2, x46061; -O1:    csel x9, x7, x3, hs6062; -O1:    csel x8, x4, x2, hs6063; -O1:    caspl x4, x5, x8, x9, [x0]6064; -O1:    cmp x5, x76065; -O1:    ccmp x4, x6, #0, eq6066    %r = atomicrmw umin ptr %ptr, i128 %value release, align 166067    ret i128 %r6068}6069 6070define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) {6071; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel:6072; -O0:    subs x9, x9, x126073; -O0:    subs x11, x11, x106074; -O0:    subs x13, x13, x106075; -O0:    csel w11, w9, w11, eq6076; -O0:    ands w13, w11, #0x16077; -O0:    csel x2, x9, x12, ne6078; -O0:    ands w11, w11, #0x16079; -O0:    csel x9, x9, x10, ne6080; -O0:    caspal x0, x1, x2, x3, [x8]6081; -O0:    eor x8, x10, x86082; -O0:    eor x11, x9, x116083; -O0:    orr x8, x8, x116084; -O0:    subs x8, x8, #06085;6086; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel:6087; -O1:    ldp x4, x5, [x0]6088; -O1:    cmp x2, x46089; -O1:    csel x9, x7, x3, hs6090; -O1:    csel x8, x4, x2, hs6091; -O1:    caspal x4, x5, x8, x9, [x0]6092; -O1:    cmp x5, x76093; -O1:    ccmp x4, x6, #0, eq6094    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 166095    ret i128 %r6096}6097 6098define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) {6099; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst:6100; -O0:    subs x9, x9, x126101; -O0:    subs x11, x11, x106102; -O0:    subs x13, x13, x106103; -O0:    csel w11, w9, w11, eq6104; -O0:    ands w13, w11, #0x16105; -O0:    csel x2, x9, x12, ne6106; -O0:    ands w11, w11, #0x16107; -O0:    csel x9, x9, x10, ne6108; -O0:    caspal x0, x1, x2, x3, [x8]6109; -O0:    eor x8, x10, x86110; -O0:    eor x11, x9, x116111; -O0:    orr x8, x8, x116112; -O0:    subs x8, x8, #06113;6114; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst:6115; -O1:    ldp x4, x5, [x0]6116; -O1:    cmp x2, x46117; -O1:    csel x9, x7, x3, hs6118; -O1:    csel x8, x4, x2, hs6119; -O1:    caspal x4, x5, x8, x9, [x0]6120; -O1:    cmp x5, x76121; -O1:    ccmp x4, x6, #0, eq6122    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 166123    ret i128 %r6124}6125 6126define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) {6127; CHECK-LABEL: atomicrmw_umin_i8_unaligned_monotonic:6128; CHECK:    lduminb w1, w0, [x0]6129    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 16130    ret i8 %r6131}6132 6133define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) {6134; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acquire:6135; CHECK:    lduminab w1, w0, [x0]6136    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 16137    ret i8 %r6138}6139 6140define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) {6141; CHECK-LABEL: atomicrmw_umin_i8_unaligned_release:6142; CHECK:    lduminlb w1, w0, [x0]6143    %r = atomicrmw umin ptr %ptr, i8 %value release, align 16144    ret i8 %r6145}6146 6147define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {6148; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:6149; CHECK:    lduminalb w1, w0, [x0]6150    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 16151    ret i8 %r6152}6153 6154define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {6155; CHECK-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:6156; CHECK:    lduminalb w1, w0, [x0]6157    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 16158    ret i8 %r6159}6160 6161define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) {6162; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic:6163; -O0:    subs w10, w10, w8, uxth6164; -O0:    csel w8, w9, w8, ls6165; -O0:    bl __atomic_compare_exchange6166;6167; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic:6168; -O1:    and w8, w0, #0xffff6169; -O1:    cmp w8, w20, uxth6170; -O1:    csel w8, w0, w20, ls6171; -O1:    bl __atomic_compare_exchange6172    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 16173    ret i16 %r6174}6175 6176define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) {6177; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire:6178; -O0:    subs w10, w10, w8, uxth6179; -O0:    csel w8, w9, w8, ls6180; -O0:    bl __atomic_compare_exchange6181;6182; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire:6183; -O1:    and w8, w0, #0xffff6184; -O1:    cmp w8, w20, uxth6185; -O1:    csel w8, w0, w20, ls6186; -O1:    bl __atomic_compare_exchange6187    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 16188    ret i16 %r6189}6190 6191define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) {6192; -O0-LABEL: atomicrmw_umin_i16_unaligned_release:6193; -O0:    subs w10, w10, w8, uxth6194; -O0:    csel w8, w9, w8, ls6195; -O0:    bl __atomic_compare_exchange6196;6197; -O1-LABEL: atomicrmw_umin_i16_unaligned_release:6198; -O1:    and w8, w0, #0xffff6199; -O1:    cmp w8, w20, uxth6200; -O1:    csel w8, w0, w20, ls6201; -O1:    bl __atomic_compare_exchange6202    %r = atomicrmw umin ptr %ptr, i16 %value release, align 16203    ret i16 %r6204}6205 6206define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {6207; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:6208; -O0:    subs w10, w10, w8, uxth6209; -O0:    csel w8, w9, w8, ls6210; -O0:    bl __atomic_compare_exchange6211;6212; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:6213; -O1:    and w8, w0, #0xffff6214; -O1:    cmp w8, w20, uxth6215; -O1:    csel w8, w0, w20, ls6216; -O1:    bl __atomic_compare_exchange6217    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 16218    ret i16 %r6219}6220 6221define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {6222; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:6223; -O0:    subs w10, w10, w8, uxth6224; -O0:    csel w8, w9, w8, ls6225; -O0:    bl __atomic_compare_exchange6226;6227; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:6228; -O1:    and w8, w0, #0xffff6229; -O1:    cmp w8, w20, uxth6230; -O1:    csel w8, w0, w20, ls6231; -O1:    bl __atomic_compare_exchange6232    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 16233    ret i16 %r6234}6235 6236define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) {6237; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic:6238; -O0:    subs w10, w9, w86239; -O0:    csel w8, w9, w8, ls6240; -O0:    bl __atomic_compare_exchange6241;6242; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic:6243; -O1:    cmp w0, w206244; -O1:    csel w8, w0, w20, ls6245; -O1:    bl __atomic_compare_exchange6246    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 16247    ret i32 %r6248}6249 6250define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) {6251; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire:6252; -O0:    subs w10, w9, w86253; -O0:    csel w8, w9, w8, ls6254; -O0:    bl __atomic_compare_exchange6255;6256; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire:6257; -O1:    cmp w0, w206258; -O1:    csel w8, w0, w20, ls6259; -O1:    bl __atomic_compare_exchange6260    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 16261    ret i32 %r6262}6263 6264define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) {6265; -O0-LABEL: atomicrmw_umin_i32_unaligned_release:6266; -O0:    subs w10, w9, w86267; -O0:    csel w8, w9, w8, ls6268; -O0:    bl __atomic_compare_exchange6269;6270; -O1-LABEL: atomicrmw_umin_i32_unaligned_release:6271; -O1:    cmp w0, w206272; -O1:    csel w8, w0, w20, ls6273; -O1:    bl __atomic_compare_exchange6274    %r = atomicrmw umin ptr %ptr, i32 %value release, align 16275    ret i32 %r6276}6277 6278define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {6279; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:6280; -O0:    subs w10, w9, w86281; -O0:    csel w8, w9, w8, ls6282; -O0:    bl __atomic_compare_exchange6283;6284; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:6285; -O1:    cmp w0, w206286; -O1:    csel w8, w0, w20, ls6287; -O1:    bl __atomic_compare_exchange6288    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 16289    ret i32 %r6290}6291 6292define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {6293; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:6294; -O0:    subs w10, w9, w86295; -O0:    csel w8, w9, w8, ls6296; -O0:    bl __atomic_compare_exchange6297;6298; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:6299; -O1:    cmp w0, w206300; -O1:    csel w8, w0, w20, ls6301; -O1:    bl __atomic_compare_exchange6302    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 16303    ret i32 %r6304}6305 6306define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) {6307; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic:6308; -O0:    subs x10, x9, x86309; -O0:    csel x8, x9, x8, ls6310; -O0:    bl __atomic_compare_exchange6311;6312; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic:6313; -O1:    cmp x0, x206314; -O1:    csel x8, x0, x20, ls6315; -O1:    bl __atomic_compare_exchange6316    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 16317    ret i64 %r6318}6319 6320define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) {6321; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire:6322; -O0:    subs x10, x9, x86323; -O0:    csel x8, x9, x8, ls6324; -O0:    bl __atomic_compare_exchange6325;6326; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire:6327; -O1:    cmp x0, x206328; -O1:    csel x8, x0, x20, ls6329; -O1:    bl __atomic_compare_exchange6330    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 16331    ret i64 %r6332}6333 6334define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) {6335; -O0-LABEL: atomicrmw_umin_i64_unaligned_release:6336; -O0:    subs x10, x9, x86337; -O0:    csel x8, x9, x8, ls6338; -O0:    bl __atomic_compare_exchange6339;6340; -O1-LABEL: atomicrmw_umin_i64_unaligned_release:6341; -O1:    cmp x0, x206342; -O1:    csel x8, x0, x20, ls6343; -O1:    bl __atomic_compare_exchange6344    %r = atomicrmw umin ptr %ptr, i64 %value release, align 16345    ret i64 %r6346}6347 6348define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {6349; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:6350; -O0:    subs x10, x9, x86351; -O0:    csel x8, x9, x8, ls6352; -O0:    bl __atomic_compare_exchange6353;6354; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:6355; -O1:    cmp x0, x206356; -O1:    csel x8, x0, x20, ls6357; -O1:    bl __atomic_compare_exchange6358    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 16359    ret i64 %r6360}6361 6362define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {6363; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:6364; -O0:    subs x10, x9, x86365; -O0:    csel x8, x9, x8, ls6366; -O0:    bl __atomic_compare_exchange6367;6368; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:6369; -O1:    cmp x0, x206370; -O1:    csel x8, x0, x20, ls6371; -O1:    bl __atomic_compare_exchange6372    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 16373    ret i64 %r6374}6375 6376define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) {6377; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic:6378; -O0:    subs x8, x8, x96379; -O0:    subs x11, x11, x106380; -O0:    subs x12, x12, x106381; -O0:    csel w11, w8, w11, eq6382; -O0:    ands w12, w11, #0x16383; -O0:    csel x9, x8, x9, ne6384; -O0:    ands w11, w11, #0x16385; -O0:    csel x8, x8, x10, ne6386; -O0:    bl __atomic_compare_exchange6387;6388; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic:6389; -O1:    ldp x0, x1, [x0]6390; -O1:    cmp x21, x06391; -O1:    csel x8, x1, x19, hs6392; -O1:    csel x9, x0, x21, hs6393; -O1:    bl __atomic_compare_exchange6394    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 16395    ret i128 %r6396}6397 6398define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) {6399; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire:6400; -O0:    subs x8, x8, x96401; -O0:    subs x11, x11, x106402; -O0:    subs x12, x12, x106403; -O0:    csel w11, w8, w11, eq6404; -O0:    ands w12, w11, #0x16405; -O0:    csel x9, x8, x9, ne6406; -O0:    ands w11, w11, #0x16407; -O0:    csel x8, x8, x10, ne6408; -O0:    bl __atomic_compare_exchange6409;6410; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire:6411; -O1:    ldp x0, x1, [x0]6412; -O1:    cmp x21, x06413; -O1:    csel x8, x1, x19, hs6414; -O1:    csel x9, x0, x21, hs6415; -O1:    bl __atomic_compare_exchange6416    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 16417    ret i128 %r6418}6419 6420define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) {6421; -O0-LABEL: atomicrmw_umin_i128_unaligned_release:6422; -O0:    subs x8, x8, x96423; -O0:    subs x11, x11, x106424; -O0:    subs x12, x12, x106425; -O0:    csel w11, w8, w11, eq6426; -O0:    ands w12, w11, #0x16427; -O0:    csel x9, x8, x9, ne6428; -O0:    ands w11, w11, #0x16429; -O0:    csel x8, x8, x10, ne6430; -O0:    bl __atomic_compare_exchange6431;6432; -O1-LABEL: atomicrmw_umin_i128_unaligned_release:6433; -O1:    ldp x0, x1, [x0]6434; -O1:    cmp x21, x06435; -O1:    csel x8, x1, x19, hs6436; -O1:    csel x9, x0, x21, hs6437; -O1:    bl __atomic_compare_exchange6438    %r = atomicrmw umin ptr %ptr, i128 %value release, align 16439    ret i128 %r6440}6441 6442define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {6443; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:6444; -O0:    subs x8, x8, x96445; -O0:    subs x11, x11, x106446; -O0:    subs x12, x12, x106447; -O0:    csel w11, w8, w11, eq6448; -O0:    ands w12, w11, #0x16449; -O0:    csel x9, x8, x9, ne6450; -O0:    ands w11, w11, #0x16451; -O0:    csel x8, x8, x10, ne6452; -O0:    bl __atomic_compare_exchange6453;6454; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:6455; -O1:    ldp x0, x1, [x0]6456; -O1:    cmp x21, x06457; -O1:    csel x8, x1, x19, hs6458; -O1:    csel x9, x0, x21, hs6459; -O1:    bl __atomic_compare_exchange6460    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 16461    ret i128 %r6462}6463 6464define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {6465; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:6466; -O0:    subs x8, x8, x96467; -O0:    subs x11, x11, x106468; -O0:    subs x12, x12, x106469; -O0:    csel w11, w8, w11, eq6470; -O0:    ands w12, w11, #0x16471; -O0:    csel x9, x8, x9, ne6472; -O0:    ands w11, w11, #0x16473; -O0:    csel x8, x8, x10, ne6474; -O0:    bl __atomic_compare_exchange6475;6476; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:6477; -O1:    ldp x0, x1, [x0]6478; -O1:    cmp x21, x06479; -O1:    csel x8, x1, x19, hs6480; -O1:    csel x9, x0, x21, hs6481; -O1:    bl __atomic_compare_exchange6482    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 16483    ret i128 %r6484}6485