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.py 3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+v8.1a -O0 | FileCheck %s --check-prefixes=CHECK,-O0 4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+v8.1a -O1 | FileCheck %s --check-prefixes=CHECK,-O1 5 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 1 10 ret i8 %r 11} 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 1 17 ret i8 %r 18} 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 1 24 ret i8 %r 25} 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 1 31 ret i8 %r 32} 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 1 38 ret i8 %r 39} 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 2 45 ret i16 %r 46} 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 2 52 ret i16 %r 53} 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 2 59 ret i16 %r 60} 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 2 66 ret i16 %r 67} 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 2 73 ret i16 %r 74} 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 4 80 ret i32 %r 81} 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 4 87 ret i32 %r 88} 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 4 94 ret i32 %r 95} 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 4 101 ret i32 %r 102} 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 4 108 ret i32 %r 109} 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 8 115 ret i64 %r 116} 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 8 122 ret i64 %r 123} 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 8 129 ret i64 %r 130} 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 8 136 ret i64 %r 137} 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 8 143 ret i64 %r 144} 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: subs x11, x9, x11 150; -O0: ccmp x8, x10, #0, eq 151; 152; -O1-LABEL: atomicrmw_xchg_i128_aligned_monotonic: 153; -O1: ldp x4, x5, [x0] 154; -O1: casp x4, x5, x2, x3, [x0] 155; -O1: cmp x4, x6 156; -O1: ccmp x5, x7, #0, eq 157 %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 16 158 ret i128 %r 159} 160 161define dso_local i128 @atomicrmw_xchg_i128_aligned_acquire(ptr %ptr, i128 %value) { 162; -O0-LABEL: atomicrmw_xchg_i128_aligned_acquire: 163; -O0: caspa x0, x1, x2, x3, [x8] 164; -O0: subs x11, x9, x11 165; -O0: ccmp x8, x10, #0, eq 166; 167; -O1-LABEL: atomicrmw_xchg_i128_aligned_acquire: 168; -O1: ldp x4, x5, [x0] 169; -O1: caspa x4, x5, x2, x3, [x0] 170; -O1: cmp x4, x6 171; -O1: ccmp x5, x7, #0, eq 172 %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 16 173 ret i128 %r 174} 175 176define dso_local i128 @atomicrmw_xchg_i128_aligned_release(ptr %ptr, i128 %value) { 177; -O0-LABEL: atomicrmw_xchg_i128_aligned_release: 178; -O0: caspl x0, x1, x2, x3, [x8] 179; -O0: subs x11, x9, x11 180; -O0: ccmp x8, x10, #0, eq 181; 182; -O1-LABEL: atomicrmw_xchg_i128_aligned_release: 183; -O1: ldp x4, x5, [x0] 184; -O1: caspl x4, x5, x2, x3, [x0] 185; -O1: cmp x4, x6 186; -O1: ccmp x5, x7, #0, eq 187 %r = atomicrmw xchg ptr %ptr, i128 %value release, align 16 188 ret i128 %r 189} 190 191define dso_local i128 @atomicrmw_xchg_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 192; -O0-LABEL: atomicrmw_xchg_i128_aligned_acq_rel: 193; -O0: caspal x0, x1, x2, x3, [x8] 194; -O0: subs x11, x9, x11 195; -O0: ccmp x8, x10, #0, eq 196; 197; -O1-LABEL: atomicrmw_xchg_i128_aligned_acq_rel: 198; -O1: ldp x4, x5, [x0] 199; -O1: caspal x4, x5, x2, x3, [x0] 200; -O1: cmp x4, x6 201; -O1: ccmp x5, x7, #0, eq 202 %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 16 203 ret i128 %r 204} 205 206define dso_local i128 @atomicrmw_xchg_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 207; -O0-LABEL: atomicrmw_xchg_i128_aligned_seq_cst: 208; -O0: caspal x0, x1, x2, x3, [x8] 209; -O0: subs x11, x9, x11 210; -O0: ccmp x8, x10, #0, eq 211; 212; -O1-LABEL: atomicrmw_xchg_i128_aligned_seq_cst: 213; -O1: ldp x4, x5, [x0] 214; -O1: caspal x4, x5, x2, x3, [x0] 215; -O1: cmp x4, x6 216; -O1: ccmp x5, x7, #0, eq 217 %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 16 218 ret i128 %r 219} 220 221define dso_local i8 @atomicrmw_xchg_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 222; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_monotonic: 223; CHECK: swpb w1, w0, [x0] 224 %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 1 225 ret i8 %r 226} 227 228define dso_local i8 @atomicrmw_xchg_i8_unaligned_acquire(ptr %ptr, i8 %value) { 229; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acquire: 230; CHECK: swpab w1, w0, [x0] 231 %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 1 232 ret i8 %r 233} 234 235define dso_local i8 @atomicrmw_xchg_i8_unaligned_release(ptr %ptr, i8 %value) { 236; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_release: 237; CHECK: swplb w1, w0, [x0] 238 %r = atomicrmw xchg ptr %ptr, i8 %value release, align 1 239 ret i8 %r 240} 241 242define dso_local i8 @atomicrmw_xchg_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 243; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel: 244; CHECK: swpalb w1, w0, [x0] 245 %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 1 246 ret i8 %r 247} 248 249define dso_local i8 @atomicrmw_xchg_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 250; CHECK-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst: 251; CHECK: swpalb w1, w0, [x0] 252 %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 1 253 ret i8 %r 254} 255 256define dso_local i16 @atomicrmw_xchg_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 257; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_monotonic: 258; CHECK: bl __atomic_exchange 259 %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 1 260 ret i16 %r 261} 262 263define dso_local i16 @atomicrmw_xchg_i16_unaligned_acquire(ptr %ptr, i16 %value) { 264; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acquire: 265; CHECK: bl __atomic_exchange 266 %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 1 267 ret i16 %r 268} 269 270define dso_local i16 @atomicrmw_xchg_i16_unaligned_release(ptr %ptr, i16 %value) { 271; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_release: 272; CHECK: bl __atomic_exchange 273 %r = atomicrmw xchg ptr %ptr, i16 %value release, align 1 274 ret i16 %r 275} 276 277define dso_local i16 @atomicrmw_xchg_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 278; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acq_rel: 279; CHECK: bl __atomic_exchange 280 %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 1 281 ret i16 %r 282} 283 284define dso_local i16 @atomicrmw_xchg_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 285; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_seq_cst: 286; CHECK: bl __atomic_exchange 287 %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 1 288 ret i16 %r 289} 290 291define dso_local i32 @atomicrmw_xchg_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 292; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_monotonic: 293; CHECK: bl __atomic_exchange 294 %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 1 295 ret i32 %r 296} 297 298define dso_local i32 @atomicrmw_xchg_i32_unaligned_acquire(ptr %ptr, i32 %value) { 299; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acquire: 300; CHECK: bl __atomic_exchange 301 %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 1 302 ret i32 %r 303} 304 305define dso_local i32 @atomicrmw_xchg_i32_unaligned_release(ptr %ptr, i32 %value) { 306; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_release: 307; CHECK: bl __atomic_exchange 308 %r = atomicrmw xchg ptr %ptr, i32 %value release, align 1 309 ret i32 %r 310} 311 312define dso_local i32 @atomicrmw_xchg_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 313; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acq_rel: 314; CHECK: bl __atomic_exchange 315 %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 1 316 ret i32 %r 317} 318 319define dso_local i32 @atomicrmw_xchg_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 320; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_seq_cst: 321; CHECK: bl __atomic_exchange 322 %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 1 323 ret i32 %r 324} 325 326define dso_local i64 @atomicrmw_xchg_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 327; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_monotonic: 328; CHECK: bl __atomic_exchange 329 %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 1 330 ret i64 %r 331} 332 333define dso_local i64 @atomicrmw_xchg_i64_unaligned_acquire(ptr %ptr, i64 %value) { 334; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acquire: 335; CHECK: bl __atomic_exchange 336 %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 1 337 ret i64 %r 338} 339 340define dso_local i64 @atomicrmw_xchg_i64_unaligned_release(ptr %ptr, i64 %value) { 341; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_release: 342; CHECK: bl __atomic_exchange 343 %r = atomicrmw xchg ptr %ptr, i64 %value release, align 1 344 ret i64 %r 345} 346 347define dso_local i64 @atomicrmw_xchg_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 348; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acq_rel: 349; CHECK: bl __atomic_exchange 350 %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 1 351 ret i64 %r 352} 353 354define dso_local i64 @atomicrmw_xchg_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 355; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_seq_cst: 356; CHECK: bl __atomic_exchange 357 %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 1 358 ret i64 %r 359} 360 361define dso_local i128 @atomicrmw_xchg_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 362; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_monotonic: 363; CHECK: bl __atomic_exchange 364 %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 1 365 ret i128 %r 366} 367 368define dso_local i128 @atomicrmw_xchg_i128_unaligned_acquire(ptr %ptr, i128 %value) { 369; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acquire: 370; CHECK: bl __atomic_exchange 371 %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 1 372 ret i128 %r 373} 374 375define dso_local i128 @atomicrmw_xchg_i128_unaligned_release(ptr %ptr, i128 %value) { 376; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_release: 377; CHECK: bl __atomic_exchange 378 %r = atomicrmw xchg ptr %ptr, i128 %value release, align 1 379 ret i128 %r 380} 381 382define dso_local i128 @atomicrmw_xchg_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 383; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acq_rel: 384; CHECK: bl __atomic_exchange 385 %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 1 386 ret i128 %r 387} 388 389define dso_local i128 @atomicrmw_xchg_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 390; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_seq_cst: 391; CHECK: bl __atomic_exchange 392 %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 1 393 ret i128 %r 394} 395 396define dso_local i8 @atomicrmw_add_i8_aligned_monotonic(ptr %ptr, i8 %value) { 397; CHECK-LABEL: atomicrmw_add_i8_aligned_monotonic: 398; CHECK: ldaddb w1, w0, [x0] 399 %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1 400 ret i8 %r 401} 402 403define dso_local i8 @atomicrmw_add_i8_aligned_acquire(ptr %ptr, i8 %value) { 404; CHECK-LABEL: atomicrmw_add_i8_aligned_acquire: 405; CHECK: ldaddab w1, w0, [x0] 406 %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1 407 ret i8 %r 408} 409 410define dso_local i8 @atomicrmw_add_i8_aligned_release(ptr %ptr, i8 %value) { 411; CHECK-LABEL: atomicrmw_add_i8_aligned_release: 412; CHECK: ldaddlb w1, w0, [x0] 413 %r = atomicrmw add ptr %ptr, i8 %value release, align 1 414 ret i8 %r 415} 416 417define dso_local i8 @atomicrmw_add_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 418; CHECK-LABEL: atomicrmw_add_i8_aligned_acq_rel: 419; CHECK: ldaddalb w1, w0, [x0] 420 %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1 421 ret i8 %r 422} 423 424define dso_local i8 @atomicrmw_add_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 425; CHECK-LABEL: atomicrmw_add_i8_aligned_seq_cst: 426; CHECK: ldaddalb w1, w0, [x0] 427 %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1 428 ret i8 %r 429} 430 431define dso_local i16 @atomicrmw_add_i16_aligned_monotonic(ptr %ptr, i16 %value) { 432; CHECK-LABEL: atomicrmw_add_i16_aligned_monotonic: 433; CHECK: ldaddh w1, w0, [x0] 434 %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 2 435 ret i16 %r 436} 437 438define dso_local i16 @atomicrmw_add_i16_aligned_acquire(ptr %ptr, i16 %value) { 439; CHECK-LABEL: atomicrmw_add_i16_aligned_acquire: 440; CHECK: ldaddah w1, w0, [x0] 441 %r = atomicrmw add ptr %ptr, i16 %value acquire, align 2 442 ret i16 %r 443} 444 445define dso_local i16 @atomicrmw_add_i16_aligned_release(ptr %ptr, i16 %value) { 446; CHECK-LABEL: atomicrmw_add_i16_aligned_release: 447; CHECK: ldaddlh w1, w0, [x0] 448 %r = atomicrmw add ptr %ptr, i16 %value release, align 2 449 ret i16 %r 450} 451 452define dso_local i16 @atomicrmw_add_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 453; CHECK-LABEL: atomicrmw_add_i16_aligned_acq_rel: 454; CHECK: ldaddalh w1, w0, [x0] 455 %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 2 456 ret i16 %r 457} 458 459define dso_local i16 @atomicrmw_add_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 460; CHECK-LABEL: atomicrmw_add_i16_aligned_seq_cst: 461; CHECK: ldaddalh w1, w0, [x0] 462 %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 2 463 ret i16 %r 464} 465 466define dso_local i32 @atomicrmw_add_i32_aligned_monotonic(ptr %ptr, i32 %value) { 467; CHECK-LABEL: atomicrmw_add_i32_aligned_monotonic: 468; CHECK: ldadd w1, w0, [x0] 469 %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 4 470 ret i32 %r 471} 472 473define dso_local i32 @atomicrmw_add_i32_aligned_acquire(ptr %ptr, i32 %value) { 474; CHECK-LABEL: atomicrmw_add_i32_aligned_acquire: 475; CHECK: ldadda w1, w0, [x0] 476 %r = atomicrmw add ptr %ptr, i32 %value acquire, align 4 477 ret i32 %r 478} 479 480define dso_local i32 @atomicrmw_add_i32_aligned_release(ptr %ptr, i32 %value) { 481; CHECK-LABEL: atomicrmw_add_i32_aligned_release: 482; CHECK: ldaddl w1, w0, [x0] 483 %r = atomicrmw add ptr %ptr, i32 %value release, align 4 484 ret i32 %r 485} 486 487define dso_local i32 @atomicrmw_add_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 488; CHECK-LABEL: atomicrmw_add_i32_aligned_acq_rel: 489; CHECK: ldaddal w1, w0, [x0] 490 %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 4 491 ret i32 %r 492} 493 494define dso_local i32 @atomicrmw_add_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 495; CHECK-LABEL: atomicrmw_add_i32_aligned_seq_cst: 496; CHECK: ldaddal w1, w0, [x0] 497 %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 4 498 ret i32 %r 499} 500 501define dso_local i64 @atomicrmw_add_i64_aligned_monotonic(ptr %ptr, i64 %value) { 502; CHECK-LABEL: atomicrmw_add_i64_aligned_monotonic: 503; CHECK: ldadd x1, x0, [x0] 504 %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 8 505 ret i64 %r 506} 507 508define dso_local i64 @atomicrmw_add_i64_aligned_acquire(ptr %ptr, i64 %value) { 509; CHECK-LABEL: atomicrmw_add_i64_aligned_acquire: 510; CHECK: ldadda x1, x0, [x0] 511 %r = atomicrmw add ptr %ptr, i64 %value acquire, align 8 512 ret i64 %r 513} 514 515define dso_local i64 @atomicrmw_add_i64_aligned_release(ptr %ptr, i64 %value) { 516; CHECK-LABEL: atomicrmw_add_i64_aligned_release: 517; CHECK: ldaddl x1, x0, [x0] 518 %r = atomicrmw add ptr %ptr, i64 %value release, align 8 519 ret i64 %r 520} 521 522define dso_local i64 @atomicrmw_add_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 523; CHECK-LABEL: atomicrmw_add_i64_aligned_acq_rel: 524; CHECK: ldaddal x1, x0, [x0] 525 %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 8 526 ret i64 %r 527} 528 529define dso_local i64 @atomicrmw_add_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 530; CHECK-LABEL: atomicrmw_add_i64_aligned_seq_cst: 531; CHECK: ldaddal x1, x0, [x0] 532 %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 8 533 ret i64 %r 534} 535 536define dso_local i128 @atomicrmw_add_i128_aligned_monotonic(ptr %ptr, i128 %value) { 537; -O0-LABEL: atomicrmw_add_i128_aligned_monotonic: 538; -O0: adds x9, x10, x9 539; -O0: casp x0, x1, x2, x3, [x8] 540; -O0: subs x11, x9, x11 541; -O0: ccmp x8, x10, #0, eq 542; 543; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic: 544; -O1: ldp x4, x5, [x0] 545; -O1: adds x9, x7, x3 546; -O1: casp x4, x5, x8, x9, [x0] 547; -O1: cmp x4, x6 548; -O1: ccmp x5, x7, #0, eq 549 %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16 550 ret i128 %r 551} 552 553define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) { 554; -O0-LABEL: atomicrmw_add_i128_aligned_acquire: 555; -O0: adds x9, x10, x9 556; -O0: caspa x0, x1, x2, x3, [x8] 557; -O0: subs x11, x9, x11 558; -O0: ccmp x8, x10, #0, eq 559; 560; -O1-LABEL: atomicrmw_add_i128_aligned_acquire: 561; -O1: ldp x4, x5, [x0] 562; -O1: adds x9, x7, x3 563; -O1: caspa x4, x5, x8, x9, [x0] 564; -O1: cmp x4, x6 565; -O1: ccmp x5, x7, #0, eq 566 %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16 567 ret i128 %r 568} 569 570define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) { 571; -O0-LABEL: atomicrmw_add_i128_aligned_release: 572; -O0: adds x9, x10, x9 573; -O0: caspl x0, x1, x2, x3, [x8] 574; -O0: subs x11, x9, x11 575; -O0: ccmp x8, x10, #0, eq 576; 577; -O1-LABEL: atomicrmw_add_i128_aligned_release: 578; -O1: ldp x4, x5, [x0] 579; -O1: adds x9, x7, x3 580; -O1: caspl x4, x5, x8, x9, [x0] 581; -O1: cmp x4, x6 582; -O1: ccmp x5, x7, #0, eq 583 %r = atomicrmw add ptr %ptr, i128 %value release, align 16 584 ret i128 %r 585} 586 587define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 588; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel: 589; -O0: adds x9, x10, x9 590; -O0: caspal x0, x1, x2, x3, [x8] 591; -O0: subs x11, x9, x11 592; -O0: ccmp x8, x10, #0, eq 593; 594; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel: 595; -O1: ldp x4, x5, [x0] 596; -O1: adds x9, x7, x3 597; -O1: caspal x4, x5, x8, x9, [x0] 598; -O1: cmp x4, x6 599; -O1: ccmp x5, x7, #0, eq 600 %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 16 601 ret i128 %r 602} 603 604define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 605; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst: 606; -O0: adds x9, x10, x9 607; -O0: caspal x0, x1, x2, x3, [x8] 608; -O0: subs x11, x9, x11 609; -O0: ccmp x8, x10, #0, eq 610; 611; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst: 612; -O1: ldp x4, x5, [x0] 613; -O1: adds x9, x7, x3 614; -O1: caspal x4, x5, x8, x9, [x0] 615; -O1: cmp x4, x6 616; -O1: ccmp x5, x7, #0, eq 617 %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 16 618 ret i128 %r 619} 620 621define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 622; CHECK-LABEL: atomicrmw_add_i8_unaligned_monotonic: 623; CHECK: ldaddb w1, w0, [x0] 624 %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1 625 ret i8 %r 626} 627 628define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) { 629; CHECK-LABEL: atomicrmw_add_i8_unaligned_acquire: 630; CHECK: ldaddab w1, w0, [x0] 631 %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1 632 ret i8 %r 633} 634 635define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) { 636; CHECK-LABEL: atomicrmw_add_i8_unaligned_release: 637; CHECK: ldaddlb w1, w0, [x0] 638 %r = atomicrmw add ptr %ptr, i8 %value release, align 1 639 ret i8 %r 640} 641 642define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 643; CHECK-LABEL: atomicrmw_add_i8_unaligned_acq_rel: 644; CHECK: ldaddalb w1, w0, [x0] 645 %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1 646 ret i8 %r 647} 648 649define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 650; CHECK-LABEL: atomicrmw_add_i8_unaligned_seq_cst: 651; CHECK: ldaddalb w1, w0, [x0] 652 %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1 653 ret i8 %r 654} 655 656define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 657; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic: 658; -O0: add w8, w9, w8 659; -O0: bl __atomic_compare_exchange 660; 661; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic: 662; -O1: add w8, w0, w20 663; -O1: bl __atomic_compare_exchange 664 %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 1 665 ret i16 %r 666} 667 668define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) { 669; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire: 670; -O0: add w8, w9, w8 671; -O0: bl __atomic_compare_exchange 672; 673; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire: 674; -O1: add w8, w0, w20 675; -O1: bl __atomic_compare_exchange 676 %r = atomicrmw add ptr %ptr, i16 %value acquire, align 1 677 ret i16 %r 678} 679 680define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) { 681; -O0-LABEL: atomicrmw_add_i16_unaligned_release: 682; -O0: add w8, w9, w8 683; -O0: bl __atomic_compare_exchange 684; 685; -O1-LABEL: atomicrmw_add_i16_unaligned_release: 686; -O1: add w8, w0, w20 687; -O1: bl __atomic_compare_exchange 688 %r = atomicrmw add ptr %ptr, i16 %value release, align 1 689 ret i16 %r 690} 691 692define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 693; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel: 694; -O0: add w8, w9, w8 695; -O0: bl __atomic_compare_exchange 696; 697; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel: 698; -O1: add w8, w0, w20 699; -O1: bl __atomic_compare_exchange 700 %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 1 701 ret i16 %r 702} 703 704define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 705; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst: 706; -O0: add w8, w9, w8 707; -O0: bl __atomic_compare_exchange 708; 709; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst: 710; -O1: add w8, w0, w20 711; -O1: bl __atomic_compare_exchange 712 %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 1 713 ret i16 %r 714} 715 716define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 717; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic: 718; -O0: add w8, w9, w8 719; -O0: bl __atomic_compare_exchange 720; 721; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic: 722; -O1: add w8, w0, w20 723; -O1: bl __atomic_compare_exchange 724 %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 1 725 ret i32 %r 726} 727 728define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) { 729; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire: 730; -O0: add w8, w9, w8 731; -O0: bl __atomic_compare_exchange 732; 733; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire: 734; -O1: add w8, w0, w20 735; -O1: bl __atomic_compare_exchange 736 %r = atomicrmw add ptr %ptr, i32 %value acquire, align 1 737 ret i32 %r 738} 739 740define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) { 741; -O0-LABEL: atomicrmw_add_i32_unaligned_release: 742; -O0: add w8, w9, w8 743; -O0: bl __atomic_compare_exchange 744; 745; -O1-LABEL: atomicrmw_add_i32_unaligned_release: 746; -O1: add w8, w0, w20 747; -O1: bl __atomic_compare_exchange 748 %r = atomicrmw add ptr %ptr, i32 %value release, align 1 749 ret i32 %r 750} 751 752define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 753; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel: 754; -O0: add w8, w9, w8 755; -O0: bl __atomic_compare_exchange 756; 757; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel: 758; -O1: add w8, w0, w20 759; -O1: bl __atomic_compare_exchange 760 %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 1 761 ret i32 %r 762} 763 764define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 765; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst: 766; -O0: add w8, w9, w8 767; -O0: bl __atomic_compare_exchange 768; 769; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst: 770; -O1: add w8, w0, w20 771; -O1: bl __atomic_compare_exchange 772 %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 1 773 ret i32 %r 774} 775 776define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 777; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic: 778; -O0: add x8, x9, x8 779; -O0: bl __atomic_compare_exchange 780; 781; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic: 782; -O1: add x8, x0, x20 783; -O1: bl __atomic_compare_exchange 784 %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 1 785 ret i64 %r 786} 787 788define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) { 789; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire: 790; -O0: add x8, x9, x8 791; -O0: bl __atomic_compare_exchange 792; 793; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire: 794; -O1: add x8, x0, x20 795; -O1: bl __atomic_compare_exchange 796 %r = atomicrmw add ptr %ptr, i64 %value acquire, align 1 797 ret i64 %r 798} 799 800define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) { 801; -O0-LABEL: atomicrmw_add_i64_unaligned_release: 802; -O0: add x8, x9, x8 803; -O0: bl __atomic_compare_exchange 804; 805; -O1-LABEL: atomicrmw_add_i64_unaligned_release: 806; -O1: add x8, x0, x20 807; -O1: bl __atomic_compare_exchange 808 %r = atomicrmw add ptr %ptr, i64 %value release, align 1 809 ret i64 %r 810} 811 812define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 813; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel: 814; -O0: add x8, x9, x8 815; -O0: bl __atomic_compare_exchange 816; 817; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel: 818; -O1: add x8, x0, x20 819; -O1: bl __atomic_compare_exchange 820 %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 1 821 ret i64 %r 822} 823 824define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 825; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst: 826; -O0: add x8, x9, x8 827; -O0: bl __atomic_compare_exchange 828; 829; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst: 830; -O1: add x8, x0, x20 831; -O1: bl __atomic_compare_exchange 832 %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 1 833 ret i64 %r 834} 835 836define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 837; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic: 838; -O0: adds x9, x10, x9 839; -O0: bl __atomic_compare_exchange 840; 841; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic: 842; -O1: ldp x0, x1, [x0] 843; -O1: adds x8, x1, x19 844; -O1: bl __atomic_compare_exchange 845 %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 1 846 ret i128 %r 847} 848 849define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) { 850; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire: 851; -O0: adds x9, x10, x9 852; -O0: bl __atomic_compare_exchange 853; 854; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire: 855; -O1: ldp x0, x1, [x0] 856; -O1: adds x8, x1, x19 857; -O1: bl __atomic_compare_exchange 858 %r = atomicrmw add ptr %ptr, i128 %value acquire, align 1 859 ret i128 %r 860} 861 862define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) { 863; -O0-LABEL: atomicrmw_add_i128_unaligned_release: 864; -O0: adds x9, x10, x9 865; -O0: bl __atomic_compare_exchange 866; 867; -O1-LABEL: atomicrmw_add_i128_unaligned_release: 868; -O1: ldp x0, x1, [x0] 869; -O1: adds x8, x1, x19 870; -O1: bl __atomic_compare_exchange 871 %r = atomicrmw add ptr %ptr, i128 %value release, align 1 872 ret i128 %r 873} 874 875define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 876; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel: 877; -O0: adds x9, x10, x9 878; -O0: bl __atomic_compare_exchange 879; 880; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel: 881; -O1: ldp x0, x1, [x0] 882; -O1: adds x8, x1, x19 883; -O1: bl __atomic_compare_exchange 884 %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 1 885 ret i128 %r 886} 887 888define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 889; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst: 890; -O0: adds x9, x10, x9 891; -O0: bl __atomic_compare_exchange 892; 893; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst: 894; -O1: ldp x0, x1, [x0] 895; -O1: adds x8, x1, x19 896; -O1: bl __atomic_compare_exchange 897 %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 1 898 ret i128 %r 899} 900 901define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) { 902; -O0-LABEL: atomicrmw_sub_i8_aligned_monotonic: 903; -O0: subs w8, w8, w1 904; -O0: ldaddb w8, w0, [x0] 905; 906; -O1-LABEL: atomicrmw_sub_i8_aligned_monotonic: 907; -O1: ldaddb w8, w0, [x0] 908 %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1 909 ret i8 %r 910} 911 912define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) { 913; -O0-LABEL: atomicrmw_sub_i8_aligned_acquire: 914; -O0: subs w8, w8, w1 915; -O0: ldaddab w8, w0, [x0] 916; 917; -O1-LABEL: atomicrmw_sub_i8_aligned_acquire: 918; -O1: ldaddab w8, w0, [x0] 919 %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1 920 ret i8 %r 921} 922 923define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) { 924; -O0-LABEL: atomicrmw_sub_i8_aligned_release: 925; -O0: subs w8, w8, w1 926; -O0: ldaddlb w8, w0, [x0] 927; 928; -O1-LABEL: atomicrmw_sub_i8_aligned_release: 929; -O1: ldaddlb w8, w0, [x0] 930 %r = atomicrmw sub ptr %ptr, i8 %value release, align 1 931 ret i8 %r 932} 933 934define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 935; -O0-LABEL: atomicrmw_sub_i8_aligned_acq_rel: 936; -O0: subs w8, w8, w1 937; -O0: ldaddalb w8, w0, [x0] 938; 939; -O1-LABEL: atomicrmw_sub_i8_aligned_acq_rel: 940; -O1: ldaddalb w8, w0, [x0] 941 %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1 942 ret i8 %r 943} 944 945define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 946; -O0-LABEL: atomicrmw_sub_i8_aligned_seq_cst: 947; -O0: subs w8, w8, w1 948; -O0: ldaddalb w8, w0, [x0] 949; 950; -O1-LABEL: atomicrmw_sub_i8_aligned_seq_cst: 951; -O1: ldaddalb w8, w0, [x0] 952 %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 1 953 ret i8 %r 954} 955 956define dso_local i16 @atomicrmw_sub_i16_aligned_monotonic(ptr %ptr, i16 %value) { 957; -O0-LABEL: atomicrmw_sub_i16_aligned_monotonic: 958; -O0: subs w8, w8, w1 959; -O0: ldaddh w8, w0, [x0] 960; 961; -O1-LABEL: atomicrmw_sub_i16_aligned_monotonic: 962; -O1: ldaddh w8, w0, [x0] 963 %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 2 964 ret i16 %r 965} 966 967define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) { 968; -O0-LABEL: atomicrmw_sub_i16_aligned_acquire: 969; -O0: subs w8, w8, w1 970; -O0: ldaddah w8, w0, [x0] 971; 972; -O1-LABEL: atomicrmw_sub_i16_aligned_acquire: 973; -O1: ldaddah w8, w0, [x0] 974 %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 2 975 ret i16 %r 976} 977 978define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) { 979; -O0-LABEL: atomicrmw_sub_i16_aligned_release: 980; -O0: subs w8, w8, w1 981; -O0: ldaddlh w8, w0, [x0] 982; 983; -O1-LABEL: atomicrmw_sub_i16_aligned_release: 984; -O1: ldaddlh w8, w0, [x0] 985 %r = atomicrmw sub ptr %ptr, i16 %value release, align 2 986 ret i16 %r 987} 988 989define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 990; -O0-LABEL: atomicrmw_sub_i16_aligned_acq_rel: 991; -O0: subs w8, w8, w1 992; -O0: ldaddalh w8, w0, [x0] 993; 994; -O1-LABEL: atomicrmw_sub_i16_aligned_acq_rel: 995; -O1: ldaddalh w8, w0, [x0] 996 %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 2 997 ret i16 %r 998} 999 1000define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 1001; -O0-LABEL: atomicrmw_sub_i16_aligned_seq_cst: 1002; -O0: subs w8, w8, w1 1003; -O0: ldaddalh w8, w0, [x0] 1004; 1005; -O1-LABEL: atomicrmw_sub_i16_aligned_seq_cst: 1006; -O1: ldaddalh w8, w0, [x0] 1007 %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 2 1008 ret i16 %r 1009} 1010 1011define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) { 1012; -O0-LABEL: atomicrmw_sub_i32_aligned_monotonic: 1013; -O0: subs w8, w8, w1 1014; -O0: ldadd w8, w0, [x0] 1015; 1016; -O1-LABEL: atomicrmw_sub_i32_aligned_monotonic: 1017; -O1: ldadd w8, w0, [x0] 1018 %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 4 1019 ret i32 %r 1020} 1021 1022define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) { 1023; -O0-LABEL: atomicrmw_sub_i32_aligned_acquire: 1024; -O0: subs w8, w8, w1 1025; -O0: ldadda w8, w0, [x0] 1026; 1027; -O1-LABEL: atomicrmw_sub_i32_aligned_acquire: 1028; -O1: ldadda w8, w0, [x0] 1029 %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 4 1030 ret i32 %r 1031} 1032 1033define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) { 1034; -O0-LABEL: atomicrmw_sub_i32_aligned_release: 1035; -O0: subs w8, w8, w1 1036; -O0: ldaddl w8, w0, [x0] 1037; 1038; -O1-LABEL: atomicrmw_sub_i32_aligned_release: 1039; -O1: ldaddl w8, w0, [x0] 1040 %r = atomicrmw sub ptr %ptr, i32 %value release, align 4 1041 ret i32 %r 1042} 1043 1044define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 1045; -O0-LABEL: atomicrmw_sub_i32_aligned_acq_rel: 1046; -O0: subs w8, w8, w1 1047; -O0: ldaddal w8, w0, [x0] 1048; 1049; -O1-LABEL: atomicrmw_sub_i32_aligned_acq_rel: 1050; -O1: ldaddal w8, w0, [x0] 1051 %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 4 1052 ret i32 %r 1053} 1054 1055define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 1056; -O0-LABEL: atomicrmw_sub_i32_aligned_seq_cst: 1057; -O0: subs w8, w8, w1 1058; -O0: ldaddal w8, w0, [x0] 1059; 1060; -O1-LABEL: atomicrmw_sub_i32_aligned_seq_cst: 1061; -O1: ldaddal w8, w0, [x0] 1062 %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 4 1063 ret i32 %r 1064} 1065 1066define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) { 1067; -O0-LABEL: atomicrmw_sub_i64_aligned_monotonic: 1068; -O0: subs x8, x8, x1 1069; -O0: ldadd x8, x0, [x0] 1070; 1071; -O1-LABEL: atomicrmw_sub_i64_aligned_monotonic: 1072; -O1: ldadd x8, x0, [x0] 1073 %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 8 1074 ret i64 %r 1075} 1076 1077define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) { 1078; -O0-LABEL: atomicrmw_sub_i64_aligned_acquire: 1079; -O0: subs x8, x8, x1 1080; -O0: ldadda x8, x0, [x0] 1081; 1082; -O1-LABEL: atomicrmw_sub_i64_aligned_acquire: 1083; -O1: ldadda x8, x0, [x0] 1084 %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 8 1085 ret i64 %r 1086} 1087 1088define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) { 1089; -O0-LABEL: atomicrmw_sub_i64_aligned_release: 1090; -O0: subs x8, x8, x1 1091; -O0: ldaddl x8, x0, [x0] 1092; 1093; -O1-LABEL: atomicrmw_sub_i64_aligned_release: 1094; -O1: ldaddl x8, x0, [x0] 1095 %r = atomicrmw sub ptr %ptr, i64 %value release, align 8 1096 ret i64 %r 1097} 1098 1099define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 1100; -O0-LABEL: atomicrmw_sub_i64_aligned_acq_rel: 1101; -O0: subs x8, x8, x1 1102; -O0: ldaddal x8, x0, [x0] 1103; 1104; -O1-LABEL: atomicrmw_sub_i64_aligned_acq_rel: 1105; -O1: ldaddal x8, x0, [x0] 1106 %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 8 1107 ret i64 %r 1108} 1109 1110define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 1111; -O0-LABEL: atomicrmw_sub_i64_aligned_seq_cst: 1112; -O0: subs x8, x8, x1 1113; -O0: ldaddal x8, x0, [x0] 1114; 1115; -O1-LABEL: atomicrmw_sub_i64_aligned_seq_cst: 1116; -O1: ldaddal x8, x0, [x0] 1117 %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 8 1118 ret i64 %r 1119} 1120 1121define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) { 1122; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic: 1123; -O0: subs x9, x10, x9 1124; -O0: casp x0, x1, x2, x3, [x8] 1125; -O0: subs x11, x9, x11 1126; -O0: ccmp x8, x10, #0, eq 1127; 1128; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic: 1129; -O1: ldp x4, x5, [x0] 1130; -O1: subs x9, x7, x3 1131; -O1: casp x4, x5, x8, x9, [x0] 1132; -O1: cmp x4, x6 1133; -O1: ccmp x5, x7, #0, eq 1134 %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 16 1135 ret i128 %r 1136} 1137 1138define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) { 1139; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire: 1140; -O0: subs x9, x10, x9 1141; -O0: caspa x0, x1, x2, x3, [x8] 1142; -O0: subs x11, x9, x11 1143; -O0: ccmp x8, x10, #0, eq 1144; 1145; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire: 1146; -O1: ldp x4, x5, [x0] 1147; -O1: subs x9, x7, x3 1148; -O1: caspa x4, x5, x8, x9, [x0] 1149; -O1: cmp x4, x6 1150; -O1: ccmp x5, x7, #0, eq 1151 %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 16 1152 ret i128 %r 1153} 1154 1155define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) { 1156; -O0-LABEL: atomicrmw_sub_i128_aligned_release: 1157; -O0: subs x9, x10, x9 1158; -O0: caspl x0, x1, x2, x3, [x8] 1159; -O0: subs x11, x9, x11 1160; -O0: ccmp x8, x10, #0, eq 1161; 1162; -O1-LABEL: atomicrmw_sub_i128_aligned_release: 1163; -O1: ldp x4, x5, [x0] 1164; -O1: subs x9, x7, x3 1165; -O1: caspl x4, x5, x8, x9, [x0] 1166; -O1: cmp x4, x6 1167; -O1: ccmp x5, x7, #0, eq 1168 %r = atomicrmw sub ptr %ptr, i128 %value release, align 16 1169 ret i128 %r 1170} 1171 1172define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 1173; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel: 1174; -O0: subs x9, x10, x9 1175; -O0: caspal x0, x1, x2, x3, [x8] 1176; -O0: subs x11, x9, x11 1177; -O0: ccmp x8, x10, #0, eq 1178; 1179; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel: 1180; -O1: ldp x4, x5, [x0] 1181; -O1: subs x9, x7, x3 1182; -O1: caspal x4, x5, x8, x9, [x0] 1183; -O1: cmp x4, x6 1184; -O1: ccmp x5, x7, #0, eq 1185 %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 16 1186 ret i128 %r 1187} 1188 1189define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 1190; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst: 1191; -O0: subs x9, x10, x9 1192; -O0: caspal x0, x1, x2, x3, [x8] 1193; -O0: subs x11, x9, x11 1194; -O0: ccmp x8, x10, #0, eq 1195; 1196; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst: 1197; -O1: ldp x4, x5, [x0] 1198; -O1: subs x9, x7, x3 1199; -O1: caspal x4, x5, x8, x9, [x0] 1200; -O1: cmp x4, x6 1201; -O1: ccmp x5, x7, #0, eq 1202 %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 16 1203 ret i128 %r 1204} 1205 1206define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 1207; -O0-LABEL: atomicrmw_sub_i8_unaligned_monotonic: 1208; -O0: subs w8, w8, w1 1209; -O0: ldaddb w8, w0, [x0] 1210; 1211; -O1-LABEL: atomicrmw_sub_i8_unaligned_monotonic: 1212; -O1: ldaddb w8, w0, [x0] 1213 %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1 1214 ret i8 %r 1215} 1216 1217define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) { 1218; -O0-LABEL: atomicrmw_sub_i8_unaligned_acquire: 1219; -O0: subs w8, w8, w1 1220; -O0: ldaddab w8, w0, [x0] 1221; 1222; -O1-LABEL: atomicrmw_sub_i8_unaligned_acquire: 1223; -O1: ldaddab w8, w0, [x0] 1224 %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1 1225 ret i8 %r 1226} 1227 1228define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) { 1229; -O0-LABEL: atomicrmw_sub_i8_unaligned_release: 1230; -O0: subs w8, w8, w1 1231; -O0: ldaddlb w8, w0, [x0] 1232; 1233; -O1-LABEL: atomicrmw_sub_i8_unaligned_release: 1234; -O1: ldaddlb w8, w0, [x0] 1235 %r = atomicrmw sub ptr %ptr, i8 %value release, align 1 1236 ret i8 %r 1237} 1238 1239define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 1240; -O0-LABEL: atomicrmw_sub_i8_unaligned_acq_rel: 1241; -O0: subs w8, w8, w1 1242; -O0: ldaddalb w8, w0, [x0] 1243; 1244; -O1-LABEL: atomicrmw_sub_i8_unaligned_acq_rel: 1245; -O1: ldaddalb w8, w0, [x0] 1246 %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1 1247 ret i8 %r 1248} 1249 1250define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 1251; -O0-LABEL: atomicrmw_sub_i8_unaligned_seq_cst: 1252; -O0: subs w8, w8, w1 1253; -O0: ldaddalb w8, w0, [x0] 1254; 1255; -O1-LABEL: atomicrmw_sub_i8_unaligned_seq_cst: 1256; -O1: ldaddalb w8, w0, [x0] 1257 %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 1 1258 ret i8 %r 1259} 1260 1261define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 1262; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic: 1263; -O0: subs w8, w9, w8 1264; -O0: bl __atomic_compare_exchange 1265; 1266; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic: 1267; -O1: sub w8, w0, w20 1268; -O1: bl __atomic_compare_exchange 1269 %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 1 1270 ret i16 %r 1271} 1272 1273define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) { 1274; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire: 1275; -O0: subs w8, w9, w8 1276; -O0: bl __atomic_compare_exchange 1277; 1278; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire: 1279; -O1: sub w8, w0, w20 1280; -O1: bl __atomic_compare_exchange 1281 %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 1 1282 ret i16 %r 1283} 1284 1285define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) { 1286; -O0-LABEL: atomicrmw_sub_i16_unaligned_release: 1287; -O0: subs w8, w9, w8 1288; -O0: bl __atomic_compare_exchange 1289; 1290; -O1-LABEL: atomicrmw_sub_i16_unaligned_release: 1291; -O1: sub w8, w0, w20 1292; -O1: bl __atomic_compare_exchange 1293 %r = atomicrmw sub ptr %ptr, i16 %value release, align 1 1294 ret i16 %r 1295} 1296 1297define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 1298; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel: 1299; -O0: subs w8, w9, w8 1300; -O0: bl __atomic_compare_exchange 1301; 1302; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel: 1303; -O1: sub w8, w0, w20 1304; -O1: bl __atomic_compare_exchange 1305 %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 1 1306 ret i16 %r 1307} 1308 1309define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 1310; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst: 1311; -O0: subs w8, w9, w8 1312; -O0: bl __atomic_compare_exchange 1313; 1314; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst: 1315; -O1: sub w8, w0, w20 1316; -O1: bl __atomic_compare_exchange 1317 %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 1 1318 ret i16 %r 1319} 1320 1321define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 1322; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic: 1323; -O0: subs w8, w9, w8 1324; -O0: bl __atomic_compare_exchange 1325; 1326; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic: 1327; -O1: sub w8, w0, w20 1328; -O1: bl __atomic_compare_exchange 1329 %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 1 1330 ret i32 %r 1331} 1332 1333define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) { 1334; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire: 1335; -O0: subs w8, w9, w8 1336; -O0: bl __atomic_compare_exchange 1337; 1338; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire: 1339; -O1: sub w8, w0, w20 1340; -O1: bl __atomic_compare_exchange 1341 %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 1 1342 ret i32 %r 1343} 1344 1345define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) { 1346; -O0-LABEL: atomicrmw_sub_i32_unaligned_release: 1347; -O0: subs w8, w9, w8 1348; -O0: bl __atomic_compare_exchange 1349; 1350; -O1-LABEL: atomicrmw_sub_i32_unaligned_release: 1351; -O1: sub w8, w0, w20 1352; -O1: bl __atomic_compare_exchange 1353 %r = atomicrmw sub ptr %ptr, i32 %value release, align 1 1354 ret i32 %r 1355} 1356 1357define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 1358; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel: 1359; -O0: subs w8, w9, w8 1360; -O0: bl __atomic_compare_exchange 1361; 1362; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel: 1363; -O1: sub w8, w0, w20 1364; -O1: bl __atomic_compare_exchange 1365 %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 1 1366 ret i32 %r 1367} 1368 1369define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 1370; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst: 1371; -O0: subs w8, w9, w8 1372; -O0: bl __atomic_compare_exchange 1373; 1374; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst: 1375; -O1: sub w8, w0, w20 1376; -O1: bl __atomic_compare_exchange 1377 %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 1 1378 ret i32 %r 1379} 1380 1381define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 1382; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic: 1383; -O0: subs x8, x9, x8 1384; -O0: bl __atomic_compare_exchange 1385; 1386; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic: 1387; -O1: sub x8, x0, x20 1388; -O1: bl __atomic_compare_exchange 1389 %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 1 1390 ret i64 %r 1391} 1392 1393define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) { 1394; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire: 1395; -O0: subs x8, x9, x8 1396; -O0: bl __atomic_compare_exchange 1397; 1398; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire: 1399; -O1: sub x8, x0, x20 1400; -O1: bl __atomic_compare_exchange 1401 %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 1 1402 ret i64 %r 1403} 1404 1405define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) { 1406; -O0-LABEL: atomicrmw_sub_i64_unaligned_release: 1407; -O0: subs x8, x9, x8 1408; -O0: bl __atomic_compare_exchange 1409; 1410; -O1-LABEL: atomicrmw_sub_i64_unaligned_release: 1411; -O1: sub x8, x0, x20 1412; -O1: bl __atomic_compare_exchange 1413 %r = atomicrmw sub ptr %ptr, i64 %value release, align 1 1414 ret i64 %r 1415} 1416 1417define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 1418; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel: 1419; -O0: subs x8, x9, x8 1420; -O0: bl __atomic_compare_exchange 1421; 1422; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel: 1423; -O1: sub x8, x0, x20 1424; -O1: bl __atomic_compare_exchange 1425 %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 1 1426 ret i64 %r 1427} 1428 1429define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 1430; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst: 1431; -O0: subs x8, x9, x8 1432; -O0: bl __atomic_compare_exchange 1433; 1434; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst: 1435; -O1: sub x8, x0, x20 1436; -O1: bl __atomic_compare_exchange 1437 %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 1 1438 ret i64 %r 1439} 1440 1441define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 1442; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic: 1443; -O0: subs x9, x10, x9 1444; -O0: bl __atomic_compare_exchange 1445; 1446; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic: 1447; -O1: ldp x0, x1, [x0] 1448; -O1: subs x8, x1, x19 1449; -O1: bl __atomic_compare_exchange 1450 %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 1 1451 ret i128 %r 1452} 1453 1454define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) { 1455; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire: 1456; -O0: subs x9, x10, x9 1457; -O0: bl __atomic_compare_exchange 1458; 1459; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire: 1460; -O1: ldp x0, x1, [x0] 1461; -O1: subs x8, x1, x19 1462; -O1: bl __atomic_compare_exchange 1463 %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 1 1464 ret i128 %r 1465} 1466 1467define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) { 1468; -O0-LABEL: atomicrmw_sub_i128_unaligned_release: 1469; -O0: subs x9, x10, x9 1470; -O0: bl __atomic_compare_exchange 1471; 1472; -O1-LABEL: atomicrmw_sub_i128_unaligned_release: 1473; -O1: ldp x0, x1, [x0] 1474; -O1: subs x8, x1, x19 1475; -O1: bl __atomic_compare_exchange 1476 %r = atomicrmw sub ptr %ptr, i128 %value release, align 1 1477 ret i128 %r 1478} 1479 1480define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 1481; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel: 1482; -O0: subs x9, x10, x9 1483; -O0: bl __atomic_compare_exchange 1484; 1485; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel: 1486; -O1: ldp x0, x1, [x0] 1487; -O1: subs x8, x1, x19 1488; -O1: bl __atomic_compare_exchange 1489 %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 1 1490 ret i128 %r 1491} 1492 1493define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 1494; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst: 1495; -O0: subs x9, x10, x9 1496; -O0: bl __atomic_compare_exchange 1497; 1498; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst: 1499; -O1: ldp x0, x1, [x0] 1500; -O1: subs x8, x1, x19 1501; -O1: bl __atomic_compare_exchange 1502 %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 1 1503 ret i128 %r 1504} 1505 1506define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) { 1507; CHECK-LABEL: atomicrmw_and_i8_aligned_monotonic: 1508; CHECK: mvn w8, w1 1509; CHECK: ldclrb w8, w0, [x0] 1510 %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 1 1511 ret i8 %r 1512} 1513 1514define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) { 1515; CHECK-LABEL: atomicrmw_and_i8_aligned_acquire: 1516; CHECK: mvn w8, w1 1517; CHECK: ldclrab w8, w0, [x0] 1518 %r = atomicrmw and ptr %ptr, i8 %value acquire, align 1 1519 ret i8 %r 1520} 1521 1522define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) { 1523; CHECK-LABEL: atomicrmw_and_i8_aligned_release: 1524; CHECK: mvn w8, w1 1525; CHECK: ldclrlb w8, w0, [x0] 1526 %r = atomicrmw and ptr %ptr, i8 %value release, align 1 1527 ret i8 %r 1528} 1529 1530define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 1531; CHECK-LABEL: atomicrmw_and_i8_aligned_acq_rel: 1532; CHECK: mvn w8, w1 1533; CHECK: ldclralb w8, w0, [x0] 1534 %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 1 1535 ret i8 %r 1536} 1537 1538define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 1539; CHECK-LABEL: atomicrmw_and_i8_aligned_seq_cst: 1540; CHECK: mvn w8, w1 1541; CHECK: ldclralb w8, w0, [x0] 1542 %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 1 1543 ret i8 %r 1544} 1545 1546define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) { 1547; CHECK-LABEL: atomicrmw_and_i16_aligned_monotonic: 1548; CHECK: mvn w8, w1 1549; CHECK: ldclrh w8, w0, [x0] 1550 %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 2 1551 ret i16 %r 1552} 1553 1554define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) { 1555; CHECK-LABEL: atomicrmw_and_i16_aligned_acquire: 1556; CHECK: mvn w8, w1 1557; CHECK: ldclrah w8, w0, [x0] 1558 %r = atomicrmw and ptr %ptr, i16 %value acquire, align 2 1559 ret i16 %r 1560} 1561 1562define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) { 1563; CHECK-LABEL: atomicrmw_and_i16_aligned_release: 1564; CHECK: mvn w8, w1 1565; CHECK: ldclrlh w8, w0, [x0] 1566 %r = atomicrmw and ptr %ptr, i16 %value release, align 2 1567 ret i16 %r 1568} 1569 1570define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 1571; CHECK-LABEL: atomicrmw_and_i16_aligned_acq_rel: 1572; CHECK: mvn w8, w1 1573; CHECK: ldclralh w8, w0, [x0] 1574 %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 2 1575 ret i16 %r 1576} 1577 1578define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 1579; CHECK-LABEL: atomicrmw_and_i16_aligned_seq_cst: 1580; CHECK: mvn w8, w1 1581; CHECK: ldclralh w8, w0, [x0] 1582 %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 2 1583 ret i16 %r 1584} 1585 1586define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) { 1587; CHECK-LABEL: atomicrmw_and_i32_aligned_monotonic: 1588; CHECK: mvn w8, w1 1589; CHECK: ldclr w8, w0, [x0] 1590 %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 4 1591 ret i32 %r 1592} 1593 1594define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) { 1595; CHECK-LABEL: atomicrmw_and_i32_aligned_acquire: 1596; CHECK: mvn w8, w1 1597; CHECK: ldclra w8, w0, [x0] 1598 %r = atomicrmw and ptr %ptr, i32 %value acquire, align 4 1599 ret i32 %r 1600} 1601 1602define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) { 1603; CHECK-LABEL: atomicrmw_and_i32_aligned_release: 1604; CHECK: mvn w8, w1 1605; CHECK: ldclrl w8, w0, [x0] 1606 %r = atomicrmw and ptr %ptr, i32 %value release, align 4 1607 ret i32 %r 1608} 1609 1610define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 1611; CHECK-LABEL: atomicrmw_and_i32_aligned_acq_rel: 1612; CHECK: mvn w8, w1 1613; CHECK: ldclral w8, w0, [x0] 1614 %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 4 1615 ret i32 %r 1616} 1617 1618define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 1619; CHECK-LABEL: atomicrmw_and_i32_aligned_seq_cst: 1620; CHECK: mvn w8, w1 1621; CHECK: ldclral w8, w0, [x0] 1622 %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 4 1623 ret i32 %r 1624} 1625 1626define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) { 1627; CHECK-LABEL: atomicrmw_and_i64_aligned_monotonic: 1628; CHECK: mvn x8, x1 1629; CHECK: ldclr x8, x0, [x0] 1630 %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 8 1631 ret i64 %r 1632} 1633 1634define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) { 1635; CHECK-LABEL: atomicrmw_and_i64_aligned_acquire: 1636; CHECK: mvn x8, x1 1637; CHECK: ldclra x8, x0, [x0] 1638 %r = atomicrmw and ptr %ptr, i64 %value acquire, align 8 1639 ret i64 %r 1640} 1641 1642define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) { 1643; CHECK-LABEL: atomicrmw_and_i64_aligned_release: 1644; CHECK: mvn x8, x1 1645; CHECK: ldclrl x8, x0, [x0] 1646 %r = atomicrmw and ptr %ptr, i64 %value release, align 8 1647 ret i64 %r 1648} 1649 1650define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 1651; CHECK-LABEL: atomicrmw_and_i64_aligned_acq_rel: 1652; CHECK: mvn x8, x1 1653; CHECK: ldclral x8, x0, [x0] 1654 %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 8 1655 ret i64 %r 1656} 1657 1658define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 1659; CHECK-LABEL: atomicrmw_and_i64_aligned_seq_cst: 1660; CHECK: mvn x8, x1 1661; CHECK: ldclral x8, x0, [x0] 1662 %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 8 1663 ret i64 %r 1664} 1665 1666define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) { 1667; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic: 1668; -O0: and x2, x11, x12 1669; -O0: and x9, x10, x9 1670; -O0: casp x0, x1, x2, x3, [x8] 1671; -O0: subs x11, x9, x11 1672; -O0: ccmp x8, x10, #0, eq 1673; 1674; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic: 1675; -O1: ldp x4, x5, [x0] 1676; -O1: and x8, x4, x2 1677; -O1: and x9, x7, x3 1678; -O1: casp x4, x5, x8, x9, [x0] 1679; -O1: cmp x4, x6 1680; -O1: ccmp x5, x7, #0, eq 1681 %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 16 1682 ret i128 %r 1683} 1684 1685define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) { 1686; -O0-LABEL: atomicrmw_and_i128_aligned_acquire: 1687; -O0: and x2, x11, x12 1688; -O0: and x9, x10, x9 1689; -O0: caspa x0, x1, x2, x3, [x8] 1690; -O0: subs x11, x9, x11 1691; -O0: ccmp x8, x10, #0, eq 1692; 1693; -O1-LABEL: atomicrmw_and_i128_aligned_acquire: 1694; -O1: ldp x4, x5, [x0] 1695; -O1: and x8, x4, x2 1696; -O1: and x9, x7, x3 1697; -O1: caspa x4, x5, x8, x9, [x0] 1698; -O1: cmp x4, x6 1699; -O1: ccmp x5, x7, #0, eq 1700 %r = atomicrmw and ptr %ptr, i128 %value acquire, align 16 1701 ret i128 %r 1702} 1703 1704define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) { 1705; -O0-LABEL: atomicrmw_and_i128_aligned_release: 1706; -O0: and x2, x11, x12 1707; -O0: and x9, x10, x9 1708; -O0: caspl x0, x1, x2, x3, [x8] 1709; -O0: subs x11, x9, x11 1710; -O0: ccmp x8, x10, #0, eq 1711; 1712; -O1-LABEL: atomicrmw_and_i128_aligned_release: 1713; -O1: ldp x4, x5, [x0] 1714; -O1: and x8, x4, x2 1715; -O1: and x9, x7, x3 1716; -O1: caspl x4, x5, x8, x9, [x0] 1717; -O1: cmp x4, x6 1718; -O1: ccmp x5, x7, #0, eq 1719 %r = atomicrmw and ptr %ptr, i128 %value release, align 16 1720 ret i128 %r 1721} 1722 1723define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 1724; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel: 1725; -O0: and x2, x11, x12 1726; -O0: and x9, x10, x9 1727; -O0: caspal x0, x1, x2, x3, [x8] 1728; -O0: subs x11, x9, x11 1729; -O0: ccmp x8, x10, #0, eq 1730; 1731; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel: 1732; -O1: ldp x4, x5, [x0] 1733; -O1: and x8, x4, x2 1734; -O1: and x9, x7, x3 1735; -O1: caspal x4, x5, x8, x9, [x0] 1736; -O1: cmp x4, x6 1737; -O1: ccmp x5, x7, #0, eq 1738 %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 16 1739 ret i128 %r 1740} 1741 1742define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 1743; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst: 1744; -O0: and x2, x11, x12 1745; -O0: and x9, x10, x9 1746; -O0: caspal x0, x1, x2, x3, [x8] 1747; -O0: subs x11, x9, x11 1748; -O0: ccmp x8, x10, #0, eq 1749; 1750; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst: 1751; -O1: ldp x4, x5, [x0] 1752; -O1: and x8, x4, x2 1753; -O1: and x9, x7, x3 1754; -O1: caspal x4, x5, x8, x9, [x0] 1755; -O1: cmp x4, x6 1756; -O1: ccmp x5, x7, #0, eq 1757 %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 16 1758 ret i128 %r 1759} 1760 1761define dso_local i8 @atomicrmw_and_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 1762; CHECK-LABEL: atomicrmw_and_i8_unaligned_monotonic: 1763; CHECK: mvn w8, w1 1764; CHECK: ldclrb w8, w0, [x0] 1765 %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 1 1766 ret i8 %r 1767} 1768 1769define dso_local i8 @atomicrmw_and_i8_unaligned_acquire(ptr %ptr, i8 %value) { 1770; CHECK-LABEL: atomicrmw_and_i8_unaligned_acquire: 1771; CHECK: mvn w8, w1 1772; CHECK: ldclrab w8, w0, [x0] 1773 %r = atomicrmw and ptr %ptr, i8 %value acquire, align 1 1774 ret i8 %r 1775} 1776 1777define dso_local i8 @atomicrmw_and_i8_unaligned_release(ptr %ptr, i8 %value) { 1778; CHECK-LABEL: atomicrmw_and_i8_unaligned_release: 1779; CHECK: mvn w8, w1 1780; CHECK: ldclrlb w8, w0, [x0] 1781 %r = atomicrmw and ptr %ptr, i8 %value release, align 1 1782 ret i8 %r 1783} 1784 1785define dso_local i8 @atomicrmw_and_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 1786; CHECK-LABEL: atomicrmw_and_i8_unaligned_acq_rel: 1787; CHECK: mvn w8, w1 1788; CHECK: ldclralb w8, w0, [x0] 1789 %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 1 1790 ret i8 %r 1791} 1792 1793define dso_local i8 @atomicrmw_and_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 1794; CHECK-LABEL: atomicrmw_and_i8_unaligned_seq_cst: 1795; CHECK: mvn w8, w1 1796; CHECK: ldclralb w8, w0, [x0] 1797 %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 1 1798 ret i8 %r 1799} 1800 1801define dso_local i16 @atomicrmw_and_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 1802; -O0-LABEL: atomicrmw_and_i16_unaligned_monotonic: 1803; -O0: and w8, w9, w8 1804; -O0: bl __atomic_compare_exchange 1805; 1806; -O1-LABEL: atomicrmw_and_i16_unaligned_monotonic: 1807; -O1: and w8, w0, w20 1808; -O1: bl __atomic_compare_exchange 1809 %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 1 1810 ret i16 %r 1811} 1812 1813define dso_local i16 @atomicrmw_and_i16_unaligned_acquire(ptr %ptr, i16 %value) { 1814; -O0-LABEL: atomicrmw_and_i16_unaligned_acquire: 1815; -O0: and w8, w9, w8 1816; -O0: bl __atomic_compare_exchange 1817; 1818; -O1-LABEL: atomicrmw_and_i16_unaligned_acquire: 1819; -O1: and w8, w0, w20 1820; -O1: bl __atomic_compare_exchange 1821 %r = atomicrmw and ptr %ptr, i16 %value acquire, align 1 1822 ret i16 %r 1823} 1824 1825define dso_local i16 @atomicrmw_and_i16_unaligned_release(ptr %ptr, i16 %value) { 1826; -O0-LABEL: atomicrmw_and_i16_unaligned_release: 1827; -O0: and w8, w9, w8 1828; -O0: bl __atomic_compare_exchange 1829; 1830; -O1-LABEL: atomicrmw_and_i16_unaligned_release: 1831; -O1: and w8, w0, w20 1832; -O1: bl __atomic_compare_exchange 1833 %r = atomicrmw and ptr %ptr, i16 %value release, align 1 1834 ret i16 %r 1835} 1836 1837define dso_local i16 @atomicrmw_and_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 1838; -O0-LABEL: atomicrmw_and_i16_unaligned_acq_rel: 1839; -O0: and w8, w9, w8 1840; -O0: bl __atomic_compare_exchange 1841; 1842; -O1-LABEL: atomicrmw_and_i16_unaligned_acq_rel: 1843; -O1: and w8, w0, w20 1844; -O1: bl __atomic_compare_exchange 1845 %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 1 1846 ret i16 %r 1847} 1848 1849define dso_local i16 @atomicrmw_and_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 1850; -O0-LABEL: atomicrmw_and_i16_unaligned_seq_cst: 1851; -O0: and w8, w9, w8 1852; -O0: bl __atomic_compare_exchange 1853; 1854; -O1-LABEL: atomicrmw_and_i16_unaligned_seq_cst: 1855; -O1: and w8, w0, w20 1856; -O1: bl __atomic_compare_exchange 1857 %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 1 1858 ret i16 %r 1859} 1860 1861define dso_local i32 @atomicrmw_and_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 1862; -O0-LABEL: atomicrmw_and_i32_unaligned_monotonic: 1863; -O0: and w8, w9, w8 1864; -O0: bl __atomic_compare_exchange 1865; 1866; -O1-LABEL: atomicrmw_and_i32_unaligned_monotonic: 1867; -O1: and w8, w0, w20 1868; -O1: bl __atomic_compare_exchange 1869 %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 1 1870 ret i32 %r 1871} 1872 1873define dso_local i32 @atomicrmw_and_i32_unaligned_acquire(ptr %ptr, i32 %value) { 1874; -O0-LABEL: atomicrmw_and_i32_unaligned_acquire: 1875; -O0: and w8, w9, w8 1876; -O0: bl __atomic_compare_exchange 1877; 1878; -O1-LABEL: atomicrmw_and_i32_unaligned_acquire: 1879; -O1: and w8, w0, w20 1880; -O1: bl __atomic_compare_exchange 1881 %r = atomicrmw and ptr %ptr, i32 %value acquire, align 1 1882 ret i32 %r 1883} 1884 1885define dso_local i32 @atomicrmw_and_i32_unaligned_release(ptr %ptr, i32 %value) { 1886; -O0-LABEL: atomicrmw_and_i32_unaligned_release: 1887; -O0: and w8, w9, w8 1888; -O0: bl __atomic_compare_exchange 1889; 1890; -O1-LABEL: atomicrmw_and_i32_unaligned_release: 1891; -O1: and w8, w0, w20 1892; -O1: bl __atomic_compare_exchange 1893 %r = atomicrmw and ptr %ptr, i32 %value release, align 1 1894 ret i32 %r 1895} 1896 1897define dso_local i32 @atomicrmw_and_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 1898; -O0-LABEL: atomicrmw_and_i32_unaligned_acq_rel: 1899; -O0: and w8, w9, w8 1900; -O0: bl __atomic_compare_exchange 1901; 1902; -O1-LABEL: atomicrmw_and_i32_unaligned_acq_rel: 1903; -O1: and w8, w0, w20 1904; -O1: bl __atomic_compare_exchange 1905 %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 1 1906 ret i32 %r 1907} 1908 1909define dso_local i32 @atomicrmw_and_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 1910; -O0-LABEL: atomicrmw_and_i32_unaligned_seq_cst: 1911; -O0: and w8, w9, w8 1912; -O0: bl __atomic_compare_exchange 1913; 1914; -O1-LABEL: atomicrmw_and_i32_unaligned_seq_cst: 1915; -O1: and w8, w0, w20 1916; -O1: bl __atomic_compare_exchange 1917 %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 1 1918 ret i32 %r 1919} 1920 1921define dso_local i64 @atomicrmw_and_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 1922; -O0-LABEL: atomicrmw_and_i64_unaligned_monotonic: 1923; -O0: and x8, x9, x8 1924; -O0: bl __atomic_compare_exchange 1925; 1926; -O1-LABEL: atomicrmw_and_i64_unaligned_monotonic: 1927; -O1: and x8, x0, x20 1928; -O1: bl __atomic_compare_exchange 1929 %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 1 1930 ret i64 %r 1931} 1932 1933define dso_local i64 @atomicrmw_and_i64_unaligned_acquire(ptr %ptr, i64 %value) { 1934; -O0-LABEL: atomicrmw_and_i64_unaligned_acquire: 1935; -O0: and x8, x9, x8 1936; -O0: bl __atomic_compare_exchange 1937; 1938; -O1-LABEL: atomicrmw_and_i64_unaligned_acquire: 1939; -O1: and x8, x0, x20 1940; -O1: bl __atomic_compare_exchange 1941 %r = atomicrmw and ptr %ptr, i64 %value acquire, align 1 1942 ret i64 %r 1943} 1944 1945define dso_local i64 @atomicrmw_and_i64_unaligned_release(ptr %ptr, i64 %value) { 1946; -O0-LABEL: atomicrmw_and_i64_unaligned_release: 1947; -O0: and x8, x9, x8 1948; -O0: bl __atomic_compare_exchange 1949; 1950; -O1-LABEL: atomicrmw_and_i64_unaligned_release: 1951; -O1: and x8, x0, x20 1952; -O1: bl __atomic_compare_exchange 1953 %r = atomicrmw and ptr %ptr, i64 %value release, align 1 1954 ret i64 %r 1955} 1956 1957define dso_local i64 @atomicrmw_and_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 1958; -O0-LABEL: atomicrmw_and_i64_unaligned_acq_rel: 1959; -O0: and x8, x9, x8 1960; -O0: bl __atomic_compare_exchange 1961; 1962; -O1-LABEL: atomicrmw_and_i64_unaligned_acq_rel: 1963; -O1: and x8, x0, x20 1964; -O1: bl __atomic_compare_exchange 1965 %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 1 1966 ret i64 %r 1967} 1968 1969define dso_local i64 @atomicrmw_and_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 1970; -O0-LABEL: atomicrmw_and_i64_unaligned_seq_cst: 1971; -O0: and x8, x9, x8 1972; -O0: bl __atomic_compare_exchange 1973; 1974; -O1-LABEL: atomicrmw_and_i64_unaligned_seq_cst: 1975; -O1: and x8, x0, x20 1976; -O1: bl __atomic_compare_exchange 1977 %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 1 1978 ret i64 %r 1979} 1980 1981define dso_local i128 @atomicrmw_and_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 1982; -O0-LABEL: atomicrmw_and_i128_unaligned_monotonic: 1983; -O0: and x8, x11, x8 1984; -O0: and x9, x10, x9 1985; -O0: bl __atomic_compare_exchange 1986; 1987; -O1-LABEL: atomicrmw_and_i128_unaligned_monotonic: 1988; -O1: ldp x0, x1, [x0] 1989; -O1: and x8, x1, x19 1990; -O1: and x9, x0, x21 1991; -O1: bl __atomic_compare_exchange 1992 %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 1 1993 ret i128 %r 1994} 1995 1996define dso_local i128 @atomicrmw_and_i128_unaligned_acquire(ptr %ptr, i128 %value) { 1997; -O0-LABEL: atomicrmw_and_i128_unaligned_acquire: 1998; -O0: and x8, x11, x8 1999; -O0: and x9, x10, x9 2000; -O0: bl __atomic_compare_exchange 2001; 2002; -O1-LABEL: atomicrmw_and_i128_unaligned_acquire: 2003; -O1: ldp x0, x1, [x0] 2004; -O1: and x8, x1, x19 2005; -O1: and x9, x0, x21 2006; -O1: bl __atomic_compare_exchange 2007 %r = atomicrmw and ptr %ptr, i128 %value acquire, align 1 2008 ret i128 %r 2009} 2010 2011define dso_local i128 @atomicrmw_and_i128_unaligned_release(ptr %ptr, i128 %value) { 2012; -O0-LABEL: atomicrmw_and_i128_unaligned_release: 2013; -O0: and x8, x11, x8 2014; -O0: and x9, x10, x9 2015; -O0: bl __atomic_compare_exchange 2016; 2017; -O1-LABEL: atomicrmw_and_i128_unaligned_release: 2018; -O1: ldp x0, x1, [x0] 2019; -O1: and x8, x1, x19 2020; -O1: and x9, x0, x21 2021; -O1: bl __atomic_compare_exchange 2022 %r = atomicrmw and ptr %ptr, i128 %value release, align 1 2023 ret i128 %r 2024} 2025 2026define dso_local i128 @atomicrmw_and_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 2027; -O0-LABEL: atomicrmw_and_i128_unaligned_acq_rel: 2028; -O0: and x8, x11, x8 2029; -O0: and x9, x10, x9 2030; -O0: bl __atomic_compare_exchange 2031; 2032; -O1-LABEL: atomicrmw_and_i128_unaligned_acq_rel: 2033; -O1: ldp x0, x1, [x0] 2034; -O1: and x8, x1, x19 2035; -O1: and x9, x0, x21 2036; -O1: bl __atomic_compare_exchange 2037 %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 1 2038 ret i128 %r 2039} 2040 2041define dso_local i128 @atomicrmw_and_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 2042; -O0-LABEL: atomicrmw_and_i128_unaligned_seq_cst: 2043; -O0: and x8, x11, x8 2044; -O0: and x9, x10, x9 2045; -O0: bl __atomic_compare_exchange 2046; 2047; -O1-LABEL: atomicrmw_and_i128_unaligned_seq_cst: 2048; -O1: ldp x0, x1, [x0] 2049; -O1: and x8, x1, x19 2050; -O1: and x9, x0, x21 2051; -O1: bl __atomic_compare_exchange 2052 %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 1 2053 ret i128 %r 2054} 2055 2056define dso_local i8 @atomicrmw_nand_i8_aligned_monotonic(ptr %ptr, i8 %value) { 2057; -O0-LABEL: atomicrmw_nand_i8_aligned_monotonic: 2058; -O0: and w8, w9, w8 2059; -O0: mvn w10, w8 2060; -O0: casb w8, w10, [x11] 2061; -O0: subs w9, w8, w9, uxtb 2062; -O0: subs w9, w9, #1 2063; 2064; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic: 2065; -O1: and w10, w8, w1 2066; -O1: mvn w10, w10 2067; -O1: casb w9, w10, [x0] 2068; -O1: cmp w9, w8, uxtb 2069 %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 1 2070 ret i8 %r 2071} 2072 2073define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) { 2074; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire: 2075; -O0: and w8, w9, w8 2076; -O0: mvn w10, w8 2077; -O0: casab w8, w10, [x11] 2078; -O0: subs w9, w8, w9, uxtb 2079; -O0: subs w9, w9, #1 2080; 2081; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire: 2082; -O1: and w10, w8, w1 2083; -O1: mvn w10, w10 2084; -O1: casab w9, w10, [x0] 2085; -O1: cmp w9, w8, uxtb 2086 %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 1 2087 ret i8 %r 2088} 2089 2090define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) { 2091; -O0-LABEL: atomicrmw_nand_i8_aligned_release: 2092; -O0: and w8, w9, w8 2093; -O0: mvn w10, w8 2094; -O0: caslb w8, w10, [x11] 2095; -O0: subs w9, w8, w9, uxtb 2096; -O0: subs w9, w9, #1 2097; 2098; -O1-LABEL: atomicrmw_nand_i8_aligned_release: 2099; -O1: and w10, w8, w1 2100; -O1: mvn w10, w10 2101; -O1: caslb w9, w10, [x0] 2102; -O1: cmp w9, w8, uxtb 2103 %r = atomicrmw nand ptr %ptr, i8 %value release, align 1 2104 ret i8 %r 2105} 2106 2107define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 2108; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel: 2109; -O0: and w8, w9, w8 2110; -O0: mvn w10, w8 2111; -O0: casalb w8, w10, [x11] 2112; -O0: subs w9, w8, w9, uxtb 2113; -O0: subs w9, w9, #1 2114; 2115; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel: 2116; -O1: and w10, w8, w1 2117; -O1: mvn w10, w10 2118; -O1: casalb w9, w10, [x0] 2119; -O1: cmp w9, w8, uxtb 2120 %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 1 2121 ret i8 %r 2122} 2123 2124define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 2125; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst: 2126; -O0: and w8, w9, w8 2127; -O0: mvn w10, w8 2128; -O0: casalb w8, w10, [x11] 2129; -O0: subs w9, w8, w9, uxtb 2130; -O0: subs w9, w9, #1 2131; 2132; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst: 2133; -O1: and w10, w8, w1 2134; -O1: mvn w10, w10 2135; -O1: casalb w9, w10, [x0] 2136; -O1: cmp w9, w8, uxtb 2137 %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 1 2138 ret i8 %r 2139} 2140 2141define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) { 2142; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic: 2143; -O0: and w8, w9, w8 2144; -O0: mvn w10, w8 2145; -O0: cash w8, w10, [x11] 2146; -O0: subs w9, w8, w9, uxth 2147; -O0: subs w9, w9, #1 2148; 2149; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic: 2150; -O1: and w10, w8, w1 2151; -O1: mvn w10, w10 2152; -O1: cash w9, w10, [x0] 2153; -O1: cmp w9, w8, uxth 2154 %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 2 2155 ret i16 %r 2156} 2157 2158define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) { 2159; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire: 2160; -O0: and w8, w9, w8 2161; -O0: mvn w10, w8 2162; -O0: casah w8, w10, [x11] 2163; -O0: subs w9, w8, w9, uxth 2164; -O0: subs w9, w9, #1 2165; 2166; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire: 2167; -O1: and w10, w8, w1 2168; -O1: mvn w10, w10 2169; -O1: casah w9, w10, [x0] 2170; -O1: cmp w9, w8, uxth 2171 %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 2 2172 ret i16 %r 2173} 2174 2175define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) { 2176; -O0-LABEL: atomicrmw_nand_i16_aligned_release: 2177; -O0: and w8, w9, w8 2178; -O0: mvn w10, w8 2179; -O0: caslh w8, w10, [x11] 2180; -O0: subs w9, w8, w9, uxth 2181; -O0: subs w9, w9, #1 2182; 2183; -O1-LABEL: atomicrmw_nand_i16_aligned_release: 2184; -O1: and w10, w8, w1 2185; -O1: mvn w10, w10 2186; -O1: caslh w9, w10, [x0] 2187; -O1: cmp w9, w8, uxth 2188 %r = atomicrmw nand ptr %ptr, i16 %value release, align 2 2189 ret i16 %r 2190} 2191 2192define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 2193; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel: 2194; -O0: and w8, w9, w8 2195; -O0: mvn w10, w8 2196; -O0: casalh w8, w10, [x11] 2197; -O0: subs w9, w8, w9, uxth 2198; -O0: subs w9, w9, #1 2199; 2200; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel: 2201; -O1: and w10, w8, w1 2202; -O1: mvn w10, w10 2203; -O1: casalh w9, w10, [x0] 2204; -O1: cmp w9, w8, uxth 2205 %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 2 2206 ret i16 %r 2207} 2208 2209define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 2210; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst: 2211; -O0: and w8, w9, w8 2212; -O0: mvn w10, w8 2213; -O0: casalh w8, w10, [x11] 2214; -O0: subs w9, w8, w9, uxth 2215; -O0: subs w9, w9, #1 2216; 2217; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst: 2218; -O1: and w10, w8, w1 2219; -O1: mvn w10, w10 2220; -O1: casalh w9, w10, [x0] 2221; -O1: cmp w9, w8, uxth 2222 %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 2 2223 ret i16 %r 2224} 2225 2226define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) { 2227; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic: 2228; -O0: and w8, w9, w8 2229; -O0: mvn w10, w8 2230; -O0: cas w8, w10, [x11] 2231; -O0: subs w9, w8, w9 2232; -O0: subs w9, w9, #1 2233; 2234; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic: 2235; -O1: and w10, w8, w1 2236; -O1: mvn w10, w10 2237; -O1: cas w9, w10, [x0] 2238; -O1: cmp w9, w8 2239 %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 4 2240 ret i32 %r 2241} 2242 2243define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) { 2244; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire: 2245; -O0: and w8, w9, w8 2246; -O0: mvn w10, w8 2247; -O0: casa w8, w10, [x11] 2248; -O0: subs w9, w8, w9 2249; -O0: subs w9, w9, #1 2250; 2251; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire: 2252; -O1: and w10, w8, w1 2253; -O1: mvn w10, w10 2254; -O1: casa w9, w10, [x0] 2255; -O1: cmp w9, w8 2256 %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 4 2257 ret i32 %r 2258} 2259 2260define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) { 2261; -O0-LABEL: atomicrmw_nand_i32_aligned_release: 2262; -O0: and w8, w9, w8 2263; -O0: mvn w10, w8 2264; -O0: casl w8, w10, [x11] 2265; -O0: subs w9, w8, w9 2266; -O0: subs w9, w9, #1 2267; 2268; -O1-LABEL: atomicrmw_nand_i32_aligned_release: 2269; -O1: and w10, w8, w1 2270; -O1: mvn w10, w10 2271; -O1: casl w9, w10, [x0] 2272; -O1: cmp w9, w8 2273 %r = atomicrmw nand ptr %ptr, i32 %value release, align 4 2274 ret i32 %r 2275} 2276 2277define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 2278; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel: 2279; -O0: and w8, w9, w8 2280; -O0: mvn w10, w8 2281; -O0: casal w8, w10, [x11] 2282; -O0: subs w9, w8, w9 2283; -O0: subs w9, w9, #1 2284; 2285; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel: 2286; -O1: and w10, w8, w1 2287; -O1: mvn w10, w10 2288; -O1: casal w9, w10, [x0] 2289; -O1: cmp w9, w8 2290 %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 4 2291 ret i32 %r 2292} 2293 2294define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 2295; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst: 2296; -O0: and w8, w9, w8 2297; -O0: mvn w10, w8 2298; -O0: casal w8, w10, [x11] 2299; -O0: subs w9, w8, w9 2300; -O0: subs w9, w9, #1 2301; 2302; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst: 2303; -O1: and w10, w8, w1 2304; -O1: mvn w10, w10 2305; -O1: casal w9, w10, [x0] 2306; -O1: cmp w9, w8 2307 %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 4 2308 ret i32 %r 2309} 2310 2311define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) { 2312; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic: 2313; -O0: and x8, x9, x8 2314; -O0: mvn x10, x8 2315; -O0: cas x8, x10, [x11] 2316; -O0: subs x9, x8, x9 2317; -O0: subs w9, w9, #1 2318; 2319; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic: 2320; -O1: and x10, x8, x1 2321; -O1: mvn x10, x10 2322; -O1: cas x9, x10, [x0] 2323; -O1: cmp x9, x8 2324 %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 8 2325 ret i64 %r 2326} 2327 2328define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) { 2329; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire: 2330; -O0: and x8, x9, x8 2331; -O0: mvn x10, x8 2332; -O0: casa x8, x10, [x11] 2333; -O0: subs x9, x8, x9 2334; -O0: subs w9, w9, #1 2335; 2336; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire: 2337; -O1: and x10, x8, x1 2338; -O1: mvn x10, x10 2339; -O1: casa x9, x10, [x0] 2340; -O1: cmp x9, x8 2341 %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 8 2342 ret i64 %r 2343} 2344 2345define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) { 2346; -O0-LABEL: atomicrmw_nand_i64_aligned_release: 2347; -O0: and x8, x9, x8 2348; -O0: mvn x10, x8 2349; -O0: casl x8, x10, [x11] 2350; -O0: subs x9, x8, x9 2351; -O0: subs w9, w9, #1 2352; 2353; -O1-LABEL: atomicrmw_nand_i64_aligned_release: 2354; -O1: and x10, x8, x1 2355; -O1: mvn x10, x10 2356; -O1: casl x9, x10, [x0] 2357; -O1: cmp x9, x8 2358 %r = atomicrmw nand ptr %ptr, i64 %value release, align 8 2359 ret i64 %r 2360} 2361 2362define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 2363; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel: 2364; -O0: and x8, x9, x8 2365; -O0: mvn x10, x8 2366; -O0: casal x8, x10, [x11] 2367; -O0: subs x9, x8, x9 2368; -O0: subs w9, w9, #1 2369; 2370; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel: 2371; -O1: and x10, x8, x1 2372; -O1: mvn x10, x10 2373; -O1: casal x9, x10, [x0] 2374; -O1: cmp x9, x8 2375 %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 8 2376 ret i64 %r 2377} 2378 2379define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 2380; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst: 2381; -O0: and x8, x9, x8 2382; -O0: mvn x10, x8 2383; -O0: casal x8, x10, [x11] 2384; -O0: subs x9, x8, x9 2385; -O0: subs w9, w9, #1 2386; 2387; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst: 2388; -O1: and x10, x8, x1 2389; -O1: mvn x10, x10 2390; -O1: casal x9, x10, [x0] 2391; -O1: cmp x9, x8 2392 %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 8 2393 ret i64 %r 2394} 2395 2396define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) { 2397; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic: 2398; -O0: and x9, x10, x9 2399; -O0: and x12, x11, x12 2400; -O0: mvn x2, x12 2401; -O0: mvn x9, x9 2402; -O0: casp x0, x1, x2, x3, [x8] 2403; -O0: subs x11, x9, x11 2404; -O0: ccmp x8, x10, #0, eq 2405; 2406; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic: 2407; -O1: ldp x4, x5, [x0] 2408; -O1: and x8, x4, x2 2409; -O1: and x9, x7, x3 2410; -O1: mvn x10, x8 2411; -O1: mvn x11, x9 2412; -O1: casp x4, x5, x10, x11, [x0] 2413; -O1: cmp x4, x6 2414; -O1: ccmp x5, x7, #0, eq 2415 %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 16 2416 ret i128 %r 2417} 2418 2419define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) { 2420; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire: 2421; -O0: and x9, x10, x9 2422; -O0: and x12, x11, x12 2423; -O0: mvn x2, x12 2424; -O0: mvn x9, x9 2425; -O0: caspa x0, x1, x2, x3, [x8] 2426; -O0: subs x11, x9, x11 2427; -O0: ccmp x8, x10, #0, eq 2428; 2429; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire: 2430; -O1: ldp x4, x5, [x0] 2431; -O1: and x8, x4, x2 2432; -O1: and x9, x7, x3 2433; -O1: mvn x10, x8 2434; -O1: mvn x11, x9 2435; -O1: caspa x4, x5, x10, x11, [x0] 2436; -O1: cmp x4, x6 2437; -O1: ccmp x5, x7, #0, eq 2438 %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 16 2439 ret i128 %r 2440} 2441 2442define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) { 2443; -O0-LABEL: atomicrmw_nand_i128_aligned_release: 2444; -O0: and x9, x10, x9 2445; -O0: and x12, x11, x12 2446; -O0: mvn x2, x12 2447; -O0: mvn x9, x9 2448; -O0: caspl x0, x1, x2, x3, [x8] 2449; -O0: subs x11, x9, x11 2450; -O0: ccmp x8, x10, #0, eq 2451; 2452; -O1-LABEL: atomicrmw_nand_i128_aligned_release: 2453; -O1: ldp x4, x5, [x0] 2454; -O1: and x8, x4, x2 2455; -O1: and x9, x7, x3 2456; -O1: mvn x10, x8 2457; -O1: mvn x11, x9 2458; -O1: caspl x4, x5, x10, x11, [x0] 2459; -O1: cmp x4, x6 2460; -O1: ccmp x5, x7, #0, eq 2461 %r = atomicrmw nand ptr %ptr, i128 %value release, align 16 2462 ret i128 %r 2463} 2464 2465define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 2466; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel: 2467; -O0: and x9, x10, x9 2468; -O0: and x12, x11, x12 2469; -O0: mvn x2, x12 2470; -O0: mvn x9, x9 2471; -O0: caspal x0, x1, x2, x3, [x8] 2472; -O0: subs x11, x9, x11 2473; -O0: ccmp x8, x10, #0, eq 2474; 2475; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel: 2476; -O1: ldp x4, x5, [x0] 2477; -O1: and x8, x4, x2 2478; -O1: and x9, x7, x3 2479; -O1: mvn x10, x8 2480; -O1: mvn x11, x9 2481; -O1: caspal x4, x5, x10, x11, [x0] 2482; -O1: cmp x4, x6 2483; -O1: ccmp x5, x7, #0, eq 2484 %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 16 2485 ret i128 %r 2486} 2487 2488define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 2489; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst: 2490; -O0: and x9, x10, x9 2491; -O0: and x12, x11, x12 2492; -O0: mvn x2, x12 2493; -O0: mvn x9, x9 2494; -O0: caspal x0, x1, x2, x3, [x8] 2495; -O0: subs x11, x9, x11 2496; -O0: ccmp x8, x10, #0, eq 2497; 2498; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst: 2499; -O1: ldp x4, x5, [x0] 2500; -O1: and x8, x4, x2 2501; -O1: and x9, x7, x3 2502; -O1: mvn x10, x8 2503; -O1: mvn x11, x9 2504; -O1: caspal x4, x5, x10, x11, [x0] 2505; -O1: cmp x4, x6 2506; -O1: ccmp x5, x7, #0, eq 2507 %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 16 2508 ret i128 %r 2509} 2510 2511define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 2512; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic: 2513; -O0: and w8, w9, w8 2514; -O0: mvn w10, w8 2515; -O0: casb w8, w10, [x11] 2516; -O0: subs w9, w8, w9, uxtb 2517; -O0: subs w9, w9, #1 2518; 2519; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic: 2520; -O1: and w10, w8, w1 2521; -O1: mvn w10, w10 2522; -O1: casb w9, w10, [x0] 2523; -O1: cmp w9, w8, uxtb 2524 %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 1 2525 ret i8 %r 2526} 2527 2528define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) { 2529; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire: 2530; -O0: and w8, w9, w8 2531; -O0: mvn w10, w8 2532; -O0: casab w8, w10, [x11] 2533; -O0: subs w9, w8, w9, uxtb 2534; -O0: subs w9, w9, #1 2535; 2536; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire: 2537; -O1: and w10, w8, w1 2538; -O1: mvn w10, w10 2539; -O1: casab w9, w10, [x0] 2540; -O1: cmp w9, w8, uxtb 2541 %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 1 2542 ret i8 %r 2543} 2544 2545define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) { 2546; -O0-LABEL: atomicrmw_nand_i8_unaligned_release: 2547; -O0: and w8, w9, w8 2548; -O0: mvn w10, w8 2549; -O0: caslb w8, w10, [x11] 2550; -O0: subs w9, w8, w9, uxtb 2551; -O0: subs w9, w9, #1 2552; 2553; -O1-LABEL: atomicrmw_nand_i8_unaligned_release: 2554; -O1: and w10, w8, w1 2555; -O1: mvn w10, w10 2556; -O1: caslb w9, w10, [x0] 2557; -O1: cmp w9, w8, uxtb 2558 %r = atomicrmw nand ptr %ptr, i8 %value release, align 1 2559 ret i8 %r 2560} 2561 2562define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 2563; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel: 2564; -O0: and w8, w9, w8 2565; -O0: mvn w10, w8 2566; -O0: casalb w8, w10, [x11] 2567; -O0: subs w9, w8, w9, uxtb 2568; -O0: subs w9, w9, #1 2569; 2570; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel: 2571; -O1: and w10, w8, w1 2572; -O1: mvn w10, w10 2573; -O1: casalb w9, w10, [x0] 2574; -O1: cmp w9, w8, uxtb 2575 %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 1 2576 ret i8 %r 2577} 2578 2579define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 2580; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst: 2581; -O0: and w8, w9, w8 2582; -O0: mvn w10, w8 2583; -O0: casalb w8, w10, [x11] 2584; -O0: subs w9, w8, w9, uxtb 2585; -O0: subs w9, w9, #1 2586; 2587; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst: 2588; -O1: and w10, w8, w1 2589; -O1: mvn w10, w10 2590; -O1: casalb w9, w10, [x0] 2591; -O1: cmp w9, w8, uxtb 2592 %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 1 2593 ret i8 %r 2594} 2595 2596define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 2597; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic: 2598; -O0: and w8, w9, w8 2599; -O0: mvn w8, w8 2600; -O0: bl __atomic_compare_exchange 2601; 2602; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic: 2603; -O1: and w8, w0, w20 2604; -O1: mvn w8, w8 2605; -O1: bl __atomic_compare_exchange 2606 %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 1 2607 ret i16 %r 2608} 2609 2610define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) { 2611; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire: 2612; -O0: and w8, w9, w8 2613; -O0: mvn w8, w8 2614; -O0: bl __atomic_compare_exchange 2615; 2616; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire: 2617; -O1: and w8, w0, w20 2618; -O1: mvn w8, w8 2619; -O1: bl __atomic_compare_exchange 2620 %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 1 2621 ret i16 %r 2622} 2623 2624define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) { 2625; -O0-LABEL: atomicrmw_nand_i16_unaligned_release: 2626; -O0: and w8, w9, w8 2627; -O0: mvn w8, w8 2628; -O0: bl __atomic_compare_exchange 2629; 2630; -O1-LABEL: atomicrmw_nand_i16_unaligned_release: 2631; -O1: and w8, w0, w20 2632; -O1: mvn w8, w8 2633; -O1: bl __atomic_compare_exchange 2634 %r = atomicrmw nand ptr %ptr, i16 %value release, align 1 2635 ret i16 %r 2636} 2637 2638define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 2639; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel: 2640; -O0: and w8, w9, w8 2641; -O0: mvn w8, w8 2642; -O0: bl __atomic_compare_exchange 2643; 2644; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel: 2645; -O1: and w8, w0, w20 2646; -O1: mvn w8, w8 2647; -O1: bl __atomic_compare_exchange 2648 %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 1 2649 ret i16 %r 2650} 2651 2652define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 2653; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst: 2654; -O0: and w8, w9, w8 2655; -O0: mvn w8, w8 2656; -O0: bl __atomic_compare_exchange 2657; 2658; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst: 2659; -O1: and w8, w0, w20 2660; -O1: mvn w8, w8 2661; -O1: bl __atomic_compare_exchange 2662 %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 1 2663 ret i16 %r 2664} 2665 2666define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 2667; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic: 2668; -O0: and w8, w9, w8 2669; -O0: mvn w8, w8 2670; -O0: bl __atomic_compare_exchange 2671; 2672; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic: 2673; -O1: and w8, w0, w20 2674; -O1: mvn w8, w8 2675; -O1: bl __atomic_compare_exchange 2676 %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 1 2677 ret i32 %r 2678} 2679 2680define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) { 2681; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire: 2682; -O0: and w8, w9, w8 2683; -O0: mvn w8, w8 2684; -O0: bl __atomic_compare_exchange 2685; 2686; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire: 2687; -O1: and w8, w0, w20 2688; -O1: mvn w8, w8 2689; -O1: bl __atomic_compare_exchange 2690 %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 1 2691 ret i32 %r 2692} 2693 2694define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) { 2695; -O0-LABEL: atomicrmw_nand_i32_unaligned_release: 2696; -O0: and w8, w9, w8 2697; -O0: mvn w8, w8 2698; -O0: bl __atomic_compare_exchange 2699; 2700; -O1-LABEL: atomicrmw_nand_i32_unaligned_release: 2701; -O1: and w8, w0, w20 2702; -O1: mvn w8, w8 2703; -O1: bl __atomic_compare_exchange 2704 %r = atomicrmw nand ptr %ptr, i32 %value release, align 1 2705 ret i32 %r 2706} 2707 2708define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 2709; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel: 2710; -O0: and w8, w9, w8 2711; -O0: mvn w8, w8 2712; -O0: bl __atomic_compare_exchange 2713; 2714; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel: 2715; -O1: and w8, w0, w20 2716; -O1: mvn w8, w8 2717; -O1: bl __atomic_compare_exchange 2718 %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 1 2719 ret i32 %r 2720} 2721 2722define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 2723; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst: 2724; -O0: and w8, w9, w8 2725; -O0: mvn w8, w8 2726; -O0: bl __atomic_compare_exchange 2727; 2728; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst: 2729; -O1: and w8, w0, w20 2730; -O1: mvn w8, w8 2731; -O1: bl __atomic_compare_exchange 2732 %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 1 2733 ret i32 %r 2734} 2735 2736define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 2737; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic: 2738; -O0: and x8, x9, x8 2739; -O0: mvn x8, x8 2740; -O0: bl __atomic_compare_exchange 2741; 2742; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic: 2743; -O1: and x8, x0, x20 2744; -O1: mvn x8, x8 2745; -O1: bl __atomic_compare_exchange 2746 %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 1 2747 ret i64 %r 2748} 2749 2750define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) { 2751; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire: 2752; -O0: and x8, x9, x8 2753; -O0: mvn x8, x8 2754; -O0: bl __atomic_compare_exchange 2755; 2756; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire: 2757; -O1: and x8, x0, x20 2758; -O1: mvn x8, x8 2759; -O1: bl __atomic_compare_exchange 2760 %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 1 2761 ret i64 %r 2762} 2763 2764define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) { 2765; -O0-LABEL: atomicrmw_nand_i64_unaligned_release: 2766; -O0: and x8, x9, x8 2767; -O0: mvn x8, x8 2768; -O0: bl __atomic_compare_exchange 2769; 2770; -O1-LABEL: atomicrmw_nand_i64_unaligned_release: 2771; -O1: and x8, x0, x20 2772; -O1: mvn x8, x8 2773; -O1: bl __atomic_compare_exchange 2774 %r = atomicrmw nand ptr %ptr, i64 %value release, align 1 2775 ret i64 %r 2776} 2777 2778define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 2779; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel: 2780; -O0: and x8, x9, x8 2781; -O0: mvn x8, x8 2782; -O0: bl __atomic_compare_exchange 2783; 2784; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel: 2785; -O1: and x8, x0, x20 2786; -O1: mvn x8, x8 2787; -O1: bl __atomic_compare_exchange 2788 %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 1 2789 ret i64 %r 2790} 2791 2792define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 2793; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst: 2794; -O0: and x8, x9, x8 2795; -O0: mvn x8, x8 2796; -O0: bl __atomic_compare_exchange 2797; 2798; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst: 2799; -O1: and x8, x0, x20 2800; -O1: mvn x8, x8 2801; -O1: bl __atomic_compare_exchange 2802 %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 1 2803 ret i64 %r 2804} 2805 2806define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 2807; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic: 2808; -O0: and x9, x11, x9 2809; -O0: and x8, x10, x8 2810; -O0: mvn x8, x8 2811; -O0: mvn x9, x9 2812; -O0: bl __atomic_compare_exchange 2813; 2814; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic: 2815; -O1: ldp x0, x1, [x0] 2816; -O1: and x8, x1, x19 2817; -O1: and x9, x0, x21 2818; -O1: mvn x8, x8 2819; -O1: mvn x9, x9 2820; -O1: bl __atomic_compare_exchange 2821 %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 1 2822 ret i128 %r 2823} 2824 2825define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) { 2826; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire: 2827; -O0: and x9, x11, x9 2828; -O0: and x8, x10, x8 2829; -O0: mvn x8, x8 2830; -O0: mvn x9, x9 2831; -O0: bl __atomic_compare_exchange 2832; 2833; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire: 2834; -O1: ldp x0, x1, [x0] 2835; -O1: and x8, x1, x19 2836; -O1: and x9, x0, x21 2837; -O1: mvn x8, x8 2838; -O1: mvn x9, x9 2839; -O1: bl __atomic_compare_exchange 2840 %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 1 2841 ret i128 %r 2842} 2843 2844define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) { 2845; -O0-LABEL: atomicrmw_nand_i128_unaligned_release: 2846; -O0: and x9, x11, x9 2847; -O0: and x8, x10, x8 2848; -O0: mvn x8, x8 2849; -O0: mvn x9, x9 2850; -O0: bl __atomic_compare_exchange 2851; 2852; -O1-LABEL: atomicrmw_nand_i128_unaligned_release: 2853; -O1: ldp x0, x1, [x0] 2854; -O1: and x8, x1, x19 2855; -O1: and x9, x0, x21 2856; -O1: mvn x8, x8 2857; -O1: mvn x9, x9 2858; -O1: bl __atomic_compare_exchange 2859 %r = atomicrmw nand ptr %ptr, i128 %value release, align 1 2860 ret i128 %r 2861} 2862 2863define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 2864; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel: 2865; -O0: and x9, x11, x9 2866; -O0: and x8, x10, x8 2867; -O0: mvn x8, x8 2868; -O0: mvn x9, x9 2869; -O0: bl __atomic_compare_exchange 2870; 2871; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel: 2872; -O1: ldp x0, x1, [x0] 2873; -O1: and x8, x1, x19 2874; -O1: and x9, x0, x21 2875; -O1: mvn x8, x8 2876; -O1: mvn x9, x9 2877; -O1: bl __atomic_compare_exchange 2878 %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 1 2879 ret i128 %r 2880} 2881 2882define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 2883; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst: 2884; -O0: and x9, x11, x9 2885; -O0: and x8, x10, x8 2886; -O0: mvn x8, x8 2887; -O0: mvn x9, x9 2888; -O0: bl __atomic_compare_exchange 2889; 2890; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst: 2891; -O1: ldp x0, x1, [x0] 2892; -O1: and x8, x1, x19 2893; -O1: and x9, x0, x21 2894; -O1: mvn x8, x8 2895; -O1: mvn x9, x9 2896; -O1: bl __atomic_compare_exchange 2897 %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 1 2898 ret i128 %r 2899} 2900 2901define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) { 2902; CHECK-LABEL: atomicrmw_or_i8_aligned_monotonic: 2903; CHECK: ldsetb w1, w0, [x0] 2904 %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 1 2905 ret i8 %r 2906} 2907 2908define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) { 2909; CHECK-LABEL: atomicrmw_or_i8_aligned_acquire: 2910; CHECK: ldsetab w1, w0, [x0] 2911 %r = atomicrmw or ptr %ptr, i8 %value acquire, align 1 2912 ret i8 %r 2913} 2914 2915define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) { 2916; CHECK-LABEL: atomicrmw_or_i8_aligned_release: 2917; CHECK: ldsetlb w1, w0, [x0] 2918 %r = atomicrmw or ptr %ptr, i8 %value release, align 1 2919 ret i8 %r 2920} 2921 2922define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 2923; CHECK-LABEL: atomicrmw_or_i8_aligned_acq_rel: 2924; CHECK: ldsetalb w1, w0, [x0] 2925 %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 1 2926 ret i8 %r 2927} 2928 2929define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 2930; CHECK-LABEL: atomicrmw_or_i8_aligned_seq_cst: 2931; CHECK: ldsetalb w1, w0, [x0] 2932 %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 1 2933 ret i8 %r 2934} 2935 2936define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) { 2937; CHECK-LABEL: atomicrmw_or_i16_aligned_monotonic: 2938; CHECK: ldseth w1, w0, [x0] 2939 %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 2 2940 ret i16 %r 2941} 2942 2943define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) { 2944; CHECK-LABEL: atomicrmw_or_i16_aligned_acquire: 2945; CHECK: ldsetah w1, w0, [x0] 2946 %r = atomicrmw or ptr %ptr, i16 %value acquire, align 2 2947 ret i16 %r 2948} 2949 2950define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) { 2951; CHECK-LABEL: atomicrmw_or_i16_aligned_release: 2952; CHECK: ldsetlh w1, w0, [x0] 2953 %r = atomicrmw or ptr %ptr, i16 %value release, align 2 2954 ret i16 %r 2955} 2956 2957define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 2958; CHECK-LABEL: atomicrmw_or_i16_aligned_acq_rel: 2959; CHECK: ldsetalh w1, w0, [x0] 2960 %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 2 2961 ret i16 %r 2962} 2963 2964define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 2965; CHECK-LABEL: atomicrmw_or_i16_aligned_seq_cst: 2966; CHECK: ldsetalh w1, w0, [x0] 2967 %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 2 2968 ret i16 %r 2969} 2970 2971define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) { 2972; CHECK-LABEL: atomicrmw_or_i32_aligned_monotonic: 2973; CHECK: ldset w1, w0, [x0] 2974 %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 4 2975 ret i32 %r 2976} 2977 2978define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) { 2979; CHECK-LABEL: atomicrmw_or_i32_aligned_acquire: 2980; CHECK: ldseta w1, w0, [x0] 2981 %r = atomicrmw or ptr %ptr, i32 %value acquire, align 4 2982 ret i32 %r 2983} 2984 2985define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) { 2986; CHECK-LABEL: atomicrmw_or_i32_aligned_release: 2987; CHECK: ldsetl w1, w0, [x0] 2988 %r = atomicrmw or ptr %ptr, i32 %value release, align 4 2989 ret i32 %r 2990} 2991 2992define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 2993; CHECK-LABEL: atomicrmw_or_i32_aligned_acq_rel: 2994; CHECK: ldsetal w1, w0, [x0] 2995 %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 4 2996 ret i32 %r 2997} 2998 2999define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 3000; CHECK-LABEL: atomicrmw_or_i32_aligned_seq_cst: 3001; CHECK: ldsetal w1, w0, [x0] 3002 %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 4 3003 ret i32 %r 3004} 3005 3006define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) { 3007; CHECK-LABEL: atomicrmw_or_i64_aligned_monotonic: 3008; CHECK: ldset x1, x0, [x0] 3009 %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 8 3010 ret i64 %r 3011} 3012 3013define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) { 3014; CHECK-LABEL: atomicrmw_or_i64_aligned_acquire: 3015; CHECK: ldseta x1, x0, [x0] 3016 %r = atomicrmw or ptr %ptr, i64 %value acquire, align 8 3017 ret i64 %r 3018} 3019 3020define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) { 3021; CHECK-LABEL: atomicrmw_or_i64_aligned_release: 3022; CHECK: ldsetl x1, x0, [x0] 3023 %r = atomicrmw or ptr %ptr, i64 %value release, align 8 3024 ret i64 %r 3025} 3026 3027define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 3028; CHECK-LABEL: atomicrmw_or_i64_aligned_acq_rel: 3029; CHECK: ldsetal x1, x0, [x0] 3030 %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 8 3031 ret i64 %r 3032} 3033 3034define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 3035; CHECK-LABEL: atomicrmw_or_i64_aligned_seq_cst: 3036; CHECK: ldsetal x1, x0, [x0] 3037 %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 8 3038 ret i64 %r 3039} 3040 3041define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) { 3042; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic: 3043; -O0: orr x2, x11, x12 3044; -O0: orr x9, x10, x9 3045; -O0: casp x0, x1, x2, x3, [x8] 3046; -O0: subs x11, x9, x11 3047; -O0: ccmp x8, x10, #0, eq 3048; 3049; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic: 3050; -O1: ldp x4, x5, [x0] 3051; -O1: orr x8, x4, x2 3052; -O1: orr x9, x7, x3 3053; -O1: casp x4, x5, x8, x9, [x0] 3054; -O1: cmp x4, x6 3055; -O1: ccmp x5, x7, #0, eq 3056 %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 16 3057 ret i128 %r 3058} 3059 3060define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) { 3061; -O0-LABEL: atomicrmw_or_i128_aligned_acquire: 3062; -O0: orr x2, x11, x12 3063; -O0: orr x9, x10, x9 3064; -O0: caspa x0, x1, x2, x3, [x8] 3065; -O0: subs x11, x9, x11 3066; -O0: ccmp x8, x10, #0, eq 3067; 3068; -O1-LABEL: atomicrmw_or_i128_aligned_acquire: 3069; -O1: ldp x4, x5, [x0] 3070; -O1: orr x8, x4, x2 3071; -O1: orr x9, x7, x3 3072; -O1: caspa x4, x5, x8, x9, [x0] 3073; -O1: cmp x4, x6 3074; -O1: ccmp x5, x7, #0, eq 3075 %r = atomicrmw or ptr %ptr, i128 %value acquire, align 16 3076 ret i128 %r 3077} 3078 3079define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) { 3080; -O0-LABEL: atomicrmw_or_i128_aligned_release: 3081; -O0: orr x2, x11, x12 3082; -O0: orr x9, x10, x9 3083; -O0: caspl x0, x1, x2, x3, [x8] 3084; -O0: subs x11, x9, x11 3085; -O0: ccmp x8, x10, #0, eq 3086; 3087; -O1-LABEL: atomicrmw_or_i128_aligned_release: 3088; -O1: ldp x4, x5, [x0] 3089; -O1: orr x8, x4, x2 3090; -O1: orr x9, x7, x3 3091; -O1: caspl x4, x5, x8, x9, [x0] 3092; -O1: cmp x4, x6 3093; -O1: ccmp x5, x7, #0, eq 3094 %r = atomicrmw or ptr %ptr, i128 %value release, align 16 3095 ret i128 %r 3096} 3097 3098define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 3099; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel: 3100; -O0: orr x2, x11, x12 3101; -O0: orr x9, x10, x9 3102; -O0: caspal x0, x1, x2, x3, [x8] 3103; -O0: subs x11, x9, x11 3104; -O0: ccmp x8, x10, #0, eq 3105; 3106; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel: 3107; -O1: ldp x4, x5, [x0] 3108; -O1: orr x8, x4, x2 3109; -O1: orr x9, x7, x3 3110; -O1: caspal x4, x5, x8, x9, [x0] 3111; -O1: cmp x4, x6 3112; -O1: ccmp x5, x7, #0, eq 3113 %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 16 3114 ret i128 %r 3115} 3116 3117define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 3118; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst: 3119; -O0: orr x2, x11, x12 3120; -O0: orr x9, x10, x9 3121; -O0: caspal x0, x1, x2, x3, [x8] 3122; -O0: subs x11, x9, x11 3123; -O0: ccmp x8, x10, #0, eq 3124; 3125; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst: 3126; -O1: ldp x4, x5, [x0] 3127; -O1: orr x8, x4, x2 3128; -O1: orr x9, x7, x3 3129; -O1: caspal x4, x5, x8, x9, [x0] 3130; -O1: cmp x4, x6 3131; -O1: ccmp x5, x7, #0, eq 3132 %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 16 3133 ret i128 %r 3134} 3135 3136define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 3137; CHECK-LABEL: atomicrmw_or_i8_unaligned_monotonic: 3138; CHECK: ldsetb w1, w0, [x0] 3139 %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 1 3140 ret i8 %r 3141} 3142 3143define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) { 3144; CHECK-LABEL: atomicrmw_or_i8_unaligned_acquire: 3145; CHECK: ldsetab w1, w0, [x0] 3146 %r = atomicrmw or ptr %ptr, i8 %value acquire, align 1 3147 ret i8 %r 3148} 3149 3150define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) { 3151; CHECK-LABEL: atomicrmw_or_i8_unaligned_release: 3152; CHECK: ldsetlb w1, w0, [x0] 3153 %r = atomicrmw or ptr %ptr, i8 %value release, align 1 3154 ret i8 %r 3155} 3156 3157define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 3158; CHECK-LABEL: atomicrmw_or_i8_unaligned_acq_rel: 3159; CHECK: ldsetalb w1, w0, [x0] 3160 %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 1 3161 ret i8 %r 3162} 3163 3164define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 3165; CHECK-LABEL: atomicrmw_or_i8_unaligned_seq_cst: 3166; CHECK: ldsetalb w1, w0, [x0] 3167 %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 1 3168 ret i8 %r 3169} 3170 3171define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 3172; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic: 3173; -O0: orr w8, w9, w8 3174; -O0: bl __atomic_compare_exchange 3175; 3176; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic: 3177; -O1: orr w8, w0, w20 3178; -O1: bl __atomic_compare_exchange 3179 %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 1 3180 ret i16 %r 3181} 3182 3183define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) { 3184; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire: 3185; -O0: orr w8, w9, w8 3186; -O0: bl __atomic_compare_exchange 3187; 3188; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire: 3189; -O1: orr w8, w0, w20 3190; -O1: bl __atomic_compare_exchange 3191 %r = atomicrmw or ptr %ptr, i16 %value acquire, align 1 3192 ret i16 %r 3193} 3194 3195define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) { 3196; -O0-LABEL: atomicrmw_or_i16_unaligned_release: 3197; -O0: orr w8, w9, w8 3198; -O0: bl __atomic_compare_exchange 3199; 3200; -O1-LABEL: atomicrmw_or_i16_unaligned_release: 3201; -O1: orr w8, w0, w20 3202; -O1: bl __atomic_compare_exchange 3203 %r = atomicrmw or ptr %ptr, i16 %value release, align 1 3204 ret i16 %r 3205} 3206 3207define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 3208; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel: 3209; -O0: orr w8, w9, w8 3210; -O0: bl __atomic_compare_exchange 3211; 3212; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel: 3213; -O1: orr w8, w0, w20 3214; -O1: bl __atomic_compare_exchange 3215 %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 1 3216 ret i16 %r 3217} 3218 3219define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 3220; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst: 3221; -O0: orr w8, w9, w8 3222; -O0: bl __atomic_compare_exchange 3223; 3224; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst: 3225; -O1: orr w8, w0, w20 3226; -O1: bl __atomic_compare_exchange 3227 %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 1 3228 ret i16 %r 3229} 3230 3231define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 3232; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic: 3233; -O0: orr w8, w9, w8 3234; -O0: bl __atomic_compare_exchange 3235; 3236; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic: 3237; -O1: orr w8, w0, w20 3238; -O1: bl __atomic_compare_exchange 3239 %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 1 3240 ret i32 %r 3241} 3242 3243define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) { 3244; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire: 3245; -O0: orr w8, w9, w8 3246; -O0: bl __atomic_compare_exchange 3247; 3248; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire: 3249; -O1: orr w8, w0, w20 3250; -O1: bl __atomic_compare_exchange 3251 %r = atomicrmw or ptr %ptr, i32 %value acquire, align 1 3252 ret i32 %r 3253} 3254 3255define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) { 3256; -O0-LABEL: atomicrmw_or_i32_unaligned_release: 3257; -O0: orr w8, w9, w8 3258; -O0: bl __atomic_compare_exchange 3259; 3260; -O1-LABEL: atomicrmw_or_i32_unaligned_release: 3261; -O1: orr w8, w0, w20 3262; -O1: bl __atomic_compare_exchange 3263 %r = atomicrmw or ptr %ptr, i32 %value release, align 1 3264 ret i32 %r 3265} 3266 3267define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 3268; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel: 3269; -O0: orr w8, w9, w8 3270; -O0: bl __atomic_compare_exchange 3271; 3272; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel: 3273; -O1: orr w8, w0, w20 3274; -O1: bl __atomic_compare_exchange 3275 %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 1 3276 ret i32 %r 3277} 3278 3279define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 3280; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst: 3281; -O0: orr w8, w9, w8 3282; -O0: bl __atomic_compare_exchange 3283; 3284; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst: 3285; -O1: orr w8, w0, w20 3286; -O1: bl __atomic_compare_exchange 3287 %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 1 3288 ret i32 %r 3289} 3290 3291define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 3292; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic: 3293; -O0: orr x8, x9, x8 3294; -O0: bl __atomic_compare_exchange 3295; 3296; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic: 3297; -O1: orr x8, x0, x20 3298; -O1: bl __atomic_compare_exchange 3299 %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 1 3300 ret i64 %r 3301} 3302 3303define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) { 3304; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire: 3305; -O0: orr x8, x9, x8 3306; -O0: bl __atomic_compare_exchange 3307; 3308; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire: 3309; -O1: orr x8, x0, x20 3310; -O1: bl __atomic_compare_exchange 3311 %r = atomicrmw or ptr %ptr, i64 %value acquire, align 1 3312 ret i64 %r 3313} 3314 3315define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) { 3316; -O0-LABEL: atomicrmw_or_i64_unaligned_release: 3317; -O0: orr x8, x9, x8 3318; -O0: bl __atomic_compare_exchange 3319; 3320; -O1-LABEL: atomicrmw_or_i64_unaligned_release: 3321; -O1: orr x8, x0, x20 3322; -O1: bl __atomic_compare_exchange 3323 %r = atomicrmw or ptr %ptr, i64 %value release, align 1 3324 ret i64 %r 3325} 3326 3327define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 3328; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel: 3329; -O0: orr x8, x9, x8 3330; -O0: bl __atomic_compare_exchange 3331; 3332; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel: 3333; -O1: orr x8, x0, x20 3334; -O1: bl __atomic_compare_exchange 3335 %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 1 3336 ret i64 %r 3337} 3338 3339define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 3340; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst: 3341; -O0: orr x8, x9, x8 3342; -O0: bl __atomic_compare_exchange 3343; 3344; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst: 3345; -O1: orr x8, x0, x20 3346; -O1: bl __atomic_compare_exchange 3347 %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 1 3348 ret i64 %r 3349} 3350 3351define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 3352; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic: 3353; -O0: orr x8, x11, x8 3354; -O0: orr x9, x10, x9 3355; -O0: bl __atomic_compare_exchange 3356; 3357; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic: 3358; -O1: ldp x0, x1, [x0] 3359; -O1: orr x8, x1, x19 3360; -O1: orr x9, x0, x21 3361; -O1: bl __atomic_compare_exchange 3362 %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 1 3363 ret i128 %r 3364} 3365 3366define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) { 3367; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire: 3368; -O0: orr x8, x11, x8 3369; -O0: orr x9, x10, x9 3370; -O0: bl __atomic_compare_exchange 3371; 3372; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire: 3373; -O1: ldp x0, x1, [x0] 3374; -O1: orr x8, x1, x19 3375; -O1: orr x9, x0, x21 3376; -O1: bl __atomic_compare_exchange 3377 %r = atomicrmw or ptr %ptr, i128 %value acquire, align 1 3378 ret i128 %r 3379} 3380 3381define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) { 3382; -O0-LABEL: atomicrmw_or_i128_unaligned_release: 3383; -O0: orr x8, x11, x8 3384; -O0: orr x9, x10, x9 3385; -O0: bl __atomic_compare_exchange 3386; 3387; -O1-LABEL: atomicrmw_or_i128_unaligned_release: 3388; -O1: ldp x0, x1, [x0] 3389; -O1: orr x8, x1, x19 3390; -O1: orr x9, x0, x21 3391; -O1: bl __atomic_compare_exchange 3392 %r = atomicrmw or ptr %ptr, i128 %value release, align 1 3393 ret i128 %r 3394} 3395 3396define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 3397; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel: 3398; -O0: orr x8, x11, x8 3399; -O0: orr x9, x10, x9 3400; -O0: bl __atomic_compare_exchange 3401; 3402; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel: 3403; -O1: ldp x0, x1, [x0] 3404; -O1: orr x8, x1, x19 3405; -O1: orr x9, x0, x21 3406; -O1: bl __atomic_compare_exchange 3407 %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 1 3408 ret i128 %r 3409} 3410 3411define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 3412; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst: 3413; -O0: orr x8, x11, x8 3414; -O0: orr x9, x10, x9 3415; -O0: bl __atomic_compare_exchange 3416; 3417; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst: 3418; -O1: ldp x0, x1, [x0] 3419; -O1: orr x8, x1, x19 3420; -O1: orr x9, x0, x21 3421; -O1: bl __atomic_compare_exchange 3422 %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 1 3423 ret i128 %r 3424} 3425 3426define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) { 3427; CHECK-LABEL: atomicrmw_xor_i8_aligned_monotonic: 3428; CHECK: ldeorb w1, w0, [x0] 3429 %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 1 3430 ret i8 %r 3431} 3432 3433define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) { 3434; CHECK-LABEL: atomicrmw_xor_i8_aligned_acquire: 3435; CHECK: ldeorab w1, w0, [x0] 3436 %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 1 3437 ret i8 %r 3438} 3439 3440define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) { 3441; CHECK-LABEL: atomicrmw_xor_i8_aligned_release: 3442; CHECK: ldeorlb w1, w0, [x0] 3443 %r = atomicrmw xor ptr %ptr, i8 %value release, align 1 3444 ret i8 %r 3445} 3446 3447define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 3448; CHECK-LABEL: atomicrmw_xor_i8_aligned_acq_rel: 3449; CHECK: ldeoralb w1, w0, [x0] 3450 %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 1 3451 ret i8 %r 3452} 3453 3454define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 3455; CHECK-LABEL: atomicrmw_xor_i8_aligned_seq_cst: 3456; CHECK: ldeoralb w1, w0, [x0] 3457 %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 1 3458 ret i8 %r 3459} 3460 3461define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) { 3462; CHECK-LABEL: atomicrmw_xor_i16_aligned_monotonic: 3463; CHECK: ldeorh w1, w0, [x0] 3464 %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 2 3465 ret i16 %r 3466} 3467 3468define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) { 3469; CHECK-LABEL: atomicrmw_xor_i16_aligned_acquire: 3470; CHECK: ldeorah w1, w0, [x0] 3471 %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 2 3472 ret i16 %r 3473} 3474 3475define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) { 3476; CHECK-LABEL: atomicrmw_xor_i16_aligned_release: 3477; CHECK: ldeorlh w1, w0, [x0] 3478 %r = atomicrmw xor ptr %ptr, i16 %value release, align 2 3479 ret i16 %r 3480} 3481 3482define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 3483; CHECK-LABEL: atomicrmw_xor_i16_aligned_acq_rel: 3484; CHECK: ldeoralh w1, w0, [x0] 3485 %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 2 3486 ret i16 %r 3487} 3488 3489define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 3490; CHECK-LABEL: atomicrmw_xor_i16_aligned_seq_cst: 3491; CHECK: ldeoralh w1, w0, [x0] 3492 %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 2 3493 ret i16 %r 3494} 3495 3496define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) { 3497; CHECK-LABEL: atomicrmw_xor_i32_aligned_monotonic: 3498; CHECK: ldeor w1, w0, [x0] 3499 %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 4 3500 ret i32 %r 3501} 3502 3503define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) { 3504; CHECK-LABEL: atomicrmw_xor_i32_aligned_acquire: 3505; CHECK: ldeora w1, w0, [x0] 3506 %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 4 3507 ret i32 %r 3508} 3509 3510define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) { 3511; CHECK-LABEL: atomicrmw_xor_i32_aligned_release: 3512; CHECK: ldeorl w1, w0, [x0] 3513 %r = atomicrmw xor ptr %ptr, i32 %value release, align 4 3514 ret i32 %r 3515} 3516 3517define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 3518; CHECK-LABEL: atomicrmw_xor_i32_aligned_acq_rel: 3519; CHECK: ldeoral w1, w0, [x0] 3520 %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 4 3521 ret i32 %r 3522} 3523 3524define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 3525; CHECK-LABEL: atomicrmw_xor_i32_aligned_seq_cst: 3526; CHECK: ldeoral w1, w0, [x0] 3527 %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 4 3528 ret i32 %r 3529} 3530 3531define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) { 3532; CHECK-LABEL: atomicrmw_xor_i64_aligned_monotonic: 3533; CHECK: ldeor x1, x0, [x0] 3534 %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 8 3535 ret i64 %r 3536} 3537 3538define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) { 3539; CHECK-LABEL: atomicrmw_xor_i64_aligned_acquire: 3540; CHECK: ldeora x1, x0, [x0] 3541 %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 8 3542 ret i64 %r 3543} 3544 3545define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) { 3546; CHECK-LABEL: atomicrmw_xor_i64_aligned_release: 3547; CHECK: ldeorl x1, x0, [x0] 3548 %r = atomicrmw xor ptr %ptr, i64 %value release, align 8 3549 ret i64 %r 3550} 3551 3552define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 3553; CHECK-LABEL: atomicrmw_xor_i64_aligned_acq_rel: 3554; CHECK: ldeoral x1, x0, [x0] 3555 %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 8 3556 ret i64 %r 3557} 3558 3559define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 3560; CHECK-LABEL: atomicrmw_xor_i64_aligned_seq_cst: 3561; CHECK: ldeoral x1, x0, [x0] 3562 %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 8 3563 ret i64 %r 3564} 3565 3566define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) { 3567; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic: 3568; -O0: eor x2, x11, x12 3569; -O0: eor x9, x10, x9 3570; -O0: casp x0, x1, x2, x3, [x8] 3571; -O0: subs x11, x9, x11 3572; -O0: ccmp x8, x10, #0, eq 3573; 3574; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic: 3575; -O1: ldp x4, x5, [x0] 3576; -O1: eor x8, x4, x2 3577; -O1: eor x9, x7, x3 3578; -O1: casp x4, x5, x8, x9, [x0] 3579; -O1: cmp x4, x6 3580; -O1: ccmp x5, x7, #0, eq 3581 %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 16 3582 ret i128 %r 3583} 3584 3585define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) { 3586; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire: 3587; -O0: eor x2, x11, x12 3588; -O0: eor x9, x10, x9 3589; -O0: caspa x0, x1, x2, x3, [x8] 3590; -O0: subs x11, x9, x11 3591; -O0: ccmp x8, x10, #0, eq 3592; 3593; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire: 3594; -O1: ldp x4, x5, [x0] 3595; -O1: eor x8, x4, x2 3596; -O1: eor x9, x7, x3 3597; -O1: caspa x4, x5, x8, x9, [x0] 3598; -O1: cmp x4, x6 3599; -O1: ccmp x5, x7, #0, eq 3600 %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 16 3601 ret i128 %r 3602} 3603 3604define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) { 3605; -O0-LABEL: atomicrmw_xor_i128_aligned_release: 3606; -O0: eor x2, x11, x12 3607; -O0: eor x9, x10, x9 3608; -O0: caspl x0, x1, x2, x3, [x8] 3609; -O0: subs x11, x9, x11 3610; -O0: ccmp x8, x10, #0, eq 3611; 3612; -O1-LABEL: atomicrmw_xor_i128_aligned_release: 3613; -O1: ldp x4, x5, [x0] 3614; -O1: eor x8, x4, x2 3615; -O1: eor x9, x7, x3 3616; -O1: caspl x4, x5, x8, x9, [x0] 3617; -O1: cmp x4, x6 3618; -O1: ccmp x5, x7, #0, eq 3619 %r = atomicrmw xor ptr %ptr, i128 %value release, align 16 3620 ret i128 %r 3621} 3622 3623define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 3624; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel: 3625; -O0: eor x2, x11, x12 3626; -O0: eor x9, x10, x9 3627; -O0: caspal x0, x1, x2, x3, [x8] 3628; -O0: subs x11, x9, x11 3629; -O0: ccmp x8, x10, #0, eq 3630; 3631; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel: 3632; -O1: ldp x4, x5, [x0] 3633; -O1: eor x8, x4, x2 3634; -O1: eor x9, x7, x3 3635; -O1: caspal x4, x5, x8, x9, [x0] 3636; -O1: cmp x4, x6 3637; -O1: ccmp x5, x7, #0, eq 3638 %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 16 3639 ret i128 %r 3640} 3641 3642define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 3643; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst: 3644; -O0: eor x2, x11, x12 3645; -O0: eor x9, x10, x9 3646; -O0: caspal x0, x1, x2, x3, [x8] 3647; -O0: subs x11, x9, x11 3648; -O0: ccmp x8, x10, #0, eq 3649; 3650; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst: 3651; -O1: ldp x4, x5, [x0] 3652; -O1: eor x8, x4, x2 3653; -O1: eor x9, x7, x3 3654; -O1: caspal x4, x5, x8, x9, [x0] 3655; -O1: cmp x4, x6 3656; -O1: ccmp x5, x7, #0, eq 3657 %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 16 3658 ret i128 %r 3659} 3660 3661define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 3662; CHECK-LABEL: atomicrmw_xor_i8_unaligned_monotonic: 3663; CHECK: ldeorb w1, w0, [x0] 3664 %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 1 3665 ret i8 %r 3666} 3667 3668define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) { 3669; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acquire: 3670; CHECK: ldeorab w1, w0, [x0] 3671 %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 1 3672 ret i8 %r 3673} 3674 3675define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) { 3676; CHECK-LABEL: atomicrmw_xor_i8_unaligned_release: 3677; CHECK: ldeorlb w1, w0, [x0] 3678 %r = atomicrmw xor ptr %ptr, i8 %value release, align 1 3679 ret i8 %r 3680} 3681 3682define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 3683; CHECK-LABEL: atomicrmw_xor_i8_unaligned_acq_rel: 3684; CHECK: ldeoralb w1, w0, [x0] 3685 %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 1 3686 ret i8 %r 3687} 3688 3689define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 3690; CHECK-LABEL: atomicrmw_xor_i8_unaligned_seq_cst: 3691; CHECK: ldeoralb w1, w0, [x0] 3692 %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 1 3693 ret i8 %r 3694} 3695 3696define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 3697; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic: 3698; -O0: eor w8, w9, w8 3699; -O0: bl __atomic_compare_exchange 3700; 3701; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic: 3702; -O1: eor w8, w0, w20 3703; -O1: bl __atomic_compare_exchange 3704 %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 1 3705 ret i16 %r 3706} 3707 3708define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) { 3709; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire: 3710; -O0: eor w8, w9, w8 3711; -O0: bl __atomic_compare_exchange 3712; 3713; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire: 3714; -O1: eor w8, w0, w20 3715; -O1: bl __atomic_compare_exchange 3716 %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 1 3717 ret i16 %r 3718} 3719 3720define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) { 3721; -O0-LABEL: atomicrmw_xor_i16_unaligned_release: 3722; -O0: eor w8, w9, w8 3723; -O0: bl __atomic_compare_exchange 3724; 3725; -O1-LABEL: atomicrmw_xor_i16_unaligned_release: 3726; -O1: eor w8, w0, w20 3727; -O1: bl __atomic_compare_exchange 3728 %r = atomicrmw xor ptr %ptr, i16 %value release, align 1 3729 ret i16 %r 3730} 3731 3732define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 3733; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel: 3734; -O0: eor w8, w9, w8 3735; -O0: bl __atomic_compare_exchange 3736; 3737; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel: 3738; -O1: eor w8, w0, w20 3739; -O1: bl __atomic_compare_exchange 3740 %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 1 3741 ret i16 %r 3742} 3743 3744define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 3745; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst: 3746; -O0: eor w8, w9, w8 3747; -O0: bl __atomic_compare_exchange 3748; 3749; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst: 3750; -O1: eor w8, w0, w20 3751; -O1: bl __atomic_compare_exchange 3752 %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 1 3753 ret i16 %r 3754} 3755 3756define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 3757; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic: 3758; -O0: eor w8, w9, w8 3759; -O0: bl __atomic_compare_exchange 3760; 3761; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic: 3762; -O1: eor w8, w0, w20 3763; -O1: bl __atomic_compare_exchange 3764 %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 1 3765 ret i32 %r 3766} 3767 3768define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) { 3769; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire: 3770; -O0: eor w8, w9, w8 3771; -O0: bl __atomic_compare_exchange 3772; 3773; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire: 3774; -O1: eor w8, w0, w20 3775; -O1: bl __atomic_compare_exchange 3776 %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 1 3777 ret i32 %r 3778} 3779 3780define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) { 3781; -O0-LABEL: atomicrmw_xor_i32_unaligned_release: 3782; -O0: eor w8, w9, w8 3783; -O0: bl __atomic_compare_exchange 3784; 3785; -O1-LABEL: atomicrmw_xor_i32_unaligned_release: 3786; -O1: eor w8, w0, w20 3787; -O1: bl __atomic_compare_exchange 3788 %r = atomicrmw xor ptr %ptr, i32 %value release, align 1 3789 ret i32 %r 3790} 3791 3792define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 3793; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel: 3794; -O0: eor w8, w9, w8 3795; -O0: bl __atomic_compare_exchange 3796; 3797; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel: 3798; -O1: eor w8, w0, w20 3799; -O1: bl __atomic_compare_exchange 3800 %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 1 3801 ret i32 %r 3802} 3803 3804define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 3805; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst: 3806; -O0: eor w8, w9, w8 3807; -O0: bl __atomic_compare_exchange 3808; 3809; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst: 3810; -O1: eor w8, w0, w20 3811; -O1: bl __atomic_compare_exchange 3812 %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 1 3813 ret i32 %r 3814} 3815 3816define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 3817; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic: 3818; -O0: eor x8, x9, x8 3819; -O0: bl __atomic_compare_exchange 3820; 3821; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic: 3822; -O1: eor x8, x0, x20 3823; -O1: bl __atomic_compare_exchange 3824 %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 1 3825 ret i64 %r 3826} 3827 3828define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) { 3829; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire: 3830; -O0: eor x8, x9, x8 3831; -O0: bl __atomic_compare_exchange 3832; 3833; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire: 3834; -O1: eor x8, x0, x20 3835; -O1: bl __atomic_compare_exchange 3836 %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 1 3837 ret i64 %r 3838} 3839 3840define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) { 3841; -O0-LABEL: atomicrmw_xor_i64_unaligned_release: 3842; -O0: eor x8, x9, x8 3843; -O0: bl __atomic_compare_exchange 3844; 3845; -O1-LABEL: atomicrmw_xor_i64_unaligned_release: 3846; -O1: eor x8, x0, x20 3847; -O1: bl __atomic_compare_exchange 3848 %r = atomicrmw xor ptr %ptr, i64 %value release, align 1 3849 ret i64 %r 3850} 3851 3852define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 3853; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel: 3854; -O0: eor x8, x9, x8 3855; -O0: bl __atomic_compare_exchange 3856; 3857; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel: 3858; -O1: eor x8, x0, x20 3859; -O1: bl __atomic_compare_exchange 3860 %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 1 3861 ret i64 %r 3862} 3863 3864define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 3865; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst: 3866; -O0: eor x8, x9, x8 3867; -O0: bl __atomic_compare_exchange 3868; 3869; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst: 3870; -O1: eor x8, x0, x20 3871; -O1: bl __atomic_compare_exchange 3872 %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 1 3873 ret i64 %r 3874} 3875 3876define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 3877; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic: 3878; -O0: eor x8, x11, x8 3879; -O0: eor x9, x10, x9 3880; -O0: bl __atomic_compare_exchange 3881; 3882; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic: 3883; -O1: ldp x0, x1, [x0] 3884; -O1: eor x8, x1, x19 3885; -O1: eor x9, x0, x21 3886; -O1: bl __atomic_compare_exchange 3887 %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 1 3888 ret i128 %r 3889} 3890 3891define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) { 3892; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire: 3893; -O0: eor x8, x11, x8 3894; -O0: eor x9, x10, x9 3895; -O0: bl __atomic_compare_exchange 3896; 3897; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire: 3898; -O1: ldp x0, x1, [x0] 3899; -O1: eor x8, x1, x19 3900; -O1: eor x9, x0, x21 3901; -O1: bl __atomic_compare_exchange 3902 %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 1 3903 ret i128 %r 3904} 3905 3906define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) { 3907; -O0-LABEL: atomicrmw_xor_i128_unaligned_release: 3908; -O0: eor x8, x11, x8 3909; -O0: eor x9, x10, x9 3910; -O0: bl __atomic_compare_exchange 3911; 3912; -O1-LABEL: atomicrmw_xor_i128_unaligned_release: 3913; -O1: ldp x0, x1, [x0] 3914; -O1: eor x8, x1, x19 3915; -O1: eor x9, x0, x21 3916; -O1: bl __atomic_compare_exchange 3917 %r = atomicrmw xor ptr %ptr, i128 %value release, align 1 3918 ret i128 %r 3919} 3920 3921define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 3922; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel: 3923; -O0: eor x8, x11, x8 3924; -O0: eor x9, x10, x9 3925; -O0: bl __atomic_compare_exchange 3926; 3927; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel: 3928; -O1: ldp x0, x1, [x0] 3929; -O1: eor x8, x1, x19 3930; -O1: eor x9, x0, x21 3931; -O1: bl __atomic_compare_exchange 3932 %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 1 3933 ret i128 %r 3934} 3935 3936define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 3937; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst: 3938; -O0: eor x8, x11, x8 3939; -O0: eor x9, x10, x9 3940; -O0: bl __atomic_compare_exchange 3941; 3942; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst: 3943; -O1: ldp x0, x1, [x0] 3944; -O1: eor x8, x1, x19 3945; -O1: eor x9, x0, x21 3946; -O1: bl __atomic_compare_exchange 3947 %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 1 3948 ret i128 %r 3949} 3950 3951define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) { 3952; CHECK-LABEL: atomicrmw_max_i8_aligned_monotonic: 3953; CHECK: ldsmaxb w1, w0, [x0] 3954 %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 1 3955 ret i8 %r 3956} 3957 3958define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) { 3959; CHECK-LABEL: atomicrmw_max_i8_aligned_acquire: 3960; CHECK: ldsmaxab w1, w0, [x0] 3961 %r = atomicrmw max ptr %ptr, i8 %value acquire, align 1 3962 ret i8 %r 3963} 3964 3965define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) { 3966; CHECK-LABEL: atomicrmw_max_i8_aligned_release: 3967; CHECK: ldsmaxlb w1, w0, [x0] 3968 %r = atomicrmw max ptr %ptr, i8 %value release, align 1 3969 ret i8 %r 3970} 3971 3972define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 3973; CHECK-LABEL: atomicrmw_max_i8_aligned_acq_rel: 3974; CHECK: ldsmaxalb w1, w0, [x0] 3975 %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 1 3976 ret i8 %r 3977} 3978 3979define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 3980; CHECK-LABEL: atomicrmw_max_i8_aligned_seq_cst: 3981; CHECK: ldsmaxalb w1, w0, [x0] 3982 %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 1 3983 ret i8 %r 3984} 3985 3986define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) { 3987; CHECK-LABEL: atomicrmw_max_i16_aligned_monotonic: 3988; CHECK: ldsmaxh w1, w0, [x0] 3989 %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 2 3990 ret i16 %r 3991} 3992 3993define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) { 3994; CHECK-LABEL: atomicrmw_max_i16_aligned_acquire: 3995; CHECK: ldsmaxah w1, w0, [x0] 3996 %r = atomicrmw max ptr %ptr, i16 %value acquire, align 2 3997 ret i16 %r 3998} 3999 4000define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) { 4001; CHECK-LABEL: atomicrmw_max_i16_aligned_release: 4002; CHECK: ldsmaxlh w1, w0, [x0] 4003 %r = atomicrmw max ptr %ptr, i16 %value release, align 2 4004 ret i16 %r 4005} 4006 4007define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 4008; CHECK-LABEL: atomicrmw_max_i16_aligned_acq_rel: 4009; CHECK: ldsmaxalh w1, w0, [x0] 4010 %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 2 4011 ret i16 %r 4012} 4013 4014define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 4015; CHECK-LABEL: atomicrmw_max_i16_aligned_seq_cst: 4016; CHECK: ldsmaxalh w1, w0, [x0] 4017 %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 2 4018 ret i16 %r 4019} 4020 4021define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) { 4022; CHECK-LABEL: atomicrmw_max_i32_aligned_monotonic: 4023; CHECK: ldsmax w1, w0, [x0] 4024 %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 4 4025 ret i32 %r 4026} 4027 4028define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) { 4029; CHECK-LABEL: atomicrmw_max_i32_aligned_acquire: 4030; CHECK: ldsmaxa w1, w0, [x0] 4031 %r = atomicrmw max ptr %ptr, i32 %value acquire, align 4 4032 ret i32 %r 4033} 4034 4035define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) { 4036; CHECK-LABEL: atomicrmw_max_i32_aligned_release: 4037; CHECK: ldsmaxl w1, w0, [x0] 4038 %r = atomicrmw max ptr %ptr, i32 %value release, align 4 4039 ret i32 %r 4040} 4041 4042define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 4043; CHECK-LABEL: atomicrmw_max_i32_aligned_acq_rel: 4044; CHECK: ldsmaxal w1, w0, [x0] 4045 %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 4 4046 ret i32 %r 4047} 4048 4049define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 4050; CHECK-LABEL: atomicrmw_max_i32_aligned_seq_cst: 4051; CHECK: ldsmaxal w1, w0, [x0] 4052 %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 4 4053 ret i32 %r 4054} 4055 4056define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) { 4057; CHECK-LABEL: atomicrmw_max_i64_aligned_monotonic: 4058; CHECK: ldsmax x1, x0, [x0] 4059 %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 8 4060 ret i64 %r 4061} 4062 4063define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) { 4064; CHECK-LABEL: atomicrmw_max_i64_aligned_acquire: 4065; CHECK: ldsmaxa x1, x0, [x0] 4066 %r = atomicrmw max ptr %ptr, i64 %value acquire, align 8 4067 ret i64 %r 4068} 4069 4070define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) { 4071; CHECK-LABEL: atomicrmw_max_i64_aligned_release: 4072; CHECK: ldsmaxl x1, x0, [x0] 4073 %r = atomicrmw max ptr %ptr, i64 %value release, align 8 4074 ret i64 %r 4075} 4076 4077define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 4078; CHECK-LABEL: atomicrmw_max_i64_aligned_acq_rel: 4079; CHECK: ldsmaxal x1, x0, [x0] 4080 %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 8 4081 ret i64 %r 4082} 4083 4084define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 4085; CHECK-LABEL: atomicrmw_max_i64_aligned_seq_cst: 4086; CHECK: ldsmaxal x1, x0, [x0] 4087 %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 8 4088 ret i64 %r 4089} 4090 4091define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) { 4092; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic: 4093; -O0: subs x13, x9, x10 4094; -O0: csel x9, x10, x9, lt 4095; -O0: csel x2, x11, x12, lt 4096; -O0: casp x0, x1, x2, x3, [x8] 4097; -O0: subs x11, x9, x11 4098; -O0: ccmp x8, x10, #0, eq 4099; 4100; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic: 4101; -O1: ldp x4, x5, [x0] 4102; -O1: cmp x3, x7 4103; -O1: csel x9, x7, x3, lt 4104; -O1: csel x8, x4, x2, lt 4105; -O1: casp x4, x5, x8, x9, [x0] 4106; -O1: cmp x4, x6 4107; -O1: ccmp x5, x7, #0, eq 4108 %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 16 4109 ret i128 %r 4110} 4111 4112define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) { 4113; -O0-LABEL: atomicrmw_max_i128_aligned_acquire: 4114; -O0: subs x13, x9, x10 4115; -O0: csel x9, x10, x9, lt 4116; -O0: csel x2, x11, x12, lt 4117; -O0: caspa x0, x1, x2, x3, [x8] 4118; -O0: subs x11, x9, x11 4119; -O0: ccmp x8, x10, #0, eq 4120; 4121; -O1-LABEL: atomicrmw_max_i128_aligned_acquire: 4122; -O1: ldp x4, x5, [x0] 4123; -O1: cmp x3, x7 4124; -O1: csel x9, x7, x3, lt 4125; -O1: csel x8, x4, x2, lt 4126; -O1: caspa x4, x5, x8, x9, [x0] 4127; -O1: cmp x4, x6 4128; -O1: ccmp x5, x7, #0, eq 4129 %r = atomicrmw max ptr %ptr, i128 %value acquire, align 16 4130 ret i128 %r 4131} 4132 4133define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) { 4134; -O0-LABEL: atomicrmw_max_i128_aligned_release: 4135; -O0: subs x13, x9, x10 4136; -O0: csel x9, x10, x9, lt 4137; -O0: csel x2, x11, x12, lt 4138; -O0: caspl x0, x1, x2, x3, [x8] 4139; -O0: subs x11, x9, x11 4140; -O0: ccmp x8, x10, #0, eq 4141; 4142; -O1-LABEL: atomicrmw_max_i128_aligned_release: 4143; -O1: ldp x4, x5, [x0] 4144; -O1: cmp x3, x7 4145; -O1: csel x9, x7, x3, lt 4146; -O1: csel x8, x4, x2, lt 4147; -O1: caspl x4, x5, x8, x9, [x0] 4148; -O1: cmp x4, x6 4149; -O1: ccmp x5, x7, #0, eq 4150 %r = atomicrmw max ptr %ptr, i128 %value release, align 16 4151 ret i128 %r 4152} 4153 4154define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 4155; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel: 4156; -O0: subs x13, x9, x10 4157; -O0: csel x9, x10, x9, lt 4158; -O0: csel x2, x11, x12, lt 4159; -O0: caspal x0, x1, x2, x3, [x8] 4160; -O0: subs x11, x9, x11 4161; -O0: ccmp x8, x10, #0, eq 4162; 4163; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel: 4164; -O1: ldp x4, x5, [x0] 4165; -O1: cmp x3, x7 4166; -O1: csel x9, x7, x3, lt 4167; -O1: csel x8, x4, x2, lt 4168; -O1: caspal x4, x5, x8, x9, [x0] 4169; -O1: cmp x4, x6 4170; -O1: ccmp x5, x7, #0, eq 4171 %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 16 4172 ret i128 %r 4173} 4174 4175define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 4176; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst: 4177; -O0: subs x13, x9, x10 4178; -O0: csel x9, x10, x9, lt 4179; -O0: csel x2, x11, x12, lt 4180; -O0: caspal x0, x1, x2, x3, [x8] 4181; -O0: subs x11, x9, x11 4182; -O0: ccmp x8, x10, #0, eq 4183; 4184; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst: 4185; -O1: ldp x4, x5, [x0] 4186; -O1: cmp x3, x7 4187; -O1: csel x9, x7, x3, lt 4188; -O1: csel x8, x4, x2, lt 4189; -O1: caspal x4, x5, x8, x9, [x0] 4190; -O1: cmp x4, x6 4191; -O1: ccmp x5, x7, #0, eq 4192 %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 16 4193 ret i128 %r 4194} 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 1 4200 ret i8 %r 4201} 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 1 4207 ret i8 %r 4208} 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 1 4214 ret i8 %r 4215} 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 1 4221 ret i8 %r 4222} 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 1 4228 ret i8 %r 4229} 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, w9 4234; -O0: subs w10, w10, w8, sxth 4235; -O0: csel w8, w9, w8, gt 4236; -O0: bl __atomic_compare_exchange 4237; 4238; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic: 4239; -O1: sxth w8, w0 4240; -O1: cmp w8, w20, sxth 4241; -O1: csel w8, w0, w20, gt 4242; -O1: bl __atomic_compare_exchange 4243 %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 1 4244 ret i16 %r 4245} 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, w9 4250; -O0: subs w10, w10, w8, sxth 4251; -O0: csel w8, w9, w8, gt 4252; -O0: bl __atomic_compare_exchange 4253; 4254; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire: 4255; -O1: sxth w8, w0 4256; -O1: cmp w8, w20, sxth 4257; -O1: csel w8, w0, w20, gt 4258; -O1: bl __atomic_compare_exchange 4259 %r = atomicrmw max ptr %ptr, i16 %value acquire, align 1 4260 ret i16 %r 4261} 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, w9 4266; -O0: subs w10, w10, w8, sxth 4267; -O0: csel w8, w9, w8, gt 4268; -O0: bl __atomic_compare_exchange 4269; 4270; -O1-LABEL: atomicrmw_max_i16_unaligned_release: 4271; -O1: sxth w8, w0 4272; -O1: cmp w8, w20, sxth 4273; -O1: csel w8, w0, w20, gt 4274; -O1: bl __atomic_compare_exchange 4275 %r = atomicrmw max ptr %ptr, i16 %value release, align 1 4276 ret i16 %r 4277} 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, w9 4282; -O0: subs w10, w10, w8, sxth 4283; -O0: csel w8, w9, w8, gt 4284; -O0: bl __atomic_compare_exchange 4285; 4286; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel: 4287; -O1: sxth w8, w0 4288; -O1: cmp w8, w20, sxth 4289; -O1: csel w8, w0, w20, gt 4290; -O1: bl __atomic_compare_exchange 4291 %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 1 4292 ret i16 %r 4293} 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, w9 4298; -O0: subs w10, w10, w8, sxth 4299; -O0: csel w8, w9, w8, gt 4300; -O0: bl __atomic_compare_exchange 4301; 4302; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst: 4303; -O1: sxth w8, w0 4304; -O1: cmp w8, w20, sxth 4305; -O1: csel w8, w0, w20, gt 4306; -O1: bl __atomic_compare_exchange 4307 %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 1 4308 ret i16 %r 4309} 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, w8 4314; -O0: csel w8, w9, w8, gt 4315; -O0: bl __atomic_compare_exchange 4316; 4317; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic: 4318; -O1: cmp w0, w20 4319; -O1: csel w8, w0, w20, gt 4320; -O1: bl __atomic_compare_exchange 4321 %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 1 4322 ret i32 %r 4323} 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, w8 4328; -O0: csel w8, w9, w8, gt 4329; -O0: bl __atomic_compare_exchange 4330; 4331; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire: 4332; -O1: cmp w0, w20 4333; -O1: csel w8, w0, w20, gt 4334; -O1: bl __atomic_compare_exchange 4335 %r = atomicrmw max ptr %ptr, i32 %value acquire, align 1 4336 ret i32 %r 4337} 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, w8 4342; -O0: csel w8, w9, w8, gt 4343; -O0: bl __atomic_compare_exchange 4344; 4345; -O1-LABEL: atomicrmw_max_i32_unaligned_release: 4346; -O1: cmp w0, w20 4347; -O1: csel w8, w0, w20, gt 4348; -O1: bl __atomic_compare_exchange 4349 %r = atomicrmw max ptr %ptr, i32 %value release, align 1 4350 ret i32 %r 4351} 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, w8 4356; -O0: csel w8, w9, w8, gt 4357; -O0: bl __atomic_compare_exchange 4358; 4359; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel: 4360; -O1: cmp w0, w20 4361; -O1: csel w8, w0, w20, gt 4362; -O1: bl __atomic_compare_exchange 4363 %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 1 4364 ret i32 %r 4365} 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, w8 4370; -O0: csel w8, w9, w8, gt 4371; -O0: bl __atomic_compare_exchange 4372; 4373; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst: 4374; -O1: cmp w0, w20 4375; -O1: csel w8, w0, w20, gt 4376; -O1: bl __atomic_compare_exchange 4377 %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 1 4378 ret i32 %r 4379} 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, x8 4384; -O0: csel x8, x9, x8, gt 4385; -O0: bl __atomic_compare_exchange 4386; 4387; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic: 4388; -O1: cmp x0, x20 4389; -O1: csel x8, x0, x20, gt 4390; -O1: bl __atomic_compare_exchange 4391 %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 1 4392 ret i64 %r 4393} 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, x8 4398; -O0: csel x8, x9, x8, gt 4399; -O0: bl __atomic_compare_exchange 4400; 4401; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire: 4402; -O1: cmp x0, x20 4403; -O1: csel x8, x0, x20, gt 4404; -O1: bl __atomic_compare_exchange 4405 %r = atomicrmw max ptr %ptr, i64 %value acquire, align 1 4406 ret i64 %r 4407} 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, x8 4412; -O0: csel x8, x9, x8, gt 4413; -O0: bl __atomic_compare_exchange 4414; 4415; -O1-LABEL: atomicrmw_max_i64_unaligned_release: 4416; -O1: cmp x0, x20 4417; -O1: csel x8, x0, x20, gt 4418; -O1: bl __atomic_compare_exchange 4419 %r = atomicrmw max ptr %ptr, i64 %value release, align 1 4420 ret i64 %r 4421} 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, x8 4426; -O0: csel x8, x9, x8, gt 4427; -O0: bl __atomic_compare_exchange 4428; 4429; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel: 4430; -O1: cmp x0, x20 4431; -O1: csel x8, x0, x20, gt 4432; -O1: bl __atomic_compare_exchange 4433 %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 1 4434 ret i64 %r 4435} 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, x8 4440; -O0: csel x8, x9, x8, gt 4441; -O0: bl __atomic_compare_exchange 4442; 4443; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst: 4444; -O1: cmp x0, x20 4445; -O1: csel x8, x0, x20, gt 4446; -O1: bl __atomic_compare_exchange 4447 %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 1 4448 ret i64 %r 4449} 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 x12, x9, x10 4454; -O0: csel x8, x11, x8, lt 4455; -O0: csel x9, x10, x9, lt 4456; -O0: bl __atomic_compare_exchange 4457; 4458; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic: 4459; -O1: ldp x0, x1, [x0] 4460; -O1: cmp x19, x1 4461; -O1: csel x8, x1, x19, lt 4462; -O1: csel x9, x0, x21, lt 4463; -O1: bl __atomic_compare_exchange 4464 %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 1 4465 ret i128 %r 4466} 4467 4468define dso_local i128 @atomicrmw_max_i128_unaligned_acquire(ptr %ptr, i128 %value) { 4469; -O0-LABEL: atomicrmw_max_i128_unaligned_acquire: 4470; -O0: subs x12, x9, x10 4471; -O0: csel x8, x11, x8, lt 4472; -O0: csel x9, x10, x9, lt 4473; -O0: bl __atomic_compare_exchange 4474; 4475; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire: 4476; -O1: ldp x0, x1, [x0] 4477; -O1: cmp x19, x1 4478; -O1: csel x8, x1, x19, lt 4479; -O1: csel x9, x0, x21, lt 4480; -O1: bl __atomic_compare_exchange 4481 %r = atomicrmw max ptr %ptr, i128 %value acquire, align 1 4482 ret i128 %r 4483} 4484 4485define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) { 4486; -O0-LABEL: atomicrmw_max_i128_unaligned_release: 4487; -O0: subs x12, x9, x10 4488; -O0: csel x8, x11, x8, lt 4489; -O0: csel x9, x10, x9, lt 4490; -O0: bl __atomic_compare_exchange 4491; 4492; -O1-LABEL: atomicrmw_max_i128_unaligned_release: 4493; -O1: ldp x0, x1, [x0] 4494; -O1: cmp x19, x1 4495; -O1: csel x8, x1, x19, lt 4496; -O1: csel x9, x0, x21, lt 4497; -O1: bl __atomic_compare_exchange 4498 %r = atomicrmw max ptr %ptr, i128 %value release, align 1 4499 ret i128 %r 4500} 4501 4502define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 4503; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel: 4504; -O0: subs x12, x9, x10 4505; -O0: csel x8, x11, x8, lt 4506; -O0: csel x9, x10, x9, lt 4507; -O0: bl __atomic_compare_exchange 4508; 4509; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel: 4510; -O1: ldp x0, x1, [x0] 4511; -O1: cmp x19, x1 4512; -O1: csel x8, x1, x19, lt 4513; -O1: csel x9, x0, x21, lt 4514; -O1: bl __atomic_compare_exchange 4515 %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 1 4516 ret i128 %r 4517} 4518 4519define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 4520; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst: 4521; -O0: subs x12, x9, x10 4522; -O0: csel x8, x11, x8, lt 4523; -O0: csel x9, x10, x9, lt 4524; -O0: bl __atomic_compare_exchange 4525; 4526; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst: 4527; -O1: ldp x0, x1, [x0] 4528; -O1: cmp x19, x1 4529; -O1: csel x8, x1, x19, lt 4530; -O1: csel x9, x0, x21, lt 4531; -O1: bl __atomic_compare_exchange 4532 %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 1 4533 ret i128 %r 4534} 4535 4536define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) { 4537; CHECK-LABEL: atomicrmw_min_i8_aligned_monotonic: 4538; CHECK: ldsminb w1, w0, [x0] 4539 %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 1 4540 ret i8 %r 4541} 4542 4543define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) { 4544; CHECK-LABEL: atomicrmw_min_i8_aligned_acquire: 4545; CHECK: ldsminab w1, w0, [x0] 4546 %r = atomicrmw min ptr %ptr, i8 %value acquire, align 1 4547 ret i8 %r 4548} 4549 4550define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) { 4551; CHECK-LABEL: atomicrmw_min_i8_aligned_release: 4552; CHECK: ldsminlb w1, w0, [x0] 4553 %r = atomicrmw min ptr %ptr, i8 %value release, align 1 4554 ret i8 %r 4555} 4556 4557define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 4558; CHECK-LABEL: atomicrmw_min_i8_aligned_acq_rel: 4559; CHECK: ldsminalb w1, w0, [x0] 4560 %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 1 4561 ret i8 %r 4562} 4563 4564define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 4565; CHECK-LABEL: atomicrmw_min_i8_aligned_seq_cst: 4566; CHECK: ldsminalb w1, w0, [x0] 4567 %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 1 4568 ret i8 %r 4569} 4570 4571define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) { 4572; CHECK-LABEL: atomicrmw_min_i16_aligned_monotonic: 4573; CHECK: ldsminh w1, w0, [x0] 4574 %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 2 4575 ret i16 %r 4576} 4577 4578define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) { 4579; CHECK-LABEL: atomicrmw_min_i16_aligned_acquire: 4580; CHECK: ldsminah w1, w0, [x0] 4581 %r = atomicrmw min ptr %ptr, i16 %value acquire, align 2 4582 ret i16 %r 4583} 4584 4585define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) { 4586; CHECK-LABEL: atomicrmw_min_i16_aligned_release: 4587; CHECK: ldsminlh w1, w0, [x0] 4588 %r = atomicrmw min ptr %ptr, i16 %value release, align 2 4589 ret i16 %r 4590} 4591 4592define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 4593; CHECK-LABEL: atomicrmw_min_i16_aligned_acq_rel: 4594; CHECK: ldsminalh w1, w0, [x0] 4595 %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 2 4596 ret i16 %r 4597} 4598 4599define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 4600; CHECK-LABEL: atomicrmw_min_i16_aligned_seq_cst: 4601; CHECK: ldsminalh w1, w0, [x0] 4602 %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 2 4603 ret i16 %r 4604} 4605 4606define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) { 4607; CHECK-LABEL: atomicrmw_min_i32_aligned_monotonic: 4608; CHECK: ldsmin w1, w0, [x0] 4609 %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 4 4610 ret i32 %r 4611} 4612 4613define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) { 4614; CHECK-LABEL: atomicrmw_min_i32_aligned_acquire: 4615; CHECK: ldsmina w1, w0, [x0] 4616 %r = atomicrmw min ptr %ptr, i32 %value acquire, align 4 4617 ret i32 %r 4618} 4619 4620define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) { 4621; CHECK-LABEL: atomicrmw_min_i32_aligned_release: 4622; CHECK: ldsminl w1, w0, [x0] 4623 %r = atomicrmw min ptr %ptr, i32 %value release, align 4 4624 ret i32 %r 4625} 4626 4627define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 4628; CHECK-LABEL: atomicrmw_min_i32_aligned_acq_rel: 4629; CHECK: ldsminal w1, w0, [x0] 4630 %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 4 4631 ret i32 %r 4632} 4633 4634define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 4635; CHECK-LABEL: atomicrmw_min_i32_aligned_seq_cst: 4636; CHECK: ldsminal w1, w0, [x0] 4637 %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 4 4638 ret i32 %r 4639} 4640 4641define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) { 4642; CHECK-LABEL: atomicrmw_min_i64_aligned_monotonic: 4643; CHECK: ldsmin x1, x0, [x0] 4644 %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 8 4645 ret i64 %r 4646} 4647 4648define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) { 4649; CHECK-LABEL: atomicrmw_min_i64_aligned_acquire: 4650; CHECK: ldsmina x1, x0, [x0] 4651 %r = atomicrmw min ptr %ptr, i64 %value acquire, align 8 4652 ret i64 %r 4653} 4654 4655define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) { 4656; CHECK-LABEL: atomicrmw_min_i64_aligned_release: 4657; CHECK: ldsminl x1, x0, [x0] 4658 %r = atomicrmw min ptr %ptr, i64 %value release, align 8 4659 ret i64 %r 4660} 4661 4662define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 4663; CHECK-LABEL: atomicrmw_min_i64_aligned_acq_rel: 4664; CHECK: ldsminal x1, x0, [x0] 4665 %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 8 4666 ret i64 %r 4667} 4668 4669define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 4670; CHECK-LABEL: atomicrmw_min_i64_aligned_seq_cst: 4671; CHECK: ldsminal x1, x0, [x0] 4672 %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 8 4673 ret i64 %r 4674} 4675 4676define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) { 4677; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic: 4678; -O0: subs x13, x9, x10 4679; -O0: csel x9, x10, x9, ge 4680; -O0: csel x2, x11, x12, ge 4681; -O0: casp x0, x1, x2, x3, [x8] 4682; -O0: subs x11, x9, x11 4683; -O0: ccmp x8, x10, #0, eq 4684; 4685; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic: 4686; -O1: ldp x4, x5, [x0] 4687; -O1: cmp x3, x7 4688; -O1: csel x9, x7, x3, ge 4689; -O1: csel x8, x4, x2, ge 4690; -O1: casp x4, x5, x8, x9, [x0] 4691; -O1: cmp x4, x6 4692; -O1: ccmp x5, x7, #0, eq 4693 %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 16 4694 ret i128 %r 4695} 4696 4697define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) { 4698; -O0-LABEL: atomicrmw_min_i128_aligned_acquire: 4699; -O0: subs x13, x9, x10 4700; -O0: csel x9, x10, x9, ge 4701; -O0: csel x2, x11, x12, ge 4702; -O0: caspa x0, x1, x2, x3, [x8] 4703; -O0: subs x11, x9, x11 4704; -O0: ccmp x8, x10, #0, eq 4705; 4706; -O1-LABEL: atomicrmw_min_i128_aligned_acquire: 4707; -O1: ldp x4, x5, [x0] 4708; -O1: cmp x3, x7 4709; -O1: csel x9, x7, x3, ge 4710; -O1: csel x8, x4, x2, ge 4711; -O1: caspa x4, x5, x8, x9, [x0] 4712; -O1: cmp x4, x6 4713; -O1: ccmp x5, x7, #0, eq 4714 %r = atomicrmw min ptr %ptr, i128 %value acquire, align 16 4715 ret i128 %r 4716} 4717 4718define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) { 4719; -O0-LABEL: atomicrmw_min_i128_aligned_release: 4720; -O0: subs x13, x9, x10 4721; -O0: csel x9, x10, x9, ge 4722; -O0: csel x2, x11, x12, ge 4723; -O0: caspl x0, x1, x2, x3, [x8] 4724; -O0: subs x11, x9, x11 4725; -O0: ccmp x8, x10, #0, eq 4726; 4727; -O1-LABEL: atomicrmw_min_i128_aligned_release: 4728; -O1: ldp x4, x5, [x0] 4729; -O1: cmp x3, x7 4730; -O1: csel x9, x7, x3, ge 4731; -O1: csel x8, x4, x2, ge 4732; -O1: caspl x4, x5, x8, x9, [x0] 4733; -O1: cmp x4, x6 4734; -O1: ccmp x5, x7, #0, eq 4735 %r = atomicrmw min ptr %ptr, i128 %value release, align 16 4736 ret i128 %r 4737} 4738 4739define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 4740; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel: 4741; -O0: subs x13, x9, x10 4742; -O0: csel x9, x10, x9, ge 4743; -O0: csel x2, x11, x12, ge 4744; -O0: caspal x0, x1, x2, x3, [x8] 4745; -O0: subs x11, x9, x11 4746; -O0: ccmp x8, x10, #0, eq 4747; 4748; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel: 4749; -O1: ldp x4, x5, [x0] 4750; -O1: cmp x3, x7 4751; -O1: csel x9, x7, x3, ge 4752; -O1: csel x8, x4, x2, ge 4753; -O1: caspal x4, x5, x8, x9, [x0] 4754; -O1: cmp x4, x6 4755; -O1: ccmp x5, x7, #0, eq 4756 %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 16 4757 ret i128 %r 4758} 4759 4760define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 4761; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst: 4762; -O0: subs x13, x9, x10 4763; -O0: csel x9, x10, x9, ge 4764; -O0: csel x2, x11, x12, ge 4765; -O0: caspal x0, x1, x2, x3, [x8] 4766; -O0: subs x11, x9, x11 4767; -O0: ccmp x8, x10, #0, eq 4768; 4769; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst: 4770; -O1: ldp x4, x5, [x0] 4771; -O1: cmp x3, x7 4772; -O1: csel x9, x7, x3, ge 4773; -O1: csel x8, x4, x2, ge 4774; -O1: caspal x4, x5, x8, x9, [x0] 4775; -O1: cmp x4, x6 4776; -O1: ccmp x5, x7, #0, eq 4777 %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 16 4778 ret i128 %r 4779} 4780 4781define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 4782; CHECK-LABEL: atomicrmw_min_i8_unaligned_monotonic: 4783; CHECK: ldsminb w1, w0, [x0] 4784 %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 1 4785 ret i8 %r 4786} 4787 4788define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) { 4789; CHECK-LABEL: atomicrmw_min_i8_unaligned_acquire: 4790; CHECK: ldsminab w1, w0, [x0] 4791 %r = atomicrmw min ptr %ptr, i8 %value acquire, align 1 4792 ret i8 %r 4793} 4794 4795define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) { 4796; CHECK-LABEL: atomicrmw_min_i8_unaligned_release: 4797; CHECK: ldsminlb w1, w0, [x0] 4798 %r = atomicrmw min ptr %ptr, i8 %value release, align 1 4799 ret i8 %r 4800} 4801 4802define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 4803; CHECK-LABEL: atomicrmw_min_i8_unaligned_acq_rel: 4804; CHECK: ldsminalb w1, w0, [x0] 4805 %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 1 4806 ret i8 %r 4807} 4808 4809define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 4810; CHECK-LABEL: atomicrmw_min_i8_unaligned_seq_cst: 4811; CHECK: ldsminalb w1, w0, [x0] 4812 %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 1 4813 ret i8 %r 4814} 4815 4816define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 4817; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic: 4818; -O0: sxth w10, w9 4819; -O0: subs w10, w10, w8, sxth 4820; -O0: csel w8, w9, w8, le 4821; -O0: bl __atomic_compare_exchange 4822; 4823; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic: 4824; -O1: sxth w8, w0 4825; -O1: cmp w8, w20, sxth 4826; -O1: csel w8, w0, w20, le 4827; -O1: bl __atomic_compare_exchange 4828 %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 1 4829 ret i16 %r 4830} 4831 4832define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) { 4833; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire: 4834; -O0: sxth w10, w9 4835; -O0: subs w10, w10, w8, sxth 4836; -O0: csel w8, w9, w8, le 4837; -O0: bl __atomic_compare_exchange 4838; 4839; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire: 4840; -O1: sxth w8, w0 4841; -O1: cmp w8, w20, sxth 4842; -O1: csel w8, w0, w20, le 4843; -O1: bl __atomic_compare_exchange 4844 %r = atomicrmw min ptr %ptr, i16 %value acquire, align 1 4845 ret i16 %r 4846} 4847 4848define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) { 4849; -O0-LABEL: atomicrmw_min_i16_unaligned_release: 4850; -O0: sxth w10, w9 4851; -O0: subs w10, w10, w8, sxth 4852; -O0: csel w8, w9, w8, le 4853; -O0: bl __atomic_compare_exchange 4854; 4855; -O1-LABEL: atomicrmw_min_i16_unaligned_release: 4856; -O1: sxth w8, w0 4857; -O1: cmp w8, w20, sxth 4858; -O1: csel w8, w0, w20, le 4859; -O1: bl __atomic_compare_exchange 4860 %r = atomicrmw min ptr %ptr, i16 %value release, align 1 4861 ret i16 %r 4862} 4863 4864define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 4865; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel: 4866; -O0: sxth w10, w9 4867; -O0: subs w10, w10, w8, sxth 4868; -O0: csel w8, w9, w8, le 4869; -O0: bl __atomic_compare_exchange 4870; 4871; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel: 4872; -O1: sxth w8, w0 4873; -O1: cmp w8, w20, sxth 4874; -O1: csel w8, w0, w20, le 4875; -O1: bl __atomic_compare_exchange 4876 %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 1 4877 ret i16 %r 4878} 4879 4880define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 4881; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst: 4882; -O0: sxth w10, w9 4883; -O0: subs w10, w10, w8, sxth 4884; -O0: csel w8, w9, w8, le 4885; -O0: bl __atomic_compare_exchange 4886; 4887; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst: 4888; -O1: sxth w8, w0 4889; -O1: cmp w8, w20, sxth 4890; -O1: csel w8, w0, w20, le 4891; -O1: bl __atomic_compare_exchange 4892 %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 1 4893 ret i16 %r 4894} 4895 4896define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 4897; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic: 4898; -O0: subs w10, w9, w8 4899; -O0: csel w8, w9, w8, le 4900; -O0: bl __atomic_compare_exchange 4901; 4902; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic: 4903; -O1: cmp w0, w20 4904; -O1: csel w8, w0, w20, le 4905; -O1: bl __atomic_compare_exchange 4906 %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 1 4907 ret i32 %r 4908} 4909 4910define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) { 4911; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire: 4912; -O0: subs w10, w9, w8 4913; -O0: csel w8, w9, w8, le 4914; -O0: bl __atomic_compare_exchange 4915; 4916; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire: 4917; -O1: cmp w0, w20 4918; -O1: csel w8, w0, w20, le 4919; -O1: bl __atomic_compare_exchange 4920 %r = atomicrmw min ptr %ptr, i32 %value acquire, align 1 4921 ret i32 %r 4922} 4923 4924define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) { 4925; -O0-LABEL: atomicrmw_min_i32_unaligned_release: 4926; -O0: subs w10, w9, w8 4927; -O0: csel w8, w9, w8, le 4928; -O0: bl __atomic_compare_exchange 4929; 4930; -O1-LABEL: atomicrmw_min_i32_unaligned_release: 4931; -O1: cmp w0, w20 4932; -O1: csel w8, w0, w20, le 4933; -O1: bl __atomic_compare_exchange 4934 %r = atomicrmw min ptr %ptr, i32 %value release, align 1 4935 ret i32 %r 4936} 4937 4938define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 4939; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel: 4940; -O0: subs w10, w9, w8 4941; -O0: csel w8, w9, w8, le 4942; -O0: bl __atomic_compare_exchange 4943; 4944; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel: 4945; -O1: cmp w0, w20 4946; -O1: csel w8, w0, w20, le 4947; -O1: bl __atomic_compare_exchange 4948 %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 1 4949 ret i32 %r 4950} 4951 4952define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 4953; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst: 4954; -O0: subs w10, w9, w8 4955; -O0: csel w8, w9, w8, le 4956; -O0: bl __atomic_compare_exchange 4957; 4958; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst: 4959; -O1: cmp w0, w20 4960; -O1: csel w8, w0, w20, le 4961; -O1: bl __atomic_compare_exchange 4962 %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 1 4963 ret i32 %r 4964} 4965 4966define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 4967; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic: 4968; -O0: subs x10, x9, x8 4969; -O0: csel x8, x9, x8, le 4970; -O0: bl __atomic_compare_exchange 4971; 4972; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic: 4973; -O1: cmp x0, x20 4974; -O1: csel x8, x0, x20, le 4975; -O1: bl __atomic_compare_exchange 4976 %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 1 4977 ret i64 %r 4978} 4979 4980define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) { 4981; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire: 4982; -O0: subs x10, x9, x8 4983; -O0: csel x8, x9, x8, le 4984; -O0: bl __atomic_compare_exchange 4985; 4986; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire: 4987; -O1: cmp x0, x20 4988; -O1: csel x8, x0, x20, le 4989; -O1: bl __atomic_compare_exchange 4990 %r = atomicrmw min ptr %ptr, i64 %value acquire, align 1 4991 ret i64 %r 4992} 4993 4994define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) { 4995; -O0-LABEL: atomicrmw_min_i64_unaligned_release: 4996; -O0: subs x10, x9, x8 4997; -O0: csel x8, x9, x8, le 4998; -O0: bl __atomic_compare_exchange 4999; 5000; -O1-LABEL: atomicrmw_min_i64_unaligned_release: 5001; -O1: cmp x0, x20 5002; -O1: csel x8, x0, x20, le 5003; -O1: bl __atomic_compare_exchange 5004 %r = atomicrmw min ptr %ptr, i64 %value release, align 1 5005 ret i64 %r 5006} 5007 5008define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 5009; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel: 5010; -O0: subs x10, x9, x8 5011; -O0: csel x8, x9, x8, le 5012; -O0: bl __atomic_compare_exchange 5013; 5014; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel: 5015; -O1: cmp x0, x20 5016; -O1: csel x8, x0, x20, le 5017; -O1: bl __atomic_compare_exchange 5018 %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 1 5019 ret i64 %r 5020} 5021 5022define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 5023; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst: 5024; -O0: subs x10, x9, x8 5025; -O0: csel x8, x9, x8, le 5026; -O0: bl __atomic_compare_exchange 5027; 5028; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst: 5029; -O1: cmp x0, x20 5030; -O1: csel x8, x0, x20, le 5031; -O1: bl __atomic_compare_exchange 5032 %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 1 5033 ret i64 %r 5034} 5035 5036define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 5037; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic: 5038; -O0: subs x12, x9, x10 5039; -O0: csel x8, x11, x8, ge 5040; -O0: csel x9, x10, x9, ge 5041; -O0: bl __atomic_compare_exchange 5042; 5043; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic: 5044; -O1: ldp x0, x1, [x0] 5045; -O1: cmp x19, x1 5046; -O1: csel x8, x1, x19, ge 5047; -O1: csel x9, x0, x21, ge 5048; -O1: bl __atomic_compare_exchange 5049 %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 1 5050 ret i128 %r 5051} 5052 5053define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) { 5054; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire: 5055; -O0: subs x12, x9, x10 5056; -O0: csel x8, x11, x8, ge 5057; -O0: csel x9, x10, x9, ge 5058; -O0: bl __atomic_compare_exchange 5059; 5060; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire: 5061; -O1: ldp x0, x1, [x0] 5062; -O1: cmp x19, x1 5063; -O1: csel x8, x1, x19, ge 5064; -O1: csel x9, x0, x21, ge 5065; -O1: bl __atomic_compare_exchange 5066 %r = atomicrmw min ptr %ptr, i128 %value acquire, align 1 5067 ret i128 %r 5068} 5069 5070define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) { 5071; -O0-LABEL: atomicrmw_min_i128_unaligned_release: 5072; -O0: subs x12, x9, x10 5073; -O0: csel x8, x11, x8, ge 5074; -O0: csel x9, x10, x9, ge 5075; -O0: bl __atomic_compare_exchange 5076; 5077; -O1-LABEL: atomicrmw_min_i128_unaligned_release: 5078; -O1: ldp x0, x1, [x0] 5079; -O1: cmp x19, x1 5080; -O1: csel x8, x1, x19, ge 5081; -O1: csel x9, x0, x21, ge 5082; -O1: bl __atomic_compare_exchange 5083 %r = atomicrmw min ptr %ptr, i128 %value release, align 1 5084 ret i128 %r 5085} 5086 5087define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 5088; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel: 5089; -O0: subs x12, x9, x10 5090; -O0: csel x8, x11, x8, ge 5091; -O0: csel x9, x10, x9, ge 5092; -O0: bl __atomic_compare_exchange 5093; 5094; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel: 5095; -O1: ldp x0, x1, [x0] 5096; -O1: cmp x19, x1 5097; -O1: csel x8, x1, x19, ge 5098; -O1: csel x9, x0, x21, ge 5099; -O1: bl __atomic_compare_exchange 5100 %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 1 5101 ret i128 %r 5102} 5103 5104define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 5105; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst: 5106; -O0: subs x12, x9, x10 5107; -O0: csel x8, x11, x8, ge 5108; -O0: csel x9, x10, x9, ge 5109; -O0: bl __atomic_compare_exchange 5110; 5111; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst: 5112; -O1: ldp x0, x1, [x0] 5113; -O1: cmp x19, x1 5114; -O1: csel x8, x1, x19, ge 5115; -O1: csel x9, x0, x21, ge 5116; -O1: bl __atomic_compare_exchange 5117 %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 1 5118 ret i128 %r 5119} 5120 5121define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) { 5122; CHECK-LABEL: atomicrmw_umax_i8_aligned_monotonic: 5123; CHECK: ldumaxb w1, w0, [x0] 5124 %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 1 5125 ret i8 %r 5126} 5127 5128define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) { 5129; CHECK-LABEL: atomicrmw_umax_i8_aligned_acquire: 5130; CHECK: ldumaxab w1, w0, [x0] 5131 %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 1 5132 ret i8 %r 5133} 5134 5135define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) { 5136; CHECK-LABEL: atomicrmw_umax_i8_aligned_release: 5137; CHECK: ldumaxlb w1, w0, [x0] 5138 %r = atomicrmw umax ptr %ptr, i8 %value release, align 1 5139 ret i8 %r 5140} 5141 5142define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 5143; CHECK-LABEL: atomicrmw_umax_i8_aligned_acq_rel: 5144; CHECK: ldumaxalb w1, w0, [x0] 5145 %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 1 5146 ret i8 %r 5147} 5148 5149define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 5150; CHECK-LABEL: atomicrmw_umax_i8_aligned_seq_cst: 5151; CHECK: ldumaxalb w1, w0, [x0] 5152 %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 1 5153 ret i8 %r 5154} 5155 5156define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) { 5157; CHECK-LABEL: atomicrmw_umax_i16_aligned_monotonic: 5158; CHECK: ldumaxh w1, w0, [x0] 5159 %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 2 5160 ret i16 %r 5161} 5162 5163define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) { 5164; CHECK-LABEL: atomicrmw_umax_i16_aligned_acquire: 5165; CHECK: ldumaxah w1, w0, [x0] 5166 %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 2 5167 ret i16 %r 5168} 5169 5170define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) { 5171; CHECK-LABEL: atomicrmw_umax_i16_aligned_release: 5172; CHECK: ldumaxlh w1, w0, [x0] 5173 %r = atomicrmw umax ptr %ptr, i16 %value release, align 2 5174 ret i16 %r 5175} 5176 5177define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 5178; CHECK-LABEL: atomicrmw_umax_i16_aligned_acq_rel: 5179; CHECK: ldumaxalh w1, w0, [x0] 5180 %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 2 5181 ret i16 %r 5182} 5183 5184define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 5185; CHECK-LABEL: atomicrmw_umax_i16_aligned_seq_cst: 5186; CHECK: ldumaxalh w1, w0, [x0] 5187 %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 2 5188 ret i16 %r 5189} 5190 5191define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) { 5192; CHECK-LABEL: atomicrmw_umax_i32_aligned_monotonic: 5193; CHECK: ldumax w1, w0, [x0] 5194 %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 4 5195 ret i32 %r 5196} 5197 5198define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) { 5199; CHECK-LABEL: atomicrmw_umax_i32_aligned_acquire: 5200; CHECK: ldumaxa w1, w0, [x0] 5201 %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 4 5202 ret i32 %r 5203} 5204 5205define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) { 5206; CHECK-LABEL: atomicrmw_umax_i32_aligned_release: 5207; CHECK: ldumaxl w1, w0, [x0] 5208 %r = atomicrmw umax ptr %ptr, i32 %value release, align 4 5209 ret i32 %r 5210} 5211 5212define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 5213; CHECK-LABEL: atomicrmw_umax_i32_aligned_acq_rel: 5214; CHECK: ldumaxal w1, w0, [x0] 5215 %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 4 5216 ret i32 %r 5217} 5218 5219define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 5220; CHECK-LABEL: atomicrmw_umax_i32_aligned_seq_cst: 5221; CHECK: ldumaxal w1, w0, [x0] 5222 %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 4 5223 ret i32 %r 5224} 5225 5226define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) { 5227; CHECK-LABEL: atomicrmw_umax_i64_aligned_monotonic: 5228; CHECK: ldumax x1, x0, [x0] 5229 %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 8 5230 ret i64 %r 5231} 5232 5233define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) { 5234; CHECK-LABEL: atomicrmw_umax_i64_aligned_acquire: 5235; CHECK: ldumaxa x1, x0, [x0] 5236 %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 8 5237 ret i64 %r 5238} 5239 5240define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) { 5241; CHECK-LABEL: atomicrmw_umax_i64_aligned_release: 5242; CHECK: ldumaxl x1, x0, [x0] 5243 %r = atomicrmw umax ptr %ptr, i64 %value release, align 8 5244 ret i64 %r 5245} 5246 5247define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 5248; CHECK-LABEL: atomicrmw_umax_i64_aligned_acq_rel: 5249; CHECK: ldumaxal x1, x0, [x0] 5250 %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 8 5251 ret i64 %r 5252} 5253 5254define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 5255; CHECK-LABEL: atomicrmw_umax_i64_aligned_seq_cst: 5256; CHECK: ldumaxal x1, x0, [x0] 5257 %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 8 5258 ret i64 %r 5259} 5260 5261define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) { 5262; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic: 5263; -O0: subs x13, x9, x10 5264; -O0: csel x9, x10, x9, lo 5265; -O0: csel x2, x11, x12, lo 5266; -O0: casp x0, x1, x2, x3, [x8] 5267; -O0: subs x11, x9, x11 5268; -O0: ccmp x8, x10, #0, eq 5269; 5270; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic: 5271; -O1: ldp x4, x5, [x0] 5272; -O1: cmp x3, x7 5273; -O1: csel x9, x7, x3, lo 5274; -O1: csel x8, x4, x2, lo 5275; -O1: casp x4, x5, x8, x9, [x0] 5276; -O1: cmp x4, x6 5277; -O1: ccmp x5, x7, #0, eq 5278 %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 16 5279 ret i128 %r 5280} 5281 5282define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) { 5283; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire: 5284; -O0: subs x13, x9, x10 5285; -O0: csel x9, x10, x9, lo 5286; -O0: csel x2, x11, x12, lo 5287; -O0: caspa x0, x1, x2, x3, [x8] 5288; -O0: subs x11, x9, x11 5289; -O0: ccmp x8, x10, #0, eq 5290; 5291; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire: 5292; -O1: ldp x4, x5, [x0] 5293; -O1: cmp x3, x7 5294; -O1: csel x9, x7, x3, lo 5295; -O1: csel x8, x4, x2, lo 5296; -O1: caspa x4, x5, x8, x9, [x0] 5297; -O1: cmp x4, x6 5298; -O1: ccmp x5, x7, #0, eq 5299 %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 16 5300 ret i128 %r 5301} 5302 5303define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) { 5304; -O0-LABEL: atomicrmw_umax_i128_aligned_release: 5305; -O0: subs x13, x9, x10 5306; -O0: csel x9, x10, x9, lo 5307; -O0: csel x2, x11, x12, lo 5308; -O0: caspl x0, x1, x2, x3, [x8] 5309; -O0: subs x11, x9, x11 5310; -O0: ccmp x8, x10, #0, eq 5311; 5312; -O1-LABEL: atomicrmw_umax_i128_aligned_release: 5313; -O1: ldp x4, x5, [x0] 5314; -O1: cmp x3, x7 5315; -O1: csel x9, x7, x3, lo 5316; -O1: csel x8, x4, x2, lo 5317; -O1: caspl x4, x5, x8, x9, [x0] 5318; -O1: cmp x4, x6 5319; -O1: ccmp x5, x7, #0, eq 5320 %r = atomicrmw umax ptr %ptr, i128 %value release, align 16 5321 ret i128 %r 5322} 5323 5324define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 5325; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel: 5326; -O0: subs x13, x9, x10 5327; -O0: csel x9, x10, x9, lo 5328; -O0: csel x2, x11, x12, lo 5329; -O0: caspal x0, x1, x2, x3, [x8] 5330; -O0: subs x11, x9, x11 5331; -O0: ccmp x8, x10, #0, eq 5332; 5333; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel: 5334; -O1: ldp x4, x5, [x0] 5335; -O1: cmp x3, x7 5336; -O1: csel x9, x7, x3, lo 5337; -O1: csel x8, x4, x2, lo 5338; -O1: caspal x4, x5, x8, x9, [x0] 5339; -O1: cmp x4, x6 5340; -O1: ccmp x5, x7, #0, eq 5341 %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 16 5342 ret i128 %r 5343} 5344 5345define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 5346; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst: 5347; -O0: subs x13, x9, x10 5348; -O0: csel x9, x10, x9, lo 5349; -O0: csel x2, x11, x12, lo 5350; -O0: caspal x0, x1, x2, x3, [x8] 5351; -O0: subs x11, x9, x11 5352; -O0: ccmp x8, x10, #0, eq 5353; 5354; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst: 5355; -O1: ldp x4, x5, [x0] 5356; -O1: cmp x3, x7 5357; -O1: csel x9, x7, x3, lo 5358; -O1: csel x8, x4, x2, lo 5359; -O1: caspal x4, x5, x8, x9, [x0] 5360; -O1: cmp x4, x6 5361; -O1: ccmp x5, x7, #0, eq 5362 %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 16 5363 ret i128 %r 5364} 5365 5366define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 5367; CHECK-LABEL: atomicrmw_umax_i8_unaligned_monotonic: 5368; CHECK: ldumaxb w1, w0, [x0] 5369 %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 1 5370 ret i8 %r 5371} 5372 5373define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) { 5374; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acquire: 5375; CHECK: ldumaxab w1, w0, [x0] 5376 %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 1 5377 ret i8 %r 5378} 5379 5380define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) { 5381; CHECK-LABEL: atomicrmw_umax_i8_unaligned_release: 5382; CHECK: ldumaxlb w1, w0, [x0] 5383 %r = atomicrmw umax ptr %ptr, i8 %value release, align 1 5384 ret i8 %r 5385} 5386 5387define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 5388; CHECK-LABEL: atomicrmw_umax_i8_unaligned_acq_rel: 5389; CHECK: ldumaxalb w1, w0, [x0] 5390 %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 1 5391 ret i8 %r 5392} 5393 5394define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 5395; CHECK-LABEL: atomicrmw_umax_i8_unaligned_seq_cst: 5396; CHECK: ldumaxalb w1, w0, [x0] 5397 %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 1 5398 ret i8 %r 5399} 5400 5401define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 5402; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic: 5403; -O0: and w10, w9, #0xffff 5404; -O0: subs w10, w10, w8, uxth 5405; -O0: csel w8, w9, w8, hi 5406; -O0: bl __atomic_compare_exchange 5407; 5408; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic: 5409; -O1: and w8, w0, #0xffff 5410; -O1: cmp w8, w20, uxth 5411; -O1: csel w8, w0, w20, hi 5412; -O1: bl __atomic_compare_exchange 5413 %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 1 5414 ret i16 %r 5415} 5416 5417define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) { 5418; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire: 5419; -O0: and w10, w9, #0xffff 5420; -O0: subs w10, w10, w8, uxth 5421; -O0: csel w8, w9, w8, hi 5422; -O0: bl __atomic_compare_exchange 5423; 5424; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire: 5425; -O1: and w8, w0, #0xffff 5426; -O1: cmp w8, w20, uxth 5427; -O1: csel w8, w0, w20, hi 5428; -O1: bl __atomic_compare_exchange 5429 %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 1 5430 ret i16 %r 5431} 5432 5433define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) { 5434; -O0-LABEL: atomicrmw_umax_i16_unaligned_release: 5435; -O0: and w10, w9, #0xffff 5436; -O0: subs w10, w10, w8, uxth 5437; -O0: csel w8, w9, w8, hi 5438; -O0: bl __atomic_compare_exchange 5439; 5440; -O1-LABEL: atomicrmw_umax_i16_unaligned_release: 5441; -O1: and w8, w0, #0xffff 5442; -O1: cmp w8, w20, uxth 5443; -O1: csel w8, w0, w20, hi 5444; -O1: bl __atomic_compare_exchange 5445 %r = atomicrmw umax ptr %ptr, i16 %value release, align 1 5446 ret i16 %r 5447} 5448 5449define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 5450; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel: 5451; -O0: and w10, w9, #0xffff 5452; -O0: subs w10, w10, w8, uxth 5453; -O0: csel w8, w9, w8, hi 5454; -O0: bl __atomic_compare_exchange 5455; 5456; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel: 5457; -O1: and w8, w0, #0xffff 5458; -O1: cmp w8, w20, uxth 5459; -O1: csel w8, w0, w20, hi 5460; -O1: bl __atomic_compare_exchange 5461 %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 1 5462 ret i16 %r 5463} 5464 5465define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 5466; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst: 5467; -O0: and w10, w9, #0xffff 5468; -O0: subs w10, w10, w8, uxth 5469; -O0: csel w8, w9, w8, hi 5470; -O0: bl __atomic_compare_exchange 5471; 5472; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst: 5473; -O1: and w8, w0, #0xffff 5474; -O1: cmp w8, w20, uxth 5475; -O1: csel w8, w0, w20, hi 5476; -O1: bl __atomic_compare_exchange 5477 %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 1 5478 ret i16 %r 5479} 5480 5481define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 5482; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic: 5483; -O0: subs w10, w9, w8 5484; -O0: csel w8, w9, w8, hi 5485; -O0: bl __atomic_compare_exchange 5486; 5487; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic: 5488; -O1: cmp w0, w20 5489; -O1: csel w8, w0, w20, hi 5490; -O1: bl __atomic_compare_exchange 5491 %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 1 5492 ret i32 %r 5493} 5494 5495define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) { 5496; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire: 5497; -O0: subs w10, w9, w8 5498; -O0: csel w8, w9, w8, hi 5499; -O0: bl __atomic_compare_exchange 5500; 5501; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire: 5502; -O1: cmp w0, w20 5503; -O1: csel w8, w0, w20, hi 5504; -O1: bl __atomic_compare_exchange 5505 %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 1 5506 ret i32 %r 5507} 5508 5509define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) { 5510; -O0-LABEL: atomicrmw_umax_i32_unaligned_release: 5511; -O0: subs w10, w9, w8 5512; -O0: csel w8, w9, w8, hi 5513; -O0: bl __atomic_compare_exchange 5514; 5515; -O1-LABEL: atomicrmw_umax_i32_unaligned_release: 5516; -O1: cmp w0, w20 5517; -O1: csel w8, w0, w20, hi 5518; -O1: bl __atomic_compare_exchange 5519 %r = atomicrmw umax ptr %ptr, i32 %value release, align 1 5520 ret i32 %r 5521} 5522 5523define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 5524; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel: 5525; -O0: subs w10, w9, w8 5526; -O0: csel w8, w9, w8, hi 5527; -O0: bl __atomic_compare_exchange 5528; 5529; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel: 5530; -O1: cmp w0, w20 5531; -O1: csel w8, w0, w20, hi 5532; -O1: bl __atomic_compare_exchange 5533 %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 1 5534 ret i32 %r 5535} 5536 5537define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 5538; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst: 5539; -O0: subs w10, w9, w8 5540; -O0: csel w8, w9, w8, hi 5541; -O0: bl __atomic_compare_exchange 5542; 5543; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst: 5544; -O1: cmp w0, w20 5545; -O1: csel w8, w0, w20, hi 5546; -O1: bl __atomic_compare_exchange 5547 %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 1 5548 ret i32 %r 5549} 5550 5551define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 5552; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic: 5553; -O0: subs x10, x9, x8 5554; -O0: csel x8, x9, x8, hi 5555; -O0: bl __atomic_compare_exchange 5556; 5557; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic: 5558; -O1: cmp x0, x20 5559; -O1: csel x8, x0, x20, hi 5560; -O1: bl __atomic_compare_exchange 5561 %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 1 5562 ret i64 %r 5563} 5564 5565define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) { 5566; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire: 5567; -O0: subs x10, x9, x8 5568; -O0: csel x8, x9, x8, hi 5569; -O0: bl __atomic_compare_exchange 5570; 5571; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire: 5572; -O1: cmp x0, x20 5573; -O1: csel x8, x0, x20, hi 5574; -O1: bl __atomic_compare_exchange 5575 %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 1 5576 ret i64 %r 5577} 5578 5579define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) { 5580; -O0-LABEL: atomicrmw_umax_i64_unaligned_release: 5581; -O0: subs x10, x9, x8 5582; -O0: csel x8, x9, x8, hi 5583; -O0: bl __atomic_compare_exchange 5584; 5585; -O1-LABEL: atomicrmw_umax_i64_unaligned_release: 5586; -O1: cmp x0, x20 5587; -O1: csel x8, x0, x20, hi 5588; -O1: bl __atomic_compare_exchange 5589 %r = atomicrmw umax ptr %ptr, i64 %value release, align 1 5590 ret i64 %r 5591} 5592 5593define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 5594; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel: 5595; -O0: subs x10, x9, x8 5596; -O0: csel x8, x9, x8, hi 5597; -O0: bl __atomic_compare_exchange 5598; 5599; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel: 5600; -O1: cmp x0, x20 5601; -O1: csel x8, x0, x20, hi 5602; -O1: bl __atomic_compare_exchange 5603 %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 1 5604 ret i64 %r 5605} 5606 5607define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 5608; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst: 5609; -O0: subs x10, x9, x8 5610; -O0: csel x8, x9, x8, hi 5611; -O0: bl __atomic_compare_exchange 5612; 5613; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst: 5614; -O1: cmp x0, x20 5615; -O1: csel x8, x0, x20, hi 5616; -O1: bl __atomic_compare_exchange 5617 %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 1 5618 ret i64 %r 5619} 5620 5621define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 5622; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic: 5623; -O0: subs x12, x9, x10 5624; -O0: csel x8, x11, x8, lo 5625; -O0: csel x9, x10, x9, lo 5626; -O0: bl __atomic_compare_exchange 5627; 5628; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic: 5629; -O1: ldp x0, x1, [x0] 5630; -O1: cmp x19, x1 5631; -O1: csel x8, x1, x19, lo 5632; -O1: csel x9, x0, x21, lo 5633; -O1: bl __atomic_compare_exchange 5634 %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 1 5635 ret i128 %r 5636} 5637 5638define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) { 5639; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire: 5640; -O0: subs x12, x9, x10 5641; -O0: csel x8, x11, x8, lo 5642; -O0: csel x9, x10, x9, lo 5643; -O0: bl __atomic_compare_exchange 5644; 5645; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire: 5646; -O1: ldp x0, x1, [x0] 5647; -O1: cmp x19, x1 5648; -O1: csel x8, x1, x19, lo 5649; -O1: csel x9, x0, x21, lo 5650; -O1: bl __atomic_compare_exchange 5651 %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 1 5652 ret i128 %r 5653} 5654 5655define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) { 5656; -O0-LABEL: atomicrmw_umax_i128_unaligned_release: 5657; -O0: subs x12, x9, x10 5658; -O0: csel x8, x11, x8, lo 5659; -O0: csel x9, x10, x9, lo 5660; -O0: bl __atomic_compare_exchange 5661; 5662; -O1-LABEL: atomicrmw_umax_i128_unaligned_release: 5663; -O1: ldp x0, x1, [x0] 5664; -O1: cmp x19, x1 5665; -O1: csel x8, x1, x19, lo 5666; -O1: csel x9, x0, x21, lo 5667; -O1: bl __atomic_compare_exchange 5668 %r = atomicrmw umax ptr %ptr, i128 %value release, align 1 5669 ret i128 %r 5670} 5671 5672define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 5673; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel: 5674; -O0: subs x12, x9, x10 5675; -O0: csel x8, x11, x8, lo 5676; -O0: csel x9, x10, x9, lo 5677; -O0: bl __atomic_compare_exchange 5678; 5679; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel: 5680; -O1: ldp x0, x1, [x0] 5681; -O1: cmp x19, x1 5682; -O1: csel x8, x1, x19, lo 5683; -O1: csel x9, x0, x21, lo 5684; -O1: bl __atomic_compare_exchange 5685 %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 1 5686 ret i128 %r 5687} 5688 5689define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 5690; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst: 5691; -O0: subs x12, x9, x10 5692; -O0: csel x8, x11, x8, lo 5693; -O0: csel x9, x10, x9, lo 5694; -O0: bl __atomic_compare_exchange 5695; 5696; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst: 5697; -O1: ldp x0, x1, [x0] 5698; -O1: cmp x19, x1 5699; -O1: csel x8, x1, x19, lo 5700; -O1: csel x9, x0, x21, lo 5701; -O1: bl __atomic_compare_exchange 5702 %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 1 5703 ret i128 %r 5704} 5705 5706define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) { 5707; CHECK-LABEL: atomicrmw_umin_i8_aligned_monotonic: 5708; CHECK: lduminb w1, w0, [x0] 5709 %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 1 5710 ret i8 %r 5711} 5712 5713define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) { 5714; CHECK-LABEL: atomicrmw_umin_i8_aligned_acquire: 5715; CHECK: lduminab w1, w0, [x0] 5716 %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 1 5717 ret i8 %r 5718} 5719 5720define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) { 5721; CHECK-LABEL: atomicrmw_umin_i8_aligned_release: 5722; CHECK: lduminlb w1, w0, [x0] 5723 %r = atomicrmw umin ptr %ptr, i8 %value release, align 1 5724 ret i8 %r 5725} 5726 5727define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 5728; CHECK-LABEL: atomicrmw_umin_i8_aligned_acq_rel: 5729; CHECK: lduminalb w1, w0, [x0] 5730 %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 1 5731 ret i8 %r 5732} 5733 5734define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 5735; CHECK-LABEL: atomicrmw_umin_i8_aligned_seq_cst: 5736; CHECK: lduminalb w1, w0, [x0] 5737 %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 1 5738 ret i8 %r 5739} 5740 5741define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) { 5742; CHECK-LABEL: atomicrmw_umin_i16_aligned_monotonic: 5743; CHECK: lduminh w1, w0, [x0] 5744 %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 2 5745 ret i16 %r 5746} 5747 5748define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) { 5749; CHECK-LABEL: atomicrmw_umin_i16_aligned_acquire: 5750; CHECK: lduminah w1, w0, [x0] 5751 %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 2 5752 ret i16 %r 5753} 5754 5755define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) { 5756; CHECK-LABEL: atomicrmw_umin_i16_aligned_release: 5757; CHECK: lduminlh w1, w0, [x0] 5758 %r = atomicrmw umin ptr %ptr, i16 %value release, align 2 5759 ret i16 %r 5760} 5761 5762define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 5763; CHECK-LABEL: atomicrmw_umin_i16_aligned_acq_rel: 5764; CHECK: lduminalh w1, w0, [x0] 5765 %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 2 5766 ret i16 %r 5767} 5768 5769define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 5770; CHECK-LABEL: atomicrmw_umin_i16_aligned_seq_cst: 5771; CHECK: lduminalh w1, w0, [x0] 5772 %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 2 5773 ret i16 %r 5774} 5775 5776define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) { 5777; CHECK-LABEL: atomicrmw_umin_i32_aligned_monotonic: 5778; CHECK: ldumin w1, w0, [x0] 5779 %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 4 5780 ret i32 %r 5781} 5782 5783define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) { 5784; CHECK-LABEL: atomicrmw_umin_i32_aligned_acquire: 5785; CHECK: ldumina w1, w0, [x0] 5786 %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 4 5787 ret i32 %r 5788} 5789 5790define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) { 5791; CHECK-LABEL: atomicrmw_umin_i32_aligned_release: 5792; CHECK: lduminl w1, w0, [x0] 5793 %r = atomicrmw umin ptr %ptr, i32 %value release, align 4 5794 ret i32 %r 5795} 5796 5797define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 5798; CHECK-LABEL: atomicrmw_umin_i32_aligned_acq_rel: 5799; CHECK: lduminal w1, w0, [x0] 5800 %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 4 5801 ret i32 %r 5802} 5803 5804define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 5805; CHECK-LABEL: atomicrmw_umin_i32_aligned_seq_cst: 5806; CHECK: lduminal w1, w0, [x0] 5807 %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 4 5808 ret i32 %r 5809} 5810 5811define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) { 5812; CHECK-LABEL: atomicrmw_umin_i64_aligned_monotonic: 5813; CHECK: ldumin x1, x0, [x0] 5814 %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 8 5815 ret i64 %r 5816} 5817 5818define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) { 5819; CHECK-LABEL: atomicrmw_umin_i64_aligned_acquire: 5820; CHECK: ldumina x1, x0, [x0] 5821 %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 8 5822 ret i64 %r 5823} 5824 5825define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) { 5826; CHECK-LABEL: atomicrmw_umin_i64_aligned_release: 5827; CHECK: lduminl x1, x0, [x0] 5828 %r = atomicrmw umin ptr %ptr, i64 %value release, align 8 5829 ret i64 %r 5830} 5831 5832define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 5833; CHECK-LABEL: atomicrmw_umin_i64_aligned_acq_rel: 5834; CHECK: lduminal x1, x0, [x0] 5835 %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 8 5836 ret i64 %r 5837} 5838 5839define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 5840; CHECK-LABEL: atomicrmw_umin_i64_aligned_seq_cst: 5841; CHECK: lduminal x1, x0, [x0] 5842 %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 8 5843 ret i64 %r 5844} 5845 5846define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) { 5847; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic: 5848; -O0: subs x13, x9, x10 5849; -O0: csel x9, x10, x9, hs 5850; -O0: csel x2, x11, x12, hs 5851; -O0: casp x0, x1, x2, x3, [x8] 5852; -O0: subs x11, x9, x11 5853; -O0: ccmp x8, x10, #0, eq 5854; 5855; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic: 5856; -O1: ldp x4, x5, [x0] 5857; -O1: cmp x3, x7 5858; -O1: csel x9, x7, x3, hs 5859; -O1: csel x8, x4, x2, hs 5860; -O1: casp x4, x5, x8, x9, [x0] 5861; -O1: cmp x4, x6 5862; -O1: ccmp x5, x7, #0, eq 5863 %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 16 5864 ret i128 %r 5865} 5866 5867define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) { 5868; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire: 5869; -O0: subs x13, x9, x10 5870; -O0: csel x9, x10, x9, hs 5871; -O0: csel x2, x11, x12, hs 5872; -O0: caspa x0, x1, x2, x3, [x8] 5873; -O0: subs x11, x9, x11 5874; -O0: ccmp x8, x10, #0, eq 5875; 5876; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire: 5877; -O1: ldp x4, x5, [x0] 5878; -O1: cmp x3, x7 5879; -O1: csel x9, x7, x3, hs 5880; -O1: csel x8, x4, x2, hs 5881; -O1: caspa x4, x5, x8, x9, [x0] 5882; -O1: cmp x4, x6 5883; -O1: ccmp x5, x7, #0, eq 5884 %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 16 5885 ret i128 %r 5886} 5887 5888define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) { 5889; -O0-LABEL: atomicrmw_umin_i128_aligned_release: 5890; -O0: subs x13, x9, x10 5891; -O0: csel x9, x10, x9, hs 5892; -O0: csel x2, x11, x12, hs 5893; -O0: caspl x0, x1, x2, x3, [x8] 5894; -O0: subs x11, x9, x11 5895; -O0: ccmp x8, x10, #0, eq 5896; 5897; -O1-LABEL: atomicrmw_umin_i128_aligned_release: 5898; -O1: ldp x4, x5, [x0] 5899; -O1: cmp x3, x7 5900; -O1: csel x9, x7, x3, hs 5901; -O1: csel x8, x4, x2, hs 5902; -O1: caspl x4, x5, x8, x9, [x0] 5903; -O1: cmp x4, x6 5904; -O1: ccmp x5, x7, #0, eq 5905 %r = atomicrmw umin ptr %ptr, i128 %value release, align 16 5906 ret i128 %r 5907} 5908 5909define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 5910; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel: 5911; -O0: subs x13, x9, x10 5912; -O0: csel x9, x10, x9, hs 5913; -O0: csel x2, x11, x12, hs 5914; -O0: caspal x0, x1, x2, x3, [x8] 5915; -O0: subs x11, x9, x11 5916; -O0: ccmp x8, x10, #0, eq 5917; 5918; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel: 5919; -O1: ldp x4, x5, [x0] 5920; -O1: cmp x3, x7 5921; -O1: csel x9, x7, x3, hs 5922; -O1: csel x8, x4, x2, hs 5923; -O1: caspal x4, x5, x8, x9, [x0] 5924; -O1: cmp x4, x6 5925; -O1: ccmp x5, x7, #0, eq 5926 %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 16 5927 ret i128 %r 5928} 5929 5930define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 5931; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst: 5932; -O0: subs x13, x9, x10 5933; -O0: csel x9, x10, x9, hs 5934; -O0: csel x2, x11, x12, hs 5935; -O0: caspal x0, x1, x2, x3, [x8] 5936; -O0: subs x11, x9, x11 5937; -O0: ccmp x8, x10, #0, eq 5938; 5939; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst: 5940; -O1: ldp x4, x5, [x0] 5941; -O1: cmp x3, x7 5942; -O1: csel x9, x7, x3, hs 5943; -O1: csel x8, x4, x2, hs 5944; -O1: caspal x4, x5, x8, x9, [x0] 5945; -O1: cmp x4, x6 5946; -O1: ccmp x5, x7, #0, eq 5947 %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 16 5948 ret i128 %r 5949} 5950 5951define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 5952; CHECK-LABEL: atomicrmw_umin_i8_unaligned_monotonic: 5953; CHECK: lduminb w1, w0, [x0] 5954 %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 1 5955 ret i8 %r 5956} 5957 5958define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) { 5959; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acquire: 5960; CHECK: lduminab w1, w0, [x0] 5961 %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 1 5962 ret i8 %r 5963} 5964 5965define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) { 5966; CHECK-LABEL: atomicrmw_umin_i8_unaligned_release: 5967; CHECK: lduminlb w1, w0, [x0] 5968 %r = atomicrmw umin ptr %ptr, i8 %value release, align 1 5969 ret i8 %r 5970} 5971 5972define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 5973; CHECK-LABEL: atomicrmw_umin_i8_unaligned_acq_rel: 5974; CHECK: lduminalb w1, w0, [x0] 5975 %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 1 5976 ret i8 %r 5977} 5978 5979define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 5980; CHECK-LABEL: atomicrmw_umin_i8_unaligned_seq_cst: 5981; CHECK: lduminalb w1, w0, [x0] 5982 %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 1 5983 ret i8 %r 5984} 5985 5986define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 5987; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic: 5988; -O0: and w10, w9, #0xffff 5989; -O0: subs w10, w10, w8, uxth 5990; -O0: csel w8, w9, w8, ls 5991; -O0: bl __atomic_compare_exchange 5992; 5993; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic: 5994; -O1: and w8, w0, #0xffff 5995; -O1: cmp w8, w20, uxth 5996; -O1: csel w8, w0, w20, ls 5997; -O1: bl __atomic_compare_exchange 5998 %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 1 5999 ret i16 %r 6000} 6001 6002define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) { 6003; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire: 6004; -O0: and w10, w9, #0xffff 6005; -O0: subs w10, w10, w8, uxth 6006; -O0: csel w8, w9, w8, ls 6007; -O0: bl __atomic_compare_exchange 6008; 6009; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire: 6010; -O1: and w8, w0, #0xffff 6011; -O1: cmp w8, w20, uxth 6012; -O1: csel w8, w0, w20, ls 6013; -O1: bl __atomic_compare_exchange 6014 %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 1 6015 ret i16 %r 6016} 6017 6018define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) { 6019; -O0-LABEL: atomicrmw_umin_i16_unaligned_release: 6020; -O0: and w10, w9, #0xffff 6021; -O0: subs w10, w10, w8, uxth 6022; -O0: csel w8, w9, w8, ls 6023; -O0: bl __atomic_compare_exchange 6024; 6025; -O1-LABEL: atomicrmw_umin_i16_unaligned_release: 6026; -O1: and w8, w0, #0xffff 6027; -O1: cmp w8, w20, uxth 6028; -O1: csel w8, w0, w20, ls 6029; -O1: bl __atomic_compare_exchange 6030 %r = atomicrmw umin ptr %ptr, i16 %value release, align 1 6031 ret i16 %r 6032} 6033 6034define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 6035; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel: 6036; -O0: and w10, w9, #0xffff 6037; -O0: subs w10, w10, w8, uxth 6038; -O0: csel w8, w9, w8, ls 6039; -O0: bl __atomic_compare_exchange 6040; 6041; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel: 6042; -O1: and w8, w0, #0xffff 6043; -O1: cmp w8, w20, uxth 6044; -O1: csel w8, w0, w20, ls 6045; -O1: bl __atomic_compare_exchange 6046 %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 1 6047 ret i16 %r 6048} 6049 6050define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 6051; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst: 6052; -O0: and w10, w9, #0xffff 6053; -O0: subs w10, w10, w8, uxth 6054; -O0: csel w8, w9, w8, ls 6055; -O0: bl __atomic_compare_exchange 6056; 6057; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst: 6058; -O1: and w8, w0, #0xffff 6059; -O1: cmp w8, w20, uxth 6060; -O1: csel w8, w0, w20, ls 6061; -O1: bl __atomic_compare_exchange 6062 %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 1 6063 ret i16 %r 6064} 6065 6066define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 6067; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic: 6068; -O0: subs w10, w9, w8 6069; -O0: csel w8, w9, w8, ls 6070; -O0: bl __atomic_compare_exchange 6071; 6072; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic: 6073; -O1: cmp w0, w20 6074; -O1: csel w8, w0, w20, ls 6075; -O1: bl __atomic_compare_exchange 6076 %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 1 6077 ret i32 %r 6078} 6079 6080define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) { 6081; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire: 6082; -O0: subs w10, w9, w8 6083; -O0: csel w8, w9, w8, ls 6084; -O0: bl __atomic_compare_exchange 6085; 6086; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire: 6087; -O1: cmp w0, w20 6088; -O1: csel w8, w0, w20, ls 6089; -O1: bl __atomic_compare_exchange 6090 %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 1 6091 ret i32 %r 6092} 6093 6094define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) { 6095; -O0-LABEL: atomicrmw_umin_i32_unaligned_release: 6096; -O0: subs w10, w9, w8 6097; -O0: csel w8, w9, w8, ls 6098; -O0: bl __atomic_compare_exchange 6099; 6100; -O1-LABEL: atomicrmw_umin_i32_unaligned_release: 6101; -O1: cmp w0, w20 6102; -O1: csel w8, w0, w20, ls 6103; -O1: bl __atomic_compare_exchange 6104 %r = atomicrmw umin ptr %ptr, i32 %value release, align 1 6105 ret i32 %r 6106} 6107 6108define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 6109; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel: 6110; -O0: subs w10, w9, w8 6111; -O0: csel w8, w9, w8, ls 6112; -O0: bl __atomic_compare_exchange 6113; 6114; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel: 6115; -O1: cmp w0, w20 6116; -O1: csel w8, w0, w20, ls 6117; -O1: bl __atomic_compare_exchange 6118 %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 1 6119 ret i32 %r 6120} 6121 6122define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 6123; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst: 6124; -O0: subs w10, w9, w8 6125; -O0: csel w8, w9, w8, ls 6126; -O0: bl __atomic_compare_exchange 6127; 6128; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst: 6129; -O1: cmp w0, w20 6130; -O1: csel w8, w0, w20, ls 6131; -O1: bl __atomic_compare_exchange 6132 %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 1 6133 ret i32 %r 6134} 6135 6136define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 6137; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic: 6138; -O0: subs x10, x9, x8 6139; -O0: csel x8, x9, x8, ls 6140; -O0: bl __atomic_compare_exchange 6141; 6142; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic: 6143; -O1: cmp x0, x20 6144; -O1: csel x8, x0, x20, ls 6145; -O1: bl __atomic_compare_exchange 6146 %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 1 6147 ret i64 %r 6148} 6149 6150define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) { 6151; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire: 6152; -O0: subs x10, x9, x8 6153; -O0: csel x8, x9, x8, ls 6154; -O0: bl __atomic_compare_exchange 6155; 6156; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire: 6157; -O1: cmp x0, x20 6158; -O1: csel x8, x0, x20, ls 6159; -O1: bl __atomic_compare_exchange 6160 %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 1 6161 ret i64 %r 6162} 6163 6164define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) { 6165; -O0-LABEL: atomicrmw_umin_i64_unaligned_release: 6166; -O0: subs x10, x9, x8 6167; -O0: csel x8, x9, x8, ls 6168; -O0: bl __atomic_compare_exchange 6169; 6170; -O1-LABEL: atomicrmw_umin_i64_unaligned_release: 6171; -O1: cmp x0, x20 6172; -O1: csel x8, x0, x20, ls 6173; -O1: bl __atomic_compare_exchange 6174 %r = atomicrmw umin ptr %ptr, i64 %value release, align 1 6175 ret i64 %r 6176} 6177 6178define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 6179; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel: 6180; -O0: subs x10, x9, x8 6181; -O0: csel x8, x9, x8, ls 6182; -O0: bl __atomic_compare_exchange 6183; 6184; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel: 6185; -O1: cmp x0, x20 6186; -O1: csel x8, x0, x20, ls 6187; -O1: bl __atomic_compare_exchange 6188 %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 1 6189 ret i64 %r 6190} 6191 6192define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 6193; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst: 6194; -O0: subs x10, x9, x8 6195; -O0: csel x8, x9, x8, ls 6196; -O0: bl __atomic_compare_exchange 6197; 6198; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst: 6199; -O1: cmp x0, x20 6200; -O1: csel x8, x0, x20, ls 6201; -O1: bl __atomic_compare_exchange 6202 %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 1 6203 ret i64 %r 6204} 6205 6206define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 6207; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic: 6208; -O0: subs x12, x9, x10 6209; -O0: csel x8, x11, x8, hs 6210; -O0: csel x9, x10, x9, hs 6211; -O0: bl __atomic_compare_exchange 6212; 6213; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic: 6214; -O1: ldp x0, x1, [x0] 6215; -O1: cmp x19, x1 6216; -O1: csel x8, x1, x19, hs 6217; -O1: csel x9, x0, x21, hs 6218; -O1: bl __atomic_compare_exchange 6219 %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 1 6220 ret i128 %r 6221} 6222 6223define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) { 6224; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire: 6225; -O0: subs x12, x9, x10 6226; -O0: csel x8, x11, x8, hs 6227; -O0: csel x9, x10, x9, hs 6228; -O0: bl __atomic_compare_exchange 6229; 6230; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire: 6231; -O1: ldp x0, x1, [x0] 6232; -O1: cmp x19, x1 6233; -O1: csel x8, x1, x19, hs 6234; -O1: csel x9, x0, x21, hs 6235; -O1: bl __atomic_compare_exchange 6236 %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 1 6237 ret i128 %r 6238} 6239 6240define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) { 6241; -O0-LABEL: atomicrmw_umin_i128_unaligned_release: 6242; -O0: subs x12, x9, x10 6243; -O0: csel x8, x11, x8, hs 6244; -O0: csel x9, x10, x9, hs 6245; -O0: bl __atomic_compare_exchange 6246; 6247; -O1-LABEL: atomicrmw_umin_i128_unaligned_release: 6248; -O1: ldp x0, x1, [x0] 6249; -O1: cmp x19, x1 6250; -O1: csel x8, x1, x19, hs 6251; -O1: csel x9, x0, x21, hs 6252; -O1: bl __atomic_compare_exchange 6253 %r = atomicrmw umin ptr %ptr, i128 %value release, align 1 6254 ret i128 %r 6255} 6256 6257define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 6258; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel: 6259; -O0: subs x12, x9, x10 6260; -O0: csel x8, x11, x8, hs 6261; -O0: csel x9, x10, x9, hs 6262; -O0: bl __atomic_compare_exchange 6263; 6264; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel: 6265; -O1: ldp x0, x1, [x0] 6266; -O1: cmp x19, x1 6267; -O1: csel x8, x1, x19, hs 6268; -O1: csel x9, x0, x21, hs 6269; -O1: bl __atomic_compare_exchange 6270 %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 1 6271 ret i128 %r 6272} 6273 6274define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 6275; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst: 6276; -O0: subs x12, x9, x10 6277; -O0: csel x8, x11, x8, hs 6278; -O0: csel x9, x10, x9, hs 6279; -O0: bl __atomic_compare_exchange 6280; 6281; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst: 6282; -O1: ldp x0, x1, [x0] 6283; -O1: cmp x19, x1 6284; -O1: csel x8, x1, x19, hs 6285; -O1: csel x9, x0, x21, hs 6286; -O1: bl __atomic_compare_exchange 6287 %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 1 6288 ret i128 %r 6289} 6290