brintos

brintos / llvm-project-archived public Read only

0
0
Text · 201.7 KiB · 1fad4a6 Raw
6360 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st[^r]|swp|cas|bl|add|and|eor|orn|orr|sub|mvn|sxt|cmp|ccmp|csel|dmb)"2; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse2,+lse128 -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -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 x2, x9, x11514; -O0:    subs w11, w11, #1515; -O0:    casp x0, x1, x2, x3, [x8]516; -O0:    eor x8, x10, x8517; -O0:    eor x11, x9, x11518; -O0:    orr x8, x8, x11519; -O0:    subs x8, x8, #0520;521; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic:522; -O1:    ldp x4, x5, [x0]523; -O1:    adds x8, x4, x2524; -O1:    casp x4, x5, x8, x9, [x0]525; -O1:    cmp x5, x7526; -O1:    ccmp x4, x6, #0, eq527    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16528    ret i128 %r529}530 531define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) {532; -O0-LABEL: atomicrmw_add_i128_aligned_acquire:533; -O0:    adds x2, x9, x11534; -O0:    subs w11, w11, #1535; -O0:    caspa x0, x1, x2, x3, [x8]536; -O0:    eor x8, x10, x8537; -O0:    eor x11, x9, x11538; -O0:    orr x8, x8, x11539; -O0:    subs x8, x8, #0540;541; -O1-LABEL: atomicrmw_add_i128_aligned_acquire:542; -O1:    ldp x4, x5, [x0]543; -O1:    adds x8, x4, x2544; -O1:    caspa x4, x5, x8, x9, [x0]545; -O1:    cmp x5, x7546; -O1:    ccmp x4, x6, #0, eq547    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16548    ret i128 %r549}550 551define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) {552; -O0-LABEL: atomicrmw_add_i128_aligned_release:553; -O0:    adds x2, x9, x11554; -O0:    subs w11, w11, #1555; -O0:    caspl x0, x1, x2, x3, [x8]556; -O0:    eor x8, x10, x8557; -O0:    eor x11, x9, x11558; -O0:    orr x8, x8, x11559; -O0:    subs x8, x8, #0560;561; -O1-LABEL: atomicrmw_add_i128_aligned_release:562; -O1:    ldp x4, x5, [x0]563; -O1:    adds x8, x4, x2564; -O1:    caspl x4, x5, x8, x9, [x0]565; -O1:    cmp x5, x7566; -O1:    ccmp x4, x6, #0, eq567    %r = atomicrmw add ptr %ptr, i128 %value release, align 16568    ret i128 %r569}570 571define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) {572; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel:573; -O0:    adds x2, x9, x11574; -O0:    subs w11, w11, #1575; -O0:    caspal x0, x1, x2, x3, [x8]576; -O0:    eor x8, x10, x8577; -O0:    eor x11, x9, x11578; -O0:    orr x8, x8, x11579; -O0:    subs x8, x8, #0580;581; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel:582; -O1:    ldp x4, x5, [x0]583; -O1:    adds x8, x4, x2584; -O1:    caspal x4, x5, x8, x9, [x0]585; -O1:    cmp x5, x7586; -O1:    ccmp x4, x6, #0, eq587    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 16588    ret i128 %r589}590 591define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) {592; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst:593; -O0:    adds x2, x9, x11594; -O0:    subs w11, w11, #1595; -O0:    caspal x0, x1, x2, x3, [x8]596; -O0:    eor x8, x10, x8597; -O0:    eor x11, x9, x11598; -O0:    orr x8, x8, x11599; -O0:    subs x8, x8, #0600;601; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst:602; -O1:    ldp x4, x5, [x0]603; -O1:    adds x8, x4, x2604; -O1:    caspal x4, x5, x8, x9, [x0]605; -O1:    cmp x5, x7606; -O1:    ccmp x4, x6, #0, eq607    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 16608    ret i128 %r609}610 611define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) {612; CHECK-LABEL: atomicrmw_add_i8_unaligned_monotonic:613; CHECK:    ldaddb w1, w0, [x0]614    %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1615    ret i8 %r616}617 618define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) {619; CHECK-LABEL: atomicrmw_add_i8_unaligned_acquire:620; CHECK:    ldaddab w1, w0, [x0]621    %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1622    ret i8 %r623}624 625define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) {626; CHECK-LABEL: atomicrmw_add_i8_unaligned_release:627; CHECK:    ldaddlb w1, w0, [x0]628    %r = atomicrmw add ptr %ptr, i8 %value release, align 1629    ret i8 %r630}631 632define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {633; CHECK-LABEL: atomicrmw_add_i8_unaligned_acq_rel:634; CHECK:    ldaddalb w1, w0, [x0]635    %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1636    ret i8 %r637}638 639define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {640; CHECK-LABEL: atomicrmw_add_i8_unaligned_seq_cst:641; CHECK:    ldaddalb w1, w0, [x0]642    %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1643    ret i8 %r644}645 646define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) {647; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic:648; -O0:    add w8, w8, w9, uxth649; -O0:    bl __atomic_compare_exchange650;651; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic:652; -O1:    add w8, w0, w20653; -O1:    bl __atomic_compare_exchange654    %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 1655    ret i16 %r656}657 658define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) {659; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire:660; -O0:    add w8, w8, w9, uxth661; -O0:    bl __atomic_compare_exchange662;663; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire:664; -O1:    add w8, w0, w20665; -O1:    bl __atomic_compare_exchange666    %r = atomicrmw add ptr %ptr, i16 %value acquire, align 1667    ret i16 %r668}669 670define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) {671; -O0-LABEL: atomicrmw_add_i16_unaligned_release:672; -O0:    add w8, w8, w9, uxth673; -O0:    bl __atomic_compare_exchange674;675; -O1-LABEL: atomicrmw_add_i16_unaligned_release:676; -O1:    add w8, w0, w20677; -O1:    bl __atomic_compare_exchange678    %r = atomicrmw add ptr %ptr, i16 %value release, align 1679    ret i16 %r680}681 682define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {683; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel:684; -O0:    add w8, w8, w9, uxth685; -O0:    bl __atomic_compare_exchange686;687; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel:688; -O1:    add w8, w0, w20689; -O1:    bl __atomic_compare_exchange690    %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 1691    ret i16 %r692}693 694define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {695; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst:696; -O0:    add w8, w8, w9, uxth697; -O0:    bl __atomic_compare_exchange698;699; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst:700; -O1:    add w8, w0, w20701; -O1:    bl __atomic_compare_exchange702    %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 1703    ret i16 %r704}705 706define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) {707; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic:708; -O0:    add w8, w9, w8709; -O0:    bl __atomic_compare_exchange710;711; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic:712; -O1:    add w8, w0, w20713; -O1:    bl __atomic_compare_exchange714    %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 1715    ret i32 %r716}717 718define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) {719; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire:720; -O0:    add w8, w9, w8721; -O0:    bl __atomic_compare_exchange722;723; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire:724; -O1:    add w8, w0, w20725; -O1:    bl __atomic_compare_exchange726    %r = atomicrmw add ptr %ptr, i32 %value acquire, align 1727    ret i32 %r728}729 730define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) {731; -O0-LABEL: atomicrmw_add_i32_unaligned_release:732; -O0:    add w8, w9, w8733; -O0:    bl __atomic_compare_exchange734;735; -O1-LABEL: atomicrmw_add_i32_unaligned_release:736; -O1:    add w8, w0, w20737; -O1:    bl __atomic_compare_exchange738    %r = atomicrmw add ptr %ptr, i32 %value release, align 1739    ret i32 %r740}741 742define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {743; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel:744; -O0:    add w8, w9, w8745; -O0:    bl __atomic_compare_exchange746;747; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel:748; -O1:    add w8, w0, w20749; -O1:    bl __atomic_compare_exchange750    %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 1751    ret i32 %r752}753 754define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {755; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst:756; -O0:    add w8, w9, w8757; -O0:    bl __atomic_compare_exchange758;759; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst:760; -O1:    add w8, w0, w20761; -O1:    bl __atomic_compare_exchange762    %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 1763    ret i32 %r764}765 766define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) {767; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic:768; -O0:    add x8, x9, x8769; -O0:    bl __atomic_compare_exchange770;771; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic:772; -O1:    add x8, x0, x20773; -O1:    bl __atomic_compare_exchange774    %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 1775    ret i64 %r776}777 778define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) {779; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire:780; -O0:    add x8, x9, x8781; -O0:    bl __atomic_compare_exchange782;783; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire:784; -O1:    add x8, x0, x20785; -O1:    bl __atomic_compare_exchange786    %r = atomicrmw add ptr %ptr, i64 %value acquire, align 1787    ret i64 %r788}789 790define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) {791; -O0-LABEL: atomicrmw_add_i64_unaligned_release:792; -O0:    add x8, x9, x8793; -O0:    bl __atomic_compare_exchange794;795; -O1-LABEL: atomicrmw_add_i64_unaligned_release:796; -O1:    add x8, x0, x20797; -O1:    bl __atomic_compare_exchange798    %r = atomicrmw add ptr %ptr, i64 %value release, align 1799    ret i64 %r800}801 802define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {803; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel:804; -O0:    add x8, x9, x8805; -O0:    bl __atomic_compare_exchange806;807; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel:808; -O1:    add x8, x0, x20809; -O1:    bl __atomic_compare_exchange810    %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 1811    ret i64 %r812}813 814define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {815; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst:816; -O0:    add x8, x9, x8817; -O0:    bl __atomic_compare_exchange818;819; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst:820; -O1:    add x8, x0, x20821; -O1:    bl __atomic_compare_exchange822    %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 1823    ret i64 %r824}825 826define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) {827; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic:828; -O0:    adds x9, x8, x9829; -O0:    subs w11, w11, #1830; -O0:    bl __atomic_compare_exchange831;832; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic:833; -O1:    ldp x0, x1, [x0]834; -O1:    adds x8, x0, x21835; -O1:    bl __atomic_compare_exchange836    %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 1837    ret i128 %r838}839 840define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) {841; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire:842; -O0:    adds x9, x8, x9843; -O0:    subs w11, w11, #1844; -O0:    bl __atomic_compare_exchange845;846; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire:847; -O1:    ldp x0, x1, [x0]848; -O1:    adds x8, x0, x21849; -O1:    bl __atomic_compare_exchange850    %r = atomicrmw add ptr %ptr, i128 %value acquire, align 1851    ret i128 %r852}853 854define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) {855; -O0-LABEL: atomicrmw_add_i128_unaligned_release:856; -O0:    adds x9, x8, x9857; -O0:    subs w11, w11, #1858; -O0:    bl __atomic_compare_exchange859;860; -O1-LABEL: atomicrmw_add_i128_unaligned_release:861; -O1:    ldp x0, x1, [x0]862; -O1:    adds x8, x0, x21863; -O1:    bl __atomic_compare_exchange864    %r = atomicrmw add ptr %ptr, i128 %value release, align 1865    ret i128 %r866}867 868define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {869; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel:870; -O0:    adds x9, x8, x9871; -O0:    subs w11, w11, #1872; -O0:    bl __atomic_compare_exchange873;874; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel:875; -O1:    ldp x0, x1, [x0]876; -O1:    adds x8, x0, x21877; -O1:    bl __atomic_compare_exchange878    %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 1879    ret i128 %r880}881 882define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {883; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst:884; -O0:    adds x9, x8, x9885; -O0:    subs w11, w11, #1886; -O0:    bl __atomic_compare_exchange887;888; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst:889; -O1:    ldp x0, x1, [x0]890; -O1:    adds x8, x0, x21891; -O1:    bl __atomic_compare_exchange892    %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 1893    ret i128 %r894}895 896define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) {897; CHECK-LABEL: atomicrmw_sub_i8_aligned_monotonic:898; CHECK:    ldaddb w8, w0, [x0]899    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1900    ret i8 %r901}902 903define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) {904; CHECK-LABEL: atomicrmw_sub_i8_aligned_acquire:905; CHECK:    ldaddab w8, w0, [x0]906    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1907    ret i8 %r908}909 910define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) {911; CHECK-LABEL: atomicrmw_sub_i8_aligned_release:912; CHECK:    ldaddlb w8, w0, [x0]913    %r = atomicrmw sub ptr %ptr, i8 %value release, align 1914    ret i8 %r915}916 917define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) {918; CHECK-LABEL: atomicrmw_sub_i8_aligned_acq_rel:919; CHECK:    ldaddalb w8, w0, [x0]920    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1921    ret i8 %r922}923 924define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) {925; CHECK-LABEL: atomicrmw_sub_i8_aligned_seq_cst:926; CHECK:    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; CHECK-LABEL: atomicrmw_sub_i16_aligned_monotonic:933; CHECK:    ldaddh w8, w0, [x0]934    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 2935    ret i16 %r936}937 938define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) {939; CHECK-LABEL: atomicrmw_sub_i16_aligned_acquire:940; CHECK:    ldaddah w8, w0, [x0]941    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 2942    ret i16 %r943}944 945define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) {946; CHECK-LABEL: atomicrmw_sub_i16_aligned_release:947; CHECK:    ldaddlh w8, w0, [x0]948    %r = atomicrmw sub ptr %ptr, i16 %value release, align 2949    ret i16 %r950}951 952define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) {953; CHECK-LABEL: atomicrmw_sub_i16_aligned_acq_rel:954; CHECK:    ldaddalh w8, w0, [x0]955    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 2956    ret i16 %r957}958 959define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) {960; CHECK-LABEL: atomicrmw_sub_i16_aligned_seq_cst:961; CHECK:    ldaddalh w8, w0, [x0]962    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 2963    ret i16 %r964}965 966define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) {967; CHECK-LABEL: atomicrmw_sub_i32_aligned_monotonic:968; CHECK:    ldadd w8, w0, [x0]969    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 4970    ret i32 %r971}972 973define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) {974; CHECK-LABEL: atomicrmw_sub_i32_aligned_acquire:975; CHECK:    ldadda w8, w0, [x0]976    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 4977    ret i32 %r978}979 980define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) {981; CHECK-LABEL: atomicrmw_sub_i32_aligned_release:982; CHECK:    ldaddl w8, w0, [x0]983    %r = atomicrmw sub ptr %ptr, i32 %value release, align 4984    ret i32 %r985}986 987define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) {988; CHECK-LABEL: atomicrmw_sub_i32_aligned_acq_rel:989; CHECK:    ldaddal w8, w0, [x0]990    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 4991    ret i32 %r992}993 994define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) {995; CHECK-LABEL: atomicrmw_sub_i32_aligned_seq_cst:996; CHECK:    ldaddal w8, w0, [x0]997    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 4998    ret i32 %r999}1000 1001define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) {1002; CHECK-LABEL: atomicrmw_sub_i64_aligned_monotonic:1003; CHECK:    ldadd x8, x0, [x0]1004    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 81005    ret i64 %r1006}1007 1008define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) {1009; CHECK-LABEL: atomicrmw_sub_i64_aligned_acquire:1010; CHECK:    ldadda x8, x0, [x0]1011    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 81012    ret i64 %r1013}1014 1015define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) {1016; CHECK-LABEL: atomicrmw_sub_i64_aligned_release:1017; CHECK:    ldaddl x8, x0, [x0]1018    %r = atomicrmw sub ptr %ptr, i64 %value release, align 81019    ret i64 %r1020}1021 1022define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1023; CHECK-LABEL: atomicrmw_sub_i64_aligned_acq_rel:1024; CHECK:    ldaddal x8, x0, [x0]1025    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 81026    ret i64 %r1027}1028 1029define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1030; CHECK-LABEL: atomicrmw_sub_i64_aligned_seq_cst:1031; CHECK:    ldaddal x8, x0, [x0]1032    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 81033    ret i64 %r1034}1035 1036define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) {1037; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic:1038; -O0:    subs x2, x9, x111039; -O0:    casp x0, x1, x2, x3, [x8]1040; -O0:    eor x8, x10, x81041; -O0:    eor x11, x9, x111042; -O0:    orr x8, x8, x111043; -O0:    subs x8, x8, #01044;1045; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic:1046; -O1:    ldp x4, x5, [x0]1047; -O1:    subs x8, x4, x21048; -O1:    casp x4, x5, x8, x9, [x0]1049; -O1:    cmp x5, x71050; -O1:    ccmp x4, x6, #0, eq1051    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 161052    ret i128 %r1053}1054 1055define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) {1056; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire:1057; -O0:    subs x2, x9, x111058; -O0:    caspa x0, x1, x2, x3, [x8]1059; -O0:    eor x8, x10, x81060; -O0:    eor x11, x9, x111061; -O0:    orr x8, x8, x111062; -O0:    subs x8, x8, #01063;1064; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire:1065; -O1:    ldp x4, x5, [x0]1066; -O1:    subs x8, x4, x21067; -O1:    caspa x4, x5, x8, x9, [x0]1068; -O1:    cmp x5, x71069; -O1:    ccmp x4, x6, #0, eq1070    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 161071    ret i128 %r1072}1073 1074define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) {1075; -O0-LABEL: atomicrmw_sub_i128_aligned_release:1076; -O0:    subs x2, x9, x111077; -O0:    caspl x0, x1, x2, x3, [x8]1078; -O0:    eor x8, x10, x81079; -O0:    eor x11, x9, x111080; -O0:    orr x8, x8, x111081; -O0:    subs x8, x8, #01082;1083; -O1-LABEL: atomicrmw_sub_i128_aligned_release:1084; -O1:    ldp x4, x5, [x0]1085; -O1:    subs x8, x4, x21086; -O1:    caspl x4, x5, x8, x9, [x0]1087; -O1:    cmp x5, x71088; -O1:    ccmp x4, x6, #0, eq1089    %r = atomicrmw sub ptr %ptr, i128 %value release, align 161090    ret i128 %r1091}1092 1093define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1094; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1095; -O0:    subs x2, x9, x111096; -O0:    caspal x0, x1, x2, x3, [x8]1097; -O0:    eor x8, x10, x81098; -O0:    eor x11, x9, x111099; -O0:    orr x8, x8, x111100; -O0:    subs x8, x8, #01101;1102; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel:1103; -O1:    ldp x4, x5, [x0]1104; -O1:    subs x8, x4, x21105; -O1:    caspal x4, x5, x8, x9, [x0]1106; -O1:    cmp x5, x71107; -O1:    ccmp x4, x6, #0, eq1108    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 161109    ret i128 %r1110}1111 1112define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1113; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1114; -O0:    subs x2, x9, x111115; -O0:    caspal x0, x1, x2, x3, [x8]1116; -O0:    eor x8, x10, x81117; -O0:    eor x11, x9, x111118; -O0:    orr x8, x8, x111119; -O0:    subs x8, x8, #01120;1121; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst:1122; -O1:    ldp x4, x5, [x0]1123; -O1:    subs x8, x4, x21124; -O1:    caspal x4, x5, x8, x9, [x0]1125; -O1:    cmp x5, x71126; -O1:    ccmp x4, x6, #0, eq1127    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 161128    ret i128 %r1129}1130 1131define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1132; CHECK-LABEL: atomicrmw_sub_i8_unaligned_monotonic:1133; CHECK:    ldaddb w8, w0, [x0]1134    %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 11135    ret i8 %r1136}1137 1138define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) {1139; CHECK-LABEL: atomicrmw_sub_i8_unaligned_acquire:1140; CHECK:    ldaddab w8, w0, [x0]1141    %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 11142    ret i8 %r1143}1144 1145define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) {1146; CHECK-LABEL: atomicrmw_sub_i8_unaligned_release:1147; CHECK:    ldaddlb w8, w0, [x0]1148    %r = atomicrmw sub ptr %ptr, i8 %value release, align 11149    ret i8 %r1150}1151 1152define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1153; CHECK-LABEL: atomicrmw_sub_i8_unaligned_acq_rel:1154; CHECK:    ldaddalb w8, w0, [x0]1155    %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 11156    ret i8 %r1157}1158 1159define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1160; CHECK-LABEL: atomicrmw_sub_i8_unaligned_seq_cst:1161; CHECK:    ldaddalb w8, w0, [x0]1162    %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 11163    ret i8 %r1164}1165 1166define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1167; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1168; -O0:    subs w8, w9, w81169; -O0:    bl __atomic_compare_exchange1170;1171; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic:1172; -O1:    sub w8, w0, w201173; -O1:    bl __atomic_compare_exchange1174    %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 11175    ret i16 %r1176}1177 1178define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) {1179; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire:1180; -O0:    subs w8, w9, w81181; -O0:    bl __atomic_compare_exchange1182;1183; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire:1184; -O1:    sub w8, w0, w201185; -O1:    bl __atomic_compare_exchange1186    %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 11187    ret i16 %r1188}1189 1190define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) {1191; -O0-LABEL: atomicrmw_sub_i16_unaligned_release:1192; -O0:    subs w8, w9, w81193; -O0:    bl __atomic_compare_exchange1194;1195; -O1-LABEL: atomicrmw_sub_i16_unaligned_release:1196; -O1:    sub w8, w0, w201197; -O1:    bl __atomic_compare_exchange1198    %r = atomicrmw sub ptr %ptr, i16 %value release, align 11199    ret i16 %r1200}1201 1202define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1203; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1204; -O0:    subs w8, w9, w81205; -O0:    bl __atomic_compare_exchange1206;1207; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel:1208; -O1:    sub w8, w0, w201209; -O1:    bl __atomic_compare_exchange1210    %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 11211    ret i16 %r1212}1213 1214define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1215; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1216; -O0:    subs w8, w9, w81217; -O0:    bl __atomic_compare_exchange1218;1219; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst:1220; -O1:    sub w8, w0, w201221; -O1:    bl __atomic_compare_exchange1222    %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 11223    ret i16 %r1224}1225 1226define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1227; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1228; -O0:    subs w8, w9, w81229; -O0:    bl __atomic_compare_exchange1230;1231; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic:1232; -O1:    sub w8, w0, w201233; -O1:    bl __atomic_compare_exchange1234    %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 11235    ret i32 %r1236}1237 1238define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) {1239; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire:1240; -O0:    subs w8, w9, w81241; -O0:    bl __atomic_compare_exchange1242;1243; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire:1244; -O1:    sub w8, w0, w201245; -O1:    bl __atomic_compare_exchange1246    %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 11247    ret i32 %r1248}1249 1250define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) {1251; -O0-LABEL: atomicrmw_sub_i32_unaligned_release:1252; -O0:    subs w8, w9, w81253; -O0:    bl __atomic_compare_exchange1254;1255; -O1-LABEL: atomicrmw_sub_i32_unaligned_release:1256; -O1:    sub w8, w0, w201257; -O1:    bl __atomic_compare_exchange1258    %r = atomicrmw sub ptr %ptr, i32 %value release, align 11259    ret i32 %r1260}1261 1262define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1263; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1264; -O0:    subs w8, w9, w81265; -O0:    bl __atomic_compare_exchange1266;1267; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel:1268; -O1:    sub w8, w0, w201269; -O1:    bl __atomic_compare_exchange1270    %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 11271    ret i32 %r1272}1273 1274define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1275; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1276; -O0:    subs w8, w9, w81277; -O0:    bl __atomic_compare_exchange1278;1279; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst:1280; -O1:    sub w8, w0, w201281; -O1:    bl __atomic_compare_exchange1282    %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 11283    ret i32 %r1284}1285 1286define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1287; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1288; -O0:    subs x8, x9, x81289; -O0:    bl __atomic_compare_exchange1290;1291; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic:1292; -O1:    sub x8, x0, x201293; -O1:    bl __atomic_compare_exchange1294    %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 11295    ret i64 %r1296}1297 1298define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) {1299; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire:1300; -O0:    subs x8, x9, x81301; -O0:    bl __atomic_compare_exchange1302;1303; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire:1304; -O1:    sub x8, x0, x201305; -O1:    bl __atomic_compare_exchange1306    %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 11307    ret i64 %r1308}1309 1310define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) {1311; -O0-LABEL: atomicrmw_sub_i64_unaligned_release:1312; -O0:    subs x8, x9, x81313; -O0:    bl __atomic_compare_exchange1314;1315; -O1-LABEL: atomicrmw_sub_i64_unaligned_release:1316; -O1:    sub x8, x0, x201317; -O1:    bl __atomic_compare_exchange1318    %r = atomicrmw sub ptr %ptr, i64 %value release, align 11319    ret i64 %r1320}1321 1322define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1323; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1324; -O0:    subs x8, x9, x81325; -O0:    bl __atomic_compare_exchange1326;1327; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel:1328; -O1:    sub x8, x0, x201329; -O1:    bl __atomic_compare_exchange1330    %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 11331    ret i64 %r1332}1333 1334define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1335; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1336; -O0:    subs x8, x9, x81337; -O0:    bl __atomic_compare_exchange1338;1339; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst:1340; -O1:    sub x8, x0, x201341; -O1:    bl __atomic_compare_exchange1342    %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 11343    ret i64 %r1344}1345 1346define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1347; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1348; -O0:    subs x9, x8, x91349; -O0:    bl __atomic_compare_exchange1350;1351; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic:1352; -O1:    ldp x0, x1, [x0]1353; -O1:    subs x8, x0, x211354; -O1:    bl __atomic_compare_exchange1355    %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 11356    ret i128 %r1357}1358 1359define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) {1360; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire:1361; -O0:    subs x9, x8, x91362; -O0:    bl __atomic_compare_exchange1363;1364; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire:1365; -O1:    ldp x0, x1, [x0]1366; -O1:    subs x8, x0, x211367; -O1:    bl __atomic_compare_exchange1368    %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 11369    ret i128 %r1370}1371 1372define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) {1373; -O0-LABEL: atomicrmw_sub_i128_unaligned_release:1374; -O0:    subs x9, x8, x91375; -O0:    bl __atomic_compare_exchange1376;1377; -O1-LABEL: atomicrmw_sub_i128_unaligned_release:1378; -O1:    ldp x0, x1, [x0]1379; -O1:    subs x8, x0, x211380; -O1:    bl __atomic_compare_exchange1381    %r = atomicrmw sub ptr %ptr, i128 %value release, align 11382    ret i128 %r1383}1384 1385define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1386; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1387; -O0:    subs x9, x8, x91388; -O0:    bl __atomic_compare_exchange1389;1390; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel:1391; -O1:    ldp x0, x1, [x0]1392; -O1:    subs x8, x0, x211393; -O1:    bl __atomic_compare_exchange1394    %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 11395    ret i128 %r1396}1397 1398define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1399; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1400; -O0:    subs x9, x8, x91401; -O0:    bl __atomic_compare_exchange1402;1403; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst:1404; -O1:    ldp x0, x1, [x0]1405; -O1:    subs x8, x0, x211406; -O1:    bl __atomic_compare_exchange1407    %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 11408    ret i128 %r1409}1410 1411define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) {1412; CHECK-LABEL: atomicrmw_and_i8_aligned_monotonic:1413; CHECK:    mvn w8, w11414; CHECK:    ldclrb w8, w0, [x0]1415    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11416    ret i8 %r1417}1418 1419define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) {1420; CHECK-LABEL: atomicrmw_and_i8_aligned_acquire:1421; CHECK:    mvn w8, w11422; CHECK:    ldclrab w8, w0, [x0]1423    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11424    ret i8 %r1425}1426 1427define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) {1428; CHECK-LABEL: atomicrmw_and_i8_aligned_release:1429; CHECK:    mvn w8, w11430; CHECK:    ldclrlb w8, w0, [x0]1431    %r = atomicrmw and ptr %ptr, i8 %value release, align 11432    ret i8 %r1433}1434 1435define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) {1436; CHECK-LABEL: atomicrmw_and_i8_aligned_acq_rel:1437; CHECK:    mvn w8, w11438; CHECK:    ldclralb w8, w0, [x0]1439    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11440    ret i8 %r1441}1442 1443define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) {1444; CHECK-LABEL: atomicrmw_and_i8_aligned_seq_cst:1445; CHECK:    mvn w8, w11446; CHECK:    ldclralb w8, w0, [x0]1447    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11448    ret i8 %r1449}1450 1451define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) {1452; CHECK-LABEL: atomicrmw_and_i16_aligned_monotonic:1453; CHECK:    mvn w8, w11454; CHECK:    ldclrh w8, w0, [x0]1455    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 21456    ret i16 %r1457}1458 1459define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) {1460; CHECK-LABEL: atomicrmw_and_i16_aligned_acquire:1461; CHECK:    mvn w8, w11462; CHECK:    ldclrah w8, w0, [x0]1463    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 21464    ret i16 %r1465}1466 1467define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) {1468; CHECK-LABEL: atomicrmw_and_i16_aligned_release:1469; CHECK:    mvn w8, w11470; CHECK:    ldclrlh w8, w0, [x0]1471    %r = atomicrmw and ptr %ptr, i16 %value release, align 21472    ret i16 %r1473}1474 1475define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) {1476; CHECK-LABEL: atomicrmw_and_i16_aligned_acq_rel:1477; CHECK:    mvn w8, w11478; CHECK:    ldclralh w8, w0, [x0]1479    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 21480    ret i16 %r1481}1482 1483define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) {1484; CHECK-LABEL: atomicrmw_and_i16_aligned_seq_cst:1485; CHECK:    mvn w8, w11486; CHECK:    ldclralh w8, w0, [x0]1487    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 21488    ret i16 %r1489}1490 1491define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) {1492; CHECK-LABEL: atomicrmw_and_i32_aligned_monotonic:1493; CHECK:    mvn w8, w11494; CHECK:    ldclr w8, w0, [x0]1495    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 41496    ret i32 %r1497}1498 1499define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) {1500; CHECK-LABEL: atomicrmw_and_i32_aligned_acquire:1501; CHECK:    mvn w8, w11502; CHECK:    ldclra w8, w0, [x0]1503    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 41504    ret i32 %r1505}1506 1507define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) {1508; CHECK-LABEL: atomicrmw_and_i32_aligned_release:1509; CHECK:    mvn w8, w11510; CHECK:    ldclrl w8, w0, [x0]1511    %r = atomicrmw and ptr %ptr, i32 %value release, align 41512    ret i32 %r1513}1514 1515define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) {1516; CHECK-LABEL: atomicrmw_and_i32_aligned_acq_rel:1517; CHECK:    mvn w8, w11518; CHECK:    ldclral w8, w0, [x0]1519    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 41520    ret i32 %r1521}1522 1523define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) {1524; CHECK-LABEL: atomicrmw_and_i32_aligned_seq_cst:1525; CHECK:    mvn w8, w11526; CHECK:    ldclral w8, w0, [x0]1527    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 41528    ret i32 %r1529}1530 1531define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) {1532; CHECK-LABEL: atomicrmw_and_i64_aligned_monotonic:1533; CHECK:    mvn x8, x11534; CHECK:    ldclr x8, x0, [x0]1535    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 81536    ret i64 %r1537}1538 1539define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) {1540; CHECK-LABEL: atomicrmw_and_i64_aligned_acquire:1541; CHECK:    mvn x8, x11542; CHECK:    ldclra x8, x0, [x0]1543    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 81544    ret i64 %r1545}1546 1547define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) {1548; CHECK-LABEL: atomicrmw_and_i64_aligned_release:1549; CHECK:    mvn x8, x11550; CHECK:    ldclrl x8, x0, [x0]1551    %r = atomicrmw and ptr %ptr, i64 %value release, align 81552    ret i64 %r1553}1554 1555define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) {1556; CHECK-LABEL: atomicrmw_and_i64_aligned_acq_rel:1557; CHECK:    mvn x8, x11558; CHECK:    ldclral x8, x0, [x0]1559    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 81560    ret i64 %r1561}1562 1563define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) {1564; CHECK-LABEL: atomicrmw_and_i64_aligned_seq_cst:1565; CHECK:    mvn x8, x11566; CHECK:    ldclral x8, x0, [x0]1567    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 81568    ret i64 %r1569}1570 1571define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) {1572; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic:1573; -O0:    mvn x1, x31574; -O0:    mvn x0, x21575; -O0:    ldclrp x0, x1, [x8]1576;1577; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic:1578; -O1:    mvn x1, x31579; -O1:    mvn x8, x21580; -O1:    ldclrp x8, x1, [x0]1581    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 161582    ret i128 %r1583}1584 1585define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) {1586; -O0-LABEL: atomicrmw_and_i128_aligned_acquire:1587; -O0:    mvn x1, x31588; -O0:    mvn x0, x21589; -O0:    ldclrpa x0, x1, [x8]1590;1591; -O1-LABEL: atomicrmw_and_i128_aligned_acquire:1592; -O1:    mvn x1, x31593; -O1:    mvn x8, x21594; -O1:    ldclrpa x8, x1, [x0]1595    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 161596    ret i128 %r1597}1598 1599define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) {1600; -O0-LABEL: atomicrmw_and_i128_aligned_release:1601; -O0:    mvn x1, x31602; -O0:    mvn x0, x21603; -O0:    ldclrpl x0, x1, [x8]1604;1605; -O1-LABEL: atomicrmw_and_i128_aligned_release:1606; -O1:    mvn x1, x31607; -O1:    mvn x8, x21608; -O1:    ldclrpl x8, x1, [x0]1609    %r = atomicrmw and ptr %ptr, i128 %value release, align 161610    ret i128 %r1611}1612 1613define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) {1614; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel:1615; -O0:    mvn x1, x31616; -O0:    mvn x0, x21617; -O0:    ldclrpal x0, x1, [x8]1618;1619; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel:1620; -O1:    mvn x1, x31621; -O1:    mvn x8, x21622; -O1:    ldclrpal x8, x1, [x0]1623    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 161624    ret i128 %r1625}1626 1627define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) {1628; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst:1629; -O0:    mvn x1, x31630; -O0:    mvn x0, x21631; -O0:    ldclrpal x0, x1, [x8]1632;1633; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst:1634; -O1:    mvn x1, x31635; -O1:    mvn x8, x21636; -O1:    ldclrpal x8, x1, [x0]1637    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 161638    ret i128 %r1639}1640 1641define dso_local i8 @atomicrmw_and_i8_unaligned_monotonic(ptr %ptr, i8 %value) {1642; CHECK-LABEL: atomicrmw_and_i8_unaligned_monotonic:1643; CHECK:    mvn w8, w11644; CHECK:    ldclrb w8, w0, [x0]1645    %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 11646    ret i8 %r1647}1648 1649define dso_local i8 @atomicrmw_and_i8_unaligned_acquire(ptr %ptr, i8 %value) {1650; CHECK-LABEL: atomicrmw_and_i8_unaligned_acquire:1651; CHECK:    mvn w8, w11652; CHECK:    ldclrab w8, w0, [x0]1653    %r = atomicrmw and ptr %ptr, i8 %value acquire, align 11654    ret i8 %r1655}1656 1657define dso_local i8 @atomicrmw_and_i8_unaligned_release(ptr %ptr, i8 %value) {1658; CHECK-LABEL: atomicrmw_and_i8_unaligned_release:1659; CHECK:    mvn w8, w11660; CHECK:    ldclrlb w8, w0, [x0]1661    %r = atomicrmw and ptr %ptr, i8 %value release, align 11662    ret i8 %r1663}1664 1665define dso_local i8 @atomicrmw_and_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {1666; CHECK-LABEL: atomicrmw_and_i8_unaligned_acq_rel:1667; CHECK:    mvn w8, w11668; CHECK:    ldclralb w8, w0, [x0]1669    %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 11670    ret i8 %r1671}1672 1673define dso_local i8 @atomicrmw_and_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {1674; CHECK-LABEL: atomicrmw_and_i8_unaligned_seq_cst:1675; CHECK:    mvn w8, w11676; CHECK:    ldclralb w8, w0, [x0]1677    %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 11678    ret i8 %r1679}1680 1681define dso_local i16 @atomicrmw_and_i16_unaligned_monotonic(ptr %ptr, i16 %value) {1682; -O0-LABEL: atomicrmw_and_i16_unaligned_monotonic:1683; -O0:    and w8, w9, w81684; -O0:    bl __atomic_compare_exchange1685;1686; -O1-LABEL: atomicrmw_and_i16_unaligned_monotonic:1687; -O1:    and w8, w0, w201688; -O1:    bl __atomic_compare_exchange1689    %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 11690    ret i16 %r1691}1692 1693define dso_local i16 @atomicrmw_and_i16_unaligned_acquire(ptr %ptr, i16 %value) {1694; -O0-LABEL: atomicrmw_and_i16_unaligned_acquire:1695; -O0:    and w8, w9, w81696; -O0:    bl __atomic_compare_exchange1697;1698; -O1-LABEL: atomicrmw_and_i16_unaligned_acquire:1699; -O1:    and w8, w0, w201700; -O1:    bl __atomic_compare_exchange1701    %r = atomicrmw and ptr %ptr, i16 %value acquire, align 11702    ret i16 %r1703}1704 1705define dso_local i16 @atomicrmw_and_i16_unaligned_release(ptr %ptr, i16 %value) {1706; -O0-LABEL: atomicrmw_and_i16_unaligned_release:1707; -O0:    and w8, w9, w81708; -O0:    bl __atomic_compare_exchange1709;1710; -O1-LABEL: atomicrmw_and_i16_unaligned_release:1711; -O1:    and w8, w0, w201712; -O1:    bl __atomic_compare_exchange1713    %r = atomicrmw and ptr %ptr, i16 %value release, align 11714    ret i16 %r1715}1716 1717define dso_local i16 @atomicrmw_and_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {1718; -O0-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1719; -O0:    and w8, w9, w81720; -O0:    bl __atomic_compare_exchange1721;1722; -O1-LABEL: atomicrmw_and_i16_unaligned_acq_rel:1723; -O1:    and w8, w0, w201724; -O1:    bl __atomic_compare_exchange1725    %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 11726    ret i16 %r1727}1728 1729define dso_local i16 @atomicrmw_and_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {1730; -O0-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1731; -O0:    and w8, w9, w81732; -O0:    bl __atomic_compare_exchange1733;1734; -O1-LABEL: atomicrmw_and_i16_unaligned_seq_cst:1735; -O1:    and w8, w0, w201736; -O1:    bl __atomic_compare_exchange1737    %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 11738    ret i16 %r1739}1740 1741define dso_local i32 @atomicrmw_and_i32_unaligned_monotonic(ptr %ptr, i32 %value) {1742; -O0-LABEL: atomicrmw_and_i32_unaligned_monotonic:1743; -O0:    and w8, w9, w81744; -O0:    bl __atomic_compare_exchange1745;1746; -O1-LABEL: atomicrmw_and_i32_unaligned_monotonic:1747; -O1:    and w8, w0, w201748; -O1:    bl __atomic_compare_exchange1749    %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 11750    ret i32 %r1751}1752 1753define dso_local i32 @atomicrmw_and_i32_unaligned_acquire(ptr %ptr, i32 %value) {1754; -O0-LABEL: atomicrmw_and_i32_unaligned_acquire:1755; -O0:    and w8, w9, w81756; -O0:    bl __atomic_compare_exchange1757;1758; -O1-LABEL: atomicrmw_and_i32_unaligned_acquire:1759; -O1:    and w8, w0, w201760; -O1:    bl __atomic_compare_exchange1761    %r = atomicrmw and ptr %ptr, i32 %value acquire, align 11762    ret i32 %r1763}1764 1765define dso_local i32 @atomicrmw_and_i32_unaligned_release(ptr %ptr, i32 %value) {1766; -O0-LABEL: atomicrmw_and_i32_unaligned_release:1767; -O0:    and w8, w9, w81768; -O0:    bl __atomic_compare_exchange1769;1770; -O1-LABEL: atomicrmw_and_i32_unaligned_release:1771; -O1:    and w8, w0, w201772; -O1:    bl __atomic_compare_exchange1773    %r = atomicrmw and ptr %ptr, i32 %value release, align 11774    ret i32 %r1775}1776 1777define dso_local i32 @atomicrmw_and_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {1778; -O0-LABEL: atomicrmw_and_i32_unaligned_acq_rel:1779; -O0:    and w8, w9, w81780; -O0:    bl __atomic_compare_exchange1781;1782; -O1-LABEL: atomicrmw_and_i32_unaligned_acq_rel:1783; -O1:    and w8, w0, w201784; -O1:    bl __atomic_compare_exchange1785    %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 11786    ret i32 %r1787}1788 1789define dso_local i32 @atomicrmw_and_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {1790; -O0-LABEL: atomicrmw_and_i32_unaligned_seq_cst:1791; -O0:    and w8, w9, w81792; -O0:    bl __atomic_compare_exchange1793;1794; -O1-LABEL: atomicrmw_and_i32_unaligned_seq_cst:1795; -O1:    and w8, w0, w201796; -O1:    bl __atomic_compare_exchange1797    %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 11798    ret i32 %r1799}1800 1801define dso_local i64 @atomicrmw_and_i64_unaligned_monotonic(ptr %ptr, i64 %value) {1802; -O0-LABEL: atomicrmw_and_i64_unaligned_monotonic:1803; -O0:    and x8, x9, x81804; -O0:    bl __atomic_compare_exchange1805;1806; -O1-LABEL: atomicrmw_and_i64_unaligned_monotonic:1807; -O1:    and x8, x0, x201808; -O1:    bl __atomic_compare_exchange1809    %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 11810    ret i64 %r1811}1812 1813define dso_local i64 @atomicrmw_and_i64_unaligned_acquire(ptr %ptr, i64 %value) {1814; -O0-LABEL: atomicrmw_and_i64_unaligned_acquire:1815; -O0:    and x8, x9, x81816; -O0:    bl __atomic_compare_exchange1817;1818; -O1-LABEL: atomicrmw_and_i64_unaligned_acquire:1819; -O1:    and x8, x0, x201820; -O1:    bl __atomic_compare_exchange1821    %r = atomicrmw and ptr %ptr, i64 %value acquire, align 11822    ret i64 %r1823}1824 1825define dso_local i64 @atomicrmw_and_i64_unaligned_release(ptr %ptr, i64 %value) {1826; -O0-LABEL: atomicrmw_and_i64_unaligned_release:1827; -O0:    and x8, x9, x81828; -O0:    bl __atomic_compare_exchange1829;1830; -O1-LABEL: atomicrmw_and_i64_unaligned_release:1831; -O1:    and x8, x0, x201832; -O1:    bl __atomic_compare_exchange1833    %r = atomicrmw and ptr %ptr, i64 %value release, align 11834    ret i64 %r1835}1836 1837define dso_local i64 @atomicrmw_and_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {1838; -O0-LABEL: atomicrmw_and_i64_unaligned_acq_rel:1839; -O0:    and x8, x9, x81840; -O0:    bl __atomic_compare_exchange1841;1842; -O1-LABEL: atomicrmw_and_i64_unaligned_acq_rel:1843; -O1:    and x8, x0, x201844; -O1:    bl __atomic_compare_exchange1845    %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 11846    ret i64 %r1847}1848 1849define dso_local i64 @atomicrmw_and_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {1850; -O0-LABEL: atomicrmw_and_i64_unaligned_seq_cst:1851; -O0:    and x8, x9, x81852; -O0:    bl __atomic_compare_exchange1853;1854; -O1-LABEL: atomicrmw_and_i64_unaligned_seq_cst:1855; -O1:    and x8, x0, x201856; -O1:    bl __atomic_compare_exchange1857    %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 11858    ret i64 %r1859}1860 1861define dso_local i128 @atomicrmw_and_i128_unaligned_monotonic(ptr %ptr, i128 %value) {1862; -O0-LABEL: atomicrmw_and_i128_unaligned_monotonic:1863; -O0:    and x9, x8, x91864; -O0:    and x8, x8, x101865; -O0:    bl __atomic_compare_exchange1866;1867; -O1-LABEL: atomicrmw_and_i128_unaligned_monotonic:1868; -O1:    ldp x0, x1, [x0]1869; -O1:    and x8, x1, x191870; -O1:    and x9, x0, x211871; -O1:    bl __atomic_compare_exchange1872    %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 11873    ret i128 %r1874}1875 1876define dso_local i128 @atomicrmw_and_i128_unaligned_acquire(ptr %ptr, i128 %value) {1877; -O0-LABEL: atomicrmw_and_i128_unaligned_acquire:1878; -O0:    and x9, x8, x91879; -O0:    and x8, x8, x101880; -O0:    bl __atomic_compare_exchange1881;1882; -O1-LABEL: atomicrmw_and_i128_unaligned_acquire:1883; -O1:    ldp x0, x1, [x0]1884; -O1:    and x8, x1, x191885; -O1:    and x9, x0, x211886; -O1:    bl __atomic_compare_exchange1887    %r = atomicrmw and ptr %ptr, i128 %value acquire, align 11888    ret i128 %r1889}1890 1891define dso_local i128 @atomicrmw_and_i128_unaligned_release(ptr %ptr, i128 %value) {1892; -O0-LABEL: atomicrmw_and_i128_unaligned_release:1893; -O0:    and x9, x8, x91894; -O0:    and x8, x8, x101895; -O0:    bl __atomic_compare_exchange1896;1897; -O1-LABEL: atomicrmw_and_i128_unaligned_release:1898; -O1:    ldp x0, x1, [x0]1899; -O1:    and x8, x1, x191900; -O1:    and x9, x0, x211901; -O1:    bl __atomic_compare_exchange1902    %r = atomicrmw and ptr %ptr, i128 %value release, align 11903    ret i128 %r1904}1905 1906define dso_local i128 @atomicrmw_and_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {1907; -O0-LABEL: atomicrmw_and_i128_unaligned_acq_rel:1908; -O0:    and x9, x8, x91909; -O0:    and x8, x8, x101910; -O0:    bl __atomic_compare_exchange1911;1912; -O1-LABEL: atomicrmw_and_i128_unaligned_acq_rel:1913; -O1:    ldp x0, x1, [x0]1914; -O1:    and x8, x1, x191915; -O1:    and x9, x0, x211916; -O1:    bl __atomic_compare_exchange1917    %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 11918    ret i128 %r1919}1920 1921define dso_local i128 @atomicrmw_and_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {1922; -O0-LABEL: atomicrmw_and_i128_unaligned_seq_cst:1923; -O0:    and x9, x8, x91924; -O0:    and x8, x8, x101925; -O0:    bl __atomic_compare_exchange1926;1927; -O1-LABEL: atomicrmw_and_i128_unaligned_seq_cst:1928; -O1:    ldp x0, x1, [x0]1929; -O1:    and x8, x1, x191930; -O1:    and x9, x0, x211931; -O1:    bl __atomic_compare_exchange1932    %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 11933    ret i128 %r1934}1935 1936define dso_local i8 @atomicrmw_nand_i8_aligned_monotonic(ptr %ptr, i8 %value) {1937; -O0-LABEL: atomicrmw_nand_i8_aligned_monotonic:1938; -O0:    and w8, w10, w81939; -O0:    mvn w8, w81940; -O0:    casb w9, w8, [x11]1941; -O0:    and w8, w9, #0xff1942; -O0:    subs w8, w8, w10, uxtb1943;1944; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic:1945; -O1:    and w10, w8, w11946; -O1:    mvn w10, w101947; -O1:    casb w9, w10, [x0]1948; -O1:    cmp w9, w8, uxtb1949    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 11950    ret i8 %r1951}1952 1953define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) {1954; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire:1955; -O0:    and w8, w10, w81956; -O0:    mvn w8, w81957; -O0:    casab w9, w8, [x11]1958; -O0:    and w8, w9, #0xff1959; -O0:    subs w8, w8, w10, uxtb1960;1961; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire:1962; -O1:    and w10, w8, w11963; -O1:    mvn w10, w101964; -O1:    casab w9, w10, [x0]1965; -O1:    cmp w9, w8, uxtb1966    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 11967    ret i8 %r1968}1969 1970define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) {1971; -O0-LABEL: atomicrmw_nand_i8_aligned_release:1972; -O0:    and w8, w10, w81973; -O0:    mvn w8, w81974; -O0:    caslb w9, w8, [x11]1975; -O0:    and w8, w9, #0xff1976; -O0:    subs w8, w8, w10, uxtb1977;1978; -O1-LABEL: atomicrmw_nand_i8_aligned_release:1979; -O1:    and w10, w8, w11980; -O1:    mvn w10, w101981; -O1:    caslb w9, w10, [x0]1982; -O1:    cmp w9, w8, uxtb1983    %r = atomicrmw nand ptr %ptr, i8 %value release, align 11984    ret i8 %r1985}1986 1987define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) {1988; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel:1989; -O0:    and w8, w10, w81990; -O0:    mvn w8, w81991; -O0:    casalb w9, w8, [x11]1992; -O0:    and w8, w9, #0xff1993; -O0:    subs w8, w8, w10, uxtb1994;1995; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel:1996; -O1:    and w10, w8, w11997; -O1:    mvn w10, w101998; -O1:    casalb w9, w10, [x0]1999; -O1:    cmp w9, w8, uxtb2000    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12001    ret i8 %r2002}2003 2004define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2005; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2006; -O0:    and w8, w10, w82007; -O0:    mvn w8, w82008; -O0:    casalb w9, w8, [x11]2009; -O0:    and w8, w9, #0xff2010; -O0:    subs w8, w8, w10, uxtb2011;2012; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst:2013; -O1:    and w10, w8, w12014; -O1:    mvn w10, w102015; -O1:    casalb w9, w10, [x0]2016; -O1:    cmp w9, w8, uxtb2017    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12018    ret i8 %r2019}2020 2021define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) {2022; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic:2023; -O0:    and w9, w8, w92024; -O0:    mvn w10, w92025; -O0:    cash w9, w10, [x11]2026; -O0:    subs w8, w8, w9, uxth2027;2028; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic:2029; -O1:    and w10, w8, w12030; -O1:    mvn w10, w102031; -O1:    cash w9, w10, [x0]2032; -O1:    cmp w9, w8, uxth2033    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 22034    ret i16 %r2035}2036 2037define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) {2038; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire:2039; -O0:    and w9, w8, w92040; -O0:    mvn w10, w92041; -O0:    casah w9, w10, [x11]2042; -O0:    subs w8, w8, w9, uxth2043;2044; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire:2045; -O1:    and w10, w8, w12046; -O1:    mvn w10, w102047; -O1:    casah w9, w10, [x0]2048; -O1:    cmp w9, w8, uxth2049    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 22050    ret i16 %r2051}2052 2053define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) {2054; -O0-LABEL: atomicrmw_nand_i16_aligned_release:2055; -O0:    and w9, w8, w92056; -O0:    mvn w10, w92057; -O0:    caslh w9, w10, [x11]2058; -O0:    subs w8, w8, w9, uxth2059;2060; -O1-LABEL: atomicrmw_nand_i16_aligned_release:2061; -O1:    and w10, w8, w12062; -O1:    mvn w10, w102063; -O1:    caslh w9, w10, [x0]2064; -O1:    cmp w9, w8, uxth2065    %r = atomicrmw nand ptr %ptr, i16 %value release, align 22066    ret i16 %r2067}2068 2069define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2070; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2071; -O0:    and w9, w8, w92072; -O0:    mvn w10, w92073; -O0:    casalh w9, w10, [x11]2074; -O0:    subs w8, w8, w9, uxth2075;2076; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel:2077; -O1:    and w10, w8, w12078; -O1:    mvn w10, w102079; -O1:    casalh w9, w10, [x0]2080; -O1:    cmp w9, w8, uxth2081    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 22082    ret i16 %r2083}2084 2085define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2086; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2087; -O0:    and w9, w8, w92088; -O0:    mvn w10, w92089; -O0:    casalh w9, w10, [x11]2090; -O0:    subs w8, w8, w9, uxth2091;2092; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst:2093; -O1:    and w10, w8, w12094; -O1:    mvn w10, w102095; -O1:    casalh w9, w10, [x0]2096; -O1:    cmp w9, w8, uxth2097    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 22098    ret i16 %r2099}2100 2101define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) {2102; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic:2103; -O0:    and w9, w8, w92104; -O0:    mvn w10, w92105; -O0:    cas w9, w10, [x11]2106; -O0:    subs w8, w9, w82107;2108; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic:2109; -O1:    and w10, w8, w12110; -O1:    mvn w10, w102111; -O1:    cas w9, w10, [x0]2112; -O1:    cmp w9, w82113    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 42114    ret i32 %r2115}2116 2117define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) {2118; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire:2119; -O0:    and w9, w8, w92120; -O0:    mvn w10, w92121; -O0:    casa w9, w10, [x11]2122; -O0:    subs w8, w9, w82123;2124; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire:2125; -O1:    and w10, w8, w12126; -O1:    mvn w10, w102127; -O1:    casa w9, w10, [x0]2128; -O1:    cmp w9, w82129    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 42130    ret i32 %r2131}2132 2133define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) {2134; -O0-LABEL: atomicrmw_nand_i32_aligned_release:2135; -O0:    and w9, w8, w92136; -O0:    mvn w10, w92137; -O0:    casl w9, w10, [x11]2138; -O0:    subs w8, w9, w82139;2140; -O1-LABEL: atomicrmw_nand_i32_aligned_release:2141; -O1:    and w10, w8, w12142; -O1:    mvn w10, w102143; -O1:    casl w9, w10, [x0]2144; -O1:    cmp w9, w82145    %r = atomicrmw nand ptr %ptr, i32 %value release, align 42146    ret i32 %r2147}2148 2149define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2150; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2151; -O0:    and w9, w8, w92152; -O0:    mvn w10, w92153; -O0:    casal w9, w10, [x11]2154; -O0:    subs w8, w9, w82155;2156; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel:2157; -O1:    and w10, w8, w12158; -O1:    mvn w10, w102159; -O1:    casal w9, w10, [x0]2160; -O1:    cmp w9, w82161    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 42162    ret i32 %r2163}2164 2165define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2166; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2167; -O0:    and w9, w8, w92168; -O0:    mvn w10, w92169; -O0:    casal w9, w10, [x11]2170; -O0:    subs w8, w9, w82171;2172; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst:2173; -O1:    and w10, w8, w12174; -O1:    mvn w10, w102175; -O1:    casal w9, w10, [x0]2176; -O1:    cmp w9, w82177    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 42178    ret i32 %r2179}2180 2181define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) {2182; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic:2183; -O0:    and x9, x8, x92184; -O0:    mvn x10, x92185; -O0:    cas x9, x10, [x11]2186; -O0:    subs x8, x9, x82187;2188; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic:2189; -O1:    and x10, x8, x12190; -O1:    mvn x10, x102191; -O1:    cas x9, x10, [x0]2192; -O1:    cmp x9, x82193    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 82194    ret i64 %r2195}2196 2197define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) {2198; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire:2199; -O0:    and x9, x8, x92200; -O0:    mvn x10, x92201; -O0:    casa x9, x10, [x11]2202; -O0:    subs x8, x9, x82203;2204; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire:2205; -O1:    and x10, x8, x12206; -O1:    mvn x10, x102207; -O1:    casa x9, x10, [x0]2208; -O1:    cmp x9, x82209    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 82210    ret i64 %r2211}2212 2213define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) {2214; -O0-LABEL: atomicrmw_nand_i64_aligned_release:2215; -O0:    and x9, x8, x92216; -O0:    mvn x10, x92217; -O0:    casl x9, x10, [x11]2218; -O0:    subs x8, x9, x82219;2220; -O1-LABEL: atomicrmw_nand_i64_aligned_release:2221; -O1:    and x10, x8, x12222; -O1:    mvn x10, x102223; -O1:    casl x9, x10, [x0]2224; -O1:    cmp x9, x82225    %r = atomicrmw nand ptr %ptr, i64 %value release, align 82226    ret i64 %r2227}2228 2229define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2230; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2231; -O0:    and x9, x8, x92232; -O0:    mvn x10, x92233; -O0:    casal x9, x10, [x11]2234; -O0:    subs x8, x9, x82235;2236; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel:2237; -O1:    and x10, x8, x12238; -O1:    mvn x10, x102239; -O1:    casal x9, x10, [x0]2240; -O1:    cmp x9, x82241    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 82242    ret i64 %r2243}2244 2245define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2246; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2247; -O0:    and x9, x8, x92248; -O0:    mvn x10, x92249; -O0:    casal x9, x10, [x11]2250; -O0:    subs x8, x9, x82251;2252; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst:2253; -O1:    and x10, x8, x12254; -O1:    mvn x10, x102255; -O1:    casal x9, x10, [x0]2256; -O1:    cmp x9, x82257    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 82258    ret i64 %r2259}2260 2261define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) {2262; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic:2263; -O0:    and x10, x9, x102264; -O0:    and x9, x9, x112265; -O0:    mvn x2, x102266; -O0:    mvn x9, x92267; -O0:    casp x0, x1, x2, x3, [x8]2268; -O0:    eor x8, x10, x82269; -O0:    eor x11, x9, x112270; -O0:    orr x8, x8, x112271; -O0:    subs x8, x8, #02272;2273; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic:2274; -O1:    ldp x4, x5, [x0]2275; -O1:    and x8, x4, x22276; -O1:    and x9, x7, x32277; -O1:    mvn x10, x82278; -O1:    mvn x11, x92279; -O1:    casp x4, x5, x10, x11, [x0]2280; -O1:    cmp x5, x72281; -O1:    ccmp x4, x6, #0, eq2282    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 162283    ret i128 %r2284}2285 2286define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) {2287; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire:2288; -O0:    and x10, x9, x102289; -O0:    and x9, x9, x112290; -O0:    mvn x2, x102291; -O0:    mvn x9, x92292; -O0:    caspa x0, x1, x2, x3, [x8]2293; -O0:    eor x8, x10, x82294; -O0:    eor x11, x9, x112295; -O0:    orr x8, x8, x112296; -O0:    subs x8, x8, #02297;2298; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire:2299; -O1:    ldp x4, x5, [x0]2300; -O1:    and x8, x4, x22301; -O1:    and x9, x7, x32302; -O1:    mvn x10, x82303; -O1:    mvn x11, x92304; -O1:    caspa x4, x5, x10, x11, [x0]2305; -O1:    cmp x5, x72306; -O1:    ccmp x4, x6, #0, eq2307    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 162308    ret i128 %r2309}2310 2311define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) {2312; -O0-LABEL: atomicrmw_nand_i128_aligned_release:2313; -O0:    and x10, x9, x102314; -O0:    and x9, x9, x112315; -O0:    mvn x2, x102316; -O0:    mvn x9, x92317; -O0:    caspl x0, x1, x2, x3, [x8]2318; -O0:    eor x8, x10, x82319; -O0:    eor x11, x9, x112320; -O0:    orr x8, x8, x112321; -O0:    subs x8, x8, #02322;2323; -O1-LABEL: atomicrmw_nand_i128_aligned_release:2324; -O1:    ldp x4, x5, [x0]2325; -O1:    and x8, x4, x22326; -O1:    and x9, x7, x32327; -O1:    mvn x10, x82328; -O1:    mvn x11, x92329; -O1:    caspl x4, x5, x10, x11, [x0]2330; -O1:    cmp x5, x72331; -O1:    ccmp x4, x6, #0, eq2332    %r = atomicrmw nand ptr %ptr, i128 %value release, align 162333    ret i128 %r2334}2335 2336define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2337; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2338; -O0:    and x10, x9, x102339; -O0:    and x9, x9, x112340; -O0:    mvn x2, x102341; -O0:    mvn x9, x92342; -O0:    caspal x0, x1, x2, x3, [x8]2343; -O0:    eor x8, x10, x82344; -O0:    eor x11, x9, x112345; -O0:    orr x8, x8, x112346; -O0:    subs x8, x8, #02347;2348; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel:2349; -O1:    ldp x4, x5, [x0]2350; -O1:    and x8, x4, x22351; -O1:    and x9, x7, x32352; -O1:    mvn x10, x82353; -O1:    mvn x11, x92354; -O1:    caspal x4, x5, x10, x11, [x0]2355; -O1:    cmp x5, x72356; -O1:    ccmp x4, x6, #0, eq2357    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 162358    ret i128 %r2359}2360 2361define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) {2362; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2363; -O0:    and x10, x9, x102364; -O0:    and x9, x9, x112365; -O0:    mvn x2, x102366; -O0:    mvn x9, x92367; -O0:    caspal x0, x1, x2, x3, [x8]2368; -O0:    eor x8, x10, x82369; -O0:    eor x11, x9, x112370; -O0:    orr x8, x8, x112371; -O0:    subs x8, x8, #02372;2373; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst:2374; -O1:    ldp x4, x5, [x0]2375; -O1:    and x8, x4, x22376; -O1:    and x9, x7, x32377; -O1:    mvn x10, x82378; -O1:    mvn x11, x92379; -O1:    caspal x4, x5, x10, x11, [x0]2380; -O1:    cmp x5, x72381; -O1:    ccmp x4, x6, #0, eq2382    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 162383    ret i128 %r2384}2385 2386define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) {2387; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2388; -O0:    and w8, w10, w82389; -O0:    mvn w8, w82390; -O0:    casb w9, w8, [x11]2391; -O0:    and w8, w9, #0xff2392; -O0:    subs w8, w8, w10, uxtb2393;2394; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic:2395; -O1:    and w10, w8, w12396; -O1:    mvn w10, w102397; -O1:    casb w9, w10, [x0]2398; -O1:    cmp w9, w8, uxtb2399    %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 12400    ret i8 %r2401}2402 2403define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) {2404; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire:2405; -O0:    and w8, w10, w82406; -O0:    mvn w8, w82407; -O0:    casab w9, w8, [x11]2408; -O0:    and w8, w9, #0xff2409; -O0:    subs w8, w8, w10, uxtb2410;2411; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire:2412; -O1:    and w10, w8, w12413; -O1:    mvn w10, w102414; -O1:    casab w9, w10, [x0]2415; -O1:    cmp w9, w8, uxtb2416    %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 12417    ret i8 %r2418}2419 2420define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) {2421; -O0-LABEL: atomicrmw_nand_i8_unaligned_release:2422; -O0:    and w8, w10, w82423; -O0:    mvn w8, w82424; -O0:    caslb w9, w8, [x11]2425; -O0:    and w8, w9, #0xff2426; -O0:    subs w8, w8, w10, uxtb2427;2428; -O1-LABEL: atomicrmw_nand_i8_unaligned_release:2429; -O1:    and w10, w8, w12430; -O1:    mvn w10, w102431; -O1:    caslb w9, w10, [x0]2432; -O1:    cmp w9, w8, uxtb2433    %r = atomicrmw nand ptr %ptr, i8 %value release, align 12434    ret i8 %r2435}2436 2437define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {2438; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2439; -O0:    and w8, w10, w82440; -O0:    mvn w8, w82441; -O0:    casalb w9, w8, [x11]2442; -O0:    and w8, w9, #0xff2443; -O0:    subs w8, w8, w10, uxtb2444;2445; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel:2446; -O1:    and w10, w8, w12447; -O1:    mvn w10, w102448; -O1:    casalb w9, w10, [x0]2449; -O1:    cmp w9, w8, uxtb2450    %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 12451    ret i8 %r2452}2453 2454define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {2455; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2456; -O0:    and w8, w10, w82457; -O0:    mvn w8, w82458; -O0:    casalb w9, w8, [x11]2459; -O0:    and w8, w9, #0xff2460; -O0:    subs w8, w8, w10, uxtb2461;2462; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst:2463; -O1:    and w10, w8, w12464; -O1:    mvn w10, w102465; -O1:    casalb w9, w10, [x0]2466; -O1:    cmp w9, w8, uxtb2467    %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 12468    ret i8 %r2469}2470 2471define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) {2472; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2473; -O0:    and w8, w9, w82474; -O0:    mvn w8, w82475; -O0:    bl __atomic_compare_exchange2476;2477; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic:2478; -O1:    and w8, w0, w202479; -O1:    mvn w8, w82480; -O1:    bl __atomic_compare_exchange2481    %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 12482    ret i16 %r2483}2484 2485define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) {2486; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire:2487; -O0:    and w8, w9, w82488; -O0:    mvn w8, w82489; -O0:    bl __atomic_compare_exchange2490;2491; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire:2492; -O1:    and w8, w0, w202493; -O1:    mvn w8, w82494; -O1:    bl __atomic_compare_exchange2495    %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 12496    ret i16 %r2497}2498 2499define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) {2500; -O0-LABEL: atomicrmw_nand_i16_unaligned_release:2501; -O0:    and w8, w9, w82502; -O0:    mvn w8, w82503; -O0:    bl __atomic_compare_exchange2504;2505; -O1-LABEL: atomicrmw_nand_i16_unaligned_release:2506; -O1:    and w8, w0, w202507; -O1:    mvn w8, w82508; -O1:    bl __atomic_compare_exchange2509    %r = atomicrmw nand ptr %ptr, i16 %value release, align 12510    ret i16 %r2511}2512 2513define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {2514; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2515; -O0:    and w8, w9, w82516; -O0:    mvn w8, w82517; -O0:    bl __atomic_compare_exchange2518;2519; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel:2520; -O1:    and w8, w0, w202521; -O1:    mvn w8, w82522; -O1:    bl __atomic_compare_exchange2523    %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 12524    ret i16 %r2525}2526 2527define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {2528; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2529; -O0:    and w8, w9, w82530; -O0:    mvn w8, w82531; -O0:    bl __atomic_compare_exchange2532;2533; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst:2534; -O1:    and w8, w0, w202535; -O1:    mvn w8, w82536; -O1:    bl __atomic_compare_exchange2537    %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 12538    ret i16 %r2539}2540 2541define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) {2542; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2543; -O0:    and w8, w9, w82544; -O0:    mvn w8, w82545; -O0:    bl __atomic_compare_exchange2546;2547; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic:2548; -O1:    and w8, w0, w202549; -O1:    mvn w8, w82550; -O1:    bl __atomic_compare_exchange2551    %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 12552    ret i32 %r2553}2554 2555define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) {2556; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire:2557; -O0:    and w8, w9, w82558; -O0:    mvn w8, w82559; -O0:    bl __atomic_compare_exchange2560;2561; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire:2562; -O1:    and w8, w0, w202563; -O1:    mvn w8, w82564; -O1:    bl __atomic_compare_exchange2565    %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 12566    ret i32 %r2567}2568 2569define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) {2570; -O0-LABEL: atomicrmw_nand_i32_unaligned_release:2571; -O0:    and w8, w9, w82572; -O0:    mvn w8, w82573; -O0:    bl __atomic_compare_exchange2574;2575; -O1-LABEL: atomicrmw_nand_i32_unaligned_release:2576; -O1:    and w8, w0, w202577; -O1:    mvn w8, w82578; -O1:    bl __atomic_compare_exchange2579    %r = atomicrmw nand ptr %ptr, i32 %value release, align 12580    ret i32 %r2581}2582 2583define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {2584; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2585; -O0:    and w8, w9, w82586; -O0:    mvn w8, w82587; -O0:    bl __atomic_compare_exchange2588;2589; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel:2590; -O1:    and w8, w0, w202591; -O1:    mvn w8, w82592; -O1:    bl __atomic_compare_exchange2593    %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 12594    ret i32 %r2595}2596 2597define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {2598; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2599; -O0:    and w8, w9, w82600; -O0:    mvn w8, w82601; -O0:    bl __atomic_compare_exchange2602;2603; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst:2604; -O1:    and w8, w0, w202605; -O1:    mvn w8, w82606; -O1:    bl __atomic_compare_exchange2607    %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 12608    ret i32 %r2609}2610 2611define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) {2612; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2613; -O0:    and x8, x9, x82614; -O0:    mvn x8, x82615; -O0:    bl __atomic_compare_exchange2616;2617; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic:2618; -O1:    and x8, x0, x202619; -O1:    mvn x8, x82620; -O1:    bl __atomic_compare_exchange2621    %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 12622    ret i64 %r2623}2624 2625define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) {2626; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire:2627; -O0:    and x8, x9, x82628; -O0:    mvn x8, x82629; -O0:    bl __atomic_compare_exchange2630;2631; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire:2632; -O1:    and x8, x0, x202633; -O1:    mvn x8, x82634; -O1:    bl __atomic_compare_exchange2635    %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 12636    ret i64 %r2637}2638 2639define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) {2640; -O0-LABEL: atomicrmw_nand_i64_unaligned_release:2641; -O0:    and x8, x9, x82642; -O0:    mvn x8, x82643; -O0:    bl __atomic_compare_exchange2644;2645; -O1-LABEL: atomicrmw_nand_i64_unaligned_release:2646; -O1:    and x8, x0, x202647; -O1:    mvn x8, x82648; -O1:    bl __atomic_compare_exchange2649    %r = atomicrmw nand ptr %ptr, i64 %value release, align 12650    ret i64 %r2651}2652 2653define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {2654; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2655; -O0:    and x8, x9, x82656; -O0:    mvn x8, x82657; -O0:    bl __atomic_compare_exchange2658;2659; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel:2660; -O1:    and x8, x0, x202661; -O1:    mvn x8, x82662; -O1:    bl __atomic_compare_exchange2663    %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 12664    ret i64 %r2665}2666 2667define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {2668; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2669; -O0:    and x8, x9, x82670; -O0:    mvn x8, x82671; -O0:    bl __atomic_compare_exchange2672;2673; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst:2674; -O1:    and x8, x0, x202675; -O1:    mvn x8, x82676; -O1:    bl __atomic_compare_exchange2677    %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 12678    ret i64 %r2679}2680 2681define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) {2682; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2683; -O0:    and x9, x8, x92684; -O0:    and x8, x8, x102685; -O0:    mvn x9, x92686; -O0:    mvn x8, x82687; -O0:    bl __atomic_compare_exchange2688;2689; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic:2690; -O1:    ldp x0, x1, [x0]2691; -O1:    and x8, x1, x192692; -O1:    and x9, x0, x212693; -O1:    mvn x8, x82694; -O1:    mvn x9, x92695; -O1:    bl __atomic_compare_exchange2696    %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 12697    ret i128 %r2698}2699 2700define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) {2701; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire:2702; -O0:    and x9, x8, x92703; -O0:    and x8, x8, x102704; -O0:    mvn x9, x92705; -O0:    mvn x8, x82706; -O0:    bl __atomic_compare_exchange2707;2708; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire:2709; -O1:    ldp x0, x1, [x0]2710; -O1:    and x8, x1, x192711; -O1:    and x9, x0, x212712; -O1:    mvn x8, x82713; -O1:    mvn x9, x92714; -O1:    bl __atomic_compare_exchange2715    %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 12716    ret i128 %r2717}2718 2719define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) {2720; -O0-LABEL: atomicrmw_nand_i128_unaligned_release:2721; -O0:    and x9, x8, x92722; -O0:    and x8, x8, x102723; -O0:    mvn x9, x92724; -O0:    mvn x8, x82725; -O0:    bl __atomic_compare_exchange2726;2727; -O1-LABEL: atomicrmw_nand_i128_unaligned_release:2728; -O1:    ldp x0, x1, [x0]2729; -O1:    and x8, x1, x192730; -O1:    and x9, x0, x212731; -O1:    mvn x8, x82732; -O1:    mvn x9, x92733; -O1:    bl __atomic_compare_exchange2734    %r = atomicrmw nand ptr %ptr, i128 %value release, align 12735    ret i128 %r2736}2737 2738define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {2739; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2740; -O0:    and x9, x8, x92741; -O0:    and x8, x8, x102742; -O0:    mvn x9, x92743; -O0:    mvn x8, x82744; -O0:    bl __atomic_compare_exchange2745;2746; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel:2747; -O1:    ldp x0, x1, [x0]2748; -O1:    and x8, x1, x192749; -O1:    and x9, x0, x212750; -O1:    mvn x8, x82751; -O1:    mvn x9, x92752; -O1:    bl __atomic_compare_exchange2753    %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 12754    ret i128 %r2755}2756 2757define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {2758; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2759; -O0:    and x9, x8, x92760; -O0:    and x8, x8, x102761; -O0:    mvn x9, x92762; -O0:    mvn x8, x82763; -O0:    bl __atomic_compare_exchange2764;2765; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst:2766; -O1:    ldp x0, x1, [x0]2767; -O1:    and x8, x1, x192768; -O1:    and x9, x0, x212769; -O1:    mvn x8, x82770; -O1:    mvn x9, x92771; -O1:    bl __atomic_compare_exchange2772    %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 12773    ret i128 %r2774}2775 2776define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) {2777; CHECK-LABEL: atomicrmw_or_i8_aligned_monotonic:2778; CHECK:    ldsetb w1, w0, [x0]2779    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 12780    ret i8 %r2781}2782 2783define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) {2784; CHECK-LABEL: atomicrmw_or_i8_aligned_acquire:2785; CHECK:    ldsetab w1, w0, [x0]2786    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 12787    ret i8 %r2788}2789 2790define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) {2791; CHECK-LABEL: atomicrmw_or_i8_aligned_release:2792; CHECK:    ldsetlb w1, w0, [x0]2793    %r = atomicrmw or ptr %ptr, i8 %value release, align 12794    ret i8 %r2795}2796 2797define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) {2798; CHECK-LABEL: atomicrmw_or_i8_aligned_acq_rel:2799; CHECK:    ldsetalb w1, w0, [x0]2800    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 12801    ret i8 %r2802}2803 2804define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) {2805; CHECK-LABEL: atomicrmw_or_i8_aligned_seq_cst:2806; CHECK:    ldsetalb w1, w0, [x0]2807    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 12808    ret i8 %r2809}2810 2811define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) {2812; CHECK-LABEL: atomicrmw_or_i16_aligned_monotonic:2813; CHECK:    ldseth w1, w0, [x0]2814    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 22815    ret i16 %r2816}2817 2818define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) {2819; CHECK-LABEL: atomicrmw_or_i16_aligned_acquire:2820; CHECK:    ldsetah w1, w0, [x0]2821    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 22822    ret i16 %r2823}2824 2825define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) {2826; CHECK-LABEL: atomicrmw_or_i16_aligned_release:2827; CHECK:    ldsetlh w1, w0, [x0]2828    %r = atomicrmw or ptr %ptr, i16 %value release, align 22829    ret i16 %r2830}2831 2832define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) {2833; CHECK-LABEL: atomicrmw_or_i16_aligned_acq_rel:2834; CHECK:    ldsetalh w1, w0, [x0]2835    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 22836    ret i16 %r2837}2838 2839define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) {2840; CHECK-LABEL: atomicrmw_or_i16_aligned_seq_cst:2841; CHECK:    ldsetalh w1, w0, [x0]2842    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 22843    ret i16 %r2844}2845 2846define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) {2847; CHECK-LABEL: atomicrmw_or_i32_aligned_monotonic:2848; CHECK:    ldset w1, w0, [x0]2849    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 42850    ret i32 %r2851}2852 2853define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) {2854; CHECK-LABEL: atomicrmw_or_i32_aligned_acquire:2855; CHECK:    ldseta w1, w0, [x0]2856    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 42857    ret i32 %r2858}2859 2860define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) {2861; CHECK-LABEL: atomicrmw_or_i32_aligned_release:2862; CHECK:    ldsetl w1, w0, [x0]2863    %r = atomicrmw or ptr %ptr, i32 %value release, align 42864    ret i32 %r2865}2866 2867define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) {2868; CHECK-LABEL: atomicrmw_or_i32_aligned_acq_rel:2869; CHECK:    ldsetal w1, w0, [x0]2870    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 42871    ret i32 %r2872}2873 2874define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) {2875; CHECK-LABEL: atomicrmw_or_i32_aligned_seq_cst:2876; CHECK:    ldsetal w1, w0, [x0]2877    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 42878    ret i32 %r2879}2880 2881define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) {2882; CHECK-LABEL: atomicrmw_or_i64_aligned_monotonic:2883; CHECK:    ldset x1, x0, [x0]2884    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 82885    ret i64 %r2886}2887 2888define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) {2889; CHECK-LABEL: atomicrmw_or_i64_aligned_acquire:2890; CHECK:    ldseta x1, x0, [x0]2891    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 82892    ret i64 %r2893}2894 2895define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) {2896; CHECK-LABEL: atomicrmw_or_i64_aligned_release:2897; CHECK:    ldsetl x1, x0, [x0]2898    %r = atomicrmw or ptr %ptr, i64 %value release, align 82899    ret i64 %r2900}2901 2902define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) {2903; CHECK-LABEL: atomicrmw_or_i64_aligned_acq_rel:2904; CHECK:    ldsetal x1, x0, [x0]2905    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 82906    ret i64 %r2907}2908 2909define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) {2910; CHECK-LABEL: atomicrmw_or_i64_aligned_seq_cst:2911; CHECK:    ldsetal x1, x0, [x0]2912    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 82913    ret i64 %r2914}2915 2916define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) {2917; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic:2918; -O0:    ldsetp x0, x1, [x8]2919;2920; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic:2921; -O1:    ldsetp x2, x1, [x0]2922    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 162923    ret i128 %r2924}2925 2926define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) {2927; -O0-LABEL: atomicrmw_or_i128_aligned_acquire:2928; -O0:    ldsetpa x0, x1, [x8]2929;2930; -O1-LABEL: atomicrmw_or_i128_aligned_acquire:2931; -O1:    ldsetpa x2, x1, [x0]2932    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 162933    ret i128 %r2934}2935 2936define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) {2937; -O0-LABEL: atomicrmw_or_i128_aligned_release:2938; -O0:    ldsetpl x0, x1, [x8]2939;2940; -O1-LABEL: atomicrmw_or_i128_aligned_release:2941; -O1:    ldsetpl x2, x1, [x0]2942    %r = atomicrmw or ptr %ptr, i128 %value release, align 162943    ret i128 %r2944}2945 2946define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) {2947; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel:2948; -O0:    ldsetpal x0, x1, [x8]2949;2950; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel:2951; -O1:    ldsetpal x2, x1, [x0]2952    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 162953    ret i128 %r2954}2955 2956define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) {2957; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst:2958; -O0:    ldsetpal x0, x1, [x8]2959;2960; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst:2961; -O1:    ldsetpal x2, x1, [x0]2962    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 162963    ret i128 %r2964}2965 2966define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) {2967; CHECK-LABEL: atomicrmw_or_i8_unaligned_monotonic:2968; CHECK:    ldsetb w1, w0, [x0]2969    %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 12970    ret i8 %r2971}2972 2973define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) {2974; CHECK-LABEL: atomicrmw_or_i8_unaligned_acquire:2975; CHECK:    ldsetab w1, w0, [x0]2976    %r = atomicrmw or ptr %ptr, i8 %value acquire, align 12977    ret i8 %r2978}2979 2980define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) {2981; CHECK-LABEL: atomicrmw_or_i8_unaligned_release:2982; CHECK:    ldsetlb w1, w0, [x0]2983    %r = atomicrmw or ptr %ptr, i8 %value release, align 12984    ret i8 %r2985}2986 2987define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {2988; CHECK-LABEL: atomicrmw_or_i8_unaligned_acq_rel:2989; CHECK:    ldsetalb w1, w0, [x0]2990    %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 12991    ret i8 %r2992}2993 2994define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {2995; CHECK-LABEL: atomicrmw_or_i8_unaligned_seq_cst:2996; CHECK:    ldsetalb w1, w0, [x0]2997    %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 12998    ret i8 %r2999}3000 3001define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3002; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic:3003; -O0:    orr w8, w9, w83004; -O0:    bl __atomic_compare_exchange3005;3006; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic:3007; -O1:    orr w8, w0, w203008; -O1:    bl __atomic_compare_exchange3009    %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 13010    ret i16 %r3011}3012 3013define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) {3014; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire:3015; -O0:    orr w8, w9, w83016; -O0:    bl __atomic_compare_exchange3017;3018; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire:3019; -O1:    orr w8, w0, w203020; -O1:    bl __atomic_compare_exchange3021    %r = atomicrmw or ptr %ptr, i16 %value acquire, align 13022    ret i16 %r3023}3024 3025define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) {3026; -O0-LABEL: atomicrmw_or_i16_unaligned_release:3027; -O0:    orr w8, w9, w83028; -O0:    bl __atomic_compare_exchange3029;3030; -O1-LABEL: atomicrmw_or_i16_unaligned_release:3031; -O1:    orr w8, w0, w203032; -O1:    bl __atomic_compare_exchange3033    %r = atomicrmw or ptr %ptr, i16 %value release, align 13034    ret i16 %r3035}3036 3037define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3038; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3039; -O0:    orr w8, w9, w83040; -O0:    bl __atomic_compare_exchange3041;3042; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel:3043; -O1:    orr w8, w0, w203044; -O1:    bl __atomic_compare_exchange3045    %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 13046    ret i16 %r3047}3048 3049define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3050; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3051; -O0:    orr w8, w9, w83052; -O0:    bl __atomic_compare_exchange3053;3054; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst:3055; -O1:    orr w8, w0, w203056; -O1:    bl __atomic_compare_exchange3057    %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 13058    ret i16 %r3059}3060 3061define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3062; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic:3063; -O0:    orr w8, w9, w83064; -O0:    bl __atomic_compare_exchange3065;3066; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic:3067; -O1:    orr w8, w0, w203068; -O1:    bl __atomic_compare_exchange3069    %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 13070    ret i32 %r3071}3072 3073define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) {3074; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire:3075; -O0:    orr w8, w9, w83076; -O0:    bl __atomic_compare_exchange3077;3078; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire:3079; -O1:    orr w8, w0, w203080; -O1:    bl __atomic_compare_exchange3081    %r = atomicrmw or ptr %ptr, i32 %value acquire, align 13082    ret i32 %r3083}3084 3085define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) {3086; -O0-LABEL: atomicrmw_or_i32_unaligned_release:3087; -O0:    orr w8, w9, w83088; -O0:    bl __atomic_compare_exchange3089;3090; -O1-LABEL: atomicrmw_or_i32_unaligned_release:3091; -O1:    orr w8, w0, w203092; -O1:    bl __atomic_compare_exchange3093    %r = atomicrmw or ptr %ptr, i32 %value release, align 13094    ret i32 %r3095}3096 3097define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3098; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3099; -O0:    orr w8, w9, w83100; -O0:    bl __atomic_compare_exchange3101;3102; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel:3103; -O1:    orr w8, w0, w203104; -O1:    bl __atomic_compare_exchange3105    %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 13106    ret i32 %r3107}3108 3109define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3110; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3111; -O0:    orr w8, w9, w83112; -O0:    bl __atomic_compare_exchange3113;3114; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst:3115; -O1:    orr w8, w0, w203116; -O1:    bl __atomic_compare_exchange3117    %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 13118    ret i32 %r3119}3120 3121define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3122; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic:3123; -O0:    orr x8, x9, x83124; -O0:    bl __atomic_compare_exchange3125;3126; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic:3127; -O1:    orr x8, x0, x203128; -O1:    bl __atomic_compare_exchange3129    %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 13130    ret i64 %r3131}3132 3133define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) {3134; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire:3135; -O0:    orr x8, x9, x83136; -O0:    bl __atomic_compare_exchange3137;3138; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire:3139; -O1:    orr x8, x0, x203140; -O1:    bl __atomic_compare_exchange3141    %r = atomicrmw or ptr %ptr, i64 %value acquire, align 13142    ret i64 %r3143}3144 3145define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) {3146; -O0-LABEL: atomicrmw_or_i64_unaligned_release:3147; -O0:    orr x8, x9, x83148; -O0:    bl __atomic_compare_exchange3149;3150; -O1-LABEL: atomicrmw_or_i64_unaligned_release:3151; -O1:    orr x8, x0, x203152; -O1:    bl __atomic_compare_exchange3153    %r = atomicrmw or ptr %ptr, i64 %value release, align 13154    ret i64 %r3155}3156 3157define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3158; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3159; -O0:    orr x8, x9, x83160; -O0:    bl __atomic_compare_exchange3161;3162; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel:3163; -O1:    orr x8, x0, x203164; -O1:    bl __atomic_compare_exchange3165    %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 13166    ret i64 %r3167}3168 3169define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3170; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3171; -O0:    orr x8, x9, x83172; -O0:    bl __atomic_compare_exchange3173;3174; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst:3175; -O1:    orr x8, x0, x203176; -O1:    bl __atomic_compare_exchange3177    %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 13178    ret i64 %r3179}3180 3181define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3182; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic:3183; -O0:    orr x9, x8, x93184; -O0:    orr x8, x8, x103185; -O0:    bl __atomic_compare_exchange3186;3187; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic:3188; -O1:    ldp x0, x1, [x0]3189; -O1:    orr x8, x1, x193190; -O1:    orr x9, x0, x213191; -O1:    bl __atomic_compare_exchange3192    %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 13193    ret i128 %r3194}3195 3196define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) {3197; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire:3198; -O0:    orr x9, x8, x93199; -O0:    orr x8, x8, x103200; -O0:    bl __atomic_compare_exchange3201;3202; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire:3203; -O1:    ldp x0, x1, [x0]3204; -O1:    orr x8, x1, x193205; -O1:    orr x9, x0, x213206; -O1:    bl __atomic_compare_exchange3207    %r = atomicrmw or ptr %ptr, i128 %value acquire, align 13208    ret i128 %r3209}3210 3211define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) {3212; -O0-LABEL: atomicrmw_or_i128_unaligned_release:3213; -O0:    orr x9, x8, x93214; -O0:    orr x8, x8, x103215; -O0:    bl __atomic_compare_exchange3216;3217; -O1-LABEL: atomicrmw_or_i128_unaligned_release:3218; -O1:    ldp x0, x1, [x0]3219; -O1:    orr x8, x1, x193220; -O1:    orr x9, x0, x213221; -O1:    bl __atomic_compare_exchange3222    %r = atomicrmw or ptr %ptr, i128 %value release, align 13223    ret i128 %r3224}3225 3226define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3227; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3228; -O0:    orr x9, x8, x93229; -O0:    orr x8, x8, x103230; -O0:    bl __atomic_compare_exchange3231;3232; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel:3233; -O1:    ldp x0, x1, [x0]3234; -O1:    orr x8, x1, x193235; -O1:    orr x9, x0, x213236; -O1:    bl __atomic_compare_exchange3237    %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 13238    ret i128 %r3239}3240 3241define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3242; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3243; -O0:    orr x9, x8, x93244; -O0:    orr x8, x8, x103245; -O0:    bl __atomic_compare_exchange3246;3247; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst:3248; -O1:    ldp x0, x1, [x0]3249; -O1:    orr x8, x1, x193250; -O1:    orr x9, x0, x213251; -O1:    bl __atomic_compare_exchange3252    %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 13253    ret i128 %r3254}3255 3256define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) {3257; CHECK-LABEL: atomicrmw_xor_i8_aligned_monotonic:3258; CHECK:    ldeorb w1, w0, [x0]3259    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13260    ret i8 %r3261}3262 3263define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) {3264; CHECK-LABEL: atomicrmw_xor_i8_aligned_acquire:3265; CHECK:    ldeorab w1, w0, [x0]3266    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13267    ret i8 %r3268}3269 3270define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) {3271; CHECK-LABEL: atomicrmw_xor_i8_aligned_release:3272; CHECK:    ldeorlb w1, w0, [x0]3273    %r = atomicrmw xor ptr %ptr, i8 %value release, align 13274    ret i8 %r3275}3276 3277define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3278; CHECK-LABEL: atomicrmw_xor_i8_aligned_acq_rel:3279; CHECK:    ldeoralb w1, w0, [x0]3280    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13281    ret i8 %r3282}3283 3284define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3285; CHECK-LABEL: atomicrmw_xor_i8_aligned_seq_cst:3286; CHECK:    ldeoralb w1, w0, [x0]3287    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13288    ret i8 %r3289}3290 3291define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) {3292; CHECK-LABEL: atomicrmw_xor_i16_aligned_monotonic:3293; CHECK:    ldeorh w1, w0, [x0]3294    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 23295    ret i16 %r3296}3297 3298define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) {3299; CHECK-LABEL: atomicrmw_xor_i16_aligned_acquire:3300; CHECK:    ldeorah w1, w0, [x0]3301    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 23302    ret i16 %r3303}3304 3305define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) {3306; CHECK-LABEL: atomicrmw_xor_i16_aligned_release:3307; CHECK:    ldeorlh w1, w0, [x0]3308    %r = atomicrmw xor ptr %ptr, i16 %value release, align 23309    ret i16 %r3310}3311 3312define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3313; CHECK-LABEL: atomicrmw_xor_i16_aligned_acq_rel:3314; CHECK:    ldeoralh w1, w0, [x0]3315    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 23316    ret i16 %r3317}3318 3319define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3320; CHECK-LABEL: atomicrmw_xor_i16_aligned_seq_cst:3321; CHECK:    ldeoralh w1, w0, [x0]3322    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 23323    ret i16 %r3324}3325 3326define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) {3327; CHECK-LABEL: atomicrmw_xor_i32_aligned_monotonic:3328; CHECK:    ldeor w1, w0, [x0]3329    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 43330    ret i32 %r3331}3332 3333define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) {3334; CHECK-LABEL: atomicrmw_xor_i32_aligned_acquire:3335; CHECK:    ldeora w1, w0, [x0]3336    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 43337    ret i32 %r3338}3339 3340define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) {3341; CHECK-LABEL: atomicrmw_xor_i32_aligned_release:3342; CHECK:    ldeorl w1, w0, [x0]3343    %r = atomicrmw xor ptr %ptr, i32 %value release, align 43344    ret i32 %r3345}3346 3347define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3348; CHECK-LABEL: atomicrmw_xor_i32_aligned_acq_rel:3349; CHECK:    ldeoral w1, w0, [x0]3350    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 43351    ret i32 %r3352}3353 3354define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3355; CHECK-LABEL: atomicrmw_xor_i32_aligned_seq_cst:3356; CHECK:    ldeoral w1, w0, [x0]3357    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 43358    ret i32 %r3359}3360 3361define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) {3362; CHECK-LABEL: atomicrmw_xor_i64_aligned_monotonic:3363; CHECK:    ldeor x1, x0, [x0]3364    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 83365    ret i64 %r3366}3367 3368define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) {3369; CHECK-LABEL: atomicrmw_xor_i64_aligned_acquire:3370; CHECK:    ldeora x1, x0, [x0]3371    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 83372    ret i64 %r3373}3374 3375define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) {3376; CHECK-LABEL: atomicrmw_xor_i64_aligned_release:3377; CHECK:    ldeorl x1, x0, [x0]3378    %r = atomicrmw xor ptr %ptr, i64 %value release, align 83379    ret i64 %r3380}3381 3382define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3383; CHECK-LABEL: atomicrmw_xor_i64_aligned_acq_rel:3384; CHECK:    ldeoral x1, x0, [x0]3385    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 83386    ret i64 %r3387}3388 3389define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3390; CHECK-LABEL: atomicrmw_xor_i64_aligned_seq_cst:3391; CHECK:    ldeoral x1, x0, [x0]3392    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 83393    ret i64 %r3394}3395 3396define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) {3397; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic:3398; -O0:    eor x2, x9, x113399; -O0:    eor x9, x9, x103400; -O0:    casp x0, x1, x2, x3, [x8]3401; -O0:    eor x8, x10, x83402; -O0:    eor x11, x9, x113403; -O0:    orr x8, x8, x113404; -O0:    subs x8, x8, #03405;3406; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic:3407; -O1:    ldp x4, x5, [x0]3408; -O1:    eor x8, x4, x23409; -O1:    eor x9, x7, x33410; -O1:    casp x4, x5, x8, x9, [x0]3411; -O1:    cmp x5, x73412; -O1:    ccmp x4, x6, #0, eq3413    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 163414    ret i128 %r3415}3416 3417define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) {3418; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire:3419; -O0:    eor x2, x9, x113420; -O0:    eor x9, x9, x103421; -O0:    caspa x0, x1, x2, x3, [x8]3422; -O0:    eor x8, x10, x83423; -O0:    eor x11, x9, x113424; -O0:    orr x8, x8, x113425; -O0:    subs x8, x8, #03426;3427; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire:3428; -O1:    ldp x4, x5, [x0]3429; -O1:    eor x8, x4, x23430; -O1:    eor x9, x7, x33431; -O1:    caspa x4, x5, x8, x9, [x0]3432; -O1:    cmp x5, x73433; -O1:    ccmp x4, x6, #0, eq3434    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 163435    ret i128 %r3436}3437 3438define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) {3439; -O0-LABEL: atomicrmw_xor_i128_aligned_release:3440; -O0:    eor x2, x9, x113441; -O0:    eor x9, x9, x103442; -O0:    caspl x0, x1, x2, x3, [x8]3443; -O0:    eor x8, x10, x83444; -O0:    eor x11, x9, x113445; -O0:    orr x8, x8, x113446; -O0:    subs x8, x8, #03447;3448; -O1-LABEL: atomicrmw_xor_i128_aligned_release:3449; -O1:    ldp x4, x5, [x0]3450; -O1:    eor x8, x4, x23451; -O1:    eor x9, x7, x33452; -O1:    caspl x4, x5, x8, x9, [x0]3453; -O1:    cmp x5, x73454; -O1:    ccmp x4, x6, #0, eq3455    %r = atomicrmw xor ptr %ptr, i128 %value release, align 163456    ret i128 %r3457}3458 3459define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) {3460; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3461; -O0:    eor x2, x9, x113462; -O0:    eor x9, x9, x103463; -O0:    caspal x0, x1, x2, x3, [x8]3464; -O0:    eor x8, x10, x83465; -O0:    eor x11, x9, x113466; -O0:    orr x8, x8, x113467; -O0:    subs x8, x8, #03468;3469; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel:3470; -O1:    ldp x4, x5, [x0]3471; -O1:    eor x8, x4, x23472; -O1:    eor x9, x7, x33473; -O1:    caspal x4, x5, x8, x9, [x0]3474; -O1:    cmp x5, x73475; -O1:    ccmp x4, x6, #0, eq3476    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 163477    ret i128 %r3478}3479 3480define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) {3481; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3482; -O0:    eor x2, x9, x113483; -O0:    eor x9, x9, x103484; -O0:    caspal x0, x1, x2, x3, [x8]3485; -O0:    eor x8, x10, x83486; -O0:    eor x11, x9, x113487; -O0:    orr x8, x8, x113488; -O0:    subs x8, x8, #03489;3490; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst:3491; -O1:    ldp x4, x5, [x0]3492; -O1:    eor x8, x4, x23493; -O1:    eor x9, x7, x33494; -O1:    caspal x4, x5, x8, x9, [x0]3495; -O1:    cmp x5, x73496; -O1:    ccmp x4, x6, #0, eq3497    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 163498    ret i128 %r3499}3500 3501define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) {3502; CHECK-LABEL: atomicrmw_xor_i8_unaligned_monotonic:3503; CHECK:    ldeorb w1, w0, [x0]3504    %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 13505    ret i8 %r3506}3507 3508define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) {3509; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acquire:3510; CHECK:    ldeorab w1, w0, [x0]3511    %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 13512    ret i8 %r3513}3514 3515define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) {3516; CHECK-LABEL: atomicrmw_xor_i8_unaligned_release:3517; CHECK:    ldeorlb w1, w0, [x0]3518    %r = atomicrmw xor ptr %ptr, i8 %value release, align 13519    ret i8 %r3520}3521 3522define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {3523; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acq_rel:3524; CHECK:    ldeoralb w1, w0, [x0]3525    %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 13526    ret i8 %r3527}3528 3529define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {3530; CHECK-LABEL: atomicrmw_xor_i8_unaligned_seq_cst:3531; CHECK:    ldeoralb w1, w0, [x0]3532    %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 13533    ret i8 %r3534}3535 3536define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) {3537; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3538; -O0:    eor w8, w9, w83539; -O0:    bl __atomic_compare_exchange3540;3541; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic:3542; -O1:    eor w8, w0, w203543; -O1:    bl __atomic_compare_exchange3544    %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 13545    ret i16 %r3546}3547 3548define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) {3549; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire:3550; -O0:    eor w8, w9, w83551; -O0:    bl __atomic_compare_exchange3552;3553; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire:3554; -O1:    eor w8, w0, w203555; -O1:    bl __atomic_compare_exchange3556    %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 13557    ret i16 %r3558}3559 3560define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) {3561; -O0-LABEL: atomicrmw_xor_i16_unaligned_release:3562; -O0:    eor w8, w9, w83563; -O0:    bl __atomic_compare_exchange3564;3565; -O1-LABEL: atomicrmw_xor_i16_unaligned_release:3566; -O1:    eor w8, w0, w203567; -O1:    bl __atomic_compare_exchange3568    %r = atomicrmw xor ptr %ptr, i16 %value release, align 13569    ret i16 %r3570}3571 3572define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {3573; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3574; -O0:    eor w8, w9, w83575; -O0:    bl __atomic_compare_exchange3576;3577; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel:3578; -O1:    eor w8, w0, w203579; -O1:    bl __atomic_compare_exchange3580    %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 13581    ret i16 %r3582}3583 3584define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {3585; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3586; -O0:    eor w8, w9, w83587; -O0:    bl __atomic_compare_exchange3588;3589; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst:3590; -O1:    eor w8, w0, w203591; -O1:    bl __atomic_compare_exchange3592    %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 13593    ret i16 %r3594}3595 3596define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) {3597; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3598; -O0:    eor w8, w9, w83599; -O0:    bl __atomic_compare_exchange3600;3601; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic:3602; -O1:    eor w8, w0, w203603; -O1:    bl __atomic_compare_exchange3604    %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 13605    ret i32 %r3606}3607 3608define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) {3609; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire:3610; -O0:    eor w8, w9, w83611; -O0:    bl __atomic_compare_exchange3612;3613; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire:3614; -O1:    eor w8, w0, w203615; -O1:    bl __atomic_compare_exchange3616    %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 13617    ret i32 %r3618}3619 3620define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) {3621; -O0-LABEL: atomicrmw_xor_i32_unaligned_release:3622; -O0:    eor w8, w9, w83623; -O0:    bl __atomic_compare_exchange3624;3625; -O1-LABEL: atomicrmw_xor_i32_unaligned_release:3626; -O1:    eor w8, w0, w203627; -O1:    bl __atomic_compare_exchange3628    %r = atomicrmw xor ptr %ptr, i32 %value release, align 13629    ret i32 %r3630}3631 3632define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {3633; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3634; -O0:    eor w8, w9, w83635; -O0:    bl __atomic_compare_exchange3636;3637; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel:3638; -O1:    eor w8, w0, w203639; -O1:    bl __atomic_compare_exchange3640    %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 13641    ret i32 %r3642}3643 3644define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {3645; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3646; -O0:    eor w8, w9, w83647; -O0:    bl __atomic_compare_exchange3648;3649; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst:3650; -O1:    eor w8, w0, w203651; -O1:    bl __atomic_compare_exchange3652    %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 13653    ret i32 %r3654}3655 3656define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) {3657; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3658; -O0:    eor x8, x9, x83659; -O0:    bl __atomic_compare_exchange3660;3661; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic:3662; -O1:    eor x8, x0, x203663; -O1:    bl __atomic_compare_exchange3664    %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 13665    ret i64 %r3666}3667 3668define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) {3669; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire:3670; -O0:    eor x8, x9, x83671; -O0:    bl __atomic_compare_exchange3672;3673; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire:3674; -O1:    eor x8, x0, x203675; -O1:    bl __atomic_compare_exchange3676    %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 13677    ret i64 %r3678}3679 3680define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) {3681; -O0-LABEL: atomicrmw_xor_i64_unaligned_release:3682; -O0:    eor x8, x9, x83683; -O0:    bl __atomic_compare_exchange3684;3685; -O1-LABEL: atomicrmw_xor_i64_unaligned_release:3686; -O1:    eor x8, x0, x203687; -O1:    bl __atomic_compare_exchange3688    %r = atomicrmw xor ptr %ptr, i64 %value release, align 13689    ret i64 %r3690}3691 3692define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {3693; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3694; -O0:    eor x8, x9, x83695; -O0:    bl __atomic_compare_exchange3696;3697; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel:3698; -O1:    eor x8, x0, x203699; -O1:    bl __atomic_compare_exchange3700    %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 13701    ret i64 %r3702}3703 3704define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {3705; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3706; -O0:    eor x8, x9, x83707; -O0:    bl __atomic_compare_exchange3708;3709; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst:3710; -O1:    eor x8, x0, x203711; -O1:    bl __atomic_compare_exchange3712    %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 13713    ret i64 %r3714}3715 3716define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) {3717; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3718; -O0:    eor x9, x8, x93719; -O0:    eor x8, x8, x103720; -O0:    bl __atomic_compare_exchange3721;3722; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic:3723; -O1:    ldp x0, x1, [x0]3724; -O1:    eor x8, x1, x193725; -O1:    eor x9, x0, x213726; -O1:    bl __atomic_compare_exchange3727    %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 13728    ret i128 %r3729}3730 3731define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) {3732; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire:3733; -O0:    eor x9, x8, x93734; -O0:    eor x8, x8, x103735; -O0:    bl __atomic_compare_exchange3736;3737; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire:3738; -O1:    ldp x0, x1, [x0]3739; -O1:    eor x8, x1, x193740; -O1:    eor x9, x0, x213741; -O1:    bl __atomic_compare_exchange3742    %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 13743    ret i128 %r3744}3745 3746define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) {3747; -O0-LABEL: atomicrmw_xor_i128_unaligned_release:3748; -O0:    eor x9, x8, x93749; -O0:    eor x8, x8, x103750; -O0:    bl __atomic_compare_exchange3751;3752; -O1-LABEL: atomicrmw_xor_i128_unaligned_release:3753; -O1:    ldp x0, x1, [x0]3754; -O1:    eor x8, x1, x193755; -O1:    eor x9, x0, x213756; -O1:    bl __atomic_compare_exchange3757    %r = atomicrmw xor ptr %ptr, i128 %value release, align 13758    ret i128 %r3759}3760 3761define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {3762; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:3763; -O0:    eor x9, x8, x93764; -O0:    eor x8, x8, x103765; -O0:    bl __atomic_compare_exchange3766;3767; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel:3768; -O1:    ldp x0, x1, [x0]3769; -O1:    eor x8, x1, x193770; -O1:    eor x9, x0, x213771; -O1:    bl __atomic_compare_exchange3772    %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 13773    ret i128 %r3774}3775 3776define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {3777; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:3778; -O0:    eor x9, x8, x93779; -O0:    eor x8, x8, x103780; -O0:    bl __atomic_compare_exchange3781;3782; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst:3783; -O1:    ldp x0, x1, [x0]3784; -O1:    eor x8, x1, x193785; -O1:    eor x9, x0, x213786; -O1:    bl __atomic_compare_exchange3787    %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 13788    ret i128 %r3789}3790 3791define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) {3792; CHECK-LABEL: atomicrmw_max_i8_aligned_monotonic:3793; CHECK:    ldsmaxb w1, w0, [x0]3794    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 13795    ret i8 %r3796}3797 3798define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) {3799; CHECK-LABEL: atomicrmw_max_i8_aligned_acquire:3800; CHECK:    ldsmaxab w1, w0, [x0]3801    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 13802    ret i8 %r3803}3804 3805define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) {3806; CHECK-LABEL: atomicrmw_max_i8_aligned_release:3807; CHECK:    ldsmaxlb w1, w0, [x0]3808    %r = atomicrmw max ptr %ptr, i8 %value release, align 13809    ret i8 %r3810}3811 3812define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) {3813; CHECK-LABEL: atomicrmw_max_i8_aligned_acq_rel:3814; CHECK:    ldsmaxalb w1, w0, [x0]3815    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 13816    ret i8 %r3817}3818 3819define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) {3820; CHECK-LABEL: atomicrmw_max_i8_aligned_seq_cst:3821; CHECK:    ldsmaxalb w1, w0, [x0]3822    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 13823    ret i8 %r3824}3825 3826define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) {3827; CHECK-LABEL: atomicrmw_max_i16_aligned_monotonic:3828; CHECK:    ldsmaxh w1, w0, [x0]3829    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 23830    ret i16 %r3831}3832 3833define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) {3834; CHECK-LABEL: atomicrmw_max_i16_aligned_acquire:3835; CHECK:    ldsmaxah w1, w0, [x0]3836    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 23837    ret i16 %r3838}3839 3840define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) {3841; CHECK-LABEL: atomicrmw_max_i16_aligned_release:3842; CHECK:    ldsmaxlh w1, w0, [x0]3843    %r = atomicrmw max ptr %ptr, i16 %value release, align 23844    ret i16 %r3845}3846 3847define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) {3848; CHECK-LABEL: atomicrmw_max_i16_aligned_acq_rel:3849; CHECK:    ldsmaxalh w1, w0, [x0]3850    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 23851    ret i16 %r3852}3853 3854define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) {3855; CHECK-LABEL: atomicrmw_max_i16_aligned_seq_cst:3856; CHECK:    ldsmaxalh w1, w0, [x0]3857    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 23858    ret i16 %r3859}3860 3861define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) {3862; CHECK-LABEL: atomicrmw_max_i32_aligned_monotonic:3863; CHECK:    ldsmax w1, w0, [x0]3864    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 43865    ret i32 %r3866}3867 3868define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) {3869; CHECK-LABEL: atomicrmw_max_i32_aligned_acquire:3870; CHECK:    ldsmaxa w1, w0, [x0]3871    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 43872    ret i32 %r3873}3874 3875define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) {3876; CHECK-LABEL: atomicrmw_max_i32_aligned_release:3877; CHECK:    ldsmaxl w1, w0, [x0]3878    %r = atomicrmw max ptr %ptr, i32 %value release, align 43879    ret i32 %r3880}3881 3882define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) {3883; CHECK-LABEL: atomicrmw_max_i32_aligned_acq_rel:3884; CHECK:    ldsmaxal w1, w0, [x0]3885    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 43886    ret i32 %r3887}3888 3889define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) {3890; CHECK-LABEL: atomicrmw_max_i32_aligned_seq_cst:3891; CHECK:    ldsmaxal w1, w0, [x0]3892    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 43893    ret i32 %r3894}3895 3896define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) {3897; CHECK-LABEL: atomicrmw_max_i64_aligned_monotonic:3898; CHECK:    ldsmax x1, x0, [x0]3899    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 83900    ret i64 %r3901}3902 3903define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) {3904; CHECK-LABEL: atomicrmw_max_i64_aligned_acquire:3905; CHECK:    ldsmaxa x1, x0, [x0]3906    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 83907    ret i64 %r3908}3909 3910define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) {3911; CHECK-LABEL: atomicrmw_max_i64_aligned_release:3912; CHECK:    ldsmaxl x1, x0, [x0]3913    %r = atomicrmw max ptr %ptr, i64 %value release, align 83914    ret i64 %r3915}3916 3917define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) {3918; CHECK-LABEL: atomicrmw_max_i64_aligned_acq_rel:3919; CHECK:    ldsmaxal x1, x0, [x0]3920    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 83921    ret i64 %r3922}3923 3924define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) {3925; CHECK-LABEL: atomicrmw_max_i64_aligned_seq_cst:3926; CHECK:    ldsmaxal x1, x0, [x0]3927    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 83928    ret i64 %r3929}3930 3931define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) {3932; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic:3933; -O0:    subs x9, x9, x123934; -O0:    subs x11, x11, x103935; -O0:    subs x13, x13, x103936; -O0:    csel w11, w9, w11, eq3937; -O0:    ands w13, w11, #0x13938; -O0:    csel x2, x9, x12, ne3939; -O0:    ands w11, w11, #0x13940; -O0:    csel x9, x9, x10, ne3941; -O0:    casp x0, x1, x2, x3, [x8]3942; -O0:    eor x8, x10, x83943; -O0:    eor x11, x9, x113944; -O0:    orr x8, x8, x113945; -O0:    subs x8, x8, #03946;3947; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic:3948; -O1:    ldp x4, x5, [x0]3949; -O1:    cmp x2, x43950; -O1:    csel x9, x7, x3, lt3951; -O1:    csel x8, x4, x2, lt3952; -O1:    casp x4, x5, x8, x9, [x0]3953; -O1:    cmp x5, x73954; -O1:    ccmp x4, x6, #0, eq3955    %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 163956    ret i128 %r3957}3958 3959define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) {3960; -O0-LABEL: atomicrmw_max_i128_aligned_acquire:3961; -O0:    subs x9, x9, x123962; -O0:    subs x11, x11, x103963; -O0:    subs x13, x13, x103964; -O0:    csel w11, w9, w11, eq3965; -O0:    ands w13, w11, #0x13966; -O0:    csel x2, x9, x12, ne3967; -O0:    ands w11, w11, #0x13968; -O0:    csel x9, x9, x10, ne3969; -O0:    caspa x0, x1, x2, x3, [x8]3970; -O0:    eor x8, x10, x83971; -O0:    eor x11, x9, x113972; -O0:    orr x8, x8, x113973; -O0:    subs x8, x8, #03974;3975; -O1-LABEL: atomicrmw_max_i128_aligned_acquire:3976; -O1:    ldp x4, x5, [x0]3977; -O1:    cmp x2, x43978; -O1:    csel x9, x7, x3, lt3979; -O1:    csel x8, x4, x2, lt3980; -O1:    caspa x4, x5, x8, x9, [x0]3981; -O1:    cmp x5, x73982; -O1:    ccmp x4, x6, #0, eq3983    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 163984    ret i128 %r3985}3986 3987define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) {3988; -O0-LABEL: atomicrmw_max_i128_aligned_release:3989; -O0:    subs x9, x9, x123990; -O0:    subs x11, x11, x103991; -O0:    subs x13, x13, x103992; -O0:    csel w11, w9, w11, eq3993; -O0:    ands w13, w11, #0x13994; -O0:    csel x2, x9, x12, ne3995; -O0:    ands w11, w11, #0x13996; -O0:    csel x9, x9, x10, ne3997; -O0:    caspl x0, x1, x2, x3, [x8]3998; -O0:    eor x8, x10, x83999; -O0:    eor x11, x9, x114000; -O0:    orr x8, x8, x114001; -O0:    subs x8, x8, #04002;4003; -O1-LABEL: atomicrmw_max_i128_aligned_release:4004; -O1:    ldp x4, x5, [x0]4005; -O1:    cmp x2, x44006; -O1:    csel x9, x7, x3, lt4007; -O1:    csel x8, x4, x2, lt4008; -O1:    caspl x4, x5, x8, x9, [x0]4009; -O1:    cmp x5, x74010; -O1:    ccmp x4, x6, #0, eq4011    %r = atomicrmw max ptr %ptr, i128 %value release, align 164012    ret i128 %r4013}4014 4015define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4016; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel:4017; -O0:    subs x9, x9, x124018; -O0:    subs x11, x11, x104019; -O0:    subs x13, x13, x104020; -O0:    csel w11, w9, w11, eq4021; -O0:    ands w13, w11, #0x14022; -O0:    csel x2, x9, x12, ne4023; -O0:    ands w11, w11, #0x14024; -O0:    csel x9, x9, x10, ne4025; -O0:    caspal x0, x1, x2, x3, [x8]4026; -O0:    eor x8, x10, x84027; -O0:    eor x11, x9, x114028; -O0:    orr x8, x8, x114029; -O0:    subs x8, x8, #04030;4031; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel:4032; -O1:    ldp x4, x5, [x0]4033; -O1:    cmp x2, x44034; -O1:    csel x9, x7, x3, lt4035; -O1:    csel x8, x4, x2, lt4036; -O1:    caspal x4, x5, x8, x9, [x0]4037; -O1:    cmp x5, x74038; -O1:    ccmp x4, x6, #0, eq4039    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 164040    ret i128 %r4041}4042 4043define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4044; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst:4045; -O0:    subs x9, x9, x124046; -O0:    subs x11, x11, x104047; -O0:    subs x13, x13, x104048; -O0:    csel w11, w9, w11, eq4049; -O0:    ands w13, w11, #0x14050; -O0:    csel x2, x9, x12, ne4051; -O0:    ands w11, w11, #0x14052; -O0:    csel x9, x9, x10, ne4053; -O0:    caspal x0, x1, x2, x3, [x8]4054; -O0:    eor x8, x10, x84055; -O0:    eor x11, x9, x114056; -O0:    orr x8, x8, x114057; -O0:    subs x8, x8, #04058;4059; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst:4060; -O1:    ldp x4, x5, [x0]4061; -O1:    cmp x2, x44062; -O1:    csel x9, x7, x3, lt4063; -O1:    csel x8, x4, x2, lt4064; -O1:    caspal x4, x5, x8, x9, [x0]4065; -O1:    cmp x5, x74066; -O1:    ccmp x4, x6, #0, eq4067    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 164068    ret i128 %r4069}4070 4071define dso_local i8 @atomicrmw_max_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4072; CHECK-LABEL: atomicrmw_max_i8_unaligned_monotonic:4073; CHECK:    ldsmaxb w1, w0, [x0]4074    %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 14075    ret i8 %r4076}4077 4078define dso_local i8 @atomicrmw_max_i8_unaligned_acquire(ptr %ptr, i8 %value) {4079; CHECK-LABEL: atomicrmw_max_i8_unaligned_acquire:4080; CHECK:    ldsmaxab w1, w0, [x0]4081    %r = atomicrmw max ptr %ptr, i8 %value acquire, align 14082    ret i8 %r4083}4084 4085define dso_local i8 @atomicrmw_max_i8_unaligned_release(ptr %ptr, i8 %value) {4086; CHECK-LABEL: atomicrmw_max_i8_unaligned_release:4087; CHECK:    ldsmaxlb w1, w0, [x0]4088    %r = atomicrmw max ptr %ptr, i8 %value release, align 14089    ret i8 %r4090}4091 4092define dso_local i8 @atomicrmw_max_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4093; CHECK-LABEL: atomicrmw_max_i8_unaligned_acq_rel:4094; CHECK:    ldsmaxalb w1, w0, [x0]4095    %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 14096    ret i8 %r4097}4098 4099define dso_local i8 @atomicrmw_max_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4100; CHECK-LABEL: atomicrmw_max_i8_unaligned_seq_cst:4101; CHECK:    ldsmaxalb w1, w0, [x0]4102    %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 14103    ret i8 %r4104}4105 4106define dso_local i16 @atomicrmw_max_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4107; -O0-LABEL: atomicrmw_max_i16_unaligned_monotonic:4108; -O0:    sxth w10, w94109; -O0:    subs w10, w10, w8, sxth4110; -O0:    csel w8, w9, w8, gt4111; -O0:    bl __atomic_compare_exchange4112;4113; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic:4114; -O1:    sxth w8, w04115; -O1:    cmp w8, w20, sxth4116; -O1:    csel w8, w0, w20, gt4117; -O1:    bl __atomic_compare_exchange4118    %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 14119    ret i16 %r4120}4121 4122define dso_local i16 @atomicrmw_max_i16_unaligned_acquire(ptr %ptr, i16 %value) {4123; -O0-LABEL: atomicrmw_max_i16_unaligned_acquire:4124; -O0:    sxth w10, w94125; -O0:    subs w10, w10, w8, sxth4126; -O0:    csel w8, w9, w8, gt4127; -O0:    bl __atomic_compare_exchange4128;4129; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire:4130; -O1:    sxth w8, w04131; -O1:    cmp w8, w20, sxth4132; -O1:    csel w8, w0, w20, gt4133; -O1:    bl __atomic_compare_exchange4134    %r = atomicrmw max ptr %ptr, i16 %value acquire, align 14135    ret i16 %r4136}4137 4138define dso_local i16 @atomicrmw_max_i16_unaligned_release(ptr %ptr, i16 %value) {4139; -O0-LABEL: atomicrmw_max_i16_unaligned_release:4140; -O0:    sxth w10, w94141; -O0:    subs w10, w10, w8, sxth4142; -O0:    csel w8, w9, w8, gt4143; -O0:    bl __atomic_compare_exchange4144;4145; -O1-LABEL: atomicrmw_max_i16_unaligned_release:4146; -O1:    sxth w8, w04147; -O1:    cmp w8, w20, sxth4148; -O1:    csel w8, w0, w20, gt4149; -O1:    bl __atomic_compare_exchange4150    %r = atomicrmw max ptr %ptr, i16 %value release, align 14151    ret i16 %r4152}4153 4154define dso_local i16 @atomicrmw_max_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4155; -O0-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4156; -O0:    sxth w10, w94157; -O0:    subs w10, w10, w8, sxth4158; -O0:    csel w8, w9, w8, gt4159; -O0:    bl __atomic_compare_exchange4160;4161; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel:4162; -O1:    sxth w8, w04163; -O1:    cmp w8, w20, sxth4164; -O1:    csel w8, w0, w20, gt4165; -O1:    bl __atomic_compare_exchange4166    %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 14167    ret i16 %r4168}4169 4170define dso_local i16 @atomicrmw_max_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4171; -O0-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4172; -O0:    sxth w10, w94173; -O0:    subs w10, w10, w8, sxth4174; -O0:    csel w8, w9, w8, gt4175; -O0:    bl __atomic_compare_exchange4176;4177; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst:4178; -O1:    sxth w8, w04179; -O1:    cmp w8, w20, sxth4180; -O1:    csel w8, w0, w20, gt4181; -O1:    bl __atomic_compare_exchange4182    %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 14183    ret i16 %r4184}4185 4186define dso_local i32 @atomicrmw_max_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4187; -O0-LABEL: atomicrmw_max_i32_unaligned_monotonic:4188; -O0:    subs w10, w9, w84189; -O0:    csel w8, w9, w8, gt4190; -O0:    bl __atomic_compare_exchange4191;4192; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic:4193; -O1:    cmp w0, w204194; -O1:    csel w8, w0, w20, gt4195; -O1:    bl __atomic_compare_exchange4196    %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 14197    ret i32 %r4198}4199 4200define dso_local i32 @atomicrmw_max_i32_unaligned_acquire(ptr %ptr, i32 %value) {4201; -O0-LABEL: atomicrmw_max_i32_unaligned_acquire:4202; -O0:    subs w10, w9, w84203; -O0:    csel w8, w9, w8, gt4204; -O0:    bl __atomic_compare_exchange4205;4206; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire:4207; -O1:    cmp w0, w204208; -O1:    csel w8, w0, w20, gt4209; -O1:    bl __atomic_compare_exchange4210    %r = atomicrmw max ptr %ptr, i32 %value acquire, align 14211    ret i32 %r4212}4213 4214define dso_local i32 @atomicrmw_max_i32_unaligned_release(ptr %ptr, i32 %value) {4215; -O0-LABEL: atomicrmw_max_i32_unaligned_release:4216; -O0:    subs w10, w9, w84217; -O0:    csel w8, w9, w8, gt4218; -O0:    bl __atomic_compare_exchange4219;4220; -O1-LABEL: atomicrmw_max_i32_unaligned_release:4221; -O1:    cmp w0, w204222; -O1:    csel w8, w0, w20, gt4223; -O1:    bl __atomic_compare_exchange4224    %r = atomicrmw max ptr %ptr, i32 %value release, align 14225    ret i32 %r4226}4227 4228define dso_local i32 @atomicrmw_max_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4229; -O0-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4230; -O0:    subs w10, w9, w84231; -O0:    csel w8, w9, w8, gt4232; -O0:    bl __atomic_compare_exchange4233;4234; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel:4235; -O1:    cmp w0, w204236; -O1:    csel w8, w0, w20, gt4237; -O1:    bl __atomic_compare_exchange4238    %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 14239    ret i32 %r4240}4241 4242define dso_local i32 @atomicrmw_max_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4243; -O0-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4244; -O0:    subs w10, w9, w84245; -O0:    csel w8, w9, w8, gt4246; -O0:    bl __atomic_compare_exchange4247;4248; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst:4249; -O1:    cmp w0, w204250; -O1:    csel w8, w0, w20, gt4251; -O1:    bl __atomic_compare_exchange4252    %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 14253    ret i32 %r4254}4255 4256define dso_local i64 @atomicrmw_max_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4257; -O0-LABEL: atomicrmw_max_i64_unaligned_monotonic:4258; -O0:    subs x10, x9, x84259; -O0:    csel x8, x9, x8, gt4260; -O0:    bl __atomic_compare_exchange4261;4262; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic:4263; -O1:    cmp x0, x204264; -O1:    csel x8, x0, x20, gt4265; -O1:    bl __atomic_compare_exchange4266    %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 14267    ret i64 %r4268}4269 4270define dso_local i64 @atomicrmw_max_i64_unaligned_acquire(ptr %ptr, i64 %value) {4271; -O0-LABEL: atomicrmw_max_i64_unaligned_acquire:4272; -O0:    subs x10, x9, x84273; -O0:    csel x8, x9, x8, gt4274; -O0:    bl __atomic_compare_exchange4275;4276; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire:4277; -O1:    cmp x0, x204278; -O1:    csel x8, x0, x20, gt4279; -O1:    bl __atomic_compare_exchange4280    %r = atomicrmw max ptr %ptr, i64 %value acquire, align 14281    ret i64 %r4282}4283 4284define dso_local i64 @atomicrmw_max_i64_unaligned_release(ptr %ptr, i64 %value) {4285; -O0-LABEL: atomicrmw_max_i64_unaligned_release:4286; -O0:    subs x10, x9, x84287; -O0:    csel x8, x9, x8, gt4288; -O0:    bl __atomic_compare_exchange4289;4290; -O1-LABEL: atomicrmw_max_i64_unaligned_release:4291; -O1:    cmp x0, x204292; -O1:    csel x8, x0, x20, gt4293; -O1:    bl __atomic_compare_exchange4294    %r = atomicrmw max ptr %ptr, i64 %value release, align 14295    ret i64 %r4296}4297 4298define dso_local i64 @atomicrmw_max_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4299; -O0-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4300; -O0:    subs x10, x9, x84301; -O0:    csel x8, x9, x8, gt4302; -O0:    bl __atomic_compare_exchange4303;4304; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel:4305; -O1:    cmp x0, x204306; -O1:    csel x8, x0, x20, gt4307; -O1:    bl __atomic_compare_exchange4308    %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 14309    ret i64 %r4310}4311 4312define dso_local i64 @atomicrmw_max_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4313; -O0-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4314; -O0:    subs x10, x9, x84315; -O0:    csel x8, x9, x8, gt4316; -O0:    bl __atomic_compare_exchange4317;4318; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst:4319; -O1:    cmp x0, x204320; -O1:    csel x8, x0, x20, gt4321; -O1:    bl __atomic_compare_exchange4322    %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 14323    ret i64 %r4324}4325 4326define dso_local i128 @atomicrmw_max_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4327; -O0-LABEL: atomicrmw_max_i128_unaligned_monotonic:4328; -O0:    subs x8, x8, x94329; -O0:    subs x11, x11, x104330; -O0:    subs x12, x12, x104331; -O0:    csel w11, w8, w11, eq4332; -O0:    ands w12, w11, #0x14333; -O0:    csel x9, x8, x9, ne4334; -O0:    ands w11, w11, #0x14335; -O0:    csel x8, x8, x10, ne4336; -O0:    bl __atomic_compare_exchange4337;4338; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic:4339; -O1:    ldp x0, x1, [x0]4340; -O1:    cmp x21, x04341; -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 x8, x8, x94351; -O0:    subs x11, x11, x104352; -O0:    subs x12, x12, x104353; -O0:    csel w11, w8, w11, eq4354; -O0:    ands w12, w11, #0x14355; -O0:    csel x9, x8, x9, ne4356; -O0:    ands w11, w11, #0x14357; -O0:    csel x8, x8, x10, ne4358; -O0:    bl __atomic_compare_exchange4359;4360; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire:4361; -O1:    ldp x0, x1, [x0]4362; -O1:    cmp x21, x04363; -O1:    csel x8, x1, x19, lt4364; -O1:    csel x9, x0, x21, lt4365; -O1:    bl __atomic_compare_exchange4366    %r = atomicrmw max ptr %ptr, i128 %value acquire, align 14367    ret i128 %r4368}4369 4370define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) {4371; -O0-LABEL: atomicrmw_max_i128_unaligned_release:4372; -O0:    subs x8, x8, x94373; -O0:    subs x11, x11, x104374; -O0:    subs x12, x12, x104375; -O0:    csel w11, w8, w11, eq4376; -O0:    ands w12, w11, #0x14377; -O0:    csel x9, x8, x9, ne4378; -O0:    ands w11, w11, #0x14379; -O0:    csel x8, x8, x10, ne4380; -O0:    bl __atomic_compare_exchange4381;4382; -O1-LABEL: atomicrmw_max_i128_unaligned_release:4383; -O1:    ldp x0, x1, [x0]4384; -O1:    cmp x21, x04385; -O1:    csel x8, x1, x19, lt4386; -O1:    csel x9, x0, x21, lt4387; -O1:    bl __atomic_compare_exchange4388    %r = atomicrmw max ptr %ptr, i128 %value release, align 14389    ret i128 %r4390}4391 4392define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {4393; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4394; -O0:    subs x8, x8, x94395; -O0:    subs x11, x11, x104396; -O0:    subs x12, x12, x104397; -O0:    csel w11, w8, w11, eq4398; -O0:    ands w12, w11, #0x14399; -O0:    csel x9, x8, x9, ne4400; -O0:    ands w11, w11, #0x14401; -O0:    csel x8, x8, x10, ne4402; -O0:    bl __atomic_compare_exchange4403;4404; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel:4405; -O1:    ldp x0, x1, [x0]4406; -O1:    cmp x21, x04407; -O1:    csel x8, x1, x19, lt4408; -O1:    csel x9, x0, x21, lt4409; -O1:    bl __atomic_compare_exchange4410    %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 14411    ret i128 %r4412}4413 4414define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {4415; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4416; -O0:    subs x8, x8, x94417; -O0:    subs x11, x11, x104418; -O0:    subs x12, x12, x104419; -O0:    csel w11, w8, w11, eq4420; -O0:    ands w12, w11, #0x14421; -O0:    csel x9, x8, x9, ne4422; -O0:    ands w11, w11, #0x14423; -O0:    csel x8, x8, x10, ne4424; -O0:    bl __atomic_compare_exchange4425;4426; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst:4427; -O1:    ldp x0, x1, [x0]4428; -O1:    cmp x21, x04429; -O1:    csel x8, x1, x19, lt4430; -O1:    csel x9, x0, x21, lt4431; -O1:    bl __atomic_compare_exchange4432    %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 14433    ret i128 %r4434}4435 4436define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) {4437; CHECK-LABEL: atomicrmw_min_i8_aligned_monotonic:4438; CHECK:    ldsminb w1, w0, [x0]4439    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14440    ret i8 %r4441}4442 4443define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) {4444; CHECK-LABEL: atomicrmw_min_i8_aligned_acquire:4445; CHECK:    ldsminab w1, w0, [x0]4446    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14447    ret i8 %r4448}4449 4450define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) {4451; CHECK-LABEL: atomicrmw_min_i8_aligned_release:4452; CHECK:    ldsminlb w1, w0, [x0]4453    %r = atomicrmw min ptr %ptr, i8 %value release, align 14454    ret i8 %r4455}4456 4457define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) {4458; CHECK-LABEL: atomicrmw_min_i8_aligned_acq_rel:4459; CHECK:    ldsminalb w1, w0, [x0]4460    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 14461    ret i8 %r4462}4463 4464define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) {4465; CHECK-LABEL: atomicrmw_min_i8_aligned_seq_cst:4466; CHECK:    ldsminalb w1, w0, [x0]4467    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 14468    ret i8 %r4469}4470 4471define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) {4472; CHECK-LABEL: atomicrmw_min_i16_aligned_monotonic:4473; CHECK:    ldsminh w1, w0, [x0]4474    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 24475    ret i16 %r4476}4477 4478define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) {4479; CHECK-LABEL: atomicrmw_min_i16_aligned_acquire:4480; CHECK:    ldsminah w1, w0, [x0]4481    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 24482    ret i16 %r4483}4484 4485define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) {4486; CHECK-LABEL: atomicrmw_min_i16_aligned_release:4487; CHECK:    ldsminlh w1, w0, [x0]4488    %r = atomicrmw min ptr %ptr, i16 %value release, align 24489    ret i16 %r4490}4491 4492define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) {4493; CHECK-LABEL: atomicrmw_min_i16_aligned_acq_rel:4494; CHECK:    ldsminalh w1, w0, [x0]4495    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 24496    ret i16 %r4497}4498 4499define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) {4500; CHECK-LABEL: atomicrmw_min_i16_aligned_seq_cst:4501; CHECK:    ldsminalh w1, w0, [x0]4502    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 24503    ret i16 %r4504}4505 4506define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) {4507; CHECK-LABEL: atomicrmw_min_i32_aligned_monotonic:4508; CHECK:    ldsmin w1, w0, [x0]4509    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 44510    ret i32 %r4511}4512 4513define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) {4514; CHECK-LABEL: atomicrmw_min_i32_aligned_acquire:4515; CHECK:    ldsmina w1, w0, [x0]4516    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 44517    ret i32 %r4518}4519 4520define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) {4521; CHECK-LABEL: atomicrmw_min_i32_aligned_release:4522; CHECK:    ldsminl w1, w0, [x0]4523    %r = atomicrmw min ptr %ptr, i32 %value release, align 44524    ret i32 %r4525}4526 4527define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) {4528; CHECK-LABEL: atomicrmw_min_i32_aligned_acq_rel:4529; CHECK:    ldsminal w1, w0, [x0]4530    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 44531    ret i32 %r4532}4533 4534define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) {4535; CHECK-LABEL: atomicrmw_min_i32_aligned_seq_cst:4536; CHECK:    ldsminal w1, w0, [x0]4537    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 44538    ret i32 %r4539}4540 4541define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) {4542; CHECK-LABEL: atomicrmw_min_i64_aligned_monotonic:4543; CHECK:    ldsmin x1, x0, [x0]4544    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 84545    ret i64 %r4546}4547 4548define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) {4549; CHECK-LABEL: atomicrmw_min_i64_aligned_acquire:4550; CHECK:    ldsmina x1, x0, [x0]4551    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 84552    ret i64 %r4553}4554 4555define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) {4556; CHECK-LABEL: atomicrmw_min_i64_aligned_release:4557; CHECK:    ldsminl x1, x0, [x0]4558    %r = atomicrmw min ptr %ptr, i64 %value release, align 84559    ret i64 %r4560}4561 4562define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) {4563; CHECK-LABEL: atomicrmw_min_i64_aligned_acq_rel:4564; CHECK:    ldsminal x1, x0, [x0]4565    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 84566    ret i64 %r4567}4568 4569define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) {4570; CHECK-LABEL: atomicrmw_min_i64_aligned_seq_cst:4571; CHECK:    ldsminal x1, x0, [x0]4572    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 84573    ret i64 %r4574}4575 4576define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) {4577; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic:4578; -O0:    subs x9, x9, x124579; -O0:    subs x11, x11, x104580; -O0:    subs x13, x13, x104581; -O0:    csel w11, w9, w11, eq4582; -O0:    ands w13, w11, #0x14583; -O0:    csel x2, x9, x12, ne4584; -O0:    ands w11, w11, #0x14585; -O0:    csel x9, x9, x10, ne4586; -O0:    casp x0, x1, x2, x3, [x8]4587; -O0:    eor x8, x10, x84588; -O0:    eor x11, x9, x114589; -O0:    orr x8, x8, x114590; -O0:    subs x8, x8, #04591;4592; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic:4593; -O1:    ldp x4, x5, [x0]4594; -O1:    cmp x2, x44595; -O1:    csel x9, x7, x3, ge4596; -O1:    csel x8, x4, x2, ge4597; -O1:    casp x4, x5, x8, x9, [x0]4598; -O1:    cmp x5, x74599; -O1:    ccmp x4, x6, #0, eq4600    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 164601    ret i128 %r4602}4603 4604define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) {4605; -O0-LABEL: atomicrmw_min_i128_aligned_acquire:4606; -O0:    subs x9, x9, x124607; -O0:    subs x11, x11, x104608; -O0:    subs x13, x13, x104609; -O0:    csel w11, w9, w11, eq4610; -O0:    ands w13, w11, #0x14611; -O0:    csel x2, x9, x12, ne4612; -O0:    ands w11, w11, #0x14613; -O0:    csel x9, x9, x10, ne4614; -O0:    caspa x0, x1, x2, x3, [x8]4615; -O0:    eor x8, x10, x84616; -O0:    eor x11, x9, x114617; -O0:    orr x8, x8, x114618; -O0:    subs x8, x8, #04619;4620; -O1-LABEL: atomicrmw_min_i128_aligned_acquire:4621; -O1:    ldp x4, x5, [x0]4622; -O1:    cmp x2, x44623; -O1:    csel x9, x7, x3, ge4624; -O1:    csel x8, x4, x2, ge4625; -O1:    caspa x4, x5, x8, x9, [x0]4626; -O1:    cmp x5, x74627; -O1:    ccmp x4, x6, #0, eq4628    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 164629    ret i128 %r4630}4631 4632define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) {4633; -O0-LABEL: atomicrmw_min_i128_aligned_release:4634; -O0:    subs x9, x9, x124635; -O0:    subs x11, x11, x104636; -O0:    subs x13, x13, x104637; -O0:    csel w11, w9, w11, eq4638; -O0:    ands w13, w11, #0x14639; -O0:    csel x2, x9, x12, ne4640; -O0:    ands w11, w11, #0x14641; -O0:    csel x9, x9, x10, ne4642; -O0:    caspl x0, x1, x2, x3, [x8]4643; -O0:    eor x8, x10, x84644; -O0:    eor x11, x9, x114645; -O0:    orr x8, x8, x114646; -O0:    subs x8, x8, #04647;4648; -O1-LABEL: atomicrmw_min_i128_aligned_release:4649; -O1:    ldp x4, x5, [x0]4650; -O1:    cmp x2, x44651; -O1:    csel x9, x7, x3, ge4652; -O1:    csel x8, x4, x2, ge4653; -O1:    caspl x4, x5, x8, x9, [x0]4654; -O1:    cmp x5, x74655; -O1:    ccmp x4, x6, #0, eq4656    %r = atomicrmw min ptr %ptr, i128 %value release, align 164657    ret i128 %r4658}4659 4660define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) {4661; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel:4662; -O0:    subs x9, x9, x124663; -O0:    subs x11, x11, x104664; -O0:    subs x13, x13, x104665; -O0:    csel w11, w9, w11, eq4666; -O0:    ands w13, w11, #0x14667; -O0:    csel x2, x9, x12, ne4668; -O0:    ands w11, w11, #0x14669; -O0:    csel x9, x9, x10, ne4670; -O0:    caspal x0, x1, x2, x3, [x8]4671; -O0:    eor x8, x10, x84672; -O0:    eor x11, x9, x114673; -O0:    orr x8, x8, x114674; -O0:    subs x8, x8, #04675;4676; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel:4677; -O1:    ldp x4, x5, [x0]4678; -O1:    cmp x2, x44679; -O1:    csel x9, x7, x3, ge4680; -O1:    csel x8, x4, x2, ge4681; -O1:    caspal x4, x5, x8, x9, [x0]4682; -O1:    cmp x5, x74683; -O1:    ccmp x4, x6, #0, eq4684    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 164685    ret i128 %r4686}4687 4688define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) {4689; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst:4690; -O0:    subs x9, x9, x124691; -O0:    subs x11, x11, x104692; -O0:    subs x13, x13, x104693; -O0:    csel w11, w9, w11, eq4694; -O0:    ands w13, w11, #0x14695; -O0:    csel x2, x9, x12, ne4696; -O0:    ands w11, w11, #0x14697; -O0:    csel x9, x9, x10, ne4698; -O0:    caspal x0, x1, x2, x3, [x8]4699; -O0:    eor x8, x10, x84700; -O0:    eor x11, x9, x114701; -O0:    orr x8, x8, x114702; -O0:    subs x8, x8, #04703;4704; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst:4705; -O1:    ldp x4, x5, [x0]4706; -O1:    cmp x2, x44707; -O1:    csel x9, x7, x3, ge4708; -O1:    csel x8, x4, x2, ge4709; -O1:    caspal x4, x5, x8, x9, [x0]4710; -O1:    cmp x5, x74711; -O1:    ccmp x4, x6, #0, eq4712    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 164713    ret i128 %r4714}4715 4716define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) {4717; CHECK-LABEL: atomicrmw_min_i8_unaligned_monotonic:4718; CHECK:    ldsminb w1, w0, [x0]4719    %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 14720    ret i8 %r4721}4722 4723define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) {4724; CHECK-LABEL: atomicrmw_min_i8_unaligned_acquire:4725; CHECK:    ldsminab w1, w0, [x0]4726    %r = atomicrmw min ptr %ptr, i8 %value acquire, align 14727    ret i8 %r4728}4729 4730define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) {4731; CHECK-LABEL: atomicrmw_min_i8_unaligned_release:4732; CHECK:    ldsminlb w1, w0, [x0]4733    %r = atomicrmw min ptr %ptr, i8 %value release, align 14734    ret i8 %r4735}4736 4737define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {4738; CHECK-LABEL: atomicrmw_min_i8_unaligned_acq_rel:4739; CHECK:    ldsminalb w1, w0, [x0]4740    %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 14741    ret i8 %r4742}4743 4744define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {4745; CHECK-LABEL: atomicrmw_min_i8_unaligned_seq_cst:4746; CHECK:    ldsminalb w1, w0, [x0]4747    %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 14748    ret i8 %r4749}4750 4751define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) {4752; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic:4753; -O0:    sxth w10, w94754; -O0:    subs w10, w10, w8, sxth4755; -O0:    csel w8, w9, w8, le4756; -O0:    bl __atomic_compare_exchange4757;4758; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic:4759; -O1:    sxth w8, w04760; -O1:    cmp w8, w20, sxth4761; -O1:    csel w8, w0, w20, le4762; -O1:    bl __atomic_compare_exchange4763    %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 14764    ret i16 %r4765}4766 4767define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) {4768; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire:4769; -O0:    sxth w10, w94770; -O0:    subs w10, w10, w8, sxth4771; -O0:    csel w8, w9, w8, le4772; -O0:    bl __atomic_compare_exchange4773;4774; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire:4775; -O1:    sxth w8, w04776; -O1:    cmp w8, w20, sxth4777; -O1:    csel w8, w0, w20, le4778; -O1:    bl __atomic_compare_exchange4779    %r = atomicrmw min ptr %ptr, i16 %value acquire, align 14780    ret i16 %r4781}4782 4783define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) {4784; -O0-LABEL: atomicrmw_min_i16_unaligned_release:4785; -O0:    sxth w10, w94786; -O0:    subs w10, w10, w8, sxth4787; -O0:    csel w8, w9, w8, le4788; -O0:    bl __atomic_compare_exchange4789;4790; -O1-LABEL: atomicrmw_min_i16_unaligned_release:4791; -O1:    sxth w8, w04792; -O1:    cmp w8, w20, sxth4793; -O1:    csel w8, w0, w20, le4794; -O1:    bl __atomic_compare_exchange4795    %r = atomicrmw min ptr %ptr, i16 %value release, align 14796    ret i16 %r4797}4798 4799define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {4800; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel:4801; -O0:    sxth w10, w94802; -O0:    subs w10, w10, w8, sxth4803; -O0:    csel w8, w9, w8, le4804; -O0:    bl __atomic_compare_exchange4805;4806; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel:4807; -O1:    sxth w8, w04808; -O1:    cmp w8, w20, sxth4809; -O1:    csel w8, w0, w20, le4810; -O1:    bl __atomic_compare_exchange4811    %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 14812    ret i16 %r4813}4814 4815define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {4816; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst:4817; -O0:    sxth w10, w94818; -O0:    subs w10, w10, w8, sxth4819; -O0:    csel w8, w9, w8, le4820; -O0:    bl __atomic_compare_exchange4821;4822; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst:4823; -O1:    sxth w8, w04824; -O1:    cmp w8, w20, sxth4825; -O1:    csel w8, w0, w20, le4826; -O1:    bl __atomic_compare_exchange4827    %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 14828    ret i16 %r4829}4830 4831define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) {4832; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic:4833; -O0:    subs w10, w9, w84834; -O0:    csel w8, w9, w8, le4835; -O0:    bl __atomic_compare_exchange4836;4837; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic:4838; -O1:    cmp w0, w204839; -O1:    csel w8, w0, w20, le4840; -O1:    bl __atomic_compare_exchange4841    %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 14842    ret i32 %r4843}4844 4845define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) {4846; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire:4847; -O0:    subs w10, w9, w84848; -O0:    csel w8, w9, w8, le4849; -O0:    bl __atomic_compare_exchange4850;4851; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire:4852; -O1:    cmp w0, w204853; -O1:    csel w8, w0, w20, le4854; -O1:    bl __atomic_compare_exchange4855    %r = atomicrmw min ptr %ptr, i32 %value acquire, align 14856    ret i32 %r4857}4858 4859define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) {4860; -O0-LABEL: atomicrmw_min_i32_unaligned_release:4861; -O0:    subs w10, w9, w84862; -O0:    csel w8, w9, w8, le4863; -O0:    bl __atomic_compare_exchange4864;4865; -O1-LABEL: atomicrmw_min_i32_unaligned_release:4866; -O1:    cmp w0, w204867; -O1:    csel w8, w0, w20, le4868; -O1:    bl __atomic_compare_exchange4869    %r = atomicrmw min ptr %ptr, i32 %value release, align 14870    ret i32 %r4871}4872 4873define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {4874; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel:4875; -O0:    subs w10, w9, w84876; -O0:    csel w8, w9, w8, le4877; -O0:    bl __atomic_compare_exchange4878;4879; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel:4880; -O1:    cmp w0, w204881; -O1:    csel w8, w0, w20, le4882; -O1:    bl __atomic_compare_exchange4883    %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 14884    ret i32 %r4885}4886 4887define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {4888; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst:4889; -O0:    subs w10, w9, w84890; -O0:    csel w8, w9, w8, le4891; -O0:    bl __atomic_compare_exchange4892;4893; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst:4894; -O1:    cmp w0, w204895; -O1:    csel w8, w0, w20, le4896; -O1:    bl __atomic_compare_exchange4897    %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 14898    ret i32 %r4899}4900 4901define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) {4902; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic:4903; -O0:    subs x10, x9, x84904; -O0:    csel x8, x9, x8, le4905; -O0:    bl __atomic_compare_exchange4906;4907; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic:4908; -O1:    cmp x0, x204909; -O1:    csel x8, x0, x20, le4910; -O1:    bl __atomic_compare_exchange4911    %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 14912    ret i64 %r4913}4914 4915define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) {4916; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire:4917; -O0:    subs x10, x9, x84918; -O0:    csel x8, x9, x8, le4919; -O0:    bl __atomic_compare_exchange4920;4921; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire:4922; -O1:    cmp x0, x204923; -O1:    csel x8, x0, x20, le4924; -O1:    bl __atomic_compare_exchange4925    %r = atomicrmw min ptr %ptr, i64 %value acquire, align 14926    ret i64 %r4927}4928 4929define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) {4930; -O0-LABEL: atomicrmw_min_i64_unaligned_release:4931; -O0:    subs x10, x9, x84932; -O0:    csel x8, x9, x8, le4933; -O0:    bl __atomic_compare_exchange4934;4935; -O1-LABEL: atomicrmw_min_i64_unaligned_release:4936; -O1:    cmp x0, x204937; -O1:    csel x8, x0, x20, le4938; -O1:    bl __atomic_compare_exchange4939    %r = atomicrmw min ptr %ptr, i64 %value release, align 14940    ret i64 %r4941}4942 4943define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {4944; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel:4945; -O0:    subs x10, x9, x84946; -O0:    csel x8, x9, x8, le4947; -O0:    bl __atomic_compare_exchange4948;4949; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel:4950; -O1:    cmp x0, x204951; -O1:    csel x8, x0, x20, le4952; -O1:    bl __atomic_compare_exchange4953    %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 14954    ret i64 %r4955}4956 4957define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {4958; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst:4959; -O0:    subs x10, x9, x84960; -O0:    csel x8, x9, x8, le4961; -O0:    bl __atomic_compare_exchange4962;4963; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst:4964; -O1:    cmp x0, x204965; -O1:    csel x8, x0, x20, le4966; -O1:    bl __atomic_compare_exchange4967    %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 14968    ret i64 %r4969}4970 4971define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) {4972; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic:4973; -O0:    subs x8, x8, x94974; -O0:    subs x11, x11, x104975; -O0:    subs x12, x12, x104976; -O0:    csel w11, w8, w11, eq4977; -O0:    ands w12, w11, #0x14978; -O0:    csel x9, x8, x9, ne4979; -O0:    ands w11, w11, #0x14980; -O0:    csel x8, x8, x10, ne4981; -O0:    bl __atomic_compare_exchange4982;4983; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic:4984; -O1:    ldp x0, x1, [x0]4985; -O1:    cmp x21, x04986; -O1:    csel x8, x1, x19, ge4987; -O1:    csel x9, x0, x21, ge4988; -O1:    bl __atomic_compare_exchange4989    %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 14990    ret i128 %r4991}4992 4993define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) {4994; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire:4995; -O0:    subs x8, x8, x94996; -O0:    subs x11, x11, x104997; -O0:    subs x12, x12, x104998; -O0:    csel w11, w8, w11, eq4999; -O0:    ands w12, w11, #0x15000; -O0:    csel x9, x8, x9, ne5001; -O0:    ands w11, w11, #0x15002; -O0:    csel x8, x8, x10, ne5003; -O0:    bl __atomic_compare_exchange5004;5005; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire:5006; -O1:    ldp x0, x1, [x0]5007; -O1:    cmp x21, x05008; -O1:    csel x8, x1, x19, ge5009; -O1:    csel x9, x0, x21, ge5010; -O1:    bl __atomic_compare_exchange5011    %r = atomicrmw min ptr %ptr, i128 %value acquire, align 15012    ret i128 %r5013}5014 5015define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) {5016; -O0-LABEL: atomicrmw_min_i128_unaligned_release:5017; -O0:    subs x8, x8, x95018; -O0:    subs x11, x11, x105019; -O0:    subs x12, x12, x105020; -O0:    csel w11, w8, w11, eq5021; -O0:    ands w12, w11, #0x15022; -O0:    csel x9, x8, x9, ne5023; -O0:    ands w11, w11, #0x15024; -O0:    csel x8, x8, x10, ne5025; -O0:    bl __atomic_compare_exchange5026;5027; -O1-LABEL: atomicrmw_min_i128_unaligned_release:5028; -O1:    ldp x0, x1, [x0]5029; -O1:    cmp x21, x05030; -O1:    csel x8, x1, x19, ge5031; -O1:    csel x9, x0, x21, ge5032; -O1:    bl __atomic_compare_exchange5033    %r = atomicrmw min ptr %ptr, i128 %value release, align 15034    ret i128 %r5035}5036 5037define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5038; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5039; -O0:    subs x8, x8, x95040; -O0:    subs x11, x11, x105041; -O0:    subs x12, x12, x105042; -O0:    csel w11, w8, w11, eq5043; -O0:    ands w12, w11, #0x15044; -O0:    csel x9, x8, x9, ne5045; -O0:    ands w11, w11, #0x15046; -O0:    csel x8, x8, x10, ne5047; -O0:    bl __atomic_compare_exchange5048;5049; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel:5050; -O1:    ldp x0, x1, [x0]5051; -O1:    cmp x21, x05052; -O1:    csel x8, x1, x19, ge5053; -O1:    csel x9, x0, x21, ge5054; -O1:    bl __atomic_compare_exchange5055    %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 15056    ret i128 %r5057}5058 5059define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5060; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5061; -O0:    subs x8, x8, x95062; -O0:    subs x11, x11, x105063; -O0:    subs x12, x12, x105064; -O0:    csel w11, w8, w11, eq5065; -O0:    ands w12, w11, #0x15066; -O0:    csel x9, x8, x9, ne5067; -O0:    ands w11, w11, #0x15068; -O0:    csel x8, x8, x10, ne5069; -O0:    bl __atomic_compare_exchange5070;5071; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst:5072; -O1:    ldp x0, x1, [x0]5073; -O1:    cmp x21, x05074; -O1:    csel x8, x1, x19, ge5075; -O1:    csel x9, x0, x21, ge5076; -O1:    bl __atomic_compare_exchange5077    %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 15078    ret i128 %r5079}5080 5081define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) {5082; CHECK-LABEL: atomicrmw_umax_i8_aligned_monotonic:5083; CHECK:    ldumaxb w1, w0, [x0]5084    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15085    ret i8 %r5086}5087 5088define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) {5089; CHECK-LABEL: atomicrmw_umax_i8_aligned_acquire:5090; CHECK:    ldumaxab w1, w0, [x0]5091    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15092    ret i8 %r5093}5094 5095define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) {5096; CHECK-LABEL: atomicrmw_umax_i8_aligned_release:5097; CHECK:    ldumaxlb w1, w0, [x0]5098    %r = atomicrmw umax ptr %ptr, i8 %value release, align 15099    ret i8 %r5100}5101 5102define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5103; CHECK-LABEL: atomicrmw_umax_i8_aligned_acq_rel:5104; CHECK:    ldumaxalb w1, w0, [x0]5105    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15106    ret i8 %r5107}5108 5109define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5110; CHECK-LABEL: atomicrmw_umax_i8_aligned_seq_cst:5111; CHECK:    ldumaxalb w1, w0, [x0]5112    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15113    ret i8 %r5114}5115 5116define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) {5117; CHECK-LABEL: atomicrmw_umax_i16_aligned_monotonic:5118; CHECK:    ldumaxh w1, w0, [x0]5119    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 25120    ret i16 %r5121}5122 5123define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) {5124; CHECK-LABEL: atomicrmw_umax_i16_aligned_acquire:5125; CHECK:    ldumaxah w1, w0, [x0]5126    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 25127    ret i16 %r5128}5129 5130define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) {5131; CHECK-LABEL: atomicrmw_umax_i16_aligned_release:5132; CHECK:    ldumaxlh w1, w0, [x0]5133    %r = atomicrmw umax ptr %ptr, i16 %value release, align 25134    ret i16 %r5135}5136 5137define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5138; CHECK-LABEL: atomicrmw_umax_i16_aligned_acq_rel:5139; CHECK:    ldumaxalh w1, w0, [x0]5140    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 25141    ret i16 %r5142}5143 5144define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5145; CHECK-LABEL: atomicrmw_umax_i16_aligned_seq_cst:5146; CHECK:    ldumaxalh w1, w0, [x0]5147    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 25148    ret i16 %r5149}5150 5151define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) {5152; CHECK-LABEL: atomicrmw_umax_i32_aligned_monotonic:5153; CHECK:    ldumax w1, w0, [x0]5154    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 45155    ret i32 %r5156}5157 5158define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) {5159; CHECK-LABEL: atomicrmw_umax_i32_aligned_acquire:5160; CHECK:    ldumaxa w1, w0, [x0]5161    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 45162    ret i32 %r5163}5164 5165define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) {5166; CHECK-LABEL: atomicrmw_umax_i32_aligned_release:5167; CHECK:    ldumaxl w1, w0, [x0]5168    %r = atomicrmw umax ptr %ptr, i32 %value release, align 45169    ret i32 %r5170}5171 5172define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5173; CHECK-LABEL: atomicrmw_umax_i32_aligned_acq_rel:5174; CHECK:    ldumaxal w1, w0, [x0]5175    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 45176    ret i32 %r5177}5178 5179define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5180; CHECK-LABEL: atomicrmw_umax_i32_aligned_seq_cst:5181; CHECK:    ldumaxal w1, w0, [x0]5182    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 45183    ret i32 %r5184}5185 5186define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) {5187; CHECK-LABEL: atomicrmw_umax_i64_aligned_monotonic:5188; CHECK:    ldumax x1, x0, [x0]5189    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 85190    ret i64 %r5191}5192 5193define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) {5194; CHECK-LABEL: atomicrmw_umax_i64_aligned_acquire:5195; CHECK:    ldumaxa x1, x0, [x0]5196    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 85197    ret i64 %r5198}5199 5200define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) {5201; CHECK-LABEL: atomicrmw_umax_i64_aligned_release:5202; CHECK:    ldumaxl x1, x0, [x0]5203    %r = atomicrmw umax ptr %ptr, i64 %value release, align 85204    ret i64 %r5205}5206 5207define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5208; CHECK-LABEL: atomicrmw_umax_i64_aligned_acq_rel:5209; CHECK:    ldumaxal x1, x0, [x0]5210    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 85211    ret i64 %r5212}5213 5214define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5215; CHECK-LABEL: atomicrmw_umax_i64_aligned_seq_cst:5216; CHECK:    ldumaxal x1, x0, [x0]5217    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 85218    ret i64 %r5219}5220 5221define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) {5222; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic:5223; -O0:    subs x9, x9, x125224; -O0:    subs x11, x11, x105225; -O0:    subs x13, x13, x105226; -O0:    csel w11, w9, w11, eq5227; -O0:    ands w13, w11, #0x15228; -O0:    csel x2, x9, x12, ne5229; -O0:    ands w11, w11, #0x15230; -O0:    csel x9, x9, x10, ne5231; -O0:    casp x0, x1, x2, x3, [x8]5232; -O0:    eor x8, x10, x85233; -O0:    eor x11, x9, x115234; -O0:    orr x8, x8, x115235; -O0:    subs x8, x8, #05236;5237; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic:5238; -O1:    ldp x4, x5, [x0]5239; -O1:    cmp x2, x45240; -O1:    csel x9, x7, x3, lo5241; -O1:    csel x8, x4, x2, lo5242; -O1:    casp x4, x5, x8, x9, [x0]5243; -O1:    cmp x5, x75244; -O1:    ccmp x4, x6, #0, eq5245    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 165246    ret i128 %r5247}5248 5249define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) {5250; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire:5251; -O0:    subs x9, x9, x125252; -O0:    subs x11, x11, x105253; -O0:    subs x13, x13, x105254; -O0:    csel w11, w9, w11, eq5255; -O0:    ands w13, w11, #0x15256; -O0:    csel x2, x9, x12, ne5257; -O0:    ands w11, w11, #0x15258; -O0:    csel x9, x9, x10, ne5259; -O0:    caspa x0, x1, x2, x3, [x8]5260; -O0:    eor x8, x10, x85261; -O0:    eor x11, x9, x115262; -O0:    orr x8, x8, x115263; -O0:    subs x8, x8, #05264;5265; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire:5266; -O1:    ldp x4, x5, [x0]5267; -O1:    cmp x2, x45268; -O1:    csel x9, x7, x3, lo5269; -O1:    csel x8, x4, x2, lo5270; -O1:    caspa x4, x5, x8, x9, [x0]5271; -O1:    cmp x5, x75272; -O1:    ccmp x4, x6, #0, eq5273    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 165274    ret i128 %r5275}5276 5277define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) {5278; -O0-LABEL: atomicrmw_umax_i128_aligned_release:5279; -O0:    subs x9, x9, x125280; -O0:    subs x11, x11, x105281; -O0:    subs x13, x13, x105282; -O0:    csel w11, w9, w11, eq5283; -O0:    ands w13, w11, #0x15284; -O0:    csel x2, x9, x12, ne5285; -O0:    ands w11, w11, #0x15286; -O0:    csel x9, x9, x10, ne5287; -O0:    caspl x0, x1, x2, x3, [x8]5288; -O0:    eor x8, x10, x85289; -O0:    eor x11, x9, x115290; -O0:    orr x8, x8, x115291; -O0:    subs x8, x8, #05292;5293; -O1-LABEL: atomicrmw_umax_i128_aligned_release:5294; -O1:    ldp x4, x5, [x0]5295; -O1:    cmp x2, x45296; -O1:    csel x9, x7, x3, lo5297; -O1:    csel x8, x4, x2, lo5298; -O1:    caspl x4, x5, x8, x9, [x0]5299; -O1:    cmp x5, x75300; -O1:    ccmp x4, x6, #0, eq5301    %r = atomicrmw umax ptr %ptr, i128 %value release, align 165302    ret i128 %r5303}5304 5305define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5306; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel:5307; -O0:    subs x9, x9, x125308; -O0:    subs x11, x11, x105309; -O0:    subs x13, x13, x105310; -O0:    csel w11, w9, w11, eq5311; -O0:    ands w13, w11, #0x15312; -O0:    csel x2, x9, x12, ne5313; -O0:    ands w11, w11, #0x15314; -O0:    csel x9, x9, x10, ne5315; -O0:    caspal x0, x1, x2, x3, [x8]5316; -O0:    eor x8, x10, x85317; -O0:    eor x11, x9, x115318; -O0:    orr x8, x8, x115319; -O0:    subs x8, x8, #05320;5321; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel:5322; -O1:    ldp x4, x5, [x0]5323; -O1:    cmp x2, x45324; -O1:    csel x9, x7, x3, lo5325; -O1:    csel x8, x4, x2, lo5326; -O1:    caspal x4, x5, x8, x9, [x0]5327; -O1:    cmp x5, x75328; -O1:    ccmp x4, x6, #0, eq5329    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 165330    ret i128 %r5331}5332 5333define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5334; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst:5335; -O0:    subs x9, x9, x125336; -O0:    subs x11, x11, x105337; -O0:    subs x13, x13, x105338; -O0:    csel w11, w9, w11, eq5339; -O0:    ands w13, w11, #0x15340; -O0:    csel x2, x9, x12, ne5341; -O0:    ands w11, w11, #0x15342; -O0:    csel x9, x9, x10, ne5343; -O0:    caspal x0, x1, x2, x3, [x8]5344; -O0:    eor x8, x10, x85345; -O0:    eor x11, x9, x115346; -O0:    orr x8, x8, x115347; -O0:    subs x8, x8, #05348;5349; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst:5350; -O1:    ldp x4, x5, [x0]5351; -O1:    cmp x2, x45352; -O1:    csel x9, x7, x3, lo5353; -O1:    csel x8, x4, x2, lo5354; -O1:    caspal x4, x5, x8, x9, [x0]5355; -O1:    cmp x5, x75356; -O1:    ccmp x4, x6, #0, eq5357    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 165358    ret i128 %r5359}5360 5361define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) {5362; CHECK-LABEL: atomicrmw_umax_i8_unaligned_monotonic:5363; CHECK:    ldumaxb w1, w0, [x0]5364    %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 15365    ret i8 %r5366}5367 5368define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) {5369; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acquire:5370; CHECK:    ldumaxab w1, w0, [x0]5371    %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 15372    ret i8 %r5373}5374 5375define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) {5376; CHECK-LABEL: atomicrmw_umax_i8_unaligned_release:5377; CHECK:    ldumaxlb w1, w0, [x0]5378    %r = atomicrmw umax ptr %ptr, i8 %value release, align 15379    ret i8 %r5380}5381 5382define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {5383; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acq_rel:5384; CHECK:    ldumaxalb w1, w0, [x0]5385    %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 15386    ret i8 %r5387}5388 5389define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {5390; CHECK-LABEL: atomicrmw_umax_i8_unaligned_seq_cst:5391; CHECK:    ldumaxalb w1, w0, [x0]5392    %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 15393    ret i8 %r5394}5395 5396define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) {5397; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic:5398; -O0:    subs w10, w10, w8, uxth5399; -O0:    csel w8, w9, w8, hi5400; -O0:    bl __atomic_compare_exchange5401;5402; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic:5403; -O1:    and w8, w0, #0xffff5404; -O1:    cmp w8, w20, uxth5405; -O1:    csel w8, w0, w20, hi5406; -O1:    bl __atomic_compare_exchange5407    %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 15408    ret i16 %r5409}5410 5411define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) {5412; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire:5413; -O0:    subs w10, w10, w8, uxth5414; -O0:    csel w8, w9, w8, hi5415; -O0:    bl __atomic_compare_exchange5416;5417; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire:5418; -O1:    and w8, w0, #0xffff5419; -O1:    cmp w8, w20, uxth5420; -O1:    csel w8, w0, w20, hi5421; -O1:    bl __atomic_compare_exchange5422    %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 15423    ret i16 %r5424}5425 5426define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) {5427; -O0-LABEL: atomicrmw_umax_i16_unaligned_release:5428; -O0:    subs w10, w10, w8, uxth5429; -O0:    csel w8, w9, w8, hi5430; -O0:    bl __atomic_compare_exchange5431;5432; -O1-LABEL: atomicrmw_umax_i16_unaligned_release:5433; -O1:    and w8, w0, #0xffff5434; -O1:    cmp w8, w20, uxth5435; -O1:    csel w8, w0, w20, hi5436; -O1:    bl __atomic_compare_exchange5437    %r = atomicrmw umax ptr %ptr, i16 %value release, align 15438    ret i16 %r5439}5440 5441define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {5442; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:5443; -O0:    subs w10, w10, w8, uxth5444; -O0:    csel w8, w9, w8, hi5445; -O0:    bl __atomic_compare_exchange5446;5447; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel:5448; -O1:    and w8, w0, #0xffff5449; -O1:    cmp w8, w20, uxth5450; -O1:    csel w8, w0, w20, hi5451; -O1:    bl __atomic_compare_exchange5452    %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 15453    ret i16 %r5454}5455 5456define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {5457; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:5458; -O0:    subs w10, w10, w8, uxth5459; -O0:    csel w8, w9, w8, hi5460; -O0:    bl __atomic_compare_exchange5461;5462; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst:5463; -O1:    and w8, w0, #0xffff5464; -O1:    cmp w8, w20, uxth5465; -O1:    csel w8, w0, w20, hi5466; -O1:    bl __atomic_compare_exchange5467    %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 15468    ret i16 %r5469}5470 5471define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) {5472; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic:5473; -O0:    subs w10, w9, w85474; -O0:    csel w8, w9, w8, hi5475; -O0:    bl __atomic_compare_exchange5476;5477; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic:5478; -O1:    cmp w0, w205479; -O1:    csel w8, w0, w20, hi5480; -O1:    bl __atomic_compare_exchange5481    %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 15482    ret i32 %r5483}5484 5485define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) {5486; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire:5487; -O0:    subs w10, w9, w85488; -O0:    csel w8, w9, w8, hi5489; -O0:    bl __atomic_compare_exchange5490;5491; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire:5492; -O1:    cmp w0, w205493; -O1:    csel w8, w0, w20, hi5494; -O1:    bl __atomic_compare_exchange5495    %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 15496    ret i32 %r5497}5498 5499define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) {5500; -O0-LABEL: atomicrmw_umax_i32_unaligned_release:5501; -O0:    subs w10, w9, w85502; -O0:    csel w8, w9, w8, hi5503; -O0:    bl __atomic_compare_exchange5504;5505; -O1-LABEL: atomicrmw_umax_i32_unaligned_release:5506; -O1:    cmp w0, w205507; -O1:    csel w8, w0, w20, hi5508; -O1:    bl __atomic_compare_exchange5509    %r = atomicrmw umax ptr %ptr, i32 %value release, align 15510    ret i32 %r5511}5512 5513define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {5514; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:5515; -O0:    subs w10, w9, w85516; -O0:    csel w8, w9, w8, hi5517; -O0:    bl __atomic_compare_exchange5518;5519; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel:5520; -O1:    cmp w0, w205521; -O1:    csel w8, w0, w20, hi5522; -O1:    bl __atomic_compare_exchange5523    %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 15524    ret i32 %r5525}5526 5527define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {5528; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:5529; -O0:    subs w10, w9, w85530; -O0:    csel w8, w9, w8, hi5531; -O0:    bl __atomic_compare_exchange5532;5533; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst:5534; -O1:    cmp w0, w205535; -O1:    csel w8, w0, w20, hi5536; -O1:    bl __atomic_compare_exchange5537    %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 15538    ret i32 %r5539}5540 5541define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) {5542; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic:5543; -O0:    subs x10, x9, x85544; -O0:    csel x8, x9, x8, hi5545; -O0:    bl __atomic_compare_exchange5546;5547; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic:5548; -O1:    cmp x0, x205549; -O1:    csel x8, x0, x20, hi5550; -O1:    bl __atomic_compare_exchange5551    %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 15552    ret i64 %r5553}5554 5555define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) {5556; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire:5557; -O0:    subs x10, x9, x85558; -O0:    csel x8, x9, x8, hi5559; -O0:    bl __atomic_compare_exchange5560;5561; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire:5562; -O1:    cmp x0, x205563; -O1:    csel x8, x0, x20, hi5564; -O1:    bl __atomic_compare_exchange5565    %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 15566    ret i64 %r5567}5568 5569define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) {5570; -O0-LABEL: atomicrmw_umax_i64_unaligned_release:5571; -O0:    subs x10, x9, x85572; -O0:    csel x8, x9, x8, hi5573; -O0:    bl __atomic_compare_exchange5574;5575; -O1-LABEL: atomicrmw_umax_i64_unaligned_release:5576; -O1:    cmp x0, x205577; -O1:    csel x8, x0, x20, hi5578; -O1:    bl __atomic_compare_exchange5579    %r = atomicrmw umax ptr %ptr, i64 %value release, align 15580    ret i64 %r5581}5582 5583define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {5584; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:5585; -O0:    subs x10, x9, x85586; -O0:    csel x8, x9, x8, hi5587; -O0:    bl __atomic_compare_exchange5588;5589; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel:5590; -O1:    cmp x0, x205591; -O1:    csel x8, x0, x20, hi5592; -O1:    bl __atomic_compare_exchange5593    %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 15594    ret i64 %r5595}5596 5597define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {5598; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:5599; -O0:    subs x10, x9, x85600; -O0:    csel x8, x9, x8, hi5601; -O0:    bl __atomic_compare_exchange5602;5603; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst:5604; -O1:    cmp x0, x205605; -O1:    csel x8, x0, x20, hi5606; -O1:    bl __atomic_compare_exchange5607    %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 15608    ret i64 %r5609}5610 5611define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) {5612; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic:5613; -O0:    subs x8, x8, x95614; -O0:    subs x11, x11, x105615; -O0:    subs x12, x12, x105616; -O0:    csel w11, w8, w11, eq5617; -O0:    ands w12, w11, #0x15618; -O0:    csel x9, x8, x9, ne5619; -O0:    ands w11, w11, #0x15620; -O0:    csel x8, x8, x10, ne5621; -O0:    bl __atomic_compare_exchange5622;5623; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic:5624; -O1:    ldp x0, x1, [x0]5625; -O1:    cmp x21, x05626; -O1:    csel x8, x1, x19, lo5627; -O1:    csel x9, x0, x21, lo5628; -O1:    bl __atomic_compare_exchange5629    %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 15630    ret i128 %r5631}5632 5633define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) {5634; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire:5635; -O0:    subs x8, x8, x95636; -O0:    subs x11, x11, x105637; -O0:    subs x12, x12, x105638; -O0:    csel w11, w8, w11, eq5639; -O0:    ands w12, w11, #0x15640; -O0:    csel x9, x8, x9, ne5641; -O0:    ands w11, w11, #0x15642; -O0:    csel x8, x8, x10, ne5643; -O0:    bl __atomic_compare_exchange5644;5645; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire:5646; -O1:    ldp x0, x1, [x0]5647; -O1:    cmp x21, x05648; -O1:    csel x8, x1, x19, lo5649; -O1:    csel x9, x0, x21, lo5650; -O1:    bl __atomic_compare_exchange5651    %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 15652    ret i128 %r5653}5654 5655define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) {5656; -O0-LABEL: atomicrmw_umax_i128_unaligned_release:5657; -O0:    subs x8, x8, x95658; -O0:    subs x11, x11, x105659; -O0:    subs x12, x12, x105660; -O0:    csel w11, w8, w11, eq5661; -O0:    ands w12, w11, #0x15662; -O0:    csel x9, x8, x9, ne5663; -O0:    ands w11, w11, #0x15664; -O0:    csel x8, x8, x10, ne5665; -O0:    bl __atomic_compare_exchange5666;5667; -O1-LABEL: atomicrmw_umax_i128_unaligned_release:5668; -O1:    ldp x0, x1, [x0]5669; -O1:    cmp x21, x05670; -O1:    csel x8, x1, x19, lo5671; -O1:    csel x9, x0, x21, lo5672; -O1:    bl __atomic_compare_exchange5673    %r = atomicrmw umax ptr %ptr, i128 %value release, align 15674    ret i128 %r5675}5676 5677define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {5678; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:5679; -O0:    subs x8, x8, x95680; -O0:    subs x11, x11, x105681; -O0:    subs x12, x12, x105682; -O0:    csel w11, w8, w11, eq5683; -O0:    ands w12, w11, #0x15684; -O0:    csel x9, x8, x9, ne5685; -O0:    ands w11, w11, #0x15686; -O0:    csel x8, x8, x10, ne5687; -O0:    bl __atomic_compare_exchange5688;5689; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel:5690; -O1:    ldp x0, x1, [x0]5691; -O1:    cmp x21, x05692; -O1:    csel x8, x1, x19, lo5693; -O1:    csel x9, x0, x21, lo5694; -O1:    bl __atomic_compare_exchange5695    %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 15696    ret i128 %r5697}5698 5699define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {5700; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:5701; -O0:    subs x8, x8, x95702; -O0:    subs x11, x11, x105703; -O0:    subs x12, x12, x105704; -O0:    csel w11, w8, w11, eq5705; -O0:    ands w12, w11, #0x15706; -O0:    csel x9, x8, x9, ne5707; -O0:    ands w11, w11, #0x15708; -O0:    csel x8, x8, x10, ne5709; -O0:    bl __atomic_compare_exchange5710;5711; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst:5712; -O1:    ldp x0, x1, [x0]5713; -O1:    cmp x21, x05714; -O1:    csel x8, x1, x19, lo5715; -O1:    csel x9, x0, x21, lo5716; -O1:    bl __atomic_compare_exchange5717    %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 15718    ret i128 %r5719}5720 5721define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) {5722; CHECK-LABEL: atomicrmw_umin_i8_aligned_monotonic:5723; CHECK:    lduminb w1, w0, [x0]5724    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 15725    ret i8 %r5726}5727 5728define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) {5729; CHECK-LABEL: atomicrmw_umin_i8_aligned_acquire:5730; CHECK:    lduminab w1, w0, [x0]5731    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 15732    ret i8 %r5733}5734 5735define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) {5736; CHECK-LABEL: atomicrmw_umin_i8_aligned_release:5737; CHECK:    lduminlb w1, w0, [x0]5738    %r = atomicrmw umin ptr %ptr, i8 %value release, align 15739    ret i8 %r5740}5741 5742define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) {5743; CHECK-LABEL: atomicrmw_umin_i8_aligned_acq_rel:5744; CHECK:    lduminalb w1, w0, [x0]5745    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 15746    ret i8 %r5747}5748 5749define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) {5750; CHECK-LABEL: atomicrmw_umin_i8_aligned_seq_cst:5751; CHECK:    lduminalb w1, w0, [x0]5752    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 15753    ret i8 %r5754}5755 5756define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) {5757; CHECK-LABEL: atomicrmw_umin_i16_aligned_monotonic:5758; CHECK:    lduminh w1, w0, [x0]5759    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 25760    ret i16 %r5761}5762 5763define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) {5764; CHECK-LABEL: atomicrmw_umin_i16_aligned_acquire:5765; CHECK:    lduminah w1, w0, [x0]5766    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 25767    ret i16 %r5768}5769 5770define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) {5771; CHECK-LABEL: atomicrmw_umin_i16_aligned_release:5772; CHECK:    lduminlh w1, w0, [x0]5773    %r = atomicrmw umin ptr %ptr, i16 %value release, align 25774    ret i16 %r5775}5776 5777define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) {5778; CHECK-LABEL: atomicrmw_umin_i16_aligned_acq_rel:5779; CHECK:    lduminalh w1, w0, [x0]5780    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 25781    ret i16 %r5782}5783 5784define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) {5785; CHECK-LABEL: atomicrmw_umin_i16_aligned_seq_cst:5786; CHECK:    lduminalh w1, w0, [x0]5787    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 25788    ret i16 %r5789}5790 5791define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) {5792; CHECK-LABEL: atomicrmw_umin_i32_aligned_monotonic:5793; CHECK:    ldumin w1, w0, [x0]5794    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 45795    ret i32 %r5796}5797 5798define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) {5799; CHECK-LABEL: atomicrmw_umin_i32_aligned_acquire:5800; CHECK:    ldumina w1, w0, [x0]5801    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 45802    ret i32 %r5803}5804 5805define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) {5806; CHECK-LABEL: atomicrmw_umin_i32_aligned_release:5807; CHECK:    lduminl w1, w0, [x0]5808    %r = atomicrmw umin ptr %ptr, i32 %value release, align 45809    ret i32 %r5810}5811 5812define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) {5813; CHECK-LABEL: atomicrmw_umin_i32_aligned_acq_rel:5814; CHECK:    lduminal w1, w0, [x0]5815    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 45816    ret i32 %r5817}5818 5819define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) {5820; CHECK-LABEL: atomicrmw_umin_i32_aligned_seq_cst:5821; CHECK:    lduminal w1, w0, [x0]5822    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 45823    ret i32 %r5824}5825 5826define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) {5827; CHECK-LABEL: atomicrmw_umin_i64_aligned_monotonic:5828; CHECK:    ldumin x1, x0, [x0]5829    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 85830    ret i64 %r5831}5832 5833define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) {5834; CHECK-LABEL: atomicrmw_umin_i64_aligned_acquire:5835; CHECK:    ldumina x1, x0, [x0]5836    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 85837    ret i64 %r5838}5839 5840define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) {5841; CHECK-LABEL: atomicrmw_umin_i64_aligned_release:5842; CHECK:    lduminl x1, x0, [x0]5843    %r = atomicrmw umin ptr %ptr, i64 %value release, align 85844    ret i64 %r5845}5846 5847define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) {5848; CHECK-LABEL: atomicrmw_umin_i64_aligned_acq_rel:5849; CHECK:    lduminal x1, x0, [x0]5850    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 85851    ret i64 %r5852}5853 5854define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) {5855; CHECK-LABEL: atomicrmw_umin_i64_aligned_seq_cst:5856; CHECK:    lduminal x1, x0, [x0]5857    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 85858    ret i64 %r5859}5860 5861define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) {5862; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic:5863; -O0:    subs x9, x9, x125864; -O0:    subs x11, x11, x105865; -O0:    subs x13, x13, x105866; -O0:    csel w11, w9, w11, eq5867; -O0:    ands w13, w11, #0x15868; -O0:    csel x2, x9, x12, ne5869; -O0:    ands w11, w11, #0x15870; -O0:    csel x9, x9, x10, ne5871; -O0:    casp x0, x1, x2, x3, [x8]5872; -O0:    eor x8, x10, x85873; -O0:    eor x11, x9, x115874; -O0:    orr x8, x8, x115875; -O0:    subs x8, x8, #05876;5877; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic:5878; -O1:    ldp x4, x5, [x0]5879; -O1:    cmp x2, x45880; -O1:    csel x9, x7, x3, hs5881; -O1:    csel x8, x4, x2, hs5882; -O1:    casp x4, x5, x8, x9, [x0]5883; -O1:    cmp x5, x75884; -O1:    ccmp x4, x6, #0, eq5885    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 165886    ret i128 %r5887}5888 5889define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) {5890; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire:5891; -O0:    subs x9, x9, x125892; -O0:    subs x11, x11, x105893; -O0:    subs x13, x13, x105894; -O0:    csel w11, w9, w11, eq5895; -O0:    ands w13, w11, #0x15896; -O0:    csel x2, x9, x12, ne5897; -O0:    ands w11, w11, #0x15898; -O0:    csel x9, x9, x10, ne5899; -O0:    caspa x0, x1, x2, x3, [x8]5900; -O0:    eor x8, x10, x85901; -O0:    eor x11, x9, x115902; -O0:    orr x8, x8, x115903; -O0:    subs x8, x8, #05904;5905; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire:5906; -O1:    ldp x4, x5, [x0]5907; -O1:    cmp x2, x45908; -O1:    csel x9, x7, x3, hs5909; -O1:    csel x8, x4, x2, hs5910; -O1:    caspa x4, x5, x8, x9, [x0]5911; -O1:    cmp x5, x75912; -O1:    ccmp x4, x6, #0, eq5913    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 165914    ret i128 %r5915}5916 5917define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) {5918; -O0-LABEL: atomicrmw_umin_i128_aligned_release:5919; -O0:    subs x9, x9, x125920; -O0:    subs x11, x11, x105921; -O0:    subs x13, x13, x105922; -O0:    csel w11, w9, w11, eq5923; -O0:    ands w13, w11, #0x15924; -O0:    csel x2, x9, x12, ne5925; -O0:    ands w11, w11, #0x15926; -O0:    csel x9, x9, x10, ne5927; -O0:    caspl x0, x1, x2, x3, [x8]5928; -O0:    eor x8, x10, x85929; -O0:    eor x11, x9, x115930; -O0:    orr x8, x8, x115931; -O0:    subs x8, x8, #05932;5933; -O1-LABEL: atomicrmw_umin_i128_aligned_release:5934; -O1:    ldp x4, x5, [x0]5935; -O1:    cmp x2, x45936; -O1:    csel x9, x7, x3, hs5937; -O1:    csel x8, x4, x2, hs5938; -O1:    caspl x4, x5, x8, x9, [x0]5939; -O1:    cmp x5, x75940; -O1:    ccmp x4, x6, #0, eq5941    %r = atomicrmw umin ptr %ptr, i128 %value release, align 165942    ret i128 %r5943}5944 5945define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) {5946; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel:5947; -O0:    subs x9, x9, x125948; -O0:    subs x11, x11, x105949; -O0:    subs x13, x13, x105950; -O0:    csel w11, w9, w11, eq5951; -O0:    ands w13, w11, #0x15952; -O0:    csel x2, x9, x12, ne5953; -O0:    ands w11, w11, #0x15954; -O0:    csel x9, x9, x10, ne5955; -O0:    caspal x0, x1, x2, x3, [x8]5956; -O0:    eor x8, x10, x85957; -O0:    eor x11, x9, x115958; -O0:    orr x8, x8, x115959; -O0:    subs x8, x8, #05960;5961; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel:5962; -O1:    ldp x4, x5, [x0]5963; -O1:    cmp x2, x45964; -O1:    csel x9, x7, x3, hs5965; -O1:    csel x8, x4, x2, hs5966; -O1:    caspal x4, x5, x8, x9, [x0]5967; -O1:    cmp x5, x75968; -O1:    ccmp x4, x6, #0, eq5969    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 165970    ret i128 %r5971}5972 5973define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) {5974; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst:5975; -O0:    subs x9, x9, x125976; -O0:    subs x11, x11, x105977; -O0:    subs x13, x13, x105978; -O0:    csel w11, w9, w11, eq5979; -O0:    ands w13, w11, #0x15980; -O0:    csel x2, x9, x12, ne5981; -O0:    ands w11, w11, #0x15982; -O0:    csel x9, x9, x10, ne5983; -O0:    caspal x0, x1, x2, x3, [x8]5984; -O0:    eor x8, x10, x85985; -O0:    eor x11, x9, x115986; -O0:    orr x8, x8, x115987; -O0:    subs x8, x8, #05988;5989; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst:5990; -O1:    ldp x4, x5, [x0]5991; -O1:    cmp x2, x45992; -O1:    csel x9, x7, x3, hs5993; -O1:    csel x8, x4, x2, hs5994; -O1:    caspal x4, x5, x8, x9, [x0]5995; -O1:    cmp x5, x75996; -O1:    ccmp x4, x6, #0, eq5997    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 165998    ret i128 %r5999}6000 6001define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) {6002; CHECK-LABEL: atomicrmw_umin_i8_unaligned_monotonic:6003; CHECK:    lduminb w1, w0, [x0]6004    %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 16005    ret i8 %r6006}6007 6008define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) {6009; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acquire:6010; CHECK:    lduminab w1, w0, [x0]6011    %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 16012    ret i8 %r6013}6014 6015define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) {6016; CHECK-LABEL: atomicrmw_umin_i8_unaligned_release:6017; CHECK:    lduminlb w1, w0, [x0]6018    %r = atomicrmw umin ptr %ptr, i8 %value release, align 16019    ret i8 %r6020}6021 6022define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) {6023; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acq_rel:6024; CHECK:    lduminalb w1, w0, [x0]6025    %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 16026    ret i8 %r6027}6028 6029define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) {6030; CHECK-LABEL: atomicrmw_umin_i8_unaligned_seq_cst:6031; CHECK:    lduminalb w1, w0, [x0]6032    %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 16033    ret i8 %r6034}6035 6036define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) {6037; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic:6038; -O0:    subs w10, w10, w8, uxth6039; -O0:    csel w8, w9, w8, ls6040; -O0:    bl __atomic_compare_exchange6041;6042; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic:6043; -O1:    and w8, w0, #0xffff6044; -O1:    cmp w8, w20, uxth6045; -O1:    csel w8, w0, w20, ls6046; -O1:    bl __atomic_compare_exchange6047    %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 16048    ret i16 %r6049}6050 6051define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) {6052; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire:6053; -O0:    subs w10, w10, w8, uxth6054; -O0:    csel w8, w9, w8, ls6055; -O0:    bl __atomic_compare_exchange6056;6057; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire:6058; -O1:    and w8, w0, #0xffff6059; -O1:    cmp w8, w20, uxth6060; -O1:    csel w8, w0, w20, ls6061; -O1:    bl __atomic_compare_exchange6062    %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 16063    ret i16 %r6064}6065 6066define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) {6067; -O0-LABEL: atomicrmw_umin_i16_unaligned_release:6068; -O0:    subs w10, w10, w8, uxth6069; -O0:    csel w8, w9, w8, ls6070; -O0:    bl __atomic_compare_exchange6071;6072; -O1-LABEL: atomicrmw_umin_i16_unaligned_release:6073; -O1:    and w8, w0, #0xffff6074; -O1:    cmp w8, w20, uxth6075; -O1:    csel w8, w0, w20, ls6076; -O1:    bl __atomic_compare_exchange6077    %r = atomicrmw umin ptr %ptr, i16 %value release, align 16078    ret i16 %r6079}6080 6081define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) {6082; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:6083; -O0:    subs w10, w10, w8, uxth6084; -O0:    csel w8, w9, w8, ls6085; -O0:    bl __atomic_compare_exchange6086;6087; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel:6088; -O1:    and w8, w0, #0xffff6089; -O1:    cmp w8, w20, uxth6090; -O1:    csel w8, w0, w20, ls6091; -O1:    bl __atomic_compare_exchange6092    %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 16093    ret i16 %r6094}6095 6096define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) {6097; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:6098; -O0:    subs w10, w10, w8, uxth6099; -O0:    csel w8, w9, w8, ls6100; -O0:    bl __atomic_compare_exchange6101;6102; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst:6103; -O1:    and w8, w0, #0xffff6104; -O1:    cmp w8, w20, uxth6105; -O1:    csel w8, w0, w20, ls6106; -O1:    bl __atomic_compare_exchange6107    %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 16108    ret i16 %r6109}6110 6111define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) {6112; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic:6113; -O0:    subs w10, w9, w86114; -O0:    csel w8, w9, w8, ls6115; -O0:    bl __atomic_compare_exchange6116;6117; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic:6118; -O1:    cmp w0, w206119; -O1:    csel w8, w0, w20, ls6120; -O1:    bl __atomic_compare_exchange6121    %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 16122    ret i32 %r6123}6124 6125define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) {6126; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire:6127; -O0:    subs w10, w9, w86128; -O0:    csel w8, w9, w8, ls6129; -O0:    bl __atomic_compare_exchange6130;6131; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire:6132; -O1:    cmp w0, w206133; -O1:    csel w8, w0, w20, ls6134; -O1:    bl __atomic_compare_exchange6135    %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 16136    ret i32 %r6137}6138 6139define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) {6140; -O0-LABEL: atomicrmw_umin_i32_unaligned_release:6141; -O0:    subs w10, w9, w86142; -O0:    csel w8, w9, w8, ls6143; -O0:    bl __atomic_compare_exchange6144;6145; -O1-LABEL: atomicrmw_umin_i32_unaligned_release:6146; -O1:    cmp w0, w206147; -O1:    csel w8, w0, w20, ls6148; -O1:    bl __atomic_compare_exchange6149    %r = atomicrmw umin ptr %ptr, i32 %value release, align 16150    ret i32 %r6151}6152 6153define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) {6154; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:6155; -O0:    subs w10, w9, w86156; -O0:    csel w8, w9, w8, ls6157; -O0:    bl __atomic_compare_exchange6158;6159; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel:6160; -O1:    cmp w0, w206161; -O1:    csel w8, w0, w20, ls6162; -O1:    bl __atomic_compare_exchange6163    %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 16164    ret i32 %r6165}6166 6167define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) {6168; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:6169; -O0:    subs w10, w9, w86170; -O0:    csel w8, w9, w8, ls6171; -O0:    bl __atomic_compare_exchange6172;6173; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst:6174; -O1:    cmp w0, w206175; -O1:    csel w8, w0, w20, ls6176; -O1:    bl __atomic_compare_exchange6177    %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 16178    ret i32 %r6179}6180 6181define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) {6182; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic:6183; -O0:    subs x10, x9, x86184; -O0:    csel x8, x9, x8, ls6185; -O0:    bl __atomic_compare_exchange6186;6187; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic:6188; -O1:    cmp x0, x206189; -O1:    csel x8, x0, x20, ls6190; -O1:    bl __atomic_compare_exchange6191    %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 16192    ret i64 %r6193}6194 6195define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) {6196; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire:6197; -O0:    subs x10, x9, x86198; -O0:    csel x8, x9, x8, ls6199; -O0:    bl __atomic_compare_exchange6200;6201; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire:6202; -O1:    cmp x0, x206203; -O1:    csel x8, x0, x20, ls6204; -O1:    bl __atomic_compare_exchange6205    %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 16206    ret i64 %r6207}6208 6209define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) {6210; -O0-LABEL: atomicrmw_umin_i64_unaligned_release:6211; -O0:    subs x10, x9, x86212; -O0:    csel x8, x9, x8, ls6213; -O0:    bl __atomic_compare_exchange6214;6215; -O1-LABEL: atomicrmw_umin_i64_unaligned_release:6216; -O1:    cmp x0, x206217; -O1:    csel x8, x0, x20, ls6218; -O1:    bl __atomic_compare_exchange6219    %r = atomicrmw umin ptr %ptr, i64 %value release, align 16220    ret i64 %r6221}6222 6223define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) {6224; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:6225; -O0:    subs x10, x9, x86226; -O0:    csel x8, x9, x8, ls6227; -O0:    bl __atomic_compare_exchange6228;6229; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel:6230; -O1:    cmp x0, x206231; -O1:    csel x8, x0, x20, ls6232; -O1:    bl __atomic_compare_exchange6233    %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 16234    ret i64 %r6235}6236 6237define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) {6238; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:6239; -O0:    subs x10, x9, x86240; -O0:    csel x8, x9, x8, ls6241; -O0:    bl __atomic_compare_exchange6242;6243; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst:6244; -O1:    cmp x0, x206245; -O1:    csel x8, x0, x20, ls6246; -O1:    bl __atomic_compare_exchange6247    %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 16248    ret i64 %r6249}6250 6251define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) {6252; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic:6253; -O0:    subs x8, x8, x96254; -O0:    subs x11, x11, x106255; -O0:    subs x12, x12, x106256; -O0:    csel w11, w8, w11, eq6257; -O0:    ands w12, w11, #0x16258; -O0:    csel x9, x8, x9, ne6259; -O0:    ands w11, w11, #0x16260; -O0:    csel x8, x8, x10, ne6261; -O0:    bl __atomic_compare_exchange6262;6263; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic:6264; -O1:    ldp x0, x1, [x0]6265; -O1:    cmp x21, x06266; -O1:    csel x8, x1, x19, hs6267; -O1:    csel x9, x0, x21, hs6268; -O1:    bl __atomic_compare_exchange6269    %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 16270    ret i128 %r6271}6272 6273define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) {6274; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire:6275; -O0:    subs x8, x8, x96276; -O0:    subs x11, x11, x106277; -O0:    subs x12, x12, x106278; -O0:    csel w11, w8, w11, eq6279; -O0:    ands w12, w11, #0x16280; -O0:    csel x9, x8, x9, ne6281; -O0:    ands w11, w11, #0x16282; -O0:    csel x8, x8, x10, ne6283; -O0:    bl __atomic_compare_exchange6284;6285; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire:6286; -O1:    ldp x0, x1, [x0]6287; -O1:    cmp x21, x06288; -O1:    csel x8, x1, x19, hs6289; -O1:    csel x9, x0, x21, hs6290; -O1:    bl __atomic_compare_exchange6291    %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 16292    ret i128 %r6293}6294 6295define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) {6296; -O0-LABEL: atomicrmw_umin_i128_unaligned_release:6297; -O0:    subs x8, x8, x96298; -O0:    subs x11, x11, x106299; -O0:    subs x12, x12, x106300; -O0:    csel w11, w8, w11, eq6301; -O0:    ands w12, w11, #0x16302; -O0:    csel x9, x8, x9, ne6303; -O0:    ands w11, w11, #0x16304; -O0:    csel x8, x8, x10, ne6305; -O0:    bl __atomic_compare_exchange6306;6307; -O1-LABEL: atomicrmw_umin_i128_unaligned_release:6308; -O1:    ldp x0, x1, [x0]6309; -O1:    cmp x21, x06310; -O1:    csel x8, x1, x19, hs6311; -O1:    csel x9, x0, x21, hs6312; -O1:    bl __atomic_compare_exchange6313    %r = atomicrmw umin ptr %ptr, i128 %value release, align 16314    ret i128 %r6315}6316 6317define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) {6318; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:6319; -O0:    subs x8, x8, x96320; -O0:    subs x11, x11, x106321; -O0:    subs x12, x12, x106322; -O0:    csel w11, w8, w11, eq6323; -O0:    ands w12, w11, #0x16324; -O0:    csel x9, x8, x9, ne6325; -O0:    ands w11, w11, #0x16326; -O0:    csel x8, x8, x10, ne6327; -O0:    bl __atomic_compare_exchange6328;6329; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel:6330; -O1:    ldp x0, x1, [x0]6331; -O1:    cmp x21, x06332; -O1:    csel x8, x1, x19, hs6333; -O1:    csel x9, x0, x21, hs6334; -O1:    bl __atomic_compare_exchange6335    %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 16336    ret i128 %r6337}6338 6339define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) {6340; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:6341; -O0:    subs x8, x8, x96342; -O0:    subs x11, x11, x106343; -O0:    subs x12, x12, x106344; -O0:    csel w11, w8, w11, eq6345; -O0:    ands w12, w11, #0x16346; -O0:    csel x9, x8, x9, ne6347; -O0:    ands w11, w11, #0x16348; -O0:    csel x8, x8, x10, ne6349; -O0:    bl __atomic_compare_exchange6350;6351; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst:6352; -O1:    ldp x0, x1, [x0]6353; -O1:    cmp x21, x06354; -O1:    csel x8, x1, x19, hs6355; -O1:    csel x9, x0, x21, hs6356; -O1:    bl __atomic_compare_exchange6357    %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 16358    ret i128 %r6359}6360