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