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=+lse2,+rcpc3 -O0 | FileCheck %s --check-prefixes=CHECK,-O0 4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+lse2,+rcpc3 -O1 | FileCheck %s --check-prefixes=CHECK,-O1 5 6define dso_local i8 @atomicrmw_xchg_i8_aligned_monotonic(ptr %ptr, i8 %value) { 7; -O0-LABEL: atomicrmw_xchg_i8_aligned_monotonic: 8; -O0: ldaxrb w8, [x11] 9; -O0: cmp w8, w9, uxtb 10; -O0: stlxrb w10, w12, [x11] 11; -O0: subs w9, w8, w9, uxtb 12; -O0: subs w9, w9, #1 13; 14; -O1-LABEL: atomicrmw_xchg_i8_aligned_monotonic: 15; -O1: ldxrb w8, [x0] 16; -O1: stxrb w9, w1, [x0] 17 %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 1 18 ret i8 %r 19} 20 21define dso_local i8 @atomicrmw_xchg_i8_aligned_acquire(ptr %ptr, i8 %value) { 22; -O0-LABEL: atomicrmw_xchg_i8_aligned_acquire: 23; -O0: ldaxrb w8, [x11] 24; -O0: cmp w8, w9, uxtb 25; -O0: stlxrb w10, w12, [x11] 26; -O0: subs w9, w8, w9, uxtb 27; -O0: subs w9, w9, #1 28; 29; -O1-LABEL: atomicrmw_xchg_i8_aligned_acquire: 30; -O1: ldaxrb w8, [x0] 31; -O1: stxrb w9, w1, [x0] 32 %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 1 33 ret i8 %r 34} 35 36define dso_local i8 @atomicrmw_xchg_i8_aligned_release(ptr %ptr, i8 %value) { 37; -O0-LABEL: atomicrmw_xchg_i8_aligned_release: 38; -O0: ldaxrb w8, [x11] 39; -O0: cmp w8, w9, uxtb 40; -O0: stlxrb w10, w12, [x11] 41; -O0: subs w9, w8, w9, uxtb 42; -O0: subs w9, w9, #1 43; 44; -O1-LABEL: atomicrmw_xchg_i8_aligned_release: 45; -O1: ldxrb w8, [x0] 46; -O1: stlxrb w9, w1, [x0] 47 %r = atomicrmw xchg ptr %ptr, i8 %value release, align 1 48 ret i8 %r 49} 50 51define dso_local i8 @atomicrmw_xchg_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 52; -O0-LABEL: atomicrmw_xchg_i8_aligned_acq_rel: 53; -O0: ldaxrb w8, [x11] 54; -O0: cmp w8, w9, uxtb 55; -O0: stlxrb w10, w12, [x11] 56; -O0: subs w9, w8, w9, uxtb 57; -O0: subs w9, w9, #1 58; 59; -O1-LABEL: atomicrmw_xchg_i8_aligned_acq_rel: 60; -O1: ldaxrb w8, [x0] 61; -O1: stlxrb w9, w1, [x0] 62 %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 1 63 ret i8 %r 64} 65 66define dso_local i8 @atomicrmw_xchg_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 67; -O0-LABEL: atomicrmw_xchg_i8_aligned_seq_cst: 68; -O0: ldaxrb w8, [x11] 69; -O0: cmp w8, w9, uxtb 70; -O0: stlxrb w10, w12, [x11] 71; -O0: subs w9, w8, w9, uxtb 72; -O0: subs w9, w9, #1 73; 74; -O1-LABEL: atomicrmw_xchg_i8_aligned_seq_cst: 75; -O1: ldaxrb w8, [x0] 76; -O1: stlxrb w9, w1, [x0] 77 %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 1 78 ret i8 %r 79} 80 81define dso_local i16 @atomicrmw_xchg_i16_aligned_monotonic(ptr %ptr, i16 %value) { 82; -O0-LABEL: atomicrmw_xchg_i16_aligned_monotonic: 83; -O0: ldaxrh w8, [x11] 84; -O0: cmp w8, w9, uxth 85; -O0: stlxrh w10, w12, [x11] 86; -O0: subs w9, w8, w9, uxth 87; -O0: subs w9, w9, #1 88; 89; -O1-LABEL: atomicrmw_xchg_i16_aligned_monotonic: 90; -O1: ldxrh w8, [x0] 91; -O1: stxrh w9, w1, [x0] 92 %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 2 93 ret i16 %r 94} 95 96define dso_local i16 @atomicrmw_xchg_i16_aligned_acquire(ptr %ptr, i16 %value) { 97; -O0-LABEL: atomicrmw_xchg_i16_aligned_acquire: 98; -O0: ldaxrh w8, [x11] 99; -O0: cmp w8, w9, uxth 100; -O0: stlxrh w10, w12, [x11] 101; -O0: subs w9, w8, w9, uxth 102; -O0: subs w9, w9, #1 103; 104; -O1-LABEL: atomicrmw_xchg_i16_aligned_acquire: 105; -O1: ldaxrh w8, [x0] 106; -O1: stxrh w9, w1, [x0] 107 %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 2 108 ret i16 %r 109} 110 111define dso_local i16 @atomicrmw_xchg_i16_aligned_release(ptr %ptr, i16 %value) { 112; -O0-LABEL: atomicrmw_xchg_i16_aligned_release: 113; -O0: ldaxrh w8, [x11] 114; -O0: cmp w8, w9, uxth 115; -O0: stlxrh w10, w12, [x11] 116; -O0: subs w9, w8, w9, uxth 117; -O0: subs w9, w9, #1 118; 119; -O1-LABEL: atomicrmw_xchg_i16_aligned_release: 120; -O1: ldxrh w8, [x0] 121; -O1: stlxrh w9, w1, [x0] 122 %r = atomicrmw xchg ptr %ptr, i16 %value release, align 2 123 ret i16 %r 124} 125 126define dso_local i16 @atomicrmw_xchg_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 127; -O0-LABEL: atomicrmw_xchg_i16_aligned_acq_rel: 128; -O0: ldaxrh w8, [x11] 129; -O0: cmp w8, w9, uxth 130; -O0: stlxrh w10, w12, [x11] 131; -O0: subs w9, w8, w9, uxth 132; -O0: subs w9, w9, #1 133; 134; -O1-LABEL: atomicrmw_xchg_i16_aligned_acq_rel: 135; -O1: ldaxrh w8, [x0] 136; -O1: stlxrh w9, w1, [x0] 137 %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 2 138 ret i16 %r 139} 140 141define dso_local i16 @atomicrmw_xchg_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 142; -O0-LABEL: atomicrmw_xchg_i16_aligned_seq_cst: 143; -O0: ldaxrh w8, [x11] 144; -O0: cmp w8, w9, uxth 145; -O0: stlxrh w10, w12, [x11] 146; -O0: subs w9, w8, w9, uxth 147; -O0: subs w9, w9, #1 148; 149; -O1-LABEL: atomicrmw_xchg_i16_aligned_seq_cst: 150; -O1: ldaxrh w8, [x0] 151; -O1: stlxrh w9, w1, [x0] 152 %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 2 153 ret i16 %r 154} 155 156define dso_local i32 @atomicrmw_xchg_i32_aligned_monotonic(ptr %ptr, i32 %value) { 157; -O0-LABEL: atomicrmw_xchg_i32_aligned_monotonic: 158; -O0: ldaxr w8, [x11] 159; -O0: cmp w8, w9 160; -O0: stlxr w10, w12, [x11] 161; -O0: subs w9, w8, w9 162; -O0: subs w9, w9, #1 163; 164; -O1-LABEL: atomicrmw_xchg_i32_aligned_monotonic: 165; -O1: ldxr w0, [x8] 166; -O1: stxr w9, w1, [x8] 167 %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 4 168 ret i32 %r 169} 170 171define dso_local i32 @atomicrmw_xchg_i32_aligned_acquire(ptr %ptr, i32 %value) { 172; -O0-LABEL: atomicrmw_xchg_i32_aligned_acquire: 173; -O0: ldaxr w8, [x11] 174; -O0: cmp w8, w9 175; -O0: stlxr w10, w12, [x11] 176; -O0: subs w9, w8, w9 177; -O0: subs w9, w9, #1 178; 179; -O1-LABEL: atomicrmw_xchg_i32_aligned_acquire: 180; -O1: ldaxr w0, [x8] 181; -O1: stxr w9, w1, [x8] 182 %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 4 183 ret i32 %r 184} 185 186define dso_local i32 @atomicrmw_xchg_i32_aligned_release(ptr %ptr, i32 %value) { 187; -O0-LABEL: atomicrmw_xchg_i32_aligned_release: 188; -O0: ldaxr w8, [x11] 189; -O0: cmp w8, w9 190; -O0: stlxr w10, w12, [x11] 191; -O0: subs w9, w8, w9 192; -O0: subs w9, w9, #1 193; 194; -O1-LABEL: atomicrmw_xchg_i32_aligned_release: 195; -O1: ldxr w0, [x8] 196; -O1: stlxr w9, w1, [x8] 197 %r = atomicrmw xchg ptr %ptr, i32 %value release, align 4 198 ret i32 %r 199} 200 201define dso_local i32 @atomicrmw_xchg_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 202; -O0-LABEL: atomicrmw_xchg_i32_aligned_acq_rel: 203; -O0: ldaxr w8, [x11] 204; -O0: cmp w8, w9 205; -O0: stlxr w10, w12, [x11] 206; -O0: subs w9, w8, w9 207; -O0: subs w9, w9, #1 208; 209; -O1-LABEL: atomicrmw_xchg_i32_aligned_acq_rel: 210; -O1: ldaxr w0, [x8] 211; -O1: stlxr w9, w1, [x8] 212 %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 4 213 ret i32 %r 214} 215 216define dso_local i32 @atomicrmw_xchg_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 217; -O0-LABEL: atomicrmw_xchg_i32_aligned_seq_cst: 218; -O0: ldaxr w8, [x11] 219; -O0: cmp w8, w9 220; -O0: stlxr w10, w12, [x11] 221; -O0: subs w9, w8, w9 222; -O0: subs w9, w9, #1 223; 224; -O1-LABEL: atomicrmw_xchg_i32_aligned_seq_cst: 225; -O1: ldaxr w0, [x8] 226; -O1: stlxr w9, w1, [x8] 227 %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 4 228 ret i32 %r 229} 230 231define dso_local i64 @atomicrmw_xchg_i64_aligned_monotonic(ptr %ptr, i64 %value) { 232; -O0-LABEL: atomicrmw_xchg_i64_aligned_monotonic: 233; -O0: ldaxr x8, [x11] 234; -O0: cmp x8, x9 235; -O0: stlxr w10, x12, [x11] 236; -O0: subs x9, x8, x9 237; -O0: subs w9, w9, #1 238; 239; -O1-LABEL: atomicrmw_xchg_i64_aligned_monotonic: 240; -O1: ldxr x0, [x8] 241; -O1: stxr w9, x1, [x8] 242 %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 8 243 ret i64 %r 244} 245 246define dso_local i64 @atomicrmw_xchg_i64_aligned_acquire(ptr %ptr, i64 %value) { 247; -O0-LABEL: atomicrmw_xchg_i64_aligned_acquire: 248; -O0: ldaxr x8, [x11] 249; -O0: cmp x8, x9 250; -O0: stlxr w10, x12, [x11] 251; -O0: subs x9, x8, x9 252; -O0: subs w9, w9, #1 253; 254; -O1-LABEL: atomicrmw_xchg_i64_aligned_acquire: 255; -O1: ldaxr x0, [x8] 256; -O1: stxr w9, x1, [x8] 257 %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 8 258 ret i64 %r 259} 260 261define dso_local i64 @atomicrmw_xchg_i64_aligned_release(ptr %ptr, i64 %value) { 262; -O0-LABEL: atomicrmw_xchg_i64_aligned_release: 263; -O0: ldaxr x8, [x11] 264; -O0: cmp x8, x9 265; -O0: stlxr w10, x12, [x11] 266; -O0: subs x9, x8, x9 267; -O0: subs w9, w9, #1 268; 269; -O1-LABEL: atomicrmw_xchg_i64_aligned_release: 270; -O1: ldxr x0, [x8] 271; -O1: stlxr w9, x1, [x8] 272 %r = atomicrmw xchg ptr %ptr, i64 %value release, align 8 273 ret i64 %r 274} 275 276define dso_local i64 @atomicrmw_xchg_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 277; -O0-LABEL: atomicrmw_xchg_i64_aligned_acq_rel: 278; -O0: ldaxr x8, [x11] 279; -O0: cmp x8, x9 280; -O0: stlxr w10, x12, [x11] 281; -O0: subs x9, x8, x9 282; -O0: subs w9, w9, #1 283; 284; -O1-LABEL: atomicrmw_xchg_i64_aligned_acq_rel: 285; -O1: ldaxr x0, [x8] 286; -O1: stlxr w9, x1, [x8] 287 %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 8 288 ret i64 %r 289} 290 291define dso_local i64 @atomicrmw_xchg_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 292; -O0-LABEL: atomicrmw_xchg_i64_aligned_seq_cst: 293; -O0: ldaxr x8, [x11] 294; -O0: cmp x8, x9 295; -O0: stlxr w10, x12, [x11] 296; -O0: subs x9, x8, x9 297; -O0: subs w9, w9, #1 298; 299; -O1-LABEL: atomicrmw_xchg_i64_aligned_seq_cst: 300; -O1: ldaxr x0, [x8] 301; -O1: stlxr w9, x1, [x8] 302 %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 8 303 ret i64 %r 304} 305 306define dso_local i128 @atomicrmw_xchg_i128_aligned_monotonic(ptr %ptr, i128 %value) { 307; -O0-LABEL: atomicrmw_xchg_i128_aligned_monotonic: 308; -O0: ldxp x10, x12, [x9] 309; -O0: cmp x10, x11 310; -O0: cmp x12, x13 311; -O0: stxp w8, x14, x15, [x9] 312; -O0: stxp w8, x10, x12, [x9] 313; -O0: subs x12, x12, x13 314; -O0: ccmp x10, x11, #0, eq 315; 316; -O1-LABEL: atomicrmw_xchg_i128_aligned_monotonic: 317; -O1: ldxp x1, x8, [x0] 318; -O1: stxp w9, x3, x2, [x0] 319 %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 16 320 ret i128 %r 321} 322 323define dso_local i128 @atomicrmw_xchg_i128_aligned_acquire(ptr %ptr, i128 %value) { 324; -O0-LABEL: atomicrmw_xchg_i128_aligned_acquire: 325; -O0: ldaxp x10, x12, [x9] 326; -O0: cmp x10, x11 327; -O0: cmp x12, x13 328; -O0: stxp w8, x14, x15, [x9] 329; -O0: stxp w8, x10, x12, [x9] 330; -O0: subs x12, x12, x13 331; -O0: ccmp x10, x11, #0, eq 332; 333; -O1-LABEL: atomicrmw_xchg_i128_aligned_acquire: 334; -O1: ldaxp x1, x8, [x0] 335; -O1: stxp w9, x3, x2, [x0] 336 %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 16 337 ret i128 %r 338} 339 340define dso_local i128 @atomicrmw_xchg_i128_aligned_release(ptr %ptr, i128 %value) { 341; -O0-LABEL: atomicrmw_xchg_i128_aligned_release: 342; -O0: ldxp x10, x12, [x9] 343; -O0: cmp x10, x11 344; -O0: cmp x12, x13 345; -O0: stlxp w8, x14, x15, [x9] 346; -O0: stlxp w8, x10, x12, [x9] 347; -O0: subs x12, x12, x13 348; -O0: ccmp x10, x11, #0, eq 349; 350; -O1-LABEL: atomicrmw_xchg_i128_aligned_release: 351; -O1: ldxp x1, x8, [x0] 352; -O1: stlxp w9, x3, x2, [x0] 353 %r = atomicrmw xchg ptr %ptr, i128 %value release, align 16 354 ret i128 %r 355} 356 357define dso_local i128 @atomicrmw_xchg_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 358; -O0-LABEL: atomicrmw_xchg_i128_aligned_acq_rel: 359; -O0: ldaxp x10, x12, [x9] 360; -O0: cmp x10, x11 361; -O0: cmp x12, x13 362; -O0: stlxp w8, x14, x15, [x9] 363; -O0: stlxp w8, x10, x12, [x9] 364; -O0: subs x12, x12, x13 365; -O0: ccmp x10, x11, #0, eq 366; 367; -O1-LABEL: atomicrmw_xchg_i128_aligned_acq_rel: 368; -O1: ldaxp x1, x8, [x0] 369; -O1: stlxp w9, x3, x2, [x0] 370 %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 16 371 ret i128 %r 372} 373 374define dso_local i128 @atomicrmw_xchg_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 375; -O0-LABEL: atomicrmw_xchg_i128_aligned_seq_cst: 376; -O0: ldaxp x10, x12, [x9] 377; -O0: cmp x10, x11 378; -O0: cmp x12, x13 379; -O0: stlxp w8, x14, x15, [x9] 380; -O0: stlxp w8, x10, x12, [x9] 381; -O0: subs x12, x12, x13 382; -O0: ccmp x10, x11, #0, eq 383; 384; -O1-LABEL: atomicrmw_xchg_i128_aligned_seq_cst: 385; -O1: ldaxp x1, x8, [x0] 386; -O1: stlxp w9, x3, x2, [x0] 387 %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 16 388 ret i128 %r 389} 390 391define dso_local i8 @atomicrmw_xchg_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 392; -O0-LABEL: atomicrmw_xchg_i8_unaligned_monotonic: 393; -O0: ldaxrb w8, [x11] 394; -O0: cmp w8, w9, uxtb 395; -O0: stlxrb w10, w12, [x11] 396; -O0: subs w9, w8, w9, uxtb 397; -O0: subs w9, w9, #1 398; 399; -O1-LABEL: atomicrmw_xchg_i8_unaligned_monotonic: 400; -O1: ldxrb w8, [x0] 401; -O1: stxrb w9, w1, [x0] 402 %r = atomicrmw xchg ptr %ptr, i8 %value monotonic, align 1 403 ret i8 %r 404} 405 406define dso_local i8 @atomicrmw_xchg_i8_unaligned_acquire(ptr %ptr, i8 %value) { 407; -O0-LABEL: atomicrmw_xchg_i8_unaligned_acquire: 408; -O0: ldaxrb w8, [x11] 409; -O0: cmp w8, w9, uxtb 410; -O0: stlxrb w10, w12, [x11] 411; -O0: subs w9, w8, w9, uxtb 412; -O0: subs w9, w9, #1 413; 414; -O1-LABEL: atomicrmw_xchg_i8_unaligned_acquire: 415; -O1: ldaxrb w8, [x0] 416; -O1: stxrb w9, w1, [x0] 417 %r = atomicrmw xchg ptr %ptr, i8 %value acquire, align 1 418 ret i8 %r 419} 420 421define dso_local i8 @atomicrmw_xchg_i8_unaligned_release(ptr %ptr, i8 %value) { 422; -O0-LABEL: atomicrmw_xchg_i8_unaligned_release: 423; -O0: ldaxrb w8, [x11] 424; -O0: cmp w8, w9, uxtb 425; -O0: stlxrb w10, w12, [x11] 426; -O0: subs w9, w8, w9, uxtb 427; -O0: subs w9, w9, #1 428; 429; -O1-LABEL: atomicrmw_xchg_i8_unaligned_release: 430; -O1: ldxrb w8, [x0] 431; -O1: stlxrb w9, w1, [x0] 432 %r = atomicrmw xchg ptr %ptr, i8 %value release, align 1 433 ret i8 %r 434} 435 436define dso_local i8 @atomicrmw_xchg_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 437; -O0-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel: 438; -O0: ldaxrb w8, [x11] 439; -O0: cmp w8, w9, uxtb 440; -O0: stlxrb w10, w12, [x11] 441; -O0: subs w9, w8, w9, uxtb 442; -O0: subs w9, w9, #1 443; 444; -O1-LABEL: atomicrmw_xchg_i8_unaligned_acq_rel: 445; -O1: ldaxrb w8, [x0] 446; -O1: stlxrb w9, w1, [x0] 447 %r = atomicrmw xchg ptr %ptr, i8 %value acq_rel, align 1 448 ret i8 %r 449} 450 451define dso_local i8 @atomicrmw_xchg_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 452; -O0-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst: 453; -O0: ldaxrb w8, [x11] 454; -O0: cmp w8, w9, uxtb 455; -O0: stlxrb w10, w12, [x11] 456; -O0: subs w9, w8, w9, uxtb 457; -O0: subs w9, w9, #1 458; 459; -O1-LABEL: atomicrmw_xchg_i8_unaligned_seq_cst: 460; -O1: ldaxrb w8, [x0] 461; -O1: stlxrb w9, w1, [x0] 462 %r = atomicrmw xchg ptr %ptr, i8 %value seq_cst, align 1 463 ret i8 %r 464} 465 466define dso_local i16 @atomicrmw_xchg_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 467; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_monotonic: 468; CHECK: bl __atomic_exchange 469 %r = atomicrmw xchg ptr %ptr, i16 %value monotonic, align 1 470 ret i16 %r 471} 472 473define dso_local i16 @atomicrmw_xchg_i16_unaligned_acquire(ptr %ptr, i16 %value) { 474; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acquire: 475; CHECK: bl __atomic_exchange 476 %r = atomicrmw xchg ptr %ptr, i16 %value acquire, align 1 477 ret i16 %r 478} 479 480define dso_local i16 @atomicrmw_xchg_i16_unaligned_release(ptr %ptr, i16 %value) { 481; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_release: 482; CHECK: bl __atomic_exchange 483 %r = atomicrmw xchg ptr %ptr, i16 %value release, align 1 484 ret i16 %r 485} 486 487define dso_local i16 @atomicrmw_xchg_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 488; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_acq_rel: 489; CHECK: bl __atomic_exchange 490 %r = atomicrmw xchg ptr %ptr, i16 %value acq_rel, align 1 491 ret i16 %r 492} 493 494define dso_local i16 @atomicrmw_xchg_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 495; CHECK-LABEL: atomicrmw_xchg_i16_unaligned_seq_cst: 496; CHECK: bl __atomic_exchange 497 %r = atomicrmw xchg ptr %ptr, i16 %value seq_cst, align 1 498 ret i16 %r 499} 500 501define dso_local i32 @atomicrmw_xchg_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 502; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_monotonic: 503; CHECK: bl __atomic_exchange 504 %r = atomicrmw xchg ptr %ptr, i32 %value monotonic, align 1 505 ret i32 %r 506} 507 508define dso_local i32 @atomicrmw_xchg_i32_unaligned_acquire(ptr %ptr, i32 %value) { 509; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acquire: 510; CHECK: bl __atomic_exchange 511 %r = atomicrmw xchg ptr %ptr, i32 %value acquire, align 1 512 ret i32 %r 513} 514 515define dso_local i32 @atomicrmw_xchg_i32_unaligned_release(ptr %ptr, i32 %value) { 516; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_release: 517; CHECK: bl __atomic_exchange 518 %r = atomicrmw xchg ptr %ptr, i32 %value release, align 1 519 ret i32 %r 520} 521 522define dso_local i32 @atomicrmw_xchg_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 523; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_acq_rel: 524; CHECK: bl __atomic_exchange 525 %r = atomicrmw xchg ptr %ptr, i32 %value acq_rel, align 1 526 ret i32 %r 527} 528 529define dso_local i32 @atomicrmw_xchg_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 530; CHECK-LABEL: atomicrmw_xchg_i32_unaligned_seq_cst: 531; CHECK: bl __atomic_exchange 532 %r = atomicrmw xchg ptr %ptr, i32 %value seq_cst, align 1 533 ret i32 %r 534} 535 536define dso_local i64 @atomicrmw_xchg_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 537; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_monotonic: 538; CHECK: bl __atomic_exchange 539 %r = atomicrmw xchg ptr %ptr, i64 %value monotonic, align 1 540 ret i64 %r 541} 542 543define dso_local i64 @atomicrmw_xchg_i64_unaligned_acquire(ptr %ptr, i64 %value) { 544; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acquire: 545; CHECK: bl __atomic_exchange 546 %r = atomicrmw xchg ptr %ptr, i64 %value acquire, align 1 547 ret i64 %r 548} 549 550define dso_local i64 @atomicrmw_xchg_i64_unaligned_release(ptr %ptr, i64 %value) { 551; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_release: 552; CHECK: bl __atomic_exchange 553 %r = atomicrmw xchg ptr %ptr, i64 %value release, align 1 554 ret i64 %r 555} 556 557define dso_local i64 @atomicrmw_xchg_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 558; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_acq_rel: 559; CHECK: bl __atomic_exchange 560 %r = atomicrmw xchg ptr %ptr, i64 %value acq_rel, align 1 561 ret i64 %r 562} 563 564define dso_local i64 @atomicrmw_xchg_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 565; CHECK-LABEL: atomicrmw_xchg_i64_unaligned_seq_cst: 566; CHECK: bl __atomic_exchange 567 %r = atomicrmw xchg ptr %ptr, i64 %value seq_cst, align 1 568 ret i64 %r 569} 570 571define dso_local i128 @atomicrmw_xchg_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 572; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_monotonic: 573; CHECK: bl __atomic_exchange 574 %r = atomicrmw xchg ptr %ptr, i128 %value monotonic, align 1 575 ret i128 %r 576} 577 578define dso_local i128 @atomicrmw_xchg_i128_unaligned_acquire(ptr %ptr, i128 %value) { 579; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acquire: 580; CHECK: bl __atomic_exchange 581 %r = atomicrmw xchg ptr %ptr, i128 %value acquire, align 1 582 ret i128 %r 583} 584 585define dso_local i128 @atomicrmw_xchg_i128_unaligned_release(ptr %ptr, i128 %value) { 586; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_release: 587; CHECK: bl __atomic_exchange 588 %r = atomicrmw xchg ptr %ptr, i128 %value release, align 1 589 ret i128 %r 590} 591 592define dso_local i128 @atomicrmw_xchg_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 593; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_acq_rel: 594; CHECK: bl __atomic_exchange 595 %r = atomicrmw xchg ptr %ptr, i128 %value acq_rel, align 1 596 ret i128 %r 597} 598 599define dso_local i128 @atomicrmw_xchg_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 600; CHECK-LABEL: atomicrmw_xchg_i128_unaligned_seq_cst: 601; CHECK: bl __atomic_exchange 602 %r = atomicrmw xchg ptr %ptr, i128 %value seq_cst, align 1 603 ret i128 %r 604} 605 606define dso_local i8 @atomicrmw_add_i8_aligned_monotonic(ptr %ptr, i8 %value) { 607; -O0-LABEL: atomicrmw_add_i8_aligned_monotonic: 608; -O0: add w12, w9, w8 609; -O0: ldaxrb w8, [x11] 610; -O0: cmp w8, w9, uxtb 611; -O0: stlxrb w10, w12, [x11] 612; -O0: subs w9, w8, w9, uxtb 613; -O0: subs w9, w9, #1 614; 615; -O1-LABEL: atomicrmw_add_i8_aligned_monotonic: 616; -O1: ldxrb w8, [x0] 617; -O1: add w9, w8, w1 618; -O1: stxrb w10, w9, [x0] 619 %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1 620 ret i8 %r 621} 622 623define dso_local i8 @atomicrmw_add_i8_aligned_acquire(ptr %ptr, i8 %value) { 624; -O0-LABEL: atomicrmw_add_i8_aligned_acquire: 625; -O0: add w12, w9, w8 626; -O0: ldaxrb w8, [x11] 627; -O0: cmp w8, w9, uxtb 628; -O0: stlxrb w10, w12, [x11] 629; -O0: subs w9, w8, w9, uxtb 630; -O0: subs w9, w9, #1 631; 632; -O1-LABEL: atomicrmw_add_i8_aligned_acquire: 633; -O1: ldaxrb w8, [x0] 634; -O1: add w9, w8, w1 635; -O1: stxrb w10, w9, [x0] 636 %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1 637 ret i8 %r 638} 639 640define dso_local i8 @atomicrmw_add_i8_aligned_release(ptr %ptr, i8 %value) { 641; -O0-LABEL: atomicrmw_add_i8_aligned_release: 642; -O0: add w12, w9, w8 643; -O0: ldaxrb w8, [x11] 644; -O0: cmp w8, w9, uxtb 645; -O0: stlxrb w10, w12, [x11] 646; -O0: subs w9, w8, w9, uxtb 647; -O0: subs w9, w9, #1 648; 649; -O1-LABEL: atomicrmw_add_i8_aligned_release: 650; -O1: ldxrb w8, [x0] 651; -O1: add w9, w8, w1 652; -O1: stlxrb w10, w9, [x0] 653 %r = atomicrmw add ptr %ptr, i8 %value release, align 1 654 ret i8 %r 655} 656 657define dso_local i8 @atomicrmw_add_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 658; -O0-LABEL: atomicrmw_add_i8_aligned_acq_rel: 659; -O0: add w12, w9, w8 660; -O0: ldaxrb w8, [x11] 661; -O0: cmp w8, w9, uxtb 662; -O0: stlxrb w10, w12, [x11] 663; -O0: subs w9, w8, w9, uxtb 664; -O0: subs w9, w9, #1 665; 666; -O1-LABEL: atomicrmw_add_i8_aligned_acq_rel: 667; -O1: ldaxrb w8, [x0] 668; -O1: add w9, w8, w1 669; -O1: stlxrb w10, w9, [x0] 670 %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1 671 ret i8 %r 672} 673 674define dso_local i8 @atomicrmw_add_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 675; -O0-LABEL: atomicrmw_add_i8_aligned_seq_cst: 676; -O0: add w12, w9, w8 677; -O0: ldaxrb w8, [x11] 678; -O0: cmp w8, w9, uxtb 679; -O0: stlxrb w10, w12, [x11] 680; -O0: subs w9, w8, w9, uxtb 681; -O0: subs w9, w9, #1 682; 683; -O1-LABEL: atomicrmw_add_i8_aligned_seq_cst: 684; -O1: ldaxrb w8, [x0] 685; -O1: add w9, w8, w1 686; -O1: stlxrb w10, w9, [x0] 687 %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1 688 ret i8 %r 689} 690 691define dso_local i16 @atomicrmw_add_i16_aligned_monotonic(ptr %ptr, i16 %value) { 692; -O0-LABEL: atomicrmw_add_i16_aligned_monotonic: 693; -O0: add w12, w9, w8 694; -O0: ldaxrh w8, [x11] 695; -O0: cmp w8, w9, uxth 696; -O0: stlxrh w10, w12, [x11] 697; -O0: subs w9, w8, w9, uxth 698; -O0: subs w9, w9, #1 699; 700; -O1-LABEL: atomicrmw_add_i16_aligned_monotonic: 701; -O1: ldxrh w8, [x0] 702; -O1: add w9, w8, w1 703; -O1: stxrh w10, w9, [x0] 704 %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 2 705 ret i16 %r 706} 707 708define dso_local i16 @atomicrmw_add_i16_aligned_acquire(ptr %ptr, i16 %value) { 709; -O0-LABEL: atomicrmw_add_i16_aligned_acquire: 710; -O0: add w12, w9, w8 711; -O0: ldaxrh w8, [x11] 712; -O0: cmp w8, w9, uxth 713; -O0: stlxrh w10, w12, [x11] 714; -O0: subs w9, w8, w9, uxth 715; -O0: subs w9, w9, #1 716; 717; -O1-LABEL: atomicrmw_add_i16_aligned_acquire: 718; -O1: ldaxrh w8, [x0] 719; -O1: add w9, w8, w1 720; -O1: stxrh w10, w9, [x0] 721 %r = atomicrmw add ptr %ptr, i16 %value acquire, align 2 722 ret i16 %r 723} 724 725define dso_local i16 @atomicrmw_add_i16_aligned_release(ptr %ptr, i16 %value) { 726; -O0-LABEL: atomicrmw_add_i16_aligned_release: 727; -O0: add w12, w9, w8 728; -O0: ldaxrh w8, [x11] 729; -O0: cmp w8, w9, uxth 730; -O0: stlxrh w10, w12, [x11] 731; -O0: subs w9, w8, w9, uxth 732; -O0: subs w9, w9, #1 733; 734; -O1-LABEL: atomicrmw_add_i16_aligned_release: 735; -O1: ldxrh w8, [x0] 736; -O1: add w9, w8, w1 737; -O1: stlxrh w10, w9, [x0] 738 %r = atomicrmw add ptr %ptr, i16 %value release, align 2 739 ret i16 %r 740} 741 742define dso_local i16 @atomicrmw_add_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 743; -O0-LABEL: atomicrmw_add_i16_aligned_acq_rel: 744; -O0: add w12, w9, w8 745; -O0: ldaxrh w8, [x11] 746; -O0: cmp w8, w9, uxth 747; -O0: stlxrh w10, w12, [x11] 748; -O0: subs w9, w8, w9, uxth 749; -O0: subs w9, w9, #1 750; 751; -O1-LABEL: atomicrmw_add_i16_aligned_acq_rel: 752; -O1: ldaxrh w8, [x0] 753; -O1: add w9, w8, w1 754; -O1: stlxrh w10, w9, [x0] 755 %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 2 756 ret i16 %r 757} 758 759define dso_local i16 @atomicrmw_add_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 760; -O0-LABEL: atomicrmw_add_i16_aligned_seq_cst: 761; -O0: add w12, w9, w8 762; -O0: ldaxrh w8, [x11] 763; -O0: cmp w8, w9, uxth 764; -O0: stlxrh w10, w12, [x11] 765; -O0: subs w9, w8, w9, uxth 766; -O0: subs w9, w9, #1 767; 768; -O1-LABEL: atomicrmw_add_i16_aligned_seq_cst: 769; -O1: ldaxrh w8, [x0] 770; -O1: add w9, w8, w1 771; -O1: stlxrh w10, w9, [x0] 772 %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 2 773 ret i16 %r 774} 775 776define dso_local i32 @atomicrmw_add_i32_aligned_monotonic(ptr %ptr, i32 %value) { 777; -O0-LABEL: atomicrmw_add_i32_aligned_monotonic: 778; -O0: add w12, w9, w8 779; -O0: ldaxr w8, [x11] 780; -O0: cmp w8, w9 781; -O0: stlxr w10, w12, [x11] 782; -O0: subs w9, w8, w9 783; -O0: subs w9, w9, #1 784; 785; -O1-LABEL: atomicrmw_add_i32_aligned_monotonic: 786; -O1: ldxr w8, [x0] 787; -O1: add w9, w8, w1 788; -O1: stxr w10, w9, [x0] 789 %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 4 790 ret i32 %r 791} 792 793define dso_local i32 @atomicrmw_add_i32_aligned_acquire(ptr %ptr, i32 %value) { 794; -O0-LABEL: atomicrmw_add_i32_aligned_acquire: 795; -O0: add w12, w9, w8 796; -O0: ldaxr w8, [x11] 797; -O0: cmp w8, w9 798; -O0: stlxr w10, w12, [x11] 799; -O0: subs w9, w8, w9 800; -O0: subs w9, w9, #1 801; 802; -O1-LABEL: atomicrmw_add_i32_aligned_acquire: 803; -O1: ldaxr w8, [x0] 804; -O1: add w9, w8, w1 805; -O1: stxr w10, w9, [x0] 806 %r = atomicrmw add ptr %ptr, i32 %value acquire, align 4 807 ret i32 %r 808} 809 810define dso_local i32 @atomicrmw_add_i32_aligned_release(ptr %ptr, i32 %value) { 811; -O0-LABEL: atomicrmw_add_i32_aligned_release: 812; -O0: add w12, w9, w8 813; -O0: ldaxr w8, [x11] 814; -O0: cmp w8, w9 815; -O0: stlxr w10, w12, [x11] 816; -O0: subs w9, w8, w9 817; -O0: subs w9, w9, #1 818; 819; -O1-LABEL: atomicrmw_add_i32_aligned_release: 820; -O1: ldxr w8, [x0] 821; -O1: add w9, w8, w1 822; -O1: stlxr w10, w9, [x0] 823 %r = atomicrmw add ptr %ptr, i32 %value release, align 4 824 ret i32 %r 825} 826 827define dso_local i32 @atomicrmw_add_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 828; -O0-LABEL: atomicrmw_add_i32_aligned_acq_rel: 829; -O0: add w12, w9, w8 830; -O0: ldaxr w8, [x11] 831; -O0: cmp w8, w9 832; -O0: stlxr w10, w12, [x11] 833; -O0: subs w9, w8, w9 834; -O0: subs w9, w9, #1 835; 836; -O1-LABEL: atomicrmw_add_i32_aligned_acq_rel: 837; -O1: ldaxr w8, [x0] 838; -O1: add w9, w8, w1 839; -O1: stlxr w10, w9, [x0] 840 %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 4 841 ret i32 %r 842} 843 844define dso_local i32 @atomicrmw_add_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 845; -O0-LABEL: atomicrmw_add_i32_aligned_seq_cst: 846; -O0: add w12, w9, w8 847; -O0: ldaxr w8, [x11] 848; -O0: cmp w8, w9 849; -O0: stlxr w10, w12, [x11] 850; -O0: subs w9, w8, w9 851; -O0: subs w9, w9, #1 852; 853; -O1-LABEL: atomicrmw_add_i32_aligned_seq_cst: 854; -O1: ldaxr w8, [x0] 855; -O1: add w9, w8, w1 856; -O1: stlxr w10, w9, [x0] 857 %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 4 858 ret i32 %r 859} 860 861define dso_local i64 @atomicrmw_add_i64_aligned_monotonic(ptr %ptr, i64 %value) { 862; -O0-LABEL: atomicrmw_add_i64_aligned_monotonic: 863; -O0: add x12, x9, x8 864; -O0: ldaxr x8, [x11] 865; -O0: cmp x8, x9 866; -O0: stlxr w10, x12, [x11] 867; -O0: subs x9, x8, x9 868; -O0: subs w9, w9, #1 869; 870; -O1-LABEL: atomicrmw_add_i64_aligned_monotonic: 871; -O1: ldxr x0, [x8] 872; -O1: add x9, x0, x1 873; -O1: stxr w10, x9, [x8] 874 %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 8 875 ret i64 %r 876} 877 878define dso_local i64 @atomicrmw_add_i64_aligned_acquire(ptr %ptr, i64 %value) { 879; -O0-LABEL: atomicrmw_add_i64_aligned_acquire: 880; -O0: add x12, x9, x8 881; -O0: ldaxr x8, [x11] 882; -O0: cmp x8, x9 883; -O0: stlxr w10, x12, [x11] 884; -O0: subs x9, x8, x9 885; -O0: subs w9, w9, #1 886; 887; -O1-LABEL: atomicrmw_add_i64_aligned_acquire: 888; -O1: ldaxr x0, [x8] 889; -O1: add x9, x0, x1 890; -O1: stxr w10, x9, [x8] 891 %r = atomicrmw add ptr %ptr, i64 %value acquire, align 8 892 ret i64 %r 893} 894 895define dso_local i64 @atomicrmw_add_i64_aligned_release(ptr %ptr, i64 %value) { 896; -O0-LABEL: atomicrmw_add_i64_aligned_release: 897; -O0: add x12, x9, x8 898; -O0: ldaxr x8, [x11] 899; -O0: cmp x8, x9 900; -O0: stlxr w10, x12, [x11] 901; -O0: subs x9, x8, x9 902; -O0: subs w9, w9, #1 903; 904; -O1-LABEL: atomicrmw_add_i64_aligned_release: 905; -O1: ldxr x0, [x8] 906; -O1: add x9, x0, x1 907; -O1: stlxr w10, x9, [x8] 908 %r = atomicrmw add ptr %ptr, i64 %value release, align 8 909 ret i64 %r 910} 911 912define dso_local i64 @atomicrmw_add_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 913; -O0-LABEL: atomicrmw_add_i64_aligned_acq_rel: 914; -O0: add x12, x9, x8 915; -O0: ldaxr x8, [x11] 916; -O0: cmp x8, x9 917; -O0: stlxr w10, x12, [x11] 918; -O0: subs x9, x8, x9 919; -O0: subs w9, w9, #1 920; 921; -O1-LABEL: atomicrmw_add_i64_aligned_acq_rel: 922; -O1: ldaxr x0, [x8] 923; -O1: add x9, x0, x1 924; -O1: stlxr w10, x9, [x8] 925 %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 8 926 ret i64 %r 927} 928 929define dso_local i64 @atomicrmw_add_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 930; -O0-LABEL: atomicrmw_add_i64_aligned_seq_cst: 931; -O0: add x12, x9, x8 932; -O0: ldaxr x8, [x11] 933; -O0: cmp x8, x9 934; -O0: stlxr w10, x12, [x11] 935; -O0: subs x9, x8, x9 936; -O0: subs w9, w9, #1 937; 938; -O1-LABEL: atomicrmw_add_i64_aligned_seq_cst: 939; -O1: ldaxr x0, [x8] 940; -O1: add x9, x0, x1 941; -O1: stlxr w10, x9, [x8] 942 %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 8 943 ret i64 %r 944} 945 946define dso_local i128 @atomicrmw_add_i128_aligned_monotonic(ptr %ptr, i128 %value) { 947; -O0-LABEL: atomicrmw_add_i128_aligned_monotonic: 948; -O0: adds x14, x11, x10 949; -O0: ldxp x10, x12, [x9] 950; -O0: cmp x10, x11 951; -O0: cmp x12, x13 952; -O0: stxp w8, x14, x15, [x9] 953; -O0: stxp w8, x10, x12, [x9] 954; -O0: subs x12, x12, x13 955; -O0: ccmp x10, x11, #0, eq 956; 957; -O1-LABEL: atomicrmw_add_i128_aligned_monotonic: 958; -O1: ldxp x1, x0, [x8] 959; -O1: adds x9, x1, x3 960; -O1: stxp w11, x9, x10, [x8] 961 %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 16 962 ret i128 %r 963} 964 965define dso_local i128 @atomicrmw_add_i128_aligned_acquire(ptr %ptr, i128 %value) { 966; -O0-LABEL: atomicrmw_add_i128_aligned_acquire: 967; -O0: adds x14, x11, x10 968; -O0: ldaxp x10, x12, [x9] 969; -O0: cmp x10, x11 970; -O0: cmp x12, x13 971; -O0: stxp w8, x14, x15, [x9] 972; -O0: stxp w8, x10, x12, [x9] 973; -O0: subs x12, x12, x13 974; -O0: ccmp x10, x11, #0, eq 975; 976; -O1-LABEL: atomicrmw_add_i128_aligned_acquire: 977; -O1: ldaxp x1, x0, [x8] 978; -O1: adds x9, x1, x3 979; -O1: stxp w11, x9, x10, [x8] 980 %r = atomicrmw add ptr %ptr, i128 %value acquire, align 16 981 ret i128 %r 982} 983 984define dso_local i128 @atomicrmw_add_i128_aligned_release(ptr %ptr, i128 %value) { 985; -O0-LABEL: atomicrmw_add_i128_aligned_release: 986; -O0: adds x14, x11, x10 987; -O0: ldxp x10, x12, [x9] 988; -O0: cmp x10, x11 989; -O0: cmp x12, x13 990; -O0: stlxp w8, x14, x15, [x9] 991; -O0: stlxp w8, x10, x12, [x9] 992; -O0: subs x12, x12, x13 993; -O0: ccmp x10, x11, #0, eq 994; 995; -O1-LABEL: atomicrmw_add_i128_aligned_release: 996; -O1: ldxp x1, x0, [x8] 997; -O1: adds x9, x1, x3 998; -O1: stlxp w11, x9, x10, [x8] 999 %r = atomicrmw add ptr %ptr, i128 %value release, align 16 1000 ret i128 %r 1001} 1002 1003define dso_local i128 @atomicrmw_add_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 1004; -O0-LABEL: atomicrmw_add_i128_aligned_acq_rel: 1005; -O0: adds x14, x11, x10 1006; -O0: ldaxp x10, x12, [x9] 1007; -O0: cmp x10, x11 1008; -O0: cmp x12, x13 1009; -O0: stlxp w8, x14, x15, [x9] 1010; -O0: stlxp w8, x10, x12, [x9] 1011; -O0: subs x12, x12, x13 1012; -O0: ccmp x10, x11, #0, eq 1013; 1014; -O1-LABEL: atomicrmw_add_i128_aligned_acq_rel: 1015; -O1: ldaxp x1, x0, [x8] 1016; -O1: adds x9, x1, x3 1017; -O1: stlxp w11, x9, x10, [x8] 1018 %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 16 1019 ret i128 %r 1020} 1021 1022define dso_local i128 @atomicrmw_add_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 1023; -O0-LABEL: atomicrmw_add_i128_aligned_seq_cst: 1024; -O0: adds x14, x11, x10 1025; -O0: ldaxp x10, x12, [x9] 1026; -O0: cmp x10, x11 1027; -O0: cmp x12, x13 1028; -O0: stlxp w8, x14, x15, [x9] 1029; -O0: stlxp w8, x10, x12, [x9] 1030; -O0: subs x12, x12, x13 1031; -O0: ccmp x10, x11, #0, eq 1032; 1033; -O1-LABEL: atomicrmw_add_i128_aligned_seq_cst: 1034; -O1: ldaxp x1, x0, [x8] 1035; -O1: adds x9, x1, x3 1036; -O1: stlxp w11, x9, x10, [x8] 1037 %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 16 1038 ret i128 %r 1039} 1040 1041define dso_local i8 @atomicrmw_add_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 1042; -O0-LABEL: atomicrmw_add_i8_unaligned_monotonic: 1043; -O0: add w12, w9, w8 1044; -O0: ldaxrb w8, [x11] 1045; -O0: cmp w8, w9, uxtb 1046; -O0: stlxrb w10, w12, [x11] 1047; -O0: subs w9, w8, w9, uxtb 1048; -O0: subs w9, w9, #1 1049; 1050; -O1-LABEL: atomicrmw_add_i8_unaligned_monotonic: 1051; -O1: ldxrb w8, [x0] 1052; -O1: add w9, w8, w1 1053; -O1: stxrb w10, w9, [x0] 1054 %r = atomicrmw add ptr %ptr, i8 %value monotonic, align 1 1055 ret i8 %r 1056} 1057 1058define dso_local i8 @atomicrmw_add_i8_unaligned_acquire(ptr %ptr, i8 %value) { 1059; -O0-LABEL: atomicrmw_add_i8_unaligned_acquire: 1060; -O0: add w12, w9, w8 1061; -O0: ldaxrb w8, [x11] 1062; -O0: cmp w8, w9, uxtb 1063; -O0: stlxrb w10, w12, [x11] 1064; -O0: subs w9, w8, w9, uxtb 1065; -O0: subs w9, w9, #1 1066; 1067; -O1-LABEL: atomicrmw_add_i8_unaligned_acquire: 1068; -O1: ldaxrb w8, [x0] 1069; -O1: add w9, w8, w1 1070; -O1: stxrb w10, w9, [x0] 1071 %r = atomicrmw add ptr %ptr, i8 %value acquire, align 1 1072 ret i8 %r 1073} 1074 1075define dso_local i8 @atomicrmw_add_i8_unaligned_release(ptr %ptr, i8 %value) { 1076; -O0-LABEL: atomicrmw_add_i8_unaligned_release: 1077; -O0: add w12, w9, w8 1078; -O0: ldaxrb w8, [x11] 1079; -O0: cmp w8, w9, uxtb 1080; -O0: stlxrb w10, w12, [x11] 1081; -O0: subs w9, w8, w9, uxtb 1082; -O0: subs w9, w9, #1 1083; 1084; -O1-LABEL: atomicrmw_add_i8_unaligned_release: 1085; -O1: ldxrb w8, [x0] 1086; -O1: add w9, w8, w1 1087; -O1: stlxrb w10, w9, [x0] 1088 %r = atomicrmw add ptr %ptr, i8 %value release, align 1 1089 ret i8 %r 1090} 1091 1092define dso_local i8 @atomicrmw_add_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 1093; -O0-LABEL: atomicrmw_add_i8_unaligned_acq_rel: 1094; -O0: add w12, w9, w8 1095; -O0: ldaxrb w8, [x11] 1096; -O0: cmp w8, w9, uxtb 1097; -O0: stlxrb w10, w12, [x11] 1098; -O0: subs w9, w8, w9, uxtb 1099; -O0: subs w9, w9, #1 1100; 1101; -O1-LABEL: atomicrmw_add_i8_unaligned_acq_rel: 1102; -O1: ldaxrb w8, [x0] 1103; -O1: add w9, w8, w1 1104; -O1: stlxrb w10, w9, [x0] 1105 %r = atomicrmw add ptr %ptr, i8 %value acq_rel, align 1 1106 ret i8 %r 1107} 1108 1109define dso_local i8 @atomicrmw_add_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 1110; -O0-LABEL: atomicrmw_add_i8_unaligned_seq_cst: 1111; -O0: add w12, w9, w8 1112; -O0: ldaxrb w8, [x11] 1113; -O0: cmp w8, w9, uxtb 1114; -O0: stlxrb w10, w12, [x11] 1115; -O0: subs w9, w8, w9, uxtb 1116; -O0: subs w9, w9, #1 1117; 1118; -O1-LABEL: atomicrmw_add_i8_unaligned_seq_cst: 1119; -O1: ldaxrb w8, [x0] 1120; -O1: add w9, w8, w1 1121; -O1: stlxrb w10, w9, [x0] 1122 %r = atomicrmw add ptr %ptr, i8 %value seq_cst, align 1 1123 ret i8 %r 1124} 1125 1126define dso_local i16 @atomicrmw_add_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 1127; -O0-LABEL: atomicrmw_add_i16_unaligned_monotonic: 1128; -O0: add w8, w9, w8 1129; -O0: bl __atomic_compare_exchange 1130; 1131; -O1-LABEL: atomicrmw_add_i16_unaligned_monotonic: 1132; -O1: add w8, w0, w20 1133; -O1: bl __atomic_compare_exchange 1134 %r = atomicrmw add ptr %ptr, i16 %value monotonic, align 1 1135 ret i16 %r 1136} 1137 1138define dso_local i16 @atomicrmw_add_i16_unaligned_acquire(ptr %ptr, i16 %value) { 1139; -O0-LABEL: atomicrmw_add_i16_unaligned_acquire: 1140; -O0: add w8, w9, w8 1141; -O0: bl __atomic_compare_exchange 1142; 1143; -O1-LABEL: atomicrmw_add_i16_unaligned_acquire: 1144; -O1: add w8, w0, w20 1145; -O1: bl __atomic_compare_exchange 1146 %r = atomicrmw add ptr %ptr, i16 %value acquire, align 1 1147 ret i16 %r 1148} 1149 1150define dso_local i16 @atomicrmw_add_i16_unaligned_release(ptr %ptr, i16 %value) { 1151; -O0-LABEL: atomicrmw_add_i16_unaligned_release: 1152; -O0: add w8, w9, w8 1153; -O0: bl __atomic_compare_exchange 1154; 1155; -O1-LABEL: atomicrmw_add_i16_unaligned_release: 1156; -O1: add w8, w0, w20 1157; -O1: bl __atomic_compare_exchange 1158 %r = atomicrmw add ptr %ptr, i16 %value release, align 1 1159 ret i16 %r 1160} 1161 1162define dso_local i16 @atomicrmw_add_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 1163; -O0-LABEL: atomicrmw_add_i16_unaligned_acq_rel: 1164; -O0: add w8, w9, w8 1165; -O0: bl __atomic_compare_exchange 1166; 1167; -O1-LABEL: atomicrmw_add_i16_unaligned_acq_rel: 1168; -O1: add w8, w0, w20 1169; -O1: bl __atomic_compare_exchange 1170 %r = atomicrmw add ptr %ptr, i16 %value acq_rel, align 1 1171 ret i16 %r 1172} 1173 1174define dso_local i16 @atomicrmw_add_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 1175; -O0-LABEL: atomicrmw_add_i16_unaligned_seq_cst: 1176; -O0: add w8, w9, w8 1177; -O0: bl __atomic_compare_exchange 1178; 1179; -O1-LABEL: atomicrmw_add_i16_unaligned_seq_cst: 1180; -O1: add w8, w0, w20 1181; -O1: bl __atomic_compare_exchange 1182 %r = atomicrmw add ptr %ptr, i16 %value seq_cst, align 1 1183 ret i16 %r 1184} 1185 1186define dso_local i32 @atomicrmw_add_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 1187; -O0-LABEL: atomicrmw_add_i32_unaligned_monotonic: 1188; -O0: add w8, w9, w8 1189; -O0: bl __atomic_compare_exchange 1190; 1191; -O1-LABEL: atomicrmw_add_i32_unaligned_monotonic: 1192; -O1: add w8, w0, w20 1193; -O1: bl __atomic_compare_exchange 1194 %r = atomicrmw add ptr %ptr, i32 %value monotonic, align 1 1195 ret i32 %r 1196} 1197 1198define dso_local i32 @atomicrmw_add_i32_unaligned_acquire(ptr %ptr, i32 %value) { 1199; -O0-LABEL: atomicrmw_add_i32_unaligned_acquire: 1200; -O0: add w8, w9, w8 1201; -O0: bl __atomic_compare_exchange 1202; 1203; -O1-LABEL: atomicrmw_add_i32_unaligned_acquire: 1204; -O1: add w8, w0, w20 1205; -O1: bl __atomic_compare_exchange 1206 %r = atomicrmw add ptr %ptr, i32 %value acquire, align 1 1207 ret i32 %r 1208} 1209 1210define dso_local i32 @atomicrmw_add_i32_unaligned_release(ptr %ptr, i32 %value) { 1211; -O0-LABEL: atomicrmw_add_i32_unaligned_release: 1212; -O0: add w8, w9, w8 1213; -O0: bl __atomic_compare_exchange 1214; 1215; -O1-LABEL: atomicrmw_add_i32_unaligned_release: 1216; -O1: add w8, w0, w20 1217; -O1: bl __atomic_compare_exchange 1218 %r = atomicrmw add ptr %ptr, i32 %value release, align 1 1219 ret i32 %r 1220} 1221 1222define dso_local i32 @atomicrmw_add_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 1223; -O0-LABEL: atomicrmw_add_i32_unaligned_acq_rel: 1224; -O0: add w8, w9, w8 1225; -O0: bl __atomic_compare_exchange 1226; 1227; -O1-LABEL: atomicrmw_add_i32_unaligned_acq_rel: 1228; -O1: add w8, w0, w20 1229; -O1: bl __atomic_compare_exchange 1230 %r = atomicrmw add ptr %ptr, i32 %value acq_rel, align 1 1231 ret i32 %r 1232} 1233 1234define dso_local i32 @atomicrmw_add_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 1235; -O0-LABEL: atomicrmw_add_i32_unaligned_seq_cst: 1236; -O0: add w8, w9, w8 1237; -O0: bl __atomic_compare_exchange 1238; 1239; -O1-LABEL: atomicrmw_add_i32_unaligned_seq_cst: 1240; -O1: add w8, w0, w20 1241; -O1: bl __atomic_compare_exchange 1242 %r = atomicrmw add ptr %ptr, i32 %value seq_cst, align 1 1243 ret i32 %r 1244} 1245 1246define dso_local i64 @atomicrmw_add_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 1247; -O0-LABEL: atomicrmw_add_i64_unaligned_monotonic: 1248; -O0: add x8, x9, x8 1249; -O0: bl __atomic_compare_exchange 1250; 1251; -O1-LABEL: atomicrmw_add_i64_unaligned_monotonic: 1252; -O1: add x8, x0, x20 1253; -O1: bl __atomic_compare_exchange 1254 %r = atomicrmw add ptr %ptr, i64 %value monotonic, align 1 1255 ret i64 %r 1256} 1257 1258define dso_local i64 @atomicrmw_add_i64_unaligned_acquire(ptr %ptr, i64 %value) { 1259; -O0-LABEL: atomicrmw_add_i64_unaligned_acquire: 1260; -O0: add x8, x9, x8 1261; -O0: bl __atomic_compare_exchange 1262; 1263; -O1-LABEL: atomicrmw_add_i64_unaligned_acquire: 1264; -O1: add x8, x0, x20 1265; -O1: bl __atomic_compare_exchange 1266 %r = atomicrmw add ptr %ptr, i64 %value acquire, align 1 1267 ret i64 %r 1268} 1269 1270define dso_local i64 @atomicrmw_add_i64_unaligned_release(ptr %ptr, i64 %value) { 1271; -O0-LABEL: atomicrmw_add_i64_unaligned_release: 1272; -O0: add x8, x9, x8 1273; -O0: bl __atomic_compare_exchange 1274; 1275; -O1-LABEL: atomicrmw_add_i64_unaligned_release: 1276; -O1: add x8, x0, x20 1277; -O1: bl __atomic_compare_exchange 1278 %r = atomicrmw add ptr %ptr, i64 %value release, align 1 1279 ret i64 %r 1280} 1281 1282define dso_local i64 @atomicrmw_add_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 1283; -O0-LABEL: atomicrmw_add_i64_unaligned_acq_rel: 1284; -O0: add x8, x9, x8 1285; -O0: bl __atomic_compare_exchange 1286; 1287; -O1-LABEL: atomicrmw_add_i64_unaligned_acq_rel: 1288; -O1: add x8, x0, x20 1289; -O1: bl __atomic_compare_exchange 1290 %r = atomicrmw add ptr %ptr, i64 %value acq_rel, align 1 1291 ret i64 %r 1292} 1293 1294define dso_local i64 @atomicrmw_add_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 1295; -O0-LABEL: atomicrmw_add_i64_unaligned_seq_cst: 1296; -O0: add x8, x9, x8 1297; -O0: bl __atomic_compare_exchange 1298; 1299; -O1-LABEL: atomicrmw_add_i64_unaligned_seq_cst: 1300; -O1: add x8, x0, x20 1301; -O1: bl __atomic_compare_exchange 1302 %r = atomicrmw add ptr %ptr, i64 %value seq_cst, align 1 1303 ret i64 %r 1304} 1305 1306define dso_local i128 @atomicrmw_add_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 1307; -O0-LABEL: atomicrmw_add_i128_unaligned_monotonic: 1308; -O0: adds x9, x10, x9 1309; -O0: bl __atomic_compare_exchange 1310; 1311; -O1-LABEL: atomicrmw_add_i128_unaligned_monotonic: 1312; -O1: ldp x0, x1, [x0] 1313; -O1: adds x8, x1, x19 1314; -O1: bl __atomic_compare_exchange 1315 %r = atomicrmw add ptr %ptr, i128 %value monotonic, align 1 1316 ret i128 %r 1317} 1318 1319define dso_local i128 @atomicrmw_add_i128_unaligned_acquire(ptr %ptr, i128 %value) { 1320; -O0-LABEL: atomicrmw_add_i128_unaligned_acquire: 1321; -O0: adds x9, x10, x9 1322; -O0: bl __atomic_compare_exchange 1323; 1324; -O1-LABEL: atomicrmw_add_i128_unaligned_acquire: 1325; -O1: ldp x0, x1, [x0] 1326; -O1: adds x8, x1, x19 1327; -O1: bl __atomic_compare_exchange 1328 %r = atomicrmw add ptr %ptr, i128 %value acquire, align 1 1329 ret i128 %r 1330} 1331 1332define dso_local i128 @atomicrmw_add_i128_unaligned_release(ptr %ptr, i128 %value) { 1333; -O0-LABEL: atomicrmw_add_i128_unaligned_release: 1334; -O0: adds x9, x10, x9 1335; -O0: bl __atomic_compare_exchange 1336; 1337; -O1-LABEL: atomicrmw_add_i128_unaligned_release: 1338; -O1: ldp x0, x1, [x0] 1339; -O1: adds x8, x1, x19 1340; -O1: bl __atomic_compare_exchange 1341 %r = atomicrmw add ptr %ptr, i128 %value release, align 1 1342 ret i128 %r 1343} 1344 1345define dso_local i128 @atomicrmw_add_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 1346; -O0-LABEL: atomicrmw_add_i128_unaligned_acq_rel: 1347; -O0: adds x9, x10, x9 1348; -O0: bl __atomic_compare_exchange 1349; 1350; -O1-LABEL: atomicrmw_add_i128_unaligned_acq_rel: 1351; -O1: ldp x0, x1, [x0] 1352; -O1: adds x8, x1, x19 1353; -O1: bl __atomic_compare_exchange 1354 %r = atomicrmw add ptr %ptr, i128 %value acq_rel, align 1 1355 ret i128 %r 1356} 1357 1358define dso_local i128 @atomicrmw_add_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 1359; -O0-LABEL: atomicrmw_add_i128_unaligned_seq_cst: 1360; -O0: adds x9, x10, x9 1361; -O0: bl __atomic_compare_exchange 1362; 1363; -O1-LABEL: atomicrmw_add_i128_unaligned_seq_cst: 1364; -O1: ldp x0, x1, [x0] 1365; -O1: adds x8, x1, x19 1366; -O1: bl __atomic_compare_exchange 1367 %r = atomicrmw add ptr %ptr, i128 %value seq_cst, align 1 1368 ret i128 %r 1369} 1370 1371define dso_local i8 @atomicrmw_sub_i8_aligned_monotonic(ptr %ptr, i8 %value) { 1372; -O0-LABEL: atomicrmw_sub_i8_aligned_monotonic: 1373; -O0: subs w12, w9, w8 1374; -O0: ldaxrb w8, [x11] 1375; -O0: cmp w8, w9, uxtb 1376; -O0: stlxrb w10, w12, [x11] 1377; -O0: subs w9, w8, w9, uxtb 1378; -O0: subs w9, w9, #1 1379; 1380; -O1-LABEL: atomicrmw_sub_i8_aligned_monotonic: 1381; -O1: ldxrb w8, [x0] 1382; -O1: sub w9, w8, w1 1383; -O1: stxrb w10, w9, [x0] 1384 %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1 1385 ret i8 %r 1386} 1387 1388define dso_local i8 @atomicrmw_sub_i8_aligned_acquire(ptr %ptr, i8 %value) { 1389; -O0-LABEL: atomicrmw_sub_i8_aligned_acquire: 1390; -O0: subs w12, w9, w8 1391; -O0: ldaxrb w8, [x11] 1392; -O0: cmp w8, w9, uxtb 1393; -O0: stlxrb w10, w12, [x11] 1394; -O0: subs w9, w8, w9, uxtb 1395; -O0: subs w9, w9, #1 1396; 1397; -O1-LABEL: atomicrmw_sub_i8_aligned_acquire: 1398; -O1: ldaxrb w8, [x0] 1399; -O1: sub w9, w8, w1 1400; -O1: stxrb w10, w9, [x0] 1401 %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1 1402 ret i8 %r 1403} 1404 1405define dso_local i8 @atomicrmw_sub_i8_aligned_release(ptr %ptr, i8 %value) { 1406; -O0-LABEL: atomicrmw_sub_i8_aligned_release: 1407; -O0: subs w12, w9, w8 1408; -O0: ldaxrb w8, [x11] 1409; -O0: cmp w8, w9, uxtb 1410; -O0: stlxrb w10, w12, [x11] 1411; -O0: subs w9, w8, w9, uxtb 1412; -O0: subs w9, w9, #1 1413; 1414; -O1-LABEL: atomicrmw_sub_i8_aligned_release: 1415; -O1: ldxrb w8, [x0] 1416; -O1: sub w9, w8, w1 1417; -O1: stlxrb w10, w9, [x0] 1418 %r = atomicrmw sub ptr %ptr, i8 %value release, align 1 1419 ret i8 %r 1420} 1421 1422define dso_local i8 @atomicrmw_sub_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 1423; -O0-LABEL: atomicrmw_sub_i8_aligned_acq_rel: 1424; -O0: subs w12, w9, w8 1425; -O0: ldaxrb w8, [x11] 1426; -O0: cmp w8, w9, uxtb 1427; -O0: stlxrb w10, w12, [x11] 1428; -O0: subs w9, w8, w9, uxtb 1429; -O0: subs w9, w9, #1 1430; 1431; -O1-LABEL: atomicrmw_sub_i8_aligned_acq_rel: 1432; -O1: ldaxrb w8, [x0] 1433; -O1: sub w9, w8, w1 1434; -O1: stlxrb w10, w9, [x0] 1435 %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1 1436 ret i8 %r 1437} 1438 1439define dso_local i8 @atomicrmw_sub_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 1440; -O0-LABEL: atomicrmw_sub_i8_aligned_seq_cst: 1441; -O0: subs w12, w9, w8 1442; -O0: ldaxrb w8, [x11] 1443; -O0: cmp w8, w9, uxtb 1444; -O0: stlxrb w10, w12, [x11] 1445; -O0: subs w9, w8, w9, uxtb 1446; -O0: subs w9, w9, #1 1447; 1448; -O1-LABEL: atomicrmw_sub_i8_aligned_seq_cst: 1449; -O1: ldaxrb w8, [x0] 1450; -O1: sub w9, w8, w1 1451; -O1: stlxrb w10, w9, [x0] 1452 %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 1 1453 ret i8 %r 1454} 1455 1456define dso_local i16 @atomicrmw_sub_i16_aligned_monotonic(ptr %ptr, i16 %value) { 1457; -O0-LABEL: atomicrmw_sub_i16_aligned_monotonic: 1458; -O0: subs w12, w9, w8 1459; -O0: ldaxrh w8, [x11] 1460; -O0: cmp w8, w9, uxth 1461; -O0: stlxrh w10, w12, [x11] 1462; -O0: subs w9, w8, w9, uxth 1463; -O0: subs w9, w9, #1 1464; 1465; -O1-LABEL: atomicrmw_sub_i16_aligned_monotonic: 1466; -O1: ldxrh w8, [x0] 1467; -O1: sub w9, w8, w1 1468; -O1: stxrh w10, w9, [x0] 1469 %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 2 1470 ret i16 %r 1471} 1472 1473define dso_local i16 @atomicrmw_sub_i16_aligned_acquire(ptr %ptr, i16 %value) { 1474; -O0-LABEL: atomicrmw_sub_i16_aligned_acquire: 1475; -O0: subs w12, w9, w8 1476; -O0: ldaxrh w8, [x11] 1477; -O0: cmp w8, w9, uxth 1478; -O0: stlxrh w10, w12, [x11] 1479; -O0: subs w9, w8, w9, uxth 1480; -O0: subs w9, w9, #1 1481; 1482; -O1-LABEL: atomicrmw_sub_i16_aligned_acquire: 1483; -O1: ldaxrh w8, [x0] 1484; -O1: sub w9, w8, w1 1485; -O1: stxrh w10, w9, [x0] 1486 %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 2 1487 ret i16 %r 1488} 1489 1490define dso_local i16 @atomicrmw_sub_i16_aligned_release(ptr %ptr, i16 %value) { 1491; -O0-LABEL: atomicrmw_sub_i16_aligned_release: 1492; -O0: subs w12, w9, w8 1493; -O0: ldaxrh w8, [x11] 1494; -O0: cmp w8, w9, uxth 1495; -O0: stlxrh w10, w12, [x11] 1496; -O0: subs w9, w8, w9, uxth 1497; -O0: subs w9, w9, #1 1498; 1499; -O1-LABEL: atomicrmw_sub_i16_aligned_release: 1500; -O1: ldxrh w8, [x0] 1501; -O1: sub w9, w8, w1 1502; -O1: stlxrh w10, w9, [x0] 1503 %r = atomicrmw sub ptr %ptr, i16 %value release, align 2 1504 ret i16 %r 1505} 1506 1507define dso_local i16 @atomicrmw_sub_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 1508; -O0-LABEL: atomicrmw_sub_i16_aligned_acq_rel: 1509; -O0: subs w12, w9, w8 1510; -O0: ldaxrh w8, [x11] 1511; -O0: cmp w8, w9, uxth 1512; -O0: stlxrh w10, w12, [x11] 1513; -O0: subs w9, w8, w9, uxth 1514; -O0: subs w9, w9, #1 1515; 1516; -O1-LABEL: atomicrmw_sub_i16_aligned_acq_rel: 1517; -O1: ldaxrh w8, [x0] 1518; -O1: sub w9, w8, w1 1519; -O1: stlxrh w10, w9, [x0] 1520 %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 2 1521 ret i16 %r 1522} 1523 1524define dso_local i16 @atomicrmw_sub_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 1525; -O0-LABEL: atomicrmw_sub_i16_aligned_seq_cst: 1526; -O0: subs w12, w9, w8 1527; -O0: ldaxrh w8, [x11] 1528; -O0: cmp w8, w9, uxth 1529; -O0: stlxrh w10, w12, [x11] 1530; -O0: subs w9, w8, w9, uxth 1531; -O0: subs w9, w9, #1 1532; 1533; -O1-LABEL: atomicrmw_sub_i16_aligned_seq_cst: 1534; -O1: ldaxrh w8, [x0] 1535; -O1: sub w9, w8, w1 1536; -O1: stlxrh w10, w9, [x0] 1537 %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 2 1538 ret i16 %r 1539} 1540 1541define dso_local i32 @atomicrmw_sub_i32_aligned_monotonic(ptr %ptr, i32 %value) { 1542; -O0-LABEL: atomicrmw_sub_i32_aligned_monotonic: 1543; -O0: subs w12, w9, w8 1544; -O0: ldaxr w8, [x11] 1545; -O0: cmp w8, w9 1546; -O0: stlxr w10, w12, [x11] 1547; -O0: subs w9, w8, w9 1548; -O0: subs w9, w9, #1 1549; 1550; -O1-LABEL: atomicrmw_sub_i32_aligned_monotonic: 1551; -O1: ldxr w8, [x0] 1552; -O1: sub w9, w8, w1 1553; -O1: stxr w10, w9, [x0] 1554 %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 4 1555 ret i32 %r 1556} 1557 1558define dso_local i32 @atomicrmw_sub_i32_aligned_acquire(ptr %ptr, i32 %value) { 1559; -O0-LABEL: atomicrmw_sub_i32_aligned_acquire: 1560; -O0: subs w12, w9, w8 1561; -O0: ldaxr w8, [x11] 1562; -O0: cmp w8, w9 1563; -O0: stlxr w10, w12, [x11] 1564; -O0: subs w9, w8, w9 1565; -O0: subs w9, w9, #1 1566; 1567; -O1-LABEL: atomicrmw_sub_i32_aligned_acquire: 1568; -O1: ldaxr w8, [x0] 1569; -O1: sub w9, w8, w1 1570; -O1: stxr w10, w9, [x0] 1571 %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 4 1572 ret i32 %r 1573} 1574 1575define dso_local i32 @atomicrmw_sub_i32_aligned_release(ptr %ptr, i32 %value) { 1576; -O0-LABEL: atomicrmw_sub_i32_aligned_release: 1577; -O0: subs w12, w9, w8 1578; -O0: ldaxr w8, [x11] 1579; -O0: cmp w8, w9 1580; -O0: stlxr w10, w12, [x11] 1581; -O0: subs w9, w8, w9 1582; -O0: subs w9, w9, #1 1583; 1584; -O1-LABEL: atomicrmw_sub_i32_aligned_release: 1585; -O1: ldxr w8, [x0] 1586; -O1: sub w9, w8, w1 1587; -O1: stlxr w10, w9, [x0] 1588 %r = atomicrmw sub ptr %ptr, i32 %value release, align 4 1589 ret i32 %r 1590} 1591 1592define dso_local i32 @atomicrmw_sub_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 1593; -O0-LABEL: atomicrmw_sub_i32_aligned_acq_rel: 1594; -O0: subs w12, w9, w8 1595; -O0: ldaxr w8, [x11] 1596; -O0: cmp w8, w9 1597; -O0: stlxr w10, w12, [x11] 1598; -O0: subs w9, w8, w9 1599; -O0: subs w9, w9, #1 1600; 1601; -O1-LABEL: atomicrmw_sub_i32_aligned_acq_rel: 1602; -O1: ldaxr w8, [x0] 1603; -O1: sub w9, w8, w1 1604; -O1: stlxr w10, w9, [x0] 1605 %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 4 1606 ret i32 %r 1607} 1608 1609define dso_local i32 @atomicrmw_sub_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 1610; -O0-LABEL: atomicrmw_sub_i32_aligned_seq_cst: 1611; -O0: subs w12, w9, w8 1612; -O0: ldaxr w8, [x11] 1613; -O0: cmp w8, w9 1614; -O0: stlxr w10, w12, [x11] 1615; -O0: subs w9, w8, w9 1616; -O0: subs w9, w9, #1 1617; 1618; -O1-LABEL: atomicrmw_sub_i32_aligned_seq_cst: 1619; -O1: ldaxr w8, [x0] 1620; -O1: sub w9, w8, w1 1621; -O1: stlxr w10, w9, [x0] 1622 %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 4 1623 ret i32 %r 1624} 1625 1626define dso_local i64 @atomicrmw_sub_i64_aligned_monotonic(ptr %ptr, i64 %value) { 1627; -O0-LABEL: atomicrmw_sub_i64_aligned_monotonic: 1628; -O0: subs x12, x9, x8 1629; -O0: ldaxr x8, [x11] 1630; -O0: cmp x8, x9 1631; -O0: stlxr w10, x12, [x11] 1632; -O0: subs x9, x8, x9 1633; -O0: subs w9, w9, #1 1634; 1635; -O1-LABEL: atomicrmw_sub_i64_aligned_monotonic: 1636; -O1: ldxr x0, [x8] 1637; -O1: sub x9, x0, x1 1638; -O1: stxr w10, x9, [x8] 1639 %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 8 1640 ret i64 %r 1641} 1642 1643define dso_local i64 @atomicrmw_sub_i64_aligned_acquire(ptr %ptr, i64 %value) { 1644; -O0-LABEL: atomicrmw_sub_i64_aligned_acquire: 1645; -O0: subs x12, x9, x8 1646; -O0: ldaxr x8, [x11] 1647; -O0: cmp x8, x9 1648; -O0: stlxr w10, x12, [x11] 1649; -O0: subs x9, x8, x9 1650; -O0: subs w9, w9, #1 1651; 1652; -O1-LABEL: atomicrmw_sub_i64_aligned_acquire: 1653; -O1: ldaxr x0, [x8] 1654; -O1: sub x9, x0, x1 1655; -O1: stxr w10, x9, [x8] 1656 %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 8 1657 ret i64 %r 1658} 1659 1660define dso_local i64 @atomicrmw_sub_i64_aligned_release(ptr %ptr, i64 %value) { 1661; -O0-LABEL: atomicrmw_sub_i64_aligned_release: 1662; -O0: subs x12, x9, x8 1663; -O0: ldaxr x8, [x11] 1664; -O0: cmp x8, x9 1665; -O0: stlxr w10, x12, [x11] 1666; -O0: subs x9, x8, x9 1667; -O0: subs w9, w9, #1 1668; 1669; -O1-LABEL: atomicrmw_sub_i64_aligned_release: 1670; -O1: ldxr x0, [x8] 1671; -O1: sub x9, x0, x1 1672; -O1: stlxr w10, x9, [x8] 1673 %r = atomicrmw sub ptr %ptr, i64 %value release, align 8 1674 ret i64 %r 1675} 1676 1677define dso_local i64 @atomicrmw_sub_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 1678; -O0-LABEL: atomicrmw_sub_i64_aligned_acq_rel: 1679; -O0: subs x12, x9, x8 1680; -O0: ldaxr x8, [x11] 1681; -O0: cmp x8, x9 1682; -O0: stlxr w10, x12, [x11] 1683; -O0: subs x9, x8, x9 1684; -O0: subs w9, w9, #1 1685; 1686; -O1-LABEL: atomicrmw_sub_i64_aligned_acq_rel: 1687; -O1: ldaxr x0, [x8] 1688; -O1: sub x9, x0, x1 1689; -O1: stlxr w10, x9, [x8] 1690 %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 8 1691 ret i64 %r 1692} 1693 1694define dso_local i64 @atomicrmw_sub_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 1695; -O0-LABEL: atomicrmw_sub_i64_aligned_seq_cst: 1696; -O0: subs x12, x9, x8 1697; -O0: ldaxr x8, [x11] 1698; -O0: cmp x8, x9 1699; -O0: stlxr w10, x12, [x11] 1700; -O0: subs x9, x8, x9 1701; -O0: subs w9, w9, #1 1702; 1703; -O1-LABEL: atomicrmw_sub_i64_aligned_seq_cst: 1704; -O1: ldaxr x0, [x8] 1705; -O1: sub x9, x0, x1 1706; -O1: stlxr w10, x9, [x8] 1707 %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 8 1708 ret i64 %r 1709} 1710 1711define dso_local i128 @atomicrmw_sub_i128_aligned_monotonic(ptr %ptr, i128 %value) { 1712; -O0-LABEL: atomicrmw_sub_i128_aligned_monotonic: 1713; -O0: subs x14, x11, x10 1714; -O0: ldxp x10, x12, [x9] 1715; -O0: cmp x10, x11 1716; -O0: cmp x12, x13 1717; -O0: stxp w8, x14, x15, [x9] 1718; -O0: stxp w8, x10, x12, [x9] 1719; -O0: subs x12, x12, x13 1720; -O0: ccmp x10, x11, #0, eq 1721; 1722; -O1-LABEL: atomicrmw_sub_i128_aligned_monotonic: 1723; -O1: ldxp x1, x0, [x8] 1724; -O1: subs x9, x1, x3 1725; -O1: stxp w11, x9, x10, [x8] 1726 %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 16 1727 ret i128 %r 1728} 1729 1730define dso_local i128 @atomicrmw_sub_i128_aligned_acquire(ptr %ptr, i128 %value) { 1731; -O0-LABEL: atomicrmw_sub_i128_aligned_acquire: 1732; -O0: subs x14, x11, x10 1733; -O0: ldaxp x10, x12, [x9] 1734; -O0: cmp x10, x11 1735; -O0: cmp x12, x13 1736; -O0: stxp w8, x14, x15, [x9] 1737; -O0: stxp w8, x10, x12, [x9] 1738; -O0: subs x12, x12, x13 1739; -O0: ccmp x10, x11, #0, eq 1740; 1741; -O1-LABEL: atomicrmw_sub_i128_aligned_acquire: 1742; -O1: ldaxp x1, x0, [x8] 1743; -O1: subs x9, x1, x3 1744; -O1: stxp w11, x9, x10, [x8] 1745 %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 16 1746 ret i128 %r 1747} 1748 1749define dso_local i128 @atomicrmw_sub_i128_aligned_release(ptr %ptr, i128 %value) { 1750; -O0-LABEL: atomicrmw_sub_i128_aligned_release: 1751; -O0: subs x14, x11, x10 1752; -O0: ldxp x10, x12, [x9] 1753; -O0: cmp x10, x11 1754; -O0: cmp x12, x13 1755; -O0: stlxp w8, x14, x15, [x9] 1756; -O0: stlxp w8, x10, x12, [x9] 1757; -O0: subs x12, x12, x13 1758; -O0: ccmp x10, x11, #0, eq 1759; 1760; -O1-LABEL: atomicrmw_sub_i128_aligned_release: 1761; -O1: ldxp x1, x0, [x8] 1762; -O1: subs x9, x1, x3 1763; -O1: stlxp w11, x9, x10, [x8] 1764 %r = atomicrmw sub ptr %ptr, i128 %value release, align 16 1765 ret i128 %r 1766} 1767 1768define dso_local i128 @atomicrmw_sub_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 1769; -O0-LABEL: atomicrmw_sub_i128_aligned_acq_rel: 1770; -O0: subs x14, x11, x10 1771; -O0: ldaxp x10, x12, [x9] 1772; -O0: cmp x10, x11 1773; -O0: cmp x12, x13 1774; -O0: stlxp w8, x14, x15, [x9] 1775; -O0: stlxp w8, x10, x12, [x9] 1776; -O0: subs x12, x12, x13 1777; -O0: ccmp x10, x11, #0, eq 1778; 1779; -O1-LABEL: atomicrmw_sub_i128_aligned_acq_rel: 1780; -O1: ldaxp x1, x0, [x8] 1781; -O1: subs x9, x1, x3 1782; -O1: stlxp w11, x9, x10, [x8] 1783 %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 16 1784 ret i128 %r 1785} 1786 1787define dso_local i128 @atomicrmw_sub_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 1788; -O0-LABEL: atomicrmw_sub_i128_aligned_seq_cst: 1789; -O0: subs x14, x11, x10 1790; -O0: ldaxp x10, x12, [x9] 1791; -O0: cmp x10, x11 1792; -O0: cmp x12, x13 1793; -O0: stlxp w8, x14, x15, [x9] 1794; -O0: stlxp w8, x10, x12, [x9] 1795; -O0: subs x12, x12, x13 1796; -O0: ccmp x10, x11, #0, eq 1797; 1798; -O1-LABEL: atomicrmw_sub_i128_aligned_seq_cst: 1799; -O1: ldaxp x1, x0, [x8] 1800; -O1: subs x9, x1, x3 1801; -O1: stlxp w11, x9, x10, [x8] 1802 %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 16 1803 ret i128 %r 1804} 1805 1806define dso_local i8 @atomicrmw_sub_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 1807; -O0-LABEL: atomicrmw_sub_i8_unaligned_monotonic: 1808; -O0: subs w12, w9, w8 1809; -O0: ldaxrb w8, [x11] 1810; -O0: cmp w8, w9, uxtb 1811; -O0: stlxrb w10, w12, [x11] 1812; -O0: subs w9, w8, w9, uxtb 1813; -O0: subs w9, w9, #1 1814; 1815; -O1-LABEL: atomicrmw_sub_i8_unaligned_monotonic: 1816; -O1: ldxrb w8, [x0] 1817; -O1: sub w9, w8, w1 1818; -O1: stxrb w10, w9, [x0] 1819 %r = atomicrmw sub ptr %ptr, i8 %value monotonic, align 1 1820 ret i8 %r 1821} 1822 1823define dso_local i8 @atomicrmw_sub_i8_unaligned_acquire(ptr %ptr, i8 %value) { 1824; -O0-LABEL: atomicrmw_sub_i8_unaligned_acquire: 1825; -O0: subs w12, w9, w8 1826; -O0: ldaxrb w8, [x11] 1827; -O0: cmp w8, w9, uxtb 1828; -O0: stlxrb w10, w12, [x11] 1829; -O0: subs w9, w8, w9, uxtb 1830; -O0: subs w9, w9, #1 1831; 1832; -O1-LABEL: atomicrmw_sub_i8_unaligned_acquire: 1833; -O1: ldaxrb w8, [x0] 1834; -O1: sub w9, w8, w1 1835; -O1: stxrb w10, w9, [x0] 1836 %r = atomicrmw sub ptr %ptr, i8 %value acquire, align 1 1837 ret i8 %r 1838} 1839 1840define dso_local i8 @atomicrmw_sub_i8_unaligned_release(ptr %ptr, i8 %value) { 1841; -O0-LABEL: atomicrmw_sub_i8_unaligned_release: 1842; -O0: subs w12, w9, w8 1843; -O0: ldaxrb w8, [x11] 1844; -O0: cmp w8, w9, uxtb 1845; -O0: stlxrb w10, w12, [x11] 1846; -O0: subs w9, w8, w9, uxtb 1847; -O0: subs w9, w9, #1 1848; 1849; -O1-LABEL: atomicrmw_sub_i8_unaligned_release: 1850; -O1: ldxrb w8, [x0] 1851; -O1: sub w9, w8, w1 1852; -O1: stlxrb w10, w9, [x0] 1853 %r = atomicrmw sub ptr %ptr, i8 %value release, align 1 1854 ret i8 %r 1855} 1856 1857define dso_local i8 @atomicrmw_sub_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 1858; -O0-LABEL: atomicrmw_sub_i8_unaligned_acq_rel: 1859; -O0: subs w12, w9, w8 1860; -O0: ldaxrb w8, [x11] 1861; -O0: cmp w8, w9, uxtb 1862; -O0: stlxrb w10, w12, [x11] 1863; -O0: subs w9, w8, w9, uxtb 1864; -O0: subs w9, w9, #1 1865; 1866; -O1-LABEL: atomicrmw_sub_i8_unaligned_acq_rel: 1867; -O1: ldaxrb w8, [x0] 1868; -O1: sub w9, w8, w1 1869; -O1: stlxrb w10, w9, [x0] 1870 %r = atomicrmw sub ptr %ptr, i8 %value acq_rel, align 1 1871 ret i8 %r 1872} 1873 1874define dso_local i8 @atomicrmw_sub_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 1875; -O0-LABEL: atomicrmw_sub_i8_unaligned_seq_cst: 1876; -O0: subs w12, w9, w8 1877; -O0: ldaxrb w8, [x11] 1878; -O0: cmp w8, w9, uxtb 1879; -O0: stlxrb w10, w12, [x11] 1880; -O0: subs w9, w8, w9, uxtb 1881; -O0: subs w9, w9, #1 1882; 1883; -O1-LABEL: atomicrmw_sub_i8_unaligned_seq_cst: 1884; -O1: ldaxrb w8, [x0] 1885; -O1: sub w9, w8, w1 1886; -O1: stlxrb w10, w9, [x0] 1887 %r = atomicrmw sub ptr %ptr, i8 %value seq_cst, align 1 1888 ret i8 %r 1889} 1890 1891define dso_local i16 @atomicrmw_sub_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 1892; -O0-LABEL: atomicrmw_sub_i16_unaligned_monotonic: 1893; -O0: subs w8, w9, w8 1894; -O0: bl __atomic_compare_exchange 1895; 1896; -O1-LABEL: atomicrmw_sub_i16_unaligned_monotonic: 1897; -O1: sub w8, w0, w20 1898; -O1: bl __atomic_compare_exchange 1899 %r = atomicrmw sub ptr %ptr, i16 %value monotonic, align 1 1900 ret i16 %r 1901} 1902 1903define dso_local i16 @atomicrmw_sub_i16_unaligned_acquire(ptr %ptr, i16 %value) { 1904; -O0-LABEL: atomicrmw_sub_i16_unaligned_acquire: 1905; -O0: subs w8, w9, w8 1906; -O0: bl __atomic_compare_exchange 1907; 1908; -O1-LABEL: atomicrmw_sub_i16_unaligned_acquire: 1909; -O1: sub w8, w0, w20 1910; -O1: bl __atomic_compare_exchange 1911 %r = atomicrmw sub ptr %ptr, i16 %value acquire, align 1 1912 ret i16 %r 1913} 1914 1915define dso_local i16 @atomicrmw_sub_i16_unaligned_release(ptr %ptr, i16 %value) { 1916; -O0-LABEL: atomicrmw_sub_i16_unaligned_release: 1917; -O0: subs w8, w9, w8 1918; -O0: bl __atomic_compare_exchange 1919; 1920; -O1-LABEL: atomicrmw_sub_i16_unaligned_release: 1921; -O1: sub w8, w0, w20 1922; -O1: bl __atomic_compare_exchange 1923 %r = atomicrmw sub ptr %ptr, i16 %value release, align 1 1924 ret i16 %r 1925} 1926 1927define dso_local i16 @atomicrmw_sub_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 1928; -O0-LABEL: atomicrmw_sub_i16_unaligned_acq_rel: 1929; -O0: subs w8, w9, w8 1930; -O0: bl __atomic_compare_exchange 1931; 1932; -O1-LABEL: atomicrmw_sub_i16_unaligned_acq_rel: 1933; -O1: sub w8, w0, w20 1934; -O1: bl __atomic_compare_exchange 1935 %r = atomicrmw sub ptr %ptr, i16 %value acq_rel, align 1 1936 ret i16 %r 1937} 1938 1939define dso_local i16 @atomicrmw_sub_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 1940; -O0-LABEL: atomicrmw_sub_i16_unaligned_seq_cst: 1941; -O0: subs w8, w9, w8 1942; -O0: bl __atomic_compare_exchange 1943; 1944; -O1-LABEL: atomicrmw_sub_i16_unaligned_seq_cst: 1945; -O1: sub w8, w0, w20 1946; -O1: bl __atomic_compare_exchange 1947 %r = atomicrmw sub ptr %ptr, i16 %value seq_cst, align 1 1948 ret i16 %r 1949} 1950 1951define dso_local i32 @atomicrmw_sub_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 1952; -O0-LABEL: atomicrmw_sub_i32_unaligned_monotonic: 1953; -O0: subs w8, w9, w8 1954; -O0: bl __atomic_compare_exchange 1955; 1956; -O1-LABEL: atomicrmw_sub_i32_unaligned_monotonic: 1957; -O1: sub w8, w0, w20 1958; -O1: bl __atomic_compare_exchange 1959 %r = atomicrmw sub ptr %ptr, i32 %value monotonic, align 1 1960 ret i32 %r 1961} 1962 1963define dso_local i32 @atomicrmw_sub_i32_unaligned_acquire(ptr %ptr, i32 %value) { 1964; -O0-LABEL: atomicrmw_sub_i32_unaligned_acquire: 1965; -O0: subs w8, w9, w8 1966; -O0: bl __atomic_compare_exchange 1967; 1968; -O1-LABEL: atomicrmw_sub_i32_unaligned_acquire: 1969; -O1: sub w8, w0, w20 1970; -O1: bl __atomic_compare_exchange 1971 %r = atomicrmw sub ptr %ptr, i32 %value acquire, align 1 1972 ret i32 %r 1973} 1974 1975define dso_local i32 @atomicrmw_sub_i32_unaligned_release(ptr %ptr, i32 %value) { 1976; -O0-LABEL: atomicrmw_sub_i32_unaligned_release: 1977; -O0: subs w8, w9, w8 1978; -O0: bl __atomic_compare_exchange 1979; 1980; -O1-LABEL: atomicrmw_sub_i32_unaligned_release: 1981; -O1: sub w8, w0, w20 1982; -O1: bl __atomic_compare_exchange 1983 %r = atomicrmw sub ptr %ptr, i32 %value release, align 1 1984 ret i32 %r 1985} 1986 1987define dso_local i32 @atomicrmw_sub_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 1988; -O0-LABEL: atomicrmw_sub_i32_unaligned_acq_rel: 1989; -O0: subs w8, w9, w8 1990; -O0: bl __atomic_compare_exchange 1991; 1992; -O1-LABEL: atomicrmw_sub_i32_unaligned_acq_rel: 1993; -O1: sub w8, w0, w20 1994; -O1: bl __atomic_compare_exchange 1995 %r = atomicrmw sub ptr %ptr, i32 %value acq_rel, align 1 1996 ret i32 %r 1997} 1998 1999define dso_local i32 @atomicrmw_sub_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 2000; -O0-LABEL: atomicrmw_sub_i32_unaligned_seq_cst: 2001; -O0: subs w8, w9, w8 2002; -O0: bl __atomic_compare_exchange 2003; 2004; -O1-LABEL: atomicrmw_sub_i32_unaligned_seq_cst: 2005; -O1: sub w8, w0, w20 2006; -O1: bl __atomic_compare_exchange 2007 %r = atomicrmw sub ptr %ptr, i32 %value seq_cst, align 1 2008 ret i32 %r 2009} 2010 2011define dso_local i64 @atomicrmw_sub_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 2012; -O0-LABEL: atomicrmw_sub_i64_unaligned_monotonic: 2013; -O0: subs x8, x9, x8 2014; -O0: bl __atomic_compare_exchange 2015; 2016; -O1-LABEL: atomicrmw_sub_i64_unaligned_monotonic: 2017; -O1: sub x8, x0, x20 2018; -O1: bl __atomic_compare_exchange 2019 %r = atomicrmw sub ptr %ptr, i64 %value monotonic, align 1 2020 ret i64 %r 2021} 2022 2023define dso_local i64 @atomicrmw_sub_i64_unaligned_acquire(ptr %ptr, i64 %value) { 2024; -O0-LABEL: atomicrmw_sub_i64_unaligned_acquire: 2025; -O0: subs x8, x9, x8 2026; -O0: bl __atomic_compare_exchange 2027; 2028; -O1-LABEL: atomicrmw_sub_i64_unaligned_acquire: 2029; -O1: sub x8, x0, x20 2030; -O1: bl __atomic_compare_exchange 2031 %r = atomicrmw sub ptr %ptr, i64 %value acquire, align 1 2032 ret i64 %r 2033} 2034 2035define dso_local i64 @atomicrmw_sub_i64_unaligned_release(ptr %ptr, i64 %value) { 2036; -O0-LABEL: atomicrmw_sub_i64_unaligned_release: 2037; -O0: subs x8, x9, x8 2038; -O0: bl __atomic_compare_exchange 2039; 2040; -O1-LABEL: atomicrmw_sub_i64_unaligned_release: 2041; -O1: sub x8, x0, x20 2042; -O1: bl __atomic_compare_exchange 2043 %r = atomicrmw sub ptr %ptr, i64 %value release, align 1 2044 ret i64 %r 2045} 2046 2047define dso_local i64 @atomicrmw_sub_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 2048; -O0-LABEL: atomicrmw_sub_i64_unaligned_acq_rel: 2049; -O0: subs x8, x9, x8 2050; -O0: bl __atomic_compare_exchange 2051; 2052; -O1-LABEL: atomicrmw_sub_i64_unaligned_acq_rel: 2053; -O1: sub x8, x0, x20 2054; -O1: bl __atomic_compare_exchange 2055 %r = atomicrmw sub ptr %ptr, i64 %value acq_rel, align 1 2056 ret i64 %r 2057} 2058 2059define dso_local i64 @atomicrmw_sub_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 2060; -O0-LABEL: atomicrmw_sub_i64_unaligned_seq_cst: 2061; -O0: subs x8, x9, x8 2062; -O0: bl __atomic_compare_exchange 2063; 2064; -O1-LABEL: atomicrmw_sub_i64_unaligned_seq_cst: 2065; -O1: sub x8, x0, x20 2066; -O1: bl __atomic_compare_exchange 2067 %r = atomicrmw sub ptr %ptr, i64 %value seq_cst, align 1 2068 ret i64 %r 2069} 2070 2071define dso_local i128 @atomicrmw_sub_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 2072; -O0-LABEL: atomicrmw_sub_i128_unaligned_monotonic: 2073; -O0: subs x9, x10, x9 2074; -O0: bl __atomic_compare_exchange 2075; 2076; -O1-LABEL: atomicrmw_sub_i128_unaligned_monotonic: 2077; -O1: ldp x0, x1, [x0] 2078; -O1: subs x8, x1, x19 2079; -O1: bl __atomic_compare_exchange 2080 %r = atomicrmw sub ptr %ptr, i128 %value monotonic, align 1 2081 ret i128 %r 2082} 2083 2084define dso_local i128 @atomicrmw_sub_i128_unaligned_acquire(ptr %ptr, i128 %value) { 2085; -O0-LABEL: atomicrmw_sub_i128_unaligned_acquire: 2086; -O0: subs x9, x10, x9 2087; -O0: bl __atomic_compare_exchange 2088; 2089; -O1-LABEL: atomicrmw_sub_i128_unaligned_acquire: 2090; -O1: ldp x0, x1, [x0] 2091; -O1: subs x8, x1, x19 2092; -O1: bl __atomic_compare_exchange 2093 %r = atomicrmw sub ptr %ptr, i128 %value acquire, align 1 2094 ret i128 %r 2095} 2096 2097define dso_local i128 @atomicrmw_sub_i128_unaligned_release(ptr %ptr, i128 %value) { 2098; -O0-LABEL: atomicrmw_sub_i128_unaligned_release: 2099; -O0: subs x9, x10, x9 2100; -O0: bl __atomic_compare_exchange 2101; 2102; -O1-LABEL: atomicrmw_sub_i128_unaligned_release: 2103; -O1: ldp x0, x1, [x0] 2104; -O1: subs x8, x1, x19 2105; -O1: bl __atomic_compare_exchange 2106 %r = atomicrmw sub ptr %ptr, i128 %value release, align 1 2107 ret i128 %r 2108} 2109 2110define dso_local i128 @atomicrmw_sub_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 2111; -O0-LABEL: atomicrmw_sub_i128_unaligned_acq_rel: 2112; -O0: subs x9, x10, x9 2113; -O0: bl __atomic_compare_exchange 2114; 2115; -O1-LABEL: atomicrmw_sub_i128_unaligned_acq_rel: 2116; -O1: ldp x0, x1, [x0] 2117; -O1: subs x8, x1, x19 2118; -O1: bl __atomic_compare_exchange 2119 %r = atomicrmw sub ptr %ptr, i128 %value acq_rel, align 1 2120 ret i128 %r 2121} 2122 2123define dso_local i128 @atomicrmw_sub_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 2124; -O0-LABEL: atomicrmw_sub_i128_unaligned_seq_cst: 2125; -O0: subs x9, x10, x9 2126; -O0: bl __atomic_compare_exchange 2127; 2128; -O1-LABEL: atomicrmw_sub_i128_unaligned_seq_cst: 2129; -O1: ldp x0, x1, [x0] 2130; -O1: subs x8, x1, x19 2131; -O1: bl __atomic_compare_exchange 2132 %r = atomicrmw sub ptr %ptr, i128 %value seq_cst, align 1 2133 ret i128 %r 2134} 2135 2136define dso_local i8 @atomicrmw_and_i8_aligned_monotonic(ptr %ptr, i8 %value) { 2137; -O0-LABEL: atomicrmw_and_i8_aligned_monotonic: 2138; -O0: and w12, w9, w8 2139; -O0: ldaxrb w8, [x11] 2140; -O0: cmp w8, w9, uxtb 2141; -O0: stlxrb w10, w12, [x11] 2142; -O0: subs w9, w8, w9, uxtb 2143; -O0: subs w9, w9, #1 2144; 2145; -O1-LABEL: atomicrmw_and_i8_aligned_monotonic: 2146; -O1: ldxrb w8, [x0] 2147; -O1: and w9, w8, w1 2148; -O1: stxrb w10, w9, [x0] 2149 %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 1 2150 ret i8 %r 2151} 2152 2153define dso_local i8 @atomicrmw_and_i8_aligned_acquire(ptr %ptr, i8 %value) { 2154; -O0-LABEL: atomicrmw_and_i8_aligned_acquire: 2155; -O0: and w12, w9, w8 2156; -O0: ldaxrb w8, [x11] 2157; -O0: cmp w8, w9, uxtb 2158; -O0: stlxrb w10, w12, [x11] 2159; -O0: subs w9, w8, w9, uxtb 2160; -O0: subs w9, w9, #1 2161; 2162; -O1-LABEL: atomicrmw_and_i8_aligned_acquire: 2163; -O1: ldaxrb w8, [x0] 2164; -O1: and w9, w8, w1 2165; -O1: stxrb w10, w9, [x0] 2166 %r = atomicrmw and ptr %ptr, i8 %value acquire, align 1 2167 ret i8 %r 2168} 2169 2170define dso_local i8 @atomicrmw_and_i8_aligned_release(ptr %ptr, i8 %value) { 2171; -O0-LABEL: atomicrmw_and_i8_aligned_release: 2172; -O0: and w12, w9, w8 2173; -O0: ldaxrb w8, [x11] 2174; -O0: cmp w8, w9, uxtb 2175; -O0: stlxrb w10, w12, [x11] 2176; -O0: subs w9, w8, w9, uxtb 2177; -O0: subs w9, w9, #1 2178; 2179; -O1-LABEL: atomicrmw_and_i8_aligned_release: 2180; -O1: ldxrb w8, [x0] 2181; -O1: and w9, w8, w1 2182; -O1: stlxrb w10, w9, [x0] 2183 %r = atomicrmw and ptr %ptr, i8 %value release, align 1 2184 ret i8 %r 2185} 2186 2187define dso_local i8 @atomicrmw_and_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 2188; -O0-LABEL: atomicrmw_and_i8_aligned_acq_rel: 2189; -O0: and w12, w9, w8 2190; -O0: ldaxrb w8, [x11] 2191; -O0: cmp w8, w9, uxtb 2192; -O0: stlxrb w10, w12, [x11] 2193; -O0: subs w9, w8, w9, uxtb 2194; -O0: subs w9, w9, #1 2195; 2196; -O1-LABEL: atomicrmw_and_i8_aligned_acq_rel: 2197; -O1: ldaxrb w8, [x0] 2198; -O1: and w9, w8, w1 2199; -O1: stlxrb w10, w9, [x0] 2200 %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 1 2201 ret i8 %r 2202} 2203 2204define dso_local i8 @atomicrmw_and_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 2205; -O0-LABEL: atomicrmw_and_i8_aligned_seq_cst: 2206; -O0: and w12, w9, w8 2207; -O0: ldaxrb w8, [x11] 2208; -O0: cmp w8, w9, uxtb 2209; -O0: stlxrb w10, w12, [x11] 2210; -O0: subs w9, w8, w9, uxtb 2211; -O0: subs w9, w9, #1 2212; 2213; -O1-LABEL: atomicrmw_and_i8_aligned_seq_cst: 2214; -O1: ldaxrb w8, [x0] 2215; -O1: and w9, w8, w1 2216; -O1: stlxrb w10, w9, [x0] 2217 %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 1 2218 ret i8 %r 2219} 2220 2221define dso_local i16 @atomicrmw_and_i16_aligned_monotonic(ptr %ptr, i16 %value) { 2222; -O0-LABEL: atomicrmw_and_i16_aligned_monotonic: 2223; -O0: and w12, w9, w8 2224; -O0: ldaxrh w8, [x11] 2225; -O0: cmp w8, w9, uxth 2226; -O0: stlxrh w10, w12, [x11] 2227; -O0: subs w9, w8, w9, uxth 2228; -O0: subs w9, w9, #1 2229; 2230; -O1-LABEL: atomicrmw_and_i16_aligned_monotonic: 2231; -O1: ldxrh w8, [x0] 2232; -O1: and w9, w8, w1 2233; -O1: stxrh w10, w9, [x0] 2234 %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 2 2235 ret i16 %r 2236} 2237 2238define dso_local i16 @atomicrmw_and_i16_aligned_acquire(ptr %ptr, i16 %value) { 2239; -O0-LABEL: atomicrmw_and_i16_aligned_acquire: 2240; -O0: and w12, w9, w8 2241; -O0: ldaxrh w8, [x11] 2242; -O0: cmp w8, w9, uxth 2243; -O0: stlxrh w10, w12, [x11] 2244; -O0: subs w9, w8, w9, uxth 2245; -O0: subs w9, w9, #1 2246; 2247; -O1-LABEL: atomicrmw_and_i16_aligned_acquire: 2248; -O1: ldaxrh w8, [x0] 2249; -O1: and w9, w8, w1 2250; -O1: stxrh w10, w9, [x0] 2251 %r = atomicrmw and ptr %ptr, i16 %value acquire, align 2 2252 ret i16 %r 2253} 2254 2255define dso_local i16 @atomicrmw_and_i16_aligned_release(ptr %ptr, i16 %value) { 2256; -O0-LABEL: atomicrmw_and_i16_aligned_release: 2257; -O0: and w12, w9, w8 2258; -O0: ldaxrh w8, [x11] 2259; -O0: cmp w8, w9, uxth 2260; -O0: stlxrh w10, w12, [x11] 2261; -O0: subs w9, w8, w9, uxth 2262; -O0: subs w9, w9, #1 2263; 2264; -O1-LABEL: atomicrmw_and_i16_aligned_release: 2265; -O1: ldxrh w8, [x0] 2266; -O1: and w9, w8, w1 2267; -O1: stlxrh w10, w9, [x0] 2268 %r = atomicrmw and ptr %ptr, i16 %value release, align 2 2269 ret i16 %r 2270} 2271 2272define dso_local i16 @atomicrmw_and_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 2273; -O0-LABEL: atomicrmw_and_i16_aligned_acq_rel: 2274; -O0: and w12, w9, w8 2275; -O0: ldaxrh w8, [x11] 2276; -O0: cmp w8, w9, uxth 2277; -O0: stlxrh w10, w12, [x11] 2278; -O0: subs w9, w8, w9, uxth 2279; -O0: subs w9, w9, #1 2280; 2281; -O1-LABEL: atomicrmw_and_i16_aligned_acq_rel: 2282; -O1: ldaxrh w8, [x0] 2283; -O1: and w9, w8, w1 2284; -O1: stlxrh w10, w9, [x0] 2285 %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 2 2286 ret i16 %r 2287} 2288 2289define dso_local i16 @atomicrmw_and_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 2290; -O0-LABEL: atomicrmw_and_i16_aligned_seq_cst: 2291; -O0: and w12, w9, w8 2292; -O0: ldaxrh w8, [x11] 2293; -O0: cmp w8, w9, uxth 2294; -O0: stlxrh w10, w12, [x11] 2295; -O0: subs w9, w8, w9, uxth 2296; -O0: subs w9, w9, #1 2297; 2298; -O1-LABEL: atomicrmw_and_i16_aligned_seq_cst: 2299; -O1: ldaxrh w8, [x0] 2300; -O1: and w9, w8, w1 2301; -O1: stlxrh w10, w9, [x0] 2302 %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 2 2303 ret i16 %r 2304} 2305 2306define dso_local i32 @atomicrmw_and_i32_aligned_monotonic(ptr %ptr, i32 %value) { 2307; -O0-LABEL: atomicrmw_and_i32_aligned_monotonic: 2308; -O0: and w12, w9, w8 2309; -O0: ldaxr w8, [x11] 2310; -O0: cmp w8, w9 2311; -O0: stlxr w10, w12, [x11] 2312; -O0: subs w9, w8, w9 2313; -O0: subs w9, w9, #1 2314; 2315; -O1-LABEL: atomicrmw_and_i32_aligned_monotonic: 2316; -O1: ldxr w8, [x0] 2317; -O1: and w9, w8, w1 2318; -O1: stxr w10, w9, [x0] 2319 %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 4 2320 ret i32 %r 2321} 2322 2323define dso_local i32 @atomicrmw_and_i32_aligned_acquire(ptr %ptr, i32 %value) { 2324; -O0-LABEL: atomicrmw_and_i32_aligned_acquire: 2325; -O0: and w12, w9, w8 2326; -O0: ldaxr w8, [x11] 2327; -O0: cmp w8, w9 2328; -O0: stlxr w10, w12, [x11] 2329; -O0: subs w9, w8, w9 2330; -O0: subs w9, w9, #1 2331; 2332; -O1-LABEL: atomicrmw_and_i32_aligned_acquire: 2333; -O1: ldaxr w8, [x0] 2334; -O1: and w9, w8, w1 2335; -O1: stxr w10, w9, [x0] 2336 %r = atomicrmw and ptr %ptr, i32 %value acquire, align 4 2337 ret i32 %r 2338} 2339 2340define dso_local i32 @atomicrmw_and_i32_aligned_release(ptr %ptr, i32 %value) { 2341; -O0-LABEL: atomicrmw_and_i32_aligned_release: 2342; -O0: and w12, w9, w8 2343; -O0: ldaxr w8, [x11] 2344; -O0: cmp w8, w9 2345; -O0: stlxr w10, w12, [x11] 2346; -O0: subs w9, w8, w9 2347; -O0: subs w9, w9, #1 2348; 2349; -O1-LABEL: atomicrmw_and_i32_aligned_release: 2350; -O1: ldxr w8, [x0] 2351; -O1: and w9, w8, w1 2352; -O1: stlxr w10, w9, [x0] 2353 %r = atomicrmw and ptr %ptr, i32 %value release, align 4 2354 ret i32 %r 2355} 2356 2357define dso_local i32 @atomicrmw_and_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 2358; -O0-LABEL: atomicrmw_and_i32_aligned_acq_rel: 2359; -O0: and w12, w9, w8 2360; -O0: ldaxr w8, [x11] 2361; -O0: cmp w8, w9 2362; -O0: stlxr w10, w12, [x11] 2363; -O0: subs w9, w8, w9 2364; -O0: subs w9, w9, #1 2365; 2366; -O1-LABEL: atomicrmw_and_i32_aligned_acq_rel: 2367; -O1: ldaxr w8, [x0] 2368; -O1: and w9, w8, w1 2369; -O1: stlxr w10, w9, [x0] 2370 %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 4 2371 ret i32 %r 2372} 2373 2374define dso_local i32 @atomicrmw_and_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 2375; -O0-LABEL: atomicrmw_and_i32_aligned_seq_cst: 2376; -O0: and w12, w9, w8 2377; -O0: ldaxr w8, [x11] 2378; -O0: cmp w8, w9 2379; -O0: stlxr w10, w12, [x11] 2380; -O0: subs w9, w8, w9 2381; -O0: subs w9, w9, #1 2382; 2383; -O1-LABEL: atomicrmw_and_i32_aligned_seq_cst: 2384; -O1: ldaxr w8, [x0] 2385; -O1: and w9, w8, w1 2386; -O1: stlxr w10, w9, [x0] 2387 %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 4 2388 ret i32 %r 2389} 2390 2391define dso_local i64 @atomicrmw_and_i64_aligned_monotonic(ptr %ptr, i64 %value) { 2392; -O0-LABEL: atomicrmw_and_i64_aligned_monotonic: 2393; -O0: and x12, x9, x8 2394; -O0: ldaxr x8, [x11] 2395; -O0: cmp x8, x9 2396; -O0: stlxr w10, x12, [x11] 2397; -O0: subs x9, x8, x9 2398; -O0: subs w9, w9, #1 2399; 2400; -O1-LABEL: atomicrmw_and_i64_aligned_monotonic: 2401; -O1: ldxr x0, [x8] 2402; -O1: and x9, x0, x1 2403; -O1: stxr w10, x9, [x8] 2404 %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 8 2405 ret i64 %r 2406} 2407 2408define dso_local i64 @atomicrmw_and_i64_aligned_acquire(ptr %ptr, i64 %value) { 2409; -O0-LABEL: atomicrmw_and_i64_aligned_acquire: 2410; -O0: and x12, x9, x8 2411; -O0: ldaxr x8, [x11] 2412; -O0: cmp x8, x9 2413; -O0: stlxr w10, x12, [x11] 2414; -O0: subs x9, x8, x9 2415; -O0: subs w9, w9, #1 2416; 2417; -O1-LABEL: atomicrmw_and_i64_aligned_acquire: 2418; -O1: ldaxr x0, [x8] 2419; -O1: and x9, x0, x1 2420; -O1: stxr w10, x9, [x8] 2421 %r = atomicrmw and ptr %ptr, i64 %value acquire, align 8 2422 ret i64 %r 2423} 2424 2425define dso_local i64 @atomicrmw_and_i64_aligned_release(ptr %ptr, i64 %value) { 2426; -O0-LABEL: atomicrmw_and_i64_aligned_release: 2427; -O0: and x12, x9, x8 2428; -O0: ldaxr x8, [x11] 2429; -O0: cmp x8, x9 2430; -O0: stlxr w10, x12, [x11] 2431; -O0: subs x9, x8, x9 2432; -O0: subs w9, w9, #1 2433; 2434; -O1-LABEL: atomicrmw_and_i64_aligned_release: 2435; -O1: ldxr x0, [x8] 2436; -O1: and x9, x0, x1 2437; -O1: stlxr w10, x9, [x8] 2438 %r = atomicrmw and ptr %ptr, i64 %value release, align 8 2439 ret i64 %r 2440} 2441 2442define dso_local i64 @atomicrmw_and_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 2443; -O0-LABEL: atomicrmw_and_i64_aligned_acq_rel: 2444; -O0: and x12, x9, x8 2445; -O0: ldaxr x8, [x11] 2446; -O0: cmp x8, x9 2447; -O0: stlxr w10, x12, [x11] 2448; -O0: subs x9, x8, x9 2449; -O0: subs w9, w9, #1 2450; 2451; -O1-LABEL: atomicrmw_and_i64_aligned_acq_rel: 2452; -O1: ldaxr x0, [x8] 2453; -O1: and x9, x0, x1 2454; -O1: stlxr w10, x9, [x8] 2455 %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 8 2456 ret i64 %r 2457} 2458 2459define dso_local i64 @atomicrmw_and_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 2460; -O0-LABEL: atomicrmw_and_i64_aligned_seq_cst: 2461; -O0: and x12, x9, x8 2462; -O0: ldaxr x8, [x11] 2463; -O0: cmp x8, x9 2464; -O0: stlxr w10, x12, [x11] 2465; -O0: subs x9, x8, x9 2466; -O0: subs w9, w9, #1 2467; 2468; -O1-LABEL: atomicrmw_and_i64_aligned_seq_cst: 2469; -O1: ldaxr x0, [x8] 2470; -O1: and x9, x0, x1 2471; -O1: stlxr w10, x9, [x8] 2472 %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 8 2473 ret i64 %r 2474} 2475 2476define dso_local i128 @atomicrmw_and_i128_aligned_monotonic(ptr %ptr, i128 %value) { 2477; -O0-LABEL: atomicrmw_and_i128_aligned_monotonic: 2478; -O0: and x15, x13, x10 2479; -O0: and x14, x11, x8 2480; -O0: ldxp x10, x12, [x9] 2481; -O0: cmp x10, x11 2482; -O0: cmp x12, x13 2483; -O0: stxp w8, x14, x15, [x9] 2484; -O0: stxp w8, x10, x12, [x9] 2485; -O0: subs x12, x12, x13 2486; -O0: ccmp x10, x11, #0, eq 2487; 2488; -O1-LABEL: atomicrmw_and_i128_aligned_monotonic: 2489; -O1: ldxp x1, x0, [x8] 2490; -O1: and x9, x0, x2 2491; -O1: and x10, x1, x3 2492; -O1: stxp w11, x10, x9, [x8] 2493 %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 16 2494 ret i128 %r 2495} 2496 2497define dso_local i128 @atomicrmw_and_i128_aligned_acquire(ptr %ptr, i128 %value) { 2498; -O0-LABEL: atomicrmw_and_i128_aligned_acquire: 2499; -O0: and x15, x13, x10 2500; -O0: and x14, x11, x8 2501; -O0: ldaxp x10, x12, [x9] 2502; -O0: cmp x10, x11 2503; -O0: cmp x12, x13 2504; -O0: stxp w8, x14, x15, [x9] 2505; -O0: stxp w8, x10, x12, [x9] 2506; -O0: subs x12, x12, x13 2507; -O0: ccmp x10, x11, #0, eq 2508; 2509; -O1-LABEL: atomicrmw_and_i128_aligned_acquire: 2510; -O1: ldaxp x1, x0, [x8] 2511; -O1: and x9, x0, x2 2512; -O1: and x10, x1, x3 2513; -O1: stxp w11, x10, x9, [x8] 2514 %r = atomicrmw and ptr %ptr, i128 %value acquire, align 16 2515 ret i128 %r 2516} 2517 2518define dso_local i128 @atomicrmw_and_i128_aligned_release(ptr %ptr, i128 %value) { 2519; -O0-LABEL: atomicrmw_and_i128_aligned_release: 2520; -O0: and x15, x13, x10 2521; -O0: and x14, x11, x8 2522; -O0: ldxp x10, x12, [x9] 2523; -O0: cmp x10, x11 2524; -O0: cmp x12, x13 2525; -O0: stlxp w8, x14, x15, [x9] 2526; -O0: stlxp w8, x10, x12, [x9] 2527; -O0: subs x12, x12, x13 2528; -O0: ccmp x10, x11, #0, eq 2529; 2530; -O1-LABEL: atomicrmw_and_i128_aligned_release: 2531; -O1: ldxp x1, x0, [x8] 2532; -O1: and x9, x0, x2 2533; -O1: and x10, x1, x3 2534; -O1: stlxp w11, x10, x9, [x8] 2535 %r = atomicrmw and ptr %ptr, i128 %value release, align 16 2536 ret i128 %r 2537} 2538 2539define dso_local i128 @atomicrmw_and_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 2540; -O0-LABEL: atomicrmw_and_i128_aligned_acq_rel: 2541; -O0: and x15, x13, x10 2542; -O0: and x14, x11, x8 2543; -O0: ldaxp x10, x12, [x9] 2544; -O0: cmp x10, x11 2545; -O0: cmp x12, x13 2546; -O0: stlxp w8, x14, x15, [x9] 2547; -O0: stlxp w8, x10, x12, [x9] 2548; -O0: subs x12, x12, x13 2549; -O0: ccmp x10, x11, #0, eq 2550; 2551; -O1-LABEL: atomicrmw_and_i128_aligned_acq_rel: 2552; -O1: ldaxp x1, x0, [x8] 2553; -O1: and x9, x0, x2 2554; -O1: and x10, x1, x3 2555; -O1: stlxp w11, x10, x9, [x8] 2556 %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 16 2557 ret i128 %r 2558} 2559 2560define dso_local i128 @atomicrmw_and_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 2561; -O0-LABEL: atomicrmw_and_i128_aligned_seq_cst: 2562; -O0: and x15, x13, x10 2563; -O0: and x14, x11, x8 2564; -O0: ldaxp x10, x12, [x9] 2565; -O0: cmp x10, x11 2566; -O0: cmp x12, x13 2567; -O0: stlxp w8, x14, x15, [x9] 2568; -O0: stlxp w8, x10, x12, [x9] 2569; -O0: subs x12, x12, x13 2570; -O0: ccmp x10, x11, #0, eq 2571; 2572; -O1-LABEL: atomicrmw_and_i128_aligned_seq_cst: 2573; -O1: ldaxp x1, x0, [x8] 2574; -O1: and x9, x0, x2 2575; -O1: and x10, x1, x3 2576; -O1: stlxp w11, x10, x9, [x8] 2577 %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 16 2578 ret i128 %r 2579} 2580 2581define dso_local i8 @atomicrmw_and_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 2582; -O0-LABEL: atomicrmw_and_i8_unaligned_monotonic: 2583; -O0: and w12, w9, w8 2584; -O0: ldaxrb w8, [x11] 2585; -O0: cmp w8, w9, uxtb 2586; -O0: stlxrb w10, w12, [x11] 2587; -O0: subs w9, w8, w9, uxtb 2588; -O0: subs w9, w9, #1 2589; 2590; -O1-LABEL: atomicrmw_and_i8_unaligned_monotonic: 2591; -O1: ldxrb w8, [x0] 2592; -O1: and w9, w8, w1 2593; -O1: stxrb w10, w9, [x0] 2594 %r = atomicrmw and ptr %ptr, i8 %value monotonic, align 1 2595 ret i8 %r 2596} 2597 2598define dso_local i8 @atomicrmw_and_i8_unaligned_acquire(ptr %ptr, i8 %value) { 2599; -O0-LABEL: atomicrmw_and_i8_unaligned_acquire: 2600; -O0: and w12, w9, w8 2601; -O0: ldaxrb w8, [x11] 2602; -O0: cmp w8, w9, uxtb 2603; -O0: stlxrb w10, w12, [x11] 2604; -O0: subs w9, w8, w9, uxtb 2605; -O0: subs w9, w9, #1 2606; 2607; -O1-LABEL: atomicrmw_and_i8_unaligned_acquire: 2608; -O1: ldaxrb w8, [x0] 2609; -O1: and w9, w8, w1 2610; -O1: stxrb w10, w9, [x0] 2611 %r = atomicrmw and ptr %ptr, i8 %value acquire, align 1 2612 ret i8 %r 2613} 2614 2615define dso_local i8 @atomicrmw_and_i8_unaligned_release(ptr %ptr, i8 %value) { 2616; -O0-LABEL: atomicrmw_and_i8_unaligned_release: 2617; -O0: and w12, w9, w8 2618; -O0: ldaxrb w8, [x11] 2619; -O0: cmp w8, w9, uxtb 2620; -O0: stlxrb w10, w12, [x11] 2621; -O0: subs w9, w8, w9, uxtb 2622; -O0: subs w9, w9, #1 2623; 2624; -O1-LABEL: atomicrmw_and_i8_unaligned_release: 2625; -O1: ldxrb w8, [x0] 2626; -O1: and w9, w8, w1 2627; -O1: stlxrb w10, w9, [x0] 2628 %r = atomicrmw and ptr %ptr, i8 %value release, align 1 2629 ret i8 %r 2630} 2631 2632define dso_local i8 @atomicrmw_and_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 2633; -O0-LABEL: atomicrmw_and_i8_unaligned_acq_rel: 2634; -O0: and w12, w9, w8 2635; -O0: ldaxrb w8, [x11] 2636; -O0: cmp w8, w9, uxtb 2637; -O0: stlxrb w10, w12, [x11] 2638; -O0: subs w9, w8, w9, uxtb 2639; -O0: subs w9, w9, #1 2640; 2641; -O1-LABEL: atomicrmw_and_i8_unaligned_acq_rel: 2642; -O1: ldaxrb w8, [x0] 2643; -O1: and w9, w8, w1 2644; -O1: stlxrb w10, w9, [x0] 2645 %r = atomicrmw and ptr %ptr, i8 %value acq_rel, align 1 2646 ret i8 %r 2647} 2648 2649define dso_local i8 @atomicrmw_and_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 2650; -O0-LABEL: atomicrmw_and_i8_unaligned_seq_cst: 2651; -O0: and w12, w9, w8 2652; -O0: ldaxrb w8, [x11] 2653; -O0: cmp w8, w9, uxtb 2654; -O0: stlxrb w10, w12, [x11] 2655; -O0: subs w9, w8, w9, uxtb 2656; -O0: subs w9, w9, #1 2657; 2658; -O1-LABEL: atomicrmw_and_i8_unaligned_seq_cst: 2659; -O1: ldaxrb w8, [x0] 2660; -O1: and w9, w8, w1 2661; -O1: stlxrb w10, w9, [x0] 2662 %r = atomicrmw and ptr %ptr, i8 %value seq_cst, align 1 2663 ret i8 %r 2664} 2665 2666define dso_local i16 @atomicrmw_and_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 2667; -O0-LABEL: atomicrmw_and_i16_unaligned_monotonic: 2668; -O0: and w8, w9, w8 2669; -O0: bl __atomic_compare_exchange 2670; 2671; -O1-LABEL: atomicrmw_and_i16_unaligned_monotonic: 2672; -O1: and w8, w0, w20 2673; -O1: bl __atomic_compare_exchange 2674 %r = atomicrmw and ptr %ptr, i16 %value monotonic, align 1 2675 ret i16 %r 2676} 2677 2678define dso_local i16 @atomicrmw_and_i16_unaligned_acquire(ptr %ptr, i16 %value) { 2679; -O0-LABEL: atomicrmw_and_i16_unaligned_acquire: 2680; -O0: and w8, w9, w8 2681; -O0: bl __atomic_compare_exchange 2682; 2683; -O1-LABEL: atomicrmw_and_i16_unaligned_acquire: 2684; -O1: and w8, w0, w20 2685; -O1: bl __atomic_compare_exchange 2686 %r = atomicrmw and ptr %ptr, i16 %value acquire, align 1 2687 ret i16 %r 2688} 2689 2690define dso_local i16 @atomicrmw_and_i16_unaligned_release(ptr %ptr, i16 %value) { 2691; -O0-LABEL: atomicrmw_and_i16_unaligned_release: 2692; -O0: and w8, w9, w8 2693; -O0: bl __atomic_compare_exchange 2694; 2695; -O1-LABEL: atomicrmw_and_i16_unaligned_release: 2696; -O1: and w8, w0, w20 2697; -O1: bl __atomic_compare_exchange 2698 %r = atomicrmw and ptr %ptr, i16 %value release, align 1 2699 ret i16 %r 2700} 2701 2702define dso_local i16 @atomicrmw_and_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 2703; -O0-LABEL: atomicrmw_and_i16_unaligned_acq_rel: 2704; -O0: and w8, w9, w8 2705; -O0: bl __atomic_compare_exchange 2706; 2707; -O1-LABEL: atomicrmw_and_i16_unaligned_acq_rel: 2708; -O1: and w8, w0, w20 2709; -O1: bl __atomic_compare_exchange 2710 %r = atomicrmw and ptr %ptr, i16 %value acq_rel, align 1 2711 ret i16 %r 2712} 2713 2714define dso_local i16 @atomicrmw_and_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 2715; -O0-LABEL: atomicrmw_and_i16_unaligned_seq_cst: 2716; -O0: and w8, w9, w8 2717; -O0: bl __atomic_compare_exchange 2718; 2719; -O1-LABEL: atomicrmw_and_i16_unaligned_seq_cst: 2720; -O1: and w8, w0, w20 2721; -O1: bl __atomic_compare_exchange 2722 %r = atomicrmw and ptr %ptr, i16 %value seq_cst, align 1 2723 ret i16 %r 2724} 2725 2726define dso_local i32 @atomicrmw_and_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 2727; -O0-LABEL: atomicrmw_and_i32_unaligned_monotonic: 2728; -O0: and w8, w9, w8 2729; -O0: bl __atomic_compare_exchange 2730; 2731; -O1-LABEL: atomicrmw_and_i32_unaligned_monotonic: 2732; -O1: and w8, w0, w20 2733; -O1: bl __atomic_compare_exchange 2734 %r = atomicrmw and ptr %ptr, i32 %value monotonic, align 1 2735 ret i32 %r 2736} 2737 2738define dso_local i32 @atomicrmw_and_i32_unaligned_acquire(ptr %ptr, i32 %value) { 2739; -O0-LABEL: atomicrmw_and_i32_unaligned_acquire: 2740; -O0: and w8, w9, w8 2741; -O0: bl __atomic_compare_exchange 2742; 2743; -O1-LABEL: atomicrmw_and_i32_unaligned_acquire: 2744; -O1: and w8, w0, w20 2745; -O1: bl __atomic_compare_exchange 2746 %r = atomicrmw and ptr %ptr, i32 %value acquire, align 1 2747 ret i32 %r 2748} 2749 2750define dso_local i32 @atomicrmw_and_i32_unaligned_release(ptr %ptr, i32 %value) { 2751; -O0-LABEL: atomicrmw_and_i32_unaligned_release: 2752; -O0: and w8, w9, w8 2753; -O0: bl __atomic_compare_exchange 2754; 2755; -O1-LABEL: atomicrmw_and_i32_unaligned_release: 2756; -O1: and w8, w0, w20 2757; -O1: bl __atomic_compare_exchange 2758 %r = atomicrmw and ptr %ptr, i32 %value release, align 1 2759 ret i32 %r 2760} 2761 2762define dso_local i32 @atomicrmw_and_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 2763; -O0-LABEL: atomicrmw_and_i32_unaligned_acq_rel: 2764; -O0: and w8, w9, w8 2765; -O0: bl __atomic_compare_exchange 2766; 2767; -O1-LABEL: atomicrmw_and_i32_unaligned_acq_rel: 2768; -O1: and w8, w0, w20 2769; -O1: bl __atomic_compare_exchange 2770 %r = atomicrmw and ptr %ptr, i32 %value acq_rel, align 1 2771 ret i32 %r 2772} 2773 2774define dso_local i32 @atomicrmw_and_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 2775; -O0-LABEL: atomicrmw_and_i32_unaligned_seq_cst: 2776; -O0: and w8, w9, w8 2777; -O0: bl __atomic_compare_exchange 2778; 2779; -O1-LABEL: atomicrmw_and_i32_unaligned_seq_cst: 2780; -O1: and w8, w0, w20 2781; -O1: bl __atomic_compare_exchange 2782 %r = atomicrmw and ptr %ptr, i32 %value seq_cst, align 1 2783 ret i32 %r 2784} 2785 2786define dso_local i64 @atomicrmw_and_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 2787; -O0-LABEL: atomicrmw_and_i64_unaligned_monotonic: 2788; -O0: and x8, x9, x8 2789; -O0: bl __atomic_compare_exchange 2790; 2791; -O1-LABEL: atomicrmw_and_i64_unaligned_monotonic: 2792; -O1: and x8, x0, x20 2793; -O1: bl __atomic_compare_exchange 2794 %r = atomicrmw and ptr %ptr, i64 %value monotonic, align 1 2795 ret i64 %r 2796} 2797 2798define dso_local i64 @atomicrmw_and_i64_unaligned_acquire(ptr %ptr, i64 %value) { 2799; -O0-LABEL: atomicrmw_and_i64_unaligned_acquire: 2800; -O0: and x8, x9, x8 2801; -O0: bl __atomic_compare_exchange 2802; 2803; -O1-LABEL: atomicrmw_and_i64_unaligned_acquire: 2804; -O1: and x8, x0, x20 2805; -O1: bl __atomic_compare_exchange 2806 %r = atomicrmw and ptr %ptr, i64 %value acquire, align 1 2807 ret i64 %r 2808} 2809 2810define dso_local i64 @atomicrmw_and_i64_unaligned_release(ptr %ptr, i64 %value) { 2811; -O0-LABEL: atomicrmw_and_i64_unaligned_release: 2812; -O0: and x8, x9, x8 2813; -O0: bl __atomic_compare_exchange 2814; 2815; -O1-LABEL: atomicrmw_and_i64_unaligned_release: 2816; -O1: and x8, x0, x20 2817; -O1: bl __atomic_compare_exchange 2818 %r = atomicrmw and ptr %ptr, i64 %value release, align 1 2819 ret i64 %r 2820} 2821 2822define dso_local i64 @atomicrmw_and_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 2823; -O0-LABEL: atomicrmw_and_i64_unaligned_acq_rel: 2824; -O0: and x8, x9, x8 2825; -O0: bl __atomic_compare_exchange 2826; 2827; -O1-LABEL: atomicrmw_and_i64_unaligned_acq_rel: 2828; -O1: and x8, x0, x20 2829; -O1: bl __atomic_compare_exchange 2830 %r = atomicrmw and ptr %ptr, i64 %value acq_rel, align 1 2831 ret i64 %r 2832} 2833 2834define dso_local i64 @atomicrmw_and_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 2835; -O0-LABEL: atomicrmw_and_i64_unaligned_seq_cst: 2836; -O0: and x8, x9, x8 2837; -O0: bl __atomic_compare_exchange 2838; 2839; -O1-LABEL: atomicrmw_and_i64_unaligned_seq_cst: 2840; -O1: and x8, x0, x20 2841; -O1: bl __atomic_compare_exchange 2842 %r = atomicrmw and ptr %ptr, i64 %value seq_cst, align 1 2843 ret i64 %r 2844} 2845 2846define dso_local i128 @atomicrmw_and_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 2847; -O0-LABEL: atomicrmw_and_i128_unaligned_monotonic: 2848; -O0: and x8, x11, x8 2849; -O0: and x9, x10, x9 2850; -O0: bl __atomic_compare_exchange 2851; 2852; -O1-LABEL: atomicrmw_and_i128_unaligned_monotonic: 2853; -O1: ldp x0, x1, [x0] 2854; -O1: and x8, x1, x19 2855; -O1: and x9, x0, x21 2856; -O1: bl __atomic_compare_exchange 2857 %r = atomicrmw and ptr %ptr, i128 %value monotonic, align 1 2858 ret i128 %r 2859} 2860 2861define dso_local i128 @atomicrmw_and_i128_unaligned_acquire(ptr %ptr, i128 %value) { 2862; -O0-LABEL: atomicrmw_and_i128_unaligned_acquire: 2863; -O0: and x8, x11, x8 2864; -O0: and x9, x10, x9 2865; -O0: bl __atomic_compare_exchange 2866; 2867; -O1-LABEL: atomicrmw_and_i128_unaligned_acquire: 2868; -O1: ldp x0, x1, [x0] 2869; -O1: and x8, x1, x19 2870; -O1: and x9, x0, x21 2871; -O1: bl __atomic_compare_exchange 2872 %r = atomicrmw and ptr %ptr, i128 %value acquire, align 1 2873 ret i128 %r 2874} 2875 2876define dso_local i128 @atomicrmw_and_i128_unaligned_release(ptr %ptr, i128 %value) { 2877; -O0-LABEL: atomicrmw_and_i128_unaligned_release: 2878; -O0: and x8, x11, x8 2879; -O0: and x9, x10, x9 2880; -O0: bl __atomic_compare_exchange 2881; 2882; -O1-LABEL: atomicrmw_and_i128_unaligned_release: 2883; -O1: ldp x0, x1, [x0] 2884; -O1: and x8, x1, x19 2885; -O1: and x9, x0, x21 2886; -O1: bl __atomic_compare_exchange 2887 %r = atomicrmw and ptr %ptr, i128 %value release, align 1 2888 ret i128 %r 2889} 2890 2891define dso_local i128 @atomicrmw_and_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 2892; -O0-LABEL: atomicrmw_and_i128_unaligned_acq_rel: 2893; -O0: and x8, x11, x8 2894; -O0: and x9, x10, x9 2895; -O0: bl __atomic_compare_exchange 2896; 2897; -O1-LABEL: atomicrmw_and_i128_unaligned_acq_rel: 2898; -O1: ldp x0, x1, [x0] 2899; -O1: and x8, x1, x19 2900; -O1: and x9, x0, x21 2901; -O1: bl __atomic_compare_exchange 2902 %r = atomicrmw and ptr %ptr, i128 %value acq_rel, align 1 2903 ret i128 %r 2904} 2905 2906define dso_local i128 @atomicrmw_and_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 2907; -O0-LABEL: atomicrmw_and_i128_unaligned_seq_cst: 2908; -O0: and x8, x11, x8 2909; -O0: and x9, x10, x9 2910; -O0: bl __atomic_compare_exchange 2911; 2912; -O1-LABEL: atomicrmw_and_i128_unaligned_seq_cst: 2913; -O1: ldp x0, x1, [x0] 2914; -O1: and x8, x1, x19 2915; -O1: and x9, x0, x21 2916; -O1: bl __atomic_compare_exchange 2917 %r = atomicrmw and ptr %ptr, i128 %value seq_cst, align 1 2918 ret i128 %r 2919} 2920 2921define dso_local i8 @atomicrmw_nand_i8_aligned_monotonic(ptr %ptr, i8 %value) { 2922; -O0-LABEL: atomicrmw_nand_i8_aligned_monotonic: 2923; -O0: and w8, w9, w8 2924; -O0: mvn w12, w8 2925; -O0: ldaxrb w8, [x11] 2926; -O0: cmp w8, w9, uxtb 2927; -O0: stlxrb w10, w12, [x11] 2928; -O0: subs w9, w8, w9, uxtb 2929; -O0: subs w9, w9, #1 2930; 2931; -O1-LABEL: atomicrmw_nand_i8_aligned_monotonic: 2932; -O1: ldxrb w8, [x0] 2933; -O1: and w9, w8, w1 2934; -O1: mvn w9, w9 2935; -O1: stxrb w10, w9, [x0] 2936 %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 1 2937 ret i8 %r 2938} 2939 2940define dso_local i8 @atomicrmw_nand_i8_aligned_acquire(ptr %ptr, i8 %value) { 2941; -O0-LABEL: atomicrmw_nand_i8_aligned_acquire: 2942; -O0: and w8, w9, w8 2943; -O0: mvn w12, w8 2944; -O0: ldaxrb w8, [x11] 2945; -O0: cmp w8, w9, uxtb 2946; -O0: stlxrb w10, w12, [x11] 2947; -O0: subs w9, w8, w9, uxtb 2948; -O0: subs w9, w9, #1 2949; 2950; -O1-LABEL: atomicrmw_nand_i8_aligned_acquire: 2951; -O1: ldaxrb w8, [x0] 2952; -O1: and w9, w8, w1 2953; -O1: mvn w9, w9 2954; -O1: stxrb w10, w9, [x0] 2955 %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 1 2956 ret i8 %r 2957} 2958 2959define dso_local i8 @atomicrmw_nand_i8_aligned_release(ptr %ptr, i8 %value) { 2960; -O0-LABEL: atomicrmw_nand_i8_aligned_release: 2961; -O0: and w8, w9, w8 2962; -O0: mvn w12, w8 2963; -O0: ldaxrb w8, [x11] 2964; -O0: cmp w8, w9, uxtb 2965; -O0: stlxrb w10, w12, [x11] 2966; -O0: subs w9, w8, w9, uxtb 2967; -O0: subs w9, w9, #1 2968; 2969; -O1-LABEL: atomicrmw_nand_i8_aligned_release: 2970; -O1: ldxrb w8, [x0] 2971; -O1: and w9, w8, w1 2972; -O1: mvn w9, w9 2973; -O1: stlxrb w10, w9, [x0] 2974 %r = atomicrmw nand ptr %ptr, i8 %value release, align 1 2975 ret i8 %r 2976} 2977 2978define dso_local i8 @atomicrmw_nand_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 2979; -O0-LABEL: atomicrmw_nand_i8_aligned_acq_rel: 2980; -O0: and w8, w9, w8 2981; -O0: mvn w12, w8 2982; -O0: ldaxrb w8, [x11] 2983; -O0: cmp w8, w9, uxtb 2984; -O0: stlxrb w10, w12, [x11] 2985; -O0: subs w9, w8, w9, uxtb 2986; -O0: subs w9, w9, #1 2987; 2988; -O1-LABEL: atomicrmw_nand_i8_aligned_acq_rel: 2989; -O1: ldaxrb w8, [x0] 2990; -O1: and w9, w8, w1 2991; -O1: mvn w9, w9 2992; -O1: stlxrb w10, w9, [x0] 2993 %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 1 2994 ret i8 %r 2995} 2996 2997define dso_local i8 @atomicrmw_nand_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 2998; -O0-LABEL: atomicrmw_nand_i8_aligned_seq_cst: 2999; -O0: and w8, w9, w8 3000; -O0: mvn w12, w8 3001; -O0: ldaxrb w8, [x11] 3002; -O0: cmp w8, w9, uxtb 3003; -O0: stlxrb w10, w12, [x11] 3004; -O0: subs w9, w8, w9, uxtb 3005; -O0: subs w9, w9, #1 3006; 3007; -O1-LABEL: atomicrmw_nand_i8_aligned_seq_cst: 3008; -O1: ldaxrb w8, [x0] 3009; -O1: and w9, w8, w1 3010; -O1: mvn w9, w9 3011; -O1: stlxrb w10, w9, [x0] 3012 %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 1 3013 ret i8 %r 3014} 3015 3016define dso_local i16 @atomicrmw_nand_i16_aligned_monotonic(ptr %ptr, i16 %value) { 3017; -O0-LABEL: atomicrmw_nand_i16_aligned_monotonic: 3018; -O0: and w8, w9, w8 3019; -O0: mvn w12, w8 3020; -O0: ldaxrh w8, [x11] 3021; -O0: cmp w8, w9, uxth 3022; -O0: stlxrh w10, w12, [x11] 3023; -O0: subs w9, w8, w9, uxth 3024; -O0: subs w9, w9, #1 3025; 3026; -O1-LABEL: atomicrmw_nand_i16_aligned_monotonic: 3027; -O1: ldxrh w8, [x0] 3028; -O1: and w9, w8, w1 3029; -O1: mvn w9, w9 3030; -O1: stxrh w10, w9, [x0] 3031 %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 2 3032 ret i16 %r 3033} 3034 3035define dso_local i16 @atomicrmw_nand_i16_aligned_acquire(ptr %ptr, i16 %value) { 3036; -O0-LABEL: atomicrmw_nand_i16_aligned_acquire: 3037; -O0: and w8, w9, w8 3038; -O0: mvn w12, w8 3039; -O0: ldaxrh w8, [x11] 3040; -O0: cmp w8, w9, uxth 3041; -O0: stlxrh w10, w12, [x11] 3042; -O0: subs w9, w8, w9, uxth 3043; -O0: subs w9, w9, #1 3044; 3045; -O1-LABEL: atomicrmw_nand_i16_aligned_acquire: 3046; -O1: ldaxrh w8, [x0] 3047; -O1: and w9, w8, w1 3048; -O1: mvn w9, w9 3049; -O1: stxrh w10, w9, [x0] 3050 %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 2 3051 ret i16 %r 3052} 3053 3054define dso_local i16 @atomicrmw_nand_i16_aligned_release(ptr %ptr, i16 %value) { 3055; -O0-LABEL: atomicrmw_nand_i16_aligned_release: 3056; -O0: and w8, w9, w8 3057; -O0: mvn w12, w8 3058; -O0: ldaxrh w8, [x11] 3059; -O0: cmp w8, w9, uxth 3060; -O0: stlxrh w10, w12, [x11] 3061; -O0: subs w9, w8, w9, uxth 3062; -O0: subs w9, w9, #1 3063; 3064; -O1-LABEL: atomicrmw_nand_i16_aligned_release: 3065; -O1: ldxrh w8, [x0] 3066; -O1: and w9, w8, w1 3067; -O1: mvn w9, w9 3068; -O1: stlxrh w10, w9, [x0] 3069 %r = atomicrmw nand ptr %ptr, i16 %value release, align 2 3070 ret i16 %r 3071} 3072 3073define dso_local i16 @atomicrmw_nand_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 3074; -O0-LABEL: atomicrmw_nand_i16_aligned_acq_rel: 3075; -O0: and w8, w9, w8 3076; -O0: mvn w12, w8 3077; -O0: ldaxrh w8, [x11] 3078; -O0: cmp w8, w9, uxth 3079; -O0: stlxrh w10, w12, [x11] 3080; -O0: subs w9, w8, w9, uxth 3081; -O0: subs w9, w9, #1 3082; 3083; -O1-LABEL: atomicrmw_nand_i16_aligned_acq_rel: 3084; -O1: ldaxrh w8, [x0] 3085; -O1: and w9, w8, w1 3086; -O1: mvn w9, w9 3087; -O1: stlxrh w10, w9, [x0] 3088 %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 2 3089 ret i16 %r 3090} 3091 3092define dso_local i16 @atomicrmw_nand_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 3093; -O0-LABEL: atomicrmw_nand_i16_aligned_seq_cst: 3094; -O0: and w8, w9, w8 3095; -O0: mvn w12, w8 3096; -O0: ldaxrh w8, [x11] 3097; -O0: cmp w8, w9, uxth 3098; -O0: stlxrh w10, w12, [x11] 3099; -O0: subs w9, w8, w9, uxth 3100; -O0: subs w9, w9, #1 3101; 3102; -O1-LABEL: atomicrmw_nand_i16_aligned_seq_cst: 3103; -O1: ldaxrh w8, [x0] 3104; -O1: and w9, w8, w1 3105; -O1: mvn w9, w9 3106; -O1: stlxrh w10, w9, [x0] 3107 %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 2 3108 ret i16 %r 3109} 3110 3111define dso_local i32 @atomicrmw_nand_i32_aligned_monotonic(ptr %ptr, i32 %value) { 3112; -O0-LABEL: atomicrmw_nand_i32_aligned_monotonic: 3113; -O0: and w8, w9, w8 3114; -O0: mvn w12, w8 3115; -O0: ldaxr w8, [x11] 3116; -O0: cmp w8, w9 3117; -O0: stlxr w10, w12, [x11] 3118; -O0: subs w9, w8, w9 3119; -O0: subs w9, w9, #1 3120; 3121; -O1-LABEL: atomicrmw_nand_i32_aligned_monotonic: 3122; -O1: ldxr w8, [x0] 3123; -O1: and w9, w8, w1 3124; -O1: mvn w9, w9 3125; -O1: stxr w10, w9, [x0] 3126 %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 4 3127 ret i32 %r 3128} 3129 3130define dso_local i32 @atomicrmw_nand_i32_aligned_acquire(ptr %ptr, i32 %value) { 3131; -O0-LABEL: atomicrmw_nand_i32_aligned_acquire: 3132; -O0: and w8, w9, w8 3133; -O0: mvn w12, w8 3134; -O0: ldaxr w8, [x11] 3135; -O0: cmp w8, w9 3136; -O0: stlxr w10, w12, [x11] 3137; -O0: subs w9, w8, w9 3138; -O0: subs w9, w9, #1 3139; 3140; -O1-LABEL: atomicrmw_nand_i32_aligned_acquire: 3141; -O1: ldaxr w8, [x0] 3142; -O1: and w9, w8, w1 3143; -O1: mvn w9, w9 3144; -O1: stxr w10, w9, [x0] 3145 %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 4 3146 ret i32 %r 3147} 3148 3149define dso_local i32 @atomicrmw_nand_i32_aligned_release(ptr %ptr, i32 %value) { 3150; -O0-LABEL: atomicrmw_nand_i32_aligned_release: 3151; -O0: and w8, w9, w8 3152; -O0: mvn w12, w8 3153; -O0: ldaxr w8, [x11] 3154; -O0: cmp w8, w9 3155; -O0: stlxr w10, w12, [x11] 3156; -O0: subs w9, w8, w9 3157; -O0: subs w9, w9, #1 3158; 3159; -O1-LABEL: atomicrmw_nand_i32_aligned_release: 3160; -O1: ldxr w8, [x0] 3161; -O1: and w9, w8, w1 3162; -O1: mvn w9, w9 3163; -O1: stlxr w10, w9, [x0] 3164 %r = atomicrmw nand ptr %ptr, i32 %value release, align 4 3165 ret i32 %r 3166} 3167 3168define dso_local i32 @atomicrmw_nand_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 3169; -O0-LABEL: atomicrmw_nand_i32_aligned_acq_rel: 3170; -O0: and w8, w9, w8 3171; -O0: mvn w12, w8 3172; -O0: ldaxr w8, [x11] 3173; -O0: cmp w8, w9 3174; -O0: stlxr w10, w12, [x11] 3175; -O0: subs w9, w8, w9 3176; -O0: subs w9, w9, #1 3177; 3178; -O1-LABEL: atomicrmw_nand_i32_aligned_acq_rel: 3179; -O1: ldaxr w8, [x0] 3180; -O1: and w9, w8, w1 3181; -O1: mvn w9, w9 3182; -O1: stlxr w10, w9, [x0] 3183 %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 4 3184 ret i32 %r 3185} 3186 3187define dso_local i32 @atomicrmw_nand_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 3188; -O0-LABEL: atomicrmw_nand_i32_aligned_seq_cst: 3189; -O0: and w8, w9, w8 3190; -O0: mvn w12, w8 3191; -O0: ldaxr w8, [x11] 3192; -O0: cmp w8, w9 3193; -O0: stlxr w10, w12, [x11] 3194; -O0: subs w9, w8, w9 3195; -O0: subs w9, w9, #1 3196; 3197; -O1-LABEL: atomicrmw_nand_i32_aligned_seq_cst: 3198; -O1: ldaxr w8, [x0] 3199; -O1: and w9, w8, w1 3200; -O1: mvn w9, w9 3201; -O1: stlxr w10, w9, [x0] 3202 %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 4 3203 ret i32 %r 3204} 3205 3206define dso_local i64 @atomicrmw_nand_i64_aligned_monotonic(ptr %ptr, i64 %value) { 3207; -O0-LABEL: atomicrmw_nand_i64_aligned_monotonic: 3208; -O0: and x8, x9, x8 3209; -O0: mvn x12, x8 3210; -O0: ldaxr x8, [x11] 3211; -O0: cmp x8, x9 3212; -O0: stlxr w10, x12, [x11] 3213; -O0: subs x9, x8, x9 3214; -O0: subs w9, w9, #1 3215; 3216; -O1-LABEL: atomicrmw_nand_i64_aligned_monotonic: 3217; -O1: ldxr x0, [x8] 3218; -O1: and x9, x0, x1 3219; -O1: mvn x9, x9 3220; -O1: stxr w10, x9, [x8] 3221 %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 8 3222 ret i64 %r 3223} 3224 3225define dso_local i64 @atomicrmw_nand_i64_aligned_acquire(ptr %ptr, i64 %value) { 3226; -O0-LABEL: atomicrmw_nand_i64_aligned_acquire: 3227; -O0: and x8, x9, x8 3228; -O0: mvn x12, x8 3229; -O0: ldaxr x8, [x11] 3230; -O0: cmp x8, x9 3231; -O0: stlxr w10, x12, [x11] 3232; -O0: subs x9, x8, x9 3233; -O0: subs w9, w9, #1 3234; 3235; -O1-LABEL: atomicrmw_nand_i64_aligned_acquire: 3236; -O1: ldaxr x0, [x8] 3237; -O1: and x9, x0, x1 3238; -O1: mvn x9, x9 3239; -O1: stxr w10, x9, [x8] 3240 %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 8 3241 ret i64 %r 3242} 3243 3244define dso_local i64 @atomicrmw_nand_i64_aligned_release(ptr %ptr, i64 %value) { 3245; -O0-LABEL: atomicrmw_nand_i64_aligned_release: 3246; -O0: and x8, x9, x8 3247; -O0: mvn x12, x8 3248; -O0: ldaxr x8, [x11] 3249; -O0: cmp x8, x9 3250; -O0: stlxr w10, x12, [x11] 3251; -O0: subs x9, x8, x9 3252; -O0: subs w9, w9, #1 3253; 3254; -O1-LABEL: atomicrmw_nand_i64_aligned_release: 3255; -O1: ldxr x0, [x8] 3256; -O1: and x9, x0, x1 3257; -O1: mvn x9, x9 3258; -O1: stlxr w10, x9, [x8] 3259 %r = atomicrmw nand ptr %ptr, i64 %value release, align 8 3260 ret i64 %r 3261} 3262 3263define dso_local i64 @atomicrmw_nand_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 3264; -O0-LABEL: atomicrmw_nand_i64_aligned_acq_rel: 3265; -O0: and x8, x9, x8 3266; -O0: mvn x12, x8 3267; -O0: ldaxr x8, [x11] 3268; -O0: cmp x8, x9 3269; -O0: stlxr w10, x12, [x11] 3270; -O0: subs x9, x8, x9 3271; -O0: subs w9, w9, #1 3272; 3273; -O1-LABEL: atomicrmw_nand_i64_aligned_acq_rel: 3274; -O1: ldaxr x0, [x8] 3275; -O1: and x9, x0, x1 3276; -O1: mvn x9, x9 3277; -O1: stlxr w10, x9, [x8] 3278 %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 8 3279 ret i64 %r 3280} 3281 3282define dso_local i64 @atomicrmw_nand_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 3283; -O0-LABEL: atomicrmw_nand_i64_aligned_seq_cst: 3284; -O0: and x8, x9, x8 3285; -O0: mvn x12, x8 3286; -O0: ldaxr x8, [x11] 3287; -O0: cmp x8, x9 3288; -O0: stlxr w10, x12, [x11] 3289; -O0: subs x9, x8, x9 3290; -O0: subs w9, w9, #1 3291; 3292; -O1-LABEL: atomicrmw_nand_i64_aligned_seq_cst: 3293; -O1: ldaxr x0, [x8] 3294; -O1: and x9, x0, x1 3295; -O1: mvn x9, x9 3296; -O1: stlxr w10, x9, [x8] 3297 %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 8 3298 ret i64 %r 3299} 3300 3301define dso_local i128 @atomicrmw_nand_i128_aligned_monotonic(ptr %ptr, i128 %value) { 3302; -O0-LABEL: atomicrmw_nand_i128_aligned_monotonic: 3303; -O0: and x8, x11, x8 3304; -O0: and x10, x13, x10 3305; -O0: mvn x15, x10 3306; -O0: mvn x14, x8 3307; -O0: ldxp x10, x12, [x9] 3308; -O0: cmp x10, x11 3309; -O0: cmp x12, x13 3310; -O0: stxp w8, x14, x15, [x9] 3311; -O0: stxp w8, x10, x12, [x9] 3312; -O0: subs x12, x12, x13 3313; -O0: ccmp x10, x11, #0, eq 3314; 3315; -O1-LABEL: atomicrmw_nand_i128_aligned_monotonic: 3316; -O1: ldxp x1, x0, [x8] 3317; -O1: and x9, x1, x3 3318; -O1: and x10, x0, x2 3319; -O1: mvn x10, x10 3320; -O1: mvn x9, x9 3321; -O1: stxp w11, x9, x10, [x8] 3322 %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 16 3323 ret i128 %r 3324} 3325 3326define dso_local i128 @atomicrmw_nand_i128_aligned_acquire(ptr %ptr, i128 %value) { 3327; -O0-LABEL: atomicrmw_nand_i128_aligned_acquire: 3328; -O0: and x8, x11, x8 3329; -O0: and x10, x13, x10 3330; -O0: mvn x15, x10 3331; -O0: mvn x14, x8 3332; -O0: ldaxp x10, x12, [x9] 3333; -O0: cmp x10, x11 3334; -O0: cmp x12, x13 3335; -O0: stxp w8, x14, x15, [x9] 3336; -O0: stxp w8, x10, x12, [x9] 3337; -O0: subs x12, x12, x13 3338; -O0: ccmp x10, x11, #0, eq 3339; 3340; -O1-LABEL: atomicrmw_nand_i128_aligned_acquire: 3341; -O1: ldaxp x1, x0, [x8] 3342; -O1: and x9, x1, x3 3343; -O1: and x10, x0, x2 3344; -O1: mvn x10, x10 3345; -O1: mvn x9, x9 3346; -O1: stxp w11, x9, x10, [x8] 3347 %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 16 3348 ret i128 %r 3349} 3350 3351define dso_local i128 @atomicrmw_nand_i128_aligned_release(ptr %ptr, i128 %value) { 3352; -O0-LABEL: atomicrmw_nand_i128_aligned_release: 3353; -O0: and x8, x11, x8 3354; -O0: and x10, x13, x10 3355; -O0: mvn x15, x10 3356; -O0: mvn x14, x8 3357; -O0: ldxp x10, x12, [x9] 3358; -O0: cmp x10, x11 3359; -O0: cmp x12, x13 3360; -O0: stlxp w8, x14, x15, [x9] 3361; -O0: stlxp w8, x10, x12, [x9] 3362; -O0: subs x12, x12, x13 3363; -O0: ccmp x10, x11, #0, eq 3364; 3365; -O1-LABEL: atomicrmw_nand_i128_aligned_release: 3366; -O1: ldxp x1, x0, [x8] 3367; -O1: and x9, x1, x3 3368; -O1: and x10, x0, x2 3369; -O1: mvn x10, x10 3370; -O1: mvn x9, x9 3371; -O1: stlxp w11, x9, x10, [x8] 3372 %r = atomicrmw nand ptr %ptr, i128 %value release, align 16 3373 ret i128 %r 3374} 3375 3376define dso_local i128 @atomicrmw_nand_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 3377; -O0-LABEL: atomicrmw_nand_i128_aligned_acq_rel: 3378; -O0: and x8, x11, x8 3379; -O0: and x10, x13, x10 3380; -O0: mvn x15, x10 3381; -O0: mvn x14, x8 3382; -O0: ldaxp x10, x12, [x9] 3383; -O0: cmp x10, x11 3384; -O0: cmp x12, x13 3385; -O0: stlxp w8, x14, x15, [x9] 3386; -O0: stlxp w8, x10, x12, [x9] 3387; -O0: subs x12, x12, x13 3388; -O0: ccmp x10, x11, #0, eq 3389; 3390; -O1-LABEL: atomicrmw_nand_i128_aligned_acq_rel: 3391; -O1: ldaxp x1, x0, [x8] 3392; -O1: and x9, x1, x3 3393; -O1: and x10, x0, x2 3394; -O1: mvn x10, x10 3395; -O1: mvn x9, x9 3396; -O1: stlxp w11, x9, x10, [x8] 3397 %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 16 3398 ret i128 %r 3399} 3400 3401define dso_local i128 @atomicrmw_nand_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 3402; -O0-LABEL: atomicrmw_nand_i128_aligned_seq_cst: 3403; -O0: and x8, x11, x8 3404; -O0: and x10, x13, x10 3405; -O0: mvn x15, x10 3406; -O0: mvn x14, x8 3407; -O0: ldaxp x10, x12, [x9] 3408; -O0: cmp x10, x11 3409; -O0: cmp x12, x13 3410; -O0: stlxp w8, x14, x15, [x9] 3411; -O0: stlxp w8, x10, x12, [x9] 3412; -O0: subs x12, x12, x13 3413; -O0: ccmp x10, x11, #0, eq 3414; 3415; -O1-LABEL: atomicrmw_nand_i128_aligned_seq_cst: 3416; -O1: ldaxp x1, x0, [x8] 3417; -O1: and x9, x1, x3 3418; -O1: and x10, x0, x2 3419; -O1: mvn x10, x10 3420; -O1: mvn x9, x9 3421; -O1: stlxp w11, x9, x10, [x8] 3422 %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 16 3423 ret i128 %r 3424} 3425 3426define dso_local i8 @atomicrmw_nand_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 3427; -O0-LABEL: atomicrmw_nand_i8_unaligned_monotonic: 3428; -O0: and w8, w9, w8 3429; -O0: mvn w12, w8 3430; -O0: ldaxrb w8, [x11] 3431; -O0: cmp w8, w9, uxtb 3432; -O0: stlxrb w10, w12, [x11] 3433; -O0: subs w9, w8, w9, uxtb 3434; -O0: subs w9, w9, #1 3435; 3436; -O1-LABEL: atomicrmw_nand_i8_unaligned_monotonic: 3437; -O1: ldxrb w8, [x0] 3438; -O1: and w9, w8, w1 3439; -O1: mvn w9, w9 3440; -O1: stxrb w10, w9, [x0] 3441 %r = atomicrmw nand ptr %ptr, i8 %value monotonic, align 1 3442 ret i8 %r 3443} 3444 3445define dso_local i8 @atomicrmw_nand_i8_unaligned_acquire(ptr %ptr, i8 %value) { 3446; -O0-LABEL: atomicrmw_nand_i8_unaligned_acquire: 3447; -O0: and w8, w9, w8 3448; -O0: mvn w12, w8 3449; -O0: ldaxrb w8, [x11] 3450; -O0: cmp w8, w9, uxtb 3451; -O0: stlxrb w10, w12, [x11] 3452; -O0: subs w9, w8, w9, uxtb 3453; -O0: subs w9, w9, #1 3454; 3455; -O1-LABEL: atomicrmw_nand_i8_unaligned_acquire: 3456; -O1: ldaxrb w8, [x0] 3457; -O1: and w9, w8, w1 3458; -O1: mvn w9, w9 3459; -O1: stxrb w10, w9, [x0] 3460 %r = atomicrmw nand ptr %ptr, i8 %value acquire, align 1 3461 ret i8 %r 3462} 3463 3464define dso_local i8 @atomicrmw_nand_i8_unaligned_release(ptr %ptr, i8 %value) { 3465; -O0-LABEL: atomicrmw_nand_i8_unaligned_release: 3466; -O0: and w8, w9, w8 3467; -O0: mvn w12, w8 3468; -O0: ldaxrb w8, [x11] 3469; -O0: cmp w8, w9, uxtb 3470; -O0: stlxrb w10, w12, [x11] 3471; -O0: subs w9, w8, w9, uxtb 3472; -O0: subs w9, w9, #1 3473; 3474; -O1-LABEL: atomicrmw_nand_i8_unaligned_release: 3475; -O1: ldxrb w8, [x0] 3476; -O1: and w9, w8, w1 3477; -O1: mvn w9, w9 3478; -O1: stlxrb w10, w9, [x0] 3479 %r = atomicrmw nand ptr %ptr, i8 %value release, align 1 3480 ret i8 %r 3481} 3482 3483define dso_local i8 @atomicrmw_nand_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 3484; -O0-LABEL: atomicrmw_nand_i8_unaligned_acq_rel: 3485; -O0: and w8, w9, w8 3486; -O0: mvn w12, w8 3487; -O0: ldaxrb w8, [x11] 3488; -O0: cmp w8, w9, uxtb 3489; -O0: stlxrb w10, w12, [x11] 3490; -O0: subs w9, w8, w9, uxtb 3491; -O0: subs w9, w9, #1 3492; 3493; -O1-LABEL: atomicrmw_nand_i8_unaligned_acq_rel: 3494; -O1: ldaxrb w8, [x0] 3495; -O1: and w9, w8, w1 3496; -O1: mvn w9, w9 3497; -O1: stlxrb w10, w9, [x0] 3498 %r = atomicrmw nand ptr %ptr, i8 %value acq_rel, align 1 3499 ret i8 %r 3500} 3501 3502define dso_local i8 @atomicrmw_nand_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 3503; -O0-LABEL: atomicrmw_nand_i8_unaligned_seq_cst: 3504; -O0: and w8, w9, w8 3505; -O0: mvn w12, w8 3506; -O0: ldaxrb w8, [x11] 3507; -O0: cmp w8, w9, uxtb 3508; -O0: stlxrb w10, w12, [x11] 3509; -O0: subs w9, w8, w9, uxtb 3510; -O0: subs w9, w9, #1 3511; 3512; -O1-LABEL: atomicrmw_nand_i8_unaligned_seq_cst: 3513; -O1: ldaxrb w8, [x0] 3514; -O1: and w9, w8, w1 3515; -O1: mvn w9, w9 3516; -O1: stlxrb w10, w9, [x0] 3517 %r = atomicrmw nand ptr %ptr, i8 %value seq_cst, align 1 3518 ret i8 %r 3519} 3520 3521define dso_local i16 @atomicrmw_nand_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 3522; -O0-LABEL: atomicrmw_nand_i16_unaligned_monotonic: 3523; -O0: and w8, w9, w8 3524; -O0: mvn w8, w8 3525; -O0: bl __atomic_compare_exchange 3526; 3527; -O1-LABEL: atomicrmw_nand_i16_unaligned_monotonic: 3528; -O1: and w8, w0, w20 3529; -O1: mvn w8, w8 3530; -O1: bl __atomic_compare_exchange 3531 %r = atomicrmw nand ptr %ptr, i16 %value monotonic, align 1 3532 ret i16 %r 3533} 3534 3535define dso_local i16 @atomicrmw_nand_i16_unaligned_acquire(ptr %ptr, i16 %value) { 3536; -O0-LABEL: atomicrmw_nand_i16_unaligned_acquire: 3537; -O0: and w8, w9, w8 3538; -O0: mvn w8, w8 3539; -O0: bl __atomic_compare_exchange 3540; 3541; -O1-LABEL: atomicrmw_nand_i16_unaligned_acquire: 3542; -O1: and w8, w0, w20 3543; -O1: mvn w8, w8 3544; -O1: bl __atomic_compare_exchange 3545 %r = atomicrmw nand ptr %ptr, i16 %value acquire, align 1 3546 ret i16 %r 3547} 3548 3549define dso_local i16 @atomicrmw_nand_i16_unaligned_release(ptr %ptr, i16 %value) { 3550; -O0-LABEL: atomicrmw_nand_i16_unaligned_release: 3551; -O0: and w8, w9, w8 3552; -O0: mvn w8, w8 3553; -O0: bl __atomic_compare_exchange 3554; 3555; -O1-LABEL: atomicrmw_nand_i16_unaligned_release: 3556; -O1: and w8, w0, w20 3557; -O1: mvn w8, w8 3558; -O1: bl __atomic_compare_exchange 3559 %r = atomicrmw nand ptr %ptr, i16 %value release, align 1 3560 ret i16 %r 3561} 3562 3563define dso_local i16 @atomicrmw_nand_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 3564; -O0-LABEL: atomicrmw_nand_i16_unaligned_acq_rel: 3565; -O0: and w8, w9, w8 3566; -O0: mvn w8, w8 3567; -O0: bl __atomic_compare_exchange 3568; 3569; -O1-LABEL: atomicrmw_nand_i16_unaligned_acq_rel: 3570; -O1: and w8, w0, w20 3571; -O1: mvn w8, w8 3572; -O1: bl __atomic_compare_exchange 3573 %r = atomicrmw nand ptr %ptr, i16 %value acq_rel, align 1 3574 ret i16 %r 3575} 3576 3577define dso_local i16 @atomicrmw_nand_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 3578; -O0-LABEL: atomicrmw_nand_i16_unaligned_seq_cst: 3579; -O0: and w8, w9, w8 3580; -O0: mvn w8, w8 3581; -O0: bl __atomic_compare_exchange 3582; 3583; -O1-LABEL: atomicrmw_nand_i16_unaligned_seq_cst: 3584; -O1: and w8, w0, w20 3585; -O1: mvn w8, w8 3586; -O1: bl __atomic_compare_exchange 3587 %r = atomicrmw nand ptr %ptr, i16 %value seq_cst, align 1 3588 ret i16 %r 3589} 3590 3591define dso_local i32 @atomicrmw_nand_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 3592; -O0-LABEL: atomicrmw_nand_i32_unaligned_monotonic: 3593; -O0: and w8, w9, w8 3594; -O0: mvn w8, w8 3595; -O0: bl __atomic_compare_exchange 3596; 3597; -O1-LABEL: atomicrmw_nand_i32_unaligned_monotonic: 3598; -O1: and w8, w0, w20 3599; -O1: mvn w8, w8 3600; -O1: bl __atomic_compare_exchange 3601 %r = atomicrmw nand ptr %ptr, i32 %value monotonic, align 1 3602 ret i32 %r 3603} 3604 3605define dso_local i32 @atomicrmw_nand_i32_unaligned_acquire(ptr %ptr, i32 %value) { 3606; -O0-LABEL: atomicrmw_nand_i32_unaligned_acquire: 3607; -O0: and w8, w9, w8 3608; -O0: mvn w8, w8 3609; -O0: bl __atomic_compare_exchange 3610; 3611; -O1-LABEL: atomicrmw_nand_i32_unaligned_acquire: 3612; -O1: and w8, w0, w20 3613; -O1: mvn w8, w8 3614; -O1: bl __atomic_compare_exchange 3615 %r = atomicrmw nand ptr %ptr, i32 %value acquire, align 1 3616 ret i32 %r 3617} 3618 3619define dso_local i32 @atomicrmw_nand_i32_unaligned_release(ptr %ptr, i32 %value) { 3620; -O0-LABEL: atomicrmw_nand_i32_unaligned_release: 3621; -O0: and w8, w9, w8 3622; -O0: mvn w8, w8 3623; -O0: bl __atomic_compare_exchange 3624; 3625; -O1-LABEL: atomicrmw_nand_i32_unaligned_release: 3626; -O1: and w8, w0, w20 3627; -O1: mvn w8, w8 3628; -O1: bl __atomic_compare_exchange 3629 %r = atomicrmw nand ptr %ptr, i32 %value release, align 1 3630 ret i32 %r 3631} 3632 3633define dso_local i32 @atomicrmw_nand_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 3634; -O0-LABEL: atomicrmw_nand_i32_unaligned_acq_rel: 3635; -O0: and w8, w9, w8 3636; -O0: mvn w8, w8 3637; -O0: bl __atomic_compare_exchange 3638; 3639; -O1-LABEL: atomicrmw_nand_i32_unaligned_acq_rel: 3640; -O1: and w8, w0, w20 3641; -O1: mvn w8, w8 3642; -O1: bl __atomic_compare_exchange 3643 %r = atomicrmw nand ptr %ptr, i32 %value acq_rel, align 1 3644 ret i32 %r 3645} 3646 3647define dso_local i32 @atomicrmw_nand_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 3648; -O0-LABEL: atomicrmw_nand_i32_unaligned_seq_cst: 3649; -O0: and w8, w9, w8 3650; -O0: mvn w8, w8 3651; -O0: bl __atomic_compare_exchange 3652; 3653; -O1-LABEL: atomicrmw_nand_i32_unaligned_seq_cst: 3654; -O1: and w8, w0, w20 3655; -O1: mvn w8, w8 3656; -O1: bl __atomic_compare_exchange 3657 %r = atomicrmw nand ptr %ptr, i32 %value seq_cst, align 1 3658 ret i32 %r 3659} 3660 3661define dso_local i64 @atomicrmw_nand_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 3662; -O0-LABEL: atomicrmw_nand_i64_unaligned_monotonic: 3663; -O0: and x8, x9, x8 3664; -O0: mvn x8, x8 3665; -O0: bl __atomic_compare_exchange 3666; 3667; -O1-LABEL: atomicrmw_nand_i64_unaligned_monotonic: 3668; -O1: and x8, x0, x20 3669; -O1: mvn x8, x8 3670; -O1: bl __atomic_compare_exchange 3671 %r = atomicrmw nand ptr %ptr, i64 %value monotonic, align 1 3672 ret i64 %r 3673} 3674 3675define dso_local i64 @atomicrmw_nand_i64_unaligned_acquire(ptr %ptr, i64 %value) { 3676; -O0-LABEL: atomicrmw_nand_i64_unaligned_acquire: 3677; -O0: and x8, x9, x8 3678; -O0: mvn x8, x8 3679; -O0: bl __atomic_compare_exchange 3680; 3681; -O1-LABEL: atomicrmw_nand_i64_unaligned_acquire: 3682; -O1: and x8, x0, x20 3683; -O1: mvn x8, x8 3684; -O1: bl __atomic_compare_exchange 3685 %r = atomicrmw nand ptr %ptr, i64 %value acquire, align 1 3686 ret i64 %r 3687} 3688 3689define dso_local i64 @atomicrmw_nand_i64_unaligned_release(ptr %ptr, i64 %value) { 3690; -O0-LABEL: atomicrmw_nand_i64_unaligned_release: 3691; -O0: and x8, x9, x8 3692; -O0: mvn x8, x8 3693; -O0: bl __atomic_compare_exchange 3694; 3695; -O1-LABEL: atomicrmw_nand_i64_unaligned_release: 3696; -O1: and x8, x0, x20 3697; -O1: mvn x8, x8 3698; -O1: bl __atomic_compare_exchange 3699 %r = atomicrmw nand ptr %ptr, i64 %value release, align 1 3700 ret i64 %r 3701} 3702 3703define dso_local i64 @atomicrmw_nand_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 3704; -O0-LABEL: atomicrmw_nand_i64_unaligned_acq_rel: 3705; -O0: and x8, x9, x8 3706; -O0: mvn x8, x8 3707; -O0: bl __atomic_compare_exchange 3708; 3709; -O1-LABEL: atomicrmw_nand_i64_unaligned_acq_rel: 3710; -O1: and x8, x0, x20 3711; -O1: mvn x8, x8 3712; -O1: bl __atomic_compare_exchange 3713 %r = atomicrmw nand ptr %ptr, i64 %value acq_rel, align 1 3714 ret i64 %r 3715} 3716 3717define dso_local i64 @atomicrmw_nand_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 3718; -O0-LABEL: atomicrmw_nand_i64_unaligned_seq_cst: 3719; -O0: and x8, x9, x8 3720; -O0: mvn x8, x8 3721; -O0: bl __atomic_compare_exchange 3722; 3723; -O1-LABEL: atomicrmw_nand_i64_unaligned_seq_cst: 3724; -O1: and x8, x0, x20 3725; -O1: mvn x8, x8 3726; -O1: bl __atomic_compare_exchange 3727 %r = atomicrmw nand ptr %ptr, i64 %value seq_cst, align 1 3728 ret i64 %r 3729} 3730 3731define dso_local i128 @atomicrmw_nand_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 3732; -O0-LABEL: atomicrmw_nand_i128_unaligned_monotonic: 3733; -O0: and x9, x11, x9 3734; -O0: and x8, x10, x8 3735; -O0: mvn x8, x8 3736; -O0: mvn x9, x9 3737; -O0: bl __atomic_compare_exchange 3738; 3739; -O1-LABEL: atomicrmw_nand_i128_unaligned_monotonic: 3740; -O1: ldp x0, x1, [x0] 3741; -O1: and x8, x1, x19 3742; -O1: and x9, x0, x21 3743; -O1: mvn x8, x8 3744; -O1: mvn x9, x9 3745; -O1: bl __atomic_compare_exchange 3746 %r = atomicrmw nand ptr %ptr, i128 %value monotonic, align 1 3747 ret i128 %r 3748} 3749 3750define dso_local i128 @atomicrmw_nand_i128_unaligned_acquire(ptr %ptr, i128 %value) { 3751; -O0-LABEL: atomicrmw_nand_i128_unaligned_acquire: 3752; -O0: and x9, x11, x9 3753; -O0: and x8, x10, x8 3754; -O0: mvn x8, x8 3755; -O0: mvn x9, x9 3756; -O0: bl __atomic_compare_exchange 3757; 3758; -O1-LABEL: atomicrmw_nand_i128_unaligned_acquire: 3759; -O1: ldp x0, x1, [x0] 3760; -O1: and x8, x1, x19 3761; -O1: and x9, x0, x21 3762; -O1: mvn x8, x8 3763; -O1: mvn x9, x9 3764; -O1: bl __atomic_compare_exchange 3765 %r = atomicrmw nand ptr %ptr, i128 %value acquire, align 1 3766 ret i128 %r 3767} 3768 3769define dso_local i128 @atomicrmw_nand_i128_unaligned_release(ptr %ptr, i128 %value) { 3770; -O0-LABEL: atomicrmw_nand_i128_unaligned_release: 3771; -O0: and x9, x11, x9 3772; -O0: and x8, x10, x8 3773; -O0: mvn x8, x8 3774; -O0: mvn x9, x9 3775; -O0: bl __atomic_compare_exchange 3776; 3777; -O1-LABEL: atomicrmw_nand_i128_unaligned_release: 3778; -O1: ldp x0, x1, [x0] 3779; -O1: and x8, x1, x19 3780; -O1: and x9, x0, x21 3781; -O1: mvn x8, x8 3782; -O1: mvn x9, x9 3783; -O1: bl __atomic_compare_exchange 3784 %r = atomicrmw nand ptr %ptr, i128 %value release, align 1 3785 ret i128 %r 3786} 3787 3788define dso_local i128 @atomicrmw_nand_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 3789; -O0-LABEL: atomicrmw_nand_i128_unaligned_acq_rel: 3790; -O0: and x9, x11, x9 3791; -O0: and x8, x10, x8 3792; -O0: mvn x8, x8 3793; -O0: mvn x9, x9 3794; -O0: bl __atomic_compare_exchange 3795; 3796; -O1-LABEL: atomicrmw_nand_i128_unaligned_acq_rel: 3797; -O1: ldp x0, x1, [x0] 3798; -O1: and x8, x1, x19 3799; -O1: and x9, x0, x21 3800; -O1: mvn x8, x8 3801; -O1: mvn x9, x9 3802; -O1: bl __atomic_compare_exchange 3803 %r = atomicrmw nand ptr %ptr, i128 %value acq_rel, align 1 3804 ret i128 %r 3805} 3806 3807define dso_local i128 @atomicrmw_nand_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 3808; -O0-LABEL: atomicrmw_nand_i128_unaligned_seq_cst: 3809; -O0: and x9, x11, x9 3810; -O0: and x8, x10, x8 3811; -O0: mvn x8, x8 3812; -O0: mvn x9, x9 3813; -O0: bl __atomic_compare_exchange 3814; 3815; -O1-LABEL: atomicrmw_nand_i128_unaligned_seq_cst: 3816; -O1: ldp x0, x1, [x0] 3817; -O1: and x8, x1, x19 3818; -O1: and x9, x0, x21 3819; -O1: mvn x8, x8 3820; -O1: mvn x9, x9 3821; -O1: bl __atomic_compare_exchange 3822 %r = atomicrmw nand ptr %ptr, i128 %value seq_cst, align 1 3823 ret i128 %r 3824} 3825 3826define dso_local i8 @atomicrmw_or_i8_aligned_monotonic(ptr %ptr, i8 %value) { 3827; -O0-LABEL: atomicrmw_or_i8_aligned_monotonic: 3828; -O0: orr w12, w9, w8 3829; -O0: ldaxrb w8, [x11] 3830; -O0: cmp w8, w9, uxtb 3831; -O0: stlxrb w10, w12, [x11] 3832; -O0: subs w9, w8, w9, uxtb 3833; -O0: subs w9, w9, #1 3834; 3835; -O1-LABEL: atomicrmw_or_i8_aligned_monotonic: 3836; -O1: ldxrb w8, [x0] 3837; -O1: orr w9, w8, w1 3838; -O1: stxrb w10, w9, [x0] 3839 %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 1 3840 ret i8 %r 3841} 3842 3843define dso_local i8 @atomicrmw_or_i8_aligned_acquire(ptr %ptr, i8 %value) { 3844; -O0-LABEL: atomicrmw_or_i8_aligned_acquire: 3845; -O0: orr w12, w9, w8 3846; -O0: ldaxrb w8, [x11] 3847; -O0: cmp w8, w9, uxtb 3848; -O0: stlxrb w10, w12, [x11] 3849; -O0: subs w9, w8, w9, uxtb 3850; -O0: subs w9, w9, #1 3851; 3852; -O1-LABEL: atomicrmw_or_i8_aligned_acquire: 3853; -O1: ldaxrb w8, [x0] 3854; -O1: orr w9, w8, w1 3855; -O1: stxrb w10, w9, [x0] 3856 %r = atomicrmw or ptr %ptr, i8 %value acquire, align 1 3857 ret i8 %r 3858} 3859 3860define dso_local i8 @atomicrmw_or_i8_aligned_release(ptr %ptr, i8 %value) { 3861; -O0-LABEL: atomicrmw_or_i8_aligned_release: 3862; -O0: orr w12, w9, w8 3863; -O0: ldaxrb w8, [x11] 3864; -O0: cmp w8, w9, uxtb 3865; -O0: stlxrb w10, w12, [x11] 3866; -O0: subs w9, w8, w9, uxtb 3867; -O0: subs w9, w9, #1 3868; 3869; -O1-LABEL: atomicrmw_or_i8_aligned_release: 3870; -O1: ldxrb w8, [x0] 3871; -O1: orr w9, w8, w1 3872; -O1: stlxrb w10, w9, [x0] 3873 %r = atomicrmw or ptr %ptr, i8 %value release, align 1 3874 ret i8 %r 3875} 3876 3877define dso_local i8 @atomicrmw_or_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 3878; -O0-LABEL: atomicrmw_or_i8_aligned_acq_rel: 3879; -O0: orr w12, w9, w8 3880; -O0: ldaxrb w8, [x11] 3881; -O0: cmp w8, w9, uxtb 3882; -O0: stlxrb w10, w12, [x11] 3883; -O0: subs w9, w8, w9, uxtb 3884; -O0: subs w9, w9, #1 3885; 3886; -O1-LABEL: atomicrmw_or_i8_aligned_acq_rel: 3887; -O1: ldaxrb w8, [x0] 3888; -O1: orr w9, w8, w1 3889; -O1: stlxrb w10, w9, [x0] 3890 %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 1 3891 ret i8 %r 3892} 3893 3894define dso_local i8 @atomicrmw_or_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 3895; -O0-LABEL: atomicrmw_or_i8_aligned_seq_cst: 3896; -O0: orr w12, w9, w8 3897; -O0: ldaxrb w8, [x11] 3898; -O0: cmp w8, w9, uxtb 3899; -O0: stlxrb w10, w12, [x11] 3900; -O0: subs w9, w8, w9, uxtb 3901; -O0: subs w9, w9, #1 3902; 3903; -O1-LABEL: atomicrmw_or_i8_aligned_seq_cst: 3904; -O1: ldaxrb w8, [x0] 3905; -O1: orr w9, w8, w1 3906; -O1: stlxrb w10, w9, [x0] 3907 %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 1 3908 ret i8 %r 3909} 3910 3911define dso_local i16 @atomicrmw_or_i16_aligned_monotonic(ptr %ptr, i16 %value) { 3912; -O0-LABEL: atomicrmw_or_i16_aligned_monotonic: 3913; -O0: orr w12, w9, w8 3914; -O0: ldaxrh w8, [x11] 3915; -O0: cmp w8, w9, uxth 3916; -O0: stlxrh w10, w12, [x11] 3917; -O0: subs w9, w8, w9, uxth 3918; -O0: subs w9, w9, #1 3919; 3920; -O1-LABEL: atomicrmw_or_i16_aligned_monotonic: 3921; -O1: ldxrh w8, [x0] 3922; -O1: orr w9, w8, w1 3923; -O1: stxrh w10, w9, [x0] 3924 %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 2 3925 ret i16 %r 3926} 3927 3928define dso_local i16 @atomicrmw_or_i16_aligned_acquire(ptr %ptr, i16 %value) { 3929; -O0-LABEL: atomicrmw_or_i16_aligned_acquire: 3930; -O0: orr w12, w9, w8 3931; -O0: ldaxrh w8, [x11] 3932; -O0: cmp w8, w9, uxth 3933; -O0: stlxrh w10, w12, [x11] 3934; -O0: subs w9, w8, w9, uxth 3935; -O0: subs w9, w9, #1 3936; 3937; -O1-LABEL: atomicrmw_or_i16_aligned_acquire: 3938; -O1: ldaxrh w8, [x0] 3939; -O1: orr w9, w8, w1 3940; -O1: stxrh w10, w9, [x0] 3941 %r = atomicrmw or ptr %ptr, i16 %value acquire, align 2 3942 ret i16 %r 3943} 3944 3945define dso_local i16 @atomicrmw_or_i16_aligned_release(ptr %ptr, i16 %value) { 3946; -O0-LABEL: atomicrmw_or_i16_aligned_release: 3947; -O0: orr w12, w9, w8 3948; -O0: ldaxrh w8, [x11] 3949; -O0: cmp w8, w9, uxth 3950; -O0: stlxrh w10, w12, [x11] 3951; -O0: subs w9, w8, w9, uxth 3952; -O0: subs w9, w9, #1 3953; 3954; -O1-LABEL: atomicrmw_or_i16_aligned_release: 3955; -O1: ldxrh w8, [x0] 3956; -O1: orr w9, w8, w1 3957; -O1: stlxrh w10, w9, [x0] 3958 %r = atomicrmw or ptr %ptr, i16 %value release, align 2 3959 ret i16 %r 3960} 3961 3962define dso_local i16 @atomicrmw_or_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 3963; -O0-LABEL: atomicrmw_or_i16_aligned_acq_rel: 3964; -O0: orr w12, w9, w8 3965; -O0: ldaxrh w8, [x11] 3966; -O0: cmp w8, w9, uxth 3967; -O0: stlxrh w10, w12, [x11] 3968; -O0: subs w9, w8, w9, uxth 3969; -O0: subs w9, w9, #1 3970; 3971; -O1-LABEL: atomicrmw_or_i16_aligned_acq_rel: 3972; -O1: ldaxrh w8, [x0] 3973; -O1: orr w9, w8, w1 3974; -O1: stlxrh w10, w9, [x0] 3975 %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 2 3976 ret i16 %r 3977} 3978 3979define dso_local i16 @atomicrmw_or_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 3980; -O0-LABEL: atomicrmw_or_i16_aligned_seq_cst: 3981; -O0: orr w12, w9, w8 3982; -O0: ldaxrh w8, [x11] 3983; -O0: cmp w8, w9, uxth 3984; -O0: stlxrh w10, w12, [x11] 3985; -O0: subs w9, w8, w9, uxth 3986; -O0: subs w9, w9, #1 3987; 3988; -O1-LABEL: atomicrmw_or_i16_aligned_seq_cst: 3989; -O1: ldaxrh w8, [x0] 3990; -O1: orr w9, w8, w1 3991; -O1: stlxrh w10, w9, [x0] 3992 %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 2 3993 ret i16 %r 3994} 3995 3996define dso_local i32 @atomicrmw_or_i32_aligned_monotonic(ptr %ptr, i32 %value) { 3997; -O0-LABEL: atomicrmw_or_i32_aligned_monotonic: 3998; -O0: orr w12, w9, w8 3999; -O0: ldaxr w8, [x11] 4000; -O0: cmp w8, w9 4001; -O0: stlxr w10, w12, [x11] 4002; -O0: subs w9, w8, w9 4003; -O0: subs w9, w9, #1 4004; 4005; -O1-LABEL: atomicrmw_or_i32_aligned_monotonic: 4006; -O1: ldxr w8, [x0] 4007; -O1: orr w9, w8, w1 4008; -O1: stxr w10, w9, [x0] 4009 %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 4 4010 ret i32 %r 4011} 4012 4013define dso_local i32 @atomicrmw_or_i32_aligned_acquire(ptr %ptr, i32 %value) { 4014; -O0-LABEL: atomicrmw_or_i32_aligned_acquire: 4015; -O0: orr w12, w9, w8 4016; -O0: ldaxr w8, [x11] 4017; -O0: cmp w8, w9 4018; -O0: stlxr w10, w12, [x11] 4019; -O0: subs w9, w8, w9 4020; -O0: subs w9, w9, #1 4021; 4022; -O1-LABEL: atomicrmw_or_i32_aligned_acquire: 4023; -O1: ldaxr w8, [x0] 4024; -O1: orr w9, w8, w1 4025; -O1: stxr w10, w9, [x0] 4026 %r = atomicrmw or ptr %ptr, i32 %value acquire, align 4 4027 ret i32 %r 4028} 4029 4030define dso_local i32 @atomicrmw_or_i32_aligned_release(ptr %ptr, i32 %value) { 4031; -O0-LABEL: atomicrmw_or_i32_aligned_release: 4032; -O0: orr w12, w9, w8 4033; -O0: ldaxr w8, [x11] 4034; -O0: cmp w8, w9 4035; -O0: stlxr w10, w12, [x11] 4036; -O0: subs w9, w8, w9 4037; -O0: subs w9, w9, #1 4038; 4039; -O1-LABEL: atomicrmw_or_i32_aligned_release: 4040; -O1: ldxr w8, [x0] 4041; -O1: orr w9, w8, w1 4042; -O1: stlxr w10, w9, [x0] 4043 %r = atomicrmw or ptr %ptr, i32 %value release, align 4 4044 ret i32 %r 4045} 4046 4047define dso_local i32 @atomicrmw_or_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 4048; -O0-LABEL: atomicrmw_or_i32_aligned_acq_rel: 4049; -O0: orr w12, w9, w8 4050; -O0: ldaxr w8, [x11] 4051; -O0: cmp w8, w9 4052; -O0: stlxr w10, w12, [x11] 4053; -O0: subs w9, w8, w9 4054; -O0: subs w9, w9, #1 4055; 4056; -O1-LABEL: atomicrmw_or_i32_aligned_acq_rel: 4057; -O1: ldaxr w8, [x0] 4058; -O1: orr w9, w8, w1 4059; -O1: stlxr w10, w9, [x0] 4060 %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 4 4061 ret i32 %r 4062} 4063 4064define dso_local i32 @atomicrmw_or_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 4065; -O0-LABEL: atomicrmw_or_i32_aligned_seq_cst: 4066; -O0: orr w12, w9, w8 4067; -O0: ldaxr w8, [x11] 4068; -O0: cmp w8, w9 4069; -O0: stlxr w10, w12, [x11] 4070; -O0: subs w9, w8, w9 4071; -O0: subs w9, w9, #1 4072; 4073; -O1-LABEL: atomicrmw_or_i32_aligned_seq_cst: 4074; -O1: ldaxr w8, [x0] 4075; -O1: orr w9, w8, w1 4076; -O1: stlxr w10, w9, [x0] 4077 %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 4 4078 ret i32 %r 4079} 4080 4081define dso_local i64 @atomicrmw_or_i64_aligned_monotonic(ptr %ptr, i64 %value) { 4082; -O0-LABEL: atomicrmw_or_i64_aligned_monotonic: 4083; -O0: orr x12, x9, x8 4084; -O0: ldaxr x8, [x11] 4085; -O0: cmp x8, x9 4086; -O0: stlxr w10, x12, [x11] 4087; -O0: subs x9, x8, x9 4088; -O0: subs w9, w9, #1 4089; 4090; -O1-LABEL: atomicrmw_or_i64_aligned_monotonic: 4091; -O1: ldxr x0, [x8] 4092; -O1: orr x9, x0, x1 4093; -O1: stxr w10, x9, [x8] 4094 %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 8 4095 ret i64 %r 4096} 4097 4098define dso_local i64 @atomicrmw_or_i64_aligned_acquire(ptr %ptr, i64 %value) { 4099; -O0-LABEL: atomicrmw_or_i64_aligned_acquire: 4100; -O0: orr x12, x9, x8 4101; -O0: ldaxr x8, [x11] 4102; -O0: cmp x8, x9 4103; -O0: stlxr w10, x12, [x11] 4104; -O0: subs x9, x8, x9 4105; -O0: subs w9, w9, #1 4106; 4107; -O1-LABEL: atomicrmw_or_i64_aligned_acquire: 4108; -O1: ldaxr x0, [x8] 4109; -O1: orr x9, x0, x1 4110; -O1: stxr w10, x9, [x8] 4111 %r = atomicrmw or ptr %ptr, i64 %value acquire, align 8 4112 ret i64 %r 4113} 4114 4115define dso_local i64 @atomicrmw_or_i64_aligned_release(ptr %ptr, i64 %value) { 4116; -O0-LABEL: atomicrmw_or_i64_aligned_release: 4117; -O0: orr x12, x9, x8 4118; -O0: ldaxr x8, [x11] 4119; -O0: cmp x8, x9 4120; -O0: stlxr w10, x12, [x11] 4121; -O0: subs x9, x8, x9 4122; -O0: subs w9, w9, #1 4123; 4124; -O1-LABEL: atomicrmw_or_i64_aligned_release: 4125; -O1: ldxr x0, [x8] 4126; -O1: orr x9, x0, x1 4127; -O1: stlxr w10, x9, [x8] 4128 %r = atomicrmw or ptr %ptr, i64 %value release, align 8 4129 ret i64 %r 4130} 4131 4132define dso_local i64 @atomicrmw_or_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 4133; -O0-LABEL: atomicrmw_or_i64_aligned_acq_rel: 4134; -O0: orr x12, x9, x8 4135; -O0: ldaxr x8, [x11] 4136; -O0: cmp x8, x9 4137; -O0: stlxr w10, x12, [x11] 4138; -O0: subs x9, x8, x9 4139; -O0: subs w9, w9, #1 4140; 4141; -O1-LABEL: atomicrmw_or_i64_aligned_acq_rel: 4142; -O1: ldaxr x0, [x8] 4143; -O1: orr x9, x0, x1 4144; -O1: stlxr w10, x9, [x8] 4145 %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 8 4146 ret i64 %r 4147} 4148 4149define dso_local i64 @atomicrmw_or_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 4150; -O0-LABEL: atomicrmw_or_i64_aligned_seq_cst: 4151; -O0: orr x12, x9, x8 4152; -O0: ldaxr x8, [x11] 4153; -O0: cmp x8, x9 4154; -O0: stlxr w10, x12, [x11] 4155; -O0: subs x9, x8, x9 4156; -O0: subs w9, w9, #1 4157; 4158; -O1-LABEL: atomicrmw_or_i64_aligned_seq_cst: 4159; -O1: ldaxr x0, [x8] 4160; -O1: orr x9, x0, x1 4161; -O1: stlxr w10, x9, [x8] 4162 %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 8 4163 ret i64 %r 4164} 4165 4166define dso_local i128 @atomicrmw_or_i128_aligned_monotonic(ptr %ptr, i128 %value) { 4167; -O0-LABEL: atomicrmw_or_i128_aligned_monotonic: 4168; -O0: orr x15, x13, x10 4169; -O0: orr x14, x11, x8 4170; -O0: ldxp x10, x12, [x9] 4171; -O0: cmp x10, x11 4172; -O0: cmp x12, x13 4173; -O0: stxp w8, x14, x15, [x9] 4174; -O0: stxp w8, x10, x12, [x9] 4175; -O0: subs x12, x12, x13 4176; -O0: ccmp x10, x11, #0, eq 4177; 4178; -O1-LABEL: atomicrmw_or_i128_aligned_monotonic: 4179; -O1: ldxp x1, x0, [x8] 4180; -O1: orr x9, x0, x2 4181; -O1: orr x10, x1, x3 4182; -O1: stxp w11, x10, x9, [x8] 4183 %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 16 4184 ret i128 %r 4185} 4186 4187define dso_local i128 @atomicrmw_or_i128_aligned_acquire(ptr %ptr, i128 %value) { 4188; -O0-LABEL: atomicrmw_or_i128_aligned_acquire: 4189; -O0: orr x15, x13, x10 4190; -O0: orr x14, x11, x8 4191; -O0: ldaxp x10, x12, [x9] 4192; -O0: cmp x10, x11 4193; -O0: cmp x12, x13 4194; -O0: stxp w8, x14, x15, [x9] 4195; -O0: stxp w8, x10, x12, [x9] 4196; -O0: subs x12, x12, x13 4197; -O0: ccmp x10, x11, #0, eq 4198; 4199; -O1-LABEL: atomicrmw_or_i128_aligned_acquire: 4200; -O1: ldaxp x1, x0, [x8] 4201; -O1: orr x9, x0, x2 4202; -O1: orr x10, x1, x3 4203; -O1: stxp w11, x10, x9, [x8] 4204 %r = atomicrmw or ptr %ptr, i128 %value acquire, align 16 4205 ret i128 %r 4206} 4207 4208define dso_local i128 @atomicrmw_or_i128_aligned_release(ptr %ptr, i128 %value) { 4209; -O0-LABEL: atomicrmw_or_i128_aligned_release: 4210; -O0: orr x15, x13, x10 4211; -O0: orr x14, x11, x8 4212; -O0: ldxp x10, x12, [x9] 4213; -O0: cmp x10, x11 4214; -O0: cmp x12, x13 4215; -O0: stlxp w8, x14, x15, [x9] 4216; -O0: stlxp w8, x10, x12, [x9] 4217; -O0: subs x12, x12, x13 4218; -O0: ccmp x10, x11, #0, eq 4219; 4220; -O1-LABEL: atomicrmw_or_i128_aligned_release: 4221; -O1: ldxp x1, x0, [x8] 4222; -O1: orr x9, x0, x2 4223; -O1: orr x10, x1, x3 4224; -O1: stlxp w11, x10, x9, [x8] 4225 %r = atomicrmw or ptr %ptr, i128 %value release, align 16 4226 ret i128 %r 4227} 4228 4229define dso_local i128 @atomicrmw_or_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 4230; -O0-LABEL: atomicrmw_or_i128_aligned_acq_rel: 4231; -O0: orr x15, x13, x10 4232; -O0: orr x14, x11, x8 4233; -O0: ldaxp x10, x12, [x9] 4234; -O0: cmp x10, x11 4235; -O0: cmp x12, x13 4236; -O0: stlxp w8, x14, x15, [x9] 4237; -O0: stlxp w8, x10, x12, [x9] 4238; -O0: subs x12, x12, x13 4239; -O0: ccmp x10, x11, #0, eq 4240; 4241; -O1-LABEL: atomicrmw_or_i128_aligned_acq_rel: 4242; -O1: ldaxp x1, x0, [x8] 4243; -O1: orr x9, x0, x2 4244; -O1: orr x10, x1, x3 4245; -O1: stlxp w11, x10, x9, [x8] 4246 %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 16 4247 ret i128 %r 4248} 4249 4250define dso_local i128 @atomicrmw_or_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 4251; -O0-LABEL: atomicrmw_or_i128_aligned_seq_cst: 4252; -O0: orr x15, x13, x10 4253; -O0: orr x14, x11, x8 4254; -O0: ldaxp x10, x12, [x9] 4255; -O0: cmp x10, x11 4256; -O0: cmp x12, x13 4257; -O0: stlxp w8, x14, x15, [x9] 4258; -O0: stlxp w8, x10, x12, [x9] 4259; -O0: subs x12, x12, x13 4260; -O0: ccmp x10, x11, #0, eq 4261; 4262; -O1-LABEL: atomicrmw_or_i128_aligned_seq_cst: 4263; -O1: ldaxp x1, x0, [x8] 4264; -O1: orr x9, x0, x2 4265; -O1: orr x10, x1, x3 4266; -O1: stlxp w11, x10, x9, [x8] 4267 %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 16 4268 ret i128 %r 4269} 4270 4271define dso_local i8 @atomicrmw_or_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 4272; -O0-LABEL: atomicrmw_or_i8_unaligned_monotonic: 4273; -O0: orr w12, w9, w8 4274; -O0: ldaxrb w8, [x11] 4275; -O0: cmp w8, w9, uxtb 4276; -O0: stlxrb w10, w12, [x11] 4277; -O0: subs w9, w8, w9, uxtb 4278; -O0: subs w9, w9, #1 4279; 4280; -O1-LABEL: atomicrmw_or_i8_unaligned_monotonic: 4281; -O1: ldxrb w8, [x0] 4282; -O1: orr w9, w8, w1 4283; -O1: stxrb w10, w9, [x0] 4284 %r = atomicrmw or ptr %ptr, i8 %value monotonic, align 1 4285 ret i8 %r 4286} 4287 4288define dso_local i8 @atomicrmw_or_i8_unaligned_acquire(ptr %ptr, i8 %value) { 4289; -O0-LABEL: atomicrmw_or_i8_unaligned_acquire: 4290; -O0: orr w12, w9, w8 4291; -O0: ldaxrb w8, [x11] 4292; -O0: cmp w8, w9, uxtb 4293; -O0: stlxrb w10, w12, [x11] 4294; -O0: subs w9, w8, w9, uxtb 4295; -O0: subs w9, w9, #1 4296; 4297; -O1-LABEL: atomicrmw_or_i8_unaligned_acquire: 4298; -O1: ldaxrb w8, [x0] 4299; -O1: orr w9, w8, w1 4300; -O1: stxrb w10, w9, [x0] 4301 %r = atomicrmw or ptr %ptr, i8 %value acquire, align 1 4302 ret i8 %r 4303} 4304 4305define dso_local i8 @atomicrmw_or_i8_unaligned_release(ptr %ptr, i8 %value) { 4306; -O0-LABEL: atomicrmw_or_i8_unaligned_release: 4307; -O0: orr w12, w9, w8 4308; -O0: ldaxrb w8, [x11] 4309; -O0: cmp w8, w9, uxtb 4310; -O0: stlxrb w10, w12, [x11] 4311; -O0: subs w9, w8, w9, uxtb 4312; -O0: subs w9, w9, #1 4313; 4314; -O1-LABEL: atomicrmw_or_i8_unaligned_release: 4315; -O1: ldxrb w8, [x0] 4316; -O1: orr w9, w8, w1 4317; -O1: stlxrb w10, w9, [x0] 4318 %r = atomicrmw or ptr %ptr, i8 %value release, align 1 4319 ret i8 %r 4320} 4321 4322define dso_local i8 @atomicrmw_or_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 4323; -O0-LABEL: atomicrmw_or_i8_unaligned_acq_rel: 4324; -O0: orr w12, w9, w8 4325; -O0: ldaxrb w8, [x11] 4326; -O0: cmp w8, w9, uxtb 4327; -O0: stlxrb w10, w12, [x11] 4328; -O0: subs w9, w8, w9, uxtb 4329; -O0: subs w9, w9, #1 4330; 4331; -O1-LABEL: atomicrmw_or_i8_unaligned_acq_rel: 4332; -O1: ldaxrb w8, [x0] 4333; -O1: orr w9, w8, w1 4334; -O1: stlxrb w10, w9, [x0] 4335 %r = atomicrmw or ptr %ptr, i8 %value acq_rel, align 1 4336 ret i8 %r 4337} 4338 4339define dso_local i8 @atomicrmw_or_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 4340; -O0-LABEL: atomicrmw_or_i8_unaligned_seq_cst: 4341; -O0: orr w12, w9, w8 4342; -O0: ldaxrb w8, [x11] 4343; -O0: cmp w8, w9, uxtb 4344; -O0: stlxrb w10, w12, [x11] 4345; -O0: subs w9, w8, w9, uxtb 4346; -O0: subs w9, w9, #1 4347; 4348; -O1-LABEL: atomicrmw_or_i8_unaligned_seq_cst: 4349; -O1: ldaxrb w8, [x0] 4350; -O1: orr w9, w8, w1 4351; -O1: stlxrb w10, w9, [x0] 4352 %r = atomicrmw or ptr %ptr, i8 %value seq_cst, align 1 4353 ret i8 %r 4354} 4355 4356define dso_local i16 @atomicrmw_or_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 4357; -O0-LABEL: atomicrmw_or_i16_unaligned_monotonic: 4358; -O0: orr w8, w9, w8 4359; -O0: bl __atomic_compare_exchange 4360; 4361; -O1-LABEL: atomicrmw_or_i16_unaligned_monotonic: 4362; -O1: orr w8, w0, w20 4363; -O1: bl __atomic_compare_exchange 4364 %r = atomicrmw or ptr %ptr, i16 %value monotonic, align 1 4365 ret i16 %r 4366} 4367 4368define dso_local i16 @atomicrmw_or_i16_unaligned_acquire(ptr %ptr, i16 %value) { 4369; -O0-LABEL: atomicrmw_or_i16_unaligned_acquire: 4370; -O0: orr w8, w9, w8 4371; -O0: bl __atomic_compare_exchange 4372; 4373; -O1-LABEL: atomicrmw_or_i16_unaligned_acquire: 4374; -O1: orr w8, w0, w20 4375; -O1: bl __atomic_compare_exchange 4376 %r = atomicrmw or ptr %ptr, i16 %value acquire, align 1 4377 ret i16 %r 4378} 4379 4380define dso_local i16 @atomicrmw_or_i16_unaligned_release(ptr %ptr, i16 %value) { 4381; -O0-LABEL: atomicrmw_or_i16_unaligned_release: 4382; -O0: orr w8, w9, w8 4383; -O0: bl __atomic_compare_exchange 4384; 4385; -O1-LABEL: atomicrmw_or_i16_unaligned_release: 4386; -O1: orr w8, w0, w20 4387; -O1: bl __atomic_compare_exchange 4388 %r = atomicrmw or ptr %ptr, i16 %value release, align 1 4389 ret i16 %r 4390} 4391 4392define dso_local i16 @atomicrmw_or_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 4393; -O0-LABEL: atomicrmw_or_i16_unaligned_acq_rel: 4394; -O0: orr w8, w9, w8 4395; -O0: bl __atomic_compare_exchange 4396; 4397; -O1-LABEL: atomicrmw_or_i16_unaligned_acq_rel: 4398; -O1: orr w8, w0, w20 4399; -O1: bl __atomic_compare_exchange 4400 %r = atomicrmw or ptr %ptr, i16 %value acq_rel, align 1 4401 ret i16 %r 4402} 4403 4404define dso_local i16 @atomicrmw_or_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 4405; -O0-LABEL: atomicrmw_or_i16_unaligned_seq_cst: 4406; -O0: orr w8, w9, w8 4407; -O0: bl __atomic_compare_exchange 4408; 4409; -O1-LABEL: atomicrmw_or_i16_unaligned_seq_cst: 4410; -O1: orr w8, w0, w20 4411; -O1: bl __atomic_compare_exchange 4412 %r = atomicrmw or ptr %ptr, i16 %value seq_cst, align 1 4413 ret i16 %r 4414} 4415 4416define dso_local i32 @atomicrmw_or_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 4417; -O0-LABEL: atomicrmw_or_i32_unaligned_monotonic: 4418; -O0: orr w8, w9, w8 4419; -O0: bl __atomic_compare_exchange 4420; 4421; -O1-LABEL: atomicrmw_or_i32_unaligned_monotonic: 4422; -O1: orr w8, w0, w20 4423; -O1: bl __atomic_compare_exchange 4424 %r = atomicrmw or ptr %ptr, i32 %value monotonic, align 1 4425 ret i32 %r 4426} 4427 4428define dso_local i32 @atomicrmw_or_i32_unaligned_acquire(ptr %ptr, i32 %value) { 4429; -O0-LABEL: atomicrmw_or_i32_unaligned_acquire: 4430; -O0: orr w8, w9, w8 4431; -O0: bl __atomic_compare_exchange 4432; 4433; -O1-LABEL: atomicrmw_or_i32_unaligned_acquire: 4434; -O1: orr w8, w0, w20 4435; -O1: bl __atomic_compare_exchange 4436 %r = atomicrmw or ptr %ptr, i32 %value acquire, align 1 4437 ret i32 %r 4438} 4439 4440define dso_local i32 @atomicrmw_or_i32_unaligned_release(ptr %ptr, i32 %value) { 4441; -O0-LABEL: atomicrmw_or_i32_unaligned_release: 4442; -O0: orr w8, w9, w8 4443; -O0: bl __atomic_compare_exchange 4444; 4445; -O1-LABEL: atomicrmw_or_i32_unaligned_release: 4446; -O1: orr w8, w0, w20 4447; -O1: bl __atomic_compare_exchange 4448 %r = atomicrmw or ptr %ptr, i32 %value release, align 1 4449 ret i32 %r 4450} 4451 4452define dso_local i32 @atomicrmw_or_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 4453; -O0-LABEL: atomicrmw_or_i32_unaligned_acq_rel: 4454; -O0: orr w8, w9, w8 4455; -O0: bl __atomic_compare_exchange 4456; 4457; -O1-LABEL: atomicrmw_or_i32_unaligned_acq_rel: 4458; -O1: orr w8, w0, w20 4459; -O1: bl __atomic_compare_exchange 4460 %r = atomicrmw or ptr %ptr, i32 %value acq_rel, align 1 4461 ret i32 %r 4462} 4463 4464define dso_local i32 @atomicrmw_or_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 4465; -O0-LABEL: atomicrmw_or_i32_unaligned_seq_cst: 4466; -O0: orr w8, w9, w8 4467; -O0: bl __atomic_compare_exchange 4468; 4469; -O1-LABEL: atomicrmw_or_i32_unaligned_seq_cst: 4470; -O1: orr w8, w0, w20 4471; -O1: bl __atomic_compare_exchange 4472 %r = atomicrmw or ptr %ptr, i32 %value seq_cst, align 1 4473 ret i32 %r 4474} 4475 4476define dso_local i64 @atomicrmw_or_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 4477; -O0-LABEL: atomicrmw_or_i64_unaligned_monotonic: 4478; -O0: orr x8, x9, x8 4479; -O0: bl __atomic_compare_exchange 4480; 4481; -O1-LABEL: atomicrmw_or_i64_unaligned_monotonic: 4482; -O1: orr x8, x0, x20 4483; -O1: bl __atomic_compare_exchange 4484 %r = atomicrmw or ptr %ptr, i64 %value monotonic, align 1 4485 ret i64 %r 4486} 4487 4488define dso_local i64 @atomicrmw_or_i64_unaligned_acquire(ptr %ptr, i64 %value) { 4489; -O0-LABEL: atomicrmw_or_i64_unaligned_acquire: 4490; -O0: orr x8, x9, x8 4491; -O0: bl __atomic_compare_exchange 4492; 4493; -O1-LABEL: atomicrmw_or_i64_unaligned_acquire: 4494; -O1: orr x8, x0, x20 4495; -O1: bl __atomic_compare_exchange 4496 %r = atomicrmw or ptr %ptr, i64 %value acquire, align 1 4497 ret i64 %r 4498} 4499 4500define dso_local i64 @atomicrmw_or_i64_unaligned_release(ptr %ptr, i64 %value) { 4501; -O0-LABEL: atomicrmw_or_i64_unaligned_release: 4502; -O0: orr x8, x9, x8 4503; -O0: bl __atomic_compare_exchange 4504; 4505; -O1-LABEL: atomicrmw_or_i64_unaligned_release: 4506; -O1: orr x8, x0, x20 4507; -O1: bl __atomic_compare_exchange 4508 %r = atomicrmw or ptr %ptr, i64 %value release, align 1 4509 ret i64 %r 4510} 4511 4512define dso_local i64 @atomicrmw_or_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 4513; -O0-LABEL: atomicrmw_or_i64_unaligned_acq_rel: 4514; -O0: orr x8, x9, x8 4515; -O0: bl __atomic_compare_exchange 4516; 4517; -O1-LABEL: atomicrmw_or_i64_unaligned_acq_rel: 4518; -O1: orr x8, x0, x20 4519; -O1: bl __atomic_compare_exchange 4520 %r = atomicrmw or ptr %ptr, i64 %value acq_rel, align 1 4521 ret i64 %r 4522} 4523 4524define dso_local i64 @atomicrmw_or_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 4525; -O0-LABEL: atomicrmw_or_i64_unaligned_seq_cst: 4526; -O0: orr x8, x9, x8 4527; -O0: bl __atomic_compare_exchange 4528; 4529; -O1-LABEL: atomicrmw_or_i64_unaligned_seq_cst: 4530; -O1: orr x8, x0, x20 4531; -O1: bl __atomic_compare_exchange 4532 %r = atomicrmw or ptr %ptr, i64 %value seq_cst, align 1 4533 ret i64 %r 4534} 4535 4536define dso_local i128 @atomicrmw_or_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 4537; -O0-LABEL: atomicrmw_or_i128_unaligned_monotonic: 4538; -O0: orr x8, x11, x8 4539; -O0: orr x9, x10, x9 4540; -O0: bl __atomic_compare_exchange 4541; 4542; -O1-LABEL: atomicrmw_or_i128_unaligned_monotonic: 4543; -O1: ldp x0, x1, [x0] 4544; -O1: orr x8, x1, x19 4545; -O1: orr x9, x0, x21 4546; -O1: bl __atomic_compare_exchange 4547 %r = atomicrmw or ptr %ptr, i128 %value monotonic, align 1 4548 ret i128 %r 4549} 4550 4551define dso_local i128 @atomicrmw_or_i128_unaligned_acquire(ptr %ptr, i128 %value) { 4552; -O0-LABEL: atomicrmw_or_i128_unaligned_acquire: 4553; -O0: orr x8, x11, x8 4554; -O0: orr x9, x10, x9 4555; -O0: bl __atomic_compare_exchange 4556; 4557; -O1-LABEL: atomicrmw_or_i128_unaligned_acquire: 4558; -O1: ldp x0, x1, [x0] 4559; -O1: orr x8, x1, x19 4560; -O1: orr x9, x0, x21 4561; -O1: bl __atomic_compare_exchange 4562 %r = atomicrmw or ptr %ptr, i128 %value acquire, align 1 4563 ret i128 %r 4564} 4565 4566define dso_local i128 @atomicrmw_or_i128_unaligned_release(ptr %ptr, i128 %value) { 4567; -O0-LABEL: atomicrmw_or_i128_unaligned_release: 4568; -O0: orr x8, x11, x8 4569; -O0: orr x9, x10, x9 4570; -O0: bl __atomic_compare_exchange 4571; 4572; -O1-LABEL: atomicrmw_or_i128_unaligned_release: 4573; -O1: ldp x0, x1, [x0] 4574; -O1: orr x8, x1, x19 4575; -O1: orr x9, x0, x21 4576; -O1: bl __atomic_compare_exchange 4577 %r = atomicrmw or ptr %ptr, i128 %value release, align 1 4578 ret i128 %r 4579} 4580 4581define dso_local i128 @atomicrmw_or_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 4582; -O0-LABEL: atomicrmw_or_i128_unaligned_acq_rel: 4583; -O0: orr x8, x11, x8 4584; -O0: orr x9, x10, x9 4585; -O0: bl __atomic_compare_exchange 4586; 4587; -O1-LABEL: atomicrmw_or_i128_unaligned_acq_rel: 4588; -O1: ldp x0, x1, [x0] 4589; -O1: orr x8, x1, x19 4590; -O1: orr x9, x0, x21 4591; -O1: bl __atomic_compare_exchange 4592 %r = atomicrmw or ptr %ptr, i128 %value acq_rel, align 1 4593 ret i128 %r 4594} 4595 4596define dso_local i128 @atomicrmw_or_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 4597; -O0-LABEL: atomicrmw_or_i128_unaligned_seq_cst: 4598; -O0: orr x8, x11, x8 4599; -O0: orr x9, x10, x9 4600; -O0: bl __atomic_compare_exchange 4601; 4602; -O1-LABEL: atomicrmw_or_i128_unaligned_seq_cst: 4603; -O1: ldp x0, x1, [x0] 4604; -O1: orr x8, x1, x19 4605; -O1: orr x9, x0, x21 4606; -O1: bl __atomic_compare_exchange 4607 %r = atomicrmw or ptr %ptr, i128 %value seq_cst, align 1 4608 ret i128 %r 4609} 4610 4611define dso_local i8 @atomicrmw_xor_i8_aligned_monotonic(ptr %ptr, i8 %value) { 4612; -O0-LABEL: atomicrmw_xor_i8_aligned_monotonic: 4613; -O0: eor w12, w9, w8 4614; -O0: ldaxrb w8, [x11] 4615; -O0: cmp w8, w9, uxtb 4616; -O0: stlxrb w10, w12, [x11] 4617; -O0: subs w9, w8, w9, uxtb 4618; -O0: subs w9, w9, #1 4619; 4620; -O1-LABEL: atomicrmw_xor_i8_aligned_monotonic: 4621; -O1: ldxrb w8, [x0] 4622; -O1: eor w9, w8, w1 4623; -O1: stxrb w10, w9, [x0] 4624 %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 1 4625 ret i8 %r 4626} 4627 4628define dso_local i8 @atomicrmw_xor_i8_aligned_acquire(ptr %ptr, i8 %value) { 4629; -O0-LABEL: atomicrmw_xor_i8_aligned_acquire: 4630; -O0: eor w12, w9, w8 4631; -O0: ldaxrb w8, [x11] 4632; -O0: cmp w8, w9, uxtb 4633; -O0: stlxrb w10, w12, [x11] 4634; -O0: subs w9, w8, w9, uxtb 4635; -O0: subs w9, w9, #1 4636; 4637; -O1-LABEL: atomicrmw_xor_i8_aligned_acquire: 4638; -O1: ldaxrb w8, [x0] 4639; -O1: eor w9, w8, w1 4640; -O1: stxrb w10, w9, [x0] 4641 %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 1 4642 ret i8 %r 4643} 4644 4645define dso_local i8 @atomicrmw_xor_i8_aligned_release(ptr %ptr, i8 %value) { 4646; -O0-LABEL: atomicrmw_xor_i8_aligned_release: 4647; -O0: eor w12, w9, w8 4648; -O0: ldaxrb w8, [x11] 4649; -O0: cmp w8, w9, uxtb 4650; -O0: stlxrb w10, w12, [x11] 4651; -O0: subs w9, w8, w9, uxtb 4652; -O0: subs w9, w9, #1 4653; 4654; -O1-LABEL: atomicrmw_xor_i8_aligned_release: 4655; -O1: ldxrb w8, [x0] 4656; -O1: eor w9, w8, w1 4657; -O1: stlxrb w10, w9, [x0] 4658 %r = atomicrmw xor ptr %ptr, i8 %value release, align 1 4659 ret i8 %r 4660} 4661 4662define dso_local i8 @atomicrmw_xor_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 4663; -O0-LABEL: atomicrmw_xor_i8_aligned_acq_rel: 4664; -O0: eor w12, w9, w8 4665; -O0: ldaxrb w8, [x11] 4666; -O0: cmp w8, w9, uxtb 4667; -O0: stlxrb w10, w12, [x11] 4668; -O0: subs w9, w8, w9, uxtb 4669; -O0: subs w9, w9, #1 4670; 4671; -O1-LABEL: atomicrmw_xor_i8_aligned_acq_rel: 4672; -O1: ldaxrb w8, [x0] 4673; -O1: eor w9, w8, w1 4674; -O1: stlxrb w10, w9, [x0] 4675 %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 1 4676 ret i8 %r 4677} 4678 4679define dso_local i8 @atomicrmw_xor_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 4680; -O0-LABEL: atomicrmw_xor_i8_aligned_seq_cst: 4681; -O0: eor w12, w9, w8 4682; -O0: ldaxrb w8, [x11] 4683; -O0: cmp w8, w9, uxtb 4684; -O0: stlxrb w10, w12, [x11] 4685; -O0: subs w9, w8, w9, uxtb 4686; -O0: subs w9, w9, #1 4687; 4688; -O1-LABEL: atomicrmw_xor_i8_aligned_seq_cst: 4689; -O1: ldaxrb w8, [x0] 4690; -O1: eor w9, w8, w1 4691; -O1: stlxrb w10, w9, [x0] 4692 %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 1 4693 ret i8 %r 4694} 4695 4696define dso_local i16 @atomicrmw_xor_i16_aligned_monotonic(ptr %ptr, i16 %value) { 4697; -O0-LABEL: atomicrmw_xor_i16_aligned_monotonic: 4698; -O0: eor w12, w9, w8 4699; -O0: ldaxrh w8, [x11] 4700; -O0: cmp w8, w9, uxth 4701; -O0: stlxrh w10, w12, [x11] 4702; -O0: subs w9, w8, w9, uxth 4703; -O0: subs w9, w9, #1 4704; 4705; -O1-LABEL: atomicrmw_xor_i16_aligned_monotonic: 4706; -O1: ldxrh w8, [x0] 4707; -O1: eor w9, w8, w1 4708; -O1: stxrh w10, w9, [x0] 4709 %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 2 4710 ret i16 %r 4711} 4712 4713define dso_local i16 @atomicrmw_xor_i16_aligned_acquire(ptr %ptr, i16 %value) { 4714; -O0-LABEL: atomicrmw_xor_i16_aligned_acquire: 4715; -O0: eor w12, w9, w8 4716; -O0: ldaxrh w8, [x11] 4717; -O0: cmp w8, w9, uxth 4718; -O0: stlxrh w10, w12, [x11] 4719; -O0: subs w9, w8, w9, uxth 4720; -O0: subs w9, w9, #1 4721; 4722; -O1-LABEL: atomicrmw_xor_i16_aligned_acquire: 4723; -O1: ldaxrh w8, [x0] 4724; -O1: eor w9, w8, w1 4725; -O1: stxrh w10, w9, [x0] 4726 %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 2 4727 ret i16 %r 4728} 4729 4730define dso_local i16 @atomicrmw_xor_i16_aligned_release(ptr %ptr, i16 %value) { 4731; -O0-LABEL: atomicrmw_xor_i16_aligned_release: 4732; -O0: eor w12, w9, w8 4733; -O0: ldaxrh w8, [x11] 4734; -O0: cmp w8, w9, uxth 4735; -O0: stlxrh w10, w12, [x11] 4736; -O0: subs w9, w8, w9, uxth 4737; -O0: subs w9, w9, #1 4738; 4739; -O1-LABEL: atomicrmw_xor_i16_aligned_release: 4740; -O1: ldxrh w8, [x0] 4741; -O1: eor w9, w8, w1 4742; -O1: stlxrh w10, w9, [x0] 4743 %r = atomicrmw xor ptr %ptr, i16 %value release, align 2 4744 ret i16 %r 4745} 4746 4747define dso_local i16 @atomicrmw_xor_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 4748; -O0-LABEL: atomicrmw_xor_i16_aligned_acq_rel: 4749; -O0: eor w12, w9, w8 4750; -O0: ldaxrh w8, [x11] 4751; -O0: cmp w8, w9, uxth 4752; -O0: stlxrh w10, w12, [x11] 4753; -O0: subs w9, w8, w9, uxth 4754; -O0: subs w9, w9, #1 4755; 4756; -O1-LABEL: atomicrmw_xor_i16_aligned_acq_rel: 4757; -O1: ldaxrh w8, [x0] 4758; -O1: eor w9, w8, w1 4759; -O1: stlxrh w10, w9, [x0] 4760 %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 2 4761 ret i16 %r 4762} 4763 4764define dso_local i16 @atomicrmw_xor_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 4765; -O0-LABEL: atomicrmw_xor_i16_aligned_seq_cst: 4766; -O0: eor w12, w9, w8 4767; -O0: ldaxrh w8, [x11] 4768; -O0: cmp w8, w9, uxth 4769; -O0: stlxrh w10, w12, [x11] 4770; -O0: subs w9, w8, w9, uxth 4771; -O0: subs w9, w9, #1 4772; 4773; -O1-LABEL: atomicrmw_xor_i16_aligned_seq_cst: 4774; -O1: ldaxrh w8, [x0] 4775; -O1: eor w9, w8, w1 4776; -O1: stlxrh w10, w9, [x0] 4777 %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 2 4778 ret i16 %r 4779} 4780 4781define dso_local i32 @atomicrmw_xor_i32_aligned_monotonic(ptr %ptr, i32 %value) { 4782; -O0-LABEL: atomicrmw_xor_i32_aligned_monotonic: 4783; -O0: eor w12, w9, w8 4784; -O0: ldaxr w8, [x11] 4785; -O0: cmp w8, w9 4786; -O0: stlxr w10, w12, [x11] 4787; -O0: subs w9, w8, w9 4788; -O0: subs w9, w9, #1 4789; 4790; -O1-LABEL: atomicrmw_xor_i32_aligned_monotonic: 4791; -O1: ldxr w8, [x0] 4792; -O1: eor w9, w8, w1 4793; -O1: stxr w10, w9, [x0] 4794 %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 4 4795 ret i32 %r 4796} 4797 4798define dso_local i32 @atomicrmw_xor_i32_aligned_acquire(ptr %ptr, i32 %value) { 4799; -O0-LABEL: atomicrmw_xor_i32_aligned_acquire: 4800; -O0: eor w12, w9, w8 4801; -O0: ldaxr w8, [x11] 4802; -O0: cmp w8, w9 4803; -O0: stlxr w10, w12, [x11] 4804; -O0: subs w9, w8, w9 4805; -O0: subs w9, w9, #1 4806; 4807; -O1-LABEL: atomicrmw_xor_i32_aligned_acquire: 4808; -O1: ldaxr w8, [x0] 4809; -O1: eor w9, w8, w1 4810; -O1: stxr w10, w9, [x0] 4811 %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 4 4812 ret i32 %r 4813} 4814 4815define dso_local i32 @atomicrmw_xor_i32_aligned_release(ptr %ptr, i32 %value) { 4816; -O0-LABEL: atomicrmw_xor_i32_aligned_release: 4817; -O0: eor w12, w9, w8 4818; -O0: ldaxr w8, [x11] 4819; -O0: cmp w8, w9 4820; -O0: stlxr w10, w12, [x11] 4821; -O0: subs w9, w8, w9 4822; -O0: subs w9, w9, #1 4823; 4824; -O1-LABEL: atomicrmw_xor_i32_aligned_release: 4825; -O1: ldxr w8, [x0] 4826; -O1: eor w9, w8, w1 4827; -O1: stlxr w10, w9, [x0] 4828 %r = atomicrmw xor ptr %ptr, i32 %value release, align 4 4829 ret i32 %r 4830} 4831 4832define dso_local i32 @atomicrmw_xor_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 4833; -O0-LABEL: atomicrmw_xor_i32_aligned_acq_rel: 4834; -O0: eor w12, w9, w8 4835; -O0: ldaxr w8, [x11] 4836; -O0: cmp w8, w9 4837; -O0: stlxr w10, w12, [x11] 4838; -O0: subs w9, w8, w9 4839; -O0: subs w9, w9, #1 4840; 4841; -O1-LABEL: atomicrmw_xor_i32_aligned_acq_rel: 4842; -O1: ldaxr w8, [x0] 4843; -O1: eor w9, w8, w1 4844; -O1: stlxr w10, w9, [x0] 4845 %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 4 4846 ret i32 %r 4847} 4848 4849define dso_local i32 @atomicrmw_xor_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 4850; -O0-LABEL: atomicrmw_xor_i32_aligned_seq_cst: 4851; -O0: eor w12, w9, w8 4852; -O0: ldaxr w8, [x11] 4853; -O0: cmp w8, w9 4854; -O0: stlxr w10, w12, [x11] 4855; -O0: subs w9, w8, w9 4856; -O0: subs w9, w9, #1 4857; 4858; -O1-LABEL: atomicrmw_xor_i32_aligned_seq_cst: 4859; -O1: ldaxr w8, [x0] 4860; -O1: eor w9, w8, w1 4861; -O1: stlxr w10, w9, [x0] 4862 %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 4 4863 ret i32 %r 4864} 4865 4866define dso_local i64 @atomicrmw_xor_i64_aligned_monotonic(ptr %ptr, i64 %value) { 4867; -O0-LABEL: atomicrmw_xor_i64_aligned_monotonic: 4868; -O0: eor x12, x9, x8 4869; -O0: ldaxr x8, [x11] 4870; -O0: cmp x8, x9 4871; -O0: stlxr w10, x12, [x11] 4872; -O0: subs x9, x8, x9 4873; -O0: subs w9, w9, #1 4874; 4875; -O1-LABEL: atomicrmw_xor_i64_aligned_monotonic: 4876; -O1: ldxr x0, [x8] 4877; -O1: eor x9, x0, x1 4878; -O1: stxr w10, x9, [x8] 4879 %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 8 4880 ret i64 %r 4881} 4882 4883define dso_local i64 @atomicrmw_xor_i64_aligned_acquire(ptr %ptr, i64 %value) { 4884; -O0-LABEL: atomicrmw_xor_i64_aligned_acquire: 4885; -O0: eor x12, x9, x8 4886; -O0: ldaxr x8, [x11] 4887; -O0: cmp x8, x9 4888; -O0: stlxr w10, x12, [x11] 4889; -O0: subs x9, x8, x9 4890; -O0: subs w9, w9, #1 4891; 4892; -O1-LABEL: atomicrmw_xor_i64_aligned_acquire: 4893; -O1: ldaxr x0, [x8] 4894; -O1: eor x9, x0, x1 4895; -O1: stxr w10, x9, [x8] 4896 %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 8 4897 ret i64 %r 4898} 4899 4900define dso_local i64 @atomicrmw_xor_i64_aligned_release(ptr %ptr, i64 %value) { 4901; -O0-LABEL: atomicrmw_xor_i64_aligned_release: 4902; -O0: eor x12, x9, x8 4903; -O0: ldaxr x8, [x11] 4904; -O0: cmp x8, x9 4905; -O0: stlxr w10, x12, [x11] 4906; -O0: subs x9, x8, x9 4907; -O0: subs w9, w9, #1 4908; 4909; -O1-LABEL: atomicrmw_xor_i64_aligned_release: 4910; -O1: ldxr x0, [x8] 4911; -O1: eor x9, x0, x1 4912; -O1: stlxr w10, x9, [x8] 4913 %r = atomicrmw xor ptr %ptr, i64 %value release, align 8 4914 ret i64 %r 4915} 4916 4917define dso_local i64 @atomicrmw_xor_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 4918; -O0-LABEL: atomicrmw_xor_i64_aligned_acq_rel: 4919; -O0: eor x12, x9, x8 4920; -O0: ldaxr x8, [x11] 4921; -O0: cmp x8, x9 4922; -O0: stlxr w10, x12, [x11] 4923; -O0: subs x9, x8, x9 4924; -O0: subs w9, w9, #1 4925; 4926; -O1-LABEL: atomicrmw_xor_i64_aligned_acq_rel: 4927; -O1: ldaxr x0, [x8] 4928; -O1: eor x9, x0, x1 4929; -O1: stlxr w10, x9, [x8] 4930 %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 8 4931 ret i64 %r 4932} 4933 4934define dso_local i64 @atomicrmw_xor_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 4935; -O0-LABEL: atomicrmw_xor_i64_aligned_seq_cst: 4936; -O0: eor x12, x9, x8 4937; -O0: ldaxr x8, [x11] 4938; -O0: cmp x8, x9 4939; -O0: stlxr w10, x12, [x11] 4940; -O0: subs x9, x8, x9 4941; -O0: subs w9, w9, #1 4942; 4943; -O1-LABEL: atomicrmw_xor_i64_aligned_seq_cst: 4944; -O1: ldaxr x0, [x8] 4945; -O1: eor x9, x0, x1 4946; -O1: stlxr w10, x9, [x8] 4947 %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 8 4948 ret i64 %r 4949} 4950 4951define dso_local i128 @atomicrmw_xor_i128_aligned_monotonic(ptr %ptr, i128 %value) { 4952; -O0-LABEL: atomicrmw_xor_i128_aligned_monotonic: 4953; -O0: eor x15, x13, x10 4954; -O0: eor x14, x11, x8 4955; -O0: ldxp x10, x12, [x9] 4956; -O0: cmp x10, x11 4957; -O0: cmp x12, x13 4958; -O0: stxp w8, x14, x15, [x9] 4959; -O0: stxp w8, x10, x12, [x9] 4960; -O0: subs x12, x12, x13 4961; -O0: ccmp x10, x11, #0, eq 4962; 4963; -O1-LABEL: atomicrmw_xor_i128_aligned_monotonic: 4964; -O1: ldxp x1, x0, [x8] 4965; -O1: eor x9, x0, x2 4966; -O1: eor x10, x1, x3 4967; -O1: stxp w11, x10, x9, [x8] 4968 %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 16 4969 ret i128 %r 4970} 4971 4972define dso_local i128 @atomicrmw_xor_i128_aligned_acquire(ptr %ptr, i128 %value) { 4973; -O0-LABEL: atomicrmw_xor_i128_aligned_acquire: 4974; -O0: eor x15, x13, x10 4975; -O0: eor x14, x11, x8 4976; -O0: ldaxp x10, x12, [x9] 4977; -O0: cmp x10, x11 4978; -O0: cmp x12, x13 4979; -O0: stxp w8, x14, x15, [x9] 4980; -O0: stxp w8, x10, x12, [x9] 4981; -O0: subs x12, x12, x13 4982; -O0: ccmp x10, x11, #0, eq 4983; 4984; -O1-LABEL: atomicrmw_xor_i128_aligned_acquire: 4985; -O1: ldaxp x1, x0, [x8] 4986; -O1: eor x9, x0, x2 4987; -O1: eor x10, x1, x3 4988; -O1: stxp w11, x10, x9, [x8] 4989 %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 16 4990 ret i128 %r 4991} 4992 4993define dso_local i128 @atomicrmw_xor_i128_aligned_release(ptr %ptr, i128 %value) { 4994; -O0-LABEL: atomicrmw_xor_i128_aligned_release: 4995; -O0: eor x15, x13, x10 4996; -O0: eor x14, x11, x8 4997; -O0: ldxp x10, x12, [x9] 4998; -O0: cmp x10, x11 4999; -O0: cmp x12, x13 5000; -O0: stlxp w8, x14, x15, [x9] 5001; -O0: stlxp w8, x10, x12, [x9] 5002; -O0: subs x12, x12, x13 5003; -O0: ccmp x10, x11, #0, eq 5004; 5005; -O1-LABEL: atomicrmw_xor_i128_aligned_release: 5006; -O1: ldxp x1, x0, [x8] 5007; -O1: eor x9, x0, x2 5008; -O1: eor x10, x1, x3 5009; -O1: stlxp w11, x10, x9, [x8] 5010 %r = atomicrmw xor ptr %ptr, i128 %value release, align 16 5011 ret i128 %r 5012} 5013 5014define dso_local i128 @atomicrmw_xor_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 5015; -O0-LABEL: atomicrmw_xor_i128_aligned_acq_rel: 5016; -O0: eor x15, x13, x10 5017; -O0: eor x14, x11, x8 5018; -O0: ldaxp x10, x12, [x9] 5019; -O0: cmp x10, x11 5020; -O0: cmp x12, x13 5021; -O0: stlxp w8, x14, x15, [x9] 5022; -O0: stlxp w8, x10, x12, [x9] 5023; -O0: subs x12, x12, x13 5024; -O0: ccmp x10, x11, #0, eq 5025; 5026; -O1-LABEL: atomicrmw_xor_i128_aligned_acq_rel: 5027; -O1: ldaxp x1, x0, [x8] 5028; -O1: eor x9, x0, x2 5029; -O1: eor x10, x1, x3 5030; -O1: stlxp w11, x10, x9, [x8] 5031 %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 16 5032 ret i128 %r 5033} 5034 5035define dso_local i128 @atomicrmw_xor_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 5036; -O0-LABEL: atomicrmw_xor_i128_aligned_seq_cst: 5037; -O0: eor x15, x13, x10 5038; -O0: eor x14, x11, x8 5039; -O0: ldaxp x10, x12, [x9] 5040; -O0: cmp x10, x11 5041; -O0: cmp x12, x13 5042; -O0: stlxp w8, x14, x15, [x9] 5043; -O0: stlxp w8, x10, x12, [x9] 5044; -O0: subs x12, x12, x13 5045; -O0: ccmp x10, x11, #0, eq 5046; 5047; -O1-LABEL: atomicrmw_xor_i128_aligned_seq_cst: 5048; -O1: ldaxp x1, x0, [x8] 5049; -O1: eor x9, x0, x2 5050; -O1: eor x10, x1, x3 5051; -O1: stlxp w11, x10, x9, [x8] 5052 %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 16 5053 ret i128 %r 5054} 5055 5056define dso_local i8 @atomicrmw_xor_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 5057; -O0-LABEL: atomicrmw_xor_i8_unaligned_monotonic: 5058; -O0: eor w12, w9, w8 5059; -O0: ldaxrb w8, [x11] 5060; -O0: cmp w8, w9, uxtb 5061; -O0: stlxrb w10, w12, [x11] 5062; -O0: subs w9, w8, w9, uxtb 5063; -O0: subs w9, w9, #1 5064; 5065; -O1-LABEL: atomicrmw_xor_i8_unaligned_monotonic: 5066; -O1: ldxrb w8, [x0] 5067; -O1: eor w9, w8, w1 5068; -O1: stxrb w10, w9, [x0] 5069 %r = atomicrmw xor ptr %ptr, i8 %value monotonic, align 1 5070 ret i8 %r 5071} 5072 5073define dso_local i8 @atomicrmw_xor_i8_unaligned_acquire(ptr %ptr, i8 %value) { 5074; -O0-LABEL: atomicrmw_xor_i8_unaligned_acquire: 5075; -O0: eor w12, w9, w8 5076; -O0: ldaxrb w8, [x11] 5077; -O0: cmp w8, w9, uxtb 5078; -O0: stlxrb w10, w12, [x11] 5079; -O0: subs w9, w8, w9, uxtb 5080; -O0: subs w9, w9, #1 5081; 5082; -O1-LABEL: atomicrmw_xor_i8_unaligned_acquire: 5083; -O1: ldaxrb w8, [x0] 5084; -O1: eor w9, w8, w1 5085; -O1: stxrb w10, w9, [x0] 5086 %r = atomicrmw xor ptr %ptr, i8 %value acquire, align 1 5087 ret i8 %r 5088} 5089 5090define dso_local i8 @atomicrmw_xor_i8_unaligned_release(ptr %ptr, i8 %value) { 5091; -O0-LABEL: atomicrmw_xor_i8_unaligned_release: 5092; -O0: eor w12, w9, w8 5093; -O0: ldaxrb w8, [x11] 5094; -O0: cmp w8, w9, uxtb 5095; -O0: stlxrb w10, w12, [x11] 5096; -O0: subs w9, w8, w9, uxtb 5097; -O0: subs w9, w9, #1 5098; 5099; -O1-LABEL: atomicrmw_xor_i8_unaligned_release: 5100; -O1: ldxrb w8, [x0] 5101; -O1: eor w9, w8, w1 5102; -O1: stlxrb w10, w9, [x0] 5103 %r = atomicrmw xor ptr %ptr, i8 %value release, align 1 5104 ret i8 %r 5105} 5106 5107define dso_local i8 @atomicrmw_xor_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 5108; -O0-LABEL: atomicrmw_xor_i8_unaligned_acq_rel: 5109; -O0: eor w12, w9, w8 5110; -O0: ldaxrb w8, [x11] 5111; -O0: cmp w8, w9, uxtb 5112; -O0: stlxrb w10, w12, [x11] 5113; -O0: subs w9, w8, w9, uxtb 5114; -O0: subs w9, w9, #1 5115; 5116; -O1-LABEL: atomicrmw_xor_i8_unaligned_acq_rel: 5117; -O1: ldaxrb w8, [x0] 5118; -O1: eor w9, w8, w1 5119; -O1: stlxrb w10, w9, [x0] 5120 %r = atomicrmw xor ptr %ptr, i8 %value acq_rel, align 1 5121 ret i8 %r 5122} 5123 5124define dso_local i8 @atomicrmw_xor_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 5125; -O0-LABEL: atomicrmw_xor_i8_unaligned_seq_cst: 5126; -O0: eor w12, w9, w8 5127; -O0: ldaxrb w8, [x11] 5128; -O0: cmp w8, w9, uxtb 5129; -O0: stlxrb w10, w12, [x11] 5130; -O0: subs w9, w8, w9, uxtb 5131; -O0: subs w9, w9, #1 5132; 5133; -O1-LABEL: atomicrmw_xor_i8_unaligned_seq_cst: 5134; -O1: ldaxrb w8, [x0] 5135; -O1: eor w9, w8, w1 5136; -O1: stlxrb w10, w9, [x0] 5137 %r = atomicrmw xor ptr %ptr, i8 %value seq_cst, align 1 5138 ret i8 %r 5139} 5140 5141define dso_local i16 @atomicrmw_xor_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 5142; -O0-LABEL: atomicrmw_xor_i16_unaligned_monotonic: 5143; -O0: eor w8, w9, w8 5144; -O0: bl __atomic_compare_exchange 5145; 5146; -O1-LABEL: atomicrmw_xor_i16_unaligned_monotonic: 5147; -O1: eor w8, w0, w20 5148; -O1: bl __atomic_compare_exchange 5149 %r = atomicrmw xor ptr %ptr, i16 %value monotonic, align 1 5150 ret i16 %r 5151} 5152 5153define dso_local i16 @atomicrmw_xor_i16_unaligned_acquire(ptr %ptr, i16 %value) { 5154; -O0-LABEL: atomicrmw_xor_i16_unaligned_acquire: 5155; -O0: eor w8, w9, w8 5156; -O0: bl __atomic_compare_exchange 5157; 5158; -O1-LABEL: atomicrmw_xor_i16_unaligned_acquire: 5159; -O1: eor w8, w0, w20 5160; -O1: bl __atomic_compare_exchange 5161 %r = atomicrmw xor ptr %ptr, i16 %value acquire, align 1 5162 ret i16 %r 5163} 5164 5165define dso_local i16 @atomicrmw_xor_i16_unaligned_release(ptr %ptr, i16 %value) { 5166; -O0-LABEL: atomicrmw_xor_i16_unaligned_release: 5167; -O0: eor w8, w9, w8 5168; -O0: bl __atomic_compare_exchange 5169; 5170; -O1-LABEL: atomicrmw_xor_i16_unaligned_release: 5171; -O1: eor w8, w0, w20 5172; -O1: bl __atomic_compare_exchange 5173 %r = atomicrmw xor ptr %ptr, i16 %value release, align 1 5174 ret i16 %r 5175} 5176 5177define dso_local i16 @atomicrmw_xor_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 5178; -O0-LABEL: atomicrmw_xor_i16_unaligned_acq_rel: 5179; -O0: eor w8, w9, w8 5180; -O0: bl __atomic_compare_exchange 5181; 5182; -O1-LABEL: atomicrmw_xor_i16_unaligned_acq_rel: 5183; -O1: eor w8, w0, w20 5184; -O1: bl __atomic_compare_exchange 5185 %r = atomicrmw xor ptr %ptr, i16 %value acq_rel, align 1 5186 ret i16 %r 5187} 5188 5189define dso_local i16 @atomicrmw_xor_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 5190; -O0-LABEL: atomicrmw_xor_i16_unaligned_seq_cst: 5191; -O0: eor w8, w9, w8 5192; -O0: bl __atomic_compare_exchange 5193; 5194; -O1-LABEL: atomicrmw_xor_i16_unaligned_seq_cst: 5195; -O1: eor w8, w0, w20 5196; -O1: bl __atomic_compare_exchange 5197 %r = atomicrmw xor ptr %ptr, i16 %value seq_cst, align 1 5198 ret i16 %r 5199} 5200 5201define dso_local i32 @atomicrmw_xor_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 5202; -O0-LABEL: atomicrmw_xor_i32_unaligned_monotonic: 5203; -O0: eor w8, w9, w8 5204; -O0: bl __atomic_compare_exchange 5205; 5206; -O1-LABEL: atomicrmw_xor_i32_unaligned_monotonic: 5207; -O1: eor w8, w0, w20 5208; -O1: bl __atomic_compare_exchange 5209 %r = atomicrmw xor ptr %ptr, i32 %value monotonic, align 1 5210 ret i32 %r 5211} 5212 5213define dso_local i32 @atomicrmw_xor_i32_unaligned_acquire(ptr %ptr, i32 %value) { 5214; -O0-LABEL: atomicrmw_xor_i32_unaligned_acquire: 5215; -O0: eor w8, w9, w8 5216; -O0: bl __atomic_compare_exchange 5217; 5218; -O1-LABEL: atomicrmw_xor_i32_unaligned_acquire: 5219; -O1: eor w8, w0, w20 5220; -O1: bl __atomic_compare_exchange 5221 %r = atomicrmw xor ptr %ptr, i32 %value acquire, align 1 5222 ret i32 %r 5223} 5224 5225define dso_local i32 @atomicrmw_xor_i32_unaligned_release(ptr %ptr, i32 %value) { 5226; -O0-LABEL: atomicrmw_xor_i32_unaligned_release: 5227; -O0: eor w8, w9, w8 5228; -O0: bl __atomic_compare_exchange 5229; 5230; -O1-LABEL: atomicrmw_xor_i32_unaligned_release: 5231; -O1: eor w8, w0, w20 5232; -O1: bl __atomic_compare_exchange 5233 %r = atomicrmw xor ptr %ptr, i32 %value release, align 1 5234 ret i32 %r 5235} 5236 5237define dso_local i32 @atomicrmw_xor_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 5238; -O0-LABEL: atomicrmw_xor_i32_unaligned_acq_rel: 5239; -O0: eor w8, w9, w8 5240; -O0: bl __atomic_compare_exchange 5241; 5242; -O1-LABEL: atomicrmw_xor_i32_unaligned_acq_rel: 5243; -O1: eor w8, w0, w20 5244; -O1: bl __atomic_compare_exchange 5245 %r = atomicrmw xor ptr %ptr, i32 %value acq_rel, align 1 5246 ret i32 %r 5247} 5248 5249define dso_local i32 @atomicrmw_xor_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 5250; -O0-LABEL: atomicrmw_xor_i32_unaligned_seq_cst: 5251; -O0: eor w8, w9, w8 5252; -O0: bl __atomic_compare_exchange 5253; 5254; -O1-LABEL: atomicrmw_xor_i32_unaligned_seq_cst: 5255; -O1: eor w8, w0, w20 5256; -O1: bl __atomic_compare_exchange 5257 %r = atomicrmw xor ptr %ptr, i32 %value seq_cst, align 1 5258 ret i32 %r 5259} 5260 5261define dso_local i64 @atomicrmw_xor_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 5262; -O0-LABEL: atomicrmw_xor_i64_unaligned_monotonic: 5263; -O0: eor x8, x9, x8 5264; -O0: bl __atomic_compare_exchange 5265; 5266; -O1-LABEL: atomicrmw_xor_i64_unaligned_monotonic: 5267; -O1: eor x8, x0, x20 5268; -O1: bl __atomic_compare_exchange 5269 %r = atomicrmw xor ptr %ptr, i64 %value monotonic, align 1 5270 ret i64 %r 5271} 5272 5273define dso_local i64 @atomicrmw_xor_i64_unaligned_acquire(ptr %ptr, i64 %value) { 5274; -O0-LABEL: atomicrmw_xor_i64_unaligned_acquire: 5275; -O0: eor x8, x9, x8 5276; -O0: bl __atomic_compare_exchange 5277; 5278; -O1-LABEL: atomicrmw_xor_i64_unaligned_acquire: 5279; -O1: eor x8, x0, x20 5280; -O1: bl __atomic_compare_exchange 5281 %r = atomicrmw xor ptr %ptr, i64 %value acquire, align 1 5282 ret i64 %r 5283} 5284 5285define dso_local i64 @atomicrmw_xor_i64_unaligned_release(ptr %ptr, i64 %value) { 5286; -O0-LABEL: atomicrmw_xor_i64_unaligned_release: 5287; -O0: eor x8, x9, x8 5288; -O0: bl __atomic_compare_exchange 5289; 5290; -O1-LABEL: atomicrmw_xor_i64_unaligned_release: 5291; -O1: eor x8, x0, x20 5292; -O1: bl __atomic_compare_exchange 5293 %r = atomicrmw xor ptr %ptr, i64 %value release, align 1 5294 ret i64 %r 5295} 5296 5297define dso_local i64 @atomicrmw_xor_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 5298; -O0-LABEL: atomicrmw_xor_i64_unaligned_acq_rel: 5299; -O0: eor x8, x9, x8 5300; -O0: bl __atomic_compare_exchange 5301; 5302; -O1-LABEL: atomicrmw_xor_i64_unaligned_acq_rel: 5303; -O1: eor x8, x0, x20 5304; -O1: bl __atomic_compare_exchange 5305 %r = atomicrmw xor ptr %ptr, i64 %value acq_rel, align 1 5306 ret i64 %r 5307} 5308 5309define dso_local i64 @atomicrmw_xor_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 5310; -O0-LABEL: atomicrmw_xor_i64_unaligned_seq_cst: 5311; -O0: eor x8, x9, x8 5312; -O0: bl __atomic_compare_exchange 5313; 5314; -O1-LABEL: atomicrmw_xor_i64_unaligned_seq_cst: 5315; -O1: eor x8, x0, x20 5316; -O1: bl __atomic_compare_exchange 5317 %r = atomicrmw xor ptr %ptr, i64 %value seq_cst, align 1 5318 ret i64 %r 5319} 5320 5321define dso_local i128 @atomicrmw_xor_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 5322; -O0-LABEL: atomicrmw_xor_i128_unaligned_monotonic: 5323; -O0: eor x8, x11, x8 5324; -O0: eor x9, x10, x9 5325; -O0: bl __atomic_compare_exchange 5326; 5327; -O1-LABEL: atomicrmw_xor_i128_unaligned_monotonic: 5328; -O1: ldp x0, x1, [x0] 5329; -O1: eor x8, x1, x19 5330; -O1: eor x9, x0, x21 5331; -O1: bl __atomic_compare_exchange 5332 %r = atomicrmw xor ptr %ptr, i128 %value monotonic, align 1 5333 ret i128 %r 5334} 5335 5336define dso_local i128 @atomicrmw_xor_i128_unaligned_acquire(ptr %ptr, i128 %value) { 5337; -O0-LABEL: atomicrmw_xor_i128_unaligned_acquire: 5338; -O0: eor x8, x11, x8 5339; -O0: eor x9, x10, x9 5340; -O0: bl __atomic_compare_exchange 5341; 5342; -O1-LABEL: atomicrmw_xor_i128_unaligned_acquire: 5343; -O1: ldp x0, x1, [x0] 5344; -O1: eor x8, x1, x19 5345; -O1: eor x9, x0, x21 5346; -O1: bl __atomic_compare_exchange 5347 %r = atomicrmw xor ptr %ptr, i128 %value acquire, align 1 5348 ret i128 %r 5349} 5350 5351define dso_local i128 @atomicrmw_xor_i128_unaligned_release(ptr %ptr, i128 %value) { 5352; -O0-LABEL: atomicrmw_xor_i128_unaligned_release: 5353; -O0: eor x8, x11, x8 5354; -O0: eor x9, x10, x9 5355; -O0: bl __atomic_compare_exchange 5356; 5357; -O1-LABEL: atomicrmw_xor_i128_unaligned_release: 5358; -O1: ldp x0, x1, [x0] 5359; -O1: eor x8, x1, x19 5360; -O1: eor x9, x0, x21 5361; -O1: bl __atomic_compare_exchange 5362 %r = atomicrmw xor ptr %ptr, i128 %value release, align 1 5363 ret i128 %r 5364} 5365 5366define dso_local i128 @atomicrmw_xor_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 5367; -O0-LABEL: atomicrmw_xor_i128_unaligned_acq_rel: 5368; -O0: eor x8, x11, x8 5369; -O0: eor x9, x10, x9 5370; -O0: bl __atomic_compare_exchange 5371; 5372; -O1-LABEL: atomicrmw_xor_i128_unaligned_acq_rel: 5373; -O1: ldp x0, x1, [x0] 5374; -O1: eor x8, x1, x19 5375; -O1: eor x9, x0, x21 5376; -O1: bl __atomic_compare_exchange 5377 %r = atomicrmw xor ptr %ptr, i128 %value acq_rel, align 1 5378 ret i128 %r 5379} 5380 5381define dso_local i128 @atomicrmw_xor_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 5382; -O0-LABEL: atomicrmw_xor_i128_unaligned_seq_cst: 5383; -O0: eor x8, x11, x8 5384; -O0: eor x9, x10, x9 5385; -O0: bl __atomic_compare_exchange 5386; 5387; -O1-LABEL: atomicrmw_xor_i128_unaligned_seq_cst: 5388; -O1: ldp x0, x1, [x0] 5389; -O1: eor x8, x1, x19 5390; -O1: eor x9, x0, x21 5391; -O1: bl __atomic_compare_exchange 5392 %r = atomicrmw xor ptr %ptr, i128 %value seq_cst, align 1 5393 ret i128 %r 5394} 5395 5396define dso_local i8 @atomicrmw_max_i8_aligned_monotonic(ptr %ptr, i8 %value) { 5397; -O0-LABEL: atomicrmw_max_i8_aligned_monotonic: 5398; -O0: sxtb w10, w9 5399; -O0: subs w10, w10, w8, sxtb 5400; -O0: csel w12, w9, w8, gt 5401; -O0: ldaxrb w8, [x11] 5402; -O0: cmp w8, w9, uxtb 5403; -O0: stlxrb w10, w12, [x11] 5404; -O0: subs w9, w8, w9, uxtb 5405; -O0: subs w9, w9, #1 5406; 5407; -O1-LABEL: atomicrmw_max_i8_aligned_monotonic: 5408; -O1: ldxrb w9, [x0] 5409; -O1: sxtb w8, w9 5410; -O1: cmp w8, w1, sxtb 5411; -O1: csel w9, w9, w1, gt 5412; -O1: stxrb w10, w9, [x0] 5413 %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 1 5414 ret i8 %r 5415} 5416 5417define dso_local i8 @atomicrmw_max_i8_aligned_acquire(ptr %ptr, i8 %value) { 5418; -O0-LABEL: atomicrmw_max_i8_aligned_acquire: 5419; -O0: sxtb w10, w9 5420; -O0: subs w10, w10, w8, sxtb 5421; -O0: csel w12, w9, w8, gt 5422; -O0: ldaxrb w8, [x11] 5423; -O0: cmp w8, w9, uxtb 5424; -O0: stlxrb w10, w12, [x11] 5425; -O0: subs w9, w8, w9, uxtb 5426; -O0: subs w9, w9, #1 5427; 5428; -O1-LABEL: atomicrmw_max_i8_aligned_acquire: 5429; -O1: ldaxrb w9, [x0] 5430; -O1: sxtb w8, w9 5431; -O1: cmp w8, w1, sxtb 5432; -O1: csel w9, w9, w1, gt 5433; -O1: stxrb w10, w9, [x0] 5434 %r = atomicrmw max ptr %ptr, i8 %value acquire, align 1 5435 ret i8 %r 5436} 5437 5438define dso_local i8 @atomicrmw_max_i8_aligned_release(ptr %ptr, i8 %value) { 5439; -O0-LABEL: atomicrmw_max_i8_aligned_release: 5440; -O0: sxtb w10, w9 5441; -O0: subs w10, w10, w8, sxtb 5442; -O0: csel w12, w9, w8, gt 5443; -O0: ldaxrb w8, [x11] 5444; -O0: cmp w8, w9, uxtb 5445; -O0: stlxrb w10, w12, [x11] 5446; -O0: subs w9, w8, w9, uxtb 5447; -O0: subs w9, w9, #1 5448; 5449; -O1-LABEL: atomicrmw_max_i8_aligned_release: 5450; -O1: ldxrb w9, [x0] 5451; -O1: sxtb w8, w9 5452; -O1: cmp w8, w1, sxtb 5453; -O1: csel w9, w9, w1, gt 5454; -O1: stlxrb w10, w9, [x0] 5455 %r = atomicrmw max ptr %ptr, i8 %value release, align 1 5456 ret i8 %r 5457} 5458 5459define dso_local i8 @atomicrmw_max_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 5460; -O0-LABEL: atomicrmw_max_i8_aligned_acq_rel: 5461; -O0: sxtb w10, w9 5462; -O0: subs w10, w10, w8, sxtb 5463; -O0: csel w12, w9, w8, gt 5464; -O0: ldaxrb w8, [x11] 5465; -O0: cmp w8, w9, uxtb 5466; -O0: stlxrb w10, w12, [x11] 5467; -O0: subs w9, w8, w9, uxtb 5468; -O0: subs w9, w9, #1 5469; 5470; -O1-LABEL: atomicrmw_max_i8_aligned_acq_rel: 5471; -O1: ldaxrb w9, [x0] 5472; -O1: sxtb w8, w9 5473; -O1: cmp w8, w1, sxtb 5474; -O1: csel w9, w9, w1, gt 5475; -O1: stlxrb w10, w9, [x0] 5476 %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 1 5477 ret i8 %r 5478} 5479 5480define dso_local i8 @atomicrmw_max_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 5481; -O0-LABEL: atomicrmw_max_i8_aligned_seq_cst: 5482; -O0: sxtb w10, w9 5483; -O0: subs w10, w10, w8, sxtb 5484; -O0: csel w12, w9, w8, gt 5485; -O0: ldaxrb w8, [x11] 5486; -O0: cmp w8, w9, uxtb 5487; -O0: stlxrb w10, w12, [x11] 5488; -O0: subs w9, w8, w9, uxtb 5489; -O0: subs w9, w9, #1 5490; 5491; -O1-LABEL: atomicrmw_max_i8_aligned_seq_cst: 5492; -O1: ldaxrb w9, [x0] 5493; -O1: sxtb w8, w9 5494; -O1: cmp w8, w1, sxtb 5495; -O1: csel w9, w9, w1, gt 5496; -O1: stlxrb w10, w9, [x0] 5497 %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 1 5498 ret i8 %r 5499} 5500 5501define dso_local i16 @atomicrmw_max_i16_aligned_monotonic(ptr %ptr, i16 %value) { 5502; -O0-LABEL: atomicrmw_max_i16_aligned_monotonic: 5503; -O0: sxth w10, w9 5504; -O0: subs w10, w10, w8, sxth 5505; -O0: csel w12, w9, w8, gt 5506; -O0: ldaxrh w8, [x11] 5507; -O0: cmp w8, w9, uxth 5508; -O0: stlxrh w10, w12, [x11] 5509; -O0: subs w9, w8, w9, uxth 5510; -O0: subs w9, w9, #1 5511; 5512; -O1-LABEL: atomicrmw_max_i16_aligned_monotonic: 5513; -O1: ldxrh w9, [x0] 5514; -O1: sxth w8, w9 5515; -O1: cmp w8, w1, sxth 5516; -O1: csel w9, w9, w1, gt 5517; -O1: stxrh w10, w9, [x0] 5518 %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 2 5519 ret i16 %r 5520} 5521 5522define dso_local i16 @atomicrmw_max_i16_aligned_acquire(ptr %ptr, i16 %value) { 5523; -O0-LABEL: atomicrmw_max_i16_aligned_acquire: 5524; -O0: sxth w10, w9 5525; -O0: subs w10, w10, w8, sxth 5526; -O0: csel w12, w9, w8, gt 5527; -O0: ldaxrh w8, [x11] 5528; -O0: cmp w8, w9, uxth 5529; -O0: stlxrh w10, w12, [x11] 5530; -O0: subs w9, w8, w9, uxth 5531; -O0: subs w9, w9, #1 5532; 5533; -O1-LABEL: atomicrmw_max_i16_aligned_acquire: 5534; -O1: ldaxrh w9, [x0] 5535; -O1: sxth w8, w9 5536; -O1: cmp w8, w1, sxth 5537; -O1: csel w9, w9, w1, gt 5538; -O1: stxrh w10, w9, [x0] 5539 %r = atomicrmw max ptr %ptr, i16 %value acquire, align 2 5540 ret i16 %r 5541} 5542 5543define dso_local i16 @atomicrmw_max_i16_aligned_release(ptr %ptr, i16 %value) { 5544; -O0-LABEL: atomicrmw_max_i16_aligned_release: 5545; -O0: sxth w10, w9 5546; -O0: subs w10, w10, w8, sxth 5547; -O0: csel w12, w9, w8, gt 5548; -O0: ldaxrh w8, [x11] 5549; -O0: cmp w8, w9, uxth 5550; -O0: stlxrh w10, w12, [x11] 5551; -O0: subs w9, w8, w9, uxth 5552; -O0: subs w9, w9, #1 5553; 5554; -O1-LABEL: atomicrmw_max_i16_aligned_release: 5555; -O1: ldxrh w9, [x0] 5556; -O1: sxth w8, w9 5557; -O1: cmp w8, w1, sxth 5558; -O1: csel w9, w9, w1, gt 5559; -O1: stlxrh w10, w9, [x0] 5560 %r = atomicrmw max ptr %ptr, i16 %value release, align 2 5561 ret i16 %r 5562} 5563 5564define dso_local i16 @atomicrmw_max_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 5565; -O0-LABEL: atomicrmw_max_i16_aligned_acq_rel: 5566; -O0: sxth w10, w9 5567; -O0: subs w10, w10, w8, sxth 5568; -O0: csel w12, w9, w8, gt 5569; -O0: ldaxrh w8, [x11] 5570; -O0: cmp w8, w9, uxth 5571; -O0: stlxrh w10, w12, [x11] 5572; -O0: subs w9, w8, w9, uxth 5573; -O0: subs w9, w9, #1 5574; 5575; -O1-LABEL: atomicrmw_max_i16_aligned_acq_rel: 5576; -O1: ldaxrh w9, [x0] 5577; -O1: sxth w8, w9 5578; -O1: cmp w8, w1, sxth 5579; -O1: csel w9, w9, w1, gt 5580; -O1: stlxrh w10, w9, [x0] 5581 %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 2 5582 ret i16 %r 5583} 5584 5585define dso_local i16 @atomicrmw_max_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 5586; -O0-LABEL: atomicrmw_max_i16_aligned_seq_cst: 5587; -O0: sxth w10, w9 5588; -O0: subs w10, w10, w8, sxth 5589; -O0: csel w12, w9, w8, gt 5590; -O0: ldaxrh w8, [x11] 5591; -O0: cmp w8, w9, uxth 5592; -O0: stlxrh w10, w12, [x11] 5593; -O0: subs w9, w8, w9, uxth 5594; -O0: subs w9, w9, #1 5595; 5596; -O1-LABEL: atomicrmw_max_i16_aligned_seq_cst: 5597; -O1: ldaxrh w9, [x0] 5598; -O1: sxth w8, w9 5599; -O1: cmp w8, w1, sxth 5600; -O1: csel w9, w9, w1, gt 5601; -O1: stlxrh w10, w9, [x0] 5602 %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 2 5603 ret i16 %r 5604} 5605 5606define dso_local i32 @atomicrmw_max_i32_aligned_monotonic(ptr %ptr, i32 %value) { 5607; -O0-LABEL: atomicrmw_max_i32_aligned_monotonic: 5608; -O0: subs w10, w9, w8 5609; -O0: csel w12, w9, w8, gt 5610; -O0: ldaxr w8, [x11] 5611; -O0: cmp w8, w9 5612; -O0: stlxr w10, w12, [x11] 5613; -O0: subs w9, w8, w9 5614; -O0: subs w9, w9, #1 5615; 5616; -O1-LABEL: atomicrmw_max_i32_aligned_monotonic: 5617; -O1: ldxr w8, [x0] 5618; -O1: cmp w8, w1 5619; -O1: csel w9, w8, w1, gt 5620; -O1: stxr w10, w9, [x0] 5621 %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 4 5622 ret i32 %r 5623} 5624 5625define dso_local i32 @atomicrmw_max_i32_aligned_acquire(ptr %ptr, i32 %value) { 5626; -O0-LABEL: atomicrmw_max_i32_aligned_acquire: 5627; -O0: subs w10, w9, w8 5628; -O0: csel w12, w9, w8, gt 5629; -O0: ldaxr w8, [x11] 5630; -O0: cmp w8, w9 5631; -O0: stlxr w10, w12, [x11] 5632; -O0: subs w9, w8, w9 5633; -O0: subs w9, w9, #1 5634; 5635; -O1-LABEL: atomicrmw_max_i32_aligned_acquire: 5636; -O1: ldaxr w8, [x0] 5637; -O1: cmp w8, w1 5638; -O1: csel w9, w8, w1, gt 5639; -O1: stxr w10, w9, [x0] 5640 %r = atomicrmw max ptr %ptr, i32 %value acquire, align 4 5641 ret i32 %r 5642} 5643 5644define dso_local i32 @atomicrmw_max_i32_aligned_release(ptr %ptr, i32 %value) { 5645; -O0-LABEL: atomicrmw_max_i32_aligned_release: 5646; -O0: subs w10, w9, w8 5647; -O0: csel w12, w9, w8, gt 5648; -O0: ldaxr w8, [x11] 5649; -O0: cmp w8, w9 5650; -O0: stlxr w10, w12, [x11] 5651; -O0: subs w9, w8, w9 5652; -O0: subs w9, w9, #1 5653; 5654; -O1-LABEL: atomicrmw_max_i32_aligned_release: 5655; -O1: ldxr w8, [x0] 5656; -O1: cmp w8, w1 5657; -O1: csel w9, w8, w1, gt 5658; -O1: stlxr w10, w9, [x0] 5659 %r = atomicrmw max ptr %ptr, i32 %value release, align 4 5660 ret i32 %r 5661} 5662 5663define dso_local i32 @atomicrmw_max_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 5664; -O0-LABEL: atomicrmw_max_i32_aligned_acq_rel: 5665; -O0: subs w10, w9, w8 5666; -O0: csel w12, w9, w8, gt 5667; -O0: ldaxr w8, [x11] 5668; -O0: cmp w8, w9 5669; -O0: stlxr w10, w12, [x11] 5670; -O0: subs w9, w8, w9 5671; -O0: subs w9, w9, #1 5672; 5673; -O1-LABEL: atomicrmw_max_i32_aligned_acq_rel: 5674; -O1: ldaxr w8, [x0] 5675; -O1: cmp w8, w1 5676; -O1: csel w9, w8, w1, gt 5677; -O1: stlxr w10, w9, [x0] 5678 %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 4 5679 ret i32 %r 5680} 5681 5682define dso_local i32 @atomicrmw_max_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 5683; -O0-LABEL: atomicrmw_max_i32_aligned_seq_cst: 5684; -O0: subs w10, w9, w8 5685; -O0: csel w12, w9, w8, gt 5686; -O0: ldaxr w8, [x11] 5687; -O0: cmp w8, w9 5688; -O0: stlxr w10, w12, [x11] 5689; -O0: subs w9, w8, w9 5690; -O0: subs w9, w9, #1 5691; 5692; -O1-LABEL: atomicrmw_max_i32_aligned_seq_cst: 5693; -O1: ldaxr w8, [x0] 5694; -O1: cmp w8, w1 5695; -O1: csel w9, w8, w1, gt 5696; -O1: stlxr w10, w9, [x0] 5697 %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 4 5698 ret i32 %r 5699} 5700 5701define dso_local i64 @atomicrmw_max_i64_aligned_monotonic(ptr %ptr, i64 %value) { 5702; -O0-LABEL: atomicrmw_max_i64_aligned_monotonic: 5703; -O0: subs x10, x9, x8 5704; -O0: csel x12, x9, x8, gt 5705; -O0: ldaxr x8, [x11] 5706; -O0: cmp x8, x9 5707; -O0: stlxr w10, x12, [x11] 5708; -O0: subs x9, x8, x9 5709; -O0: subs w9, w9, #1 5710; 5711; -O1-LABEL: atomicrmw_max_i64_aligned_monotonic: 5712; -O1: ldxr x0, [x8] 5713; -O1: cmp x0, x1 5714; -O1: csel x9, x0, x1, gt 5715; -O1: stxr w10, x9, [x8] 5716 %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 8 5717 ret i64 %r 5718} 5719 5720define dso_local i64 @atomicrmw_max_i64_aligned_acquire(ptr %ptr, i64 %value) { 5721; -O0-LABEL: atomicrmw_max_i64_aligned_acquire: 5722; -O0: subs x10, x9, x8 5723; -O0: csel x12, x9, x8, gt 5724; -O0: ldaxr x8, [x11] 5725; -O0: cmp x8, x9 5726; -O0: stlxr w10, x12, [x11] 5727; -O0: subs x9, x8, x9 5728; -O0: subs w9, w9, #1 5729; 5730; -O1-LABEL: atomicrmw_max_i64_aligned_acquire: 5731; -O1: ldaxr x0, [x8] 5732; -O1: cmp x0, x1 5733; -O1: csel x9, x0, x1, gt 5734; -O1: stxr w10, x9, [x8] 5735 %r = atomicrmw max ptr %ptr, i64 %value acquire, align 8 5736 ret i64 %r 5737} 5738 5739define dso_local i64 @atomicrmw_max_i64_aligned_release(ptr %ptr, i64 %value) { 5740; -O0-LABEL: atomicrmw_max_i64_aligned_release: 5741; -O0: subs x10, x9, x8 5742; -O0: csel x12, x9, x8, gt 5743; -O0: ldaxr x8, [x11] 5744; -O0: cmp x8, x9 5745; -O0: stlxr w10, x12, [x11] 5746; -O0: subs x9, x8, x9 5747; -O0: subs w9, w9, #1 5748; 5749; -O1-LABEL: atomicrmw_max_i64_aligned_release: 5750; -O1: ldxr x0, [x8] 5751; -O1: cmp x0, x1 5752; -O1: csel x9, x0, x1, gt 5753; -O1: stlxr w10, x9, [x8] 5754 %r = atomicrmw max ptr %ptr, i64 %value release, align 8 5755 ret i64 %r 5756} 5757 5758define dso_local i64 @atomicrmw_max_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 5759; -O0-LABEL: atomicrmw_max_i64_aligned_acq_rel: 5760; -O0: subs x10, x9, x8 5761; -O0: csel x12, x9, x8, gt 5762; -O0: ldaxr x8, [x11] 5763; -O0: cmp x8, x9 5764; -O0: stlxr w10, x12, [x11] 5765; -O0: subs x9, x8, x9 5766; -O0: subs w9, w9, #1 5767; 5768; -O1-LABEL: atomicrmw_max_i64_aligned_acq_rel: 5769; -O1: ldaxr x0, [x8] 5770; -O1: cmp x0, x1 5771; -O1: csel x9, x0, x1, gt 5772; -O1: stlxr w10, x9, [x8] 5773 %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 8 5774 ret i64 %r 5775} 5776 5777define dso_local i64 @atomicrmw_max_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 5778; -O0-LABEL: atomicrmw_max_i64_aligned_seq_cst: 5779; -O0: subs x10, x9, x8 5780; -O0: csel x12, x9, x8, gt 5781; -O0: ldaxr x8, [x11] 5782; -O0: cmp x8, x9 5783; -O0: stlxr w10, x12, [x11] 5784; -O0: subs x9, x8, x9 5785; -O0: subs w9, w9, #1 5786; 5787; -O1-LABEL: atomicrmw_max_i64_aligned_seq_cst: 5788; -O1: ldaxr x0, [x8] 5789; -O1: cmp x0, x1 5790; -O1: csel x9, x0, x1, gt 5791; -O1: stlxr w10, x9, [x8] 5792 %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 8 5793 ret i64 %r 5794} 5795 5796define dso_local i128 @atomicrmw_max_i128_aligned_monotonic(ptr %ptr, i128 %value) { 5797; -O0-LABEL: atomicrmw_max_i128_aligned_monotonic: 5798; -O0: subs x12, x8, x11 5799; -O0: csel x15, x13, x10, lt 5800; -O0: csel x14, x11, x8, lt 5801; -O0: ldxp x10, x12, [x9] 5802; -O0: cmp x10, x11 5803; -O0: cmp x12, x13 5804; -O0: stxp w8, x14, x15, [x9] 5805; -O0: stxp w8, x10, x12, [x9] 5806; -O0: subs x12, x12, x13 5807; -O0: ccmp x10, x11, #0, eq 5808; 5809; -O1-LABEL: atomicrmw_max_i128_aligned_monotonic: 5810; -O1: ldxp x1, x0, [x8] 5811; -O1: cmp x3, x1 5812; -O1: csel x9, x0, x2, lt 5813; -O1: csel x10, x1, x3, lt 5814; -O1: stxp w11, x10, x9, [x8] 5815 %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 16 5816 ret i128 %r 5817} 5818 5819define dso_local i128 @atomicrmw_max_i128_aligned_acquire(ptr %ptr, i128 %value) { 5820; -O0-LABEL: atomicrmw_max_i128_aligned_acquire: 5821; -O0: subs x12, x8, x11 5822; -O0: csel x15, x13, x10, lt 5823; -O0: csel x14, x11, x8, lt 5824; -O0: ldaxp x10, x12, [x9] 5825; -O0: cmp x10, x11 5826; -O0: cmp x12, x13 5827; -O0: stxp w8, x14, x15, [x9] 5828; -O0: stxp w8, x10, x12, [x9] 5829; -O0: subs x12, x12, x13 5830; -O0: ccmp x10, x11, #0, eq 5831; 5832; -O1-LABEL: atomicrmw_max_i128_aligned_acquire: 5833; -O1: ldaxp x1, x0, [x8] 5834; -O1: cmp x3, x1 5835; -O1: csel x9, x0, x2, lt 5836; -O1: csel x10, x1, x3, lt 5837; -O1: stxp w11, x10, x9, [x8] 5838 %r = atomicrmw max ptr %ptr, i128 %value acquire, align 16 5839 ret i128 %r 5840} 5841 5842define dso_local i128 @atomicrmw_max_i128_aligned_release(ptr %ptr, i128 %value) { 5843; -O0-LABEL: atomicrmw_max_i128_aligned_release: 5844; -O0: subs x12, x8, x11 5845; -O0: csel x15, x13, x10, lt 5846; -O0: csel x14, x11, x8, lt 5847; -O0: ldxp x10, x12, [x9] 5848; -O0: cmp x10, x11 5849; -O0: cmp x12, x13 5850; -O0: stlxp w8, x14, x15, [x9] 5851; -O0: stlxp w8, x10, x12, [x9] 5852; -O0: subs x12, x12, x13 5853; -O0: ccmp x10, x11, #0, eq 5854; 5855; -O1-LABEL: atomicrmw_max_i128_aligned_release: 5856; -O1: ldxp x1, x0, [x8] 5857; -O1: cmp x3, x1 5858; -O1: csel x9, x0, x2, lt 5859; -O1: csel x10, x1, x3, lt 5860; -O1: stlxp w11, x10, x9, [x8] 5861 %r = atomicrmw max ptr %ptr, i128 %value release, align 16 5862 ret i128 %r 5863} 5864 5865define dso_local i128 @atomicrmw_max_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 5866; -O0-LABEL: atomicrmw_max_i128_aligned_acq_rel: 5867; -O0: subs x12, x8, x11 5868; -O0: csel x15, x13, x10, lt 5869; -O0: csel x14, x11, x8, lt 5870; -O0: ldaxp x10, x12, [x9] 5871; -O0: cmp x10, x11 5872; -O0: cmp x12, x13 5873; -O0: stlxp w8, x14, x15, [x9] 5874; -O0: stlxp w8, x10, x12, [x9] 5875; -O0: subs x12, x12, x13 5876; -O0: ccmp x10, x11, #0, eq 5877; 5878; -O1-LABEL: atomicrmw_max_i128_aligned_acq_rel: 5879; -O1: ldaxp x1, x0, [x8] 5880; -O1: cmp x3, x1 5881; -O1: csel x9, x0, x2, lt 5882; -O1: csel x10, x1, x3, lt 5883; -O1: stlxp w11, x10, x9, [x8] 5884 %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 16 5885 ret i128 %r 5886} 5887 5888define dso_local i128 @atomicrmw_max_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 5889; -O0-LABEL: atomicrmw_max_i128_aligned_seq_cst: 5890; -O0: subs x12, x8, x11 5891; -O0: csel x15, x13, x10, lt 5892; -O0: csel x14, x11, x8, lt 5893; -O0: ldaxp x10, x12, [x9] 5894; -O0: cmp x10, x11 5895; -O0: cmp x12, x13 5896; -O0: stlxp w8, x14, x15, [x9] 5897; -O0: stlxp w8, x10, x12, [x9] 5898; -O0: subs x12, x12, x13 5899; -O0: ccmp x10, x11, #0, eq 5900; 5901; -O1-LABEL: atomicrmw_max_i128_aligned_seq_cst: 5902; -O1: ldaxp x1, x0, [x8] 5903; -O1: cmp x3, x1 5904; -O1: csel x9, x0, x2, lt 5905; -O1: csel x10, x1, x3, lt 5906; -O1: stlxp w11, x10, x9, [x8] 5907 %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 16 5908 ret i128 %r 5909} 5910 5911define dso_local i8 @atomicrmw_max_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 5912; -O0-LABEL: atomicrmw_max_i8_unaligned_monotonic: 5913; -O0: sxtb w10, w9 5914; -O0: subs w10, w10, w8, sxtb 5915; -O0: csel w12, w9, w8, gt 5916; -O0: ldaxrb w8, [x11] 5917; -O0: cmp w8, w9, uxtb 5918; -O0: stlxrb w10, w12, [x11] 5919; -O0: subs w9, w8, w9, uxtb 5920; -O0: subs w9, w9, #1 5921; 5922; -O1-LABEL: atomicrmw_max_i8_unaligned_monotonic: 5923; -O1: ldxrb w9, [x0] 5924; -O1: sxtb w8, w9 5925; -O1: cmp w8, w1, sxtb 5926; -O1: csel w9, w9, w1, gt 5927; -O1: stxrb w10, w9, [x0] 5928 %r = atomicrmw max ptr %ptr, i8 %value monotonic, align 1 5929 ret i8 %r 5930} 5931 5932define dso_local i8 @atomicrmw_max_i8_unaligned_acquire(ptr %ptr, i8 %value) { 5933; -O0-LABEL: atomicrmw_max_i8_unaligned_acquire: 5934; -O0: sxtb w10, w9 5935; -O0: subs w10, w10, w8, sxtb 5936; -O0: csel w12, w9, w8, gt 5937; -O0: ldaxrb w8, [x11] 5938; -O0: cmp w8, w9, uxtb 5939; -O0: stlxrb w10, w12, [x11] 5940; -O0: subs w9, w8, w9, uxtb 5941; -O0: subs w9, w9, #1 5942; 5943; -O1-LABEL: atomicrmw_max_i8_unaligned_acquire: 5944; -O1: ldaxrb w9, [x0] 5945; -O1: sxtb w8, w9 5946; -O1: cmp w8, w1, sxtb 5947; -O1: csel w9, w9, w1, gt 5948; -O1: stxrb w10, w9, [x0] 5949 %r = atomicrmw max ptr %ptr, i8 %value acquire, align 1 5950 ret i8 %r 5951} 5952 5953define dso_local i8 @atomicrmw_max_i8_unaligned_release(ptr %ptr, i8 %value) { 5954; -O0-LABEL: atomicrmw_max_i8_unaligned_release: 5955; -O0: sxtb w10, w9 5956; -O0: subs w10, w10, w8, sxtb 5957; -O0: csel w12, w9, w8, gt 5958; -O0: ldaxrb w8, [x11] 5959; -O0: cmp w8, w9, uxtb 5960; -O0: stlxrb w10, w12, [x11] 5961; -O0: subs w9, w8, w9, uxtb 5962; -O0: subs w9, w9, #1 5963; 5964; -O1-LABEL: atomicrmw_max_i8_unaligned_release: 5965; -O1: ldxrb w9, [x0] 5966; -O1: sxtb w8, w9 5967; -O1: cmp w8, w1, sxtb 5968; -O1: csel w9, w9, w1, gt 5969; -O1: stlxrb w10, w9, [x0] 5970 %r = atomicrmw max ptr %ptr, i8 %value release, align 1 5971 ret i8 %r 5972} 5973 5974define dso_local i8 @atomicrmw_max_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 5975; -O0-LABEL: atomicrmw_max_i8_unaligned_acq_rel: 5976; -O0: sxtb w10, w9 5977; -O0: subs w10, w10, w8, sxtb 5978; -O0: csel w12, w9, w8, gt 5979; -O0: ldaxrb w8, [x11] 5980; -O0: cmp w8, w9, uxtb 5981; -O0: stlxrb w10, w12, [x11] 5982; -O0: subs w9, w8, w9, uxtb 5983; -O0: subs w9, w9, #1 5984; 5985; -O1-LABEL: atomicrmw_max_i8_unaligned_acq_rel: 5986; -O1: ldaxrb w9, [x0] 5987; -O1: sxtb w8, w9 5988; -O1: cmp w8, w1, sxtb 5989; -O1: csel w9, w9, w1, gt 5990; -O1: stlxrb w10, w9, [x0] 5991 %r = atomicrmw max ptr %ptr, i8 %value acq_rel, align 1 5992 ret i8 %r 5993} 5994 5995define dso_local i8 @atomicrmw_max_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 5996; -O0-LABEL: atomicrmw_max_i8_unaligned_seq_cst: 5997; -O0: sxtb w10, w9 5998; -O0: subs w10, w10, w8, sxtb 5999; -O0: csel w12, w9, w8, gt 6000; -O0: ldaxrb w8, [x11] 6001; -O0: cmp w8, w9, uxtb 6002; -O0: stlxrb w10, w12, [x11] 6003; -O0: subs w9, w8, w9, uxtb 6004; -O0: subs w9, w9, #1 6005; 6006; -O1-LABEL: atomicrmw_max_i8_unaligned_seq_cst: 6007; -O1: ldaxrb w9, [x0] 6008; -O1: sxtb w8, w9 6009; -O1: cmp w8, w1, sxtb 6010; -O1: csel w9, w9, w1, gt 6011; -O1: stlxrb w10, w9, [x0] 6012 %r = atomicrmw max ptr %ptr, i8 %value seq_cst, align 1 6013 ret i8 %r 6014} 6015 6016define dso_local i16 @atomicrmw_max_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 6017; -O0-LABEL: atomicrmw_max_i16_unaligned_monotonic: 6018; -O0: sxth w10, w9 6019; -O0: subs w10, w10, w8, sxth 6020; -O0: csel w8, w9, w8, gt 6021; -O0: bl __atomic_compare_exchange 6022; 6023; -O1-LABEL: atomicrmw_max_i16_unaligned_monotonic: 6024; -O1: sxth w8, w0 6025; -O1: cmp w8, w20, sxth 6026; -O1: csel w8, w0, w20, gt 6027; -O1: bl __atomic_compare_exchange 6028 %r = atomicrmw max ptr %ptr, i16 %value monotonic, align 1 6029 ret i16 %r 6030} 6031 6032define dso_local i16 @atomicrmw_max_i16_unaligned_acquire(ptr %ptr, i16 %value) { 6033; -O0-LABEL: atomicrmw_max_i16_unaligned_acquire: 6034; -O0: sxth w10, w9 6035; -O0: subs w10, w10, w8, sxth 6036; -O0: csel w8, w9, w8, gt 6037; -O0: bl __atomic_compare_exchange 6038; 6039; -O1-LABEL: atomicrmw_max_i16_unaligned_acquire: 6040; -O1: sxth w8, w0 6041; -O1: cmp w8, w20, sxth 6042; -O1: csel w8, w0, w20, gt 6043; -O1: bl __atomic_compare_exchange 6044 %r = atomicrmw max ptr %ptr, i16 %value acquire, align 1 6045 ret i16 %r 6046} 6047 6048define dso_local i16 @atomicrmw_max_i16_unaligned_release(ptr %ptr, i16 %value) { 6049; -O0-LABEL: atomicrmw_max_i16_unaligned_release: 6050; -O0: sxth w10, w9 6051; -O0: subs w10, w10, w8, sxth 6052; -O0: csel w8, w9, w8, gt 6053; -O0: bl __atomic_compare_exchange 6054; 6055; -O1-LABEL: atomicrmw_max_i16_unaligned_release: 6056; -O1: sxth w8, w0 6057; -O1: cmp w8, w20, sxth 6058; -O1: csel w8, w0, w20, gt 6059; -O1: bl __atomic_compare_exchange 6060 %r = atomicrmw max ptr %ptr, i16 %value release, align 1 6061 ret i16 %r 6062} 6063 6064define dso_local i16 @atomicrmw_max_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 6065; -O0-LABEL: atomicrmw_max_i16_unaligned_acq_rel: 6066; -O0: sxth w10, w9 6067; -O0: subs w10, w10, w8, sxth 6068; -O0: csel w8, w9, w8, gt 6069; -O0: bl __atomic_compare_exchange 6070; 6071; -O1-LABEL: atomicrmw_max_i16_unaligned_acq_rel: 6072; -O1: sxth w8, w0 6073; -O1: cmp w8, w20, sxth 6074; -O1: csel w8, w0, w20, gt 6075; -O1: bl __atomic_compare_exchange 6076 %r = atomicrmw max ptr %ptr, i16 %value acq_rel, align 1 6077 ret i16 %r 6078} 6079 6080define dso_local i16 @atomicrmw_max_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 6081; -O0-LABEL: atomicrmw_max_i16_unaligned_seq_cst: 6082; -O0: sxth w10, w9 6083; -O0: subs w10, w10, w8, sxth 6084; -O0: csel w8, w9, w8, gt 6085; -O0: bl __atomic_compare_exchange 6086; 6087; -O1-LABEL: atomicrmw_max_i16_unaligned_seq_cst: 6088; -O1: sxth w8, w0 6089; -O1: cmp w8, w20, sxth 6090; -O1: csel w8, w0, w20, gt 6091; -O1: bl __atomic_compare_exchange 6092 %r = atomicrmw max ptr %ptr, i16 %value seq_cst, align 1 6093 ret i16 %r 6094} 6095 6096define dso_local i32 @atomicrmw_max_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 6097; -O0-LABEL: atomicrmw_max_i32_unaligned_monotonic: 6098; -O0: subs w10, w9, w8 6099; -O0: csel w8, w9, w8, gt 6100; -O0: bl __atomic_compare_exchange 6101; 6102; -O1-LABEL: atomicrmw_max_i32_unaligned_monotonic: 6103; -O1: cmp w0, w20 6104; -O1: csel w8, w0, w20, gt 6105; -O1: bl __atomic_compare_exchange 6106 %r = atomicrmw max ptr %ptr, i32 %value monotonic, align 1 6107 ret i32 %r 6108} 6109 6110define dso_local i32 @atomicrmw_max_i32_unaligned_acquire(ptr %ptr, i32 %value) { 6111; -O0-LABEL: atomicrmw_max_i32_unaligned_acquire: 6112; -O0: subs w10, w9, w8 6113; -O0: csel w8, w9, w8, gt 6114; -O0: bl __atomic_compare_exchange 6115; 6116; -O1-LABEL: atomicrmw_max_i32_unaligned_acquire: 6117; -O1: cmp w0, w20 6118; -O1: csel w8, w0, w20, gt 6119; -O1: bl __atomic_compare_exchange 6120 %r = atomicrmw max ptr %ptr, i32 %value acquire, align 1 6121 ret i32 %r 6122} 6123 6124define dso_local i32 @atomicrmw_max_i32_unaligned_release(ptr %ptr, i32 %value) { 6125; -O0-LABEL: atomicrmw_max_i32_unaligned_release: 6126; -O0: subs w10, w9, w8 6127; -O0: csel w8, w9, w8, gt 6128; -O0: bl __atomic_compare_exchange 6129; 6130; -O1-LABEL: atomicrmw_max_i32_unaligned_release: 6131; -O1: cmp w0, w20 6132; -O1: csel w8, w0, w20, gt 6133; -O1: bl __atomic_compare_exchange 6134 %r = atomicrmw max ptr %ptr, i32 %value release, align 1 6135 ret i32 %r 6136} 6137 6138define dso_local i32 @atomicrmw_max_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 6139; -O0-LABEL: atomicrmw_max_i32_unaligned_acq_rel: 6140; -O0: subs w10, w9, w8 6141; -O0: csel w8, w9, w8, gt 6142; -O0: bl __atomic_compare_exchange 6143; 6144; -O1-LABEL: atomicrmw_max_i32_unaligned_acq_rel: 6145; -O1: cmp w0, w20 6146; -O1: csel w8, w0, w20, gt 6147; -O1: bl __atomic_compare_exchange 6148 %r = atomicrmw max ptr %ptr, i32 %value acq_rel, align 1 6149 ret i32 %r 6150} 6151 6152define dso_local i32 @atomicrmw_max_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 6153; -O0-LABEL: atomicrmw_max_i32_unaligned_seq_cst: 6154; -O0: subs w10, w9, w8 6155; -O0: csel w8, w9, w8, gt 6156; -O0: bl __atomic_compare_exchange 6157; 6158; -O1-LABEL: atomicrmw_max_i32_unaligned_seq_cst: 6159; -O1: cmp w0, w20 6160; -O1: csel w8, w0, w20, gt 6161; -O1: bl __atomic_compare_exchange 6162 %r = atomicrmw max ptr %ptr, i32 %value seq_cst, align 1 6163 ret i32 %r 6164} 6165 6166define dso_local i64 @atomicrmw_max_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 6167; -O0-LABEL: atomicrmw_max_i64_unaligned_monotonic: 6168; -O0: subs x10, x9, x8 6169; -O0: csel x8, x9, x8, gt 6170; -O0: bl __atomic_compare_exchange 6171; 6172; -O1-LABEL: atomicrmw_max_i64_unaligned_monotonic: 6173; -O1: cmp x0, x20 6174; -O1: csel x8, x0, x20, gt 6175; -O1: bl __atomic_compare_exchange 6176 %r = atomicrmw max ptr %ptr, i64 %value monotonic, align 1 6177 ret i64 %r 6178} 6179 6180define dso_local i64 @atomicrmw_max_i64_unaligned_acquire(ptr %ptr, i64 %value) { 6181; -O0-LABEL: atomicrmw_max_i64_unaligned_acquire: 6182; -O0: subs x10, x9, x8 6183; -O0: csel x8, x9, x8, gt 6184; -O0: bl __atomic_compare_exchange 6185; 6186; -O1-LABEL: atomicrmw_max_i64_unaligned_acquire: 6187; -O1: cmp x0, x20 6188; -O1: csel x8, x0, x20, gt 6189; -O1: bl __atomic_compare_exchange 6190 %r = atomicrmw max ptr %ptr, i64 %value acquire, align 1 6191 ret i64 %r 6192} 6193 6194define dso_local i64 @atomicrmw_max_i64_unaligned_release(ptr %ptr, i64 %value) { 6195; -O0-LABEL: atomicrmw_max_i64_unaligned_release: 6196; -O0: subs x10, x9, x8 6197; -O0: csel x8, x9, x8, gt 6198; -O0: bl __atomic_compare_exchange 6199; 6200; -O1-LABEL: atomicrmw_max_i64_unaligned_release: 6201; -O1: cmp x0, x20 6202; -O1: csel x8, x0, x20, gt 6203; -O1: bl __atomic_compare_exchange 6204 %r = atomicrmw max ptr %ptr, i64 %value release, align 1 6205 ret i64 %r 6206} 6207 6208define dso_local i64 @atomicrmw_max_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 6209; -O0-LABEL: atomicrmw_max_i64_unaligned_acq_rel: 6210; -O0: subs x10, x9, x8 6211; -O0: csel x8, x9, x8, gt 6212; -O0: bl __atomic_compare_exchange 6213; 6214; -O1-LABEL: atomicrmw_max_i64_unaligned_acq_rel: 6215; -O1: cmp x0, x20 6216; -O1: csel x8, x0, x20, gt 6217; -O1: bl __atomic_compare_exchange 6218 %r = atomicrmw max ptr %ptr, i64 %value acq_rel, align 1 6219 ret i64 %r 6220} 6221 6222define dso_local i64 @atomicrmw_max_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 6223; -O0-LABEL: atomicrmw_max_i64_unaligned_seq_cst: 6224; -O0: subs x10, x9, x8 6225; -O0: csel x8, x9, x8, gt 6226; -O0: bl __atomic_compare_exchange 6227; 6228; -O1-LABEL: atomicrmw_max_i64_unaligned_seq_cst: 6229; -O1: cmp x0, x20 6230; -O1: csel x8, x0, x20, gt 6231; -O1: bl __atomic_compare_exchange 6232 %r = atomicrmw max ptr %ptr, i64 %value seq_cst, align 1 6233 ret i64 %r 6234} 6235 6236define dso_local i128 @atomicrmw_max_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 6237; -O0-LABEL: atomicrmw_max_i128_unaligned_monotonic: 6238; -O0: subs x12, x9, x10 6239; -O0: csel x8, x11, x8, lt 6240; -O0: csel x9, x10, x9, lt 6241; -O0: bl __atomic_compare_exchange 6242; 6243; -O1-LABEL: atomicrmw_max_i128_unaligned_monotonic: 6244; -O1: ldp x0, x1, [x0] 6245; -O1: cmp x19, x1 6246; -O1: csel x8, x1, x19, lt 6247; -O1: csel x9, x0, x21, lt 6248; -O1: bl __atomic_compare_exchange 6249 %r = atomicrmw max ptr %ptr, i128 %value monotonic, align 1 6250 ret i128 %r 6251} 6252 6253define dso_local i128 @atomicrmw_max_i128_unaligned_acquire(ptr %ptr, i128 %value) { 6254; -O0-LABEL: atomicrmw_max_i128_unaligned_acquire: 6255; -O0: subs x12, x9, x10 6256; -O0: csel x8, x11, x8, lt 6257; -O0: csel x9, x10, x9, lt 6258; -O0: bl __atomic_compare_exchange 6259; 6260; -O1-LABEL: atomicrmw_max_i128_unaligned_acquire: 6261; -O1: ldp x0, x1, [x0] 6262; -O1: cmp x19, x1 6263; -O1: csel x8, x1, x19, lt 6264; -O1: csel x9, x0, x21, lt 6265; -O1: bl __atomic_compare_exchange 6266 %r = atomicrmw max ptr %ptr, i128 %value acquire, align 1 6267 ret i128 %r 6268} 6269 6270define dso_local i128 @atomicrmw_max_i128_unaligned_release(ptr %ptr, i128 %value) { 6271; -O0-LABEL: atomicrmw_max_i128_unaligned_release: 6272; -O0: subs x12, x9, x10 6273; -O0: csel x8, x11, x8, lt 6274; -O0: csel x9, x10, x9, lt 6275; -O0: bl __atomic_compare_exchange 6276; 6277; -O1-LABEL: atomicrmw_max_i128_unaligned_release: 6278; -O1: ldp x0, x1, [x0] 6279; -O1: cmp x19, x1 6280; -O1: csel x8, x1, x19, lt 6281; -O1: csel x9, x0, x21, lt 6282; -O1: bl __atomic_compare_exchange 6283 %r = atomicrmw max ptr %ptr, i128 %value release, align 1 6284 ret i128 %r 6285} 6286 6287define dso_local i128 @atomicrmw_max_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 6288; -O0-LABEL: atomicrmw_max_i128_unaligned_acq_rel: 6289; -O0: subs x12, x9, x10 6290; -O0: csel x8, x11, x8, lt 6291; -O0: csel x9, x10, x9, lt 6292; -O0: bl __atomic_compare_exchange 6293; 6294; -O1-LABEL: atomicrmw_max_i128_unaligned_acq_rel: 6295; -O1: ldp x0, x1, [x0] 6296; -O1: cmp x19, x1 6297; -O1: csel x8, x1, x19, lt 6298; -O1: csel x9, x0, x21, lt 6299; -O1: bl __atomic_compare_exchange 6300 %r = atomicrmw max ptr %ptr, i128 %value acq_rel, align 1 6301 ret i128 %r 6302} 6303 6304define dso_local i128 @atomicrmw_max_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 6305; -O0-LABEL: atomicrmw_max_i128_unaligned_seq_cst: 6306; -O0: subs x12, x9, x10 6307; -O0: csel x8, x11, x8, lt 6308; -O0: csel x9, x10, x9, lt 6309; -O0: bl __atomic_compare_exchange 6310; 6311; -O1-LABEL: atomicrmw_max_i128_unaligned_seq_cst: 6312; -O1: ldp x0, x1, [x0] 6313; -O1: cmp x19, x1 6314; -O1: csel x8, x1, x19, lt 6315; -O1: csel x9, x0, x21, lt 6316; -O1: bl __atomic_compare_exchange 6317 %r = atomicrmw max ptr %ptr, i128 %value seq_cst, align 1 6318 ret i128 %r 6319} 6320 6321define dso_local i8 @atomicrmw_min_i8_aligned_monotonic(ptr %ptr, i8 %value) { 6322; -O0-LABEL: atomicrmw_min_i8_aligned_monotonic: 6323; -O0: sxtb w10, w9 6324; -O0: subs w10, w10, w8, sxtb 6325; -O0: csel w12, w9, w8, le 6326; -O0: ldaxrb w8, [x11] 6327; -O0: cmp w8, w9, uxtb 6328; -O0: stlxrb w10, w12, [x11] 6329; -O0: subs w9, w8, w9, uxtb 6330; -O0: subs w9, w9, #1 6331; 6332; -O1-LABEL: atomicrmw_min_i8_aligned_monotonic: 6333; -O1: ldxrb w9, [x0] 6334; -O1: sxtb w8, w9 6335; -O1: cmp w8, w1, sxtb 6336; -O1: csel w9, w9, w1, le 6337; -O1: stxrb w10, w9, [x0] 6338 %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 1 6339 ret i8 %r 6340} 6341 6342define dso_local i8 @atomicrmw_min_i8_aligned_acquire(ptr %ptr, i8 %value) { 6343; -O0-LABEL: atomicrmw_min_i8_aligned_acquire: 6344; -O0: sxtb w10, w9 6345; -O0: subs w10, w10, w8, sxtb 6346; -O0: csel w12, w9, w8, le 6347; -O0: ldaxrb w8, [x11] 6348; -O0: cmp w8, w9, uxtb 6349; -O0: stlxrb w10, w12, [x11] 6350; -O0: subs w9, w8, w9, uxtb 6351; -O0: subs w9, w9, #1 6352; 6353; -O1-LABEL: atomicrmw_min_i8_aligned_acquire: 6354; -O1: ldaxrb w9, [x0] 6355; -O1: sxtb w8, w9 6356; -O1: cmp w8, w1, sxtb 6357; -O1: csel w9, w9, w1, le 6358; -O1: stxrb w10, w9, [x0] 6359 %r = atomicrmw min ptr %ptr, i8 %value acquire, align 1 6360 ret i8 %r 6361} 6362 6363define dso_local i8 @atomicrmw_min_i8_aligned_release(ptr %ptr, i8 %value) { 6364; -O0-LABEL: atomicrmw_min_i8_aligned_release: 6365; -O0: sxtb w10, w9 6366; -O0: subs w10, w10, w8, sxtb 6367; -O0: csel w12, w9, w8, le 6368; -O0: ldaxrb w8, [x11] 6369; -O0: cmp w8, w9, uxtb 6370; -O0: stlxrb w10, w12, [x11] 6371; -O0: subs w9, w8, w9, uxtb 6372; -O0: subs w9, w9, #1 6373; 6374; -O1-LABEL: atomicrmw_min_i8_aligned_release: 6375; -O1: ldxrb w9, [x0] 6376; -O1: sxtb w8, w9 6377; -O1: cmp w8, w1, sxtb 6378; -O1: csel w9, w9, w1, le 6379; -O1: stlxrb w10, w9, [x0] 6380 %r = atomicrmw min ptr %ptr, i8 %value release, align 1 6381 ret i8 %r 6382} 6383 6384define dso_local i8 @atomicrmw_min_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 6385; -O0-LABEL: atomicrmw_min_i8_aligned_acq_rel: 6386; -O0: sxtb w10, w9 6387; -O0: subs w10, w10, w8, sxtb 6388; -O0: csel w12, w9, w8, le 6389; -O0: ldaxrb w8, [x11] 6390; -O0: cmp w8, w9, uxtb 6391; -O0: stlxrb w10, w12, [x11] 6392; -O0: subs w9, w8, w9, uxtb 6393; -O0: subs w9, w9, #1 6394; 6395; -O1-LABEL: atomicrmw_min_i8_aligned_acq_rel: 6396; -O1: ldaxrb w9, [x0] 6397; -O1: sxtb w8, w9 6398; -O1: cmp w8, w1, sxtb 6399; -O1: csel w9, w9, w1, le 6400; -O1: stlxrb w10, w9, [x0] 6401 %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 1 6402 ret i8 %r 6403} 6404 6405define dso_local i8 @atomicrmw_min_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 6406; -O0-LABEL: atomicrmw_min_i8_aligned_seq_cst: 6407; -O0: sxtb w10, w9 6408; -O0: subs w10, w10, w8, sxtb 6409; -O0: csel w12, w9, w8, le 6410; -O0: ldaxrb w8, [x11] 6411; -O0: cmp w8, w9, uxtb 6412; -O0: stlxrb w10, w12, [x11] 6413; -O0: subs w9, w8, w9, uxtb 6414; -O0: subs w9, w9, #1 6415; 6416; -O1-LABEL: atomicrmw_min_i8_aligned_seq_cst: 6417; -O1: ldaxrb w9, [x0] 6418; -O1: sxtb w8, w9 6419; -O1: cmp w8, w1, sxtb 6420; -O1: csel w9, w9, w1, le 6421; -O1: stlxrb w10, w9, [x0] 6422 %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 1 6423 ret i8 %r 6424} 6425 6426define dso_local i16 @atomicrmw_min_i16_aligned_monotonic(ptr %ptr, i16 %value) { 6427; -O0-LABEL: atomicrmw_min_i16_aligned_monotonic: 6428; -O0: sxth w10, w9 6429; -O0: subs w10, w10, w8, sxth 6430; -O0: csel w12, w9, w8, le 6431; -O0: ldaxrh w8, [x11] 6432; -O0: cmp w8, w9, uxth 6433; -O0: stlxrh w10, w12, [x11] 6434; -O0: subs w9, w8, w9, uxth 6435; -O0: subs w9, w9, #1 6436; 6437; -O1-LABEL: atomicrmw_min_i16_aligned_monotonic: 6438; -O1: ldxrh w9, [x0] 6439; -O1: sxth w8, w9 6440; -O1: cmp w8, w1, sxth 6441; -O1: csel w9, w9, w1, le 6442; -O1: stxrh w10, w9, [x0] 6443 %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 2 6444 ret i16 %r 6445} 6446 6447define dso_local i16 @atomicrmw_min_i16_aligned_acquire(ptr %ptr, i16 %value) { 6448; -O0-LABEL: atomicrmw_min_i16_aligned_acquire: 6449; -O0: sxth w10, w9 6450; -O0: subs w10, w10, w8, sxth 6451; -O0: csel w12, w9, w8, le 6452; -O0: ldaxrh w8, [x11] 6453; -O0: cmp w8, w9, uxth 6454; -O0: stlxrh w10, w12, [x11] 6455; -O0: subs w9, w8, w9, uxth 6456; -O0: subs w9, w9, #1 6457; 6458; -O1-LABEL: atomicrmw_min_i16_aligned_acquire: 6459; -O1: ldaxrh w9, [x0] 6460; -O1: sxth w8, w9 6461; -O1: cmp w8, w1, sxth 6462; -O1: csel w9, w9, w1, le 6463; -O1: stxrh w10, w9, [x0] 6464 %r = atomicrmw min ptr %ptr, i16 %value acquire, align 2 6465 ret i16 %r 6466} 6467 6468define dso_local i16 @atomicrmw_min_i16_aligned_release(ptr %ptr, i16 %value) { 6469; -O0-LABEL: atomicrmw_min_i16_aligned_release: 6470; -O0: sxth w10, w9 6471; -O0: subs w10, w10, w8, sxth 6472; -O0: csel w12, w9, w8, le 6473; -O0: ldaxrh w8, [x11] 6474; -O0: cmp w8, w9, uxth 6475; -O0: stlxrh w10, w12, [x11] 6476; -O0: subs w9, w8, w9, uxth 6477; -O0: subs w9, w9, #1 6478; 6479; -O1-LABEL: atomicrmw_min_i16_aligned_release: 6480; -O1: ldxrh w9, [x0] 6481; -O1: sxth w8, w9 6482; -O1: cmp w8, w1, sxth 6483; -O1: csel w9, w9, w1, le 6484; -O1: stlxrh w10, w9, [x0] 6485 %r = atomicrmw min ptr %ptr, i16 %value release, align 2 6486 ret i16 %r 6487} 6488 6489define dso_local i16 @atomicrmw_min_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 6490; -O0-LABEL: atomicrmw_min_i16_aligned_acq_rel: 6491; -O0: sxth w10, w9 6492; -O0: subs w10, w10, w8, sxth 6493; -O0: csel w12, w9, w8, le 6494; -O0: ldaxrh w8, [x11] 6495; -O0: cmp w8, w9, uxth 6496; -O0: stlxrh w10, w12, [x11] 6497; -O0: subs w9, w8, w9, uxth 6498; -O0: subs w9, w9, #1 6499; 6500; -O1-LABEL: atomicrmw_min_i16_aligned_acq_rel: 6501; -O1: ldaxrh w9, [x0] 6502; -O1: sxth w8, w9 6503; -O1: cmp w8, w1, sxth 6504; -O1: csel w9, w9, w1, le 6505; -O1: stlxrh w10, w9, [x0] 6506 %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 2 6507 ret i16 %r 6508} 6509 6510define dso_local i16 @atomicrmw_min_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 6511; -O0-LABEL: atomicrmw_min_i16_aligned_seq_cst: 6512; -O0: sxth w10, w9 6513; -O0: subs w10, w10, w8, sxth 6514; -O0: csel w12, w9, w8, le 6515; -O0: ldaxrh w8, [x11] 6516; -O0: cmp w8, w9, uxth 6517; -O0: stlxrh w10, w12, [x11] 6518; -O0: subs w9, w8, w9, uxth 6519; -O0: subs w9, w9, #1 6520; 6521; -O1-LABEL: atomicrmw_min_i16_aligned_seq_cst: 6522; -O1: ldaxrh w9, [x0] 6523; -O1: sxth w8, w9 6524; -O1: cmp w8, w1, sxth 6525; -O1: csel w9, w9, w1, le 6526; -O1: stlxrh w10, w9, [x0] 6527 %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 2 6528 ret i16 %r 6529} 6530 6531define dso_local i32 @atomicrmw_min_i32_aligned_monotonic(ptr %ptr, i32 %value) { 6532; -O0-LABEL: atomicrmw_min_i32_aligned_monotonic: 6533; -O0: subs w10, w9, w8 6534; -O0: csel w12, w9, w8, le 6535; -O0: ldaxr w8, [x11] 6536; -O0: cmp w8, w9 6537; -O0: stlxr w10, w12, [x11] 6538; -O0: subs w9, w8, w9 6539; -O0: subs w9, w9, #1 6540; 6541; -O1-LABEL: atomicrmw_min_i32_aligned_monotonic: 6542; -O1: ldxr w8, [x0] 6543; -O1: cmp w8, w1 6544; -O1: csel w9, w8, w1, le 6545; -O1: stxr w10, w9, [x0] 6546 %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 4 6547 ret i32 %r 6548} 6549 6550define dso_local i32 @atomicrmw_min_i32_aligned_acquire(ptr %ptr, i32 %value) { 6551; -O0-LABEL: atomicrmw_min_i32_aligned_acquire: 6552; -O0: subs w10, w9, w8 6553; -O0: csel w12, w9, w8, le 6554; -O0: ldaxr w8, [x11] 6555; -O0: cmp w8, w9 6556; -O0: stlxr w10, w12, [x11] 6557; -O0: subs w9, w8, w9 6558; -O0: subs w9, w9, #1 6559; 6560; -O1-LABEL: atomicrmw_min_i32_aligned_acquire: 6561; -O1: ldaxr w8, [x0] 6562; -O1: cmp w8, w1 6563; -O1: csel w9, w8, w1, le 6564; -O1: stxr w10, w9, [x0] 6565 %r = atomicrmw min ptr %ptr, i32 %value acquire, align 4 6566 ret i32 %r 6567} 6568 6569define dso_local i32 @atomicrmw_min_i32_aligned_release(ptr %ptr, i32 %value) { 6570; -O0-LABEL: atomicrmw_min_i32_aligned_release: 6571; -O0: subs w10, w9, w8 6572; -O0: csel w12, w9, w8, le 6573; -O0: ldaxr w8, [x11] 6574; -O0: cmp w8, w9 6575; -O0: stlxr w10, w12, [x11] 6576; -O0: subs w9, w8, w9 6577; -O0: subs w9, w9, #1 6578; 6579; -O1-LABEL: atomicrmw_min_i32_aligned_release: 6580; -O1: ldxr w8, [x0] 6581; -O1: cmp w8, w1 6582; -O1: csel w9, w8, w1, le 6583; -O1: stlxr w10, w9, [x0] 6584 %r = atomicrmw min ptr %ptr, i32 %value release, align 4 6585 ret i32 %r 6586} 6587 6588define dso_local i32 @atomicrmw_min_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 6589; -O0-LABEL: atomicrmw_min_i32_aligned_acq_rel: 6590; -O0: subs w10, w9, w8 6591; -O0: csel w12, w9, w8, le 6592; -O0: ldaxr w8, [x11] 6593; -O0: cmp w8, w9 6594; -O0: stlxr w10, w12, [x11] 6595; -O0: subs w9, w8, w9 6596; -O0: subs w9, w9, #1 6597; 6598; -O1-LABEL: atomicrmw_min_i32_aligned_acq_rel: 6599; -O1: ldaxr w8, [x0] 6600; -O1: cmp w8, w1 6601; -O1: csel w9, w8, w1, le 6602; -O1: stlxr w10, w9, [x0] 6603 %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 4 6604 ret i32 %r 6605} 6606 6607define dso_local i32 @atomicrmw_min_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 6608; -O0-LABEL: atomicrmw_min_i32_aligned_seq_cst: 6609; -O0: subs w10, w9, w8 6610; -O0: csel w12, w9, w8, le 6611; -O0: ldaxr w8, [x11] 6612; -O0: cmp w8, w9 6613; -O0: stlxr w10, w12, [x11] 6614; -O0: subs w9, w8, w9 6615; -O0: subs w9, w9, #1 6616; 6617; -O1-LABEL: atomicrmw_min_i32_aligned_seq_cst: 6618; -O1: ldaxr w8, [x0] 6619; -O1: cmp w8, w1 6620; -O1: csel w9, w8, w1, le 6621; -O1: stlxr w10, w9, [x0] 6622 %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 4 6623 ret i32 %r 6624} 6625 6626define dso_local i64 @atomicrmw_min_i64_aligned_monotonic(ptr %ptr, i64 %value) { 6627; -O0-LABEL: atomicrmw_min_i64_aligned_monotonic: 6628; -O0: subs x10, x9, x8 6629; -O0: csel x12, x9, x8, le 6630; -O0: ldaxr x8, [x11] 6631; -O0: cmp x8, x9 6632; -O0: stlxr w10, x12, [x11] 6633; -O0: subs x9, x8, x9 6634; -O0: subs w9, w9, #1 6635; 6636; -O1-LABEL: atomicrmw_min_i64_aligned_monotonic: 6637; -O1: ldxr x0, [x8] 6638; -O1: cmp x0, x1 6639; -O1: csel x9, x0, x1, le 6640; -O1: stxr w10, x9, [x8] 6641 %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 8 6642 ret i64 %r 6643} 6644 6645define dso_local i64 @atomicrmw_min_i64_aligned_acquire(ptr %ptr, i64 %value) { 6646; -O0-LABEL: atomicrmw_min_i64_aligned_acquire: 6647; -O0: subs x10, x9, x8 6648; -O0: csel x12, x9, x8, le 6649; -O0: ldaxr x8, [x11] 6650; -O0: cmp x8, x9 6651; -O0: stlxr w10, x12, [x11] 6652; -O0: subs x9, x8, x9 6653; -O0: subs w9, w9, #1 6654; 6655; -O1-LABEL: atomicrmw_min_i64_aligned_acquire: 6656; -O1: ldaxr x0, [x8] 6657; -O1: cmp x0, x1 6658; -O1: csel x9, x0, x1, le 6659; -O1: stxr w10, x9, [x8] 6660 %r = atomicrmw min ptr %ptr, i64 %value acquire, align 8 6661 ret i64 %r 6662} 6663 6664define dso_local i64 @atomicrmw_min_i64_aligned_release(ptr %ptr, i64 %value) { 6665; -O0-LABEL: atomicrmw_min_i64_aligned_release: 6666; -O0: subs x10, x9, x8 6667; -O0: csel x12, x9, x8, le 6668; -O0: ldaxr x8, [x11] 6669; -O0: cmp x8, x9 6670; -O0: stlxr w10, x12, [x11] 6671; -O0: subs x9, x8, x9 6672; -O0: subs w9, w9, #1 6673; 6674; -O1-LABEL: atomicrmw_min_i64_aligned_release: 6675; -O1: ldxr x0, [x8] 6676; -O1: cmp x0, x1 6677; -O1: csel x9, x0, x1, le 6678; -O1: stlxr w10, x9, [x8] 6679 %r = atomicrmw min ptr %ptr, i64 %value release, align 8 6680 ret i64 %r 6681} 6682 6683define dso_local i64 @atomicrmw_min_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 6684; -O0-LABEL: atomicrmw_min_i64_aligned_acq_rel: 6685; -O0: subs x10, x9, x8 6686; -O0: csel x12, x9, x8, le 6687; -O0: ldaxr x8, [x11] 6688; -O0: cmp x8, x9 6689; -O0: stlxr w10, x12, [x11] 6690; -O0: subs x9, x8, x9 6691; -O0: subs w9, w9, #1 6692; 6693; -O1-LABEL: atomicrmw_min_i64_aligned_acq_rel: 6694; -O1: ldaxr x0, [x8] 6695; -O1: cmp x0, x1 6696; -O1: csel x9, x0, x1, le 6697; -O1: stlxr w10, x9, [x8] 6698 %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 8 6699 ret i64 %r 6700} 6701 6702define dso_local i64 @atomicrmw_min_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 6703; -O0-LABEL: atomicrmw_min_i64_aligned_seq_cst: 6704; -O0: subs x10, x9, x8 6705; -O0: csel x12, x9, x8, le 6706; -O0: ldaxr x8, [x11] 6707; -O0: cmp x8, x9 6708; -O0: stlxr w10, x12, [x11] 6709; -O0: subs x9, x8, x9 6710; -O0: subs w9, w9, #1 6711; 6712; -O1-LABEL: atomicrmw_min_i64_aligned_seq_cst: 6713; -O1: ldaxr x0, [x8] 6714; -O1: cmp x0, x1 6715; -O1: csel x9, x0, x1, le 6716; -O1: stlxr w10, x9, [x8] 6717 %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 8 6718 ret i64 %r 6719} 6720 6721define dso_local i128 @atomicrmw_min_i128_aligned_monotonic(ptr %ptr, i128 %value) { 6722; -O0-LABEL: atomicrmw_min_i128_aligned_monotonic: 6723; -O0: subs x12, x8, x11 6724; -O0: csel x15, x13, x10, ge 6725; -O0: csel x14, x11, x8, ge 6726; -O0: ldxp x10, x12, [x9] 6727; -O0: cmp x10, x11 6728; -O0: cmp x12, x13 6729; -O0: stxp w8, x14, x15, [x9] 6730; -O0: stxp w8, x10, x12, [x9] 6731; -O0: subs x12, x12, x13 6732; -O0: ccmp x10, x11, #0, eq 6733; 6734; -O1-LABEL: atomicrmw_min_i128_aligned_monotonic: 6735; -O1: ldxp x1, x0, [x8] 6736; -O1: cmp x3, x1 6737; -O1: csel x9, x0, x2, ge 6738; -O1: csel x10, x1, x3, ge 6739; -O1: stxp w11, x10, x9, [x8] 6740 %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 16 6741 ret i128 %r 6742} 6743 6744define dso_local i128 @atomicrmw_min_i128_aligned_acquire(ptr %ptr, i128 %value) { 6745; -O0-LABEL: atomicrmw_min_i128_aligned_acquire: 6746; -O0: subs x12, x8, x11 6747; -O0: csel x15, x13, x10, ge 6748; -O0: csel x14, x11, x8, ge 6749; -O0: ldaxp x10, x12, [x9] 6750; -O0: cmp x10, x11 6751; -O0: cmp x12, x13 6752; -O0: stxp w8, x14, x15, [x9] 6753; -O0: stxp w8, x10, x12, [x9] 6754; -O0: subs x12, x12, x13 6755; -O0: ccmp x10, x11, #0, eq 6756; 6757; -O1-LABEL: atomicrmw_min_i128_aligned_acquire: 6758; -O1: ldaxp x1, x0, [x8] 6759; -O1: cmp x3, x1 6760; -O1: csel x9, x0, x2, ge 6761; -O1: csel x10, x1, x3, ge 6762; -O1: stxp w11, x10, x9, [x8] 6763 %r = atomicrmw min ptr %ptr, i128 %value acquire, align 16 6764 ret i128 %r 6765} 6766 6767define dso_local i128 @atomicrmw_min_i128_aligned_release(ptr %ptr, i128 %value) { 6768; -O0-LABEL: atomicrmw_min_i128_aligned_release: 6769; -O0: subs x12, x8, x11 6770; -O0: csel x15, x13, x10, ge 6771; -O0: csel x14, x11, x8, ge 6772; -O0: ldxp x10, x12, [x9] 6773; -O0: cmp x10, x11 6774; -O0: cmp x12, x13 6775; -O0: stlxp w8, x14, x15, [x9] 6776; -O0: stlxp w8, x10, x12, [x9] 6777; -O0: subs x12, x12, x13 6778; -O0: ccmp x10, x11, #0, eq 6779; 6780; -O1-LABEL: atomicrmw_min_i128_aligned_release: 6781; -O1: ldxp x1, x0, [x8] 6782; -O1: cmp x3, x1 6783; -O1: csel x9, x0, x2, ge 6784; -O1: csel x10, x1, x3, ge 6785; -O1: stlxp w11, x10, x9, [x8] 6786 %r = atomicrmw min ptr %ptr, i128 %value release, align 16 6787 ret i128 %r 6788} 6789 6790define dso_local i128 @atomicrmw_min_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 6791; -O0-LABEL: atomicrmw_min_i128_aligned_acq_rel: 6792; -O0: subs x12, x8, x11 6793; -O0: csel x15, x13, x10, ge 6794; -O0: csel x14, x11, x8, ge 6795; -O0: ldaxp x10, x12, [x9] 6796; -O0: cmp x10, x11 6797; -O0: cmp x12, x13 6798; -O0: stlxp w8, x14, x15, [x9] 6799; -O0: stlxp w8, x10, x12, [x9] 6800; -O0: subs x12, x12, x13 6801; -O0: ccmp x10, x11, #0, eq 6802; 6803; -O1-LABEL: atomicrmw_min_i128_aligned_acq_rel: 6804; -O1: ldaxp x1, x0, [x8] 6805; -O1: cmp x3, x1 6806; -O1: csel x9, x0, x2, ge 6807; -O1: csel x10, x1, x3, ge 6808; -O1: stlxp w11, x10, x9, [x8] 6809 %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 16 6810 ret i128 %r 6811} 6812 6813define dso_local i128 @atomicrmw_min_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 6814; -O0-LABEL: atomicrmw_min_i128_aligned_seq_cst: 6815; -O0: subs x12, x8, x11 6816; -O0: csel x15, x13, x10, ge 6817; -O0: csel x14, x11, x8, ge 6818; -O0: ldaxp x10, x12, [x9] 6819; -O0: cmp x10, x11 6820; -O0: cmp x12, x13 6821; -O0: stlxp w8, x14, x15, [x9] 6822; -O0: stlxp w8, x10, x12, [x9] 6823; -O0: subs x12, x12, x13 6824; -O0: ccmp x10, x11, #0, eq 6825; 6826; -O1-LABEL: atomicrmw_min_i128_aligned_seq_cst: 6827; -O1: ldaxp x1, x0, [x8] 6828; -O1: cmp x3, x1 6829; -O1: csel x9, x0, x2, ge 6830; -O1: csel x10, x1, x3, ge 6831; -O1: stlxp w11, x10, x9, [x8] 6832 %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 16 6833 ret i128 %r 6834} 6835 6836define dso_local i8 @atomicrmw_min_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 6837; -O0-LABEL: atomicrmw_min_i8_unaligned_monotonic: 6838; -O0: sxtb w10, w9 6839; -O0: subs w10, w10, w8, sxtb 6840; -O0: csel w12, w9, w8, le 6841; -O0: ldaxrb w8, [x11] 6842; -O0: cmp w8, w9, uxtb 6843; -O0: stlxrb w10, w12, [x11] 6844; -O0: subs w9, w8, w9, uxtb 6845; -O0: subs w9, w9, #1 6846; 6847; -O1-LABEL: atomicrmw_min_i8_unaligned_monotonic: 6848; -O1: ldxrb w9, [x0] 6849; -O1: sxtb w8, w9 6850; -O1: cmp w8, w1, sxtb 6851; -O1: csel w9, w9, w1, le 6852; -O1: stxrb w10, w9, [x0] 6853 %r = atomicrmw min ptr %ptr, i8 %value monotonic, align 1 6854 ret i8 %r 6855} 6856 6857define dso_local i8 @atomicrmw_min_i8_unaligned_acquire(ptr %ptr, i8 %value) { 6858; -O0-LABEL: atomicrmw_min_i8_unaligned_acquire: 6859; -O0: sxtb w10, w9 6860; -O0: subs w10, w10, w8, sxtb 6861; -O0: csel w12, w9, w8, le 6862; -O0: ldaxrb w8, [x11] 6863; -O0: cmp w8, w9, uxtb 6864; -O0: stlxrb w10, w12, [x11] 6865; -O0: subs w9, w8, w9, uxtb 6866; -O0: subs w9, w9, #1 6867; 6868; -O1-LABEL: atomicrmw_min_i8_unaligned_acquire: 6869; -O1: ldaxrb w9, [x0] 6870; -O1: sxtb w8, w9 6871; -O1: cmp w8, w1, sxtb 6872; -O1: csel w9, w9, w1, le 6873; -O1: stxrb w10, w9, [x0] 6874 %r = atomicrmw min ptr %ptr, i8 %value acquire, align 1 6875 ret i8 %r 6876} 6877 6878define dso_local i8 @atomicrmw_min_i8_unaligned_release(ptr %ptr, i8 %value) { 6879; -O0-LABEL: atomicrmw_min_i8_unaligned_release: 6880; -O0: sxtb w10, w9 6881; -O0: subs w10, w10, w8, sxtb 6882; -O0: csel w12, w9, w8, le 6883; -O0: ldaxrb w8, [x11] 6884; -O0: cmp w8, w9, uxtb 6885; -O0: stlxrb w10, w12, [x11] 6886; -O0: subs w9, w8, w9, uxtb 6887; -O0: subs w9, w9, #1 6888; 6889; -O1-LABEL: atomicrmw_min_i8_unaligned_release: 6890; -O1: ldxrb w9, [x0] 6891; -O1: sxtb w8, w9 6892; -O1: cmp w8, w1, sxtb 6893; -O1: csel w9, w9, w1, le 6894; -O1: stlxrb w10, w9, [x0] 6895 %r = atomicrmw min ptr %ptr, i8 %value release, align 1 6896 ret i8 %r 6897} 6898 6899define dso_local i8 @atomicrmw_min_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 6900; -O0-LABEL: atomicrmw_min_i8_unaligned_acq_rel: 6901; -O0: sxtb w10, w9 6902; -O0: subs w10, w10, w8, sxtb 6903; -O0: csel w12, w9, w8, le 6904; -O0: ldaxrb w8, [x11] 6905; -O0: cmp w8, w9, uxtb 6906; -O0: stlxrb w10, w12, [x11] 6907; -O0: subs w9, w8, w9, uxtb 6908; -O0: subs w9, w9, #1 6909; 6910; -O1-LABEL: atomicrmw_min_i8_unaligned_acq_rel: 6911; -O1: ldaxrb w9, [x0] 6912; -O1: sxtb w8, w9 6913; -O1: cmp w8, w1, sxtb 6914; -O1: csel w9, w9, w1, le 6915; -O1: stlxrb w10, w9, [x0] 6916 %r = atomicrmw min ptr %ptr, i8 %value acq_rel, align 1 6917 ret i8 %r 6918} 6919 6920define dso_local i8 @atomicrmw_min_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 6921; -O0-LABEL: atomicrmw_min_i8_unaligned_seq_cst: 6922; -O0: sxtb w10, w9 6923; -O0: subs w10, w10, w8, sxtb 6924; -O0: csel w12, w9, w8, le 6925; -O0: ldaxrb w8, [x11] 6926; -O0: cmp w8, w9, uxtb 6927; -O0: stlxrb w10, w12, [x11] 6928; -O0: subs w9, w8, w9, uxtb 6929; -O0: subs w9, w9, #1 6930; 6931; -O1-LABEL: atomicrmw_min_i8_unaligned_seq_cst: 6932; -O1: ldaxrb w9, [x0] 6933; -O1: sxtb w8, w9 6934; -O1: cmp w8, w1, sxtb 6935; -O1: csel w9, w9, w1, le 6936; -O1: stlxrb w10, w9, [x0] 6937 %r = atomicrmw min ptr %ptr, i8 %value seq_cst, align 1 6938 ret i8 %r 6939} 6940 6941define dso_local i16 @atomicrmw_min_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 6942; -O0-LABEL: atomicrmw_min_i16_unaligned_monotonic: 6943; -O0: sxth w10, w9 6944; -O0: subs w10, w10, w8, sxth 6945; -O0: csel w8, w9, w8, le 6946; -O0: bl __atomic_compare_exchange 6947; 6948; -O1-LABEL: atomicrmw_min_i16_unaligned_monotonic: 6949; -O1: sxth w8, w0 6950; -O1: cmp w8, w20, sxth 6951; -O1: csel w8, w0, w20, le 6952; -O1: bl __atomic_compare_exchange 6953 %r = atomicrmw min ptr %ptr, i16 %value monotonic, align 1 6954 ret i16 %r 6955} 6956 6957define dso_local i16 @atomicrmw_min_i16_unaligned_acquire(ptr %ptr, i16 %value) { 6958; -O0-LABEL: atomicrmw_min_i16_unaligned_acquire: 6959; -O0: sxth w10, w9 6960; -O0: subs w10, w10, w8, sxth 6961; -O0: csel w8, w9, w8, le 6962; -O0: bl __atomic_compare_exchange 6963; 6964; -O1-LABEL: atomicrmw_min_i16_unaligned_acquire: 6965; -O1: sxth w8, w0 6966; -O1: cmp w8, w20, sxth 6967; -O1: csel w8, w0, w20, le 6968; -O1: bl __atomic_compare_exchange 6969 %r = atomicrmw min ptr %ptr, i16 %value acquire, align 1 6970 ret i16 %r 6971} 6972 6973define dso_local i16 @atomicrmw_min_i16_unaligned_release(ptr %ptr, i16 %value) { 6974; -O0-LABEL: atomicrmw_min_i16_unaligned_release: 6975; -O0: sxth w10, w9 6976; -O0: subs w10, w10, w8, sxth 6977; -O0: csel w8, w9, w8, le 6978; -O0: bl __atomic_compare_exchange 6979; 6980; -O1-LABEL: atomicrmw_min_i16_unaligned_release: 6981; -O1: sxth w8, w0 6982; -O1: cmp w8, w20, sxth 6983; -O1: csel w8, w0, w20, le 6984; -O1: bl __atomic_compare_exchange 6985 %r = atomicrmw min ptr %ptr, i16 %value release, align 1 6986 ret i16 %r 6987} 6988 6989define dso_local i16 @atomicrmw_min_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 6990; -O0-LABEL: atomicrmw_min_i16_unaligned_acq_rel: 6991; -O0: sxth w10, w9 6992; -O0: subs w10, w10, w8, sxth 6993; -O0: csel w8, w9, w8, le 6994; -O0: bl __atomic_compare_exchange 6995; 6996; -O1-LABEL: atomicrmw_min_i16_unaligned_acq_rel: 6997; -O1: sxth w8, w0 6998; -O1: cmp w8, w20, sxth 6999; -O1: csel w8, w0, w20, le 7000; -O1: bl __atomic_compare_exchange 7001 %r = atomicrmw min ptr %ptr, i16 %value acq_rel, align 1 7002 ret i16 %r 7003} 7004 7005define dso_local i16 @atomicrmw_min_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 7006; -O0-LABEL: atomicrmw_min_i16_unaligned_seq_cst: 7007; -O0: sxth w10, w9 7008; -O0: subs w10, w10, w8, sxth 7009; -O0: csel w8, w9, w8, le 7010; -O0: bl __atomic_compare_exchange 7011; 7012; -O1-LABEL: atomicrmw_min_i16_unaligned_seq_cst: 7013; -O1: sxth w8, w0 7014; -O1: cmp w8, w20, sxth 7015; -O1: csel w8, w0, w20, le 7016; -O1: bl __atomic_compare_exchange 7017 %r = atomicrmw min ptr %ptr, i16 %value seq_cst, align 1 7018 ret i16 %r 7019} 7020 7021define dso_local i32 @atomicrmw_min_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 7022; -O0-LABEL: atomicrmw_min_i32_unaligned_monotonic: 7023; -O0: subs w10, w9, w8 7024; -O0: csel w8, w9, w8, le 7025; -O0: bl __atomic_compare_exchange 7026; 7027; -O1-LABEL: atomicrmw_min_i32_unaligned_monotonic: 7028; -O1: cmp w0, w20 7029; -O1: csel w8, w0, w20, le 7030; -O1: bl __atomic_compare_exchange 7031 %r = atomicrmw min ptr %ptr, i32 %value monotonic, align 1 7032 ret i32 %r 7033} 7034 7035define dso_local i32 @atomicrmw_min_i32_unaligned_acquire(ptr %ptr, i32 %value) { 7036; -O0-LABEL: atomicrmw_min_i32_unaligned_acquire: 7037; -O0: subs w10, w9, w8 7038; -O0: csel w8, w9, w8, le 7039; -O0: bl __atomic_compare_exchange 7040; 7041; -O1-LABEL: atomicrmw_min_i32_unaligned_acquire: 7042; -O1: cmp w0, w20 7043; -O1: csel w8, w0, w20, le 7044; -O1: bl __atomic_compare_exchange 7045 %r = atomicrmw min ptr %ptr, i32 %value acquire, align 1 7046 ret i32 %r 7047} 7048 7049define dso_local i32 @atomicrmw_min_i32_unaligned_release(ptr %ptr, i32 %value) { 7050; -O0-LABEL: atomicrmw_min_i32_unaligned_release: 7051; -O0: subs w10, w9, w8 7052; -O0: csel w8, w9, w8, le 7053; -O0: bl __atomic_compare_exchange 7054; 7055; -O1-LABEL: atomicrmw_min_i32_unaligned_release: 7056; -O1: cmp w0, w20 7057; -O1: csel w8, w0, w20, le 7058; -O1: bl __atomic_compare_exchange 7059 %r = atomicrmw min ptr %ptr, i32 %value release, align 1 7060 ret i32 %r 7061} 7062 7063define dso_local i32 @atomicrmw_min_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 7064; -O0-LABEL: atomicrmw_min_i32_unaligned_acq_rel: 7065; -O0: subs w10, w9, w8 7066; -O0: csel w8, w9, w8, le 7067; -O0: bl __atomic_compare_exchange 7068; 7069; -O1-LABEL: atomicrmw_min_i32_unaligned_acq_rel: 7070; -O1: cmp w0, w20 7071; -O1: csel w8, w0, w20, le 7072; -O1: bl __atomic_compare_exchange 7073 %r = atomicrmw min ptr %ptr, i32 %value acq_rel, align 1 7074 ret i32 %r 7075} 7076 7077define dso_local i32 @atomicrmw_min_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 7078; -O0-LABEL: atomicrmw_min_i32_unaligned_seq_cst: 7079; -O0: subs w10, w9, w8 7080; -O0: csel w8, w9, w8, le 7081; -O0: bl __atomic_compare_exchange 7082; 7083; -O1-LABEL: atomicrmw_min_i32_unaligned_seq_cst: 7084; -O1: cmp w0, w20 7085; -O1: csel w8, w0, w20, le 7086; -O1: bl __atomic_compare_exchange 7087 %r = atomicrmw min ptr %ptr, i32 %value seq_cst, align 1 7088 ret i32 %r 7089} 7090 7091define dso_local i64 @atomicrmw_min_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 7092; -O0-LABEL: atomicrmw_min_i64_unaligned_monotonic: 7093; -O0: subs x10, x9, x8 7094; -O0: csel x8, x9, x8, le 7095; -O0: bl __atomic_compare_exchange 7096; 7097; -O1-LABEL: atomicrmw_min_i64_unaligned_monotonic: 7098; -O1: cmp x0, x20 7099; -O1: csel x8, x0, x20, le 7100; -O1: bl __atomic_compare_exchange 7101 %r = atomicrmw min ptr %ptr, i64 %value monotonic, align 1 7102 ret i64 %r 7103} 7104 7105define dso_local i64 @atomicrmw_min_i64_unaligned_acquire(ptr %ptr, i64 %value) { 7106; -O0-LABEL: atomicrmw_min_i64_unaligned_acquire: 7107; -O0: subs x10, x9, x8 7108; -O0: csel x8, x9, x8, le 7109; -O0: bl __atomic_compare_exchange 7110; 7111; -O1-LABEL: atomicrmw_min_i64_unaligned_acquire: 7112; -O1: cmp x0, x20 7113; -O1: csel x8, x0, x20, le 7114; -O1: bl __atomic_compare_exchange 7115 %r = atomicrmw min ptr %ptr, i64 %value acquire, align 1 7116 ret i64 %r 7117} 7118 7119define dso_local i64 @atomicrmw_min_i64_unaligned_release(ptr %ptr, i64 %value) { 7120; -O0-LABEL: atomicrmw_min_i64_unaligned_release: 7121; -O0: subs x10, x9, x8 7122; -O0: csel x8, x9, x8, le 7123; -O0: bl __atomic_compare_exchange 7124; 7125; -O1-LABEL: atomicrmw_min_i64_unaligned_release: 7126; -O1: cmp x0, x20 7127; -O1: csel x8, x0, x20, le 7128; -O1: bl __atomic_compare_exchange 7129 %r = atomicrmw min ptr %ptr, i64 %value release, align 1 7130 ret i64 %r 7131} 7132 7133define dso_local i64 @atomicrmw_min_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 7134; -O0-LABEL: atomicrmw_min_i64_unaligned_acq_rel: 7135; -O0: subs x10, x9, x8 7136; -O0: csel x8, x9, x8, le 7137; -O0: bl __atomic_compare_exchange 7138; 7139; -O1-LABEL: atomicrmw_min_i64_unaligned_acq_rel: 7140; -O1: cmp x0, x20 7141; -O1: csel x8, x0, x20, le 7142; -O1: bl __atomic_compare_exchange 7143 %r = atomicrmw min ptr %ptr, i64 %value acq_rel, align 1 7144 ret i64 %r 7145} 7146 7147define dso_local i64 @atomicrmw_min_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 7148; -O0-LABEL: atomicrmw_min_i64_unaligned_seq_cst: 7149; -O0: subs x10, x9, x8 7150; -O0: csel x8, x9, x8, le 7151; -O0: bl __atomic_compare_exchange 7152; 7153; -O1-LABEL: atomicrmw_min_i64_unaligned_seq_cst: 7154; -O1: cmp x0, x20 7155; -O1: csel x8, x0, x20, le 7156; -O1: bl __atomic_compare_exchange 7157 %r = atomicrmw min ptr %ptr, i64 %value seq_cst, align 1 7158 ret i64 %r 7159} 7160 7161define dso_local i128 @atomicrmw_min_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 7162; -O0-LABEL: atomicrmw_min_i128_unaligned_monotonic: 7163; -O0: subs x12, x9, x10 7164; -O0: csel x8, x11, x8, ge 7165; -O0: csel x9, x10, x9, ge 7166; -O0: bl __atomic_compare_exchange 7167; 7168; -O1-LABEL: atomicrmw_min_i128_unaligned_monotonic: 7169; -O1: ldp x0, x1, [x0] 7170; -O1: cmp x19, x1 7171; -O1: csel x8, x1, x19, ge 7172; -O1: csel x9, x0, x21, ge 7173; -O1: bl __atomic_compare_exchange 7174 %r = atomicrmw min ptr %ptr, i128 %value monotonic, align 1 7175 ret i128 %r 7176} 7177 7178define dso_local i128 @atomicrmw_min_i128_unaligned_acquire(ptr %ptr, i128 %value) { 7179; -O0-LABEL: atomicrmw_min_i128_unaligned_acquire: 7180; -O0: subs x12, x9, x10 7181; -O0: csel x8, x11, x8, ge 7182; -O0: csel x9, x10, x9, ge 7183; -O0: bl __atomic_compare_exchange 7184; 7185; -O1-LABEL: atomicrmw_min_i128_unaligned_acquire: 7186; -O1: ldp x0, x1, [x0] 7187; -O1: cmp x19, x1 7188; -O1: csel x8, x1, x19, ge 7189; -O1: csel x9, x0, x21, ge 7190; -O1: bl __atomic_compare_exchange 7191 %r = atomicrmw min ptr %ptr, i128 %value acquire, align 1 7192 ret i128 %r 7193} 7194 7195define dso_local i128 @atomicrmw_min_i128_unaligned_release(ptr %ptr, i128 %value) { 7196; -O0-LABEL: atomicrmw_min_i128_unaligned_release: 7197; -O0: subs x12, x9, x10 7198; -O0: csel x8, x11, x8, ge 7199; -O0: csel x9, x10, x9, ge 7200; -O0: bl __atomic_compare_exchange 7201; 7202; -O1-LABEL: atomicrmw_min_i128_unaligned_release: 7203; -O1: ldp x0, x1, [x0] 7204; -O1: cmp x19, x1 7205; -O1: csel x8, x1, x19, ge 7206; -O1: csel x9, x0, x21, ge 7207; -O1: bl __atomic_compare_exchange 7208 %r = atomicrmw min ptr %ptr, i128 %value release, align 1 7209 ret i128 %r 7210} 7211 7212define dso_local i128 @atomicrmw_min_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 7213; -O0-LABEL: atomicrmw_min_i128_unaligned_acq_rel: 7214; -O0: subs x12, x9, x10 7215; -O0: csel x8, x11, x8, ge 7216; -O0: csel x9, x10, x9, ge 7217; -O0: bl __atomic_compare_exchange 7218; 7219; -O1-LABEL: atomicrmw_min_i128_unaligned_acq_rel: 7220; -O1: ldp x0, x1, [x0] 7221; -O1: cmp x19, x1 7222; -O1: csel x8, x1, x19, ge 7223; -O1: csel x9, x0, x21, ge 7224; -O1: bl __atomic_compare_exchange 7225 %r = atomicrmw min ptr %ptr, i128 %value acq_rel, align 1 7226 ret i128 %r 7227} 7228 7229define dso_local i128 @atomicrmw_min_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 7230; -O0-LABEL: atomicrmw_min_i128_unaligned_seq_cst: 7231; -O0: subs x12, x9, x10 7232; -O0: csel x8, x11, x8, ge 7233; -O0: csel x9, x10, x9, ge 7234; -O0: bl __atomic_compare_exchange 7235; 7236; -O1-LABEL: atomicrmw_min_i128_unaligned_seq_cst: 7237; -O1: ldp x0, x1, [x0] 7238; -O1: cmp x19, x1 7239; -O1: csel x8, x1, x19, ge 7240; -O1: csel x9, x0, x21, ge 7241; -O1: bl __atomic_compare_exchange 7242 %r = atomicrmw min ptr %ptr, i128 %value seq_cst, align 1 7243 ret i128 %r 7244} 7245 7246define dso_local i8 @atomicrmw_umax_i8_aligned_monotonic(ptr %ptr, i8 %value) { 7247; -O0-LABEL: atomicrmw_umax_i8_aligned_monotonic: 7248; -O0: and w9, w12, #0xff 7249; -O0: subs w10, w9, w8, uxtb 7250; -O0: csel w13, w12, w8, hi 7251; -O0: ldaxrb w8, [x11] 7252; -O0: cmp w8, w12, uxtb 7253; -O0: stlxrb w10, w13, [x11] 7254; -O0: subs w9, w8, w9 7255; -O0: subs w9, w9, #1 7256; 7257; -O1-LABEL: atomicrmw_umax_i8_aligned_monotonic: 7258; -O1: and w9, w1, #0xff 7259; -O1: ldxrb w8, [x0] 7260; -O1: cmp w8, w9 7261; -O1: csel w10, w8, w9, hi 7262; -O1: stxrb w11, w10, [x0] 7263 %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 1 7264 ret i8 %r 7265} 7266 7267define dso_local i8 @atomicrmw_umax_i8_aligned_acquire(ptr %ptr, i8 %value) { 7268; -O0-LABEL: atomicrmw_umax_i8_aligned_acquire: 7269; -O0: and w9, w12, #0xff 7270; -O0: subs w10, w9, w8, uxtb 7271; -O0: csel w13, w12, w8, hi 7272; -O0: ldaxrb w8, [x11] 7273; -O0: cmp w8, w12, uxtb 7274; -O0: stlxrb w10, w13, [x11] 7275; -O0: subs w9, w8, w9 7276; -O0: subs w9, w9, #1 7277; 7278; -O1-LABEL: atomicrmw_umax_i8_aligned_acquire: 7279; -O1: and w9, w1, #0xff 7280; -O1: ldaxrb w8, [x0] 7281; -O1: cmp w8, w9 7282; -O1: csel w10, w8, w9, hi 7283; -O1: stxrb w11, w10, [x0] 7284 %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 1 7285 ret i8 %r 7286} 7287 7288define dso_local i8 @atomicrmw_umax_i8_aligned_release(ptr %ptr, i8 %value) { 7289; -O0-LABEL: atomicrmw_umax_i8_aligned_release: 7290; -O0: and w9, w12, #0xff 7291; -O0: subs w10, w9, w8, uxtb 7292; -O0: csel w13, w12, w8, hi 7293; -O0: ldaxrb w8, [x11] 7294; -O0: cmp w8, w12, uxtb 7295; -O0: stlxrb w10, w13, [x11] 7296; -O0: subs w9, w8, w9 7297; -O0: subs w9, w9, #1 7298; 7299; -O1-LABEL: atomicrmw_umax_i8_aligned_release: 7300; -O1: and w9, w1, #0xff 7301; -O1: ldxrb w8, [x0] 7302; -O1: cmp w8, w9 7303; -O1: csel w10, w8, w9, hi 7304; -O1: stlxrb w11, w10, [x0] 7305 %r = atomicrmw umax ptr %ptr, i8 %value release, align 1 7306 ret i8 %r 7307} 7308 7309define dso_local i8 @atomicrmw_umax_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 7310; -O0-LABEL: atomicrmw_umax_i8_aligned_acq_rel: 7311; -O0: and w9, w12, #0xff 7312; -O0: subs w10, w9, w8, uxtb 7313; -O0: csel w13, w12, w8, hi 7314; -O0: ldaxrb w8, [x11] 7315; -O0: cmp w8, w12, uxtb 7316; -O0: stlxrb w10, w13, [x11] 7317; -O0: subs w9, w8, w9 7318; -O0: subs w9, w9, #1 7319; 7320; -O1-LABEL: atomicrmw_umax_i8_aligned_acq_rel: 7321; -O1: and w9, w1, #0xff 7322; -O1: ldaxrb w8, [x0] 7323; -O1: cmp w8, w9 7324; -O1: csel w10, w8, w9, hi 7325; -O1: stlxrb w11, w10, [x0] 7326 %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 1 7327 ret i8 %r 7328} 7329 7330define dso_local i8 @atomicrmw_umax_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 7331; -O0-LABEL: atomicrmw_umax_i8_aligned_seq_cst: 7332; -O0: and w9, w12, #0xff 7333; -O0: subs w10, w9, w8, uxtb 7334; -O0: csel w13, w12, w8, hi 7335; -O0: ldaxrb w8, [x11] 7336; -O0: cmp w8, w12, uxtb 7337; -O0: stlxrb w10, w13, [x11] 7338; -O0: subs w9, w8, w9 7339; -O0: subs w9, w9, #1 7340; 7341; -O1-LABEL: atomicrmw_umax_i8_aligned_seq_cst: 7342; -O1: and w9, w1, #0xff 7343; -O1: ldaxrb w8, [x0] 7344; -O1: cmp w8, w9 7345; -O1: csel w10, w8, w9, hi 7346; -O1: stlxrb w11, w10, [x0] 7347 %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 1 7348 ret i8 %r 7349} 7350 7351define dso_local i16 @atomicrmw_umax_i16_aligned_monotonic(ptr %ptr, i16 %value) { 7352; -O0-LABEL: atomicrmw_umax_i16_aligned_monotonic: 7353; -O0: and w9, w12, #0xffff 7354; -O0: subs w10, w9, w8, uxth 7355; -O0: csel w13, w12, w8, hi 7356; -O0: ldaxrh w8, [x11] 7357; -O0: cmp w8, w12, uxth 7358; -O0: stlxrh w10, w13, [x11] 7359; -O0: subs w9, w8, w9 7360; -O0: subs w9, w9, #1 7361; 7362; -O1-LABEL: atomicrmw_umax_i16_aligned_monotonic: 7363; -O1: and w9, w1, #0xffff 7364; -O1: ldxrh w8, [x0] 7365; -O1: cmp w8, w9 7366; -O1: csel w10, w8, w9, hi 7367; -O1: stxrh w11, w10, [x0] 7368 %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 2 7369 ret i16 %r 7370} 7371 7372define dso_local i16 @atomicrmw_umax_i16_aligned_acquire(ptr %ptr, i16 %value) { 7373; -O0-LABEL: atomicrmw_umax_i16_aligned_acquire: 7374; -O0: and w9, w12, #0xffff 7375; -O0: subs w10, w9, w8, uxth 7376; -O0: csel w13, w12, w8, hi 7377; -O0: ldaxrh w8, [x11] 7378; -O0: cmp w8, w12, uxth 7379; -O0: stlxrh w10, w13, [x11] 7380; -O0: subs w9, w8, w9 7381; -O0: subs w9, w9, #1 7382; 7383; -O1-LABEL: atomicrmw_umax_i16_aligned_acquire: 7384; -O1: and w9, w1, #0xffff 7385; -O1: ldaxrh w8, [x0] 7386; -O1: cmp w8, w9 7387; -O1: csel w10, w8, w9, hi 7388; -O1: stxrh w11, w10, [x0] 7389 %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 2 7390 ret i16 %r 7391} 7392 7393define dso_local i16 @atomicrmw_umax_i16_aligned_release(ptr %ptr, i16 %value) { 7394; -O0-LABEL: atomicrmw_umax_i16_aligned_release: 7395; -O0: and w9, w12, #0xffff 7396; -O0: subs w10, w9, w8, uxth 7397; -O0: csel w13, w12, w8, hi 7398; -O0: ldaxrh w8, [x11] 7399; -O0: cmp w8, w12, uxth 7400; -O0: stlxrh w10, w13, [x11] 7401; -O0: subs w9, w8, w9 7402; -O0: subs w9, w9, #1 7403; 7404; -O1-LABEL: atomicrmw_umax_i16_aligned_release: 7405; -O1: and w9, w1, #0xffff 7406; -O1: ldxrh w8, [x0] 7407; -O1: cmp w8, w9 7408; -O1: csel w10, w8, w9, hi 7409; -O1: stlxrh w11, w10, [x0] 7410 %r = atomicrmw umax ptr %ptr, i16 %value release, align 2 7411 ret i16 %r 7412} 7413 7414define dso_local i16 @atomicrmw_umax_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 7415; -O0-LABEL: atomicrmw_umax_i16_aligned_acq_rel: 7416; -O0: and w9, w12, #0xffff 7417; -O0: subs w10, w9, w8, uxth 7418; -O0: csel w13, w12, w8, hi 7419; -O0: ldaxrh w8, [x11] 7420; -O0: cmp w8, w12, uxth 7421; -O0: stlxrh w10, w13, [x11] 7422; -O0: subs w9, w8, w9 7423; -O0: subs w9, w9, #1 7424; 7425; -O1-LABEL: atomicrmw_umax_i16_aligned_acq_rel: 7426; -O1: and w9, w1, #0xffff 7427; -O1: ldaxrh w8, [x0] 7428; -O1: cmp w8, w9 7429; -O1: csel w10, w8, w9, hi 7430; -O1: stlxrh w11, w10, [x0] 7431 %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 2 7432 ret i16 %r 7433} 7434 7435define dso_local i16 @atomicrmw_umax_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 7436; -O0-LABEL: atomicrmw_umax_i16_aligned_seq_cst: 7437; -O0: and w9, w12, #0xffff 7438; -O0: subs w10, w9, w8, uxth 7439; -O0: csel w13, w12, w8, hi 7440; -O0: ldaxrh w8, [x11] 7441; -O0: cmp w8, w12, uxth 7442; -O0: stlxrh w10, w13, [x11] 7443; -O0: subs w9, w8, w9 7444; -O0: subs w9, w9, #1 7445; 7446; -O1-LABEL: atomicrmw_umax_i16_aligned_seq_cst: 7447; -O1: and w9, w1, #0xffff 7448; -O1: ldaxrh w8, [x0] 7449; -O1: cmp w8, w9 7450; -O1: csel w10, w8, w9, hi 7451; -O1: stlxrh w11, w10, [x0] 7452 %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 2 7453 ret i16 %r 7454} 7455 7456define dso_local i32 @atomicrmw_umax_i32_aligned_monotonic(ptr %ptr, i32 %value) { 7457; -O0-LABEL: atomicrmw_umax_i32_aligned_monotonic: 7458; -O0: subs w10, w9, w8 7459; -O0: csel w12, w9, w8, hi 7460; -O0: ldaxr w8, [x11] 7461; -O0: cmp w8, w9 7462; -O0: stlxr w10, w12, [x11] 7463; -O0: subs w9, w8, w9 7464; -O0: subs w9, w9, #1 7465; 7466; -O1-LABEL: atomicrmw_umax_i32_aligned_monotonic: 7467; -O1: ldxr w8, [x0] 7468; -O1: cmp w8, w1 7469; -O1: csel w9, w8, w1, hi 7470; -O1: stxr w10, w9, [x0] 7471 %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 4 7472 ret i32 %r 7473} 7474 7475define dso_local i32 @atomicrmw_umax_i32_aligned_acquire(ptr %ptr, i32 %value) { 7476; -O0-LABEL: atomicrmw_umax_i32_aligned_acquire: 7477; -O0: subs w10, w9, w8 7478; -O0: csel w12, w9, w8, hi 7479; -O0: ldaxr w8, [x11] 7480; -O0: cmp w8, w9 7481; -O0: stlxr w10, w12, [x11] 7482; -O0: subs w9, w8, w9 7483; -O0: subs w9, w9, #1 7484; 7485; -O1-LABEL: atomicrmw_umax_i32_aligned_acquire: 7486; -O1: ldaxr w8, [x0] 7487; -O1: cmp w8, w1 7488; -O1: csel w9, w8, w1, hi 7489; -O1: stxr w10, w9, [x0] 7490 %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 4 7491 ret i32 %r 7492} 7493 7494define dso_local i32 @atomicrmw_umax_i32_aligned_release(ptr %ptr, i32 %value) { 7495; -O0-LABEL: atomicrmw_umax_i32_aligned_release: 7496; -O0: subs w10, w9, w8 7497; -O0: csel w12, w9, w8, hi 7498; -O0: ldaxr w8, [x11] 7499; -O0: cmp w8, w9 7500; -O0: stlxr w10, w12, [x11] 7501; -O0: subs w9, w8, w9 7502; -O0: subs w9, w9, #1 7503; 7504; -O1-LABEL: atomicrmw_umax_i32_aligned_release: 7505; -O1: ldxr w8, [x0] 7506; -O1: cmp w8, w1 7507; -O1: csel w9, w8, w1, hi 7508; -O1: stlxr w10, w9, [x0] 7509 %r = atomicrmw umax ptr %ptr, i32 %value release, align 4 7510 ret i32 %r 7511} 7512 7513define dso_local i32 @atomicrmw_umax_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 7514; -O0-LABEL: atomicrmw_umax_i32_aligned_acq_rel: 7515; -O0: subs w10, w9, w8 7516; -O0: csel w12, w9, w8, hi 7517; -O0: ldaxr w8, [x11] 7518; -O0: cmp w8, w9 7519; -O0: stlxr w10, w12, [x11] 7520; -O0: subs w9, w8, w9 7521; -O0: subs w9, w9, #1 7522; 7523; -O1-LABEL: atomicrmw_umax_i32_aligned_acq_rel: 7524; -O1: ldaxr w8, [x0] 7525; -O1: cmp w8, w1 7526; -O1: csel w9, w8, w1, hi 7527; -O1: stlxr w10, w9, [x0] 7528 %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 4 7529 ret i32 %r 7530} 7531 7532define dso_local i32 @atomicrmw_umax_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 7533; -O0-LABEL: atomicrmw_umax_i32_aligned_seq_cst: 7534; -O0: subs w10, w9, w8 7535; -O0: csel w12, w9, w8, hi 7536; -O0: ldaxr w8, [x11] 7537; -O0: cmp w8, w9 7538; -O0: stlxr w10, w12, [x11] 7539; -O0: subs w9, w8, w9 7540; -O0: subs w9, w9, #1 7541; 7542; -O1-LABEL: atomicrmw_umax_i32_aligned_seq_cst: 7543; -O1: ldaxr w8, [x0] 7544; -O1: cmp w8, w1 7545; -O1: csel w9, w8, w1, hi 7546; -O1: stlxr w10, w9, [x0] 7547 %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 4 7548 ret i32 %r 7549} 7550 7551define dso_local i64 @atomicrmw_umax_i64_aligned_monotonic(ptr %ptr, i64 %value) { 7552; -O0-LABEL: atomicrmw_umax_i64_aligned_monotonic: 7553; -O0: subs x10, x9, x8 7554; -O0: csel x12, x9, x8, hi 7555; -O0: ldaxr x8, [x11] 7556; -O0: cmp x8, x9 7557; -O0: stlxr w10, x12, [x11] 7558; -O0: subs x9, x8, x9 7559; -O0: subs w9, w9, #1 7560; 7561; -O1-LABEL: atomicrmw_umax_i64_aligned_monotonic: 7562; -O1: ldxr x0, [x8] 7563; -O1: cmp x0, x1 7564; -O1: csel x9, x0, x1, hi 7565; -O1: stxr w10, x9, [x8] 7566 %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 8 7567 ret i64 %r 7568} 7569 7570define dso_local i64 @atomicrmw_umax_i64_aligned_acquire(ptr %ptr, i64 %value) { 7571; -O0-LABEL: atomicrmw_umax_i64_aligned_acquire: 7572; -O0: subs x10, x9, x8 7573; -O0: csel x12, x9, x8, hi 7574; -O0: ldaxr x8, [x11] 7575; -O0: cmp x8, x9 7576; -O0: stlxr w10, x12, [x11] 7577; -O0: subs x9, x8, x9 7578; -O0: subs w9, w9, #1 7579; 7580; -O1-LABEL: atomicrmw_umax_i64_aligned_acquire: 7581; -O1: ldaxr x0, [x8] 7582; -O1: cmp x0, x1 7583; -O1: csel x9, x0, x1, hi 7584; -O1: stxr w10, x9, [x8] 7585 %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 8 7586 ret i64 %r 7587} 7588 7589define dso_local i64 @atomicrmw_umax_i64_aligned_release(ptr %ptr, i64 %value) { 7590; -O0-LABEL: atomicrmw_umax_i64_aligned_release: 7591; -O0: subs x10, x9, x8 7592; -O0: csel x12, x9, x8, hi 7593; -O0: ldaxr x8, [x11] 7594; -O0: cmp x8, x9 7595; -O0: stlxr w10, x12, [x11] 7596; -O0: subs x9, x8, x9 7597; -O0: subs w9, w9, #1 7598; 7599; -O1-LABEL: atomicrmw_umax_i64_aligned_release: 7600; -O1: ldxr x0, [x8] 7601; -O1: cmp x0, x1 7602; -O1: csel x9, x0, x1, hi 7603; -O1: stlxr w10, x9, [x8] 7604 %r = atomicrmw umax ptr %ptr, i64 %value release, align 8 7605 ret i64 %r 7606} 7607 7608define dso_local i64 @atomicrmw_umax_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 7609; -O0-LABEL: atomicrmw_umax_i64_aligned_acq_rel: 7610; -O0: subs x10, x9, x8 7611; -O0: csel x12, x9, x8, hi 7612; -O0: ldaxr x8, [x11] 7613; -O0: cmp x8, x9 7614; -O0: stlxr w10, x12, [x11] 7615; -O0: subs x9, x8, x9 7616; -O0: subs w9, w9, #1 7617; 7618; -O1-LABEL: atomicrmw_umax_i64_aligned_acq_rel: 7619; -O1: ldaxr x0, [x8] 7620; -O1: cmp x0, x1 7621; -O1: csel x9, x0, x1, hi 7622; -O1: stlxr w10, x9, [x8] 7623 %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 8 7624 ret i64 %r 7625} 7626 7627define dso_local i64 @atomicrmw_umax_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 7628; -O0-LABEL: atomicrmw_umax_i64_aligned_seq_cst: 7629; -O0: subs x10, x9, x8 7630; -O0: csel x12, x9, x8, hi 7631; -O0: ldaxr x8, [x11] 7632; -O0: cmp x8, x9 7633; -O0: stlxr w10, x12, [x11] 7634; -O0: subs x9, x8, x9 7635; -O0: subs w9, w9, #1 7636; 7637; -O1-LABEL: atomicrmw_umax_i64_aligned_seq_cst: 7638; -O1: ldaxr x0, [x8] 7639; -O1: cmp x0, x1 7640; -O1: csel x9, x0, x1, hi 7641; -O1: stlxr w10, x9, [x8] 7642 %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 8 7643 ret i64 %r 7644} 7645 7646define dso_local i128 @atomicrmw_umax_i128_aligned_monotonic(ptr %ptr, i128 %value) { 7647; -O0-LABEL: atomicrmw_umax_i128_aligned_monotonic: 7648; -O0: subs x12, x8, x11 7649; -O0: csel x15, x13, x10, lo 7650; -O0: csel x14, x11, x8, lo 7651; -O0: ldxp x10, x12, [x9] 7652; -O0: cmp x10, x11 7653; -O0: cmp x12, x13 7654; -O0: stxp w8, x14, x15, [x9] 7655; -O0: stxp w8, x10, x12, [x9] 7656; -O0: subs x12, x12, x13 7657; -O0: ccmp x10, x11, #0, eq 7658; 7659; -O1-LABEL: atomicrmw_umax_i128_aligned_monotonic: 7660; -O1: ldxp x1, x0, [x8] 7661; -O1: cmp x3, x1 7662; -O1: csel x9, x0, x2, lo 7663; -O1: csel x10, x1, x3, lo 7664; -O1: stxp w11, x10, x9, [x8] 7665 %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 16 7666 ret i128 %r 7667} 7668 7669define dso_local i128 @atomicrmw_umax_i128_aligned_acquire(ptr %ptr, i128 %value) { 7670; -O0-LABEL: atomicrmw_umax_i128_aligned_acquire: 7671; -O0: subs x12, x8, x11 7672; -O0: csel x15, x13, x10, lo 7673; -O0: csel x14, x11, x8, lo 7674; -O0: ldaxp x10, x12, [x9] 7675; -O0: cmp x10, x11 7676; -O0: cmp x12, x13 7677; -O0: stxp w8, x14, x15, [x9] 7678; -O0: stxp w8, x10, x12, [x9] 7679; -O0: subs x12, x12, x13 7680; -O0: ccmp x10, x11, #0, eq 7681; 7682; -O1-LABEL: atomicrmw_umax_i128_aligned_acquire: 7683; -O1: ldaxp x1, x0, [x8] 7684; -O1: cmp x3, x1 7685; -O1: csel x9, x0, x2, lo 7686; -O1: csel x10, x1, x3, lo 7687; -O1: stxp w11, x10, x9, [x8] 7688 %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 16 7689 ret i128 %r 7690} 7691 7692define dso_local i128 @atomicrmw_umax_i128_aligned_release(ptr %ptr, i128 %value) { 7693; -O0-LABEL: atomicrmw_umax_i128_aligned_release: 7694; -O0: subs x12, x8, x11 7695; -O0: csel x15, x13, x10, lo 7696; -O0: csel x14, x11, x8, lo 7697; -O0: ldxp x10, x12, [x9] 7698; -O0: cmp x10, x11 7699; -O0: cmp x12, x13 7700; -O0: stlxp w8, x14, x15, [x9] 7701; -O0: stlxp w8, x10, x12, [x9] 7702; -O0: subs x12, x12, x13 7703; -O0: ccmp x10, x11, #0, eq 7704; 7705; -O1-LABEL: atomicrmw_umax_i128_aligned_release: 7706; -O1: ldxp x1, x0, [x8] 7707; -O1: cmp x3, x1 7708; -O1: csel x9, x0, x2, lo 7709; -O1: csel x10, x1, x3, lo 7710; -O1: stlxp w11, x10, x9, [x8] 7711 %r = atomicrmw umax ptr %ptr, i128 %value release, align 16 7712 ret i128 %r 7713} 7714 7715define dso_local i128 @atomicrmw_umax_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 7716; -O0-LABEL: atomicrmw_umax_i128_aligned_acq_rel: 7717; -O0: subs x12, x8, x11 7718; -O0: csel x15, x13, x10, lo 7719; -O0: csel x14, x11, x8, lo 7720; -O0: ldaxp x10, x12, [x9] 7721; -O0: cmp x10, x11 7722; -O0: cmp x12, x13 7723; -O0: stlxp w8, x14, x15, [x9] 7724; -O0: stlxp w8, x10, x12, [x9] 7725; -O0: subs x12, x12, x13 7726; -O0: ccmp x10, x11, #0, eq 7727; 7728; -O1-LABEL: atomicrmw_umax_i128_aligned_acq_rel: 7729; -O1: ldaxp x1, x0, [x8] 7730; -O1: cmp x3, x1 7731; -O1: csel x9, x0, x2, lo 7732; -O1: csel x10, x1, x3, lo 7733; -O1: stlxp w11, x10, x9, [x8] 7734 %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 16 7735 ret i128 %r 7736} 7737 7738define dso_local i128 @atomicrmw_umax_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 7739; -O0-LABEL: atomicrmw_umax_i128_aligned_seq_cst: 7740; -O0: subs x12, x8, x11 7741; -O0: csel x15, x13, x10, lo 7742; -O0: csel x14, x11, x8, lo 7743; -O0: ldaxp x10, x12, [x9] 7744; -O0: cmp x10, x11 7745; -O0: cmp x12, x13 7746; -O0: stlxp w8, x14, x15, [x9] 7747; -O0: stlxp w8, x10, x12, [x9] 7748; -O0: subs x12, x12, x13 7749; -O0: ccmp x10, x11, #0, eq 7750; 7751; -O1-LABEL: atomicrmw_umax_i128_aligned_seq_cst: 7752; -O1: ldaxp x1, x0, [x8] 7753; -O1: cmp x3, x1 7754; -O1: csel x9, x0, x2, lo 7755; -O1: csel x10, x1, x3, lo 7756; -O1: stlxp w11, x10, x9, [x8] 7757 %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 16 7758 ret i128 %r 7759} 7760 7761define dso_local i8 @atomicrmw_umax_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 7762; -O0-LABEL: atomicrmw_umax_i8_unaligned_monotonic: 7763; -O0: and w9, w12, #0xff 7764; -O0: subs w10, w9, w8, uxtb 7765; -O0: csel w13, w12, w8, hi 7766; -O0: ldaxrb w8, [x11] 7767; -O0: cmp w8, w12, uxtb 7768; -O0: stlxrb w10, w13, [x11] 7769; -O0: subs w9, w8, w9 7770; -O0: subs w9, w9, #1 7771; 7772; -O1-LABEL: atomicrmw_umax_i8_unaligned_monotonic: 7773; -O1: and w9, w1, #0xff 7774; -O1: ldxrb w8, [x0] 7775; -O1: cmp w8, w9 7776; -O1: csel w10, w8, w9, hi 7777; -O1: stxrb w11, w10, [x0] 7778 %r = atomicrmw umax ptr %ptr, i8 %value monotonic, align 1 7779 ret i8 %r 7780} 7781 7782define dso_local i8 @atomicrmw_umax_i8_unaligned_acquire(ptr %ptr, i8 %value) { 7783; -O0-LABEL: atomicrmw_umax_i8_unaligned_acquire: 7784; -O0: and w9, w12, #0xff 7785; -O0: subs w10, w9, w8, uxtb 7786; -O0: csel w13, w12, w8, hi 7787; -O0: ldaxrb w8, [x11] 7788; -O0: cmp w8, w12, uxtb 7789; -O0: stlxrb w10, w13, [x11] 7790; -O0: subs w9, w8, w9 7791; -O0: subs w9, w9, #1 7792; 7793; -O1-LABEL: atomicrmw_umax_i8_unaligned_acquire: 7794; -O1: and w9, w1, #0xff 7795; -O1: ldaxrb w8, [x0] 7796; -O1: cmp w8, w9 7797; -O1: csel w10, w8, w9, hi 7798; -O1: stxrb w11, w10, [x0] 7799 %r = atomicrmw umax ptr %ptr, i8 %value acquire, align 1 7800 ret i8 %r 7801} 7802 7803define dso_local i8 @atomicrmw_umax_i8_unaligned_release(ptr %ptr, i8 %value) { 7804; -O0-LABEL: atomicrmw_umax_i8_unaligned_release: 7805; -O0: and w9, w12, #0xff 7806; -O0: subs w10, w9, w8, uxtb 7807; -O0: csel w13, w12, w8, hi 7808; -O0: ldaxrb w8, [x11] 7809; -O0: cmp w8, w12, uxtb 7810; -O0: stlxrb w10, w13, [x11] 7811; -O0: subs w9, w8, w9 7812; -O0: subs w9, w9, #1 7813; 7814; -O1-LABEL: atomicrmw_umax_i8_unaligned_release: 7815; -O1: and w9, w1, #0xff 7816; -O1: ldxrb w8, [x0] 7817; -O1: cmp w8, w9 7818; -O1: csel w10, w8, w9, hi 7819; -O1: stlxrb w11, w10, [x0] 7820 %r = atomicrmw umax ptr %ptr, i8 %value release, align 1 7821 ret i8 %r 7822} 7823 7824define dso_local i8 @atomicrmw_umax_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 7825; -O0-LABEL: atomicrmw_umax_i8_unaligned_acq_rel: 7826; -O0: and w9, w12, #0xff 7827; -O0: subs w10, w9, w8, uxtb 7828; -O0: csel w13, w12, w8, hi 7829; -O0: ldaxrb w8, [x11] 7830; -O0: cmp w8, w12, uxtb 7831; -O0: stlxrb w10, w13, [x11] 7832; -O0: subs w9, w8, w9 7833; -O0: subs w9, w9, #1 7834; 7835; -O1-LABEL: atomicrmw_umax_i8_unaligned_acq_rel: 7836; -O1: and w9, w1, #0xff 7837; -O1: ldaxrb w8, [x0] 7838; -O1: cmp w8, w9 7839; -O1: csel w10, w8, w9, hi 7840; -O1: stlxrb w11, w10, [x0] 7841 %r = atomicrmw umax ptr %ptr, i8 %value acq_rel, align 1 7842 ret i8 %r 7843} 7844 7845define dso_local i8 @atomicrmw_umax_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 7846; -O0-LABEL: atomicrmw_umax_i8_unaligned_seq_cst: 7847; -O0: and w9, w12, #0xff 7848; -O0: subs w10, w9, w8, uxtb 7849; -O0: csel w13, w12, w8, hi 7850; -O0: ldaxrb w8, [x11] 7851; -O0: cmp w8, w12, uxtb 7852; -O0: stlxrb w10, w13, [x11] 7853; -O0: subs w9, w8, w9 7854; -O0: subs w9, w9, #1 7855; 7856; -O1-LABEL: atomicrmw_umax_i8_unaligned_seq_cst: 7857; -O1: and w9, w1, #0xff 7858; -O1: ldaxrb w8, [x0] 7859; -O1: cmp w8, w9 7860; -O1: csel w10, w8, w9, hi 7861; -O1: stlxrb w11, w10, [x0] 7862 %r = atomicrmw umax ptr %ptr, i8 %value seq_cst, align 1 7863 ret i8 %r 7864} 7865 7866define dso_local i16 @atomicrmw_umax_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 7867; -O0-LABEL: atomicrmw_umax_i16_unaligned_monotonic: 7868; -O0: and w10, w9, #0xffff 7869; -O0: subs w10, w10, w8, uxth 7870; -O0: csel w8, w9, w8, hi 7871; -O0: bl __atomic_compare_exchange 7872; 7873; -O1-LABEL: atomicrmw_umax_i16_unaligned_monotonic: 7874; -O1: and w8, w0, #0xffff 7875; -O1: cmp w8, w20, uxth 7876; -O1: csel w8, w0, w20, hi 7877; -O1: bl __atomic_compare_exchange 7878 %r = atomicrmw umax ptr %ptr, i16 %value monotonic, align 1 7879 ret i16 %r 7880} 7881 7882define dso_local i16 @atomicrmw_umax_i16_unaligned_acquire(ptr %ptr, i16 %value) { 7883; -O0-LABEL: atomicrmw_umax_i16_unaligned_acquire: 7884; -O0: and w10, w9, #0xffff 7885; -O0: subs w10, w10, w8, uxth 7886; -O0: csel w8, w9, w8, hi 7887; -O0: bl __atomic_compare_exchange 7888; 7889; -O1-LABEL: atomicrmw_umax_i16_unaligned_acquire: 7890; -O1: and w8, w0, #0xffff 7891; -O1: cmp w8, w20, uxth 7892; -O1: csel w8, w0, w20, hi 7893; -O1: bl __atomic_compare_exchange 7894 %r = atomicrmw umax ptr %ptr, i16 %value acquire, align 1 7895 ret i16 %r 7896} 7897 7898define dso_local i16 @atomicrmw_umax_i16_unaligned_release(ptr %ptr, i16 %value) { 7899; -O0-LABEL: atomicrmw_umax_i16_unaligned_release: 7900; -O0: and w10, w9, #0xffff 7901; -O0: subs w10, w10, w8, uxth 7902; -O0: csel w8, w9, w8, hi 7903; -O0: bl __atomic_compare_exchange 7904; 7905; -O1-LABEL: atomicrmw_umax_i16_unaligned_release: 7906; -O1: and w8, w0, #0xffff 7907; -O1: cmp w8, w20, uxth 7908; -O1: csel w8, w0, w20, hi 7909; -O1: bl __atomic_compare_exchange 7910 %r = atomicrmw umax ptr %ptr, i16 %value release, align 1 7911 ret i16 %r 7912} 7913 7914define dso_local i16 @atomicrmw_umax_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 7915; -O0-LABEL: atomicrmw_umax_i16_unaligned_acq_rel: 7916; -O0: and w10, w9, #0xffff 7917; -O0: subs w10, w10, w8, uxth 7918; -O0: csel w8, w9, w8, hi 7919; -O0: bl __atomic_compare_exchange 7920; 7921; -O1-LABEL: atomicrmw_umax_i16_unaligned_acq_rel: 7922; -O1: and w8, w0, #0xffff 7923; -O1: cmp w8, w20, uxth 7924; -O1: csel w8, w0, w20, hi 7925; -O1: bl __atomic_compare_exchange 7926 %r = atomicrmw umax ptr %ptr, i16 %value acq_rel, align 1 7927 ret i16 %r 7928} 7929 7930define dso_local i16 @atomicrmw_umax_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 7931; -O0-LABEL: atomicrmw_umax_i16_unaligned_seq_cst: 7932; -O0: and w10, w9, #0xffff 7933; -O0: subs w10, w10, w8, uxth 7934; -O0: csel w8, w9, w8, hi 7935; -O0: bl __atomic_compare_exchange 7936; 7937; -O1-LABEL: atomicrmw_umax_i16_unaligned_seq_cst: 7938; -O1: and w8, w0, #0xffff 7939; -O1: cmp w8, w20, uxth 7940; -O1: csel w8, w0, w20, hi 7941; -O1: bl __atomic_compare_exchange 7942 %r = atomicrmw umax ptr %ptr, i16 %value seq_cst, align 1 7943 ret i16 %r 7944} 7945 7946define dso_local i32 @atomicrmw_umax_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 7947; -O0-LABEL: atomicrmw_umax_i32_unaligned_monotonic: 7948; -O0: subs w10, w9, w8 7949; -O0: csel w8, w9, w8, hi 7950; -O0: bl __atomic_compare_exchange 7951; 7952; -O1-LABEL: atomicrmw_umax_i32_unaligned_monotonic: 7953; -O1: cmp w0, w20 7954; -O1: csel w8, w0, w20, hi 7955; -O1: bl __atomic_compare_exchange 7956 %r = atomicrmw umax ptr %ptr, i32 %value monotonic, align 1 7957 ret i32 %r 7958} 7959 7960define dso_local i32 @atomicrmw_umax_i32_unaligned_acquire(ptr %ptr, i32 %value) { 7961; -O0-LABEL: atomicrmw_umax_i32_unaligned_acquire: 7962; -O0: subs w10, w9, w8 7963; -O0: csel w8, w9, w8, hi 7964; -O0: bl __atomic_compare_exchange 7965; 7966; -O1-LABEL: atomicrmw_umax_i32_unaligned_acquire: 7967; -O1: cmp w0, w20 7968; -O1: csel w8, w0, w20, hi 7969; -O1: bl __atomic_compare_exchange 7970 %r = atomicrmw umax ptr %ptr, i32 %value acquire, align 1 7971 ret i32 %r 7972} 7973 7974define dso_local i32 @atomicrmw_umax_i32_unaligned_release(ptr %ptr, i32 %value) { 7975; -O0-LABEL: atomicrmw_umax_i32_unaligned_release: 7976; -O0: subs w10, w9, w8 7977; -O0: csel w8, w9, w8, hi 7978; -O0: bl __atomic_compare_exchange 7979; 7980; -O1-LABEL: atomicrmw_umax_i32_unaligned_release: 7981; -O1: cmp w0, w20 7982; -O1: csel w8, w0, w20, hi 7983; -O1: bl __atomic_compare_exchange 7984 %r = atomicrmw umax ptr %ptr, i32 %value release, align 1 7985 ret i32 %r 7986} 7987 7988define dso_local i32 @atomicrmw_umax_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 7989; -O0-LABEL: atomicrmw_umax_i32_unaligned_acq_rel: 7990; -O0: subs w10, w9, w8 7991; -O0: csel w8, w9, w8, hi 7992; -O0: bl __atomic_compare_exchange 7993; 7994; -O1-LABEL: atomicrmw_umax_i32_unaligned_acq_rel: 7995; -O1: cmp w0, w20 7996; -O1: csel w8, w0, w20, hi 7997; -O1: bl __atomic_compare_exchange 7998 %r = atomicrmw umax ptr %ptr, i32 %value acq_rel, align 1 7999 ret i32 %r 8000} 8001 8002define dso_local i32 @atomicrmw_umax_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 8003; -O0-LABEL: atomicrmw_umax_i32_unaligned_seq_cst: 8004; -O0: subs w10, w9, w8 8005; -O0: csel w8, w9, w8, hi 8006; -O0: bl __atomic_compare_exchange 8007; 8008; -O1-LABEL: atomicrmw_umax_i32_unaligned_seq_cst: 8009; -O1: cmp w0, w20 8010; -O1: csel w8, w0, w20, hi 8011; -O1: bl __atomic_compare_exchange 8012 %r = atomicrmw umax ptr %ptr, i32 %value seq_cst, align 1 8013 ret i32 %r 8014} 8015 8016define dso_local i64 @atomicrmw_umax_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 8017; -O0-LABEL: atomicrmw_umax_i64_unaligned_monotonic: 8018; -O0: subs x10, x9, x8 8019; -O0: csel x8, x9, x8, hi 8020; -O0: bl __atomic_compare_exchange 8021; 8022; -O1-LABEL: atomicrmw_umax_i64_unaligned_monotonic: 8023; -O1: cmp x0, x20 8024; -O1: csel x8, x0, x20, hi 8025; -O1: bl __atomic_compare_exchange 8026 %r = atomicrmw umax ptr %ptr, i64 %value monotonic, align 1 8027 ret i64 %r 8028} 8029 8030define dso_local i64 @atomicrmw_umax_i64_unaligned_acquire(ptr %ptr, i64 %value) { 8031; -O0-LABEL: atomicrmw_umax_i64_unaligned_acquire: 8032; -O0: subs x10, x9, x8 8033; -O0: csel x8, x9, x8, hi 8034; -O0: bl __atomic_compare_exchange 8035; 8036; -O1-LABEL: atomicrmw_umax_i64_unaligned_acquire: 8037; -O1: cmp x0, x20 8038; -O1: csel x8, x0, x20, hi 8039; -O1: bl __atomic_compare_exchange 8040 %r = atomicrmw umax ptr %ptr, i64 %value acquire, align 1 8041 ret i64 %r 8042} 8043 8044define dso_local i64 @atomicrmw_umax_i64_unaligned_release(ptr %ptr, i64 %value) { 8045; -O0-LABEL: atomicrmw_umax_i64_unaligned_release: 8046; -O0: subs x10, x9, x8 8047; -O0: csel x8, x9, x8, hi 8048; -O0: bl __atomic_compare_exchange 8049; 8050; -O1-LABEL: atomicrmw_umax_i64_unaligned_release: 8051; -O1: cmp x0, x20 8052; -O1: csel x8, x0, x20, hi 8053; -O1: bl __atomic_compare_exchange 8054 %r = atomicrmw umax ptr %ptr, i64 %value release, align 1 8055 ret i64 %r 8056} 8057 8058define dso_local i64 @atomicrmw_umax_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 8059; -O0-LABEL: atomicrmw_umax_i64_unaligned_acq_rel: 8060; -O0: subs x10, x9, x8 8061; -O0: csel x8, x9, x8, hi 8062; -O0: bl __atomic_compare_exchange 8063; 8064; -O1-LABEL: atomicrmw_umax_i64_unaligned_acq_rel: 8065; -O1: cmp x0, x20 8066; -O1: csel x8, x0, x20, hi 8067; -O1: bl __atomic_compare_exchange 8068 %r = atomicrmw umax ptr %ptr, i64 %value acq_rel, align 1 8069 ret i64 %r 8070} 8071 8072define dso_local i64 @atomicrmw_umax_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 8073; -O0-LABEL: atomicrmw_umax_i64_unaligned_seq_cst: 8074; -O0: subs x10, x9, x8 8075; -O0: csel x8, x9, x8, hi 8076; -O0: bl __atomic_compare_exchange 8077; 8078; -O1-LABEL: atomicrmw_umax_i64_unaligned_seq_cst: 8079; -O1: cmp x0, x20 8080; -O1: csel x8, x0, x20, hi 8081; -O1: bl __atomic_compare_exchange 8082 %r = atomicrmw umax ptr %ptr, i64 %value seq_cst, align 1 8083 ret i64 %r 8084} 8085 8086define dso_local i128 @atomicrmw_umax_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 8087; -O0-LABEL: atomicrmw_umax_i128_unaligned_monotonic: 8088; -O0: subs x12, x9, x10 8089; -O0: csel x8, x11, x8, lo 8090; -O0: csel x9, x10, x9, lo 8091; -O0: bl __atomic_compare_exchange 8092; 8093; -O1-LABEL: atomicrmw_umax_i128_unaligned_monotonic: 8094; -O1: ldp x0, x1, [x0] 8095; -O1: cmp x19, x1 8096; -O1: csel x8, x1, x19, lo 8097; -O1: csel x9, x0, x21, lo 8098; -O1: bl __atomic_compare_exchange 8099 %r = atomicrmw umax ptr %ptr, i128 %value monotonic, align 1 8100 ret i128 %r 8101} 8102 8103define dso_local i128 @atomicrmw_umax_i128_unaligned_acquire(ptr %ptr, i128 %value) { 8104; -O0-LABEL: atomicrmw_umax_i128_unaligned_acquire: 8105; -O0: subs x12, x9, x10 8106; -O0: csel x8, x11, x8, lo 8107; -O0: csel x9, x10, x9, lo 8108; -O0: bl __atomic_compare_exchange 8109; 8110; -O1-LABEL: atomicrmw_umax_i128_unaligned_acquire: 8111; -O1: ldp x0, x1, [x0] 8112; -O1: cmp x19, x1 8113; -O1: csel x8, x1, x19, lo 8114; -O1: csel x9, x0, x21, lo 8115; -O1: bl __atomic_compare_exchange 8116 %r = atomicrmw umax ptr %ptr, i128 %value acquire, align 1 8117 ret i128 %r 8118} 8119 8120define dso_local i128 @atomicrmw_umax_i128_unaligned_release(ptr %ptr, i128 %value) { 8121; -O0-LABEL: atomicrmw_umax_i128_unaligned_release: 8122; -O0: subs x12, x9, x10 8123; -O0: csel x8, x11, x8, lo 8124; -O0: csel x9, x10, x9, lo 8125; -O0: bl __atomic_compare_exchange 8126; 8127; -O1-LABEL: atomicrmw_umax_i128_unaligned_release: 8128; -O1: ldp x0, x1, [x0] 8129; -O1: cmp x19, x1 8130; -O1: csel x8, x1, x19, lo 8131; -O1: csel x9, x0, x21, lo 8132; -O1: bl __atomic_compare_exchange 8133 %r = atomicrmw umax ptr %ptr, i128 %value release, align 1 8134 ret i128 %r 8135} 8136 8137define dso_local i128 @atomicrmw_umax_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 8138; -O0-LABEL: atomicrmw_umax_i128_unaligned_acq_rel: 8139; -O0: subs x12, x9, x10 8140; -O0: csel x8, x11, x8, lo 8141; -O0: csel x9, x10, x9, lo 8142; -O0: bl __atomic_compare_exchange 8143; 8144; -O1-LABEL: atomicrmw_umax_i128_unaligned_acq_rel: 8145; -O1: ldp x0, x1, [x0] 8146; -O1: cmp x19, x1 8147; -O1: csel x8, x1, x19, lo 8148; -O1: csel x9, x0, x21, lo 8149; -O1: bl __atomic_compare_exchange 8150 %r = atomicrmw umax ptr %ptr, i128 %value acq_rel, align 1 8151 ret i128 %r 8152} 8153 8154define dso_local i128 @atomicrmw_umax_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 8155; -O0-LABEL: atomicrmw_umax_i128_unaligned_seq_cst: 8156; -O0: subs x12, x9, x10 8157; -O0: csel x8, x11, x8, lo 8158; -O0: csel x9, x10, x9, lo 8159; -O0: bl __atomic_compare_exchange 8160; 8161; -O1-LABEL: atomicrmw_umax_i128_unaligned_seq_cst: 8162; -O1: ldp x0, x1, [x0] 8163; -O1: cmp x19, x1 8164; -O1: csel x8, x1, x19, lo 8165; -O1: csel x9, x0, x21, lo 8166; -O1: bl __atomic_compare_exchange 8167 %r = atomicrmw umax ptr %ptr, i128 %value seq_cst, align 1 8168 ret i128 %r 8169} 8170 8171define dso_local i8 @atomicrmw_umin_i8_aligned_monotonic(ptr %ptr, i8 %value) { 8172; -O0-LABEL: atomicrmw_umin_i8_aligned_monotonic: 8173; -O0: and w9, w12, #0xff 8174; -O0: subs w10, w9, w8, uxtb 8175; -O0: csel w13, w12, w8, ls 8176; -O0: ldaxrb w8, [x11] 8177; -O0: cmp w8, w12, uxtb 8178; -O0: stlxrb w10, w13, [x11] 8179; -O0: subs w9, w8, w9 8180; -O0: subs w9, w9, #1 8181; 8182; -O1-LABEL: atomicrmw_umin_i8_aligned_monotonic: 8183; -O1: and w9, w1, #0xff 8184; -O1: ldxrb w8, [x0] 8185; -O1: cmp w8, w9 8186; -O1: csel w10, w8, w9, ls 8187; -O1: stxrb w11, w10, [x0] 8188 %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 1 8189 ret i8 %r 8190} 8191 8192define dso_local i8 @atomicrmw_umin_i8_aligned_acquire(ptr %ptr, i8 %value) { 8193; -O0-LABEL: atomicrmw_umin_i8_aligned_acquire: 8194; -O0: and w9, w12, #0xff 8195; -O0: subs w10, w9, w8, uxtb 8196; -O0: csel w13, w12, w8, ls 8197; -O0: ldaxrb w8, [x11] 8198; -O0: cmp w8, w12, uxtb 8199; -O0: stlxrb w10, w13, [x11] 8200; -O0: subs w9, w8, w9 8201; -O0: subs w9, w9, #1 8202; 8203; -O1-LABEL: atomicrmw_umin_i8_aligned_acquire: 8204; -O1: and w9, w1, #0xff 8205; -O1: ldaxrb w8, [x0] 8206; -O1: cmp w8, w9 8207; -O1: csel w10, w8, w9, ls 8208; -O1: stxrb w11, w10, [x0] 8209 %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 1 8210 ret i8 %r 8211} 8212 8213define dso_local i8 @atomicrmw_umin_i8_aligned_release(ptr %ptr, i8 %value) { 8214; -O0-LABEL: atomicrmw_umin_i8_aligned_release: 8215; -O0: and w9, w12, #0xff 8216; -O0: subs w10, w9, w8, uxtb 8217; -O0: csel w13, w12, w8, ls 8218; -O0: ldaxrb w8, [x11] 8219; -O0: cmp w8, w12, uxtb 8220; -O0: stlxrb w10, w13, [x11] 8221; -O0: subs w9, w8, w9 8222; -O0: subs w9, w9, #1 8223; 8224; -O1-LABEL: atomicrmw_umin_i8_aligned_release: 8225; -O1: and w9, w1, #0xff 8226; -O1: ldxrb w8, [x0] 8227; -O1: cmp w8, w9 8228; -O1: csel w10, w8, w9, ls 8229; -O1: stlxrb w11, w10, [x0] 8230 %r = atomicrmw umin ptr %ptr, i8 %value release, align 1 8231 ret i8 %r 8232} 8233 8234define dso_local i8 @atomicrmw_umin_i8_aligned_acq_rel(ptr %ptr, i8 %value) { 8235; -O0-LABEL: atomicrmw_umin_i8_aligned_acq_rel: 8236; -O0: and w9, w12, #0xff 8237; -O0: subs w10, w9, w8, uxtb 8238; -O0: csel w13, w12, w8, ls 8239; -O0: ldaxrb w8, [x11] 8240; -O0: cmp w8, w12, uxtb 8241; -O0: stlxrb w10, w13, [x11] 8242; -O0: subs w9, w8, w9 8243; -O0: subs w9, w9, #1 8244; 8245; -O1-LABEL: atomicrmw_umin_i8_aligned_acq_rel: 8246; -O1: and w9, w1, #0xff 8247; -O1: ldaxrb w8, [x0] 8248; -O1: cmp w8, w9 8249; -O1: csel w10, w8, w9, ls 8250; -O1: stlxrb w11, w10, [x0] 8251 %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 1 8252 ret i8 %r 8253} 8254 8255define dso_local i8 @atomicrmw_umin_i8_aligned_seq_cst(ptr %ptr, i8 %value) { 8256; -O0-LABEL: atomicrmw_umin_i8_aligned_seq_cst: 8257; -O0: and w9, w12, #0xff 8258; -O0: subs w10, w9, w8, uxtb 8259; -O0: csel w13, w12, w8, ls 8260; -O0: ldaxrb w8, [x11] 8261; -O0: cmp w8, w12, uxtb 8262; -O0: stlxrb w10, w13, [x11] 8263; -O0: subs w9, w8, w9 8264; -O0: subs w9, w9, #1 8265; 8266; -O1-LABEL: atomicrmw_umin_i8_aligned_seq_cst: 8267; -O1: and w9, w1, #0xff 8268; -O1: ldaxrb w8, [x0] 8269; -O1: cmp w8, w9 8270; -O1: csel w10, w8, w9, ls 8271; -O1: stlxrb w11, w10, [x0] 8272 %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 1 8273 ret i8 %r 8274} 8275 8276define dso_local i16 @atomicrmw_umin_i16_aligned_monotonic(ptr %ptr, i16 %value) { 8277; -O0-LABEL: atomicrmw_umin_i16_aligned_monotonic: 8278; -O0: and w9, w12, #0xffff 8279; -O0: subs w10, w9, w8, uxth 8280; -O0: csel w13, w12, w8, ls 8281; -O0: ldaxrh w8, [x11] 8282; -O0: cmp w8, w12, uxth 8283; -O0: stlxrh w10, w13, [x11] 8284; -O0: subs w9, w8, w9 8285; -O0: subs w9, w9, #1 8286; 8287; -O1-LABEL: atomicrmw_umin_i16_aligned_monotonic: 8288; -O1: and w9, w1, #0xffff 8289; -O1: ldxrh w8, [x0] 8290; -O1: cmp w8, w9 8291; -O1: csel w10, w8, w9, ls 8292; -O1: stxrh w11, w10, [x0] 8293 %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 2 8294 ret i16 %r 8295} 8296 8297define dso_local i16 @atomicrmw_umin_i16_aligned_acquire(ptr %ptr, i16 %value) { 8298; -O0-LABEL: atomicrmw_umin_i16_aligned_acquire: 8299; -O0: and w9, w12, #0xffff 8300; -O0: subs w10, w9, w8, uxth 8301; -O0: csel w13, w12, w8, ls 8302; -O0: ldaxrh w8, [x11] 8303; -O0: cmp w8, w12, uxth 8304; -O0: stlxrh w10, w13, [x11] 8305; -O0: subs w9, w8, w9 8306; -O0: subs w9, w9, #1 8307; 8308; -O1-LABEL: atomicrmw_umin_i16_aligned_acquire: 8309; -O1: and w9, w1, #0xffff 8310; -O1: ldaxrh w8, [x0] 8311; -O1: cmp w8, w9 8312; -O1: csel w10, w8, w9, ls 8313; -O1: stxrh w11, w10, [x0] 8314 %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 2 8315 ret i16 %r 8316} 8317 8318define dso_local i16 @atomicrmw_umin_i16_aligned_release(ptr %ptr, i16 %value) { 8319; -O0-LABEL: atomicrmw_umin_i16_aligned_release: 8320; -O0: and w9, w12, #0xffff 8321; -O0: subs w10, w9, w8, uxth 8322; -O0: csel w13, w12, w8, ls 8323; -O0: ldaxrh w8, [x11] 8324; -O0: cmp w8, w12, uxth 8325; -O0: stlxrh w10, w13, [x11] 8326; -O0: subs w9, w8, w9 8327; -O0: subs w9, w9, #1 8328; 8329; -O1-LABEL: atomicrmw_umin_i16_aligned_release: 8330; -O1: and w9, w1, #0xffff 8331; -O1: ldxrh w8, [x0] 8332; -O1: cmp w8, w9 8333; -O1: csel w10, w8, w9, ls 8334; -O1: stlxrh w11, w10, [x0] 8335 %r = atomicrmw umin ptr %ptr, i16 %value release, align 2 8336 ret i16 %r 8337} 8338 8339define dso_local i16 @atomicrmw_umin_i16_aligned_acq_rel(ptr %ptr, i16 %value) { 8340; -O0-LABEL: atomicrmw_umin_i16_aligned_acq_rel: 8341; -O0: and w9, w12, #0xffff 8342; -O0: subs w10, w9, w8, uxth 8343; -O0: csel w13, w12, w8, ls 8344; -O0: ldaxrh w8, [x11] 8345; -O0: cmp w8, w12, uxth 8346; -O0: stlxrh w10, w13, [x11] 8347; -O0: subs w9, w8, w9 8348; -O0: subs w9, w9, #1 8349; 8350; -O1-LABEL: atomicrmw_umin_i16_aligned_acq_rel: 8351; -O1: and w9, w1, #0xffff 8352; -O1: ldaxrh w8, [x0] 8353; -O1: cmp w8, w9 8354; -O1: csel w10, w8, w9, ls 8355; -O1: stlxrh w11, w10, [x0] 8356 %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 2 8357 ret i16 %r 8358} 8359 8360define dso_local i16 @atomicrmw_umin_i16_aligned_seq_cst(ptr %ptr, i16 %value) { 8361; -O0-LABEL: atomicrmw_umin_i16_aligned_seq_cst: 8362; -O0: and w9, w12, #0xffff 8363; -O0: subs w10, w9, w8, uxth 8364; -O0: csel w13, w12, w8, ls 8365; -O0: ldaxrh w8, [x11] 8366; -O0: cmp w8, w12, uxth 8367; -O0: stlxrh w10, w13, [x11] 8368; -O0: subs w9, w8, w9 8369; -O0: subs w9, w9, #1 8370; 8371; -O1-LABEL: atomicrmw_umin_i16_aligned_seq_cst: 8372; -O1: and w9, w1, #0xffff 8373; -O1: ldaxrh w8, [x0] 8374; -O1: cmp w8, w9 8375; -O1: csel w10, w8, w9, ls 8376; -O1: stlxrh w11, w10, [x0] 8377 %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 2 8378 ret i16 %r 8379} 8380 8381define dso_local i32 @atomicrmw_umin_i32_aligned_monotonic(ptr %ptr, i32 %value) { 8382; -O0-LABEL: atomicrmw_umin_i32_aligned_monotonic: 8383; -O0: subs w10, w9, w8 8384; -O0: csel w12, w9, w8, ls 8385; -O0: ldaxr w8, [x11] 8386; -O0: cmp w8, w9 8387; -O0: stlxr w10, w12, [x11] 8388; -O0: subs w9, w8, w9 8389; -O0: subs w9, w9, #1 8390; 8391; -O1-LABEL: atomicrmw_umin_i32_aligned_monotonic: 8392; -O1: ldxr w8, [x0] 8393; -O1: cmp w8, w1 8394; -O1: csel w9, w8, w1, ls 8395; -O1: stxr w10, w9, [x0] 8396 %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 4 8397 ret i32 %r 8398} 8399 8400define dso_local i32 @atomicrmw_umin_i32_aligned_acquire(ptr %ptr, i32 %value) { 8401; -O0-LABEL: atomicrmw_umin_i32_aligned_acquire: 8402; -O0: subs w10, w9, w8 8403; -O0: csel w12, w9, w8, ls 8404; -O0: ldaxr w8, [x11] 8405; -O0: cmp w8, w9 8406; -O0: stlxr w10, w12, [x11] 8407; -O0: subs w9, w8, w9 8408; -O0: subs w9, w9, #1 8409; 8410; -O1-LABEL: atomicrmw_umin_i32_aligned_acquire: 8411; -O1: ldaxr w8, [x0] 8412; -O1: cmp w8, w1 8413; -O1: csel w9, w8, w1, ls 8414; -O1: stxr w10, w9, [x0] 8415 %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 4 8416 ret i32 %r 8417} 8418 8419define dso_local i32 @atomicrmw_umin_i32_aligned_release(ptr %ptr, i32 %value) { 8420; -O0-LABEL: atomicrmw_umin_i32_aligned_release: 8421; -O0: subs w10, w9, w8 8422; -O0: csel w12, w9, w8, ls 8423; -O0: ldaxr w8, [x11] 8424; -O0: cmp w8, w9 8425; -O0: stlxr w10, w12, [x11] 8426; -O0: subs w9, w8, w9 8427; -O0: subs w9, w9, #1 8428; 8429; -O1-LABEL: atomicrmw_umin_i32_aligned_release: 8430; -O1: ldxr w8, [x0] 8431; -O1: cmp w8, w1 8432; -O1: csel w9, w8, w1, ls 8433; -O1: stlxr w10, w9, [x0] 8434 %r = atomicrmw umin ptr %ptr, i32 %value release, align 4 8435 ret i32 %r 8436} 8437 8438define dso_local i32 @atomicrmw_umin_i32_aligned_acq_rel(ptr %ptr, i32 %value) { 8439; -O0-LABEL: atomicrmw_umin_i32_aligned_acq_rel: 8440; -O0: subs w10, w9, w8 8441; -O0: csel w12, w9, w8, ls 8442; -O0: ldaxr w8, [x11] 8443; -O0: cmp w8, w9 8444; -O0: stlxr w10, w12, [x11] 8445; -O0: subs w9, w8, w9 8446; -O0: subs w9, w9, #1 8447; 8448; -O1-LABEL: atomicrmw_umin_i32_aligned_acq_rel: 8449; -O1: ldaxr w8, [x0] 8450; -O1: cmp w8, w1 8451; -O1: csel w9, w8, w1, ls 8452; -O1: stlxr w10, w9, [x0] 8453 %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 4 8454 ret i32 %r 8455} 8456 8457define dso_local i32 @atomicrmw_umin_i32_aligned_seq_cst(ptr %ptr, i32 %value) { 8458; -O0-LABEL: atomicrmw_umin_i32_aligned_seq_cst: 8459; -O0: subs w10, w9, w8 8460; -O0: csel w12, w9, w8, ls 8461; -O0: ldaxr w8, [x11] 8462; -O0: cmp w8, w9 8463; -O0: stlxr w10, w12, [x11] 8464; -O0: subs w9, w8, w9 8465; -O0: subs w9, w9, #1 8466; 8467; -O1-LABEL: atomicrmw_umin_i32_aligned_seq_cst: 8468; -O1: ldaxr w8, [x0] 8469; -O1: cmp w8, w1 8470; -O1: csel w9, w8, w1, ls 8471; -O1: stlxr w10, w9, [x0] 8472 %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 4 8473 ret i32 %r 8474} 8475 8476define dso_local i64 @atomicrmw_umin_i64_aligned_monotonic(ptr %ptr, i64 %value) { 8477; -O0-LABEL: atomicrmw_umin_i64_aligned_monotonic: 8478; -O0: subs x10, x9, x8 8479; -O0: csel x12, x9, x8, ls 8480; -O0: ldaxr x8, [x11] 8481; -O0: cmp x8, x9 8482; -O0: stlxr w10, x12, [x11] 8483; -O0: subs x9, x8, x9 8484; -O0: subs w9, w9, #1 8485; 8486; -O1-LABEL: atomicrmw_umin_i64_aligned_monotonic: 8487; -O1: ldxr x0, [x8] 8488; -O1: cmp x0, x1 8489; -O1: csel x9, x0, x1, ls 8490; -O1: stxr w10, x9, [x8] 8491 %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 8 8492 ret i64 %r 8493} 8494 8495define dso_local i64 @atomicrmw_umin_i64_aligned_acquire(ptr %ptr, i64 %value) { 8496; -O0-LABEL: atomicrmw_umin_i64_aligned_acquire: 8497; -O0: subs x10, x9, x8 8498; -O0: csel x12, x9, x8, ls 8499; -O0: ldaxr x8, [x11] 8500; -O0: cmp x8, x9 8501; -O0: stlxr w10, x12, [x11] 8502; -O0: subs x9, x8, x9 8503; -O0: subs w9, w9, #1 8504; 8505; -O1-LABEL: atomicrmw_umin_i64_aligned_acquire: 8506; -O1: ldaxr x0, [x8] 8507; -O1: cmp x0, x1 8508; -O1: csel x9, x0, x1, ls 8509; -O1: stxr w10, x9, [x8] 8510 %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 8 8511 ret i64 %r 8512} 8513 8514define dso_local i64 @atomicrmw_umin_i64_aligned_release(ptr %ptr, i64 %value) { 8515; -O0-LABEL: atomicrmw_umin_i64_aligned_release: 8516; -O0: subs x10, x9, x8 8517; -O0: csel x12, x9, x8, ls 8518; -O0: ldaxr x8, [x11] 8519; -O0: cmp x8, x9 8520; -O0: stlxr w10, x12, [x11] 8521; -O0: subs x9, x8, x9 8522; -O0: subs w9, w9, #1 8523; 8524; -O1-LABEL: atomicrmw_umin_i64_aligned_release: 8525; -O1: ldxr x0, [x8] 8526; -O1: cmp x0, x1 8527; -O1: csel x9, x0, x1, ls 8528; -O1: stlxr w10, x9, [x8] 8529 %r = atomicrmw umin ptr %ptr, i64 %value release, align 8 8530 ret i64 %r 8531} 8532 8533define dso_local i64 @atomicrmw_umin_i64_aligned_acq_rel(ptr %ptr, i64 %value) { 8534; -O0-LABEL: atomicrmw_umin_i64_aligned_acq_rel: 8535; -O0: subs x10, x9, x8 8536; -O0: csel x12, x9, x8, ls 8537; -O0: ldaxr x8, [x11] 8538; -O0: cmp x8, x9 8539; -O0: stlxr w10, x12, [x11] 8540; -O0: subs x9, x8, x9 8541; -O0: subs w9, w9, #1 8542; 8543; -O1-LABEL: atomicrmw_umin_i64_aligned_acq_rel: 8544; -O1: ldaxr x0, [x8] 8545; -O1: cmp x0, x1 8546; -O1: csel x9, x0, x1, ls 8547; -O1: stlxr w10, x9, [x8] 8548 %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 8 8549 ret i64 %r 8550} 8551 8552define dso_local i64 @atomicrmw_umin_i64_aligned_seq_cst(ptr %ptr, i64 %value) { 8553; -O0-LABEL: atomicrmw_umin_i64_aligned_seq_cst: 8554; -O0: subs x10, x9, x8 8555; -O0: csel x12, x9, x8, ls 8556; -O0: ldaxr x8, [x11] 8557; -O0: cmp x8, x9 8558; -O0: stlxr w10, x12, [x11] 8559; -O0: subs x9, x8, x9 8560; -O0: subs w9, w9, #1 8561; 8562; -O1-LABEL: atomicrmw_umin_i64_aligned_seq_cst: 8563; -O1: ldaxr x0, [x8] 8564; -O1: cmp x0, x1 8565; -O1: csel x9, x0, x1, ls 8566; -O1: stlxr w10, x9, [x8] 8567 %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 8 8568 ret i64 %r 8569} 8570 8571define dso_local i128 @atomicrmw_umin_i128_aligned_monotonic(ptr %ptr, i128 %value) { 8572; -O0-LABEL: atomicrmw_umin_i128_aligned_monotonic: 8573; -O0: subs x12, x8, x11 8574; -O0: csel x15, x13, x10, hs 8575; -O0: csel x14, x11, x8, hs 8576; -O0: ldxp x10, x12, [x9] 8577; -O0: cmp x10, x11 8578; -O0: cmp x12, x13 8579; -O0: stxp w8, x14, x15, [x9] 8580; -O0: stxp w8, x10, x12, [x9] 8581; -O0: subs x12, x12, x13 8582; -O0: ccmp x10, x11, #0, eq 8583; 8584; -O1-LABEL: atomicrmw_umin_i128_aligned_monotonic: 8585; -O1: ldxp x1, x0, [x8] 8586; -O1: cmp x3, x1 8587; -O1: csel x9, x0, x2, hs 8588; -O1: csel x10, x1, x3, hs 8589; -O1: stxp w11, x10, x9, [x8] 8590 %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 16 8591 ret i128 %r 8592} 8593 8594define dso_local i128 @atomicrmw_umin_i128_aligned_acquire(ptr %ptr, i128 %value) { 8595; -O0-LABEL: atomicrmw_umin_i128_aligned_acquire: 8596; -O0: subs x12, x8, x11 8597; -O0: csel x15, x13, x10, hs 8598; -O0: csel x14, x11, x8, hs 8599; -O0: ldaxp x10, x12, [x9] 8600; -O0: cmp x10, x11 8601; -O0: cmp x12, x13 8602; -O0: stxp w8, x14, x15, [x9] 8603; -O0: stxp w8, x10, x12, [x9] 8604; -O0: subs x12, x12, x13 8605; -O0: ccmp x10, x11, #0, eq 8606; 8607; -O1-LABEL: atomicrmw_umin_i128_aligned_acquire: 8608; -O1: ldaxp x1, x0, [x8] 8609; -O1: cmp x3, x1 8610; -O1: csel x9, x0, x2, hs 8611; -O1: csel x10, x1, x3, hs 8612; -O1: stxp w11, x10, x9, [x8] 8613 %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 16 8614 ret i128 %r 8615} 8616 8617define dso_local i128 @atomicrmw_umin_i128_aligned_release(ptr %ptr, i128 %value) { 8618; -O0-LABEL: atomicrmw_umin_i128_aligned_release: 8619; -O0: subs x12, x8, x11 8620; -O0: csel x15, x13, x10, hs 8621; -O0: csel x14, x11, x8, hs 8622; -O0: ldxp x10, x12, [x9] 8623; -O0: cmp x10, x11 8624; -O0: cmp x12, x13 8625; -O0: stlxp w8, x14, x15, [x9] 8626; -O0: stlxp w8, x10, x12, [x9] 8627; -O0: subs x12, x12, x13 8628; -O0: ccmp x10, x11, #0, eq 8629; 8630; -O1-LABEL: atomicrmw_umin_i128_aligned_release: 8631; -O1: ldxp x1, x0, [x8] 8632; -O1: cmp x3, x1 8633; -O1: csel x9, x0, x2, hs 8634; -O1: csel x10, x1, x3, hs 8635; -O1: stlxp w11, x10, x9, [x8] 8636 %r = atomicrmw umin ptr %ptr, i128 %value release, align 16 8637 ret i128 %r 8638} 8639 8640define dso_local i128 @atomicrmw_umin_i128_aligned_acq_rel(ptr %ptr, i128 %value) { 8641; -O0-LABEL: atomicrmw_umin_i128_aligned_acq_rel: 8642; -O0: subs x12, x8, x11 8643; -O0: csel x15, x13, x10, hs 8644; -O0: csel x14, x11, x8, hs 8645; -O0: ldaxp x10, x12, [x9] 8646; -O0: cmp x10, x11 8647; -O0: cmp x12, x13 8648; -O0: stlxp w8, x14, x15, [x9] 8649; -O0: stlxp w8, x10, x12, [x9] 8650; -O0: subs x12, x12, x13 8651; -O0: ccmp x10, x11, #0, eq 8652; 8653; -O1-LABEL: atomicrmw_umin_i128_aligned_acq_rel: 8654; -O1: ldaxp x1, x0, [x8] 8655; -O1: cmp x3, x1 8656; -O1: csel x9, x0, x2, hs 8657; -O1: csel x10, x1, x3, hs 8658; -O1: stlxp w11, x10, x9, [x8] 8659 %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 16 8660 ret i128 %r 8661} 8662 8663define dso_local i128 @atomicrmw_umin_i128_aligned_seq_cst(ptr %ptr, i128 %value) { 8664; -O0-LABEL: atomicrmw_umin_i128_aligned_seq_cst: 8665; -O0: subs x12, x8, x11 8666; -O0: csel x15, x13, x10, hs 8667; -O0: csel x14, x11, x8, hs 8668; -O0: ldaxp x10, x12, [x9] 8669; -O0: cmp x10, x11 8670; -O0: cmp x12, x13 8671; -O0: stlxp w8, x14, x15, [x9] 8672; -O0: stlxp w8, x10, x12, [x9] 8673; -O0: subs x12, x12, x13 8674; -O0: ccmp x10, x11, #0, eq 8675; 8676; -O1-LABEL: atomicrmw_umin_i128_aligned_seq_cst: 8677; -O1: ldaxp x1, x0, [x8] 8678; -O1: cmp x3, x1 8679; -O1: csel x9, x0, x2, hs 8680; -O1: csel x10, x1, x3, hs 8681; -O1: stlxp w11, x10, x9, [x8] 8682 %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 16 8683 ret i128 %r 8684} 8685 8686define dso_local i8 @atomicrmw_umin_i8_unaligned_monotonic(ptr %ptr, i8 %value) { 8687; -O0-LABEL: atomicrmw_umin_i8_unaligned_monotonic: 8688; -O0: and w9, w12, #0xff 8689; -O0: subs w10, w9, w8, uxtb 8690; -O0: csel w13, w12, w8, ls 8691; -O0: ldaxrb w8, [x11] 8692; -O0: cmp w8, w12, uxtb 8693; -O0: stlxrb w10, w13, [x11] 8694; -O0: subs w9, w8, w9 8695; -O0: subs w9, w9, #1 8696; 8697; -O1-LABEL: atomicrmw_umin_i8_unaligned_monotonic: 8698; -O1: and w9, w1, #0xff 8699; -O1: ldxrb w8, [x0] 8700; -O1: cmp w8, w9 8701; -O1: csel w10, w8, w9, ls 8702; -O1: stxrb w11, w10, [x0] 8703 %r = atomicrmw umin ptr %ptr, i8 %value monotonic, align 1 8704 ret i8 %r 8705} 8706 8707define dso_local i8 @atomicrmw_umin_i8_unaligned_acquire(ptr %ptr, i8 %value) { 8708; -O0-LABEL: atomicrmw_umin_i8_unaligned_acquire: 8709; -O0: and w9, w12, #0xff 8710; -O0: subs w10, w9, w8, uxtb 8711; -O0: csel w13, w12, w8, ls 8712; -O0: ldaxrb w8, [x11] 8713; -O0: cmp w8, w12, uxtb 8714; -O0: stlxrb w10, w13, [x11] 8715; -O0: subs w9, w8, w9 8716; -O0: subs w9, w9, #1 8717; 8718; -O1-LABEL: atomicrmw_umin_i8_unaligned_acquire: 8719; -O1: and w9, w1, #0xff 8720; -O1: ldaxrb w8, [x0] 8721; -O1: cmp w8, w9 8722; -O1: csel w10, w8, w9, ls 8723; -O1: stxrb w11, w10, [x0] 8724 %r = atomicrmw umin ptr %ptr, i8 %value acquire, align 1 8725 ret i8 %r 8726} 8727 8728define dso_local i8 @atomicrmw_umin_i8_unaligned_release(ptr %ptr, i8 %value) { 8729; -O0-LABEL: atomicrmw_umin_i8_unaligned_release: 8730; -O0: and w9, w12, #0xff 8731; -O0: subs w10, w9, w8, uxtb 8732; -O0: csel w13, w12, w8, ls 8733; -O0: ldaxrb w8, [x11] 8734; -O0: cmp w8, w12, uxtb 8735; -O0: stlxrb w10, w13, [x11] 8736; -O0: subs w9, w8, w9 8737; -O0: subs w9, w9, #1 8738; 8739; -O1-LABEL: atomicrmw_umin_i8_unaligned_release: 8740; -O1: and w9, w1, #0xff 8741; -O1: ldxrb w8, [x0] 8742; -O1: cmp w8, w9 8743; -O1: csel w10, w8, w9, ls 8744; -O1: stlxrb w11, w10, [x0] 8745 %r = atomicrmw umin ptr %ptr, i8 %value release, align 1 8746 ret i8 %r 8747} 8748 8749define dso_local i8 @atomicrmw_umin_i8_unaligned_acq_rel(ptr %ptr, i8 %value) { 8750; -O0-LABEL: atomicrmw_umin_i8_unaligned_acq_rel: 8751; -O0: and w9, w12, #0xff 8752; -O0: subs w10, w9, w8, uxtb 8753; -O0: csel w13, w12, w8, ls 8754; -O0: ldaxrb w8, [x11] 8755; -O0: cmp w8, w12, uxtb 8756; -O0: stlxrb w10, w13, [x11] 8757; -O0: subs w9, w8, w9 8758; -O0: subs w9, w9, #1 8759; 8760; -O1-LABEL: atomicrmw_umin_i8_unaligned_acq_rel: 8761; -O1: and w9, w1, #0xff 8762; -O1: ldaxrb w8, [x0] 8763; -O1: cmp w8, w9 8764; -O1: csel w10, w8, w9, ls 8765; -O1: stlxrb w11, w10, [x0] 8766 %r = atomicrmw umin ptr %ptr, i8 %value acq_rel, align 1 8767 ret i8 %r 8768} 8769 8770define dso_local i8 @atomicrmw_umin_i8_unaligned_seq_cst(ptr %ptr, i8 %value) { 8771; -O0-LABEL: atomicrmw_umin_i8_unaligned_seq_cst: 8772; -O0: and w9, w12, #0xff 8773; -O0: subs w10, w9, w8, uxtb 8774; -O0: csel w13, w12, w8, ls 8775; -O0: ldaxrb w8, [x11] 8776; -O0: cmp w8, w12, uxtb 8777; -O0: stlxrb w10, w13, [x11] 8778; -O0: subs w9, w8, w9 8779; -O0: subs w9, w9, #1 8780; 8781; -O1-LABEL: atomicrmw_umin_i8_unaligned_seq_cst: 8782; -O1: and w9, w1, #0xff 8783; -O1: ldaxrb w8, [x0] 8784; -O1: cmp w8, w9 8785; -O1: csel w10, w8, w9, ls 8786; -O1: stlxrb w11, w10, [x0] 8787 %r = atomicrmw umin ptr %ptr, i8 %value seq_cst, align 1 8788 ret i8 %r 8789} 8790 8791define dso_local i16 @atomicrmw_umin_i16_unaligned_monotonic(ptr %ptr, i16 %value) { 8792; -O0-LABEL: atomicrmw_umin_i16_unaligned_monotonic: 8793; -O0: and w10, w9, #0xffff 8794; -O0: subs w10, w10, w8, uxth 8795; -O0: csel w8, w9, w8, ls 8796; -O0: bl __atomic_compare_exchange 8797; 8798; -O1-LABEL: atomicrmw_umin_i16_unaligned_monotonic: 8799; -O1: and w8, w0, #0xffff 8800; -O1: cmp w8, w20, uxth 8801; -O1: csel w8, w0, w20, ls 8802; -O1: bl __atomic_compare_exchange 8803 %r = atomicrmw umin ptr %ptr, i16 %value monotonic, align 1 8804 ret i16 %r 8805} 8806 8807define dso_local i16 @atomicrmw_umin_i16_unaligned_acquire(ptr %ptr, i16 %value) { 8808; -O0-LABEL: atomicrmw_umin_i16_unaligned_acquire: 8809; -O0: and w10, w9, #0xffff 8810; -O0: subs w10, w10, w8, uxth 8811; -O0: csel w8, w9, w8, ls 8812; -O0: bl __atomic_compare_exchange 8813; 8814; -O1-LABEL: atomicrmw_umin_i16_unaligned_acquire: 8815; -O1: and w8, w0, #0xffff 8816; -O1: cmp w8, w20, uxth 8817; -O1: csel w8, w0, w20, ls 8818; -O1: bl __atomic_compare_exchange 8819 %r = atomicrmw umin ptr %ptr, i16 %value acquire, align 1 8820 ret i16 %r 8821} 8822 8823define dso_local i16 @atomicrmw_umin_i16_unaligned_release(ptr %ptr, i16 %value) { 8824; -O0-LABEL: atomicrmw_umin_i16_unaligned_release: 8825; -O0: and w10, w9, #0xffff 8826; -O0: subs w10, w10, w8, uxth 8827; -O0: csel w8, w9, w8, ls 8828; -O0: bl __atomic_compare_exchange 8829; 8830; -O1-LABEL: atomicrmw_umin_i16_unaligned_release: 8831; -O1: and w8, w0, #0xffff 8832; -O1: cmp w8, w20, uxth 8833; -O1: csel w8, w0, w20, ls 8834; -O1: bl __atomic_compare_exchange 8835 %r = atomicrmw umin ptr %ptr, i16 %value release, align 1 8836 ret i16 %r 8837} 8838 8839define dso_local i16 @atomicrmw_umin_i16_unaligned_acq_rel(ptr %ptr, i16 %value) { 8840; -O0-LABEL: atomicrmw_umin_i16_unaligned_acq_rel: 8841; -O0: and w10, w9, #0xffff 8842; -O0: subs w10, w10, w8, uxth 8843; -O0: csel w8, w9, w8, ls 8844; -O0: bl __atomic_compare_exchange 8845; 8846; -O1-LABEL: atomicrmw_umin_i16_unaligned_acq_rel: 8847; -O1: and w8, w0, #0xffff 8848; -O1: cmp w8, w20, uxth 8849; -O1: csel w8, w0, w20, ls 8850; -O1: bl __atomic_compare_exchange 8851 %r = atomicrmw umin ptr %ptr, i16 %value acq_rel, align 1 8852 ret i16 %r 8853} 8854 8855define dso_local i16 @atomicrmw_umin_i16_unaligned_seq_cst(ptr %ptr, i16 %value) { 8856; -O0-LABEL: atomicrmw_umin_i16_unaligned_seq_cst: 8857; -O0: and w10, w9, #0xffff 8858; -O0: subs w10, w10, w8, uxth 8859; -O0: csel w8, w9, w8, ls 8860; -O0: bl __atomic_compare_exchange 8861; 8862; -O1-LABEL: atomicrmw_umin_i16_unaligned_seq_cst: 8863; -O1: and w8, w0, #0xffff 8864; -O1: cmp w8, w20, uxth 8865; -O1: csel w8, w0, w20, ls 8866; -O1: bl __atomic_compare_exchange 8867 %r = atomicrmw umin ptr %ptr, i16 %value seq_cst, align 1 8868 ret i16 %r 8869} 8870 8871define dso_local i32 @atomicrmw_umin_i32_unaligned_monotonic(ptr %ptr, i32 %value) { 8872; -O0-LABEL: atomicrmw_umin_i32_unaligned_monotonic: 8873; -O0: subs w10, w9, w8 8874; -O0: csel w8, w9, w8, ls 8875; -O0: bl __atomic_compare_exchange 8876; 8877; -O1-LABEL: atomicrmw_umin_i32_unaligned_monotonic: 8878; -O1: cmp w0, w20 8879; -O1: csel w8, w0, w20, ls 8880; -O1: bl __atomic_compare_exchange 8881 %r = atomicrmw umin ptr %ptr, i32 %value monotonic, align 1 8882 ret i32 %r 8883} 8884 8885define dso_local i32 @atomicrmw_umin_i32_unaligned_acquire(ptr %ptr, i32 %value) { 8886; -O0-LABEL: atomicrmw_umin_i32_unaligned_acquire: 8887; -O0: subs w10, w9, w8 8888; -O0: csel w8, w9, w8, ls 8889; -O0: bl __atomic_compare_exchange 8890; 8891; -O1-LABEL: atomicrmw_umin_i32_unaligned_acquire: 8892; -O1: cmp w0, w20 8893; -O1: csel w8, w0, w20, ls 8894; -O1: bl __atomic_compare_exchange 8895 %r = atomicrmw umin ptr %ptr, i32 %value acquire, align 1 8896 ret i32 %r 8897} 8898 8899define dso_local i32 @atomicrmw_umin_i32_unaligned_release(ptr %ptr, i32 %value) { 8900; -O0-LABEL: atomicrmw_umin_i32_unaligned_release: 8901; -O0: subs w10, w9, w8 8902; -O0: csel w8, w9, w8, ls 8903; -O0: bl __atomic_compare_exchange 8904; 8905; -O1-LABEL: atomicrmw_umin_i32_unaligned_release: 8906; -O1: cmp w0, w20 8907; -O1: csel w8, w0, w20, ls 8908; -O1: bl __atomic_compare_exchange 8909 %r = atomicrmw umin ptr %ptr, i32 %value release, align 1 8910 ret i32 %r 8911} 8912 8913define dso_local i32 @atomicrmw_umin_i32_unaligned_acq_rel(ptr %ptr, i32 %value) { 8914; -O0-LABEL: atomicrmw_umin_i32_unaligned_acq_rel: 8915; -O0: subs w10, w9, w8 8916; -O0: csel w8, w9, w8, ls 8917; -O0: bl __atomic_compare_exchange 8918; 8919; -O1-LABEL: atomicrmw_umin_i32_unaligned_acq_rel: 8920; -O1: cmp w0, w20 8921; -O1: csel w8, w0, w20, ls 8922; -O1: bl __atomic_compare_exchange 8923 %r = atomicrmw umin ptr %ptr, i32 %value acq_rel, align 1 8924 ret i32 %r 8925} 8926 8927define dso_local i32 @atomicrmw_umin_i32_unaligned_seq_cst(ptr %ptr, i32 %value) { 8928; -O0-LABEL: atomicrmw_umin_i32_unaligned_seq_cst: 8929; -O0: subs w10, w9, w8 8930; -O0: csel w8, w9, w8, ls 8931; -O0: bl __atomic_compare_exchange 8932; 8933; -O1-LABEL: atomicrmw_umin_i32_unaligned_seq_cst: 8934; -O1: cmp w0, w20 8935; -O1: csel w8, w0, w20, ls 8936; -O1: bl __atomic_compare_exchange 8937 %r = atomicrmw umin ptr %ptr, i32 %value seq_cst, align 1 8938 ret i32 %r 8939} 8940 8941define dso_local i64 @atomicrmw_umin_i64_unaligned_monotonic(ptr %ptr, i64 %value) { 8942; -O0-LABEL: atomicrmw_umin_i64_unaligned_monotonic: 8943; -O0: subs x10, x9, x8 8944; -O0: csel x8, x9, x8, ls 8945; -O0: bl __atomic_compare_exchange 8946; 8947; -O1-LABEL: atomicrmw_umin_i64_unaligned_monotonic: 8948; -O1: cmp x0, x20 8949; -O1: csel x8, x0, x20, ls 8950; -O1: bl __atomic_compare_exchange 8951 %r = atomicrmw umin ptr %ptr, i64 %value monotonic, align 1 8952 ret i64 %r 8953} 8954 8955define dso_local i64 @atomicrmw_umin_i64_unaligned_acquire(ptr %ptr, i64 %value) { 8956; -O0-LABEL: atomicrmw_umin_i64_unaligned_acquire: 8957; -O0: subs x10, x9, x8 8958; -O0: csel x8, x9, x8, ls 8959; -O0: bl __atomic_compare_exchange 8960; 8961; -O1-LABEL: atomicrmw_umin_i64_unaligned_acquire: 8962; -O1: cmp x0, x20 8963; -O1: csel x8, x0, x20, ls 8964; -O1: bl __atomic_compare_exchange 8965 %r = atomicrmw umin ptr %ptr, i64 %value acquire, align 1 8966 ret i64 %r 8967} 8968 8969define dso_local i64 @atomicrmw_umin_i64_unaligned_release(ptr %ptr, i64 %value) { 8970; -O0-LABEL: atomicrmw_umin_i64_unaligned_release: 8971; -O0: subs x10, x9, x8 8972; -O0: csel x8, x9, x8, ls 8973; -O0: bl __atomic_compare_exchange 8974; 8975; -O1-LABEL: atomicrmw_umin_i64_unaligned_release: 8976; -O1: cmp x0, x20 8977; -O1: csel x8, x0, x20, ls 8978; -O1: bl __atomic_compare_exchange 8979 %r = atomicrmw umin ptr %ptr, i64 %value release, align 1 8980 ret i64 %r 8981} 8982 8983define dso_local i64 @atomicrmw_umin_i64_unaligned_acq_rel(ptr %ptr, i64 %value) { 8984; -O0-LABEL: atomicrmw_umin_i64_unaligned_acq_rel: 8985; -O0: subs x10, x9, x8 8986; -O0: csel x8, x9, x8, ls 8987; -O0: bl __atomic_compare_exchange 8988; 8989; -O1-LABEL: atomicrmw_umin_i64_unaligned_acq_rel: 8990; -O1: cmp x0, x20 8991; -O1: csel x8, x0, x20, ls 8992; -O1: bl __atomic_compare_exchange 8993 %r = atomicrmw umin ptr %ptr, i64 %value acq_rel, align 1 8994 ret i64 %r 8995} 8996 8997define dso_local i64 @atomicrmw_umin_i64_unaligned_seq_cst(ptr %ptr, i64 %value) { 8998; -O0-LABEL: atomicrmw_umin_i64_unaligned_seq_cst: 8999; -O0: subs x10, x9, x8 9000; -O0: csel x8, x9, x8, ls 9001; -O0: bl __atomic_compare_exchange 9002; 9003; -O1-LABEL: atomicrmw_umin_i64_unaligned_seq_cst: 9004; -O1: cmp x0, x20 9005; -O1: csel x8, x0, x20, ls 9006; -O1: bl __atomic_compare_exchange 9007 %r = atomicrmw umin ptr %ptr, i64 %value seq_cst, align 1 9008 ret i64 %r 9009} 9010 9011define dso_local i128 @atomicrmw_umin_i128_unaligned_monotonic(ptr %ptr, i128 %value) { 9012; -O0-LABEL: atomicrmw_umin_i128_unaligned_monotonic: 9013; -O0: subs x12, x9, x10 9014; -O0: csel x8, x11, x8, hs 9015; -O0: csel x9, x10, x9, hs 9016; -O0: bl __atomic_compare_exchange 9017; 9018; -O1-LABEL: atomicrmw_umin_i128_unaligned_monotonic: 9019; -O1: ldp x0, x1, [x0] 9020; -O1: cmp x19, x1 9021; -O1: csel x8, x1, x19, hs 9022; -O1: csel x9, x0, x21, hs 9023; -O1: bl __atomic_compare_exchange 9024 %r = atomicrmw umin ptr %ptr, i128 %value monotonic, align 1 9025 ret i128 %r 9026} 9027 9028define dso_local i128 @atomicrmw_umin_i128_unaligned_acquire(ptr %ptr, i128 %value) { 9029; -O0-LABEL: atomicrmw_umin_i128_unaligned_acquire: 9030; -O0: subs x12, x9, x10 9031; -O0: csel x8, x11, x8, hs 9032; -O0: csel x9, x10, x9, hs 9033; -O0: bl __atomic_compare_exchange 9034; 9035; -O1-LABEL: atomicrmw_umin_i128_unaligned_acquire: 9036; -O1: ldp x0, x1, [x0] 9037; -O1: cmp x19, x1 9038; -O1: csel x8, x1, x19, hs 9039; -O1: csel x9, x0, x21, hs 9040; -O1: bl __atomic_compare_exchange 9041 %r = atomicrmw umin ptr %ptr, i128 %value acquire, align 1 9042 ret i128 %r 9043} 9044 9045define dso_local i128 @atomicrmw_umin_i128_unaligned_release(ptr %ptr, i128 %value) { 9046; -O0-LABEL: atomicrmw_umin_i128_unaligned_release: 9047; -O0: subs x12, x9, x10 9048; -O0: csel x8, x11, x8, hs 9049; -O0: csel x9, x10, x9, hs 9050; -O0: bl __atomic_compare_exchange 9051; 9052; -O1-LABEL: atomicrmw_umin_i128_unaligned_release: 9053; -O1: ldp x0, x1, [x0] 9054; -O1: cmp x19, x1 9055; -O1: csel x8, x1, x19, hs 9056; -O1: csel x9, x0, x21, hs 9057; -O1: bl __atomic_compare_exchange 9058 %r = atomicrmw umin ptr %ptr, i128 %value release, align 1 9059 ret i128 %r 9060} 9061 9062define dso_local i128 @atomicrmw_umin_i128_unaligned_acq_rel(ptr %ptr, i128 %value) { 9063; -O0-LABEL: atomicrmw_umin_i128_unaligned_acq_rel: 9064; -O0: subs x12, x9, x10 9065; -O0: csel x8, x11, x8, hs 9066; -O0: csel x9, x10, x9, hs 9067; -O0: bl __atomic_compare_exchange 9068; 9069; -O1-LABEL: atomicrmw_umin_i128_unaligned_acq_rel: 9070; -O1: ldp x0, x1, [x0] 9071; -O1: cmp x19, x1 9072; -O1: csel x8, x1, x19, hs 9073; -O1: csel x9, x0, x21, hs 9074; -O1: bl __atomic_compare_exchange 9075 %r = atomicrmw umin ptr %ptr, i128 %value acq_rel, align 1 9076 ret i128 %r 9077} 9078 9079define dso_local i128 @atomicrmw_umin_i128_unaligned_seq_cst(ptr %ptr, i128 %value) { 9080; -O0-LABEL: atomicrmw_umin_i128_unaligned_seq_cst: 9081; -O0: subs x12, x9, x10 9082; -O0: csel x8, x11, x8, hs 9083; -O0: csel x9, x10, x9, hs 9084; -O0: bl __atomic_compare_exchange 9085; 9086; -O1-LABEL: atomicrmw_umin_i128_unaligned_seq_cst: 9087; -O1: ldp x0, x1, [x0] 9088; -O1: cmp x19, x1 9089; -O1: csel x8, x1, x19, hs 9090; -O1: csel x9, x0, x21, hs 9091; -O1: bl __atomic_compare_exchange 9092 %r = atomicrmw umin ptr %ptr, i128 %value seq_cst, align 1 9093 ret i128 %r 9094} 9095