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