brintos

brintos / llvm-project-archived public Read only

0
0
Text · 196.4 KiB · 29663f2 Raw
6170 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st[^r]|swp|cas|bl|add|and|eor|orn|orr|sub|mvn|sxt|cmp|ccmp|csel|dmb)"2; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+lse2,+lse128 -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+lse2,+lse128 -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:    swpp x0, x1, [x8]149;150; -O1-LABEL: atomicrmw_xchg_i128_aligned_monotonic:151; -O1:    swpp x2, x1, [x0]152    %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 16153    ret i128 %r154}155 156define dso_local i128 @atomicrmw_xchg_i128_aligned_acquire(ptr %ptr, i128 %value) {157; -O0-LABEL: atomicrmw_xchg_i128_aligned_acquire:158; -O0:    swppa x0, x1, [x8]159;160; -O1-LABEL: atomicrmw_xchg_i128_aligned_acquire:161; -O1:    swppa x2, x1, [x0]162    %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 16163    ret i128 %r164}165 166define dso_local i128 @atomicrmw_xchg_i128_aligned_release(ptr %ptr, i128 %value) {167; -O0-LABEL: atomicrmw_xchg_i128_aligned_release:168; -O0:    swppl x0, x1, [x8]169;170; -O1-LABEL: atomicrmw_xchg_i128_aligned_release:171; -O1:    swppl x2, x1, [x0]172    %r = atomicrmw xchg ptr %ptr, i128 %value release, align 16173    ret i128 %r174}175 176define dso_local i128 @atomicrmw_xchg_i128_aligned_acq_rel(ptr %ptr, i128 %value) {177; -O0-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:178; -O0:    swppal x0, x1, [x8]179;180; -O1-LABEL: atomicrmw_xchg_i128_aligned_acq_rel:181; -O1:    swppal x2, x1, [x0]182    %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 16183    ret i128 %r184}185 186define dso_local i128 @atomicrmw_xchg_i128_aligned_seq_cst(ptr %ptr, i128 %value) {187; -O0-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:188; -O0:    swppal x0, x1, [x8]189;190; -O1-LABEL: atomicrmw_xchg_i128_aligned_seq_cst:191; -O1:    swppal x2, x1, [x0]192    %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 16193    ret i128 %r194}195 196define dso_local i8 @atomicrmw_xchg_i8_unaligned_monotonic(ptr %ptr, i8 %value) {197; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_monotonic:198; CHECK:    swpb w1, w0, [x0]199    %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 1200    ret i8 %r201}202 203define dso_local i8 @atomicrmw_xchg_i8_unaligned_acquire(ptr %ptr, i8 %value) {204; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acquire:205; CHECK:    swpab w1, w0, [x0]206    %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 1207    ret i8 %r208}209 210define dso_local i8 @atomicrmw_xchg_i8_unaligned_release(ptr %ptr, i8 %value) {211; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_release:212; CHECK:    swplb w1, w0, [x0]213    %r = atomicrmw xchg ptr %ptr, i8 %value release, align 1214    ret i8 %r215}216 217define dso_local i8 @atomicrmw_xchg_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {218; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel:219; CHECK:    swpalb w1, w0, [x0]220    %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 1221    ret i8 %r222}223 224define dso_local i8 @atomicrmw_xchg_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {225; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst:226; CHECK:    swpalb w1, w0, [x0]227    %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 1228    ret i8 %r229}230 231define dso_local i16 @atomicrmw_xchg_i16_unaligned_monotonic(ptr %ptr, i16 %value) {232; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_monotonic:233; CHECK:    bl __atomic_exchange234    %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 1235    ret i16 %r236}237 238define dso_local i16 @atomicrmw_xchg_i16_unaligned_acquire(ptr %ptr, i16 %value) {239; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acquire:240; CHECK:    bl __atomic_exchange241    %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 1242    ret i16 %r243}244 245define dso_local i16 @atomicrmw_xchg_i16_unaligned_release(ptr %ptr, i16 %value) {246; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_release:247; CHECK:    bl __atomic_exchange248    %r = atomicrmw xchg ptr %ptr, i16 %value release, align 1249    ret i16 %r250}251 252define dso_local i16 @atomicrmw_xchg_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {253; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acq_rel:254; CHECK:    bl __atomic_exchange255    %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 1256    ret i16 %r257}258 259define dso_local i16 @atomicrmw_xchg_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {260; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_seq_cst:261; CHECK:    bl __atomic_exchange262    %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 1263    ret i16 %r264}265 266define dso_local i32 @atomicrmw_xchg_i32_unaligned_monotonic(ptr %ptr, i32 %value) {267; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_monotonic:268; CHECK:    bl __atomic_exchange269    %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 1270    ret i32 %r271}272 273define dso_local i32 @atomicrmw_xchg_i32_unaligned_acquire(ptr %ptr, i32 %value) {274; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acquire:275; CHECK:    bl __atomic_exchange276    %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 1277    ret i32 %r278}279 280define dso_local i32 @atomicrmw_xchg_i32_unaligned_release(ptr %ptr, i32 %value) {281; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_release:282; CHECK:    bl __atomic_exchange283    %r = atomicrmw xchg ptr %ptr, i32 %value release, align 1284    ret i32 %r285}286 287define dso_local i32 @atomicrmw_xchg_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {288; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acq_rel:289; CHECK:    bl __atomic_exchange290    %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 1291    ret i32 %r292}293 294define dso_local i32 @atomicrmw_xchg_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {295; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_seq_cst:296; CHECK:    bl __atomic_exchange297    %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 1298    ret i32 %r299}300 301define dso_local i64 @atomicrmw_xchg_i64_unaligned_monotonic(ptr %ptr, i64 %value) {302; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_monotonic:303; CHECK:    bl __atomic_exchange304    %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 1305    ret i64 %r306}307 308define dso_local i64 @atomicrmw_xchg_i64_unaligned_acquire(ptr %ptr, i64 %value) {309; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acquire:310; CHECK:    bl __atomic_exchange311    %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 1312    ret i64 %r313}314 315define dso_local i64 @atomicrmw_xchg_i64_unaligned_release(ptr %ptr, i64 %value) {316; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_release:317; CHECK:    bl __atomic_exchange318    %r = atomicrmw xchg ptr %ptr, i64 %value release, align 1319    ret i64 %r320}321 322define dso_local i64 @atomicrmw_xchg_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {323; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acq_rel:324; CHECK:    bl __atomic_exchange325    %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 1326    ret i64 %r327}328 329define dso_local i64 @atomicrmw_xchg_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {330; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_seq_cst:331; CHECK:    bl __atomic_exchange332    %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 1333    ret i64 %r334}335 336define dso_local i128 @atomicrmw_xchg_i128_unaligned_monotonic(ptr %ptr, i128 %value) {337; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_monotonic:338; CHECK:    bl __atomic_exchange339    %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 1340    ret i128 %r341}342 343define dso_local i128 @atomicrmw_xchg_i128_unaligned_acquire(ptr %ptr, i128 %value) {344; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acquire:345; CHECK:    bl __atomic_exchange346    %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 1347    ret i128 %r348}349 350define dso_local i128 @atomicrmw_xchg_i128_unaligned_release(ptr %ptr, i128 %value) {351; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_release:352; CHECK:    bl __atomic_exchange353    %r = atomicrmw xchg ptr %ptr, i128 %value release, align 1354    ret i128 %r355}356 357define dso_local i128 @atomicrmw_xchg_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {358; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acq_rel:359; CHECK:    bl __atomic_exchange360    %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 1361    ret i128 %r362}363 364define dso_local i128 @atomicrmw_xchg_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {365; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_seq_cst:366; CHECK:    bl __atomic_exchange367    %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 1368    ret i128 %r369}370 371define dso_local i8 @atomicrmw_add_i8_aligned_monotonic(ptr %ptr, i8 %value) {372; CHECK-LABEL: atomicrmw_add_i8_aligned_monotonic:373; CHECK:    ldaddb w1, w0, [x0]374    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1375    ret i8 %r376}377 378define dso_local i8 @atomicrmw_add_i8_aligned_acquire(ptr %ptr, i8 %value) {379; CHECK-LABEL: atomicrmw_add_i8_aligned_acquire:380; CHECK:    ldaddab w1, w0, [x0]381    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1382    ret i8 %r383}384 385define dso_local i8 @atomicrmw_add_i8_aligned_release(ptr %ptr, i8 %value) {386; CHECK-LABEL: atomicrmw_add_i8_aligned_release:387; CHECK:    ldaddlb w1, w0, [x0]388    %r = atomicrmw add ptr %ptr, i8 %value release, align 1389    ret i8 %r390}391 392define dso_local i8 @atomicrmw_add_i8_aligned_acq_rel(ptr %ptr, i8 %value) {393; CHECK-LABEL: atomicrmw_add_i8_aligned_acq_rel:394; CHECK:    ldaddalb w1, w0, [x0]395    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1396    ret i8 %r397}398 399define dso_local i8 @atomicrmw_add_i8_aligned_seq_cst(ptr %ptr, i8 %value) {400; CHECK-LABEL: atomicrmw_add_i8_aligned_seq_cst:401; CHECK:    ldaddalb w1, w0, [x0]402    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1403    ret i8 %r404}405 406define dso_local i16 @atomicrmw_add_i16_aligned_monotonic(ptr %ptr, i16 %value) {407; CHECK-LABEL: atomicrmw_add_i16_aligned_monotonic:408; CHECK:    ldaddh w1, w0, [x0]409    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 2410    ret i16 %r411}412 413define dso_local i16 @atomicrmw_add_i16_aligned_acquire(ptr %ptr, i16 %value) {414; CHECK-LABEL: atomicrmw_add_i16_aligned_acquire:415; CHECK:    ldaddah w1, w0, [x0]416    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 2417    ret i16 %r418}419 420define dso_local i16 @atomicrmw_add_i16_aligned_release(ptr %ptr, i16 %value) {421; CHECK-LABEL: atomicrmw_add_i16_aligned_release:422; CHECK:    ldaddlh w1, w0, [x0]423    %r = atomicrmw add ptr %ptr, i16 %value release, align 2424    ret i16 %r425}426 427define dso_local i16 @atomicrmw_add_i16_aligned_acq_rel(ptr %ptr, i16 %value) {428; CHECK-LABEL: atomicrmw_add_i16_aligned_acq_rel:429; CHECK:    ldaddalh w1, w0, [x0]430    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 2431    ret i16 %r432}433 434define dso_local i16 @atomicrmw_add_i16_aligned_seq_cst(ptr %ptr, i16 %value) {435; CHECK-LABEL: atomicrmw_add_i16_aligned_seq_cst:436; CHECK:    ldaddalh w1, w0, [x0]437    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 2438    ret i16 %r439}440 441define dso_local i32 @atomicrmw_add_i32_aligned_monotonic(ptr %ptr, i32 %value) {442; CHECK-LABEL: atomicrmw_add_i32_aligned_monotonic:443; CHECK:    ldadd w1, w0, [x0]444    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 4445    ret i32 %r446}447 448define dso_local i32 @atomicrmw_add_i32_aligned_acquire(ptr %ptr, i32 %value) {449; CHECK-LABEL: atomicrmw_add_i32_aligned_acquire:450; CHECK:    ldadda w1, w0, [x0]451    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 4452    ret i32 %r453}454 455define dso_local i32 @atomicrmw_add_i32_aligned_release(ptr %ptr, i32 %value) {456; CHECK-LABEL: atomicrmw_add_i32_aligned_release:457; CHECK:    ldaddl w1, w0, [x0]458    %r = atomicrmw add ptr %ptr, i32 %value release, align 4459    ret i32 %r460}461 462define dso_local i32 @atomicrmw_add_i32_aligned_acq_rel(ptr %ptr, i32 %value) {463; CHECK-LABEL: atomicrmw_add_i32_aligned_acq_rel:464; CHECK:    ldaddal w1, w0, [x0]465    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 4466    ret i32 %r467}468 469define dso_local i32 @atomicrmw_add_i32_aligned_seq_cst(ptr %ptr, i32 %value) {470; CHECK-LABEL: atomicrmw_add_i32_aligned_seq_cst:471; CHECK:    ldaddal w1, w0, [x0]472    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 4473    ret i32 %r474}475 476define dso_local i64 @atomicrmw_add_i64_aligned_monotonic(ptr %ptr, i64 %value) {477; CHECK-LABEL: atomicrmw_add_i64_aligned_monotonic:478; CHECK:    ldadd x1, x0, [x0]479    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 8480    ret i64 %r481}482 483define dso_local i64 @atomicrmw_add_i64_aligned_acquire(ptr %ptr, i64 %value) {484; CHECK-LABEL: atomicrmw_add_i64_aligned_acquire:485; CHECK:    ldadda x1, x0, [x0]486    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 8487    ret i64 %r488}489 490define dso_local i64 @atomicrmw_add_i64_aligned_release(ptr %ptr, i64 %value) {491; CHECK-LABEL: atomicrmw_add_i64_aligned_release:492; CHECK:    ldaddl x1, x0, [x0]493    %r = atomicrmw add ptr %ptr, i64 %value release, align 8494    ret i64 %r495}496 497define dso_local i64 @atomicrmw_add_i64_aligned_acq_rel(ptr %ptr, i64 %value) {498; CHECK-LABEL: atomicrmw_add_i64_aligned_acq_rel:499; CHECK:    ldaddal x1, x0, [x0]500    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 8501    ret i64 %r502}503 504define dso_local i64 @atomicrmw_add_i64_aligned_seq_cst(ptr %ptr, i64 %value) {505; CHECK-LABEL: atomicrmw_add_i64_aligned_seq_cst:506; CHECK:    ldaddal x1, x0, [x0]507    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 8508    ret i64 %r509}510 511define dso_local i128 @atomicrmw_add_i128_aligned_monotonic(ptr %ptr, i128 %value) {512; -O0-LABEL: atomicrmw_add_i128_aligned_monotonic:513; -O0:    adds x9, x10, x9514; -O0:    casp x0, x1, x2, x3, [x8]515; -O0:    subs x11, x9, x11516; -O0:    ccmp x8, x10, #0, eq517;518; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic:519; -O1:    ldp x4, x5, [x0]520; -O1:    adds x9, x7, x3521; -O1:    casp x4, x5, x8, x9, [x0]522; -O1:    cmp x4, x6523; -O1:    ccmp x5, x7, #0, eq524    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16525    ret i128 %r526}527 528define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) {529; -O0-LABEL: atomicrmw_add_i128_aligned_acquire:530; -O0:    adds x9, x10, x9531; -O0:    caspa x0, x1, x2, x3, [x8]532; -O0:    subs x11, x9, x11533; -O0:    ccmp x8, x10, #0, eq534;535; -O1-LABEL: atomicrmw_add_i128_aligned_acquire:536; -O1:    ldp x4, x5, [x0]537; -O1:    adds x9, x7, x3538; -O1:    caspa x4, x5, x8, x9, [x0]539; -O1:    cmp x4, x6540; -O1:    ccmp x5, x7, #0, eq541    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16542    ret i128 %r543}544 545define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) {546; -O0-LABEL: atomicrmw_add_i128_aligned_release:547; -O0:    adds x9, x10, x9548; -O0:    caspl x0, x1, x2, x3, [x8]549; -O0:    subs x11, x9, x11550; -O0:    ccmp x8, x10, #0, eq551;552; -O1-LABEL: atomicrmw_add_i128_aligned_release:553; -O1:    ldp x4, x5, [x0]554; -O1:    adds x9, x7, x3555; -O1:    caspl x4, x5, x8, x9, [x0]556; -O1:    cmp x4, x6557; -O1:    ccmp x5, x7, #0, eq558    %r = atomicrmw add ptr %ptr, i128 %value release, align 16559    ret i128 %r560}561 562define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) {563; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel:564; -O0:    adds x9, x10, x9565; -O0:    caspal x0, x1, x2, x3, [x8]566; -O0:    subs x11, x9, x11567; -O0:    ccmp x8, x10, #0, eq568;569; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel:570; -O1:    ldp x4, x5, [x0]571; -O1:    adds x9, x7, x3572; -O1:    caspal x4, x5, x8, x9, [x0]573; -O1:    cmp x4, x6574; -O1:    ccmp x5, x7, #0, eq575    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 16576    ret i128 %r577}578 579define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) {580; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst:581; -O0:    adds x9, x10, x9582; -O0:    caspal x0, x1, x2, x3, [x8]583; -O0:    subs x11, x9, x11584; -O0:    ccmp x8, x10, #0, eq585;586; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst:587; -O1:    ldp x4, x5, [x0]588; -O1:    adds x9, x7, x3589; -O1:    caspal x4, x5, x8, x9, [x0]590; -O1:    cmp x4, x6591; -O1:    ccmp x5, x7, #0, eq592    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 16593    ret i128 %r594}595 596define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) {597; CHECK-LABEL: atomicrmw_add_i8_unaligned_monotonic:598; CHECK:    ldaddb w1, w0, [x0]599    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1600    ret i8 %r601}602 603define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) {604; CHECK-LABEL: atomicrmw_add_i8_unaligned_acquire:605; CHECK:    ldaddab w1, w0, [x0]606    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1607    ret i8 %r608}609 610define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) {611; CHECK-LABEL: atomicrmw_add_i8_unaligned_release:612; CHECK:    ldaddlb w1, w0, [x0]613    %r = atomicrmw add ptr %ptr, i8 %value release, align 1614    ret i8 %r615}616 617define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {618; CHECK-LABEL: atomicrmw_add_i8_unaligned_acq_rel:619; CHECK:    ldaddalb w1, w0, [x0]620    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1621    ret i8 %r622}623 624define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {625; CHECK-LABEL: atomicrmw_add_i8_unaligned_seq_cst:626; CHECK:    ldaddalb w1, w0, [x0]627    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1628    ret i8 %r629}630 631define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) {632; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic:633; -O0:    add w8, w9, w8634; -O0:    bl __atomic_compare_exchange635;636; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic:637; -O1:    add w8, w0, w20638; -O1:    bl __atomic_compare_exchange639    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 1640    ret i16 %r641}642 643define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) {644; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire:645; -O0:    add w8, w9, w8646; -O0:    bl __atomic_compare_exchange647;648; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire:649; -O1:    add w8, w0, w20650; -O1:    bl __atomic_compare_exchange651    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 1652    ret i16 %r653}654 655define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) {656; -O0-LABEL: atomicrmw_add_i16_unaligned_release:657; -O0:    add w8, w9, w8658; -O0:    bl __atomic_compare_exchange659;660; -O1-LABEL: atomicrmw_add_i16_unaligned_release:661; -O1:    add w8, w0, w20662; -O1:    bl __atomic_compare_exchange663    %r = atomicrmw add ptr %ptr, i16 %value release, align 1664    ret i16 %r665}666 667define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {668; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel:669; -O0:    add w8, w9, w8670; -O0:    bl __atomic_compare_exchange671;672; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel:673; -O1:    add w8, w0, w20674; -O1:    bl __atomic_compare_exchange675    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 1676    ret i16 %r677}678 679define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {680; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst:681; -O0:    add w8, w9, w8682; -O0:    bl __atomic_compare_exchange683;684; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst:685; -O1:    add w8, w0, w20686; -O1:    bl __atomic_compare_exchange687    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 1688    ret i16 %r689}690 691define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) {692; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic:693; -O0:    add w8, w9, w8694; -O0:    bl __atomic_compare_exchange695;696; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic:697; -O1:    add w8, w0, w20698; -O1:    bl __atomic_compare_exchange699    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 1700    ret i32 %r701}702 703define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) {704; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire:705; -O0:    add w8, w9, w8706; -O0:    bl __atomic_compare_exchange707;708; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire:709; -O1:    add w8, w0, w20710; -O1:    bl __atomic_compare_exchange711    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 1712    ret i32 %r713}714 715define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) {716; -O0-LABEL: atomicrmw_add_i32_unaligned_release:717; -O0:    add w8, w9, w8718; -O0:    bl __atomic_compare_exchange719;720; -O1-LABEL: atomicrmw_add_i32_unaligned_release:721; -O1:    add w8, w0, w20722; -O1:    bl __atomic_compare_exchange723    %r = atomicrmw add ptr %ptr, i32 %value release, align 1724    ret i32 %r725}726 727define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {728; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel:729; -O0:    add w8, w9, w8730; -O0:    bl __atomic_compare_exchange731;732; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel:733; -O1:    add w8, w0, w20734; -O1:    bl __atomic_compare_exchange735    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 1736    ret i32 %r737}738 739define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {740; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst:741; -O0:    add w8, w9, w8742; -O0:    bl __atomic_compare_exchange743;744; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst:745; -O1:    add w8, w0, w20746; -O1:    bl __atomic_compare_exchange747    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 1748    ret i32 %r749}750 751define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) {752; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic:753; -O0:    add x8, x9, x8754; -O0:    bl __atomic_compare_exchange755;756; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic:757; -O1:    add x8, x0, x20758; -O1:    bl __atomic_compare_exchange759    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 1760    ret i64 %r761}762 763define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) {764; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire:765; -O0:    add x8, x9, x8766; -O0:    bl __atomic_compare_exchange767;768; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire:769; -O1:    add x8, x0, x20770; -O1:    bl __atomic_compare_exchange771    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 1772    ret i64 %r773}774 775define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) {776; -O0-LABEL: atomicrmw_add_i64_unaligned_release:777; -O0:    add x8, x9, x8778; -O0:    bl __atomic_compare_exchange779;780; -O1-LABEL: atomicrmw_add_i64_unaligned_release:781; -O1:    add x8, x0, x20782; -O1:    bl __atomic_compare_exchange783    %r = atomicrmw add ptr %ptr, i64 %value release, align 1784    ret i64 %r785}786 787define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {788; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel:789; -O0:    add x8, x9, x8790; -O0:    bl __atomic_compare_exchange791;792; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel:793; -O1:    add x8, x0, x20794; -O1:    bl __atomic_compare_exchange795    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 1796    ret i64 %r797}798 799define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {800; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst:801; -O0:    add x8, x9, x8802; -O0:    bl __atomic_compare_exchange803;804; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst:805; -O1:    add x8, x0, x20806; -O1:    bl __atomic_compare_exchange807    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 1808    ret i64 %r809}810 811define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) {812; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic:813; -O0:    adds x9, x10, x9814; -O0:    bl __atomic_compare_exchange815;816; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic:817; -O1:    ldp x0, x1, [x0]818; -O1:    adds x8, x1, x19819; -O1:    bl __atomic_compare_exchange820    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 1821    ret i128 %r822}823 824define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) {825; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire:826; -O0:    adds x9, x10, x9827; -O0:    bl __atomic_compare_exchange828;829; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire:830; -O1:    ldp x0, x1, [x0]831; -O1:    adds x8, x1, x19832; -O1:    bl __atomic_compare_exchange833    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 1834    ret i128 %r835}836 837define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) {838; -O0-LABEL: atomicrmw_add_i128_unaligned_release:839; -O0:    adds x9, x10, x9840; -O0:    bl __atomic_compare_exchange841;842; -O1-LABEL: atomicrmw_add_i128_unaligned_release:843; -O1:    ldp x0, x1, [x0]844; -O1:    adds x8, x1, x19845; -O1:    bl __atomic_compare_exchange846    %r = atomicrmw add ptr %ptr, i128 %value release, align 1847    ret i128 %r848}849 850define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {851; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel:852; -O0:    adds x9, x10, x9853; -O0:    bl __atomic_compare_exchange854;855; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel:856; -O1:    ldp x0, x1, [x0]857; -O1:    adds x8, x1, x19858; -O1:    bl __atomic_compare_exchange859    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 1860    ret i128 %r861}862 863define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {864; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst:865; -O0:    adds x9, x10, x9866; -O0:    bl __atomic_compare_exchange867;868; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst:869; -O1:    ldp x0, x1, [x0]870; -O1:    adds x8, x1, x19871; -O1:    bl __atomic_compare_exchange872    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 1873    ret i128 %r874}875 876define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) {877; -O0-LABEL: atomicrmw_sub_i8_aligned_monotonic:878; -O0:    subs w8, w8, w1879; -O0:    ldaddb w8, w0, [x0]880;881; -O1-LABEL: atomicrmw_sub_i8_aligned_monotonic:882; -O1:    ldaddb w8, w0, [x0]883    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1884    ret i8 %r885}886 887define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) {888; -O0-LABEL: atomicrmw_sub_i8_aligned_acquire:889; -O0:    subs w8, w8, w1890; -O0:    ldaddab w8, w0, [x0]891;892; -O1-LABEL: atomicrmw_sub_i8_aligned_acquire:893; -O1:    ldaddab w8, w0, [x0]894    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1895    ret i8 %r896}897 898define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) {899; -O0-LABEL: atomicrmw_sub_i8_aligned_release:900; -O0:    subs w8, w8, w1901; -O0:    ldaddlb w8, w0, [x0]902;903; -O1-LABEL: atomicrmw_sub_i8_aligned_release:904; -O1:    ldaddlb w8, w0, [x0]905    %r = atomicrmw sub ptr %ptr, i8 %value release, align 1906    ret i8 %r907}908 909define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) {910; -O0-LABEL: atomicrmw_sub_i8_aligned_acq_rel:911; -O0:    subs w8, w8, w1912; -O0:    ldaddalb w8, w0, [x0]913;914; -O1-LABEL: atomicrmw_sub_i8_aligned_acq_rel:915; -O1:    ldaddalb w8, w0, [x0]916    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1917    ret i8 %r918}919 920define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) {921; -O0-LABEL: atomicrmw_sub_i8_aligned_seq_cst:922; -O0:    subs w8, w8, w1923; -O0:    ldaddalb w8, w0, [x0]924;925; -O1-LABEL: atomicrmw_sub_i8_aligned_seq_cst:926; -O1:    ldaddalb w8, w0, [x0]927    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 1928    ret i8 %r929}930 931define dso_local i16 @atomicrmw_sub_i16_aligned_monotonic(ptr %ptr, i16 %value) {932; -O0-LABEL: atomicrmw_sub_i16_aligned_monotonic:933; -O0:    subs w8, w8, w1934; -O0:    ldaddh w8, w0, [x0]935;936; -O1-LABEL: atomicrmw_sub_i16_aligned_monotonic:937; -O1:    ldaddh w8, w0, [x0]938    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 2939    ret i16 %r940}941 942define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) {943; -O0-LABEL: atomicrmw_sub_i16_aligned_acquire:944; -O0:    subs w8, w8, w1945; -O0:    ldaddah w8, w0, [x0]946;947; -O1-LABEL: atomicrmw_sub_i16_aligned_acquire:948; -O1:    ldaddah w8, w0, [x0]949    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 2950    ret i16 %r951}952 953define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) {954; -O0-LABEL: atomicrmw_sub_i16_aligned_release:955; -O0:    subs w8, w8, w1956; -O0:    ldaddlh w8, w0, [x0]957;958; -O1-LABEL: atomicrmw_sub_i16_aligned_release:959; -O1:    ldaddlh w8, w0, [x0]960    %r = atomicrmw sub ptr %ptr, i16 %value release, align 2961    ret i16 %r962}963 964define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) {965; -O0-LABEL: atomicrmw_sub_i16_aligned_acq_rel:966; -O0:    subs w8, w8, w1967; -O0:    ldaddalh w8, w0, [x0]968;969; -O1-LABEL: atomicrmw_sub_i16_aligned_acq_rel:970; -O1:    ldaddalh w8, w0, [x0]971    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 2972    ret i16 %r973}974 975define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) {976; -O0-LABEL: atomicrmw_sub_i16_aligned_seq_cst:977; -O0:    subs w8, w8, w1978; -O0:    ldaddalh w8, w0, [x0]979;980; -O1-LABEL: atomicrmw_sub_i16_aligned_seq_cst:981; -O1:    ldaddalh w8, w0, [x0]982    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 2983    ret i16 %r984}985 986define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) {987; -O0-LABEL: atomicrmw_sub_i32_aligned_monotonic:988; -O0:    subs w8, w8, w1989; -O0:    ldadd w8, w0, [x0]990;991; -O1-LABEL: atomicrmw_sub_i32_aligned_monotonic:992; -O1:    ldadd w8, w0, [x0]993    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 4994    ret i32 %r995}996 997define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) {998; -O0-LABEL: atomicrmw_sub_i32_aligned_acquire:999; -O0:    subs w8, w8, w11000; -O0:    ldadda w8, w0, [x0]1001;1002; -O1-LABEL: atomicrmw_sub_i32_aligned_acquire:1003; -O1:    ldadda w8, w0, [x0]1004    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 41005    ret i32 %r1006}1007 1008define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) {1009; -O0-LABEL: atomicrmw_sub_i32_aligned_release:1010; -O0:    subs w8, w8, w11011; -O0:    ldaddl w8, w0, [x0]1012;1013; -O1-LABEL: atomicrmw_sub_i32_aligned_release:1014; -O1:    ldaddl w8, w0, [x0]1015    %r = atomicrmw sub ptr %ptr, i32 %value release, align 41016    ret i32 %r1017}1018 1019define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1020; -O0-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1021; -O0:    subs w8, w8, w11022; -O0:    ldaddal w8, w0, [x0]1023;1024; -O1-LABEL: atomicrmw_sub_i32_aligned_acq_rel:1025; -O1:    ldaddal w8, w0, [x0]1026    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 41027    ret i32 %r1028}1029 1030define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1031; -O0-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1032; -O0:    subs w8, w8, w11033; -O0:    ldaddal w8, w0, [x0]1034;1035; -O1-LABEL: atomicrmw_sub_i32_aligned_seq_cst:1036; -O1:    ldaddal w8, w0, [x0]1037    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 41038    ret i32 %r1039}1040 1041define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) {1042; -O0-LABEL: atomicrmw_sub_i64_aligned_monotonic:1043; -O0:    subs x8, x8, x11044; -O0:    ldadd x8, x0, [x0]1045;1046; -O1-LABEL: atomicrmw_sub_i64_aligned_monotonic:1047; -O1:    ldadd x8, x0, [x0]1048    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 81049    ret i64 %r1050}1051 1052define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) {1053; -O0-LABEL: atomicrmw_sub_i64_aligned_acquire:1054; -O0:    subs x8, x8, x11055; -O0:    ldadda x8, x0, [x0]1056;1057; -O1-LABEL: atomicrmw_sub_i64_aligned_acquire:1058; -O1:    ldadda x8, x0, [x0]1059    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 81060    ret i64 %r1061}1062 1063define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) {1064; -O0-LABEL: atomicrmw_sub_i64_aligned_release:1065; -O0:    subs x8, x8, x11066; -O0:    ldaddl x8, x0, [x0]1067;1068; -O1-LABEL: atomicrmw_sub_i64_aligned_release:1069; -O1:    ldaddl x8, x0, [x0]1070    %r = atomicrmw sub ptr %ptr, i64 %value release, align 81071    ret i64 %r1072}1073 1074define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1075; -O0-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1076; -O0:    subs x8, x8, x11077; -O0:    ldaddal x8, x0, [x0]1078;1079; -O1-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1080; -O1:    ldaddal x8, x0, [x0]1081    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 81082    ret i64 %r1083}1084 1085define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1086; -O0-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1087; -O0:    subs x8, x8, x11088; -O0:    ldaddal x8, x0, [x0]1089;1090; -O1-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1091; -O1:    ldaddal x8, x0, [x0]1092    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 81093    ret i64 %r1094}1095 1096define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) {1097; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic:1098; -O0:    subs x9, x10, x91099; -O0:    casp x0, x1, x2, x3, [x8]1100; -O0:    subs x11, x9, x111101; -O0:    ccmp x8, x10, #0, eq1102;1103; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic:1104; -O1:    ldp x4, x5, [x0]1105; -O1:    subs x9, x7, x31106; -O1:    casp x4, x5, x8, x9, [x0]1107; -O1:    cmp x4, x61108; -O1:    ccmp x5, x7, #0, eq1109    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 161110    ret i128 %r1111}1112 1113define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) {1114; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire:1115; -O0:    subs x9, x10, x91116; -O0:    caspa x0, x1, x2, x3, [x8]1117; -O0:    subs x11, x9, x111118; -O0:    ccmp x8, x10, #0, eq1119;1120; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire:1121; -O1:    ldp x4, x5, [x0]1122; -O1:    subs x9, x7, x31123; -O1:    caspa x4, x5, x8, x9, [x0]1124; -O1:    cmp x4, x61125; -O1:    ccmp x5, x7, #0, eq1126    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 161127    ret i128 %r1128}1129 1130define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) {1131; -O0-LABEL: atomicrmw_sub_i128_aligned_release:1132; -O0:    subs x9, x10, x91133; -O0:    caspl x0, x1, x2, x3, [x8]1134; -O0:    subs x11, x9, x111135; -O0:    ccmp x8, x10, #0, eq1136;1137; -O1-LABEL: atomicrmw_sub_i128_aligned_release:1138; -O1:    ldp x4, x5, [x0]1139; -O1:    subs x9, x7, x31140; -O1:    caspl x4, x5, x8, x9, [x0]1141; -O1:    cmp x4, x61142; -O1:    ccmp x5, x7, #0, eq1143    %r = atomicrmw sub ptr %ptr, i128 %value release, align 161144    ret i128 %r1145}1146 1147define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1148; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1149; -O0:    subs x9, x10, x91150; -O0:    caspal x0, x1, x2, x3, [x8]1151; -O0:    subs x11, x9, x111152; -O0:    ccmp x8, x10, #0, eq1153;1154; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1155; -O1:    ldp x4, x5, [x0]1156; -O1:    subs x9, x7, x31157; -O1:    caspal x4, x5, x8, x9, [x0]1158; -O1:    cmp x4, x61159; -O1:    ccmp x5, x7, #0, eq1160    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 161161    ret i128 %r1162}1163 1164define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1165; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1166; -O0:    subs x9, x10, x91167; -O0:    caspal x0, x1, x2, x3, [x8]1168; -O0:    subs x11, x9, x111169; -O0:    ccmp x8, x10, #0, eq1170;1171; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1172; -O1:    ldp x4, x5, [x0]1173; -O1:    subs x9, x7, x31174; -O1:    caspal x4, x5, x8, x9, [x0]1175; -O1:    cmp x4, x61176; -O1:    ccmp x5, x7, #0, eq1177    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 161178    ret i128 %r1179}1180 1181define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1182; -O0-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1183; -O0:    subs w8, w8, w11184; -O0:    ldaddb w8, w0, [x0]1185;1186; -O1-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1187; -O1:    ldaddb w8, w0, [x0]1188    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11189    ret i8 %r1190}1191 1192define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) {1193; -O0-LABEL: atomicrmw_sub_i8_unaligned_acquire:1194; -O0:    subs w8, w8, w11195; -O0:    ldaddab w8, w0, [x0]1196;1197; -O1-LABEL: atomicrmw_sub_i8_unaligned_acquire:1198; -O1:    ldaddab w8, w0, [x0]1199    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11200    ret i8 %r1201}1202 1203define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) {1204; -O0-LABEL: atomicrmw_sub_i8_unaligned_release:1205; -O0:    subs w8, w8, w11206; -O0:    ldaddlb w8, w0, [x0]1207;1208; -O1-LABEL: atomicrmw_sub_i8_unaligned_release:1209; -O1:    ldaddlb w8, w0, [x0]1210    %r = atomicrmw sub ptr %ptr, i8 %value release, align 11211    ret i8 %r1212}1213 1214define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1215; -O0-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1216; -O0:    subs w8, w8, w11217; -O0:    ldaddalb w8, w0, [x0]1218;1219; -O1-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1220; -O1:    ldaddalb w8, w0, [x0]1221    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11222    ret i8 %r1223}1224 1225define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1226; -O0-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1227; -O0:    subs w8, w8, w11228; -O0:    ldaddalb w8, w0, [x0]1229;1230; -O1-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1231; -O1:    ldaddalb w8, w0, [x0]1232    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11233    ret i8 %r1234}1235 1236define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1237; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1238; -O0:    subs w8, w9, w81239; -O0:    bl __atomic_compare_exchange1240;1241; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1242; -O1:    sub w8, w0, w201243; -O1:    bl __atomic_compare_exchange1244    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 11245    ret i16 %r1246}1247 1248define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) {1249; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire:1250; -O0:    subs w8, w9, w81251; -O0:    bl __atomic_compare_exchange1252;1253; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire:1254; -O1:    sub w8, w0, w201255; -O1:    bl __atomic_compare_exchange1256    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 11257    ret i16 %r1258}1259 1260define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) {1261; -O0-LABEL: atomicrmw_sub_i16_unaligned_release:1262; -O0:    subs w8, w9, w81263; -O0:    bl __atomic_compare_exchange1264;1265; -O1-LABEL: atomicrmw_sub_i16_unaligned_release:1266; -O1:    sub w8, w0, w201267; -O1:    bl __atomic_compare_exchange1268    %r = atomicrmw sub ptr %ptr, i16 %value release, align 11269    ret i16 %r1270}1271 1272define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1273; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1274; -O0:    subs w8, w9, w81275; -O0:    bl __atomic_compare_exchange1276;1277; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1278; -O1:    sub w8, w0, w201279; -O1:    bl __atomic_compare_exchange1280    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 11281    ret i16 %r1282}1283 1284define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1285; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1286; -O0:    subs w8, w9, w81287; -O0:    bl __atomic_compare_exchange1288;1289; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1290; -O1:    sub w8, w0, w201291; -O1:    bl __atomic_compare_exchange1292    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 11293    ret i16 %r1294}1295 1296define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1297; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1298; -O0:    subs w8, w9, w81299; -O0:    bl __atomic_compare_exchange1300;1301; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1302; -O1:    sub w8, w0, w201303; -O1:    bl __atomic_compare_exchange1304    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 11305    ret i32 %r1306}1307 1308define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) {1309; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire:1310; -O0:    subs w8, w9, w81311; -O0:    bl __atomic_compare_exchange1312;1313; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire:1314; -O1:    sub w8, w0, w201315; -O1:    bl __atomic_compare_exchange1316    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 11317    ret i32 %r1318}1319 1320define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) {1321; -O0-LABEL: atomicrmw_sub_i32_unaligned_release:1322; -O0:    subs w8, w9, w81323; -O0:    bl __atomic_compare_exchange1324;1325; -O1-LABEL: atomicrmw_sub_i32_unaligned_release:1326; -O1:    sub w8, w0, w201327; -O1:    bl __atomic_compare_exchange1328    %r = atomicrmw sub ptr %ptr, i32 %value release, align 11329    ret i32 %r1330}1331 1332define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1333; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1334; -O0:    subs w8, w9, w81335; -O0:    bl __atomic_compare_exchange1336;1337; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1338; -O1:    sub w8, w0, w201339; -O1:    bl __atomic_compare_exchange1340    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 11341    ret i32 %r1342}1343 1344define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1345; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1346; -O0:    subs w8, w9, w81347; -O0:    bl __atomic_compare_exchange1348;1349; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1350; -O1:    sub w8, w0, w201351; -O1:    bl __atomic_compare_exchange1352    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 11353    ret i32 %r1354}1355 1356define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1357; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1358; -O0:    subs x8, x9, x81359; -O0:    bl __atomic_compare_exchange1360;1361; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1362; -O1:    sub x8, x0, x201363; -O1:    bl __atomic_compare_exchange1364    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 11365    ret i64 %r1366}1367 1368define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) {1369; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire:1370; -O0:    subs x8, x9, x81371; -O0:    bl __atomic_compare_exchange1372;1373; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire:1374; -O1:    sub x8, x0, x201375; -O1:    bl __atomic_compare_exchange1376    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 11377    ret i64 %r1378}1379 1380define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) {1381; -O0-LABEL: atomicrmw_sub_i64_unaligned_release:1382; -O0:    subs x8, x9, x81383; -O0:    bl __atomic_compare_exchange1384;1385; -O1-LABEL: atomicrmw_sub_i64_unaligned_release:1386; -O1:    sub x8, x0, x201387; -O1:    bl __atomic_compare_exchange1388    %r = atomicrmw sub ptr %ptr, i64 %value release, align 11389    ret i64 %r1390}1391 1392define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1393; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1394; -O0:    subs x8, x9, x81395; -O0:    bl __atomic_compare_exchange1396;1397; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1398; -O1:    sub x8, x0, x201399; -O1:    bl __atomic_compare_exchange1400    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 11401    ret i64 %r1402}1403 1404define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1405; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1406; -O0:    subs x8, x9, x81407; -O0:    bl __atomic_compare_exchange1408;1409; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1410; -O1:    sub x8, x0, x201411; -O1:    bl __atomic_compare_exchange1412    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 11413    ret i64 %r1414}1415 1416define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1417; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1418; -O0:    subs x9, x10, x91419; -O0:    bl __atomic_compare_exchange1420;1421; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1422; -O1:    ldp x0, x1, [x0]1423; -O1:    subs x8, x1, x191424; -O1:    bl __atomic_compare_exchange1425    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 11426    ret i128 %r1427}1428 1429define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) {1430; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire:1431; -O0:    subs x9, x10, x91432; -O0:    bl __atomic_compare_exchange1433;1434; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire:1435; -O1:    ldp x0, x1, [x0]1436; -O1:    subs x8, x1, x191437; -O1:    bl __atomic_compare_exchange1438    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 11439    ret i128 %r1440}1441 1442define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) {1443; -O0-LABEL: atomicrmw_sub_i128_unaligned_release:1444; -O0:    subs x9, x10, x91445; -O0:    bl __atomic_compare_exchange1446;1447; -O1-LABEL: atomicrmw_sub_i128_unaligned_release:1448; -O1:    ldp x0, x1, [x0]1449; -O1:    subs x8, x1, x191450; -O1:    bl __atomic_compare_exchange1451    %r = atomicrmw sub ptr %ptr, i128 %value release, align 11452    ret i128 %r1453}1454 1455define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1456; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1457; -O0:    subs x9, x10, x91458; -O0:    bl __atomic_compare_exchange1459;1460; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1461; -O1:    ldp x0, x1, [x0]1462; -O1:    subs x8, x1, x191463; -O1:    bl __atomic_compare_exchange1464    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 11465    ret i128 %r1466}1467 1468define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1469; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1470; -O0:    subs x9, x10, x91471; -O0:    bl __atomic_compare_exchange1472;1473; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1474; -O1:    ldp x0, x1, [x0]1475; -O1:    subs x8, x1, x191476; -O1:    bl __atomic_compare_exchange1477    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 11478    ret i128 %r1479}1480 1481define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) {1482; CHECK-LABEL: atomicrmw_and_i8_aligned_monotonic:1483; CHECK:    mvn w8, w11484; CHECK:    ldclrb w8, w0, [x0]1485    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11486    ret i8 %r1487}1488 1489define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) {1490; CHECK-LABEL: atomicrmw_and_i8_aligned_acquire:1491; CHECK:    mvn w8, w11492; CHECK:    ldclrab w8, w0, [x0]1493    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11494    ret i8 %r1495}1496 1497define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) {1498; CHECK-LABEL: atomicrmw_and_i8_aligned_release:1499; CHECK:    mvn w8, w11500; CHECK:    ldclrlb w8, w0, [x0]1501    %r = atomicrmw and ptr %ptr, i8 %value release, align 11502    ret i8 %r1503}1504 1505define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) {1506; CHECK-LABEL: atomicrmw_and_i8_aligned_acq_rel:1507; CHECK:    mvn w8, w11508; CHECK:    ldclralb w8, w0, [x0]1509    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11510    ret i8 %r1511}1512 1513define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) {1514; CHECK-LABEL: atomicrmw_and_i8_aligned_seq_cst:1515; CHECK:    mvn w8, w11516; CHECK:    ldclralb w8, w0, [x0]1517    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11518    ret i8 %r1519}1520 1521define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) {1522; CHECK-LABEL: atomicrmw_and_i16_aligned_monotonic:1523; CHECK:    mvn w8, w11524; CHECK:    ldclrh w8, w0, [x0]1525    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 21526    ret i16 %r1527}1528 1529define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) {1530; CHECK-LABEL: atomicrmw_and_i16_aligned_acquire:1531; CHECK:    mvn w8, w11532; CHECK:    ldclrah w8, w0, [x0]1533    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 21534    ret i16 %r1535}1536 1537define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) {1538; CHECK-LABEL: atomicrmw_and_i16_aligned_release:1539; CHECK:    mvn w8, w11540; CHECK:    ldclrlh w8, w0, [x0]1541    %r = atomicrmw and ptr %ptr, i16 %value release, align 21542    ret i16 %r1543}1544 1545define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) {1546; CHECK-LABEL: atomicrmw_and_i16_aligned_acq_rel:1547; CHECK:    mvn w8, w11548; CHECK:    ldclralh w8, w0, [x0]1549    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 21550    ret i16 %r1551}1552 1553define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1554; CHECK-LABEL: atomicrmw_and_i16_aligned_seq_cst:1555; CHECK:    mvn w8, w11556; CHECK:    ldclralh w8, w0, [x0]1557    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 21558    ret i16 %r1559}1560 1561define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) {1562; CHECK-LABEL: atomicrmw_and_i32_aligned_monotonic:1563; CHECK:    mvn w8, w11564; CHECK:    ldclr w8, w0, [x0]1565    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 41566    ret i32 %r1567}1568 1569define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) {1570; CHECK-LABEL: atomicrmw_and_i32_aligned_acquire:1571; CHECK:    mvn w8, w11572; CHECK:    ldclra w8, w0, [x0]1573    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 41574    ret i32 %r1575}1576 1577define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) {1578; CHECK-LABEL: atomicrmw_and_i32_aligned_release:1579; CHECK:    mvn w8, w11580; CHECK:    ldclrl w8, w0, [x0]1581    %r = atomicrmw and ptr %ptr, i32 %value release, align 41582    ret i32 %r1583}1584 1585define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1586; CHECK-LABEL: atomicrmw_and_i32_aligned_acq_rel:1587; CHECK:    mvn w8, w11588; CHECK:    ldclral w8, w0, [x0]1589    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 41590    ret i32 %r1591}1592 1593define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1594; CHECK-LABEL: atomicrmw_and_i32_aligned_seq_cst:1595; CHECK:    mvn w8, w11596; CHECK:    ldclral w8, w0, [x0]1597    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 41598    ret i32 %r1599}1600 1601define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) {1602; CHECK-LABEL: atomicrmw_and_i64_aligned_monotonic:1603; CHECK:    mvn x8, x11604; CHECK:    ldclr x8, x0, [x0]1605    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 81606    ret i64 %r1607}1608 1609define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) {1610; CHECK-LABEL: atomicrmw_and_i64_aligned_acquire:1611; CHECK:    mvn x8, x11612; CHECK:    ldclra x8, x0, [x0]1613    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 81614    ret i64 %r1615}1616 1617define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) {1618; CHECK-LABEL: atomicrmw_and_i64_aligned_release:1619; CHECK:    mvn x8, x11620; CHECK:    ldclrl x8, x0, [x0]1621    %r = atomicrmw and ptr %ptr, i64 %value release, align 81622    ret i64 %r1623}1624 1625define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1626; CHECK-LABEL: atomicrmw_and_i64_aligned_acq_rel:1627; CHECK:    mvn x8, x11628; CHECK:    ldclral x8, x0, [x0]1629    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 81630    ret i64 %r1631}1632 1633define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1634; CHECK-LABEL: atomicrmw_and_i64_aligned_seq_cst:1635; CHECK:    mvn x8, x11636; CHECK:    ldclral x8, x0, [x0]1637    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 81638    ret i64 %r1639}1640 1641define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) {1642; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic:1643; -O0:    mvn x1, x31644; -O0:    mvn x0, x21645; -O0:    ldclrp x0, x1, [x8]1646;1647; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic:1648; -O1:    mvn x1, x31649; -O1:    mvn x8, x21650; -O1:    ldclrp x8, x1, [x0]1651    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 161652    ret i128 %r1653}1654 1655define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) {1656; -O0-LABEL: atomicrmw_and_i128_aligned_acquire:1657; -O0:    mvn x1, x31658; -O0:    mvn x0, x21659; -O0:    ldclrpa x0, x1, [x8]1660;1661; -O1-LABEL: atomicrmw_and_i128_aligned_acquire:1662; -O1:    mvn x1, x31663; -O1:    mvn x8, x21664; -O1:    ldclrpa x8, x1, [x0]1665    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 161666    ret i128 %r1667}1668 1669define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) {1670; -O0-LABEL: atomicrmw_and_i128_aligned_release:1671; -O0:    mvn x1, x31672; -O0:    mvn x0, x21673; -O0:    ldclrpl x0, x1, [x8]1674;1675; -O1-LABEL: atomicrmw_and_i128_aligned_release:1676; -O1:    mvn x1, x31677; -O1:    mvn x8, x21678; -O1:    ldclrpl x8, x1, [x0]1679    %r = atomicrmw and ptr %ptr, i128 %value release, align 161680    ret i128 %r1681}1682 1683define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1684; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel:1685; -O0:    mvn x1, x31686; -O0:    mvn x0, x21687; -O0:    ldclrpal x0, x1, [x8]1688;1689; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel:1690; -O1:    mvn x1, x31691; -O1:    mvn x8, x21692; -O1:    ldclrpal x8, x1, [x0]1693    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 161694    ret i128 %r1695}1696 1697define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1698; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst:1699; -O0:    mvn x1, x31700; -O0:    mvn x0, x21701; -O0:    ldclrpal x0, x1, [x8]1702;1703; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst:1704; -O1:    mvn x1, x31705; -O1:    mvn x8, x21706; -O1:    ldclrpal x8, x1, [x0]1707    %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 x8, x11, x81934; -O0:    and x9, x10, x91935; -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 x8, x11, x81949; -O0:    and x9, x10, x91950; -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 x8, x11, x81964; -O0:    and x9, x10, x91965; -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 x8, x11, x81979; -O0:    and x9, x10, x91980; -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 x8, x11, x81994; -O0:    and x9, x10, x91995; -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, w9, w82009; -O0:    mvn w10, w82010; -O0:    casb w8, w10, [x11]2011; -O0:    subs w9, w8, w9, uxtb2012;2013; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic:2014; -O1:    and w10, w8, w12015; -O1:    mvn w10, w102016; -O1:    casb w9, w10, [x0]2017; -O1:    cmp w9, w8, uxtb2018    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12019    ret i8 %r2020}2021 2022define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) {2023; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire:2024; -O0:    and w8, w9, w82025; -O0:    mvn w10, w82026; -O0:    casab w8, w10, [x11]2027; -O0:    subs w9, w8, w9, uxtb2028;2029; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire:2030; -O1:    and w10, w8, w12031; -O1:    mvn w10, w102032; -O1:    casab w9, w10, [x0]2033; -O1:    cmp w9, w8, uxtb2034    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12035    ret i8 %r2036}2037 2038define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) {2039; -O0-LABEL: atomicrmw_nand_i8_aligned_release:2040; -O0:    and w8, w9, w82041; -O0:    mvn w10, w82042; -O0:    caslb w8, w10, [x11]2043; -O0:    subs w9, w8, w9, uxtb2044;2045; -O1-LABEL: atomicrmw_nand_i8_aligned_release:2046; -O1:    and w10, w8, w12047; -O1:    mvn w10, w102048; -O1:    caslb w9, w10, [x0]2049; -O1:    cmp w9, w8, uxtb2050    %r = atomicrmw nand ptr %ptr, i8 %value release, align 12051    ret i8 %r2052}2053 2054define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2055; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2056; -O0:    and w8, w9, w82057; -O0:    mvn w10, w82058; -O0:    casalb w8, w10, [x11]2059; -O0:    subs w9, w8, w9, uxtb2060;2061; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel:2062; -O1:    and w10, w8, w12063; -O1:    mvn w10, w102064; -O1:    casalb w9, w10, [x0]2065; -O1:    cmp w9, w8, uxtb2066    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12067    ret i8 %r2068}2069 2070define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2071; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2072; -O0:    and w8, w9, w82073; -O0:    mvn w10, w82074; -O0:    casalb w8, w10, [x11]2075; -O0:    subs w9, w8, w9, uxtb2076;2077; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2078; -O1:    and w10, w8, w12079; -O1:    mvn w10, w102080; -O1:    casalb w9, w10, [x0]2081; -O1:    cmp w9, w8, uxtb2082    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12083    ret i8 %r2084}2085 2086define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) {2087; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic:2088; -O0:    and w8, w9, w82089; -O0:    mvn w10, w82090; -O0:    cash w8, w10, [x11]2091; -O0:    subs w9, w8, w9, uxth2092;2093; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic:2094; -O1:    and w10, w8, w12095; -O1:    mvn w10, w102096; -O1:    cash w9, w10, [x0]2097; -O1:    cmp w9, w8, uxth2098    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 22099    ret i16 %r2100}2101 2102define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) {2103; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire:2104; -O0:    and w8, w9, w82105; -O0:    mvn w10, w82106; -O0:    casah w8, w10, [x11]2107; -O0:    subs w9, w8, w9, uxth2108;2109; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire:2110; -O1:    and w10, w8, w12111; -O1:    mvn w10, w102112; -O1:    casah w9, w10, [x0]2113; -O1:    cmp w9, w8, uxth2114    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 22115    ret i16 %r2116}2117 2118define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) {2119; -O0-LABEL: atomicrmw_nand_i16_aligned_release:2120; -O0:    and w8, w9, w82121; -O0:    mvn w10, w82122; -O0:    caslh w8, w10, [x11]2123; -O0:    subs w9, w8, w9, uxth2124;2125; -O1-LABEL: atomicrmw_nand_i16_aligned_release:2126; -O1:    and w10, w8, w12127; -O1:    mvn w10, w102128; -O1:    caslh w9, w10, [x0]2129; -O1:    cmp w9, w8, uxth2130    %r = atomicrmw nand ptr %ptr, i16 %value release, align 22131    ret i16 %r2132}2133 2134define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2135; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2136; -O0:    and w8, w9, w82137; -O0:    mvn w10, w82138; -O0:    casalh w8, w10, [x11]2139; -O0:    subs w9, w8, w9, uxth2140;2141; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2142; -O1:    and w10, w8, w12143; -O1:    mvn w10, w102144; -O1:    casalh w9, w10, [x0]2145; -O1:    cmp w9, w8, uxth2146    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 22147    ret i16 %r2148}2149 2150define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2151; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2152; -O0:    and w8, w9, w82153; -O0:    mvn w10, w82154; -O0:    casalh w8, w10, [x11]2155; -O0:    subs w9, w8, w9, uxth2156;2157; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2158; -O1:    and w10, w8, w12159; -O1:    mvn w10, w102160; -O1:    casalh w9, w10, [x0]2161; -O1:    cmp w9, w8, uxth2162    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 22163    ret i16 %r2164}2165 2166define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) {2167; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic:2168; -O0:    and w8, w9, w82169; -O0:    mvn w10, w82170; -O0:    cas w8, w10, [x11]2171; -O0:    subs w9, w8, w92172;2173; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic:2174; -O1:    and w10, w8, w12175; -O1:    mvn w10, w102176; -O1:    cas w9, w10, [x0]2177; -O1:    cmp w9, w82178    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 42179    ret i32 %r2180}2181 2182define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) {2183; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire:2184; -O0:    and w8, w9, w82185; -O0:    mvn w10, w82186; -O0:    casa w8, w10, [x11]2187; -O0:    subs w9, w8, w92188;2189; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire:2190; -O1:    and w10, w8, w12191; -O1:    mvn w10, w102192; -O1:    casa w9, w10, [x0]2193; -O1:    cmp w9, w82194    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 42195    ret i32 %r2196}2197 2198define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) {2199; -O0-LABEL: atomicrmw_nand_i32_aligned_release:2200; -O0:    and w8, w9, w82201; -O0:    mvn w10, w82202; -O0:    casl w8, w10, [x11]2203; -O0:    subs w9, w8, w92204;2205; -O1-LABEL: atomicrmw_nand_i32_aligned_release:2206; -O1:    and w10, w8, w12207; -O1:    mvn w10, w102208; -O1:    casl w9, w10, [x0]2209; -O1:    cmp w9, w82210    %r = atomicrmw nand ptr %ptr, i32 %value release, align 42211    ret i32 %r2212}2213 2214define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2215; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2216; -O0:    and w8, w9, w82217; -O0:    mvn w10, w82218; -O0:    casal w8, w10, [x11]2219; -O0:    subs w9, w8, w92220;2221; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2222; -O1:    and w10, w8, w12223; -O1:    mvn w10, w102224; -O1:    casal w9, w10, [x0]2225; -O1:    cmp w9, w82226    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 42227    ret i32 %r2228}2229 2230define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2231; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2232; -O0:    and w8, w9, w82233; -O0:    mvn w10, w82234; -O0:    casal w8, w10, [x11]2235; -O0:    subs w9, w8, w92236;2237; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2238; -O1:    and w10, w8, w12239; -O1:    mvn w10, w102240; -O1:    casal w9, w10, [x0]2241; -O1:    cmp w9, w82242    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 42243    ret i32 %r2244}2245 2246define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) {2247; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic:2248; -O0:    and x8, x9, x82249; -O0:    mvn x10, x82250; -O0:    cas x8, x10, [x11]2251; -O0:    subs x9, x8, x92252;2253; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic:2254; -O1:    and x10, x8, x12255; -O1:    mvn x10, x102256; -O1:    cas x9, x10, [x0]2257; -O1:    cmp x9, x82258    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 82259    ret i64 %r2260}2261 2262define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) {2263; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire:2264; -O0:    and x8, x9, x82265; -O0:    mvn x10, x82266; -O0:    casa x8, x10, [x11]2267; -O0:    subs x9, x8, x92268;2269; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire:2270; -O1:    and x10, x8, x12271; -O1:    mvn x10, x102272; -O1:    casa x9, x10, [x0]2273; -O1:    cmp x9, x82274    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 82275    ret i64 %r2276}2277 2278define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) {2279; -O0-LABEL: atomicrmw_nand_i64_aligned_release:2280; -O0:    and x8, x9, x82281; -O0:    mvn x10, x82282; -O0:    casl x8, x10, [x11]2283; -O0:    subs x9, x8, x92284;2285; -O1-LABEL: atomicrmw_nand_i64_aligned_release:2286; -O1:    and x10, x8, x12287; -O1:    mvn x10, x102288; -O1:    casl x9, x10, [x0]2289; -O1:    cmp x9, x82290    %r = atomicrmw nand ptr %ptr, i64 %value release, align 82291    ret i64 %r2292}2293 2294define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2295; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2296; -O0:    and x8, x9, x82297; -O0:    mvn x10, x82298; -O0:    casal x8, x10, [x11]2299; -O0:    subs x9, x8, x92300;2301; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2302; -O1:    and x10, x8, x12303; -O1:    mvn x10, x102304; -O1:    casal x9, x10, [x0]2305; -O1:    cmp x9, x82306    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 82307    ret i64 %r2308}2309 2310define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2311; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2312; -O0:    and x8, x9, x82313; -O0:    mvn x10, x82314; -O0:    casal x8, x10, [x11]2315; -O0:    subs x9, x8, x92316;2317; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2318; -O1:    and x10, x8, x12319; -O1:    mvn x10, x102320; -O1:    casal x9, x10, [x0]2321; -O1:    cmp x9, x82322    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 82323    ret i64 %r2324}2325 2326define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) {2327; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic:2328; -O0:    and x9, x10, x92329; -O0:    and x12, x11, x122330; -O0:    mvn x2, x122331; -O0:    mvn x9, x92332; -O0:    casp x0, x1, x2, x3, [x8]2333; -O0:    subs x11, x9, x112334; -O0:    ccmp x8, x10, #0, eq2335;2336; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic:2337; -O1:    ldp x4, x5, [x0]2338; -O1:    and x8, x4, x22339; -O1:    and x9, x7, x32340; -O1:    mvn x10, x82341; -O1:    mvn x11, x92342; -O1:    casp x4, x5, x10, x11, [x0]2343; -O1:    cmp x4, x62344; -O1:    ccmp x5, x7, #0, eq2345    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 162346    ret i128 %r2347}2348 2349define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) {2350; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire:2351; -O0:    and x9, x10, x92352; -O0:    and x12, x11, x122353; -O0:    mvn x2, x122354; -O0:    mvn x9, x92355; -O0:    caspa x0, x1, x2, x3, [x8]2356; -O0:    subs x11, x9, x112357; -O0:    ccmp x8, x10, #0, eq2358;2359; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire:2360; -O1:    ldp x4, x5, [x0]2361; -O1:    and x8, x4, x22362; -O1:    and x9, x7, x32363; -O1:    mvn x10, x82364; -O1:    mvn x11, x92365; -O1:    caspa x4, x5, x10, x11, [x0]2366; -O1:    cmp x4, x62367; -O1:    ccmp x5, x7, #0, eq2368    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 162369    ret i128 %r2370}2371 2372define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) {2373; -O0-LABEL: atomicrmw_nand_i128_aligned_release:2374; -O0:    and x9, x10, x92375; -O0:    and x12, x11, x122376; -O0:    mvn x2, x122377; -O0:    mvn x9, x92378; -O0:    caspl x0, x1, x2, x3, [x8]2379; -O0:    subs x11, x9, x112380; -O0:    ccmp x8, x10, #0, eq2381;2382; -O1-LABEL: atomicrmw_nand_i128_aligned_release:2383; -O1:    ldp x4, x5, [x0]2384; -O1:    and x8, x4, x22385; -O1:    and x9, x7, x32386; -O1:    mvn x10, x82387; -O1:    mvn x11, x92388; -O1:    caspl x4, x5, x10, x11, [x0]2389; -O1:    cmp x4, x62390; -O1:    ccmp x5, x7, #0, eq2391    %r = atomicrmw nand ptr %ptr, i128 %value release, align 162392    ret i128 %r2393}2394 2395define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2396; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2397; -O0:    and x9, x10, x92398; -O0:    and x12, x11, x122399; -O0:    mvn x2, x122400; -O0:    mvn x9, x92401; -O0:    caspal x0, x1, x2, x3, [x8]2402; -O0:    subs x11, x9, x112403; -O0:    ccmp x8, x10, #0, eq2404;2405; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2406; -O1:    ldp x4, x5, [x0]2407; -O1:    and x8, x4, x22408; -O1:    and x9, x7, x32409; -O1:    mvn x10, x82410; -O1:    mvn x11, x92411; -O1:    caspal x4, x5, x10, x11, [x0]2412; -O1:    cmp x4, x62413; -O1:    ccmp x5, x7, #0, eq2414    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 162415    ret i128 %r2416}2417 2418define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) {2419; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2420; -O0:    and x9, x10, x92421; -O0:    and x12, x11, x122422; -O0:    mvn x2, x122423; -O0:    mvn x9, x92424; -O0:    caspal x0, x1, x2, x3, [x8]2425; -O0:    subs x11, x9, x112426; -O0:    ccmp x8, x10, #0, eq2427;2428; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2429; -O1:    ldp x4, x5, [x0]2430; -O1:    and x8, x4, x22431; -O1:    and x9, x7, x32432; -O1:    mvn x10, x82433; -O1:    mvn x11, x92434; -O1:    caspal x4, x5, x10, x11, [x0]2435; -O1:    cmp x4, x62436; -O1:    ccmp x5, x7, #0, eq2437    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 162438    ret i128 %r2439}2440 2441define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) {2442; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2443; -O0:    and w8, w9, w82444; -O0:    mvn w10, w82445; -O0:    casb w8, w10, [x11]2446; -O0:    subs w9, w8, w9, uxtb2447;2448; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2449; -O1:    and w10, w8, w12450; -O1:    mvn w10, w102451; -O1:    casb w9, w10, [x0]2452; -O1:    cmp w9, w8, uxtb2453    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12454    ret i8 %r2455}2456 2457define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) {2458; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire:2459; -O0:    and w8, w9, w82460; -O0:    mvn w10, w82461; -O0:    casab w8, w10, [x11]2462; -O0:    subs w9, w8, w9, uxtb2463;2464; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire:2465; -O1:    and w10, w8, w12466; -O1:    mvn w10, w102467; -O1:    casab w9, w10, [x0]2468; -O1:    cmp w9, w8, uxtb2469    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12470    ret i8 %r2471}2472 2473define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) {2474; -O0-LABEL: atomicrmw_nand_i8_unaligned_release:2475; -O0:    and w8, w9, w82476; -O0:    mvn w10, w82477; -O0:    caslb w8, w10, [x11]2478; -O0:    subs w9, w8, w9, uxtb2479;2480; -O1-LABEL: atomicrmw_nand_i8_unaligned_release:2481; -O1:    and w10, w8, w12482; -O1:    mvn w10, w102483; -O1:    caslb w9, w10, [x0]2484; -O1:    cmp w9, w8, uxtb2485    %r = atomicrmw nand ptr %ptr, i8 %value release, align 12486    ret i8 %r2487}2488 2489define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {2490; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2491; -O0:    and w8, w9, w82492; -O0:    mvn w10, w82493; -O0:    casalb w8, w10, [x11]2494; -O0:    subs w9, w8, w9, uxtb2495;2496; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2497; -O1:    and w10, w8, w12498; -O1:    mvn w10, w102499; -O1:    casalb w9, w10, [x0]2500; -O1:    cmp w9, w8, uxtb2501    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12502    ret i8 %r2503}2504 2505define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {2506; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2507; -O0:    and w8, w9, w82508; -O0:    mvn w10, w82509; -O0:    casalb w8, w10, [x11]2510; -O0:    subs w9, w8, w9, uxtb2511;2512; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2513; -O1:    and w10, w8, w12514; -O1:    mvn w10, w102515; -O1:    casalb w9, w10, [x0]2516; -O1:    cmp w9, w8, uxtb2517    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12518    ret i8 %r2519}2520 2521define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) {2522; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2523; -O0:    and w8, w9, w82524; -O0:    mvn w8, w82525; -O0:    bl __atomic_compare_exchange2526;2527; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2528; -O1:    and w8, w0, w202529; -O1:    mvn w8, w82530; -O1:    bl __atomic_compare_exchange2531    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 12532    ret i16 %r2533}2534 2535define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) {2536; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire:2537; -O0:    and w8, w9, w82538; -O0:    mvn w8, w82539; -O0:    bl __atomic_compare_exchange2540;2541; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire:2542; -O1:    and w8, w0, w202543; -O1:    mvn w8, w82544; -O1:    bl __atomic_compare_exchange2545    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 12546    ret i16 %r2547}2548 2549define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) {2550; -O0-LABEL: atomicrmw_nand_i16_unaligned_release:2551; -O0:    and w8, w9, w82552; -O0:    mvn w8, w82553; -O0:    bl __atomic_compare_exchange2554;2555; -O1-LABEL: atomicrmw_nand_i16_unaligned_release:2556; -O1:    and w8, w0, w202557; -O1:    mvn w8, w82558; -O1:    bl __atomic_compare_exchange2559    %r = atomicrmw nand ptr %ptr, i16 %value release, align 12560    ret i16 %r2561}2562 2563define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {2564; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2565; -O0:    and w8, w9, w82566; -O0:    mvn w8, w82567; -O0:    bl __atomic_compare_exchange2568;2569; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2570; -O1:    and w8, w0, w202571; -O1:    mvn w8, w82572; -O1:    bl __atomic_compare_exchange2573    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 12574    ret i16 %r2575}2576 2577define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {2578; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2579; -O0:    and w8, w9, w82580; -O0:    mvn w8, w82581; -O0:    bl __atomic_compare_exchange2582;2583; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2584; -O1:    and w8, w0, w202585; -O1:    mvn w8, w82586; -O1:    bl __atomic_compare_exchange2587    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 12588    ret i16 %r2589}2590 2591define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) {2592; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2593; -O0:    and w8, w9, w82594; -O0:    mvn w8, w82595; -O0:    bl __atomic_compare_exchange2596;2597; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2598; -O1:    and w8, w0, w202599; -O1:    mvn w8, w82600; -O1:    bl __atomic_compare_exchange2601    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 12602    ret i32 %r2603}2604 2605define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) {2606; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire:2607; -O0:    and w8, w9, w82608; -O0:    mvn w8, w82609; -O0:    bl __atomic_compare_exchange2610;2611; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire:2612; -O1:    and w8, w0, w202613; -O1:    mvn w8, w82614; -O1:    bl __atomic_compare_exchange2615    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 12616    ret i32 %r2617}2618 2619define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) {2620; -O0-LABEL: atomicrmw_nand_i32_unaligned_release:2621; -O0:    and w8, w9, w82622; -O0:    mvn w8, w82623; -O0:    bl __atomic_compare_exchange2624;2625; -O1-LABEL: atomicrmw_nand_i32_unaligned_release:2626; -O1:    and w8, w0, w202627; -O1:    mvn w8, w82628; -O1:    bl __atomic_compare_exchange2629    %r = atomicrmw nand ptr %ptr, i32 %value release, align 12630    ret i32 %r2631}2632 2633define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {2634; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2635; -O0:    and w8, w9, w82636; -O0:    mvn w8, w82637; -O0:    bl __atomic_compare_exchange2638;2639; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2640; -O1:    and w8, w0, w202641; -O1:    mvn w8, w82642; -O1:    bl __atomic_compare_exchange2643    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 12644    ret i32 %r2645}2646 2647define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {2648; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2649; -O0:    and w8, w9, w82650; -O0:    mvn w8, w82651; -O0:    bl __atomic_compare_exchange2652;2653; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2654; -O1:    and w8, w0, w202655; -O1:    mvn w8, w82656; -O1:    bl __atomic_compare_exchange2657    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 12658    ret i32 %r2659}2660 2661define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2662; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2663; -O0:    and x8, x9, x82664; -O0:    mvn x8, x82665; -O0:    bl __atomic_compare_exchange2666;2667; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2668; -O1:    and x8, x0, x202669; -O1:    mvn x8, x82670; -O1:    bl __atomic_compare_exchange2671    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 12672    ret i64 %r2673}2674 2675define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) {2676; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire:2677; -O0:    and x8, x9, x82678; -O0:    mvn x8, x82679; -O0:    bl __atomic_compare_exchange2680;2681; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire:2682; -O1:    and x8, x0, x202683; -O1:    mvn x8, x82684; -O1:    bl __atomic_compare_exchange2685    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 12686    ret i64 %r2687}2688 2689define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) {2690; -O0-LABEL: atomicrmw_nand_i64_unaligned_release:2691; -O0:    and x8, x9, x82692; -O0:    mvn x8, x82693; -O0:    bl __atomic_compare_exchange2694;2695; -O1-LABEL: atomicrmw_nand_i64_unaligned_release:2696; -O1:    and x8, x0, x202697; -O1:    mvn x8, x82698; -O1:    bl __atomic_compare_exchange2699    %r = atomicrmw nand ptr %ptr, i64 %value release, align 12700    ret i64 %r2701}2702 2703define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2704; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2705; -O0:    and x8, x9, x82706; -O0:    mvn x8, x82707; -O0:    bl __atomic_compare_exchange2708;2709; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2710; -O1:    and x8, x0, x202711; -O1:    mvn x8, x82712; -O1:    bl __atomic_compare_exchange2713    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 12714    ret i64 %r2715}2716 2717define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2718; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2719; -O0:    and x8, x9, x82720; -O0:    mvn x8, x82721; -O0:    bl __atomic_compare_exchange2722;2723; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2724; -O1:    and x8, x0, x202725; -O1:    mvn x8, x82726; -O1:    bl __atomic_compare_exchange2727    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 12728    ret i64 %r2729}2730 2731define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2732; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2733; -O0:    and x9, x11, x92734; -O0:    and x8, x10, x82735; -O0:    mvn x8, x82736; -O0:    mvn x9, x92737; -O0:    bl __atomic_compare_exchange2738;2739; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2740; -O1:    ldp x0, x1, [x0]2741; -O1:    and x8, x1, x192742; -O1:    and x9, x0, x212743; -O1:    mvn x8, x82744; -O1:    mvn x9, x92745; -O1:    bl __atomic_compare_exchange2746    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 12747    ret i128 %r2748}2749 2750define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) {2751; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire:2752; -O0:    and x9, x11, x92753; -O0:    and x8, x10, x82754; -O0:    mvn x8, x82755; -O0:    mvn x9, x92756; -O0:    bl __atomic_compare_exchange2757;2758; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire:2759; -O1:    ldp x0, x1, [x0]2760; -O1:    and x8, x1, x192761; -O1:    and x9, x0, x212762; -O1:    mvn x8, x82763; -O1:    mvn x9, x92764; -O1:    bl __atomic_compare_exchange2765    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 12766    ret i128 %r2767}2768 2769define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) {2770; -O0-LABEL: atomicrmw_nand_i128_unaligned_release:2771; -O0:    and x9, x11, x92772; -O0:    and x8, x10, x82773; -O0:    mvn x8, x82774; -O0:    mvn x9, x92775; -O0:    bl __atomic_compare_exchange2776;2777; -O1-LABEL: atomicrmw_nand_i128_unaligned_release:2778; -O1:    ldp x0, x1, [x0]2779; -O1:    and x8, x1, x192780; -O1:    and x9, x0, x212781; -O1:    mvn x8, x82782; -O1:    mvn x9, x92783; -O1:    bl __atomic_compare_exchange2784    %r = atomicrmw nand ptr %ptr, i128 %value release, align 12785    ret i128 %r2786}2787 2788define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2789; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2790; -O0:    and x9, x11, x92791; -O0:    and x8, x10, x82792; -O0:    mvn x8, x82793; -O0:    mvn x9, x92794; -O0:    bl __atomic_compare_exchange2795;2796; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2797; -O1:    ldp x0, x1, [x0]2798; -O1:    and x8, x1, x192799; -O1:    and x9, x0, x212800; -O1:    mvn x8, x82801; -O1:    mvn x9, x92802; -O1:    bl __atomic_compare_exchange2803    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 12804    ret i128 %r2805}2806 2807define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2808; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2809; -O0:    and x9, x11, x92810; -O0:    and x8, x10, x82811; -O0:    mvn x8, x82812; -O0:    mvn x9, x92813; -O0:    bl __atomic_compare_exchange2814;2815; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2816; -O1:    ldp x0, x1, [x0]2817; -O1:    and x8, x1, x192818; -O1:    and x9, x0, x212819; -O1:    mvn x8, x82820; -O1:    mvn x9, x92821; -O1:    bl __atomic_compare_exchange2822    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 12823    ret i128 %r2824}2825 2826define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) {2827; CHECK-LABEL: atomicrmw_or_i8_aligned_monotonic:2828; CHECK:    ldsetb w1, w0, [x0]2829    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 12830    ret i8 %r2831}2832 2833define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) {2834; CHECK-LABEL: atomicrmw_or_i8_aligned_acquire:2835; CHECK:    ldsetab w1, w0, [x0]2836    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 12837    ret i8 %r2838}2839 2840define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) {2841; CHECK-LABEL: atomicrmw_or_i8_aligned_release:2842; CHECK:    ldsetlb w1, w0, [x0]2843    %r = atomicrmw or ptr %ptr, i8 %value release, align 12844    ret i8 %r2845}2846 2847define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2848; CHECK-LABEL: atomicrmw_or_i8_aligned_acq_rel:2849; CHECK:    ldsetalb w1, w0, [x0]2850    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 12851    ret i8 %r2852}2853 2854define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2855; CHECK-LABEL: atomicrmw_or_i8_aligned_seq_cst:2856; CHECK:    ldsetalb w1, w0, [x0]2857    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 12858    ret i8 %r2859}2860 2861define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) {2862; CHECK-LABEL: atomicrmw_or_i16_aligned_monotonic:2863; CHECK:    ldseth w1, w0, [x0]2864    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 22865    ret i16 %r2866}2867 2868define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) {2869; CHECK-LABEL: atomicrmw_or_i16_aligned_acquire:2870; CHECK:    ldsetah w1, w0, [x0]2871    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 22872    ret i16 %r2873}2874 2875define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) {2876; CHECK-LABEL: atomicrmw_or_i16_aligned_release:2877; CHECK:    ldsetlh w1, w0, [x0]2878    %r = atomicrmw or ptr %ptr, i16 %value release, align 22879    ret i16 %r2880}2881 2882define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2883; CHECK-LABEL: atomicrmw_or_i16_aligned_acq_rel:2884; CHECK:    ldsetalh w1, w0, [x0]2885    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 22886    ret i16 %r2887}2888 2889define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2890; CHECK-LABEL: atomicrmw_or_i16_aligned_seq_cst:2891; CHECK:    ldsetalh w1, w0, [x0]2892    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 22893    ret i16 %r2894}2895 2896define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) {2897; CHECK-LABEL: atomicrmw_or_i32_aligned_monotonic:2898; CHECK:    ldset w1, w0, [x0]2899    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 42900    ret i32 %r2901}2902 2903define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) {2904; CHECK-LABEL: atomicrmw_or_i32_aligned_acquire:2905; CHECK:    ldseta w1, w0, [x0]2906    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 42907    ret i32 %r2908}2909 2910define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) {2911; CHECK-LABEL: atomicrmw_or_i32_aligned_release:2912; CHECK:    ldsetl w1, w0, [x0]2913    %r = atomicrmw or ptr %ptr, i32 %value release, align 42914    ret i32 %r2915}2916 2917define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2918; CHECK-LABEL: atomicrmw_or_i32_aligned_acq_rel:2919; CHECK:    ldsetal w1, w0, [x0]2920    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 42921    ret i32 %r2922}2923 2924define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2925; CHECK-LABEL: atomicrmw_or_i32_aligned_seq_cst:2926; CHECK:    ldsetal w1, w0, [x0]2927    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 42928    ret i32 %r2929}2930 2931define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) {2932; CHECK-LABEL: atomicrmw_or_i64_aligned_monotonic:2933; CHECK:    ldset x1, x0, [x0]2934    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 82935    ret i64 %r2936}2937 2938define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) {2939; CHECK-LABEL: atomicrmw_or_i64_aligned_acquire:2940; CHECK:    ldseta x1, x0, [x0]2941    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 82942    ret i64 %r2943}2944 2945define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) {2946; CHECK-LABEL: atomicrmw_or_i64_aligned_release:2947; CHECK:    ldsetl x1, x0, [x0]2948    %r = atomicrmw or ptr %ptr, i64 %value release, align 82949    ret i64 %r2950}2951 2952define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2953; CHECK-LABEL: atomicrmw_or_i64_aligned_acq_rel:2954; CHECK:    ldsetal x1, x0, [x0]2955    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 82956    ret i64 %r2957}2958 2959define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2960; CHECK-LABEL: atomicrmw_or_i64_aligned_seq_cst:2961; CHECK:    ldsetal x1, x0, [x0]2962    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 82963    ret i64 %r2964}2965 2966define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) {2967; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic:2968; -O0:    ldsetp x0, x1, [x8]2969;2970; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic:2971; -O1:    ldsetp x2, x1, [x0]2972    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 162973    ret i128 %r2974}2975 2976define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) {2977; -O0-LABEL: atomicrmw_or_i128_aligned_acquire:2978; -O0:    ldsetpa x0, x1, [x8]2979;2980; -O1-LABEL: atomicrmw_or_i128_aligned_acquire:2981; -O1:    ldsetpa x2, x1, [x0]2982    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 162983    ret i128 %r2984}2985 2986define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) {2987; -O0-LABEL: atomicrmw_or_i128_aligned_release:2988; -O0:    ldsetpl x0, x1, [x8]2989;2990; -O1-LABEL: atomicrmw_or_i128_aligned_release:2991; -O1:    ldsetpl x2, x1, [x0]2992    %r = atomicrmw or ptr %ptr, i128 %value release, align 162993    ret i128 %r2994}2995 2996define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2997; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel:2998; -O0:    ldsetpal x0, x1, [x8]2999;3000; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel:3001; -O1:    ldsetpal x2, x1, [x0]3002    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 163003    ret i128 %r3004}3005 3006define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3007; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst:3008; -O0:    ldsetpal x0, x1, [x8]3009;3010; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst:3011; -O1:    ldsetpal x2, x1, [x0]3012    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 163013    ret i128 %r3014}3015 3016define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3017; CHECK-LABEL: atomicrmw_or_i8_unaligned_monotonic:3018; CHECK:    ldsetb w1, w0, [x0]3019    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 13020    ret i8 %r3021}3022 3023define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) {3024; CHECK-LABEL: atomicrmw_or_i8_unaligned_acquire:3025; CHECK:    ldsetab w1, w0, [x0]3026    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 13027    ret i8 %r3028}3029 3030define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) {3031; CHECK-LABEL: atomicrmw_or_i8_unaligned_release:3032; CHECK:    ldsetlb w1, w0, [x0]3033    %r = atomicrmw or ptr %ptr, i8 %value release, align 13034    ret i8 %r3035}3036 3037define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3038; CHECK-LABEL: atomicrmw_or_i8_unaligned_acq_rel:3039; CHECK:    ldsetalb w1, w0, [x0]3040    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 13041    ret i8 %r3042}3043 3044define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3045; CHECK-LABEL: atomicrmw_or_i8_unaligned_seq_cst:3046; CHECK:    ldsetalb w1, w0, [x0]3047    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 13048    ret i8 %r3049}3050 3051define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3052; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic:3053; -O0:    orr w8, w9, w83054; -O0:    bl __atomic_compare_exchange3055;3056; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic:3057; -O1:    orr w8, w0, w203058; -O1:    bl __atomic_compare_exchange3059    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 13060    ret i16 %r3061}3062 3063define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) {3064; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire:3065; -O0:    orr w8, w9, w83066; -O0:    bl __atomic_compare_exchange3067;3068; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire:3069; -O1:    orr w8, w0, w203070; -O1:    bl __atomic_compare_exchange3071    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 13072    ret i16 %r3073}3074 3075define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) {3076; -O0-LABEL: atomicrmw_or_i16_unaligned_release:3077; -O0:    orr w8, w9, w83078; -O0:    bl __atomic_compare_exchange3079;3080; -O1-LABEL: atomicrmw_or_i16_unaligned_release:3081; -O1:    orr w8, w0, w203082; -O1:    bl __atomic_compare_exchange3083    %r = atomicrmw or ptr %ptr, i16 %value release, align 13084    ret i16 %r3085}3086 3087define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3088; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3089; -O0:    orr w8, w9, w83090; -O0:    bl __atomic_compare_exchange3091;3092; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3093; -O1:    orr w8, w0, w203094; -O1:    bl __atomic_compare_exchange3095    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 13096    ret i16 %r3097}3098 3099define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3100; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3101; -O0:    orr w8, w9, w83102; -O0:    bl __atomic_compare_exchange3103;3104; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3105; -O1:    orr w8, w0, w203106; -O1:    bl __atomic_compare_exchange3107    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 13108    ret i16 %r3109}3110 3111define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3112; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic:3113; -O0:    orr w8, w9, w83114; -O0:    bl __atomic_compare_exchange3115;3116; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic:3117; -O1:    orr w8, w0, w203118; -O1:    bl __atomic_compare_exchange3119    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 13120    ret i32 %r3121}3122 3123define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) {3124; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire:3125; -O0:    orr w8, w9, w83126; -O0:    bl __atomic_compare_exchange3127;3128; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire:3129; -O1:    orr w8, w0, w203130; -O1:    bl __atomic_compare_exchange3131    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 13132    ret i32 %r3133}3134 3135define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) {3136; -O0-LABEL: atomicrmw_or_i32_unaligned_release:3137; -O0:    orr w8, w9, w83138; -O0:    bl __atomic_compare_exchange3139;3140; -O1-LABEL: atomicrmw_or_i32_unaligned_release:3141; -O1:    orr w8, w0, w203142; -O1:    bl __atomic_compare_exchange3143    %r = atomicrmw or ptr %ptr, i32 %value release, align 13144    ret i32 %r3145}3146 3147define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3148; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3149; -O0:    orr w8, w9, w83150; -O0:    bl __atomic_compare_exchange3151;3152; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3153; -O1:    orr w8, w0, w203154; -O1:    bl __atomic_compare_exchange3155    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 13156    ret i32 %r3157}3158 3159define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3160; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3161; -O0:    orr w8, w9, w83162; -O0:    bl __atomic_compare_exchange3163;3164; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3165; -O1:    orr w8, w0, w203166; -O1:    bl __atomic_compare_exchange3167    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 13168    ret i32 %r3169}3170 3171define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3172; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic:3173; -O0:    orr x8, x9, x83174; -O0:    bl __atomic_compare_exchange3175;3176; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic:3177; -O1:    orr x8, x0, x203178; -O1:    bl __atomic_compare_exchange3179    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 13180    ret i64 %r3181}3182 3183define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) {3184; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire:3185; -O0:    orr x8, x9, x83186; -O0:    bl __atomic_compare_exchange3187;3188; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire:3189; -O1:    orr x8, x0, x203190; -O1:    bl __atomic_compare_exchange3191    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 13192    ret i64 %r3193}3194 3195define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) {3196; -O0-LABEL: atomicrmw_or_i64_unaligned_release:3197; -O0:    orr x8, x9, x83198; -O0:    bl __atomic_compare_exchange3199;3200; -O1-LABEL: atomicrmw_or_i64_unaligned_release:3201; -O1:    orr x8, x0, x203202; -O1:    bl __atomic_compare_exchange3203    %r = atomicrmw or ptr %ptr, i64 %value release, align 13204    ret i64 %r3205}3206 3207define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3208; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3209; -O0:    orr x8, x9, x83210; -O0:    bl __atomic_compare_exchange3211;3212; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3213; -O1:    orr x8, x0, x203214; -O1:    bl __atomic_compare_exchange3215    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 13216    ret i64 %r3217}3218 3219define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3220; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3221; -O0:    orr x8, x9, x83222; -O0:    bl __atomic_compare_exchange3223;3224; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3225; -O1:    orr x8, x0, x203226; -O1:    bl __atomic_compare_exchange3227    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 13228    ret i64 %r3229}3230 3231define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3232; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic:3233; -O0:    orr x8, x11, x83234; -O0:    orr x9, x10, x93235; -O0:    bl __atomic_compare_exchange3236;3237; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic:3238; -O1:    ldp x0, x1, [x0]3239; -O1:    orr x8, x1, x193240; -O1:    orr x9, x0, x213241; -O1:    bl __atomic_compare_exchange3242    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 13243    ret i128 %r3244}3245 3246define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) {3247; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire:3248; -O0:    orr x8, x11, x83249; -O0:    orr x9, x10, x93250; -O0:    bl __atomic_compare_exchange3251;3252; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire:3253; -O1:    ldp x0, x1, [x0]3254; -O1:    orr x8, x1, x193255; -O1:    orr x9, x0, x213256; -O1:    bl __atomic_compare_exchange3257    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 13258    ret i128 %r3259}3260 3261define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) {3262; -O0-LABEL: atomicrmw_or_i128_unaligned_release:3263; -O0:    orr x8, x11, x83264; -O0:    orr x9, x10, x93265; -O0:    bl __atomic_compare_exchange3266;3267; -O1-LABEL: atomicrmw_or_i128_unaligned_release:3268; -O1:    ldp x0, x1, [x0]3269; -O1:    orr x8, x1, x193270; -O1:    orr x9, x0, x213271; -O1:    bl __atomic_compare_exchange3272    %r = atomicrmw or ptr %ptr, i128 %value release, align 13273    ret i128 %r3274}3275 3276define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3277; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3278; -O0:    orr x8, x11, x83279; -O0:    orr x9, x10, x93280; -O0:    bl __atomic_compare_exchange3281;3282; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3283; -O1:    ldp x0, x1, [x0]3284; -O1:    orr x8, x1, x193285; -O1:    orr x9, x0, x213286; -O1:    bl __atomic_compare_exchange3287    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 13288    ret i128 %r3289}3290 3291define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3292; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3293; -O0:    orr x8, x11, x83294; -O0:    orr x9, x10, x93295; -O0:    bl __atomic_compare_exchange3296;3297; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3298; -O1:    ldp x0, x1, [x0]3299; -O1:    orr x8, x1, x193300; -O1:    orr x9, x0, x213301; -O1:    bl __atomic_compare_exchange3302    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 13303    ret i128 %r3304}3305 3306define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) {3307; CHECK-LABEL: atomicrmw_xor_i8_aligned_monotonic:3308; CHECK:    ldeorb w1, w0, [x0]3309    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13310    ret i8 %r3311}3312 3313define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) {3314; CHECK-LABEL: atomicrmw_xor_i8_aligned_acquire:3315; CHECK:    ldeorab w1, w0, [x0]3316    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13317    ret i8 %r3318}3319 3320define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) {3321; CHECK-LABEL: atomicrmw_xor_i8_aligned_release:3322; CHECK:    ldeorlb w1, w0, [x0]3323    %r = atomicrmw xor ptr %ptr, i8 %value release, align 13324    ret i8 %r3325}3326 3327define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3328; CHECK-LABEL: atomicrmw_xor_i8_aligned_acq_rel:3329; CHECK:    ldeoralb w1, w0, [x0]3330    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13331    ret i8 %r3332}3333 3334define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3335; CHECK-LABEL: atomicrmw_xor_i8_aligned_seq_cst:3336; CHECK:    ldeoralb w1, w0, [x0]3337    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13338    ret i8 %r3339}3340 3341define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) {3342; CHECK-LABEL: atomicrmw_xor_i16_aligned_monotonic:3343; CHECK:    ldeorh w1, w0, [x0]3344    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 23345    ret i16 %r3346}3347 3348define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) {3349; CHECK-LABEL: atomicrmw_xor_i16_aligned_acquire:3350; CHECK:    ldeorah w1, w0, [x0]3351    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 23352    ret i16 %r3353}3354 3355define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) {3356; CHECK-LABEL: atomicrmw_xor_i16_aligned_release:3357; CHECK:    ldeorlh w1, w0, [x0]3358    %r = atomicrmw xor ptr %ptr, i16 %value release, align 23359    ret i16 %r3360}3361 3362define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3363; CHECK-LABEL: atomicrmw_xor_i16_aligned_acq_rel:3364; CHECK:    ldeoralh w1, w0, [x0]3365    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 23366    ret i16 %r3367}3368 3369define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3370; CHECK-LABEL: atomicrmw_xor_i16_aligned_seq_cst:3371; CHECK:    ldeoralh w1, w0, [x0]3372    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 23373    ret i16 %r3374}3375 3376define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) {3377; CHECK-LABEL: atomicrmw_xor_i32_aligned_monotonic:3378; CHECK:    ldeor w1, w0, [x0]3379    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 43380    ret i32 %r3381}3382 3383define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) {3384; CHECK-LABEL: atomicrmw_xor_i32_aligned_acquire:3385; CHECK:    ldeora w1, w0, [x0]3386    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 43387    ret i32 %r3388}3389 3390define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) {3391; CHECK-LABEL: atomicrmw_xor_i32_aligned_release:3392; CHECK:    ldeorl w1, w0, [x0]3393    %r = atomicrmw xor ptr %ptr, i32 %value release, align 43394    ret i32 %r3395}3396 3397define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3398; CHECK-LABEL: atomicrmw_xor_i32_aligned_acq_rel:3399; CHECK:    ldeoral w1, w0, [x0]3400    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 43401    ret i32 %r3402}3403 3404define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3405; CHECK-LABEL: atomicrmw_xor_i32_aligned_seq_cst:3406; CHECK:    ldeoral w1, w0, [x0]3407    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 43408    ret i32 %r3409}3410 3411define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) {3412; CHECK-LABEL: atomicrmw_xor_i64_aligned_monotonic:3413; CHECK:    ldeor x1, x0, [x0]3414    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 83415    ret i64 %r3416}3417 3418define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) {3419; CHECK-LABEL: atomicrmw_xor_i64_aligned_acquire:3420; CHECK:    ldeora x1, x0, [x0]3421    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 83422    ret i64 %r3423}3424 3425define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) {3426; CHECK-LABEL: atomicrmw_xor_i64_aligned_release:3427; CHECK:    ldeorl x1, x0, [x0]3428    %r = atomicrmw xor ptr %ptr, i64 %value release, align 83429    ret i64 %r3430}3431 3432define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3433; CHECK-LABEL: atomicrmw_xor_i64_aligned_acq_rel:3434; CHECK:    ldeoral x1, x0, [x0]3435    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 83436    ret i64 %r3437}3438 3439define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3440; CHECK-LABEL: atomicrmw_xor_i64_aligned_seq_cst:3441; CHECK:    ldeoral x1, x0, [x0]3442    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 83443    ret i64 %r3444}3445 3446define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) {3447; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic:3448; -O0:    eor x2, x11, x123449; -O0:    eor x9, x10, x93450; -O0:    casp x0, x1, x2, x3, [x8]3451; -O0:    subs x11, x9, x113452; -O0:    ccmp x8, x10, #0, eq3453;3454; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic:3455; -O1:    ldp x4, x5, [x0]3456; -O1:    eor x8, x4, x23457; -O1:    eor x9, x7, x33458; -O1:    casp x4, x5, x8, x9, [x0]3459; -O1:    cmp x4, x63460; -O1:    ccmp x5, x7, #0, eq3461    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 163462    ret i128 %r3463}3464 3465define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) {3466; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire:3467; -O0:    eor x2, x11, x123468; -O0:    eor x9, x10, x93469; -O0:    caspa x0, x1, x2, x3, [x8]3470; -O0:    subs x11, x9, x113471; -O0:    ccmp x8, x10, #0, eq3472;3473; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire:3474; -O1:    ldp x4, x5, [x0]3475; -O1:    eor x8, x4, x23476; -O1:    eor x9, x7, x33477; -O1:    caspa x4, x5, x8, x9, [x0]3478; -O1:    cmp x4, x63479; -O1:    ccmp x5, x7, #0, eq3480    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 163481    ret i128 %r3482}3483 3484define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) {3485; -O0-LABEL: atomicrmw_xor_i128_aligned_release:3486; -O0:    eor x2, x11, x123487; -O0:    eor x9, x10, x93488; -O0:    caspl x0, x1, x2, x3, [x8]3489; -O0:    subs x11, x9, x113490; -O0:    ccmp x8, x10, #0, eq3491;3492; -O1-LABEL: atomicrmw_xor_i128_aligned_release:3493; -O1:    ldp x4, x5, [x0]3494; -O1:    eor x8, x4, x23495; -O1:    eor x9, x7, x33496; -O1:    caspl x4, x5, x8, x9, [x0]3497; -O1:    cmp x4, x63498; -O1:    ccmp x5, x7, #0, eq3499    %r = atomicrmw xor ptr %ptr, i128 %value release, align 163500    ret i128 %r3501}3502 3503define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3504; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3505; -O0:    eor x2, x11, x123506; -O0:    eor x9, x10, x93507; -O0:    caspal x0, x1, x2, x3, [x8]3508; -O0:    subs x11, x9, x113509; -O0:    ccmp x8, x10, #0, eq3510;3511; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3512; -O1:    ldp x4, x5, [x0]3513; -O1:    eor x8, x4, x23514; -O1:    eor x9, x7, x33515; -O1:    caspal x4, x5, x8, x9, [x0]3516; -O1:    cmp x4, x63517; -O1:    ccmp x5, x7, #0, eq3518    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 163519    ret i128 %r3520}3521 3522define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3523; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3524; -O0:    eor x2, x11, x123525; -O0:    eor x9, x10, x93526; -O0:    caspal x0, x1, x2, x3, [x8]3527; -O0:    subs x11, x9, x113528; -O0:    ccmp x8, x10, #0, eq3529;3530; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3531; -O1:    ldp x4, x5, [x0]3532; -O1:    eor x8, x4, x23533; -O1:    eor x9, x7, x33534; -O1:    caspal x4, x5, x8, x9, [x0]3535; -O1:    cmp x4, x63536; -O1:    ccmp x5, x7, #0, eq3537    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 163538    ret i128 %r3539}3540 3541define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3542; CHECK-LABEL: atomicrmw_xor_i8_unaligned_monotonic:3543; CHECK:    ldeorb w1, w0, [x0]3544    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13545    ret i8 %r3546}3547 3548define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) {3549; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acquire:3550; CHECK:    ldeorab w1, w0, [x0]3551    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13552    ret i8 %r3553}3554 3555define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) {3556; CHECK-LABEL: atomicrmw_xor_i8_unaligned_release:3557; CHECK:    ldeorlb w1, w0, [x0]3558    %r = atomicrmw xor ptr %ptr, i8 %value release, align 13559    ret i8 %r3560}3561 3562define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3563; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:3564; CHECK:    ldeoralb w1, w0, [x0]3565    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13566    ret i8 %r3567}3568 3569define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3570; CHECK-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:3571; CHECK:    ldeoralb w1, w0, [x0]3572    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13573    ret i8 %r3574}3575 3576define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3577; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3578; -O0:    eor w8, w9, w83579; -O0:    bl __atomic_compare_exchange3580;3581; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3582; -O1:    eor w8, w0, w203583; -O1:    bl __atomic_compare_exchange3584    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 13585    ret i16 %r3586}3587 3588define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) {3589; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire:3590; -O0:    eor w8, w9, w83591; -O0:    bl __atomic_compare_exchange3592;3593; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire:3594; -O1:    eor w8, w0, w203595; -O1:    bl __atomic_compare_exchange3596    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 13597    ret i16 %r3598}3599 3600define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) {3601; -O0-LABEL: atomicrmw_xor_i16_unaligned_release:3602; -O0:    eor w8, w9, w83603; -O0:    bl __atomic_compare_exchange3604;3605; -O1-LABEL: atomicrmw_xor_i16_unaligned_release:3606; -O1:    eor w8, w0, w203607; -O1:    bl __atomic_compare_exchange3608    %r = atomicrmw xor ptr %ptr, i16 %value release, align 13609    ret i16 %r3610}3611 3612define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3613; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3614; -O0:    eor w8, w9, w83615; -O0:    bl __atomic_compare_exchange3616;3617; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3618; -O1:    eor w8, w0, w203619; -O1:    bl __atomic_compare_exchange3620    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 13621    ret i16 %r3622}3623 3624define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3625; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3626; -O0:    eor w8, w9, w83627; -O0:    bl __atomic_compare_exchange3628;3629; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3630; -O1:    eor w8, w0, w203631; -O1:    bl __atomic_compare_exchange3632    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 13633    ret i16 %r3634}3635 3636define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3637; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3638; -O0:    eor w8, w9, w83639; -O0:    bl __atomic_compare_exchange3640;3641; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3642; -O1:    eor w8, w0, w203643; -O1:    bl __atomic_compare_exchange3644    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 13645    ret i32 %r3646}3647 3648define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) {3649; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire:3650; -O0:    eor w8, w9, w83651; -O0:    bl __atomic_compare_exchange3652;3653; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire:3654; -O1:    eor w8, w0, w203655; -O1:    bl __atomic_compare_exchange3656    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 13657    ret i32 %r3658}3659 3660define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) {3661; -O0-LABEL: atomicrmw_xor_i32_unaligned_release:3662; -O0:    eor w8, w9, w83663; -O0:    bl __atomic_compare_exchange3664;3665; -O1-LABEL: atomicrmw_xor_i32_unaligned_release:3666; -O1:    eor w8, w0, w203667; -O1:    bl __atomic_compare_exchange3668    %r = atomicrmw xor ptr %ptr, i32 %value release, align 13669    ret i32 %r3670}3671 3672define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3673; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3674; -O0:    eor w8, w9, w83675; -O0:    bl __atomic_compare_exchange3676;3677; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3678; -O1:    eor w8, w0, w203679; -O1:    bl __atomic_compare_exchange3680    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 13681    ret i32 %r3682}3683 3684define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3685; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3686; -O0:    eor w8, w9, w83687; -O0:    bl __atomic_compare_exchange3688;3689; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3690; -O1:    eor w8, w0, w203691; -O1:    bl __atomic_compare_exchange3692    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 13693    ret i32 %r3694}3695 3696define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3697; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3698; -O0:    eor x8, x9, x83699; -O0:    bl __atomic_compare_exchange3700;3701; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3702; -O1:    eor x8, x0, x203703; -O1:    bl __atomic_compare_exchange3704    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 13705    ret i64 %r3706}3707 3708define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) {3709; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire:3710; -O0:    eor x8, x9, x83711; -O0:    bl __atomic_compare_exchange3712;3713; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire:3714; -O1:    eor x8, x0, x203715; -O1:    bl __atomic_compare_exchange3716    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 13717    ret i64 %r3718}3719 3720define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) {3721; -O0-LABEL: atomicrmw_xor_i64_unaligned_release:3722; -O0:    eor x8, x9, x83723; -O0:    bl __atomic_compare_exchange3724;3725; -O1-LABEL: atomicrmw_xor_i64_unaligned_release:3726; -O1:    eor x8, x0, x203727; -O1:    bl __atomic_compare_exchange3728    %r = atomicrmw xor ptr %ptr, i64 %value release, align 13729    ret i64 %r3730}3731 3732define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3733; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3734; -O0:    eor x8, x9, x83735; -O0:    bl __atomic_compare_exchange3736;3737; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3738; -O1:    eor x8, x0, x203739; -O1:    bl __atomic_compare_exchange3740    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 13741    ret i64 %r3742}3743 3744define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3745; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3746; -O0:    eor x8, x9, x83747; -O0:    bl __atomic_compare_exchange3748;3749; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3750; -O1:    eor x8, x0, x203751; -O1:    bl __atomic_compare_exchange3752    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 13753    ret i64 %r3754}3755 3756define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3757; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3758; -O0:    eor x8, x11, x83759; -O0:    eor x9, x10, x93760; -O0:    bl __atomic_compare_exchange3761;3762; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3763; -O1:    ldp x0, x1, [x0]3764; -O1:    eor x8, x1, x193765; -O1:    eor x9, x0, x213766; -O1:    bl __atomic_compare_exchange3767    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 13768    ret i128 %r3769}3770 3771define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) {3772; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire:3773; -O0:    eor x8, x11, x83774; -O0:    eor x9, x10, x93775; -O0:    bl __atomic_compare_exchange3776;3777; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire:3778; -O1:    ldp x0, x1, [x0]3779; -O1:    eor x8, x1, x193780; -O1:    eor x9, x0, x213781; -O1:    bl __atomic_compare_exchange3782    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 13783    ret i128 %r3784}3785 3786define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) {3787; -O0-LABEL: atomicrmw_xor_i128_unaligned_release:3788; -O0:    eor x8, x11, x83789; -O0:    eor x9, x10, x93790; -O0:    bl __atomic_compare_exchange3791;3792; -O1-LABEL: atomicrmw_xor_i128_unaligned_release:3793; -O1:    ldp x0, x1, [x0]3794; -O1:    eor x8, x1, x193795; -O1:    eor x9, x0, x213796; -O1:    bl __atomic_compare_exchange3797    %r = atomicrmw xor ptr %ptr, i128 %value release, align 13798    ret i128 %r3799}3800 3801define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3802; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:3803; -O0:    eor x8, x11, x83804; -O0:    eor x9, x10, x93805; -O0:    bl __atomic_compare_exchange3806;3807; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:3808; -O1:    ldp x0, x1, [x0]3809; -O1:    eor x8, x1, x193810; -O1:    eor x9, x0, x213811; -O1:    bl __atomic_compare_exchange3812    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 13813    ret i128 %r3814}3815 3816define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3817; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:3818; -O0:    eor x8, x11, x83819; -O0:    eor x9, x10, x93820; -O0:    bl __atomic_compare_exchange3821;3822; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:3823; -O1:    ldp x0, x1, [x0]3824; -O1:    eor x8, x1, x193825; -O1:    eor x9, x0, x213826; -O1:    bl __atomic_compare_exchange3827    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 13828    ret i128 %r3829}3830 3831define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) {3832; CHECK-LABEL: atomicrmw_max_i8_aligned_monotonic:3833; CHECK:    ldsmaxb w1, w0, [x0]3834    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 13835    ret i8 %r3836}3837 3838define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) {3839; CHECK-LABEL: atomicrmw_max_i8_aligned_acquire:3840; CHECK:    ldsmaxab w1, w0, [x0]3841    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 13842    ret i8 %r3843}3844 3845define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) {3846; CHECK-LABEL: atomicrmw_max_i8_aligned_release:3847; CHECK:    ldsmaxlb w1, w0, [x0]3848    %r = atomicrmw max ptr %ptr, i8 %value release, align 13849    ret i8 %r3850}3851 3852define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3853; CHECK-LABEL: atomicrmw_max_i8_aligned_acq_rel:3854; CHECK:    ldsmaxalb w1, w0, [x0]3855    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 13856    ret i8 %r3857}3858 3859define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3860; CHECK-LABEL: atomicrmw_max_i8_aligned_seq_cst:3861; CHECK:    ldsmaxalb w1, w0, [x0]3862    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 13863    ret i8 %r3864}3865 3866define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) {3867; CHECK-LABEL: atomicrmw_max_i16_aligned_monotonic:3868; CHECK:    ldsmaxh w1, w0, [x0]3869    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 23870    ret i16 %r3871}3872 3873define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) {3874; CHECK-LABEL: atomicrmw_max_i16_aligned_acquire:3875; CHECK:    ldsmaxah w1, w0, [x0]3876    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 23877    ret i16 %r3878}3879 3880define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) {3881; CHECK-LABEL: atomicrmw_max_i16_aligned_release:3882; CHECK:    ldsmaxlh w1, w0, [x0]3883    %r = atomicrmw max ptr %ptr, i16 %value release, align 23884    ret i16 %r3885}3886 3887define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3888; CHECK-LABEL: atomicrmw_max_i16_aligned_acq_rel:3889; CHECK:    ldsmaxalh w1, w0, [x0]3890    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 23891    ret i16 %r3892}3893 3894define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3895; CHECK-LABEL: atomicrmw_max_i16_aligned_seq_cst:3896; CHECK:    ldsmaxalh w1, w0, [x0]3897    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 23898    ret i16 %r3899}3900 3901define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) {3902; CHECK-LABEL: atomicrmw_max_i32_aligned_monotonic:3903; CHECK:    ldsmax w1, w0, [x0]3904    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 43905    ret i32 %r3906}3907 3908define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) {3909; CHECK-LABEL: atomicrmw_max_i32_aligned_acquire:3910; CHECK:    ldsmaxa w1, w0, [x0]3911    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 43912    ret i32 %r3913}3914 3915define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) {3916; CHECK-LABEL: atomicrmw_max_i32_aligned_release:3917; CHECK:    ldsmaxl w1, w0, [x0]3918    %r = atomicrmw max ptr %ptr, i32 %value release, align 43919    ret i32 %r3920}3921 3922define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3923; CHECK-LABEL: atomicrmw_max_i32_aligned_acq_rel:3924; CHECK:    ldsmaxal w1, w0, [x0]3925    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 43926    ret i32 %r3927}3928 3929define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3930; CHECK-LABEL: atomicrmw_max_i32_aligned_seq_cst:3931; CHECK:    ldsmaxal w1, w0, [x0]3932    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 43933    ret i32 %r3934}3935 3936define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) {3937; CHECK-LABEL: atomicrmw_max_i64_aligned_monotonic:3938; CHECK:    ldsmax x1, x0, [x0]3939    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 83940    ret i64 %r3941}3942 3943define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) {3944; CHECK-LABEL: atomicrmw_max_i64_aligned_acquire:3945; CHECK:    ldsmaxa x1, x0, [x0]3946    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 83947    ret i64 %r3948}3949 3950define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) {3951; CHECK-LABEL: atomicrmw_max_i64_aligned_release:3952; CHECK:    ldsmaxl x1, x0, [x0]3953    %r = atomicrmw max ptr %ptr, i64 %value release, align 83954    ret i64 %r3955}3956 3957define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3958; CHECK-LABEL: atomicrmw_max_i64_aligned_acq_rel:3959; CHECK:    ldsmaxal x1, x0, [x0]3960    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 83961    ret i64 %r3962}3963 3964define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3965; CHECK-LABEL: atomicrmw_max_i64_aligned_seq_cst:3966; CHECK:    ldsmaxal x1, x0, [x0]3967    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 83968    ret i64 %r3969}3970 3971define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) {3972; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic:3973; -O0:    subs x13, x9, x103974; -O0:    csel x9, x10, x9, lt3975; -O0:    csel x2, x11, x12, lt3976; -O0:    casp x0, x1, x2, x3, [x8]3977; -O0:    subs x11, x9, x113978; -O0:    ccmp x8, x10, #0, eq3979;3980; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic:3981; -O1:    ldp x4, x5, [x0]3982; -O1:    cmp x3, x73983; -O1:    csel x9, x7, x3, lt3984; -O1:    csel x8, x4, x2, lt3985; -O1:    casp x4, x5, x8, x9, [x0]3986; -O1:    cmp x4, x63987; -O1:    ccmp x5, x7, #0, eq3988    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 163989    ret i128 %r3990}3991 3992define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) {3993; -O0-LABEL: atomicrmw_max_i128_aligned_acquire:3994; -O0:    subs x13, x9, x103995; -O0:    csel x9, x10, x9, lt3996; -O0:    csel x2, x11, x12, lt3997; -O0:    caspa x0, x1, x2, x3, [x8]3998; -O0:    subs x11, x9, x113999; -O0:    ccmp x8, x10, #0, eq4000;4001; -O1-LABEL: atomicrmw_max_i128_aligned_acquire:4002; -O1:    ldp x4, x5, [x0]4003; -O1:    cmp x3, x74004; -O1:    csel x9, x7, x3, lt4005; -O1:    csel x8, x4, x2, lt4006; -O1:    caspa x4, x5, x8, x9, [x0]4007; -O1:    cmp x4, x64008; -O1:    ccmp x5, x7, #0, eq4009    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 164010    ret i128 %r4011}4012 4013define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) {4014; -O0-LABEL: atomicrmw_max_i128_aligned_release:4015; -O0:    subs x13, x9, x104016; -O0:    csel x9, x10, x9, lt4017; -O0:    csel x2, x11, x12, lt4018; -O0:    caspl x0, x1, x2, x3, [x8]4019; -O0:    subs x11, x9, x114020; -O0:    ccmp x8, x10, #0, eq4021;4022; -O1-LABEL: atomicrmw_max_i128_aligned_release:4023; -O1:    ldp x4, x5, [x0]4024; -O1:    cmp x3, x74025; -O1:    csel x9, x7, x3, lt4026; -O1:    csel x8, x4, x2, lt4027; -O1:    caspl x4, x5, x8, x9, [x0]4028; -O1:    cmp x4, x64029; -O1:    ccmp x5, x7, #0, eq4030    %r = atomicrmw max ptr %ptr, i128 %value release, align 164031    ret i128 %r4032}4033 4034define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4035; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel:4036; -O0:    subs x13, x9, x104037; -O0:    csel x9, x10, x9, lt4038; -O0:    csel x2, x11, x12, lt4039; -O0:    caspal x0, x1, x2, x3, [x8]4040; -O0:    subs x11, x9, x114041; -O0:    ccmp x8, x10, #0, eq4042;4043; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel:4044; -O1:    ldp x4, x5, [x0]4045; -O1:    cmp x3, x74046; -O1:    csel x9, x7, x3, lt4047; -O1:    csel x8, x4, x2, lt4048; -O1:    caspal x4, x5, x8, x9, [x0]4049; -O1:    cmp x4, x64050; -O1:    ccmp x5, x7, #0, eq4051    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 164052    ret i128 %r4053}4054 4055define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4056; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst:4057; -O0:    subs x13, x9, x104058; -O0:    csel x9, x10, x9, lt4059; -O0:    csel x2, x11, x12, lt4060; -O0:    caspal x0, x1, x2, x3, [x8]4061; -O0:    subs x11, x9, x114062; -O0:    ccmp x8, x10, #0, eq4063;4064; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst:4065; -O1:    ldp x4, x5, [x0]4066; -O1:    cmp x3, x74067; -O1:    csel x9, x7, x3, lt4068; -O1:    csel x8, x4, x2, lt4069; -O1:    caspal x4, x5, x8, x9, [x0]4070; -O1:    cmp x4, x64071; -O1:    ccmp x5, x7, #0, eq4072    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 164073    ret i128 %r4074}4075 4076define dso_local i8 @atomicrmw_max_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4077; CHECK-LABEL: atomicrmw_max_i8_unaligned_monotonic:4078; CHECK:    ldsmaxb w1, w0, [x0]4079    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 14080    ret i8 %r4081}4082 4083define dso_local i8 @atomicrmw_max_i8_unaligned_acquire(ptr %ptr, i8 %value) {4084; CHECK-LABEL: atomicrmw_max_i8_unaligned_acquire:4085; CHECK:    ldsmaxab w1, w0, [x0]4086    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 14087    ret i8 %r4088}4089 4090define dso_local i8 @atomicrmw_max_i8_unaligned_release(ptr %ptr, i8 %value) {4091; CHECK-LABEL: atomicrmw_max_i8_unaligned_release:4092; CHECK:    ldsmaxlb w1, w0, [x0]4093    %r = atomicrmw max ptr %ptr, i8 %value release, align 14094    ret i8 %r4095}4096 4097define dso_local i8 @atomicrmw_max_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4098; CHECK-LABEL: atomicrmw_max_i8_unaligned_acq_rel:4099; CHECK:    ldsmaxalb w1, w0, [x0]4100    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 14101    ret i8 %r4102}4103 4104define dso_local i8 @atomicrmw_max_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4105; CHECK-LABEL: atomicrmw_max_i8_unaligned_seq_cst:4106; CHECK:    ldsmaxalb w1, w0, [x0]4107    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 14108    ret i8 %r4109}4110 4111define dso_local i16 @atomicrmw_max_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4112; -O0-LABEL: atomicrmw_max_i16_unaligned_monotonic:4113; -O0:    sxth w10, w94114; -O0:    subs w10, w10, w8, sxth4115; -O0:    csel w8, w9, w8, gt4116; -O0:    bl __atomic_compare_exchange4117;4118; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic:4119; -O1:    sxth w8, w04120; -O1:    cmp w8, w20, sxth4121; -O1:    csel w8, w0, w20, gt4122; -O1:    bl __atomic_compare_exchange4123    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 14124    ret i16 %r4125}4126 4127define dso_local i16 @atomicrmw_max_i16_unaligned_acquire(ptr %ptr, i16 %value) {4128; -O0-LABEL: atomicrmw_max_i16_unaligned_acquire:4129; -O0:    sxth w10, w94130; -O0:    subs w10, w10, w8, sxth4131; -O0:    csel w8, w9, w8, gt4132; -O0:    bl __atomic_compare_exchange4133;4134; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire:4135; -O1:    sxth w8, w04136; -O1:    cmp w8, w20, sxth4137; -O1:    csel w8, w0, w20, gt4138; -O1:    bl __atomic_compare_exchange4139    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 14140    ret i16 %r4141}4142 4143define dso_local i16 @atomicrmw_max_i16_unaligned_release(ptr %ptr, i16 %value) {4144; -O0-LABEL: atomicrmw_max_i16_unaligned_release:4145; -O0:    sxth w10, w94146; -O0:    subs w10, w10, w8, sxth4147; -O0:    csel w8, w9, w8, gt4148; -O0:    bl __atomic_compare_exchange4149;4150; -O1-LABEL: atomicrmw_max_i16_unaligned_release:4151; -O1:    sxth w8, w04152; -O1:    cmp w8, w20, sxth4153; -O1:    csel w8, w0, w20, gt4154; -O1:    bl __atomic_compare_exchange4155    %r = atomicrmw max ptr %ptr, i16 %value release, align 14156    ret i16 %r4157}4158 4159define dso_local i16 @atomicrmw_max_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4160; -O0-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4161; -O0:    sxth w10, w94162; -O0:    subs w10, w10, w8, sxth4163; -O0:    csel w8, w9, w8, gt4164; -O0:    bl __atomic_compare_exchange4165;4166; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4167; -O1:    sxth w8, w04168; -O1:    cmp w8, w20, sxth4169; -O1:    csel w8, w0, w20, gt4170; -O1:    bl __atomic_compare_exchange4171    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 14172    ret i16 %r4173}4174 4175define dso_local i16 @atomicrmw_max_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4176; -O0-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4177; -O0:    sxth w10, w94178; -O0:    subs w10, w10, w8, sxth4179; -O0:    csel w8, w9, w8, gt4180; -O0:    bl __atomic_compare_exchange4181;4182; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4183; -O1:    sxth w8, w04184; -O1:    cmp w8, w20, sxth4185; -O1:    csel w8, w0, w20, gt4186; -O1:    bl __atomic_compare_exchange4187    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 14188    ret i16 %r4189}4190 4191define dso_local i32 @atomicrmw_max_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4192; -O0-LABEL: atomicrmw_max_i32_unaligned_monotonic:4193; -O0:    subs w10, w9, w84194; -O0:    csel w8, w9, w8, gt4195; -O0:    bl __atomic_compare_exchange4196;4197; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic:4198; -O1:    cmp w0, w204199; -O1:    csel w8, w0, w20, gt4200; -O1:    bl __atomic_compare_exchange4201    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 14202    ret i32 %r4203}4204 4205define dso_local i32 @atomicrmw_max_i32_unaligned_acquire(ptr %ptr, i32 %value) {4206; -O0-LABEL: atomicrmw_max_i32_unaligned_acquire:4207; -O0:    subs w10, w9, w84208; -O0:    csel w8, w9, w8, gt4209; -O0:    bl __atomic_compare_exchange4210;4211; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire:4212; -O1:    cmp w0, w204213; -O1:    csel w8, w0, w20, gt4214; -O1:    bl __atomic_compare_exchange4215    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 14216    ret i32 %r4217}4218 4219define dso_local i32 @atomicrmw_max_i32_unaligned_release(ptr %ptr, i32 %value) {4220; -O0-LABEL: atomicrmw_max_i32_unaligned_release:4221; -O0:    subs w10, w9, w84222; -O0:    csel w8, w9, w8, gt4223; -O0:    bl __atomic_compare_exchange4224;4225; -O1-LABEL: atomicrmw_max_i32_unaligned_release:4226; -O1:    cmp w0, w204227; -O1:    csel w8, w0, w20, gt4228; -O1:    bl __atomic_compare_exchange4229    %r = atomicrmw max ptr %ptr, i32 %value release, align 14230    ret i32 %r4231}4232 4233define dso_local i32 @atomicrmw_max_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4234; -O0-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4235; -O0:    subs w10, w9, w84236; -O0:    csel w8, w9, w8, gt4237; -O0:    bl __atomic_compare_exchange4238;4239; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4240; -O1:    cmp w0, w204241; -O1:    csel w8, w0, w20, gt4242; -O1:    bl __atomic_compare_exchange4243    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 14244    ret i32 %r4245}4246 4247define dso_local i32 @atomicrmw_max_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4248; -O0-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4249; -O0:    subs w10, w9, w84250; -O0:    csel w8, w9, w8, gt4251; -O0:    bl __atomic_compare_exchange4252;4253; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4254; -O1:    cmp w0, w204255; -O1:    csel w8, w0, w20, gt4256; -O1:    bl __atomic_compare_exchange4257    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 14258    ret i32 %r4259}4260 4261define dso_local i64 @atomicrmw_max_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4262; -O0-LABEL: atomicrmw_max_i64_unaligned_monotonic:4263; -O0:    subs x10, x9, x84264; -O0:    csel x8, x9, x8, gt4265; -O0:    bl __atomic_compare_exchange4266;4267; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic:4268; -O1:    cmp x0, x204269; -O1:    csel x8, x0, x20, gt4270; -O1:    bl __atomic_compare_exchange4271    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 14272    ret i64 %r4273}4274 4275define dso_local i64 @atomicrmw_max_i64_unaligned_acquire(ptr %ptr, i64 %value) {4276; -O0-LABEL: atomicrmw_max_i64_unaligned_acquire:4277; -O0:    subs x10, x9, x84278; -O0:    csel x8, x9, x8, gt4279; -O0:    bl __atomic_compare_exchange4280;4281; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire:4282; -O1:    cmp x0, x204283; -O1:    csel x8, x0, x20, gt4284; -O1:    bl __atomic_compare_exchange4285    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 14286    ret i64 %r4287}4288 4289define dso_local i64 @atomicrmw_max_i64_unaligned_release(ptr %ptr, i64 %value) {4290; -O0-LABEL: atomicrmw_max_i64_unaligned_release:4291; -O0:    subs x10, x9, x84292; -O0:    csel x8, x9, x8, gt4293; -O0:    bl __atomic_compare_exchange4294;4295; -O1-LABEL: atomicrmw_max_i64_unaligned_release:4296; -O1:    cmp x0, x204297; -O1:    csel x8, x0, x20, gt4298; -O1:    bl __atomic_compare_exchange4299    %r = atomicrmw max ptr %ptr, i64 %value release, align 14300    ret i64 %r4301}4302 4303define dso_local i64 @atomicrmw_max_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4304; -O0-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4305; -O0:    subs x10, x9, x84306; -O0:    csel x8, x9, x8, gt4307; -O0:    bl __atomic_compare_exchange4308;4309; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4310; -O1:    cmp x0, x204311; -O1:    csel x8, x0, x20, gt4312; -O1:    bl __atomic_compare_exchange4313    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 14314    ret i64 %r4315}4316 4317define dso_local i64 @atomicrmw_max_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4318; -O0-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4319; -O0:    subs x10, x9, x84320; -O0:    csel x8, x9, x8, gt4321; -O0:    bl __atomic_compare_exchange4322;4323; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4324; -O1:    cmp x0, x204325; -O1:    csel x8, x0, x20, gt4326; -O1:    bl __atomic_compare_exchange4327    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 14328    ret i64 %r4329}4330 4331define dso_local i128 @atomicrmw_max_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4332; -O0-LABEL: atomicrmw_max_i128_unaligned_monotonic:4333; -O0:    subs x12, x9, x104334; -O0:    csel x8, x11, x8, lt4335; -O0:    csel x9, x10, x9, lt4336; -O0:    bl __atomic_compare_exchange4337;4338; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic:4339; -O1:    ldp x0, x1, [x0]4340; -O1:    cmp x19, x14341; -O1:    csel x8, x1, x19, lt4342; -O1:    csel x9, x0, x21, lt4343; -O1:    bl __atomic_compare_exchange4344    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 14345    ret i128 %r4346}4347 4348define dso_local i128 @atomicrmw_max_i128_unaligned_acquire(ptr %ptr, i128 %value) {4349; -O0-LABEL: atomicrmw_max_i128_unaligned_acquire:4350; -O0:    subs x12, x9, x104351; -O0:    csel x8, x11, x8, lt4352; -O0:    csel x9, x10, x9, lt4353; -O0:    bl __atomic_compare_exchange4354;4355; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire:4356; -O1:    ldp x0, x1, [x0]4357; -O1:    cmp x19, x14358; -O1:    csel x8, x1, x19, lt4359; -O1:    csel x9, x0, x21, lt4360; -O1:    bl __atomic_compare_exchange4361    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 14362    ret i128 %r4363}4364 4365define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) {4366; -O0-LABEL: atomicrmw_max_i128_unaligned_release:4367; -O0:    subs x12, x9, x104368; -O0:    csel x8, x11, x8, lt4369; -O0:    csel x9, x10, x9, lt4370; -O0:    bl __atomic_compare_exchange4371;4372; -O1-LABEL: atomicrmw_max_i128_unaligned_release:4373; -O1:    ldp x0, x1, [x0]4374; -O1:    cmp x19, x14375; -O1:    csel x8, x1, x19, lt4376; -O1:    csel x9, x0, x21, lt4377; -O1:    bl __atomic_compare_exchange4378    %r = atomicrmw max ptr %ptr, i128 %value release, align 14379    ret i128 %r4380}4381 4382define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4383; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4384; -O0:    subs x12, x9, x104385; -O0:    csel x8, x11, x8, lt4386; -O0:    csel x9, x10, x9, lt4387; -O0:    bl __atomic_compare_exchange4388;4389; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4390; -O1:    ldp x0, x1, [x0]4391; -O1:    cmp x19, x14392; -O1:    csel x8, x1, x19, lt4393; -O1:    csel x9, x0, x21, lt4394; -O1:    bl __atomic_compare_exchange4395    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 14396    ret i128 %r4397}4398 4399define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4400; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4401; -O0:    subs x12, x9, x104402; -O0:    csel x8, x11, x8, lt4403; -O0:    csel x9, x10, x9, lt4404; -O0:    bl __atomic_compare_exchange4405;4406; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4407; -O1:    ldp x0, x1, [x0]4408; -O1:    cmp x19, x14409; -O1:    csel x8, x1, x19, lt4410; -O1:    csel x9, x0, x21, lt4411; -O1:    bl __atomic_compare_exchange4412    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 14413    ret i128 %r4414}4415 4416define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) {4417; CHECK-LABEL: atomicrmw_min_i8_aligned_monotonic:4418; CHECK:    ldsminb w1, w0, [x0]4419    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14420    ret i8 %r4421}4422 4423define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) {4424; CHECK-LABEL: atomicrmw_min_i8_aligned_acquire:4425; CHECK:    ldsminab w1, w0, [x0]4426    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14427    ret i8 %r4428}4429 4430define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) {4431; CHECK-LABEL: atomicrmw_min_i8_aligned_release:4432; CHECK:    ldsminlb w1, w0, [x0]4433    %r = atomicrmw min ptr %ptr, i8 %value release, align 14434    ret i8 %r4435}4436 4437define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) {4438; CHECK-LABEL: atomicrmw_min_i8_aligned_acq_rel:4439; CHECK:    ldsminalb w1, w0, [x0]4440    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 14441    ret i8 %r4442}4443 4444define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) {4445; CHECK-LABEL: atomicrmw_min_i8_aligned_seq_cst:4446; CHECK:    ldsminalb w1, w0, [x0]4447    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 14448    ret i8 %r4449}4450 4451define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) {4452; CHECK-LABEL: atomicrmw_min_i16_aligned_monotonic:4453; CHECK:    ldsminh w1, w0, [x0]4454    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 24455    ret i16 %r4456}4457 4458define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) {4459; CHECK-LABEL: atomicrmw_min_i16_aligned_acquire:4460; CHECK:    ldsminah w1, w0, [x0]4461    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 24462    ret i16 %r4463}4464 4465define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) {4466; CHECK-LABEL: atomicrmw_min_i16_aligned_release:4467; CHECK:    ldsminlh w1, w0, [x0]4468    %r = atomicrmw min ptr %ptr, i16 %value release, align 24469    ret i16 %r4470}4471 4472define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) {4473; CHECK-LABEL: atomicrmw_min_i16_aligned_acq_rel:4474; CHECK:    ldsminalh w1, w0, [x0]4475    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 24476    ret i16 %r4477}4478 4479define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) {4480; CHECK-LABEL: atomicrmw_min_i16_aligned_seq_cst:4481; CHECK:    ldsminalh w1, w0, [x0]4482    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 24483    ret i16 %r4484}4485 4486define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) {4487; CHECK-LABEL: atomicrmw_min_i32_aligned_monotonic:4488; CHECK:    ldsmin w1, w0, [x0]4489    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 44490    ret i32 %r4491}4492 4493define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) {4494; CHECK-LABEL: atomicrmw_min_i32_aligned_acquire:4495; CHECK:    ldsmina w1, w0, [x0]4496    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 44497    ret i32 %r4498}4499 4500define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) {4501; CHECK-LABEL: atomicrmw_min_i32_aligned_release:4502; CHECK:    ldsminl w1, w0, [x0]4503    %r = atomicrmw min ptr %ptr, i32 %value release, align 44504    ret i32 %r4505}4506 4507define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4508; CHECK-LABEL: atomicrmw_min_i32_aligned_acq_rel:4509; CHECK:    ldsminal w1, w0, [x0]4510    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 44511    ret i32 %r4512}4513 4514define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4515; CHECK-LABEL: atomicrmw_min_i32_aligned_seq_cst:4516; CHECK:    ldsminal w1, w0, [x0]4517    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 44518    ret i32 %r4519}4520 4521define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) {4522; CHECK-LABEL: atomicrmw_min_i64_aligned_monotonic:4523; CHECK:    ldsmin x1, x0, [x0]4524    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 84525    ret i64 %r4526}4527 4528define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) {4529; CHECK-LABEL: atomicrmw_min_i64_aligned_acquire:4530; CHECK:    ldsmina x1, x0, [x0]4531    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 84532    ret i64 %r4533}4534 4535define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) {4536; CHECK-LABEL: atomicrmw_min_i64_aligned_release:4537; CHECK:    ldsminl x1, x0, [x0]4538    %r = atomicrmw min ptr %ptr, i64 %value release, align 84539    ret i64 %r4540}4541 4542define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4543; CHECK-LABEL: atomicrmw_min_i64_aligned_acq_rel:4544; CHECK:    ldsminal x1, x0, [x0]4545    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 84546    ret i64 %r4547}4548 4549define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4550; CHECK-LABEL: atomicrmw_min_i64_aligned_seq_cst:4551; CHECK:    ldsminal x1, x0, [x0]4552    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 84553    ret i64 %r4554}4555 4556define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) {4557; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic:4558; -O0:    subs x13, x9, x104559; -O0:    csel x9, x10, x9, ge4560; -O0:    csel x2, x11, x12, ge4561; -O0:    casp x0, x1, x2, x3, [x8]4562; -O0:    subs x11, x9, x114563; -O0:    ccmp x8, x10, #0, eq4564;4565; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic:4566; -O1:    ldp x4, x5, [x0]4567; -O1:    cmp x3, x74568; -O1:    csel x9, x7, x3, ge4569; -O1:    csel x8, x4, x2, ge4570; -O1:    casp x4, x5, x8, x9, [x0]4571; -O1:    cmp x4, x64572; -O1:    ccmp x5, x7, #0, eq4573    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 164574    ret i128 %r4575}4576 4577define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) {4578; -O0-LABEL: atomicrmw_min_i128_aligned_acquire:4579; -O0:    subs x13, x9, x104580; -O0:    csel x9, x10, x9, ge4581; -O0:    csel x2, x11, x12, ge4582; -O0:    caspa x0, x1, x2, x3, [x8]4583; -O0:    subs x11, x9, x114584; -O0:    ccmp x8, x10, #0, eq4585;4586; -O1-LABEL: atomicrmw_min_i128_aligned_acquire:4587; -O1:    ldp x4, x5, [x0]4588; -O1:    cmp x3, x74589; -O1:    csel x9, x7, x3, ge4590; -O1:    csel x8, x4, x2, ge4591; -O1:    caspa x4, x5, x8, x9, [x0]4592; -O1:    cmp x4, x64593; -O1:    ccmp x5, x7, #0, eq4594    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 164595    ret i128 %r4596}4597 4598define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) {4599; -O0-LABEL: atomicrmw_min_i128_aligned_release:4600; -O0:    subs x13, x9, x104601; -O0:    csel x9, x10, x9, ge4602; -O0:    csel x2, x11, x12, ge4603; -O0:    caspl x0, x1, x2, x3, [x8]4604; -O0:    subs x11, x9, x114605; -O0:    ccmp x8, x10, #0, eq4606;4607; -O1-LABEL: atomicrmw_min_i128_aligned_release:4608; -O1:    ldp x4, x5, [x0]4609; -O1:    cmp x3, x74610; -O1:    csel x9, x7, x3, ge4611; -O1:    csel x8, x4, x2, ge4612; -O1:    caspl x4, x5, x8, x9, [x0]4613; -O1:    cmp x4, x64614; -O1:    ccmp x5, x7, #0, eq4615    %r = atomicrmw min ptr %ptr, i128 %value release, align 164616    ret i128 %r4617}4618 4619define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4620; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel:4621; -O0:    subs x13, x9, x104622; -O0:    csel x9, x10, x9, ge4623; -O0:    csel x2, x11, x12, ge4624; -O0:    caspal x0, x1, x2, x3, [x8]4625; -O0:    subs x11, x9, x114626; -O0:    ccmp x8, x10, #0, eq4627;4628; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel:4629; -O1:    ldp x4, x5, [x0]4630; -O1:    cmp x3, x74631; -O1:    csel x9, x7, x3, ge4632; -O1:    csel x8, x4, x2, ge4633; -O1:    caspal x4, x5, x8, x9, [x0]4634; -O1:    cmp x4, x64635; -O1:    ccmp x5, x7, #0, eq4636    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 164637    ret i128 %r4638}4639 4640define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4641; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst:4642; -O0:    subs x13, x9, x104643; -O0:    csel x9, x10, x9, ge4644; -O0:    csel x2, x11, x12, ge4645; -O0:    caspal x0, x1, x2, x3, [x8]4646; -O0:    subs x11, x9, x114647; -O0:    ccmp x8, x10, #0, eq4648;4649; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst:4650; -O1:    ldp x4, x5, [x0]4651; -O1:    cmp x3, x74652; -O1:    csel x9, x7, x3, ge4653; -O1:    csel x8, x4, x2, ge4654; -O1:    caspal x4, x5, x8, x9, [x0]4655; -O1:    cmp x4, x64656; -O1:    ccmp x5, x7, #0, eq4657    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 164658    ret i128 %r4659}4660 4661define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4662; CHECK-LABEL: atomicrmw_min_i8_unaligned_monotonic:4663; CHECK:    ldsminb w1, w0, [x0]4664    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14665    ret i8 %r4666}4667 4668define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) {4669; CHECK-LABEL: atomicrmw_min_i8_unaligned_acquire:4670; CHECK:    ldsminab w1, w0, [x0]4671    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14672    ret i8 %r4673}4674 4675define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) {4676; CHECK-LABEL: atomicrmw_min_i8_unaligned_release:4677; CHECK:    ldsminlb w1, w0, [x0]4678    %r = atomicrmw min ptr %ptr, i8 %value release, align 14679    ret i8 %r4680}4681 4682define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4683; CHECK-LABEL: atomicrmw_min_i8_unaligned_acq_rel:4684; CHECK:    ldsminalb w1, w0, [x0]4685    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 14686    ret i8 %r4687}4688 4689define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4690; CHECK-LABEL: atomicrmw_min_i8_unaligned_seq_cst:4691; CHECK:    ldsminalb w1, w0, [x0]4692    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 14693    ret i8 %r4694}4695 4696define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4697; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic:4698; -O0:    sxth w10, w94699; -O0:    subs w10, w10, w8, sxth4700; -O0:    csel w8, w9, w8, le4701; -O0:    bl __atomic_compare_exchange4702;4703; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic:4704; -O1:    sxth w8, w04705; -O1:    cmp w8, w20, sxth4706; -O1:    csel w8, w0, w20, le4707; -O1:    bl __atomic_compare_exchange4708    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 14709    ret i16 %r4710}4711 4712define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) {4713; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire:4714; -O0:    sxth w10, w94715; -O0:    subs w10, w10, w8, sxth4716; -O0:    csel w8, w9, w8, le4717; -O0:    bl __atomic_compare_exchange4718;4719; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire:4720; -O1:    sxth w8, w04721; -O1:    cmp w8, w20, sxth4722; -O1:    csel w8, w0, w20, le4723; -O1:    bl __atomic_compare_exchange4724    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 14725    ret i16 %r4726}4727 4728define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) {4729; -O0-LABEL: atomicrmw_min_i16_unaligned_release:4730; -O0:    sxth w10, w94731; -O0:    subs w10, w10, w8, sxth4732; -O0:    csel w8, w9, w8, le4733; -O0:    bl __atomic_compare_exchange4734;4735; -O1-LABEL: atomicrmw_min_i16_unaligned_release:4736; -O1:    sxth w8, w04737; -O1:    cmp w8, w20, sxth4738; -O1:    csel w8, w0, w20, le4739; -O1:    bl __atomic_compare_exchange4740    %r = atomicrmw min ptr %ptr, i16 %value release, align 14741    ret i16 %r4742}4743 4744define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4745; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel:4746; -O0:    sxth w10, w94747; -O0:    subs w10, w10, w8, sxth4748; -O0:    csel w8, w9, w8, le4749; -O0:    bl __atomic_compare_exchange4750;4751; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel:4752; -O1:    sxth w8, w04753; -O1:    cmp w8, w20, sxth4754; -O1:    csel w8, w0, w20, le4755; -O1:    bl __atomic_compare_exchange4756    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 14757    ret i16 %r4758}4759 4760define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4761; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst:4762; -O0:    sxth w10, w94763; -O0:    subs w10, w10, w8, sxth4764; -O0:    csel w8, w9, w8, le4765; -O0:    bl __atomic_compare_exchange4766;4767; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst:4768; -O1:    sxth w8, w04769; -O1:    cmp w8, w20, sxth4770; -O1:    csel w8, w0, w20, le4771; -O1:    bl __atomic_compare_exchange4772    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 14773    ret i16 %r4774}4775 4776define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4777; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic:4778; -O0:    subs w10, w9, w84779; -O0:    csel w8, w9, w8, le4780; -O0:    bl __atomic_compare_exchange4781;4782; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic:4783; -O1:    cmp w0, w204784; -O1:    csel w8, w0, w20, le4785; -O1:    bl __atomic_compare_exchange4786    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 14787    ret i32 %r4788}4789 4790define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) {4791; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire:4792; -O0:    subs w10, w9, w84793; -O0:    csel w8, w9, w8, le4794; -O0:    bl __atomic_compare_exchange4795;4796; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire:4797; -O1:    cmp w0, w204798; -O1:    csel w8, w0, w20, le4799; -O1:    bl __atomic_compare_exchange4800    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 14801    ret i32 %r4802}4803 4804define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) {4805; -O0-LABEL: atomicrmw_min_i32_unaligned_release:4806; -O0:    subs w10, w9, w84807; -O0:    csel w8, w9, w8, le4808; -O0:    bl __atomic_compare_exchange4809;4810; -O1-LABEL: atomicrmw_min_i32_unaligned_release:4811; -O1:    cmp w0, w204812; -O1:    csel w8, w0, w20, le4813; -O1:    bl __atomic_compare_exchange4814    %r = atomicrmw min ptr %ptr, i32 %value release, align 14815    ret i32 %r4816}4817 4818define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4819; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel:4820; -O0:    subs w10, w9, w84821; -O0:    csel w8, w9, w8, le4822; -O0:    bl __atomic_compare_exchange4823;4824; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel:4825; -O1:    cmp w0, w204826; -O1:    csel w8, w0, w20, le4827; -O1:    bl __atomic_compare_exchange4828    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 14829    ret i32 %r4830}4831 4832define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4833; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst:4834; -O0:    subs w10, w9, w84835; -O0:    csel w8, w9, w8, le4836; -O0:    bl __atomic_compare_exchange4837;4838; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst:4839; -O1:    cmp w0, w204840; -O1:    csel w8, w0, w20, le4841; -O1:    bl __atomic_compare_exchange4842    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 14843    ret i32 %r4844}4845 4846define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4847; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic:4848; -O0:    subs x10, x9, x84849; -O0:    csel x8, x9, x8, le4850; -O0:    bl __atomic_compare_exchange4851;4852; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic:4853; -O1:    cmp x0, x204854; -O1:    csel x8, x0, x20, le4855; -O1:    bl __atomic_compare_exchange4856    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 14857    ret i64 %r4858}4859 4860define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) {4861; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire:4862; -O0:    subs x10, x9, x84863; -O0:    csel x8, x9, x8, le4864; -O0:    bl __atomic_compare_exchange4865;4866; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire:4867; -O1:    cmp x0, x204868; -O1:    csel x8, x0, x20, le4869; -O1:    bl __atomic_compare_exchange4870    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 14871    ret i64 %r4872}4873 4874define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) {4875; -O0-LABEL: atomicrmw_min_i64_unaligned_release:4876; -O0:    subs x10, x9, x84877; -O0:    csel x8, x9, x8, le4878; -O0:    bl __atomic_compare_exchange4879;4880; -O1-LABEL: atomicrmw_min_i64_unaligned_release:4881; -O1:    cmp x0, x204882; -O1:    csel x8, x0, x20, le4883; -O1:    bl __atomic_compare_exchange4884    %r = atomicrmw min ptr %ptr, i64 %value release, align 14885    ret i64 %r4886}4887 4888define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4889; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel:4890; -O0:    subs x10, x9, x84891; -O0:    csel x8, x9, x8, le4892; -O0:    bl __atomic_compare_exchange4893;4894; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel:4895; -O1:    cmp x0, x204896; -O1:    csel x8, x0, x20, le4897; -O1:    bl __atomic_compare_exchange4898    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 14899    ret i64 %r4900}4901 4902define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4903; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst:4904; -O0:    subs x10, x9, x84905; -O0:    csel x8, x9, x8, le4906; -O0:    bl __atomic_compare_exchange4907;4908; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst:4909; -O1:    cmp x0, x204910; -O1:    csel x8, x0, x20, le4911; -O1:    bl __atomic_compare_exchange4912    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 14913    ret i64 %r4914}4915 4916define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4917; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic:4918; -O0:    subs x12, x9, x104919; -O0:    csel x8, x11, x8, ge4920; -O0:    csel x9, x10, x9, ge4921; -O0:    bl __atomic_compare_exchange4922;4923; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic:4924; -O1:    ldp x0, x1, [x0]4925; -O1:    cmp x19, x14926; -O1:    csel x8, x1, x19, ge4927; -O1:    csel x9, x0, x21, ge4928; -O1:    bl __atomic_compare_exchange4929    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 14930    ret i128 %r4931}4932 4933define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) {4934; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire:4935; -O0:    subs x12, x9, x104936; -O0:    csel x8, x11, x8, ge4937; -O0:    csel x9, x10, x9, ge4938; -O0:    bl __atomic_compare_exchange4939;4940; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire:4941; -O1:    ldp x0, x1, [x0]4942; -O1:    cmp x19, x14943; -O1:    csel x8, x1, x19, ge4944; -O1:    csel x9, x0, x21, ge4945; -O1:    bl __atomic_compare_exchange4946    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 14947    ret i128 %r4948}4949 4950define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) {4951; -O0-LABEL: atomicrmw_min_i128_unaligned_release:4952; -O0:    subs x12, x9, x104953; -O0:    csel x8, x11, x8, ge4954; -O0:    csel x9, x10, x9, ge4955; -O0:    bl __atomic_compare_exchange4956;4957; -O1-LABEL: atomicrmw_min_i128_unaligned_release:4958; -O1:    ldp x0, x1, [x0]4959; -O1:    cmp x19, x14960; -O1:    csel x8, x1, x19, ge4961; -O1:    csel x9, x0, x21, ge4962; -O1:    bl __atomic_compare_exchange4963    %r = atomicrmw min ptr %ptr, i128 %value release, align 14964    ret i128 %r4965}4966 4967define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4968; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel:4969; -O0:    subs x12, x9, x104970; -O0:    csel x8, x11, x8, ge4971; -O0:    csel x9, x10, x9, ge4972; -O0:    bl __atomic_compare_exchange4973;4974; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel:4975; -O1:    ldp x0, x1, [x0]4976; -O1:    cmp x19, x14977; -O1:    csel x8, x1, x19, ge4978; -O1:    csel x9, x0, x21, ge4979; -O1:    bl __atomic_compare_exchange4980    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 14981    ret i128 %r4982}4983 4984define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4985; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst:4986; -O0:    subs x12, x9, x104987; -O0:    csel x8, x11, x8, ge4988; -O0:    csel x9, x10, x9, ge4989; -O0:    bl __atomic_compare_exchange4990;4991; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst:4992; -O1:    ldp x0, x1, [x0]4993; -O1:    cmp x19, x14994; -O1:    csel x8, x1, x19, ge4995; -O1:    csel x9, x0, x21, ge4996; -O1:    bl __atomic_compare_exchange4997    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 14998    ret i128 %r4999}5000 5001define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) {5002; CHECK-LABEL: atomicrmw_umax_i8_aligned_monotonic:5003; CHECK:    ldumaxb w1, w0, [x0]5004    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15005    ret i8 %r5006}5007 5008define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) {5009; CHECK-LABEL: atomicrmw_umax_i8_aligned_acquire:5010; CHECK:    ldumaxab w1, w0, [x0]5011    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15012    ret i8 %r5013}5014 5015define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) {5016; CHECK-LABEL: atomicrmw_umax_i8_aligned_release:5017; CHECK:    ldumaxlb w1, w0, [x0]5018    %r = atomicrmw umax ptr %ptr, i8 %value release, align 15019    ret i8 %r5020}5021 5022define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5023; CHECK-LABEL: atomicrmw_umax_i8_aligned_acq_rel:5024; CHECK:    ldumaxalb w1, w0, [x0]5025    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15026    ret i8 %r5027}5028 5029define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5030; CHECK-LABEL: atomicrmw_umax_i8_aligned_seq_cst:5031; CHECK:    ldumaxalb w1, w0, [x0]5032    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15033    ret i8 %r5034}5035 5036define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) {5037; CHECK-LABEL: atomicrmw_umax_i16_aligned_monotonic:5038; CHECK:    ldumaxh w1, w0, [x0]5039    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 25040    ret i16 %r5041}5042 5043define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) {5044; CHECK-LABEL: atomicrmw_umax_i16_aligned_acquire:5045; CHECK:    ldumaxah w1, w0, [x0]5046    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 25047    ret i16 %r5048}5049 5050define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) {5051; CHECK-LABEL: atomicrmw_umax_i16_aligned_release:5052; CHECK:    ldumaxlh w1, w0, [x0]5053    %r = atomicrmw umax ptr %ptr, i16 %value release, align 25054    ret i16 %r5055}5056 5057define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5058; CHECK-LABEL: atomicrmw_umax_i16_aligned_acq_rel:5059; CHECK:    ldumaxalh w1, w0, [x0]5060    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 25061    ret i16 %r5062}5063 5064define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5065; CHECK-LABEL: atomicrmw_umax_i16_aligned_seq_cst:5066; CHECK:    ldumaxalh w1, w0, [x0]5067    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 25068    ret i16 %r5069}5070 5071define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) {5072; CHECK-LABEL: atomicrmw_umax_i32_aligned_monotonic:5073; CHECK:    ldumax w1, w0, [x0]5074    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 45075    ret i32 %r5076}5077 5078define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) {5079; CHECK-LABEL: atomicrmw_umax_i32_aligned_acquire:5080; CHECK:    ldumaxa w1, w0, [x0]5081    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 45082    ret i32 %r5083}5084 5085define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) {5086; CHECK-LABEL: atomicrmw_umax_i32_aligned_release:5087; CHECK:    ldumaxl w1, w0, [x0]5088    %r = atomicrmw umax ptr %ptr, i32 %value release, align 45089    ret i32 %r5090}5091 5092define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5093; CHECK-LABEL: atomicrmw_umax_i32_aligned_acq_rel:5094; CHECK:    ldumaxal w1, w0, [x0]5095    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 45096    ret i32 %r5097}5098 5099define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5100; CHECK-LABEL: atomicrmw_umax_i32_aligned_seq_cst:5101; CHECK:    ldumaxal w1, w0, [x0]5102    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 45103    ret i32 %r5104}5105 5106define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) {5107; CHECK-LABEL: atomicrmw_umax_i64_aligned_monotonic:5108; CHECK:    ldumax x1, x0, [x0]5109    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 85110    ret i64 %r5111}5112 5113define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) {5114; CHECK-LABEL: atomicrmw_umax_i64_aligned_acquire:5115; CHECK:    ldumaxa x1, x0, [x0]5116    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 85117    ret i64 %r5118}5119 5120define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) {5121; CHECK-LABEL: atomicrmw_umax_i64_aligned_release:5122; CHECK:    ldumaxl x1, x0, [x0]5123    %r = atomicrmw umax ptr %ptr, i64 %value release, align 85124    ret i64 %r5125}5126 5127define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5128; CHECK-LABEL: atomicrmw_umax_i64_aligned_acq_rel:5129; CHECK:    ldumaxal x1, x0, [x0]5130    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 85131    ret i64 %r5132}5133 5134define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5135; CHECK-LABEL: atomicrmw_umax_i64_aligned_seq_cst:5136; CHECK:    ldumaxal x1, x0, [x0]5137    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 85138    ret i64 %r5139}5140 5141define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) {5142; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic:5143; -O0:    subs x13, x9, x105144; -O0:    csel x9, x10, x9, lo5145; -O0:    csel x2, x11, x12, lo5146; -O0:    casp x0, x1, x2, x3, [x8]5147; -O0:    subs x11, x9, x115148; -O0:    ccmp x8, x10, #0, eq5149;5150; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic:5151; -O1:    ldp x4, x5, [x0]5152; -O1:    cmp x3, x75153; -O1:    csel x9, x7, x3, lo5154; -O1:    csel x8, x4, x2, lo5155; -O1:    casp x4, x5, x8, x9, [x0]5156; -O1:    cmp x4, x65157; -O1:    ccmp x5, x7, #0, eq5158    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 165159    ret i128 %r5160}5161 5162define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) {5163; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire:5164; -O0:    subs x13, x9, x105165; -O0:    csel x9, x10, x9, lo5166; -O0:    csel x2, x11, x12, lo5167; -O0:    caspa x0, x1, x2, x3, [x8]5168; -O0:    subs x11, x9, x115169; -O0:    ccmp x8, x10, #0, eq5170;5171; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire:5172; -O1:    ldp x4, x5, [x0]5173; -O1:    cmp x3, x75174; -O1:    csel x9, x7, x3, lo5175; -O1:    csel x8, x4, x2, lo5176; -O1:    caspa x4, x5, x8, x9, [x0]5177; -O1:    cmp x4, x65178; -O1:    ccmp x5, x7, #0, eq5179    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 165180    ret i128 %r5181}5182 5183define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) {5184; -O0-LABEL: atomicrmw_umax_i128_aligned_release:5185; -O0:    subs x13, x9, x105186; -O0:    csel x9, x10, x9, lo5187; -O0:    csel x2, x11, x12, lo5188; -O0:    caspl x0, x1, x2, x3, [x8]5189; -O0:    subs x11, x9, x115190; -O0:    ccmp x8, x10, #0, eq5191;5192; -O1-LABEL: atomicrmw_umax_i128_aligned_release:5193; -O1:    ldp x4, x5, [x0]5194; -O1:    cmp x3, x75195; -O1:    csel x9, x7, x3, lo5196; -O1:    csel x8, x4, x2, lo5197; -O1:    caspl x4, x5, x8, x9, [x0]5198; -O1:    cmp x4, x65199; -O1:    ccmp x5, x7, #0, eq5200    %r = atomicrmw umax ptr %ptr, i128 %value release, align 165201    ret i128 %r5202}5203 5204define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5205; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel:5206; -O0:    subs x13, x9, x105207; -O0:    csel x9, x10, x9, lo5208; -O0:    csel x2, x11, x12, lo5209; -O0:    caspal x0, x1, x2, x3, [x8]5210; -O0:    subs x11, x9, x115211; -O0:    ccmp x8, x10, #0, eq5212;5213; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel:5214; -O1:    ldp x4, x5, [x0]5215; -O1:    cmp x3, x75216; -O1:    csel x9, x7, x3, lo5217; -O1:    csel x8, x4, x2, lo5218; -O1:    caspal x4, x5, x8, x9, [x0]5219; -O1:    cmp x4, x65220; -O1:    ccmp x5, x7, #0, eq5221    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 165222    ret i128 %r5223}5224 5225define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5226; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst:5227; -O0:    subs x13, x9, x105228; -O0:    csel x9, x10, x9, lo5229; -O0:    csel x2, x11, x12, lo5230; -O0:    caspal x0, x1, x2, x3, [x8]5231; -O0:    subs x11, x9, x115232; -O0:    ccmp x8, x10, #0, eq5233;5234; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst:5235; -O1:    ldp x4, x5, [x0]5236; -O1:    cmp x3, x75237; -O1:    csel x9, x7, x3, lo5238; -O1:    csel x8, x4, x2, lo5239; -O1:    caspal x4, x5, x8, x9, [x0]5240; -O1:    cmp x4, x65241; -O1:    ccmp x5, x7, #0, eq5242    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 165243    ret i128 %r5244}5245 5246define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5247; CHECK-LABEL: atomicrmw_umax_i8_unaligned_monotonic:5248; CHECK:    ldumaxb w1, w0, [x0]5249    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15250    ret i8 %r5251}5252 5253define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) {5254; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acquire:5255; CHECK:    ldumaxab w1, w0, [x0]5256    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15257    ret i8 %r5258}5259 5260define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) {5261; CHECK-LABEL: atomicrmw_umax_i8_unaligned_release:5262; CHECK:    ldumaxlb w1, w0, [x0]5263    %r = atomicrmw umax ptr %ptr, i8 %value release, align 15264    ret i8 %r5265}5266 5267define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5268; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:5269; CHECK:    ldumaxalb w1, w0, [x0]5270    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15271    ret i8 %r5272}5273 5274define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5275; CHECK-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:5276; CHECK:    ldumaxalb w1, w0, [x0]5277    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15278    ret i8 %r5279}5280 5281define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5282; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic:5283; -O0:    and w10, w9, #0xffff5284; -O0:    subs w10, w10, w8, uxth5285; -O0:    csel w8, w9, w8, hi5286; -O0:    bl __atomic_compare_exchange5287;5288; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic:5289; -O1:    and w8, w0, #0xffff5290; -O1:    cmp w8, w20, uxth5291; -O1:    csel w8, w0, w20, hi5292; -O1:    bl __atomic_compare_exchange5293    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 15294    ret i16 %r5295}5296 5297define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) {5298; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire:5299; -O0:    and w10, w9, #0xffff5300; -O0:    subs w10, w10, w8, uxth5301; -O0:    csel w8, w9, w8, hi5302; -O0:    bl __atomic_compare_exchange5303;5304; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire:5305; -O1:    and w8, w0, #0xffff5306; -O1:    cmp w8, w20, uxth5307; -O1:    csel w8, w0, w20, hi5308; -O1:    bl __atomic_compare_exchange5309    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 15310    ret i16 %r5311}5312 5313define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) {5314; -O0-LABEL: atomicrmw_umax_i16_unaligned_release:5315; -O0:    and w10, w9, #0xffff5316; -O0:    subs w10, w10, w8, uxth5317; -O0:    csel w8, w9, w8, hi5318; -O0:    bl __atomic_compare_exchange5319;5320; -O1-LABEL: atomicrmw_umax_i16_unaligned_release:5321; -O1:    and w8, w0, #0xffff5322; -O1:    cmp w8, w20, uxth5323; -O1:    csel w8, w0, w20, hi5324; -O1:    bl __atomic_compare_exchange5325    %r = atomicrmw umax ptr %ptr, i16 %value release, align 15326    ret i16 %r5327}5328 5329define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5330; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:5331; -O0:    and w10, w9, #0xffff5332; -O0:    subs w10, w10, w8, uxth5333; -O0:    csel w8, w9, w8, hi5334; -O0:    bl __atomic_compare_exchange5335;5336; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:5337; -O1:    and w8, w0, #0xffff5338; -O1:    cmp w8, w20, uxth5339; -O1:    csel w8, w0, w20, hi5340; -O1:    bl __atomic_compare_exchange5341    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 15342    ret i16 %r5343}5344 5345define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5346; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:5347; -O0:    and w10, w9, #0xffff5348; -O0:    subs w10, w10, w8, uxth5349; -O0:    csel w8, w9, w8, hi5350; -O0:    bl __atomic_compare_exchange5351;5352; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:5353; -O1:    and w8, w0, #0xffff5354; -O1:    cmp w8, w20, uxth5355; -O1:    csel w8, w0, w20, hi5356; -O1:    bl __atomic_compare_exchange5357    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 15358    ret i16 %r5359}5360 5361define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5362; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic:5363; -O0:    subs w10, w9, w85364; -O0:    csel w8, w9, w8, hi5365; -O0:    bl __atomic_compare_exchange5366;5367; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic:5368; -O1:    cmp w0, w205369; -O1:    csel w8, w0, w20, hi5370; -O1:    bl __atomic_compare_exchange5371    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 15372    ret i32 %r5373}5374 5375define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) {5376; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire:5377; -O0:    subs w10, w9, w85378; -O0:    csel w8, w9, w8, hi5379; -O0:    bl __atomic_compare_exchange5380;5381; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire:5382; -O1:    cmp w0, w205383; -O1:    csel w8, w0, w20, hi5384; -O1:    bl __atomic_compare_exchange5385    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 15386    ret i32 %r5387}5388 5389define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) {5390; -O0-LABEL: atomicrmw_umax_i32_unaligned_release:5391; -O0:    subs w10, w9, w85392; -O0:    csel w8, w9, w8, hi5393; -O0:    bl __atomic_compare_exchange5394;5395; -O1-LABEL: atomicrmw_umax_i32_unaligned_release:5396; -O1:    cmp w0, w205397; -O1:    csel w8, w0, w20, hi5398; -O1:    bl __atomic_compare_exchange5399    %r = atomicrmw umax ptr %ptr, i32 %value release, align 15400    ret i32 %r5401}5402 5403define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5404; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:5405; -O0:    subs w10, w9, w85406; -O0:    csel w8, w9, w8, hi5407; -O0:    bl __atomic_compare_exchange5408;5409; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:5410; -O1:    cmp w0, w205411; -O1:    csel w8, w0, w20, hi5412; -O1:    bl __atomic_compare_exchange5413    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 15414    ret i32 %r5415}5416 5417define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5418; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:5419; -O0:    subs w10, w9, w85420; -O0:    csel w8, w9, w8, hi5421; -O0:    bl __atomic_compare_exchange5422;5423; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:5424; -O1:    cmp w0, w205425; -O1:    csel w8, w0, w20, hi5426; -O1:    bl __atomic_compare_exchange5427    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 15428    ret i32 %r5429}5430 5431define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5432; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic:5433; -O0:    subs x10, x9, x85434; -O0:    csel x8, x9, x8, hi5435; -O0:    bl __atomic_compare_exchange5436;5437; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic:5438; -O1:    cmp x0, x205439; -O1:    csel x8, x0, x20, hi5440; -O1:    bl __atomic_compare_exchange5441    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 15442    ret i64 %r5443}5444 5445define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) {5446; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire:5447; -O0:    subs x10, x9, x85448; -O0:    csel x8, x9, x8, hi5449; -O0:    bl __atomic_compare_exchange5450;5451; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire:5452; -O1:    cmp x0, x205453; -O1:    csel x8, x0, x20, hi5454; -O1:    bl __atomic_compare_exchange5455    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 15456    ret i64 %r5457}5458 5459define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) {5460; -O0-LABEL: atomicrmw_umax_i64_unaligned_release:5461; -O0:    subs x10, x9, x85462; -O0:    csel x8, x9, x8, hi5463; -O0:    bl __atomic_compare_exchange5464;5465; -O1-LABEL: atomicrmw_umax_i64_unaligned_release:5466; -O1:    cmp x0, x205467; -O1:    csel x8, x0, x20, hi5468; -O1:    bl __atomic_compare_exchange5469    %r = atomicrmw umax ptr %ptr, i64 %value release, align 15470    ret i64 %r5471}5472 5473define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {5474; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:5475; -O0:    subs x10, x9, x85476; -O0:    csel x8, x9, x8, hi5477; -O0:    bl __atomic_compare_exchange5478;5479; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:5480; -O1:    cmp x0, x205481; -O1:    csel x8, x0, x20, hi5482; -O1:    bl __atomic_compare_exchange5483    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 15484    ret i64 %r5485}5486 5487define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {5488; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:5489; -O0:    subs x10, x9, x85490; -O0:    csel x8, x9, x8, hi5491; -O0:    bl __atomic_compare_exchange5492;5493; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:5494; -O1:    cmp x0, x205495; -O1:    csel x8, x0, x20, hi5496; -O1:    bl __atomic_compare_exchange5497    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 15498    ret i64 %r5499}5500 5501define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5502; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic:5503; -O0:    subs x12, x9, x105504; -O0:    csel x8, x11, x8, lo5505; -O0:    csel x9, x10, x9, lo5506; -O0:    bl __atomic_compare_exchange5507;5508; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic:5509; -O1:    ldp x0, x1, [x0]5510; -O1:    cmp x19, x15511; -O1:    csel x8, x1, x19, lo5512; -O1:    csel x9, x0, x21, lo5513; -O1:    bl __atomic_compare_exchange5514    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 15515    ret i128 %r5516}5517 5518define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) {5519; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire:5520; -O0:    subs x12, x9, x105521; -O0:    csel x8, x11, x8, lo5522; -O0:    csel x9, x10, x9, lo5523; -O0:    bl __atomic_compare_exchange5524;5525; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire:5526; -O1:    ldp x0, x1, [x0]5527; -O1:    cmp x19, x15528; -O1:    csel x8, x1, x19, lo5529; -O1:    csel x9, x0, x21, lo5530; -O1:    bl __atomic_compare_exchange5531    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 15532    ret i128 %r5533}5534 5535define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) {5536; -O0-LABEL: atomicrmw_umax_i128_unaligned_release:5537; -O0:    subs x12, x9, x105538; -O0:    csel x8, x11, x8, lo5539; -O0:    csel x9, x10, x9, lo5540; -O0:    bl __atomic_compare_exchange5541;5542; -O1-LABEL: atomicrmw_umax_i128_unaligned_release:5543; -O1:    ldp x0, x1, [x0]5544; -O1:    cmp x19, x15545; -O1:    csel x8, x1, x19, lo5546; -O1:    csel x9, x0, x21, lo5547; -O1:    bl __atomic_compare_exchange5548    %r = atomicrmw umax ptr %ptr, i128 %value release, align 15549    ret i128 %r5550}5551 5552define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5553; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:5554; -O0:    subs x12, x9, x105555; -O0:    csel x8, x11, x8, lo5556; -O0:    csel x9, x10, x9, lo5557; -O0:    bl __atomic_compare_exchange5558;5559; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:5560; -O1:    ldp x0, x1, [x0]5561; -O1:    cmp x19, x15562; -O1:    csel x8, x1, x19, lo5563; -O1:    csel x9, x0, x21, lo5564; -O1:    bl __atomic_compare_exchange5565    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 15566    ret i128 %r5567}5568 5569define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5570; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:5571; -O0:    subs x12, x9, x105572; -O0:    csel x8, x11, x8, lo5573; -O0:    csel x9, x10, x9, lo5574; -O0:    bl __atomic_compare_exchange5575;5576; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:5577; -O1:    ldp x0, x1, [x0]5578; -O1:    cmp x19, x15579; -O1:    csel x8, x1, x19, lo5580; -O1:    csel x9, x0, x21, lo5581; -O1:    bl __atomic_compare_exchange5582    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 15583    ret i128 %r5584}5585 5586define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) {5587; CHECK-LABEL: atomicrmw_umin_i8_aligned_monotonic:5588; CHECK:    lduminb w1, w0, [x0]5589    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 15590    ret i8 %r5591}5592 5593define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) {5594; CHECK-LABEL: atomicrmw_umin_i8_aligned_acquire:5595; CHECK:    lduminab w1, w0, [x0]5596    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 15597    ret i8 %r5598}5599 5600define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) {5601; CHECK-LABEL: atomicrmw_umin_i8_aligned_release:5602; CHECK:    lduminlb w1, w0, [x0]5603    %r = atomicrmw umin ptr %ptr, i8 %value release, align 15604    ret i8 %r5605}5606 5607define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5608; CHECK-LABEL: atomicrmw_umin_i8_aligned_acq_rel:5609; CHECK:    lduminalb w1, w0, [x0]5610    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 15611    ret i8 %r5612}5613 5614define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5615; CHECK-LABEL: atomicrmw_umin_i8_aligned_seq_cst:5616; CHECK:    lduminalb w1, w0, [x0]5617    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 15618    ret i8 %r5619}5620 5621define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) {5622; CHECK-LABEL: atomicrmw_umin_i16_aligned_monotonic:5623; CHECK:    lduminh w1, w0, [x0]5624    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 25625    ret i16 %r5626}5627 5628define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) {5629; CHECK-LABEL: atomicrmw_umin_i16_aligned_acquire:5630; CHECK:    lduminah w1, w0, [x0]5631    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 25632    ret i16 %r5633}5634 5635define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) {5636; CHECK-LABEL: atomicrmw_umin_i16_aligned_release:5637; CHECK:    lduminlh w1, w0, [x0]5638    %r = atomicrmw umin ptr %ptr, i16 %value release, align 25639    ret i16 %r5640}5641 5642define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5643; CHECK-LABEL: atomicrmw_umin_i16_aligned_acq_rel:5644; CHECK:    lduminalh w1, w0, [x0]5645    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 25646    ret i16 %r5647}5648 5649define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5650; CHECK-LABEL: atomicrmw_umin_i16_aligned_seq_cst:5651; CHECK:    lduminalh w1, w0, [x0]5652    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 25653    ret i16 %r5654}5655 5656define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) {5657; CHECK-LABEL: atomicrmw_umin_i32_aligned_monotonic:5658; CHECK:    ldumin w1, w0, [x0]5659    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 45660    ret i32 %r5661}5662 5663define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) {5664; CHECK-LABEL: atomicrmw_umin_i32_aligned_acquire:5665; CHECK:    ldumina w1, w0, [x0]5666    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 45667    ret i32 %r5668}5669 5670define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) {5671; CHECK-LABEL: atomicrmw_umin_i32_aligned_release:5672; CHECK:    lduminl w1, w0, [x0]5673    %r = atomicrmw umin ptr %ptr, i32 %value release, align 45674    ret i32 %r5675}5676 5677define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5678; CHECK-LABEL: atomicrmw_umin_i32_aligned_acq_rel:5679; CHECK:    lduminal w1, w0, [x0]5680    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 45681    ret i32 %r5682}5683 5684define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5685; CHECK-LABEL: atomicrmw_umin_i32_aligned_seq_cst:5686; CHECK:    lduminal w1, w0, [x0]5687    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 45688    ret i32 %r5689}5690 5691define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) {5692; CHECK-LABEL: atomicrmw_umin_i64_aligned_monotonic:5693; CHECK:    ldumin x1, x0, [x0]5694    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 85695    ret i64 %r5696}5697 5698define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) {5699; CHECK-LABEL: atomicrmw_umin_i64_aligned_acquire:5700; CHECK:    ldumina x1, x0, [x0]5701    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 85702    ret i64 %r5703}5704 5705define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) {5706; CHECK-LABEL: atomicrmw_umin_i64_aligned_release:5707; CHECK:    lduminl x1, x0, [x0]5708    %r = atomicrmw umin ptr %ptr, i64 %value release, align 85709    ret i64 %r5710}5711 5712define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5713; CHECK-LABEL: atomicrmw_umin_i64_aligned_acq_rel:5714; CHECK:    lduminal x1, x0, [x0]5715    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 85716    ret i64 %r5717}5718 5719define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5720; CHECK-LABEL: atomicrmw_umin_i64_aligned_seq_cst:5721; CHECK:    lduminal x1, x0, [x0]5722    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 85723    ret i64 %r5724}5725 5726define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) {5727; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic:5728; -O0:    subs x13, x9, x105729; -O0:    csel x9, x10, x9, hs5730; -O0:    csel x2, x11, x12, hs5731; -O0:    casp x0, x1, x2, x3, [x8]5732; -O0:    subs x11, x9, x115733; -O0:    ccmp x8, x10, #0, eq5734;5735; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic:5736; -O1:    ldp x4, x5, [x0]5737; -O1:    cmp x3, x75738; -O1:    csel x9, x7, x3, hs5739; -O1:    csel x8, x4, x2, hs5740; -O1:    casp x4, x5, x8, x9, [x0]5741; -O1:    cmp x4, x65742; -O1:    ccmp x5, x7, #0, eq5743    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 165744    ret i128 %r5745}5746 5747define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) {5748; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire:5749; -O0:    subs x13, x9, x105750; -O0:    csel x9, x10, x9, hs5751; -O0:    csel x2, x11, x12, hs5752; -O0:    caspa x0, x1, x2, x3, [x8]5753; -O0:    subs x11, x9, x115754; -O0:    ccmp x8, x10, #0, eq5755;5756; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire:5757; -O1:    ldp x4, x5, [x0]5758; -O1:    cmp x3, x75759; -O1:    csel x9, x7, x3, hs5760; -O1:    csel x8, x4, x2, hs5761; -O1:    caspa x4, x5, x8, x9, [x0]5762; -O1:    cmp x4, x65763; -O1:    ccmp x5, x7, #0, eq5764    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 165765    ret i128 %r5766}5767 5768define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) {5769; -O0-LABEL: atomicrmw_umin_i128_aligned_release:5770; -O0:    subs x13, x9, x105771; -O0:    csel x9, x10, x9, hs5772; -O0:    csel x2, x11, x12, hs5773; -O0:    caspl x0, x1, x2, x3, [x8]5774; -O0:    subs x11, x9, x115775; -O0:    ccmp x8, x10, #0, eq5776;5777; -O1-LABEL: atomicrmw_umin_i128_aligned_release:5778; -O1:    ldp x4, x5, [x0]5779; -O1:    cmp x3, x75780; -O1:    csel x9, x7, x3, hs5781; -O1:    csel x8, x4, x2, hs5782; -O1:    caspl x4, x5, x8, x9, [x0]5783; -O1:    cmp x4, x65784; -O1:    ccmp x5, x7, #0, eq5785    %r = atomicrmw umin ptr %ptr, i128 %value release, align 165786    ret i128 %r5787}5788 5789define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5790; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel:5791; -O0:    subs x13, x9, x105792; -O0:    csel x9, x10, x9, hs5793; -O0:    csel x2, x11, x12, hs5794; -O0:    caspal x0, x1, x2, x3, [x8]5795; -O0:    subs x11, x9, x115796; -O0:    ccmp x8, x10, #0, eq5797;5798; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel:5799; -O1:    ldp x4, x5, [x0]5800; -O1:    cmp x3, x75801; -O1:    csel x9, x7, x3, hs5802; -O1:    csel x8, x4, x2, hs5803; -O1:    caspal x4, x5, x8, x9, [x0]5804; -O1:    cmp x4, x65805; -O1:    ccmp x5, x7, #0, eq5806    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 165807    ret i128 %r5808}5809 5810define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5811; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst:5812; -O0:    subs x13, x9, x105813; -O0:    csel x9, x10, x9, hs5814; -O0:    csel x2, x11, x12, hs5815; -O0:    caspal x0, x1, x2, x3, [x8]5816; -O0:    subs x11, x9, x115817; -O0:    ccmp x8, x10, #0, eq5818;5819; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst:5820; -O1:    ldp x4, x5, [x0]5821; -O1:    cmp x3, x75822; -O1:    csel x9, x7, x3, hs5823; -O1:    csel x8, x4, x2, hs5824; -O1:    caspal x4, x5, x8, x9, [x0]5825; -O1:    cmp x4, x65826; -O1:    ccmp x5, x7, #0, eq5827    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 165828    ret i128 %r5829}5830 5831define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5832; CHECK-LABEL: atomicrmw_umin_i8_unaligned_monotonic:5833; CHECK:    lduminb w1, w0, [x0]5834    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 15835    ret i8 %r5836}5837 5838define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) {5839; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acquire:5840; CHECK:    lduminab w1, w0, [x0]5841    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 15842    ret i8 %r5843}5844 5845define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) {5846; CHECK-LABEL: atomicrmw_umin_i8_unaligned_release:5847; CHECK:    lduminlb w1, w0, [x0]5848    %r = atomicrmw umin ptr %ptr, i8 %value release, align 15849    ret i8 %r5850}5851 5852define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5853; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:5854; CHECK:    lduminalb w1, w0, [x0]5855    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 15856    ret i8 %r5857}5858 5859define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5860; CHECK-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:5861; CHECK:    lduminalb w1, w0, [x0]5862    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 15863    ret i8 %r5864}5865 5866define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5867; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic:5868; -O0:    and w10, w9, #0xffff5869; -O0:    subs w10, w10, w8, uxth5870; -O0:    csel w8, w9, w8, ls5871; -O0:    bl __atomic_compare_exchange5872;5873; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic:5874; -O1:    and w8, w0, #0xffff5875; -O1:    cmp w8, w20, uxth5876; -O1:    csel w8, w0, w20, ls5877; -O1:    bl __atomic_compare_exchange5878    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 15879    ret i16 %r5880}5881 5882define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) {5883; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire:5884; -O0:    and w10, w9, #0xffff5885; -O0:    subs w10, w10, w8, uxth5886; -O0:    csel w8, w9, w8, ls5887; -O0:    bl __atomic_compare_exchange5888;5889; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire:5890; -O1:    and w8, w0, #0xffff5891; -O1:    cmp w8, w20, uxth5892; -O1:    csel w8, w0, w20, ls5893; -O1:    bl __atomic_compare_exchange5894    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 15895    ret i16 %r5896}5897 5898define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) {5899; -O0-LABEL: atomicrmw_umin_i16_unaligned_release:5900; -O0:    and w10, w9, #0xffff5901; -O0:    subs w10, w10, w8, uxth5902; -O0:    csel w8, w9, w8, ls5903; -O0:    bl __atomic_compare_exchange5904;5905; -O1-LABEL: atomicrmw_umin_i16_unaligned_release:5906; -O1:    and w8, w0, #0xffff5907; -O1:    cmp w8, w20, uxth5908; -O1:    csel w8, w0, w20, ls5909; -O1:    bl __atomic_compare_exchange5910    %r = atomicrmw umin ptr %ptr, i16 %value release, align 15911    ret i16 %r5912}5913 5914define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5915; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:5916; -O0:    and w10, w9, #0xffff5917; -O0:    subs w10, w10, w8, uxth5918; -O0:    csel w8, w9, w8, ls5919; -O0:    bl __atomic_compare_exchange5920;5921; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:5922; -O1:    and w8, w0, #0xffff5923; -O1:    cmp w8, w20, uxth5924; -O1:    csel w8, w0, w20, ls5925; -O1:    bl __atomic_compare_exchange5926    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 15927    ret i16 %r5928}5929 5930define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5931; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:5932; -O0:    and w10, w9, #0xffff5933; -O0:    subs w10, w10, w8, uxth5934; -O0:    csel w8, w9, w8, ls5935; -O0:    bl __atomic_compare_exchange5936;5937; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:5938; -O1:    and w8, w0, #0xffff5939; -O1:    cmp w8, w20, uxth5940; -O1:    csel w8, w0, w20, ls5941; -O1:    bl __atomic_compare_exchange5942    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 15943    ret i16 %r5944}5945 5946define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5947; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic:5948; -O0:    subs w10, w9, w85949; -O0:    csel w8, w9, w8, ls5950; -O0:    bl __atomic_compare_exchange5951;5952; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic:5953; -O1:    cmp w0, w205954; -O1:    csel w8, w0, w20, ls5955; -O1:    bl __atomic_compare_exchange5956    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 15957    ret i32 %r5958}5959 5960define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) {5961; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire:5962; -O0:    subs w10, w9, w85963; -O0:    csel w8, w9, w8, ls5964; -O0:    bl __atomic_compare_exchange5965;5966; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire:5967; -O1:    cmp w0, w205968; -O1:    csel w8, w0, w20, ls5969; -O1:    bl __atomic_compare_exchange5970    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 15971    ret i32 %r5972}5973 5974define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) {5975; -O0-LABEL: atomicrmw_umin_i32_unaligned_release:5976; -O0:    subs w10, w9, w85977; -O0:    csel w8, w9, w8, ls5978; -O0:    bl __atomic_compare_exchange5979;5980; -O1-LABEL: atomicrmw_umin_i32_unaligned_release:5981; -O1:    cmp w0, w205982; -O1:    csel w8, w0, w20, ls5983; -O1:    bl __atomic_compare_exchange5984    %r = atomicrmw umin ptr %ptr, i32 %value release, align 15985    ret i32 %r5986}5987 5988define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5989; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:5990; -O0:    subs w10, w9, w85991; -O0:    csel w8, w9, w8, ls5992; -O0:    bl __atomic_compare_exchange5993;5994; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:5995; -O1:    cmp w0, w205996; -O1:    csel w8, w0, w20, ls5997; -O1:    bl __atomic_compare_exchange5998    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 15999    ret i32 %r6000}6001 6002define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {6003; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:6004; -O0:    subs w10, w9, w86005; -O0:    csel w8, w9, w8, ls6006; -O0:    bl __atomic_compare_exchange6007;6008; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:6009; -O1:    cmp w0, w206010; -O1:    csel w8, w0, w20, ls6011; -O1:    bl __atomic_compare_exchange6012    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 16013    ret i32 %r6014}6015 6016define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) {6017; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic:6018; -O0:    subs x10, x9, x86019; -O0:    csel x8, x9, x8, ls6020; -O0:    bl __atomic_compare_exchange6021;6022; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic:6023; -O1:    cmp x0, x206024; -O1:    csel x8, x0, x20, ls6025; -O1:    bl __atomic_compare_exchange6026    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 16027    ret i64 %r6028}6029 6030define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) {6031; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire:6032; -O0:    subs x10, x9, x86033; -O0:    csel x8, x9, x8, ls6034; -O0:    bl __atomic_compare_exchange6035;6036; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire:6037; -O1:    cmp x0, x206038; -O1:    csel x8, x0, x20, ls6039; -O1:    bl __atomic_compare_exchange6040    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 16041    ret i64 %r6042}6043 6044define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) {6045; -O0-LABEL: atomicrmw_umin_i64_unaligned_release:6046; -O0:    subs x10, x9, x86047; -O0:    csel x8, x9, x8, ls6048; -O0:    bl __atomic_compare_exchange6049;6050; -O1-LABEL: atomicrmw_umin_i64_unaligned_release:6051; -O1:    cmp x0, x206052; -O1:    csel x8, x0, x20, ls6053; -O1:    bl __atomic_compare_exchange6054    %r = atomicrmw umin ptr %ptr, i64 %value release, align 16055    ret i64 %r6056}6057 6058define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {6059; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:6060; -O0:    subs x10, x9, x86061; -O0:    csel x8, x9, x8, ls6062; -O0:    bl __atomic_compare_exchange6063;6064; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:6065; -O1:    cmp x0, x206066; -O1:    csel x8, x0, x20, ls6067; -O1:    bl __atomic_compare_exchange6068    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 16069    ret i64 %r6070}6071 6072define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {6073; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:6074; -O0:    subs x10, x9, x86075; -O0:    csel x8, x9, x8, ls6076; -O0:    bl __atomic_compare_exchange6077;6078; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:6079; -O1:    cmp x0, x206080; -O1:    csel x8, x0, x20, ls6081; -O1:    bl __atomic_compare_exchange6082    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 16083    ret i64 %r6084}6085 6086define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) {6087; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic:6088; -O0:    subs x12, x9, x106089; -O0:    csel x8, x11, x8, hs6090; -O0:    csel x9, x10, x9, hs6091; -O0:    bl __atomic_compare_exchange6092;6093; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic:6094; -O1:    ldp x0, x1, [x0]6095; -O1:    cmp x19, x16096; -O1:    csel x8, x1, x19, hs6097; -O1:    csel x9, x0, x21, hs6098; -O1:    bl __atomic_compare_exchange6099    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 16100    ret i128 %r6101}6102 6103define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) {6104; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire:6105; -O0:    subs x12, x9, x106106; -O0:    csel x8, x11, x8, hs6107; -O0:    csel x9, x10, x9, hs6108; -O0:    bl __atomic_compare_exchange6109;6110; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire:6111; -O1:    ldp x0, x1, [x0]6112; -O1:    cmp x19, x16113; -O1:    csel x8, x1, x19, hs6114; -O1:    csel x9, x0, x21, hs6115; -O1:    bl __atomic_compare_exchange6116    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 16117    ret i128 %r6118}6119 6120define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) {6121; -O0-LABEL: atomicrmw_umin_i128_unaligned_release:6122; -O0:    subs x12, x9, x106123; -O0:    csel x8, x11, x8, hs6124; -O0:    csel x9, x10, x9, hs6125; -O0:    bl __atomic_compare_exchange6126;6127; -O1-LABEL: atomicrmw_umin_i128_unaligned_release:6128; -O1:    ldp x0, x1, [x0]6129; -O1:    cmp x19, x16130; -O1:    csel x8, x1, x19, hs6131; -O1:    csel x9, x0, x21, hs6132; -O1:    bl __atomic_compare_exchange6133    %r = atomicrmw umin ptr %ptr, i128 %value release, align 16134    ret i128 %r6135}6136 6137define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {6138; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:6139; -O0:    subs x12, x9, x106140; -O0:    csel x8, x11, x8, hs6141; -O0:    csel x9, x10, x9, hs6142; -O0:    bl __atomic_compare_exchange6143;6144; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:6145; -O1:    ldp x0, x1, [x0]6146; -O1:    cmp x19, x16147; -O1:    csel x8, x1, x19, hs6148; -O1:    csel x9, x0, x21, hs6149; -O1:    bl __atomic_compare_exchange6150    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 16151    ret i128 %r6152}6153 6154define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {6155; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:6156; -O0:    subs x12, x9, x106157; -O0:    csel x8, x11, x8, hs6158; -O0:    csel x9, x10, x9, hs6159; -O0:    bl __atomic_compare_exchange6160;6161; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:6162; -O1:    ldp x0, x1, [x0]6163; -O1:    cmp x19, x16164; -O1:    csel x8, x1, x19, hs6165; -O1:    csel x9, x0, x21, hs6166; -O1:    bl __atomic_compare_exchange6167    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 16168    ret i128 %r6169}6170