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 -mattr=+v8a -O0 | FileCheck %s --check-prefixes=CHECK,-O0 4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+v8a -O1 | FileCheck %s --check-prefixes=CHECK,-O1 5 6define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) { 7; -O0-LABEL: cmpxchg_i8_aligned_monotonic_monotonic: 8; -O0: ldaxrb w0, [x2] 9; -O0: cmp w0, w9, uxtb 10; -O0: stlxrb w8, w1, [x2] 11; 12; -O1-LABEL: cmpxchg_i8_aligned_monotonic_monotonic: 13; -O1: and w8, w0, #0xff 14; -O1: ldxrb w0, [x2] 15; -O1: cmp w0, w8 16; -O1: stxrb w9, w1, [x2] 17 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1 18 %r = extractvalue { i8, i1 } %pair, 0 19 ret i8 %r 20} 21 22define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 23; -O0-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak: 24; -O0: ldaxrb w0, [x2] 25; -O0: cmp w0, w9, uxtb 26; -O0: stlxrb w8, w1, [x2] 27; 28; -O1-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak: 29; -O1: ldxrb w8, [x2] 30; -O1: cmp w8, w0, uxtb 31; -O1: stxrb wzr, w1, [x2] 32 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1 33 %r = extractvalue { i8, i1 } %pair, 0 34 ret i8 %r 35} 36 37define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) { 38; -O0-LABEL: cmpxchg_i8_aligned_monotonic_acquire: 39; -O0: ldaxrb w0, [x2] 40; -O0: cmp w0, w9, uxtb 41; -O0: stlxrb w8, w1, [x2] 42; 43; -O1-LABEL: cmpxchg_i8_aligned_monotonic_acquire: 44; -O1: and w8, w0, #0xff 45; -O1: ldaxrb w0, [x2] 46; -O1: cmp w0, w8 47; -O1: stxrb w9, w1, [x2] 48 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 49 %r = extractvalue { i8, i1 } %pair, 0 50 ret i8 %r 51} 52 53define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 54; -O0-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak: 55; -O0: ldaxrb w0, [x2] 56; -O0: cmp w0, w9, uxtb 57; -O0: stlxrb w8, w1, [x2] 58; 59; -O1-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak: 60; -O1: ldaxrb w8, [x2] 61; -O1: cmp w8, w0, uxtb 62; -O1: stxrb wzr, w1, [x2] 63 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 64 %r = extractvalue { i8, i1 } %pair, 0 65 ret i8 %r 66} 67 68define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 69; -O0-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst: 70; -O0: ldaxrb w0, [x2] 71; -O0: cmp w0, w9, uxtb 72; -O0: stlxrb w8, w1, [x2] 73; 74; -O1-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst: 75; -O1: and w8, w0, #0xff 76; -O1: ldaxrb w0, [x2] 77; -O1: cmp w0, w8 78; -O1: stlxrb w9, w1, [x2] 79 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 80 %r = extractvalue { i8, i1 } %pair, 0 81 ret i8 %r 82} 83 84define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 85; -O0-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak: 86; -O0: ldaxrb w0, [x2] 87; -O0: cmp w0, w9, uxtb 88; -O0: stlxrb w8, w1, [x2] 89; 90; -O1-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak: 91; -O1: ldaxrb w8, [x2] 92; -O1: cmp w8, w0, uxtb 93; -O1: stlxrb wzr, w1, [x2] 94 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 95 %r = extractvalue { i8, i1 } %pair, 0 96 ret i8 %r 97} 98 99define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) { 100; -O0-LABEL: cmpxchg_i8_aligned_acquire_monotonic: 101; -O0: ldaxrb w0, [x2] 102; -O0: cmp w0, w9, uxtb 103; -O0: stlxrb w8, w1, [x2] 104; 105; -O1-LABEL: cmpxchg_i8_aligned_acquire_monotonic: 106; -O1: and w8, w0, #0xff 107; -O1: ldaxrb w0, [x2] 108; -O1: cmp w0, w8 109; -O1: stxrb w9, w1, [x2] 110 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 111 %r = extractvalue { i8, i1 } %pair, 0 112 ret i8 %r 113} 114 115define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 116; -O0-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak: 117; -O0: ldaxrb w0, [x2] 118; -O0: cmp w0, w9, uxtb 119; -O0: stlxrb w8, w1, [x2] 120; 121; -O1-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak: 122; -O1: ldaxrb w8, [x2] 123; -O1: cmp w8, w0, uxtb 124; -O1: stxrb wzr, w1, [x2] 125 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 126 %r = extractvalue { i8, i1 } %pair, 0 127 ret i8 %r 128} 129 130define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) { 131; -O0-LABEL: cmpxchg_i8_aligned_acquire_acquire: 132; -O0: ldaxrb w0, [x2] 133; -O0: cmp w0, w9, uxtb 134; -O0: stlxrb w8, w1, [x2] 135; 136; -O1-LABEL: cmpxchg_i8_aligned_acquire_acquire: 137; -O1: and w8, w0, #0xff 138; -O1: ldaxrb w0, [x2] 139; -O1: cmp w0, w8 140; -O1: stxrb w9, w1, [x2] 141 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 142 %r = extractvalue { i8, i1 } %pair, 0 143 ret i8 %r 144} 145 146define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 147; -O0-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak: 148; -O0: ldaxrb w0, [x2] 149; -O0: cmp w0, w9, uxtb 150; -O0: stlxrb w8, w1, [x2] 151; 152; -O1-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak: 153; -O1: ldaxrb w8, [x2] 154; -O1: cmp w8, w0, uxtb 155; -O1: stxrb wzr, w1, [x2] 156 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 157 %r = extractvalue { i8, i1 } %pair, 0 158 ret i8 %r 159} 160 161define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 162; -O0-LABEL: cmpxchg_i8_aligned_acquire_seq_cst: 163; -O0: ldaxrb w0, [x2] 164; -O0: cmp w0, w9, uxtb 165; -O0: stlxrb w8, w1, [x2] 166; 167; -O1-LABEL: cmpxchg_i8_aligned_acquire_seq_cst: 168; -O1: and w8, w0, #0xff 169; -O1: ldaxrb w0, [x2] 170; -O1: cmp w0, w8 171; -O1: stlxrb w9, w1, [x2] 172 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 173 %r = extractvalue { i8, i1 } %pair, 0 174 ret i8 %r 175} 176 177define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 178; -O0-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak: 179; -O0: ldaxrb w0, [x2] 180; -O0: cmp w0, w9, uxtb 181; -O0: stlxrb w8, w1, [x2] 182; 183; -O1-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak: 184; -O1: ldaxrb w8, [x2] 185; -O1: cmp w8, w0, uxtb 186; -O1: stlxrb wzr, w1, [x2] 187 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 188 %r = extractvalue { i8, i1 } %pair, 0 189 ret i8 %r 190} 191 192define dso_local i8 @cmpxchg_i8_aligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) { 193; -O0-LABEL: cmpxchg_i8_aligned_release_monotonic: 194; -O0: ldaxrb w0, [x2] 195; -O0: cmp w0, w9, uxtb 196; -O0: stlxrb w8, w1, [x2] 197; 198; -O1-LABEL: cmpxchg_i8_aligned_release_monotonic: 199; -O1: and w8, w0, #0xff 200; -O1: ldxrb w0, [x2] 201; -O1: cmp w0, w8 202; -O1: stlxrb w9, w1, [x2] 203 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 204 %r = extractvalue { i8, i1 } %pair, 0 205 ret i8 %r 206} 207 208define dso_local i8 @cmpxchg_i8_aligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 209; -O0-LABEL: cmpxchg_i8_aligned_release_monotonic_weak: 210; -O0: ldaxrb w0, [x2] 211; -O0: cmp w0, w9, uxtb 212; -O0: stlxrb w8, w1, [x2] 213; 214; -O1-LABEL: cmpxchg_i8_aligned_release_monotonic_weak: 215; -O1: ldxrb w8, [x2] 216; -O1: cmp w8, w0, uxtb 217; -O1: stlxrb wzr, w1, [x2] 218 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 219 %r = extractvalue { i8, i1 } %pair, 0 220 ret i8 %r 221} 222 223define dso_local i8 @cmpxchg_i8_aligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) { 224; -O0-LABEL: cmpxchg_i8_aligned_release_acquire: 225; -O0: ldaxrb w0, [x2] 226; -O0: cmp w0, w9, uxtb 227; -O0: stlxrb w8, w1, [x2] 228; 229; -O1-LABEL: cmpxchg_i8_aligned_release_acquire: 230; -O1: and w8, w0, #0xff 231; -O1: ldaxrb w0, [x2] 232; -O1: cmp w0, w8 233; -O1: stlxrb w9, w1, [x2] 234 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1 235 %r = extractvalue { i8, i1 } %pair, 0 236 ret i8 %r 237} 238 239define dso_local i8 @cmpxchg_i8_aligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 240; -O0-LABEL: cmpxchg_i8_aligned_release_acquire_weak: 241; -O0: ldaxrb w0, [x2] 242; -O0: cmp w0, w9, uxtb 243; -O0: stlxrb w8, w1, [x2] 244; 245; -O1-LABEL: cmpxchg_i8_aligned_release_acquire_weak: 246; -O1: ldaxrb w8, [x2] 247; -O1: cmp w8, w0, uxtb 248; -O1: stlxrb wzr, w1, [x2] 249 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1 250 %r = extractvalue { i8, i1 } %pair, 0 251 ret i8 %r 252} 253 254define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 255; -O0-LABEL: cmpxchg_i8_aligned_release_seq_cst: 256; -O0: ldaxrb w0, [x2] 257; -O0: cmp w0, w9, uxtb 258; -O0: stlxrb w8, w1, [x2] 259; 260; -O1-LABEL: cmpxchg_i8_aligned_release_seq_cst: 261; -O1: and w8, w0, #0xff 262; -O1: ldaxrb w0, [x2] 263; -O1: cmp w0, w8 264; -O1: stlxrb w9, w1, [x2] 265 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 266 %r = extractvalue { i8, i1 } %pair, 0 267 ret i8 %r 268} 269 270define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 271; -O0-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak: 272; -O0: ldaxrb w0, [x2] 273; -O0: cmp w0, w9, uxtb 274; -O0: stlxrb w8, w1, [x2] 275; 276; -O1-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak: 277; -O1: ldaxrb w8, [x2] 278; -O1: cmp w8, w0, uxtb 279; -O1: stlxrb wzr, w1, [x2] 280 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 281 %r = extractvalue { i8, i1 } %pair, 0 282 ret i8 %r 283} 284 285define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) { 286; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic: 287; -O0: ldaxrb w0, [x2] 288; -O0: cmp w0, w9, uxtb 289; -O0: stlxrb w8, w1, [x2] 290; 291; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic: 292; -O1: and w8, w0, #0xff 293; -O1: ldaxrb w0, [x2] 294; -O1: cmp w0, w8 295; -O1: stlxrb w9, w1, [x2] 296 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 297 %r = extractvalue { i8, i1 } %pair, 0 298 ret i8 %r 299} 300 301define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 302; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak: 303; -O0: ldaxrb w0, [x2] 304; -O0: cmp w0, w9, uxtb 305; -O0: stlxrb w8, w1, [x2] 306; 307; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak: 308; -O1: ldaxrb w8, [x2] 309; -O1: cmp w8, w0, uxtb 310; -O1: stlxrb wzr, w1, [x2] 311 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 312 %r = extractvalue { i8, i1 } %pair, 0 313 ret i8 %r 314} 315 316define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) { 317; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_acquire: 318; -O0: ldaxrb w0, [x2] 319; -O0: cmp w0, w9, uxtb 320; -O0: stlxrb w8, w1, [x2] 321; 322; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_acquire: 323; -O1: and w8, w0, #0xff 324; -O1: ldaxrb w0, [x2] 325; -O1: cmp w0, w8 326; -O1: stlxrb w9, w1, [x2] 327 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 328 %r = extractvalue { i8, i1 } %pair, 0 329 ret i8 %r 330} 331 332define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 333; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak: 334; -O0: ldaxrb w0, [x2] 335; -O0: cmp w0, w9, uxtb 336; -O0: stlxrb w8, w1, [x2] 337; 338; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak: 339; -O1: ldaxrb w8, [x2] 340; -O1: cmp w8, w0, uxtb 341; -O1: stlxrb wzr, w1, [x2] 342 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 343 %r = extractvalue { i8, i1 } %pair, 0 344 ret i8 %r 345} 346 347define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 348; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst: 349; -O0: ldaxrb w0, [x2] 350; -O0: cmp w0, w9, uxtb 351; -O0: stlxrb w8, w1, [x2] 352; 353; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst: 354; -O1: and w8, w0, #0xff 355; -O1: ldaxrb w0, [x2] 356; -O1: cmp w0, w8 357; -O1: stlxrb w9, w1, [x2] 358 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 359 %r = extractvalue { i8, i1 } %pair, 0 360 ret i8 %r 361} 362 363define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 364; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak: 365; -O0: ldaxrb w0, [x2] 366; -O0: cmp w0, w9, uxtb 367; -O0: stlxrb w8, w1, [x2] 368; 369; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak: 370; -O1: ldaxrb w8, [x2] 371; -O1: cmp w8, w0, uxtb 372; -O1: stlxrb wzr, w1, [x2] 373 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 374 %r = extractvalue { i8, i1 } %pair, 0 375 ret i8 %r 376} 377 378define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) { 379; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic: 380; -O0: ldaxrb w0, [x2] 381; -O0: cmp w0, w9, uxtb 382; -O0: stlxrb w8, w1, [x2] 383; 384; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic: 385; -O1: and w8, w0, #0xff 386; -O1: ldaxrb w0, [x2] 387; -O1: cmp w0, w8 388; -O1: stlxrb w9, w1, [x2] 389 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 390 %r = extractvalue { i8, i1 } %pair, 0 391 ret i8 %r 392} 393 394define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 395; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak: 396; -O0: ldaxrb w0, [x2] 397; -O0: cmp w0, w9, uxtb 398; -O0: stlxrb w8, w1, [x2] 399; 400; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak: 401; -O1: ldaxrb w8, [x2] 402; -O1: cmp w8, w0, uxtb 403; -O1: stlxrb wzr, w1, [x2] 404 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 405 %r = extractvalue { i8, i1 } %pair, 0 406 ret i8 %r 407} 408 409define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) { 410; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_acquire: 411; -O0: ldaxrb w0, [x2] 412; -O0: cmp w0, w9, uxtb 413; -O0: stlxrb w8, w1, [x2] 414; 415; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_acquire: 416; -O1: and w8, w0, #0xff 417; -O1: ldaxrb w0, [x2] 418; -O1: cmp w0, w8 419; -O1: stlxrb w9, w1, [x2] 420 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 421 %r = extractvalue { i8, i1 } %pair, 0 422 ret i8 %r 423} 424 425define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 426; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak: 427; -O0: ldaxrb w0, [x2] 428; -O0: cmp w0, w9, uxtb 429; -O0: stlxrb w8, w1, [x2] 430; 431; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak: 432; -O1: ldaxrb w8, [x2] 433; -O1: cmp w8, w0, uxtb 434; -O1: stlxrb wzr, w1, [x2] 435 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 436 %r = extractvalue { i8, i1 } %pair, 0 437 ret i8 %r 438} 439 440define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 441; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst: 442; -O0: ldaxrb w0, [x2] 443; -O0: cmp w0, w9, uxtb 444; -O0: stlxrb w8, w1, [x2] 445; 446; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst: 447; -O1: and w8, w0, #0xff 448; -O1: ldaxrb w0, [x2] 449; -O1: cmp w0, w8 450; -O1: stlxrb w9, w1, [x2] 451 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 452 %r = extractvalue { i8, i1 } %pair, 0 453 ret i8 %r 454} 455 456define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 457; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak: 458; -O0: ldaxrb w0, [x2] 459; -O0: cmp w0, w9, uxtb 460; -O0: stlxrb w8, w1, [x2] 461; 462; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak: 463; -O1: ldaxrb w8, [x2] 464; -O1: cmp w8, w0, uxtb 465; -O1: stlxrb wzr, w1, [x2] 466 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 467 %r = extractvalue { i8, i1 } %pair, 0 468 ret i8 %r 469} 470 471define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) { 472; -O0-LABEL: cmpxchg_i16_aligned_monotonic_monotonic: 473; -O0: ldaxrh w0, [x2] 474; -O0: cmp w0, w9, uxth 475; -O0: stlxrh w8, w1, [x2] 476; 477; -O1-LABEL: cmpxchg_i16_aligned_monotonic_monotonic: 478; -O1: and w8, w0, #0xffff 479; -O1: ldxrh w0, [x2] 480; -O1: cmp w0, w8 481; -O1: stxrh w9, w1, [x2] 482 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2 483 %r = extractvalue { i16, i1 } %pair, 0 484 ret i16 %r 485} 486 487define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 488; -O0-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak: 489; -O0: ldaxrh w0, [x2] 490; -O0: cmp w0, w9, uxth 491; -O0: stlxrh w8, w1, [x2] 492; 493; -O1-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak: 494; -O1: ldxrh w8, [x2] 495; -O1: cmp w8, w0, uxth 496; -O1: stxrh wzr, w1, [x2] 497 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2 498 %r = extractvalue { i16, i1 } %pair, 0 499 ret i16 %r 500} 501 502define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) { 503; -O0-LABEL: cmpxchg_i16_aligned_monotonic_acquire: 504; -O0: ldaxrh w0, [x2] 505; -O0: cmp w0, w9, uxth 506; -O0: stlxrh w8, w1, [x2] 507; 508; -O1-LABEL: cmpxchg_i16_aligned_monotonic_acquire: 509; -O1: and w8, w0, #0xffff 510; -O1: ldaxrh w0, [x2] 511; -O1: cmp w0, w8 512; -O1: stxrh w9, w1, [x2] 513 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2 514 %r = extractvalue { i16, i1 } %pair, 0 515 ret i16 %r 516} 517 518define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 519; -O0-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak: 520; -O0: ldaxrh w0, [x2] 521; -O0: cmp w0, w9, uxth 522; -O0: stlxrh w8, w1, [x2] 523; 524; -O1-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak: 525; -O1: ldaxrh w8, [x2] 526; -O1: cmp w8, w0, uxth 527; -O1: stxrh wzr, w1, [x2] 528 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2 529 %r = extractvalue { i16, i1 } %pair, 0 530 ret i16 %r 531} 532 533define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 534; -O0-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst: 535; -O0: ldaxrh w0, [x2] 536; -O0: cmp w0, w9, uxth 537; -O0: stlxrh w8, w1, [x2] 538; 539; -O1-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst: 540; -O1: and w8, w0, #0xffff 541; -O1: ldaxrh w0, [x2] 542; -O1: cmp w0, w8 543; -O1: stlxrh w9, w1, [x2] 544 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2 545 %r = extractvalue { i16, i1 } %pair, 0 546 ret i16 %r 547} 548 549define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 550; -O0-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak: 551; -O0: ldaxrh w0, [x2] 552; -O0: cmp w0, w9, uxth 553; -O0: stlxrh w8, w1, [x2] 554; 555; -O1-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak: 556; -O1: ldaxrh w8, [x2] 557; -O1: cmp w8, w0, uxth 558; -O1: stlxrh wzr, w1, [x2] 559 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2 560 %r = extractvalue { i16, i1 } %pair, 0 561 ret i16 %r 562} 563 564define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) { 565; -O0-LABEL: cmpxchg_i16_aligned_acquire_monotonic: 566; -O0: ldaxrh w0, [x2] 567; -O0: cmp w0, w9, uxth 568; -O0: stlxrh w8, w1, [x2] 569; 570; -O1-LABEL: cmpxchg_i16_aligned_acquire_monotonic: 571; -O1: and w8, w0, #0xffff 572; -O1: ldaxrh w0, [x2] 573; -O1: cmp w0, w8 574; -O1: stxrh w9, w1, [x2] 575 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2 576 %r = extractvalue { i16, i1 } %pair, 0 577 ret i16 %r 578} 579 580define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 581; -O0-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak: 582; -O0: ldaxrh w0, [x2] 583; -O0: cmp w0, w9, uxth 584; -O0: stlxrh w8, w1, [x2] 585; 586; -O1-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak: 587; -O1: ldaxrh w8, [x2] 588; -O1: cmp w8, w0, uxth 589; -O1: stxrh wzr, w1, [x2] 590 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2 591 %r = extractvalue { i16, i1 } %pair, 0 592 ret i16 %r 593} 594 595define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) { 596; -O0-LABEL: cmpxchg_i16_aligned_acquire_acquire: 597; -O0: ldaxrh w0, [x2] 598; -O0: cmp w0, w9, uxth 599; -O0: stlxrh w8, w1, [x2] 600; 601; -O1-LABEL: cmpxchg_i16_aligned_acquire_acquire: 602; -O1: and w8, w0, #0xffff 603; -O1: ldaxrh w0, [x2] 604; -O1: cmp w0, w8 605; -O1: stxrh w9, w1, [x2] 606 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2 607 %r = extractvalue { i16, i1 } %pair, 0 608 ret i16 %r 609} 610 611define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 612; -O0-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak: 613; -O0: ldaxrh w0, [x2] 614; -O0: cmp w0, w9, uxth 615; -O0: stlxrh w8, w1, [x2] 616; 617; -O1-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak: 618; -O1: ldaxrh w8, [x2] 619; -O1: cmp w8, w0, uxth 620; -O1: stxrh wzr, w1, [x2] 621 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2 622 %r = extractvalue { i16, i1 } %pair, 0 623 ret i16 %r 624} 625 626define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 627; -O0-LABEL: cmpxchg_i16_aligned_acquire_seq_cst: 628; -O0: ldaxrh w0, [x2] 629; -O0: cmp w0, w9, uxth 630; -O0: stlxrh w8, w1, [x2] 631; 632; -O1-LABEL: cmpxchg_i16_aligned_acquire_seq_cst: 633; -O1: and w8, w0, #0xffff 634; -O1: ldaxrh w0, [x2] 635; -O1: cmp w0, w8 636; -O1: stlxrh w9, w1, [x2] 637 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2 638 %r = extractvalue { i16, i1 } %pair, 0 639 ret i16 %r 640} 641 642define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 643; -O0-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak: 644; -O0: ldaxrh w0, [x2] 645; -O0: cmp w0, w9, uxth 646; -O0: stlxrh w8, w1, [x2] 647; 648; -O1-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak: 649; -O1: ldaxrh w8, [x2] 650; -O1: cmp w8, w0, uxth 651; -O1: stlxrh wzr, w1, [x2] 652 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2 653 %r = extractvalue { i16, i1 } %pair, 0 654 ret i16 %r 655} 656 657define dso_local i16 @cmpxchg_i16_aligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) { 658; -O0-LABEL: cmpxchg_i16_aligned_release_monotonic: 659; -O0: ldaxrh w0, [x2] 660; -O0: cmp w0, w9, uxth 661; -O0: stlxrh w8, w1, [x2] 662; 663; -O1-LABEL: cmpxchg_i16_aligned_release_monotonic: 664; -O1: and w8, w0, #0xffff 665; -O1: ldxrh w0, [x2] 666; -O1: cmp w0, w8 667; -O1: stlxrh w9, w1, [x2] 668 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 2 669 %r = extractvalue { i16, i1 } %pair, 0 670 ret i16 %r 671} 672 673define dso_local i16 @cmpxchg_i16_aligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 674; -O0-LABEL: cmpxchg_i16_aligned_release_monotonic_weak: 675; -O0: ldaxrh w0, [x2] 676; -O0: cmp w0, w9, uxth 677; -O0: stlxrh w8, w1, [x2] 678; 679; -O1-LABEL: cmpxchg_i16_aligned_release_monotonic_weak: 680; -O1: ldxrh w8, [x2] 681; -O1: cmp w8, w0, uxth 682; -O1: stlxrh wzr, w1, [x2] 683 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 2 684 %r = extractvalue { i16, i1 } %pair, 0 685 ret i16 %r 686} 687 688define dso_local i16 @cmpxchg_i16_aligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) { 689; -O0-LABEL: cmpxchg_i16_aligned_release_acquire: 690; -O0: ldaxrh w0, [x2] 691; -O0: cmp w0, w9, uxth 692; -O0: stlxrh w8, w1, [x2] 693; 694; -O1-LABEL: cmpxchg_i16_aligned_release_acquire: 695; -O1: and w8, w0, #0xffff 696; -O1: ldaxrh w0, [x2] 697; -O1: cmp w0, w8 698; -O1: stlxrh w9, w1, [x2] 699 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 2 700 %r = extractvalue { i16, i1 } %pair, 0 701 ret i16 %r 702} 703 704define dso_local i16 @cmpxchg_i16_aligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 705; -O0-LABEL: cmpxchg_i16_aligned_release_acquire_weak: 706; -O0: ldaxrh w0, [x2] 707; -O0: cmp w0, w9, uxth 708; -O0: stlxrh w8, w1, [x2] 709; 710; -O1-LABEL: cmpxchg_i16_aligned_release_acquire_weak: 711; -O1: ldaxrh w8, [x2] 712; -O1: cmp w8, w0, uxth 713; -O1: stlxrh wzr, w1, [x2] 714 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 2 715 %r = extractvalue { i16, i1 } %pair, 0 716 ret i16 %r 717} 718 719define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 720; -O0-LABEL: cmpxchg_i16_aligned_release_seq_cst: 721; -O0: ldaxrh w0, [x2] 722; -O0: cmp w0, w9, uxth 723; -O0: stlxrh w8, w1, [x2] 724; 725; -O1-LABEL: cmpxchg_i16_aligned_release_seq_cst: 726; -O1: and w8, w0, #0xffff 727; -O1: ldaxrh w0, [x2] 728; -O1: cmp w0, w8 729; -O1: stlxrh w9, w1, [x2] 730 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2 731 %r = extractvalue { i16, i1 } %pair, 0 732 ret i16 %r 733} 734 735define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 736; -O0-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak: 737; -O0: ldaxrh w0, [x2] 738; -O0: cmp w0, w9, uxth 739; -O0: stlxrh w8, w1, [x2] 740; 741; -O1-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak: 742; -O1: ldaxrh w8, [x2] 743; -O1: cmp w8, w0, uxth 744; -O1: stlxrh wzr, w1, [x2] 745 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2 746 %r = extractvalue { i16, i1 } %pair, 0 747 ret i16 %r 748} 749 750define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) { 751; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic: 752; -O0: ldaxrh w0, [x2] 753; -O0: cmp w0, w9, uxth 754; -O0: stlxrh w8, w1, [x2] 755; 756; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic: 757; -O1: and w8, w0, #0xffff 758; -O1: ldaxrh w0, [x2] 759; -O1: cmp w0, w8 760; -O1: stlxrh w9, w1, [x2] 761 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2 762 %r = extractvalue { i16, i1 } %pair, 0 763 ret i16 %r 764} 765 766define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 767; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak: 768; -O0: ldaxrh w0, [x2] 769; -O0: cmp w0, w9, uxth 770; -O0: stlxrh w8, w1, [x2] 771; 772; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak: 773; -O1: ldaxrh w8, [x2] 774; -O1: cmp w8, w0, uxth 775; -O1: stlxrh wzr, w1, [x2] 776 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2 777 %r = extractvalue { i16, i1 } %pair, 0 778 ret i16 %r 779} 780 781define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) { 782; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_acquire: 783; -O0: ldaxrh w0, [x2] 784; -O0: cmp w0, w9, uxth 785; -O0: stlxrh w8, w1, [x2] 786; 787; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_acquire: 788; -O1: and w8, w0, #0xffff 789; -O1: ldaxrh w0, [x2] 790; -O1: cmp w0, w8 791; -O1: stlxrh w9, w1, [x2] 792 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2 793 %r = extractvalue { i16, i1 } %pair, 0 794 ret i16 %r 795} 796 797define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 798; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak: 799; -O0: ldaxrh w0, [x2] 800; -O0: cmp w0, w9, uxth 801; -O0: stlxrh w8, w1, [x2] 802; 803; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak: 804; -O1: ldaxrh w8, [x2] 805; -O1: cmp w8, w0, uxth 806; -O1: stlxrh wzr, w1, [x2] 807 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2 808 %r = extractvalue { i16, i1 } %pair, 0 809 ret i16 %r 810} 811 812define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 813; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst: 814; -O0: ldaxrh w0, [x2] 815; -O0: cmp w0, w9, uxth 816; -O0: stlxrh w8, w1, [x2] 817; 818; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst: 819; -O1: and w8, w0, #0xffff 820; -O1: ldaxrh w0, [x2] 821; -O1: cmp w0, w8 822; -O1: stlxrh w9, w1, [x2] 823 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2 824 %r = extractvalue { i16, i1 } %pair, 0 825 ret i16 %r 826} 827 828define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 829; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak: 830; -O0: ldaxrh w0, [x2] 831; -O0: cmp w0, w9, uxth 832; -O0: stlxrh w8, w1, [x2] 833; 834; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak: 835; -O1: ldaxrh w8, [x2] 836; -O1: cmp w8, w0, uxth 837; -O1: stlxrh wzr, w1, [x2] 838 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2 839 %r = extractvalue { i16, i1 } %pair, 0 840 ret i16 %r 841} 842 843define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) { 844; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic: 845; -O0: ldaxrh w0, [x2] 846; -O0: cmp w0, w9, uxth 847; -O0: stlxrh w8, w1, [x2] 848; 849; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic: 850; -O1: and w8, w0, #0xffff 851; -O1: ldaxrh w0, [x2] 852; -O1: cmp w0, w8 853; -O1: stlxrh w9, w1, [x2] 854 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2 855 %r = extractvalue { i16, i1 } %pair, 0 856 ret i16 %r 857} 858 859define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 860; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak: 861; -O0: ldaxrh w0, [x2] 862; -O0: cmp w0, w9, uxth 863; -O0: stlxrh w8, w1, [x2] 864; 865; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak: 866; -O1: ldaxrh w8, [x2] 867; -O1: cmp w8, w0, uxth 868; -O1: stlxrh wzr, w1, [x2] 869 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2 870 %r = extractvalue { i16, i1 } %pair, 0 871 ret i16 %r 872} 873 874define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) { 875; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_acquire: 876; -O0: ldaxrh w0, [x2] 877; -O0: cmp w0, w9, uxth 878; -O0: stlxrh w8, w1, [x2] 879; 880; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_acquire: 881; -O1: and w8, w0, #0xffff 882; -O1: ldaxrh w0, [x2] 883; -O1: cmp w0, w8 884; -O1: stlxrh w9, w1, [x2] 885 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2 886 %r = extractvalue { i16, i1 } %pair, 0 887 ret i16 %r 888} 889 890define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 891; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak: 892; -O0: ldaxrh w0, [x2] 893; -O0: cmp w0, w9, uxth 894; -O0: stlxrh w8, w1, [x2] 895; 896; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak: 897; -O1: ldaxrh w8, [x2] 898; -O1: cmp w8, w0, uxth 899; -O1: stlxrh wzr, w1, [x2] 900 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2 901 %r = extractvalue { i16, i1 } %pair, 0 902 ret i16 %r 903} 904 905define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 906; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst: 907; -O0: ldaxrh w0, [x2] 908; -O0: cmp w0, w9, uxth 909; -O0: stlxrh w8, w1, [x2] 910; 911; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst: 912; -O1: and w8, w0, #0xffff 913; -O1: ldaxrh w0, [x2] 914; -O1: cmp w0, w8 915; -O1: stlxrh w9, w1, [x2] 916 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2 917 %r = extractvalue { i16, i1 } %pair, 0 918 ret i16 %r 919} 920 921define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 922; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak: 923; -O0: ldaxrh w0, [x2] 924; -O0: cmp w0, w9, uxth 925; -O0: stlxrh w8, w1, [x2] 926; 927; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak: 928; -O1: ldaxrh w8, [x2] 929; -O1: cmp w8, w0, uxth 930; -O1: stlxrh wzr, w1, [x2] 931 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2 932 %r = extractvalue { i16, i1 } %pair, 0 933 ret i16 %r 934} 935 936define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) { 937; -O0-LABEL: cmpxchg_i32_aligned_monotonic_monotonic: 938; -O0: ldaxr w0, [x2] 939; -O0: cmp w0, w9 940; -O0: stlxr w8, w1, [x2] 941; 942; -O1-LABEL: cmpxchg_i32_aligned_monotonic_monotonic: 943; -O1: ldxr w0, [x2] 944; -O1: cmp w0, w8 945; -O1: stxr w9, w1, [x2] 946 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4 947 %r = extractvalue { i32, i1 } %pair, 0 948 ret i32 %r 949} 950 951define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 952; -O0-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak: 953; -O0: ldaxr w0, [x2] 954; -O0: cmp w0, w9 955; -O0: stlxr w8, w1, [x2] 956; 957; -O1-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak: 958; -O1: ldxr w8, [x2] 959; -O1: cmp w8, w0 960; -O1: stxr wzr, w1, [x2] 961 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4 962 %r = extractvalue { i32, i1 } %pair, 0 963 ret i32 %r 964} 965 966define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) { 967; -O0-LABEL: cmpxchg_i32_aligned_monotonic_acquire: 968; -O0: ldaxr w0, [x2] 969; -O0: cmp w0, w9 970; -O0: stlxr w8, w1, [x2] 971; 972; -O1-LABEL: cmpxchg_i32_aligned_monotonic_acquire: 973; -O1: ldaxr w0, [x2] 974; -O1: cmp w0, w8 975; -O1: stxr w9, w1, [x2] 976 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4 977 %r = extractvalue { i32, i1 } %pair, 0 978 ret i32 %r 979} 980 981define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 982; -O0-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak: 983; -O0: ldaxr w0, [x2] 984; -O0: cmp w0, w9 985; -O0: stlxr w8, w1, [x2] 986; 987; -O1-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak: 988; -O1: ldaxr w8, [x2] 989; -O1: cmp w8, w0 990; -O1: stxr wzr, w1, [x2] 991 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4 992 %r = extractvalue { i32, i1 } %pair, 0 993 ret i32 %r 994} 995 996define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 997; -O0-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst: 998; -O0: ldaxr w0, [x2] 999; -O0: cmp w0, w9 1000; -O0: stlxr w8, w1, [x2] 1001; 1002; -O1-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst: 1003; -O1: ldaxr w0, [x2] 1004; -O1: cmp w0, w8 1005; -O1: stlxr w9, w1, [x2] 1006 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4 1007 %r = extractvalue { i32, i1 } %pair, 0 1008 ret i32 %r 1009} 1010 1011define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1012; -O0-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak: 1013; -O0: ldaxr w0, [x2] 1014; -O0: cmp w0, w9 1015; -O0: stlxr w8, w1, [x2] 1016; 1017; -O1-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak: 1018; -O1: ldaxr w8, [x2] 1019; -O1: cmp w8, w0 1020; -O1: stlxr wzr, w1, [x2] 1021 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4 1022 %r = extractvalue { i32, i1 } %pair, 0 1023 ret i32 %r 1024} 1025 1026define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1027; -O0-LABEL: cmpxchg_i32_aligned_acquire_monotonic: 1028; -O0: ldaxr w0, [x2] 1029; -O0: cmp w0, w9 1030; -O0: stlxr w8, w1, [x2] 1031; 1032; -O1-LABEL: cmpxchg_i32_aligned_acquire_monotonic: 1033; -O1: ldaxr w0, [x2] 1034; -O1: cmp w0, w8 1035; -O1: stxr w9, w1, [x2] 1036 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4 1037 %r = extractvalue { i32, i1 } %pair, 0 1038 ret i32 %r 1039} 1040 1041define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1042; -O0-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak: 1043; -O0: ldaxr w0, [x2] 1044; -O0: cmp w0, w9 1045; -O0: stlxr w8, w1, [x2] 1046; 1047; -O1-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak: 1048; -O1: ldaxr w8, [x2] 1049; -O1: cmp w8, w0 1050; -O1: stxr wzr, w1, [x2] 1051 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4 1052 %r = extractvalue { i32, i1 } %pair, 0 1053 ret i32 %r 1054} 1055 1056define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) { 1057; -O0-LABEL: cmpxchg_i32_aligned_acquire_acquire: 1058; -O0: ldaxr w0, [x2] 1059; -O0: cmp w0, w9 1060; -O0: stlxr w8, w1, [x2] 1061; 1062; -O1-LABEL: cmpxchg_i32_aligned_acquire_acquire: 1063; -O1: ldaxr w0, [x2] 1064; -O1: cmp w0, w8 1065; -O1: stxr w9, w1, [x2] 1066 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4 1067 %r = extractvalue { i32, i1 } %pair, 0 1068 ret i32 %r 1069} 1070 1071define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1072; -O0-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak: 1073; -O0: ldaxr w0, [x2] 1074; -O0: cmp w0, w9 1075; -O0: stlxr w8, w1, [x2] 1076; 1077; -O1-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak: 1078; -O1: ldaxr w8, [x2] 1079; -O1: cmp w8, w0 1080; -O1: stxr wzr, w1, [x2] 1081 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4 1082 %r = extractvalue { i32, i1 } %pair, 0 1083 ret i32 %r 1084} 1085 1086define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1087; -O0-LABEL: cmpxchg_i32_aligned_acquire_seq_cst: 1088; -O0: ldaxr w0, [x2] 1089; -O0: cmp w0, w9 1090; -O0: stlxr w8, w1, [x2] 1091; 1092; -O1-LABEL: cmpxchg_i32_aligned_acquire_seq_cst: 1093; -O1: ldaxr w0, [x2] 1094; -O1: cmp w0, w8 1095; -O1: stlxr w9, w1, [x2] 1096 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4 1097 %r = extractvalue { i32, i1 } %pair, 0 1098 ret i32 %r 1099} 1100 1101define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1102; -O0-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak: 1103; -O0: ldaxr w0, [x2] 1104; -O0: cmp w0, w9 1105; -O0: stlxr w8, w1, [x2] 1106; 1107; -O1-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak: 1108; -O1: ldaxr w8, [x2] 1109; -O1: cmp w8, w0 1110; -O1: stlxr wzr, w1, [x2] 1111 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4 1112 %r = extractvalue { i32, i1 } %pair, 0 1113 ret i32 %r 1114} 1115 1116define dso_local i32 @cmpxchg_i32_aligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1117; -O0-LABEL: cmpxchg_i32_aligned_release_monotonic: 1118; -O0: ldaxr w0, [x2] 1119; -O0: cmp w0, w9 1120; -O0: stlxr w8, w1, [x2] 1121; 1122; -O1-LABEL: cmpxchg_i32_aligned_release_monotonic: 1123; -O1: ldxr w0, [x2] 1124; -O1: cmp w0, w8 1125; -O1: stlxr w9, w1, [x2] 1126 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 4 1127 %r = extractvalue { i32, i1 } %pair, 0 1128 ret i32 %r 1129} 1130 1131define dso_local i32 @cmpxchg_i32_aligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1132; -O0-LABEL: cmpxchg_i32_aligned_release_monotonic_weak: 1133; -O0: ldaxr w0, [x2] 1134; -O0: cmp w0, w9 1135; -O0: stlxr w8, w1, [x2] 1136; 1137; -O1-LABEL: cmpxchg_i32_aligned_release_monotonic_weak: 1138; -O1: ldxr w8, [x2] 1139; -O1: cmp w8, w0 1140; -O1: stlxr wzr, w1, [x2] 1141 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 4 1142 %r = extractvalue { i32, i1 } %pair, 0 1143 ret i32 %r 1144} 1145 1146define dso_local i32 @cmpxchg_i32_aligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) { 1147; -O0-LABEL: cmpxchg_i32_aligned_release_acquire: 1148; -O0: ldaxr w0, [x2] 1149; -O0: cmp w0, w9 1150; -O0: stlxr w8, w1, [x2] 1151; 1152; -O1-LABEL: cmpxchg_i32_aligned_release_acquire: 1153; -O1: ldaxr w0, [x2] 1154; -O1: cmp w0, w8 1155; -O1: stlxr w9, w1, [x2] 1156 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 4 1157 %r = extractvalue { i32, i1 } %pair, 0 1158 ret i32 %r 1159} 1160 1161define dso_local i32 @cmpxchg_i32_aligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1162; -O0-LABEL: cmpxchg_i32_aligned_release_acquire_weak: 1163; -O0: ldaxr w0, [x2] 1164; -O0: cmp w0, w9 1165; -O0: stlxr w8, w1, [x2] 1166; 1167; -O1-LABEL: cmpxchg_i32_aligned_release_acquire_weak: 1168; -O1: ldaxr w8, [x2] 1169; -O1: cmp w8, w0 1170; -O1: stlxr wzr, w1, [x2] 1171 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 4 1172 %r = extractvalue { i32, i1 } %pair, 0 1173 ret i32 %r 1174} 1175 1176define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1177; -O0-LABEL: cmpxchg_i32_aligned_release_seq_cst: 1178; -O0: ldaxr w0, [x2] 1179; -O0: cmp w0, w9 1180; -O0: stlxr w8, w1, [x2] 1181; 1182; -O1-LABEL: cmpxchg_i32_aligned_release_seq_cst: 1183; -O1: ldaxr w0, [x2] 1184; -O1: cmp w0, w8 1185; -O1: stlxr w9, w1, [x2] 1186 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4 1187 %r = extractvalue { i32, i1 } %pair, 0 1188 ret i32 %r 1189} 1190 1191define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1192; -O0-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak: 1193; -O0: ldaxr w0, [x2] 1194; -O0: cmp w0, w9 1195; -O0: stlxr w8, w1, [x2] 1196; 1197; -O1-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak: 1198; -O1: ldaxr w8, [x2] 1199; -O1: cmp w8, w0 1200; -O1: stlxr wzr, w1, [x2] 1201 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4 1202 %r = extractvalue { i32, i1 } %pair, 0 1203 ret i32 %r 1204} 1205 1206define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1207; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic: 1208; -O0: ldaxr w0, [x2] 1209; -O0: cmp w0, w9 1210; -O0: stlxr w8, w1, [x2] 1211; 1212; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic: 1213; -O1: ldaxr w0, [x2] 1214; -O1: cmp w0, w8 1215; -O1: stlxr w9, w1, [x2] 1216 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4 1217 %r = extractvalue { i32, i1 } %pair, 0 1218 ret i32 %r 1219} 1220 1221define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1222; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak: 1223; -O0: ldaxr w0, [x2] 1224; -O0: cmp w0, w9 1225; -O0: stlxr w8, w1, [x2] 1226; 1227; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak: 1228; -O1: ldaxr w8, [x2] 1229; -O1: cmp w8, w0 1230; -O1: stlxr wzr, w1, [x2] 1231 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4 1232 %r = extractvalue { i32, i1 } %pair, 0 1233 ret i32 %r 1234} 1235 1236define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) { 1237; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_acquire: 1238; -O0: ldaxr w0, [x2] 1239; -O0: cmp w0, w9 1240; -O0: stlxr w8, w1, [x2] 1241; 1242; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_acquire: 1243; -O1: ldaxr w0, [x2] 1244; -O1: cmp w0, w8 1245; -O1: stlxr w9, w1, [x2] 1246 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4 1247 %r = extractvalue { i32, i1 } %pair, 0 1248 ret i32 %r 1249} 1250 1251define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1252; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak: 1253; -O0: ldaxr w0, [x2] 1254; -O0: cmp w0, w9 1255; -O0: stlxr w8, w1, [x2] 1256; 1257; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak: 1258; -O1: ldaxr w8, [x2] 1259; -O1: cmp w8, w0 1260; -O1: stlxr wzr, w1, [x2] 1261 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4 1262 %r = extractvalue { i32, i1 } %pair, 0 1263 ret i32 %r 1264} 1265 1266define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1267; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst: 1268; -O0: ldaxr w0, [x2] 1269; -O0: cmp w0, w9 1270; -O0: stlxr w8, w1, [x2] 1271; 1272; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst: 1273; -O1: ldaxr w0, [x2] 1274; -O1: cmp w0, w8 1275; -O1: stlxr w9, w1, [x2] 1276 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4 1277 %r = extractvalue { i32, i1 } %pair, 0 1278 ret i32 %r 1279} 1280 1281define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1282; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak: 1283; -O0: ldaxr w0, [x2] 1284; -O0: cmp w0, w9 1285; -O0: stlxr w8, w1, [x2] 1286; 1287; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak: 1288; -O1: ldaxr w8, [x2] 1289; -O1: cmp w8, w0 1290; -O1: stlxr wzr, w1, [x2] 1291 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4 1292 %r = extractvalue { i32, i1 } %pair, 0 1293 ret i32 %r 1294} 1295 1296define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1297; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic: 1298; -O0: ldaxr w0, [x2] 1299; -O0: cmp w0, w9 1300; -O0: stlxr w8, w1, [x2] 1301; 1302; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic: 1303; -O1: ldaxr w0, [x2] 1304; -O1: cmp w0, w8 1305; -O1: stlxr w9, w1, [x2] 1306 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4 1307 %r = extractvalue { i32, i1 } %pair, 0 1308 ret i32 %r 1309} 1310 1311define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1312; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak: 1313; -O0: ldaxr w0, [x2] 1314; -O0: cmp w0, w9 1315; -O0: stlxr w8, w1, [x2] 1316; 1317; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak: 1318; -O1: ldaxr w8, [x2] 1319; -O1: cmp w8, w0 1320; -O1: stlxr wzr, w1, [x2] 1321 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4 1322 %r = extractvalue { i32, i1 } %pair, 0 1323 ret i32 %r 1324} 1325 1326define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) { 1327; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_acquire: 1328; -O0: ldaxr w0, [x2] 1329; -O0: cmp w0, w9 1330; -O0: stlxr w8, w1, [x2] 1331; 1332; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_acquire: 1333; -O1: ldaxr w0, [x2] 1334; -O1: cmp w0, w8 1335; -O1: stlxr w9, w1, [x2] 1336 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4 1337 %r = extractvalue { i32, i1 } %pair, 0 1338 ret i32 %r 1339} 1340 1341define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1342; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak: 1343; -O0: ldaxr w0, [x2] 1344; -O0: cmp w0, w9 1345; -O0: stlxr w8, w1, [x2] 1346; 1347; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak: 1348; -O1: ldaxr w8, [x2] 1349; -O1: cmp w8, w0 1350; -O1: stlxr wzr, w1, [x2] 1351 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4 1352 %r = extractvalue { i32, i1 } %pair, 0 1353 ret i32 %r 1354} 1355 1356define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1357; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst: 1358; -O0: ldaxr w0, [x2] 1359; -O0: cmp w0, w9 1360; -O0: stlxr w8, w1, [x2] 1361; 1362; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst: 1363; -O1: ldaxr w0, [x2] 1364; -O1: cmp w0, w8 1365; -O1: stlxr w9, w1, [x2] 1366 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4 1367 %r = extractvalue { i32, i1 } %pair, 0 1368 ret i32 %r 1369} 1370 1371define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1372; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak: 1373; -O0: ldaxr w0, [x2] 1374; -O0: cmp w0, w9 1375; -O0: stlxr w8, w1, [x2] 1376; 1377; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak: 1378; -O1: ldaxr w8, [x2] 1379; -O1: cmp w8, w0 1380; -O1: stlxr wzr, w1, [x2] 1381 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4 1382 %r = extractvalue { i32, i1 } %pair, 0 1383 ret i32 %r 1384} 1385 1386define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) { 1387; -O0-LABEL: cmpxchg_i64_aligned_monotonic_monotonic: 1388; -O0: ldaxr x0, [x2] 1389; -O0: cmp x0, x9 1390; -O0: stlxr w8, x1, [x2] 1391; 1392; -O1-LABEL: cmpxchg_i64_aligned_monotonic_monotonic: 1393; -O1: ldxr x0, [x2] 1394; -O1: cmp x0, x8 1395; -O1: stxr w9, x1, [x2] 1396 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8 1397 %r = extractvalue { i64, i1 } %pair, 0 1398 ret i64 %r 1399} 1400 1401define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 1402; -O0-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak: 1403; -O0: ldaxr x0, [x2] 1404; -O0: cmp x0, x9 1405; -O0: stlxr w8, x1, [x2] 1406; 1407; -O1-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak: 1408; -O1: ldxr x8, [x2] 1409; -O1: cmp x8, x0 1410; -O1: stxr wzr, x1, [x2] 1411 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8 1412 %r = extractvalue { i64, i1 } %pair, 0 1413 ret i64 %r 1414} 1415 1416define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) { 1417; -O0-LABEL: cmpxchg_i64_aligned_monotonic_acquire: 1418; -O0: ldaxr x0, [x2] 1419; -O0: cmp x0, x9 1420; -O0: stlxr w8, x1, [x2] 1421; 1422; -O1-LABEL: cmpxchg_i64_aligned_monotonic_acquire: 1423; -O1: ldaxr x0, [x2] 1424; -O1: cmp x0, x8 1425; -O1: stxr w9, x1, [x2] 1426 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8 1427 %r = extractvalue { i64, i1 } %pair, 0 1428 ret i64 %r 1429} 1430 1431define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 1432; -O0-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak: 1433; -O0: ldaxr x0, [x2] 1434; -O0: cmp x0, x9 1435; -O0: stlxr w8, x1, [x2] 1436; 1437; -O1-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak: 1438; -O1: ldaxr x8, [x2] 1439; -O1: cmp x8, x0 1440; -O1: stxr wzr, x1, [x2] 1441 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8 1442 %r = extractvalue { i64, i1 } %pair, 0 1443 ret i64 %r 1444} 1445 1446define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 1447; -O0-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst: 1448; -O0: ldaxr x0, [x2] 1449; -O0: cmp x0, x9 1450; -O0: stlxr w8, x1, [x2] 1451; 1452; -O1-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst: 1453; -O1: ldaxr x0, [x2] 1454; -O1: cmp x0, x8 1455; -O1: stlxr w9, x1, [x2] 1456 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8 1457 %r = extractvalue { i64, i1 } %pair, 0 1458 ret i64 %r 1459} 1460 1461define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 1462; -O0-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak: 1463; -O0: ldaxr x0, [x2] 1464; -O0: cmp x0, x9 1465; -O0: stlxr w8, x1, [x2] 1466; 1467; -O1-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak: 1468; -O1: ldaxr x8, [x2] 1469; -O1: cmp x8, x0 1470; -O1: stlxr wzr, x1, [x2] 1471 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8 1472 %r = extractvalue { i64, i1 } %pair, 0 1473 ret i64 %r 1474} 1475 1476define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) { 1477; -O0-LABEL: cmpxchg_i64_aligned_acquire_monotonic: 1478; -O0: ldaxr x0, [x2] 1479; -O0: cmp x0, x9 1480; -O0: stlxr w8, x1, [x2] 1481; 1482; -O1-LABEL: cmpxchg_i64_aligned_acquire_monotonic: 1483; -O1: ldaxr x0, [x2] 1484; -O1: cmp x0, x8 1485; -O1: stxr w9, x1, [x2] 1486 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8 1487 %r = extractvalue { i64, i1 } %pair, 0 1488 ret i64 %r 1489} 1490 1491define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 1492; -O0-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak: 1493; -O0: ldaxr x0, [x2] 1494; -O0: cmp x0, x9 1495; -O0: stlxr w8, x1, [x2] 1496; 1497; -O1-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak: 1498; -O1: ldaxr x8, [x2] 1499; -O1: cmp x8, x0 1500; -O1: stxr wzr, x1, [x2] 1501 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8 1502 %r = extractvalue { i64, i1 } %pair, 0 1503 ret i64 %r 1504} 1505 1506define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) { 1507; -O0-LABEL: cmpxchg_i64_aligned_acquire_acquire: 1508; -O0: ldaxr x0, [x2] 1509; -O0: cmp x0, x9 1510; -O0: stlxr w8, x1, [x2] 1511; 1512; -O1-LABEL: cmpxchg_i64_aligned_acquire_acquire: 1513; -O1: ldaxr x0, [x2] 1514; -O1: cmp x0, x8 1515; -O1: stxr w9, x1, [x2] 1516 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8 1517 %r = extractvalue { i64, i1 } %pair, 0 1518 ret i64 %r 1519} 1520 1521define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 1522; -O0-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak: 1523; -O0: ldaxr x0, [x2] 1524; -O0: cmp x0, x9 1525; -O0: stlxr w8, x1, [x2] 1526; 1527; -O1-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak: 1528; -O1: ldaxr x8, [x2] 1529; -O1: cmp x8, x0 1530; -O1: stxr wzr, x1, [x2] 1531 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8 1532 %r = extractvalue { i64, i1 } %pair, 0 1533 ret i64 %r 1534} 1535 1536define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 1537; -O0-LABEL: cmpxchg_i64_aligned_acquire_seq_cst: 1538; -O0: ldaxr x0, [x2] 1539; -O0: cmp x0, x9 1540; -O0: stlxr w8, x1, [x2] 1541; 1542; -O1-LABEL: cmpxchg_i64_aligned_acquire_seq_cst: 1543; -O1: ldaxr x0, [x2] 1544; -O1: cmp x0, x8 1545; -O1: stlxr w9, x1, [x2] 1546 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8 1547 %r = extractvalue { i64, i1 } %pair, 0 1548 ret i64 %r 1549} 1550 1551define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 1552; -O0-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak: 1553; -O0: ldaxr x0, [x2] 1554; -O0: cmp x0, x9 1555; -O0: stlxr w8, x1, [x2] 1556; 1557; -O1-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak: 1558; -O1: ldaxr x8, [x2] 1559; -O1: cmp x8, x0 1560; -O1: stlxr wzr, x1, [x2] 1561 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8 1562 %r = extractvalue { i64, i1 } %pair, 0 1563 ret i64 %r 1564} 1565 1566define dso_local i64 @cmpxchg_i64_aligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) { 1567; -O0-LABEL: cmpxchg_i64_aligned_release_monotonic: 1568; -O0: ldaxr x0, [x2] 1569; -O0: cmp x0, x9 1570; -O0: stlxr w8, x1, [x2] 1571; 1572; -O1-LABEL: cmpxchg_i64_aligned_release_monotonic: 1573; -O1: ldxr x0, [x2] 1574; -O1: cmp x0, x8 1575; -O1: stlxr w9, x1, [x2] 1576 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 8 1577 %r = extractvalue { i64, i1 } %pair, 0 1578 ret i64 %r 1579} 1580 1581define dso_local i64 @cmpxchg_i64_aligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 1582; -O0-LABEL: cmpxchg_i64_aligned_release_monotonic_weak: 1583; -O0: ldaxr x0, [x2] 1584; -O0: cmp x0, x9 1585; -O0: stlxr w8, x1, [x2] 1586; 1587; -O1-LABEL: cmpxchg_i64_aligned_release_monotonic_weak: 1588; -O1: ldxr x8, [x2] 1589; -O1: cmp x8, x0 1590; -O1: stlxr wzr, x1, [x2] 1591 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 8 1592 %r = extractvalue { i64, i1 } %pair, 0 1593 ret i64 %r 1594} 1595 1596define dso_local i64 @cmpxchg_i64_aligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) { 1597; -O0-LABEL: cmpxchg_i64_aligned_release_acquire: 1598; -O0: ldaxr x0, [x2] 1599; -O0: cmp x0, x9 1600; -O0: stlxr w8, x1, [x2] 1601; 1602; -O1-LABEL: cmpxchg_i64_aligned_release_acquire: 1603; -O1: ldaxr x0, [x2] 1604; -O1: cmp x0, x8 1605; -O1: stlxr w9, x1, [x2] 1606 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 8 1607 %r = extractvalue { i64, i1 } %pair, 0 1608 ret i64 %r 1609} 1610 1611define dso_local i64 @cmpxchg_i64_aligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 1612; -O0-LABEL: cmpxchg_i64_aligned_release_acquire_weak: 1613; -O0: ldaxr x0, [x2] 1614; -O0: cmp x0, x9 1615; -O0: stlxr w8, x1, [x2] 1616; 1617; -O1-LABEL: cmpxchg_i64_aligned_release_acquire_weak: 1618; -O1: ldaxr x8, [x2] 1619; -O1: cmp x8, x0 1620; -O1: stlxr wzr, x1, [x2] 1621 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 8 1622 %r = extractvalue { i64, i1 } %pair, 0 1623 ret i64 %r 1624} 1625 1626define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 1627; -O0-LABEL: cmpxchg_i64_aligned_release_seq_cst: 1628; -O0: ldaxr x0, [x2] 1629; -O0: cmp x0, x9 1630; -O0: stlxr w8, x1, [x2] 1631; 1632; -O1-LABEL: cmpxchg_i64_aligned_release_seq_cst: 1633; -O1: ldaxr x0, [x2] 1634; -O1: cmp x0, x8 1635; -O1: stlxr w9, x1, [x2] 1636 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8 1637 %r = extractvalue { i64, i1 } %pair, 0 1638 ret i64 %r 1639} 1640 1641define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 1642; -O0-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak: 1643; -O0: ldaxr x0, [x2] 1644; -O0: cmp x0, x9 1645; -O0: stlxr w8, x1, [x2] 1646; 1647; -O1-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak: 1648; -O1: ldaxr x8, [x2] 1649; -O1: cmp x8, x0 1650; -O1: stlxr wzr, x1, [x2] 1651 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8 1652 %r = extractvalue { i64, i1 } %pair, 0 1653 ret i64 %r 1654} 1655 1656define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) { 1657; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic: 1658; -O0: ldaxr x0, [x2] 1659; -O0: cmp x0, x9 1660; -O0: stlxr w8, x1, [x2] 1661; 1662; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic: 1663; -O1: ldaxr x0, [x2] 1664; -O1: cmp x0, x8 1665; -O1: stlxr w9, x1, [x2] 1666 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8 1667 %r = extractvalue { i64, i1 } %pair, 0 1668 ret i64 %r 1669} 1670 1671define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 1672; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak: 1673; -O0: ldaxr x0, [x2] 1674; -O0: cmp x0, x9 1675; -O0: stlxr w8, x1, [x2] 1676; 1677; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak: 1678; -O1: ldaxr x8, [x2] 1679; -O1: cmp x8, x0 1680; -O1: stlxr wzr, x1, [x2] 1681 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8 1682 %r = extractvalue { i64, i1 } %pair, 0 1683 ret i64 %r 1684} 1685 1686define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) { 1687; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_acquire: 1688; -O0: ldaxr x0, [x2] 1689; -O0: cmp x0, x9 1690; -O0: stlxr w8, x1, [x2] 1691; 1692; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_acquire: 1693; -O1: ldaxr x0, [x2] 1694; -O1: cmp x0, x8 1695; -O1: stlxr w9, x1, [x2] 1696 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8 1697 %r = extractvalue { i64, i1 } %pair, 0 1698 ret i64 %r 1699} 1700 1701define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 1702; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak: 1703; -O0: ldaxr x0, [x2] 1704; -O0: cmp x0, x9 1705; -O0: stlxr w8, x1, [x2] 1706; 1707; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak: 1708; -O1: ldaxr x8, [x2] 1709; -O1: cmp x8, x0 1710; -O1: stlxr wzr, x1, [x2] 1711 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8 1712 %r = extractvalue { i64, i1 } %pair, 0 1713 ret i64 %r 1714} 1715 1716define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 1717; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst: 1718; -O0: ldaxr x0, [x2] 1719; -O0: cmp x0, x9 1720; -O0: stlxr w8, x1, [x2] 1721; 1722; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst: 1723; -O1: ldaxr x0, [x2] 1724; -O1: cmp x0, x8 1725; -O1: stlxr w9, x1, [x2] 1726 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8 1727 %r = extractvalue { i64, i1 } %pair, 0 1728 ret i64 %r 1729} 1730 1731define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 1732; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak: 1733; -O0: ldaxr x0, [x2] 1734; -O0: cmp x0, x9 1735; -O0: stlxr w8, x1, [x2] 1736; 1737; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak: 1738; -O1: ldaxr x8, [x2] 1739; -O1: cmp x8, x0 1740; -O1: stlxr wzr, x1, [x2] 1741 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8 1742 %r = extractvalue { i64, i1 } %pair, 0 1743 ret i64 %r 1744} 1745 1746define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) { 1747; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic: 1748; -O0: ldaxr x0, [x2] 1749; -O0: cmp x0, x9 1750; -O0: stlxr w8, x1, [x2] 1751; 1752; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic: 1753; -O1: ldaxr x0, [x2] 1754; -O1: cmp x0, x8 1755; -O1: stlxr w9, x1, [x2] 1756 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8 1757 %r = extractvalue { i64, i1 } %pair, 0 1758 ret i64 %r 1759} 1760 1761define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 1762; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak: 1763; -O0: ldaxr x0, [x2] 1764; -O0: cmp x0, x9 1765; -O0: stlxr w8, x1, [x2] 1766; 1767; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak: 1768; -O1: ldaxr x8, [x2] 1769; -O1: cmp x8, x0 1770; -O1: stlxr wzr, x1, [x2] 1771 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8 1772 %r = extractvalue { i64, i1 } %pair, 0 1773 ret i64 %r 1774} 1775 1776define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) { 1777; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_acquire: 1778; -O0: ldaxr x0, [x2] 1779; -O0: cmp x0, x9 1780; -O0: stlxr w8, x1, [x2] 1781; 1782; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_acquire: 1783; -O1: ldaxr x0, [x2] 1784; -O1: cmp x0, x8 1785; -O1: stlxr w9, x1, [x2] 1786 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8 1787 %r = extractvalue { i64, i1 } %pair, 0 1788 ret i64 %r 1789} 1790 1791define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 1792; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak: 1793; -O0: ldaxr x0, [x2] 1794; -O0: cmp x0, x9 1795; -O0: stlxr w8, x1, [x2] 1796; 1797; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak: 1798; -O1: ldaxr x8, [x2] 1799; -O1: cmp x8, x0 1800; -O1: stlxr wzr, x1, [x2] 1801 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8 1802 %r = extractvalue { i64, i1 } %pair, 0 1803 ret i64 %r 1804} 1805 1806define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 1807; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst: 1808; -O0: ldaxr x0, [x2] 1809; -O0: cmp x0, x9 1810; -O0: stlxr w8, x1, [x2] 1811; 1812; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst: 1813; -O1: ldaxr x0, [x2] 1814; -O1: cmp x0, x8 1815; -O1: stlxr w9, x1, [x2] 1816 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8 1817 %r = extractvalue { i64, i1 } %pair, 0 1818 ret i64 %r 1819} 1820 1821define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 1822; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak: 1823; -O0: ldaxr x0, [x2] 1824; -O0: cmp x0, x9 1825; -O0: stlxr w8, x1, [x2] 1826; 1827; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak: 1828; -O1: ldaxr x8, [x2] 1829; -O1: cmp x8, x0 1830; -O1: stlxr wzr, x1, [x2] 1831 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8 1832 %r = extractvalue { i64, i1 } %pair, 0 1833 ret i64 %r 1834} 1835 1836define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1837; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic: 1838; -O0: ldxp x0, x1, [x4] 1839; -O0: cmp x0, x9 1840; -O0: cmp x1, x10 1841; -O0: stxp w8, x2, x3, [x4] 1842; -O0: stxp w8, x0, x1, [x4] 1843; 1844; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic: 1845; -O1: ldxp x8, x9, [x4] 1846; -O1: cmp x8, x0 1847; -O1: cmp x9, x1 1848; -O1: stxp w10, x8, x9, [x4] 1849; -O1: stxp w10, x2, x3, [x4] 1850 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16 1851 %r = extractvalue { i128, i1 } %pair, 0 1852 ret i128 %r 1853} 1854 1855define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1856; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak: 1857; -O0: ldxp x0, x1, [x4] 1858; -O0: cmp x0, x9 1859; -O0: cmp x1, x10 1860; -O0: stxp w8, x2, x3, [x4] 1861; -O0: stxp w8, x0, x1, [x4] 1862; 1863; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak: 1864; -O1: ldxp x8, x9, [x4] 1865; -O1: cmp x8, x0 1866; -O1: cmp x9, x1 1867; -O1: stxp w10, x8, x9, [x4] 1868; -O1: stxp w10, x2, x3, [x4] 1869 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16 1870 %r = extractvalue { i128, i1 } %pair, 0 1871 ret i128 %r 1872} 1873 1874define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) { 1875; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire: 1876; -O0: ldaxp x0, x1, [x4] 1877; -O0: cmp x0, x9 1878; -O0: cmp x1, x10 1879; -O0: stxp w8, x2, x3, [x4] 1880; -O0: stxp w8, x0, x1, [x4] 1881; 1882; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire: 1883; -O1: ldaxp x8, x9, [x4] 1884; -O1: cmp x8, x0 1885; -O1: cmp x9, x1 1886; -O1: stxp w10, x8, x9, [x4] 1887; -O1: stxp w10, x2, x3, [x4] 1888 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16 1889 %r = extractvalue { i128, i1 } %pair, 0 1890 ret i128 %r 1891} 1892 1893define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1894; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak: 1895; -O0: ldaxp x0, x1, [x4] 1896; -O0: cmp x0, x9 1897; -O0: cmp x1, x10 1898; -O0: stxp w8, x2, x3, [x4] 1899; -O0: stxp w8, x0, x1, [x4] 1900; 1901; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak: 1902; -O1: ldaxp x8, x9, [x4] 1903; -O1: cmp x8, x0 1904; -O1: cmp x9, x1 1905; -O1: stxp w10, x8, x9, [x4] 1906; -O1: stxp w10, x2, x3, [x4] 1907 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16 1908 %r = extractvalue { i128, i1 } %pair, 0 1909 ret i128 %r 1910} 1911 1912define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1913; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst: 1914; -O0: ldaxp x0, x1, [x4] 1915; -O0: cmp x0, x9 1916; -O0: cmp x1, x10 1917; -O0: stlxp w8, x2, x3, [x4] 1918; -O0: stlxp w8, x0, x1, [x4] 1919; 1920; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst: 1921; -O1: ldaxp x8, x9, [x4] 1922; -O1: cmp x8, x0 1923; -O1: cmp x9, x1 1924; -O1: stlxp w10, x8, x9, [x4] 1925; -O1: stlxp w10, x2, x3, [x4] 1926 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16 1927 %r = extractvalue { i128, i1 } %pair, 0 1928 ret i128 %r 1929} 1930 1931define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1932; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak: 1933; -O0: ldaxp x0, x1, [x4] 1934; -O0: cmp x0, x9 1935; -O0: cmp x1, x10 1936; -O0: stlxp w8, x2, x3, [x4] 1937; -O0: stlxp w8, x0, x1, [x4] 1938; 1939; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak: 1940; -O1: ldaxp x8, x9, [x4] 1941; -O1: cmp x8, x0 1942; -O1: cmp x9, x1 1943; -O1: stlxp w10, x8, x9, [x4] 1944; -O1: stlxp w10, x2, x3, [x4] 1945 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16 1946 %r = extractvalue { i128, i1 } %pair, 0 1947 ret i128 %r 1948} 1949 1950define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1951; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic: 1952; -O0: ldaxp x0, x1, [x4] 1953; -O0: cmp x0, x9 1954; -O0: cmp x1, x10 1955; -O0: stxp w8, x2, x3, [x4] 1956; -O0: stxp w8, x0, x1, [x4] 1957; 1958; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic: 1959; -O1: ldaxp x8, x9, [x4] 1960; -O1: cmp x8, x0 1961; -O1: cmp x9, x1 1962; -O1: stxp w10, x8, x9, [x4] 1963; -O1: stxp w10, x2, x3, [x4] 1964 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16 1965 %r = extractvalue { i128, i1 } %pair, 0 1966 ret i128 %r 1967} 1968 1969define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1970; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak: 1971; -O0: ldaxp x0, x1, [x4] 1972; -O0: cmp x0, x9 1973; -O0: cmp x1, x10 1974; -O0: stxp w8, x2, x3, [x4] 1975; -O0: stxp w8, x0, x1, [x4] 1976; 1977; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak: 1978; -O1: ldaxp x8, x9, [x4] 1979; -O1: cmp x8, x0 1980; -O1: cmp x9, x1 1981; -O1: stxp w10, x8, x9, [x4] 1982; -O1: stxp w10, x2, x3, [x4] 1983 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16 1984 %r = extractvalue { i128, i1 } %pair, 0 1985 ret i128 %r 1986} 1987 1988define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) { 1989; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire: 1990; -O0: ldaxp x0, x1, [x4] 1991; -O0: cmp x0, x9 1992; -O0: cmp x1, x10 1993; -O0: stxp w8, x2, x3, [x4] 1994; -O0: stxp w8, x0, x1, [x4] 1995; 1996; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire: 1997; -O1: ldaxp x8, x9, [x4] 1998; -O1: cmp x8, x0 1999; -O1: cmp x9, x1 2000; -O1: stxp w10, x8, x9, [x4] 2001; -O1: stxp w10, x2, x3, [x4] 2002 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16 2003 %r = extractvalue { i128, i1 } %pair, 0 2004 ret i128 %r 2005} 2006 2007define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2008; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak: 2009; -O0: ldaxp x0, x1, [x4] 2010; -O0: cmp x0, x9 2011; -O0: cmp x1, x10 2012; -O0: stxp w8, x2, x3, [x4] 2013; -O0: stxp w8, x0, x1, [x4] 2014; 2015; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak: 2016; -O1: ldaxp x8, x9, [x4] 2017; -O1: cmp x8, x0 2018; -O1: cmp x9, x1 2019; -O1: stxp w10, x8, x9, [x4] 2020; -O1: stxp w10, x2, x3, [x4] 2021 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16 2022 %r = extractvalue { i128, i1 } %pair, 0 2023 ret i128 %r 2024} 2025 2026define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2027; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst: 2028; -O0: ldaxp x0, x1, [x4] 2029; -O0: cmp x0, x9 2030; -O0: cmp x1, x10 2031; -O0: stlxp w8, x2, x3, [x4] 2032; -O0: stlxp w8, x0, x1, [x4] 2033; 2034; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst: 2035; -O1: ldaxp x8, x9, [x4] 2036; -O1: cmp x8, x0 2037; -O1: cmp x9, x1 2038; -O1: stlxp w10, x8, x9, [x4] 2039; -O1: stlxp w10, x2, x3, [x4] 2040 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16 2041 %r = extractvalue { i128, i1 } %pair, 0 2042 ret i128 %r 2043} 2044 2045define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2046; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak: 2047; -O0: ldaxp x0, x1, [x4] 2048; -O0: cmp x0, x9 2049; -O0: cmp x1, x10 2050; -O0: stlxp w8, x2, x3, [x4] 2051; -O0: stlxp w8, x0, x1, [x4] 2052; 2053; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak: 2054; -O1: ldaxp x8, x9, [x4] 2055; -O1: cmp x8, x0 2056; -O1: cmp x9, x1 2057; -O1: stlxp w10, x8, x9, [x4] 2058; -O1: stlxp w10, x2, x3, [x4] 2059 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16 2060 %r = extractvalue { i128, i1 } %pair, 0 2061 ret i128 %r 2062} 2063 2064define dso_local i128 @cmpxchg_i128_aligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2065; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic: 2066; -O0: ldxp x0, x1, [x4] 2067; -O0: cmp x0, x9 2068; -O0: cmp x1, x10 2069; -O0: stlxp w8, x2, x3, [x4] 2070; -O0: stlxp w8, x0, x1, [x4] 2071; 2072; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic: 2073; -O1: ldxp x8, x9, [x4] 2074; -O1: cmp x8, x0 2075; -O1: cmp x9, x1 2076; -O1: stlxp w10, x8, x9, [x4] 2077; -O1: stlxp w10, x2, x3, [x4] 2078 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 16 2079 %r = extractvalue { i128, i1 } %pair, 0 2080 ret i128 %r 2081} 2082 2083define dso_local i128 @cmpxchg_i128_aligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2084; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic_weak: 2085; -O0: ldxp x0, x1, [x4] 2086; -O0: cmp x0, x9 2087; -O0: cmp x1, x10 2088; -O0: stlxp w8, x2, x3, [x4] 2089; -O0: stlxp w8, x0, x1, [x4] 2090; 2091; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic_weak: 2092; -O1: ldxp x8, x9, [x4] 2093; -O1: cmp x8, x0 2094; -O1: cmp x9, x1 2095; -O1: stlxp w10, x8, x9, [x4] 2096; -O1: stlxp w10, x2, x3, [x4] 2097 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 16 2098 %r = extractvalue { i128, i1 } %pair, 0 2099 ret i128 %r 2100} 2101 2102define dso_local i128 @cmpxchg_i128_aligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) { 2103; -O0-LABEL: cmpxchg_i128_aligned_release_acquire: 2104; -O0: ldaxp x0, x1, [x4] 2105; -O0: cmp x0, x9 2106; -O0: cmp x1, x10 2107; -O0: stlxp w8, x2, x3, [x4] 2108; -O0: stlxp w8, x0, x1, [x4] 2109; 2110; -O1-LABEL: cmpxchg_i128_aligned_release_acquire: 2111; -O1: ldaxp x8, x9, [x4] 2112; -O1: cmp x8, x0 2113; -O1: cmp x9, x1 2114; -O1: stlxp w10, x8, x9, [x4] 2115; -O1: stlxp w10, x2, x3, [x4] 2116 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 16 2117 %r = extractvalue { i128, i1 } %pair, 0 2118 ret i128 %r 2119} 2120 2121define dso_local i128 @cmpxchg_i128_aligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2122; -O0-LABEL: cmpxchg_i128_aligned_release_acquire_weak: 2123; -O0: ldaxp x0, x1, [x4] 2124; -O0: cmp x0, x9 2125; -O0: cmp x1, x10 2126; -O0: stlxp w8, x2, x3, [x4] 2127; -O0: stlxp w8, x0, x1, [x4] 2128; 2129; -O1-LABEL: cmpxchg_i128_aligned_release_acquire_weak: 2130; -O1: ldaxp x8, x9, [x4] 2131; -O1: cmp x8, x0 2132; -O1: cmp x9, x1 2133; -O1: stlxp w10, x8, x9, [x4] 2134; -O1: stlxp w10, x2, x3, [x4] 2135 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 16 2136 %r = extractvalue { i128, i1 } %pair, 0 2137 ret i128 %r 2138} 2139 2140define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2141; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst: 2142; -O0: ldaxp x0, x1, [x4] 2143; -O0: cmp x0, x9 2144; -O0: cmp x1, x10 2145; -O0: stlxp w8, x2, x3, [x4] 2146; -O0: stlxp w8, x0, x1, [x4] 2147; 2148; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst: 2149; -O1: ldaxp x8, x9, [x4] 2150; -O1: cmp x8, x0 2151; -O1: cmp x9, x1 2152; -O1: stlxp w10, x8, x9, [x4] 2153; -O1: stlxp w10, x2, x3, [x4] 2154 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16 2155 %r = extractvalue { i128, i1 } %pair, 0 2156 ret i128 %r 2157} 2158 2159define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2160; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak: 2161; -O0: ldaxp x0, x1, [x4] 2162; -O0: cmp x0, x9 2163; -O0: cmp x1, x10 2164; -O0: stlxp w8, x2, x3, [x4] 2165; -O0: stlxp w8, x0, x1, [x4] 2166; 2167; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak: 2168; -O1: ldaxp x8, x9, [x4] 2169; -O1: cmp x8, x0 2170; -O1: cmp x9, x1 2171; -O1: stlxp w10, x8, x9, [x4] 2172; -O1: stlxp w10, x2, x3, [x4] 2173 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16 2174 %r = extractvalue { i128, i1 } %pair, 0 2175 ret i128 %r 2176} 2177 2178define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2179; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic: 2180; -O0: ldaxp x0, x1, [x4] 2181; -O0: cmp x0, x9 2182; -O0: cmp x1, x10 2183; -O0: stlxp w8, x2, x3, [x4] 2184; -O0: stlxp w8, x0, x1, [x4] 2185; 2186; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic: 2187; -O1: ldaxp x8, x9, [x4] 2188; -O1: cmp x8, x0 2189; -O1: cmp x9, x1 2190; -O1: stlxp w10, x8, x9, [x4] 2191; -O1: stlxp w10, x2, x3, [x4] 2192 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16 2193 %r = extractvalue { i128, i1 } %pair, 0 2194 ret i128 %r 2195} 2196 2197define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2198; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak: 2199; -O0: ldaxp x0, x1, [x4] 2200; -O0: cmp x0, x9 2201; -O0: cmp x1, x10 2202; -O0: stlxp w8, x2, x3, [x4] 2203; -O0: stlxp w8, x0, x1, [x4] 2204; 2205; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak: 2206; -O1: ldaxp x8, x9, [x4] 2207; -O1: cmp x8, x0 2208; -O1: cmp x9, x1 2209; -O1: stlxp w10, x8, x9, [x4] 2210; -O1: stlxp w10, x2, x3, [x4] 2211 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16 2212 %r = extractvalue { i128, i1 } %pair, 0 2213 ret i128 %r 2214} 2215 2216define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) { 2217; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire: 2218; -O0: ldaxp x0, x1, [x4] 2219; -O0: cmp x0, x9 2220; -O0: cmp x1, x10 2221; -O0: stlxp w8, x2, x3, [x4] 2222; -O0: stlxp w8, x0, x1, [x4] 2223; 2224; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire: 2225; -O1: ldaxp x8, x9, [x4] 2226; -O1: cmp x8, x0 2227; -O1: cmp x9, x1 2228; -O1: stlxp w10, x8, x9, [x4] 2229; -O1: stlxp w10, x2, x3, [x4] 2230 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16 2231 %r = extractvalue { i128, i1 } %pair, 0 2232 ret i128 %r 2233} 2234 2235define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2236; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak: 2237; -O0: ldaxp x0, x1, [x4] 2238; -O0: cmp x0, x9 2239; -O0: cmp x1, x10 2240; -O0: stlxp w8, x2, x3, [x4] 2241; -O0: stlxp w8, x0, x1, [x4] 2242; 2243; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak: 2244; -O1: ldaxp x8, x9, [x4] 2245; -O1: cmp x8, x0 2246; -O1: cmp x9, x1 2247; -O1: stlxp w10, x8, x9, [x4] 2248; -O1: stlxp w10, x2, x3, [x4] 2249 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16 2250 %r = extractvalue { i128, i1 } %pair, 0 2251 ret i128 %r 2252} 2253 2254define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2255; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst: 2256; -O0: ldaxp x0, x1, [x4] 2257; -O0: cmp x0, x9 2258; -O0: cmp x1, x10 2259; -O0: stlxp w8, x2, x3, [x4] 2260; -O0: stlxp w8, x0, x1, [x4] 2261; 2262; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst: 2263; -O1: ldaxp x8, x9, [x4] 2264; -O1: cmp x8, x0 2265; -O1: cmp x9, x1 2266; -O1: stlxp w10, x8, x9, [x4] 2267; -O1: stlxp w10, x2, x3, [x4] 2268 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16 2269 %r = extractvalue { i128, i1 } %pair, 0 2270 ret i128 %r 2271} 2272 2273define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2274; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak: 2275; -O0: ldaxp x0, x1, [x4] 2276; -O0: cmp x0, x9 2277; -O0: cmp x1, x10 2278; -O0: stlxp w8, x2, x3, [x4] 2279; -O0: stlxp w8, x0, x1, [x4] 2280; 2281; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak: 2282; -O1: ldaxp x8, x9, [x4] 2283; -O1: cmp x8, x0 2284; -O1: cmp x9, x1 2285; -O1: stlxp w10, x8, x9, [x4] 2286; -O1: stlxp w10, x2, x3, [x4] 2287 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16 2288 %r = extractvalue { i128, i1 } %pair, 0 2289 ret i128 %r 2290} 2291 2292define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2293; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic: 2294; -O0: ldaxp x0, x1, [x4] 2295; -O0: cmp x0, x9 2296; -O0: cmp x1, x10 2297; -O0: stlxp w8, x2, x3, [x4] 2298; -O0: stlxp w8, x0, x1, [x4] 2299; 2300; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic: 2301; -O1: ldaxp x8, x9, [x4] 2302; -O1: cmp x8, x0 2303; -O1: cmp x9, x1 2304; -O1: stlxp w10, x8, x9, [x4] 2305; -O1: stlxp w10, x2, x3, [x4] 2306 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16 2307 %r = extractvalue { i128, i1 } %pair, 0 2308 ret i128 %r 2309} 2310 2311define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2312; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak: 2313; -O0: ldaxp x0, x1, [x4] 2314; -O0: cmp x0, x9 2315; -O0: cmp x1, x10 2316; -O0: stlxp w8, x2, x3, [x4] 2317; -O0: stlxp w8, x0, x1, [x4] 2318; 2319; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak: 2320; -O1: ldaxp x8, x9, [x4] 2321; -O1: cmp x8, x0 2322; -O1: cmp x9, x1 2323; -O1: stlxp w10, x8, x9, [x4] 2324; -O1: stlxp w10, x2, x3, [x4] 2325 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16 2326 %r = extractvalue { i128, i1 } %pair, 0 2327 ret i128 %r 2328} 2329 2330define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) { 2331; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire: 2332; -O0: ldaxp x0, x1, [x4] 2333; -O0: cmp x0, x9 2334; -O0: cmp x1, x10 2335; -O0: stlxp w8, x2, x3, [x4] 2336; -O0: stlxp w8, x0, x1, [x4] 2337; 2338; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire: 2339; -O1: ldaxp x8, x9, [x4] 2340; -O1: cmp x8, x0 2341; -O1: cmp x9, x1 2342; -O1: stlxp w10, x8, x9, [x4] 2343; -O1: stlxp w10, x2, x3, [x4] 2344 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16 2345 %r = extractvalue { i128, i1 } %pair, 0 2346 ret i128 %r 2347} 2348 2349define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2350; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak: 2351; -O0: ldaxp x0, x1, [x4] 2352; -O0: cmp x0, x9 2353; -O0: cmp x1, x10 2354; -O0: stlxp w8, x2, x3, [x4] 2355; -O0: stlxp w8, x0, x1, [x4] 2356; 2357; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak: 2358; -O1: ldaxp x8, x9, [x4] 2359; -O1: cmp x8, x0 2360; -O1: cmp x9, x1 2361; -O1: stlxp w10, x8, x9, [x4] 2362; -O1: stlxp w10, x2, x3, [x4] 2363 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16 2364 %r = extractvalue { i128, i1 } %pair, 0 2365 ret i128 %r 2366} 2367 2368define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2369; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst: 2370; -O0: ldaxp x0, x1, [x4] 2371; -O0: cmp x0, x9 2372; -O0: cmp x1, x10 2373; -O0: stlxp w8, x2, x3, [x4] 2374; -O0: stlxp w8, x0, x1, [x4] 2375; 2376; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst: 2377; -O1: ldaxp x8, x9, [x4] 2378; -O1: cmp x8, x0 2379; -O1: cmp x9, x1 2380; -O1: stlxp w10, x8, x9, [x4] 2381; -O1: stlxp w10, x2, x3, [x4] 2382 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16 2383 %r = extractvalue { i128, i1 } %pair, 0 2384 ret i128 %r 2385} 2386 2387define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2388; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak: 2389; -O0: ldaxp x0, x1, [x4] 2390; -O0: cmp x0, x9 2391; -O0: cmp x1, x10 2392; -O0: stlxp w8, x2, x3, [x4] 2393; -O0: stlxp w8, x0, x1, [x4] 2394; 2395; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak: 2396; -O1: ldaxp x8, x9, [x4] 2397; -O1: cmp x8, x0 2398; -O1: cmp x9, x1 2399; -O1: stlxp w10, x8, x9, [x4] 2400; -O1: stlxp w10, x2, x3, [x4] 2401 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16 2402 %r = extractvalue { i128, i1 } %pair, 0 2403 ret i128 %r 2404} 2405 2406define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) { 2407; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic: 2408; -O0: ldaxrb w0, [x2] 2409; -O0: cmp w0, w9, uxtb 2410; -O0: stlxrb w8, w1, [x2] 2411; 2412; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic: 2413; -O1: and w8, w0, #0xff 2414; -O1: ldxrb w0, [x2] 2415; -O1: cmp w0, w8 2416; -O1: stxrb w9, w1, [x2] 2417 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1 2418 %r = extractvalue { i8, i1 } %pair, 0 2419 ret i8 %r 2420} 2421 2422define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 2423; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak: 2424; -O0: ldaxrb w0, [x2] 2425; -O0: cmp w0, w9, uxtb 2426; -O0: stlxrb w8, w1, [x2] 2427; 2428; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak: 2429; -O1: ldxrb w8, [x2] 2430; -O1: cmp w8, w0, uxtb 2431; -O1: stxrb wzr, w1, [x2] 2432 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1 2433 %r = extractvalue { i8, i1 } %pair, 0 2434 ret i8 %r 2435} 2436 2437define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) { 2438; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_acquire: 2439; -O0: ldaxrb w0, [x2] 2440; -O0: cmp w0, w9, uxtb 2441; -O0: stlxrb w8, w1, [x2] 2442; 2443; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_acquire: 2444; -O1: and w8, w0, #0xff 2445; -O1: ldaxrb w0, [x2] 2446; -O1: cmp w0, w8 2447; -O1: stxrb w9, w1, [x2] 2448 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 2449 %r = extractvalue { i8, i1 } %pair, 0 2450 ret i8 %r 2451} 2452 2453define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 2454; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak: 2455; -O0: ldaxrb w0, [x2] 2456; -O0: cmp w0, w9, uxtb 2457; -O0: stlxrb w8, w1, [x2] 2458; 2459; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak: 2460; -O1: ldaxrb w8, [x2] 2461; -O1: cmp w8, w0, uxtb 2462; -O1: stxrb wzr, w1, [x2] 2463 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 2464 %r = extractvalue { i8, i1 } %pair, 0 2465 ret i8 %r 2466} 2467 2468define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 2469; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst: 2470; -O0: ldaxrb w0, [x2] 2471; -O0: cmp w0, w9, uxtb 2472; -O0: stlxrb w8, w1, [x2] 2473; 2474; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst: 2475; -O1: and w8, w0, #0xff 2476; -O1: ldaxrb w0, [x2] 2477; -O1: cmp w0, w8 2478; -O1: stlxrb w9, w1, [x2] 2479 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 2480 %r = extractvalue { i8, i1 } %pair, 0 2481 ret i8 %r 2482} 2483 2484define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 2485; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak: 2486; -O0: ldaxrb w0, [x2] 2487; -O0: cmp w0, w9, uxtb 2488; -O0: stlxrb w8, w1, [x2] 2489; 2490; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak: 2491; -O1: ldaxrb w8, [x2] 2492; -O1: cmp w8, w0, uxtb 2493; -O1: stlxrb wzr, w1, [x2] 2494 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 2495 %r = extractvalue { i8, i1 } %pair, 0 2496 ret i8 %r 2497} 2498 2499define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) { 2500; -O0-LABEL: cmpxchg_i8_unaligned_acquire_monotonic: 2501; -O0: ldaxrb w0, [x2] 2502; -O0: cmp w0, w9, uxtb 2503; -O0: stlxrb w8, w1, [x2] 2504; 2505; -O1-LABEL: cmpxchg_i8_unaligned_acquire_monotonic: 2506; -O1: and w8, w0, #0xff 2507; -O1: ldaxrb w0, [x2] 2508; -O1: cmp w0, w8 2509; -O1: stxrb w9, w1, [x2] 2510 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 2511 %r = extractvalue { i8, i1 } %pair, 0 2512 ret i8 %r 2513} 2514 2515define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 2516; -O0-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak: 2517; -O0: ldaxrb w0, [x2] 2518; -O0: cmp w0, w9, uxtb 2519; -O0: stlxrb w8, w1, [x2] 2520; 2521; -O1-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak: 2522; -O1: ldaxrb w8, [x2] 2523; -O1: cmp w8, w0, uxtb 2524; -O1: stxrb wzr, w1, [x2] 2525 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 2526 %r = extractvalue { i8, i1 } %pair, 0 2527 ret i8 %r 2528} 2529 2530define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) { 2531; -O0-LABEL: cmpxchg_i8_unaligned_acquire_acquire: 2532; -O0: ldaxrb w0, [x2] 2533; -O0: cmp w0, w9, uxtb 2534; -O0: stlxrb w8, w1, [x2] 2535; 2536; -O1-LABEL: cmpxchg_i8_unaligned_acquire_acquire: 2537; -O1: and w8, w0, #0xff 2538; -O1: ldaxrb w0, [x2] 2539; -O1: cmp w0, w8 2540; -O1: stxrb w9, w1, [x2] 2541 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 2542 %r = extractvalue { i8, i1 } %pair, 0 2543 ret i8 %r 2544} 2545 2546define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 2547; -O0-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak: 2548; -O0: ldaxrb w0, [x2] 2549; -O0: cmp w0, w9, uxtb 2550; -O0: stlxrb w8, w1, [x2] 2551; 2552; -O1-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak: 2553; -O1: ldaxrb w8, [x2] 2554; -O1: cmp w8, w0, uxtb 2555; -O1: stxrb wzr, w1, [x2] 2556 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 2557 %r = extractvalue { i8, i1 } %pair, 0 2558 ret i8 %r 2559} 2560 2561define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 2562; -O0-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst: 2563; -O0: ldaxrb w0, [x2] 2564; -O0: cmp w0, w9, uxtb 2565; -O0: stlxrb w8, w1, [x2] 2566; 2567; -O1-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst: 2568; -O1: and w8, w0, #0xff 2569; -O1: ldaxrb w0, [x2] 2570; -O1: cmp w0, w8 2571; -O1: stlxrb w9, w1, [x2] 2572 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 2573 %r = extractvalue { i8, i1 } %pair, 0 2574 ret i8 %r 2575} 2576 2577define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 2578; -O0-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak: 2579; -O0: ldaxrb w0, [x2] 2580; -O0: cmp w0, w9, uxtb 2581; -O0: stlxrb w8, w1, [x2] 2582; 2583; -O1-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak: 2584; -O1: ldaxrb w8, [x2] 2585; -O1: cmp w8, w0, uxtb 2586; -O1: stlxrb wzr, w1, [x2] 2587 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 2588 %r = extractvalue { i8, i1 } %pair, 0 2589 ret i8 %r 2590} 2591 2592define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) { 2593; -O0-LABEL: cmpxchg_i8_unaligned_release_monotonic: 2594; -O0: ldaxrb w0, [x2] 2595; -O0: cmp w0, w9, uxtb 2596; -O0: stlxrb w8, w1, [x2] 2597; 2598; -O1-LABEL: cmpxchg_i8_unaligned_release_monotonic: 2599; -O1: and w8, w0, #0xff 2600; -O1: ldxrb w0, [x2] 2601; -O1: cmp w0, w8 2602; -O1: stlxrb w9, w1, [x2] 2603 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 2604 %r = extractvalue { i8, i1 } %pair, 0 2605 ret i8 %r 2606} 2607 2608define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 2609; -O0-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak: 2610; -O0: ldaxrb w0, [x2] 2611; -O0: cmp w0, w9, uxtb 2612; -O0: stlxrb w8, w1, [x2] 2613; 2614; -O1-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak: 2615; -O1: ldxrb w8, [x2] 2616; -O1: cmp w8, w0, uxtb 2617; -O1: stlxrb wzr, w1, [x2] 2618 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 2619 %r = extractvalue { i8, i1 } %pair, 0 2620 ret i8 %r 2621} 2622 2623define dso_local i8 @cmpxchg_i8_unaligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) { 2624; -O0-LABEL: cmpxchg_i8_unaligned_release_acquire: 2625; -O0: ldaxrb w0, [x2] 2626; -O0: cmp w0, w9, uxtb 2627; -O0: stlxrb w8, w1, [x2] 2628; 2629; -O1-LABEL: cmpxchg_i8_unaligned_release_acquire: 2630; -O1: and w8, w0, #0xff 2631; -O1: ldaxrb w0, [x2] 2632; -O1: cmp w0, w8 2633; -O1: stlxrb w9, w1, [x2] 2634 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1 2635 %r = extractvalue { i8, i1 } %pair, 0 2636 ret i8 %r 2637} 2638 2639define dso_local i8 @cmpxchg_i8_unaligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 2640; -O0-LABEL: cmpxchg_i8_unaligned_release_acquire_weak: 2641; -O0: ldaxrb w0, [x2] 2642; -O0: cmp w0, w9, uxtb 2643; -O0: stlxrb w8, w1, [x2] 2644; 2645; -O1-LABEL: cmpxchg_i8_unaligned_release_acquire_weak: 2646; -O1: ldaxrb w8, [x2] 2647; -O1: cmp w8, w0, uxtb 2648; -O1: stlxrb wzr, w1, [x2] 2649 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1 2650 %r = extractvalue { i8, i1 } %pair, 0 2651 ret i8 %r 2652} 2653 2654define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 2655; -O0-LABEL: cmpxchg_i8_unaligned_release_seq_cst: 2656; -O0: ldaxrb w0, [x2] 2657; -O0: cmp w0, w9, uxtb 2658; -O0: stlxrb w8, w1, [x2] 2659; 2660; -O1-LABEL: cmpxchg_i8_unaligned_release_seq_cst: 2661; -O1: and w8, w0, #0xff 2662; -O1: ldaxrb w0, [x2] 2663; -O1: cmp w0, w8 2664; -O1: stlxrb w9, w1, [x2] 2665 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 2666 %r = extractvalue { i8, i1 } %pair, 0 2667 ret i8 %r 2668} 2669 2670define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 2671; -O0-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak: 2672; -O0: ldaxrb w0, [x2] 2673; -O0: cmp w0, w9, uxtb 2674; -O0: stlxrb w8, w1, [x2] 2675; 2676; -O1-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak: 2677; -O1: ldaxrb w8, [x2] 2678; -O1: cmp w8, w0, uxtb 2679; -O1: stlxrb wzr, w1, [x2] 2680 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 2681 %r = extractvalue { i8, i1 } %pair, 0 2682 ret i8 %r 2683} 2684 2685define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) { 2686; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic: 2687; -O0: ldaxrb w0, [x2] 2688; -O0: cmp w0, w9, uxtb 2689; -O0: stlxrb w8, w1, [x2] 2690; 2691; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic: 2692; -O1: and w8, w0, #0xff 2693; -O1: ldaxrb w0, [x2] 2694; -O1: cmp w0, w8 2695; -O1: stlxrb w9, w1, [x2] 2696 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 2697 %r = extractvalue { i8, i1 } %pair, 0 2698 ret i8 %r 2699} 2700 2701define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 2702; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak: 2703; -O0: ldaxrb w0, [x2] 2704; -O0: cmp w0, w9, uxtb 2705; -O0: stlxrb w8, w1, [x2] 2706; 2707; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak: 2708; -O1: ldaxrb w8, [x2] 2709; -O1: cmp w8, w0, uxtb 2710; -O1: stlxrb wzr, w1, [x2] 2711 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 2712 %r = extractvalue { i8, i1 } %pair, 0 2713 ret i8 %r 2714} 2715 2716define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) { 2717; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire: 2718; -O0: ldaxrb w0, [x2] 2719; -O0: cmp w0, w9, uxtb 2720; -O0: stlxrb w8, w1, [x2] 2721; 2722; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire: 2723; -O1: and w8, w0, #0xff 2724; -O1: ldaxrb w0, [x2] 2725; -O1: cmp w0, w8 2726; -O1: stlxrb w9, w1, [x2] 2727 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 2728 %r = extractvalue { i8, i1 } %pair, 0 2729 ret i8 %r 2730} 2731 2732define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 2733; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak: 2734; -O0: ldaxrb w0, [x2] 2735; -O0: cmp w0, w9, uxtb 2736; -O0: stlxrb w8, w1, [x2] 2737; 2738; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak: 2739; -O1: ldaxrb w8, [x2] 2740; -O1: cmp w8, w0, uxtb 2741; -O1: stlxrb wzr, w1, [x2] 2742 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 2743 %r = extractvalue { i8, i1 } %pair, 0 2744 ret i8 %r 2745} 2746 2747define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 2748; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst: 2749; -O0: ldaxrb w0, [x2] 2750; -O0: cmp w0, w9, uxtb 2751; -O0: stlxrb w8, w1, [x2] 2752; 2753; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst: 2754; -O1: and w8, w0, #0xff 2755; -O1: ldaxrb w0, [x2] 2756; -O1: cmp w0, w8 2757; -O1: stlxrb w9, w1, [x2] 2758 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 2759 %r = extractvalue { i8, i1 } %pair, 0 2760 ret i8 %r 2761} 2762 2763define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 2764; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak: 2765; -O0: ldaxrb w0, [x2] 2766; -O0: cmp w0, w9, uxtb 2767; -O0: stlxrb w8, w1, [x2] 2768; 2769; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak: 2770; -O1: ldaxrb w8, [x2] 2771; -O1: cmp w8, w0, uxtb 2772; -O1: stlxrb wzr, w1, [x2] 2773 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 2774 %r = extractvalue { i8, i1 } %pair, 0 2775 ret i8 %r 2776} 2777 2778define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) { 2779; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic: 2780; -O0: ldaxrb w0, [x2] 2781; -O0: cmp w0, w9, uxtb 2782; -O0: stlxrb w8, w1, [x2] 2783; 2784; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic: 2785; -O1: and w8, w0, #0xff 2786; -O1: ldaxrb w0, [x2] 2787; -O1: cmp w0, w8 2788; -O1: stlxrb w9, w1, [x2] 2789 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 2790 %r = extractvalue { i8, i1 } %pair, 0 2791 ret i8 %r 2792} 2793 2794define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 2795; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak: 2796; -O0: ldaxrb w0, [x2] 2797; -O0: cmp w0, w9, uxtb 2798; -O0: stlxrb w8, w1, [x2] 2799; 2800; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak: 2801; -O1: ldaxrb w8, [x2] 2802; -O1: cmp w8, w0, uxtb 2803; -O1: stlxrb wzr, w1, [x2] 2804 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 2805 %r = extractvalue { i8, i1 } %pair, 0 2806 ret i8 %r 2807} 2808 2809define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) { 2810; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire: 2811; -O0: ldaxrb w0, [x2] 2812; -O0: cmp w0, w9, uxtb 2813; -O0: stlxrb w8, w1, [x2] 2814; 2815; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire: 2816; -O1: and w8, w0, #0xff 2817; -O1: ldaxrb w0, [x2] 2818; -O1: cmp w0, w8 2819; -O1: stlxrb w9, w1, [x2] 2820 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 2821 %r = extractvalue { i8, i1 } %pair, 0 2822 ret i8 %r 2823} 2824 2825define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 2826; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak: 2827; -O0: ldaxrb w0, [x2] 2828; -O0: cmp w0, w9, uxtb 2829; -O0: stlxrb w8, w1, [x2] 2830; 2831; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak: 2832; -O1: ldaxrb w8, [x2] 2833; -O1: cmp w8, w0, uxtb 2834; -O1: stlxrb wzr, w1, [x2] 2835 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 2836 %r = extractvalue { i8, i1 } %pair, 0 2837 ret i8 %r 2838} 2839 2840define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 2841; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst: 2842; -O0: ldaxrb w0, [x2] 2843; -O0: cmp w0, w9, uxtb 2844; -O0: stlxrb w8, w1, [x2] 2845; 2846; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst: 2847; -O1: and w8, w0, #0xff 2848; -O1: ldaxrb w0, [x2] 2849; -O1: cmp w0, w8 2850; -O1: stlxrb w9, w1, [x2] 2851 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 2852 %r = extractvalue { i8, i1 } %pair, 0 2853 ret i8 %r 2854} 2855 2856define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 2857; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak: 2858; -O0: ldaxrb w0, [x2] 2859; -O0: cmp w0, w9, uxtb 2860; -O0: stlxrb w8, w1, [x2] 2861; 2862; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak: 2863; -O1: ldaxrb w8, [x2] 2864; -O1: cmp w8, w0, uxtb 2865; -O1: stlxrb wzr, w1, [x2] 2866 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 2867 %r = extractvalue { i8, i1 } %pair, 0 2868 ret i8 %r 2869} 2870 2871define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) { 2872; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic: 2873; CHECK: bl __atomic_compare_exchange 2874 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1 2875 %r = extractvalue { i16, i1 } %pair, 0 2876 ret i16 %r 2877} 2878 2879define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 2880; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic_weak: 2881; CHECK: bl __atomic_compare_exchange 2882 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1 2883 %r = extractvalue { i16, i1 } %pair, 0 2884 ret i16 %r 2885} 2886 2887define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) { 2888; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire: 2889; CHECK: bl __atomic_compare_exchange 2890 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1 2891 %r = extractvalue { i16, i1 } %pair, 0 2892 ret i16 %r 2893} 2894 2895define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 2896; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire_weak: 2897; CHECK: bl __atomic_compare_exchange 2898 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1 2899 %r = extractvalue { i16, i1 } %pair, 0 2900 ret i16 %r 2901} 2902 2903define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 2904; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst: 2905; CHECK: bl __atomic_compare_exchange 2906 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1 2907 %r = extractvalue { i16, i1 } %pair, 0 2908 ret i16 %r 2909} 2910 2911define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 2912; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst_weak: 2913; CHECK: bl __atomic_compare_exchange 2914 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1 2915 %r = extractvalue { i16, i1 } %pair, 0 2916 ret i16 %r 2917} 2918 2919define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) { 2920; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic: 2921; CHECK: bl __atomic_compare_exchange 2922 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1 2923 %r = extractvalue { i16, i1 } %pair, 0 2924 ret i16 %r 2925} 2926 2927define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 2928; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic_weak: 2929; CHECK: bl __atomic_compare_exchange 2930 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1 2931 %r = extractvalue { i16, i1 } %pair, 0 2932 ret i16 %r 2933} 2934 2935define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) { 2936; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire: 2937; CHECK: bl __atomic_compare_exchange 2938 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1 2939 %r = extractvalue { i16, i1 } %pair, 0 2940 ret i16 %r 2941} 2942 2943define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 2944; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire_weak: 2945; CHECK: bl __atomic_compare_exchange 2946 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1 2947 %r = extractvalue { i16, i1 } %pair, 0 2948 ret i16 %r 2949} 2950 2951define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 2952; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst: 2953; CHECK: bl __atomic_compare_exchange 2954 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1 2955 %r = extractvalue { i16, i1 } %pair, 0 2956 ret i16 %r 2957} 2958 2959define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 2960; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst_weak: 2961; CHECK: bl __atomic_compare_exchange 2962 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1 2963 %r = extractvalue { i16, i1 } %pair, 0 2964 ret i16 %r 2965} 2966 2967define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) { 2968; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic: 2969; CHECK: bl __atomic_compare_exchange 2970 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 1 2971 %r = extractvalue { i16, i1 } %pair, 0 2972 ret i16 %r 2973} 2974 2975define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 2976; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic_weak: 2977; CHECK: bl __atomic_compare_exchange 2978 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 1 2979 %r = extractvalue { i16, i1 } %pair, 0 2980 ret i16 %r 2981} 2982 2983define dso_local i16 @cmpxchg_i16_unaligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) { 2984; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire: 2985; CHECK: bl __atomic_compare_exchange 2986 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 1 2987 %r = extractvalue { i16, i1 } %pair, 0 2988 ret i16 %r 2989} 2990 2991define dso_local i16 @cmpxchg_i16_unaligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 2992; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire_weak: 2993; CHECK: bl __atomic_compare_exchange 2994 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 1 2995 %r = extractvalue { i16, i1 } %pair, 0 2996 ret i16 %r 2997} 2998 2999define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 3000; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst: 3001; CHECK: bl __atomic_compare_exchange 3002 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1 3003 %r = extractvalue { i16, i1 } %pair, 0 3004 ret i16 %r 3005} 3006 3007define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 3008; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst_weak: 3009; CHECK: bl __atomic_compare_exchange 3010 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1 3011 %r = extractvalue { i16, i1 } %pair, 0 3012 ret i16 %r 3013} 3014 3015define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) { 3016; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic: 3017; CHECK: bl __atomic_compare_exchange 3018 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1 3019 %r = extractvalue { i16, i1 } %pair, 0 3020 ret i16 %r 3021} 3022 3023define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 3024; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic_weak: 3025; CHECK: bl __atomic_compare_exchange 3026 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1 3027 %r = extractvalue { i16, i1 } %pair, 0 3028 ret i16 %r 3029} 3030 3031define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) { 3032; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire: 3033; CHECK: bl __atomic_compare_exchange 3034 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1 3035 %r = extractvalue { i16, i1 } %pair, 0 3036 ret i16 %r 3037} 3038 3039define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 3040; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire_weak: 3041; CHECK: bl __atomic_compare_exchange 3042 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1 3043 %r = extractvalue { i16, i1 } %pair, 0 3044 ret i16 %r 3045} 3046 3047define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 3048; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst: 3049; CHECK: bl __atomic_compare_exchange 3050 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1 3051 %r = extractvalue { i16, i1 } %pair, 0 3052 ret i16 %r 3053} 3054 3055define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 3056; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst_weak: 3057; CHECK: bl __atomic_compare_exchange 3058 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1 3059 %r = extractvalue { i16, i1 } %pair, 0 3060 ret i16 %r 3061} 3062 3063define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) { 3064; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic: 3065; CHECK: bl __atomic_compare_exchange 3066 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1 3067 %r = extractvalue { i16, i1 } %pair, 0 3068 ret i16 %r 3069} 3070 3071define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 3072; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic_weak: 3073; CHECK: bl __atomic_compare_exchange 3074 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1 3075 %r = extractvalue { i16, i1 } %pair, 0 3076 ret i16 %r 3077} 3078 3079define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) { 3080; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire: 3081; CHECK: bl __atomic_compare_exchange 3082 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1 3083 %r = extractvalue { i16, i1 } %pair, 0 3084 ret i16 %r 3085} 3086 3087define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 3088; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire_weak: 3089; CHECK: bl __atomic_compare_exchange 3090 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1 3091 %r = extractvalue { i16, i1 } %pair, 0 3092 ret i16 %r 3093} 3094 3095define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 3096; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst: 3097; CHECK: bl __atomic_compare_exchange 3098 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1 3099 %r = extractvalue { i16, i1 } %pair, 0 3100 ret i16 %r 3101} 3102 3103define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 3104; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst_weak: 3105; CHECK: bl __atomic_compare_exchange 3106 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1 3107 %r = extractvalue { i16, i1 } %pair, 0 3108 ret i16 %r 3109} 3110 3111define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) { 3112; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic: 3113; CHECK: bl __atomic_compare_exchange 3114 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1 3115 %r = extractvalue { i32, i1 } %pair, 0 3116 ret i32 %r 3117} 3118 3119define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 3120; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic_weak: 3121; CHECK: bl __atomic_compare_exchange 3122 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1 3123 %r = extractvalue { i32, i1 } %pair, 0 3124 ret i32 %r 3125} 3126 3127define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) { 3128; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire: 3129; CHECK: bl __atomic_compare_exchange 3130 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1 3131 %r = extractvalue { i32, i1 } %pair, 0 3132 ret i32 %r 3133} 3134 3135define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 3136; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire_weak: 3137; CHECK: bl __atomic_compare_exchange 3138 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1 3139 %r = extractvalue { i32, i1 } %pair, 0 3140 ret i32 %r 3141} 3142 3143define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 3144; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst: 3145; CHECK: bl __atomic_compare_exchange 3146 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1 3147 %r = extractvalue { i32, i1 } %pair, 0 3148 ret i32 %r 3149} 3150 3151define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 3152; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst_weak: 3153; CHECK: bl __atomic_compare_exchange 3154 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1 3155 %r = extractvalue { i32, i1 } %pair, 0 3156 ret i32 %r 3157} 3158 3159define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) { 3160; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic: 3161; CHECK: bl __atomic_compare_exchange 3162 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1 3163 %r = extractvalue { i32, i1 } %pair, 0 3164 ret i32 %r 3165} 3166 3167define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 3168; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic_weak: 3169; CHECK: bl __atomic_compare_exchange 3170 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1 3171 %r = extractvalue { i32, i1 } %pair, 0 3172 ret i32 %r 3173} 3174 3175define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) { 3176; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire: 3177; CHECK: bl __atomic_compare_exchange 3178 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1 3179 %r = extractvalue { i32, i1 } %pair, 0 3180 ret i32 %r 3181} 3182 3183define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 3184; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire_weak: 3185; CHECK: bl __atomic_compare_exchange 3186 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1 3187 %r = extractvalue { i32, i1 } %pair, 0 3188 ret i32 %r 3189} 3190 3191define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 3192; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst: 3193; CHECK: bl __atomic_compare_exchange 3194 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1 3195 %r = extractvalue { i32, i1 } %pair, 0 3196 ret i32 %r 3197} 3198 3199define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 3200; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst_weak: 3201; CHECK: bl __atomic_compare_exchange 3202 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1 3203 %r = extractvalue { i32, i1 } %pair, 0 3204 ret i32 %r 3205} 3206 3207define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) { 3208; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic: 3209; CHECK: bl __atomic_compare_exchange 3210 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 1 3211 %r = extractvalue { i32, i1 } %pair, 0 3212 ret i32 %r 3213} 3214 3215define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 3216; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic_weak: 3217; CHECK: bl __atomic_compare_exchange 3218 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 1 3219 %r = extractvalue { i32, i1 } %pair, 0 3220 ret i32 %r 3221} 3222 3223define dso_local i32 @cmpxchg_i32_unaligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) { 3224; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire: 3225; CHECK: bl __atomic_compare_exchange 3226 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 1 3227 %r = extractvalue { i32, i1 } %pair, 0 3228 ret i32 %r 3229} 3230 3231define dso_local i32 @cmpxchg_i32_unaligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 3232; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire_weak: 3233; CHECK: bl __atomic_compare_exchange 3234 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 1 3235 %r = extractvalue { i32, i1 } %pair, 0 3236 ret i32 %r 3237} 3238 3239define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 3240; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst: 3241; CHECK: bl __atomic_compare_exchange 3242 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1 3243 %r = extractvalue { i32, i1 } %pair, 0 3244 ret i32 %r 3245} 3246 3247define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 3248; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst_weak: 3249; CHECK: bl __atomic_compare_exchange 3250 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1 3251 %r = extractvalue { i32, i1 } %pair, 0 3252 ret i32 %r 3253} 3254 3255define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) { 3256; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic: 3257; CHECK: bl __atomic_compare_exchange 3258 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1 3259 %r = extractvalue { i32, i1 } %pair, 0 3260 ret i32 %r 3261} 3262 3263define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 3264; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic_weak: 3265; CHECK: bl __atomic_compare_exchange 3266 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1 3267 %r = extractvalue { i32, i1 } %pair, 0 3268 ret i32 %r 3269} 3270 3271define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) { 3272; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire: 3273; CHECK: bl __atomic_compare_exchange 3274 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1 3275 %r = extractvalue { i32, i1 } %pair, 0 3276 ret i32 %r 3277} 3278 3279define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 3280; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire_weak: 3281; CHECK: bl __atomic_compare_exchange 3282 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1 3283 %r = extractvalue { i32, i1 } %pair, 0 3284 ret i32 %r 3285} 3286 3287define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 3288; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst: 3289; CHECK: bl __atomic_compare_exchange 3290 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1 3291 %r = extractvalue { i32, i1 } %pair, 0 3292 ret i32 %r 3293} 3294 3295define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 3296; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst_weak: 3297; CHECK: bl __atomic_compare_exchange 3298 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1 3299 %r = extractvalue { i32, i1 } %pair, 0 3300 ret i32 %r 3301} 3302 3303define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) { 3304; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic: 3305; CHECK: bl __atomic_compare_exchange 3306 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1 3307 %r = extractvalue { i32, i1 } %pair, 0 3308 ret i32 %r 3309} 3310 3311define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 3312; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic_weak: 3313; CHECK: bl __atomic_compare_exchange 3314 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1 3315 %r = extractvalue { i32, i1 } %pair, 0 3316 ret i32 %r 3317} 3318 3319define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) { 3320; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire: 3321; CHECK: bl __atomic_compare_exchange 3322 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1 3323 %r = extractvalue { i32, i1 } %pair, 0 3324 ret i32 %r 3325} 3326 3327define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 3328; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire_weak: 3329; CHECK: bl __atomic_compare_exchange 3330 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1 3331 %r = extractvalue { i32, i1 } %pair, 0 3332 ret i32 %r 3333} 3334 3335define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 3336; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst: 3337; CHECK: bl __atomic_compare_exchange 3338 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1 3339 %r = extractvalue { i32, i1 } %pair, 0 3340 ret i32 %r 3341} 3342 3343define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 3344; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst_weak: 3345; CHECK: bl __atomic_compare_exchange 3346 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1 3347 %r = extractvalue { i32, i1 } %pair, 0 3348 ret i32 %r 3349} 3350 3351define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) { 3352; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic: 3353; CHECK: bl __atomic_compare_exchange 3354 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1 3355 %r = extractvalue { i64, i1 } %pair, 0 3356 ret i64 %r 3357} 3358 3359define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 3360; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic_weak: 3361; CHECK: bl __atomic_compare_exchange 3362 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1 3363 %r = extractvalue { i64, i1 } %pair, 0 3364 ret i64 %r 3365} 3366 3367define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) { 3368; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire: 3369; CHECK: bl __atomic_compare_exchange 3370 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1 3371 %r = extractvalue { i64, i1 } %pair, 0 3372 ret i64 %r 3373} 3374 3375define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 3376; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire_weak: 3377; CHECK: bl __atomic_compare_exchange 3378 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1 3379 %r = extractvalue { i64, i1 } %pair, 0 3380 ret i64 %r 3381} 3382 3383define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 3384; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst: 3385; CHECK: bl __atomic_compare_exchange 3386 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1 3387 %r = extractvalue { i64, i1 } %pair, 0 3388 ret i64 %r 3389} 3390 3391define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 3392; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst_weak: 3393; CHECK: bl __atomic_compare_exchange 3394 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1 3395 %r = extractvalue { i64, i1 } %pair, 0 3396 ret i64 %r 3397} 3398 3399define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) { 3400; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic: 3401; CHECK: bl __atomic_compare_exchange 3402 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1 3403 %r = extractvalue { i64, i1 } %pair, 0 3404 ret i64 %r 3405} 3406 3407define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 3408; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic_weak: 3409; CHECK: bl __atomic_compare_exchange 3410 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1 3411 %r = extractvalue { i64, i1 } %pair, 0 3412 ret i64 %r 3413} 3414 3415define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) { 3416; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire: 3417; CHECK: bl __atomic_compare_exchange 3418 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1 3419 %r = extractvalue { i64, i1 } %pair, 0 3420 ret i64 %r 3421} 3422 3423define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 3424; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire_weak: 3425; CHECK: bl __atomic_compare_exchange 3426 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1 3427 %r = extractvalue { i64, i1 } %pair, 0 3428 ret i64 %r 3429} 3430 3431define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 3432; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst: 3433; CHECK: bl __atomic_compare_exchange 3434 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1 3435 %r = extractvalue { i64, i1 } %pair, 0 3436 ret i64 %r 3437} 3438 3439define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 3440; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst_weak: 3441; CHECK: bl __atomic_compare_exchange 3442 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1 3443 %r = extractvalue { i64, i1 } %pair, 0 3444 ret i64 %r 3445} 3446 3447define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) { 3448; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic: 3449; CHECK: bl __atomic_compare_exchange 3450 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 1 3451 %r = extractvalue { i64, i1 } %pair, 0 3452 ret i64 %r 3453} 3454 3455define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 3456; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic_weak: 3457; CHECK: bl __atomic_compare_exchange 3458 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 1 3459 %r = extractvalue { i64, i1 } %pair, 0 3460 ret i64 %r 3461} 3462 3463define dso_local i64 @cmpxchg_i64_unaligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) { 3464; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire: 3465; CHECK: bl __atomic_compare_exchange 3466 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 1 3467 %r = extractvalue { i64, i1 } %pair, 0 3468 ret i64 %r 3469} 3470 3471define dso_local i64 @cmpxchg_i64_unaligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 3472; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire_weak: 3473; CHECK: bl __atomic_compare_exchange 3474 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 1 3475 %r = extractvalue { i64, i1 } %pair, 0 3476 ret i64 %r 3477} 3478 3479define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 3480; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst: 3481; CHECK: bl __atomic_compare_exchange 3482 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1 3483 %r = extractvalue { i64, i1 } %pair, 0 3484 ret i64 %r 3485} 3486 3487define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 3488; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst_weak: 3489; CHECK: bl __atomic_compare_exchange 3490 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1 3491 %r = extractvalue { i64, i1 } %pair, 0 3492 ret i64 %r 3493} 3494 3495define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) { 3496; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic: 3497; CHECK: bl __atomic_compare_exchange 3498 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1 3499 %r = extractvalue { i64, i1 } %pair, 0 3500 ret i64 %r 3501} 3502 3503define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 3504; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic_weak: 3505; CHECK: bl __atomic_compare_exchange 3506 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1 3507 %r = extractvalue { i64, i1 } %pair, 0 3508 ret i64 %r 3509} 3510 3511define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) { 3512; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire: 3513; CHECK: bl __atomic_compare_exchange 3514 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1 3515 %r = extractvalue { i64, i1 } %pair, 0 3516 ret i64 %r 3517} 3518 3519define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 3520; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire_weak: 3521; CHECK: bl __atomic_compare_exchange 3522 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1 3523 %r = extractvalue { i64, i1 } %pair, 0 3524 ret i64 %r 3525} 3526 3527define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 3528; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst: 3529; CHECK: bl __atomic_compare_exchange 3530 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1 3531 %r = extractvalue { i64, i1 } %pair, 0 3532 ret i64 %r 3533} 3534 3535define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 3536; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst_weak: 3537; CHECK: bl __atomic_compare_exchange 3538 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1 3539 %r = extractvalue { i64, i1 } %pair, 0 3540 ret i64 %r 3541} 3542 3543define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) { 3544; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic: 3545; CHECK: bl __atomic_compare_exchange 3546 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1 3547 %r = extractvalue { i64, i1 } %pair, 0 3548 ret i64 %r 3549} 3550 3551define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 3552; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic_weak: 3553; CHECK: bl __atomic_compare_exchange 3554 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1 3555 %r = extractvalue { i64, i1 } %pair, 0 3556 ret i64 %r 3557} 3558 3559define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) { 3560; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire: 3561; CHECK: bl __atomic_compare_exchange 3562 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1 3563 %r = extractvalue { i64, i1 } %pair, 0 3564 ret i64 %r 3565} 3566 3567define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 3568; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire_weak: 3569; CHECK: bl __atomic_compare_exchange 3570 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1 3571 %r = extractvalue { i64, i1 } %pair, 0 3572 ret i64 %r 3573} 3574 3575define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 3576; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst: 3577; CHECK: bl __atomic_compare_exchange 3578 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1 3579 %r = extractvalue { i64, i1 } %pair, 0 3580 ret i64 %r 3581} 3582 3583define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 3584; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst_weak: 3585; CHECK: bl __atomic_compare_exchange 3586 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1 3587 %r = extractvalue { i64, i1 } %pair, 0 3588 ret i64 %r 3589} 3590 3591define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) { 3592; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic: 3593; CHECK: bl __atomic_compare_exchange 3594 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1 3595 %r = extractvalue { i128, i1 } %pair, 0 3596 ret i128 %r 3597} 3598 3599define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 3600; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic_weak: 3601; CHECK: bl __atomic_compare_exchange 3602 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1 3603 %r = extractvalue { i128, i1 } %pair, 0 3604 ret i128 %r 3605} 3606 3607define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) { 3608; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire: 3609; CHECK: bl __atomic_compare_exchange 3610 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1 3611 %r = extractvalue { i128, i1 } %pair, 0 3612 ret i128 %r 3613} 3614 3615define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 3616; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire_weak: 3617; CHECK: bl __atomic_compare_exchange 3618 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1 3619 %r = extractvalue { i128, i1 } %pair, 0 3620 ret i128 %r 3621} 3622 3623define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 3624; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst: 3625; CHECK: bl __atomic_compare_exchange 3626 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1 3627 %r = extractvalue { i128, i1 } %pair, 0 3628 ret i128 %r 3629} 3630 3631define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 3632; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst_weak: 3633; CHECK: bl __atomic_compare_exchange 3634 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1 3635 %r = extractvalue { i128, i1 } %pair, 0 3636 ret i128 %r 3637} 3638 3639define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) { 3640; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic: 3641; CHECK: bl __atomic_compare_exchange 3642 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1 3643 %r = extractvalue { i128, i1 } %pair, 0 3644 ret i128 %r 3645} 3646 3647define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 3648; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic_weak: 3649; CHECK: bl __atomic_compare_exchange 3650 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1 3651 %r = extractvalue { i128, i1 } %pair, 0 3652 ret i128 %r 3653} 3654 3655define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) { 3656; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire: 3657; CHECK: bl __atomic_compare_exchange 3658 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1 3659 %r = extractvalue { i128, i1 } %pair, 0 3660 ret i128 %r 3661} 3662 3663define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 3664; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire_weak: 3665; CHECK: bl __atomic_compare_exchange 3666 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1 3667 %r = extractvalue { i128, i1 } %pair, 0 3668 ret i128 %r 3669} 3670 3671define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 3672; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst: 3673; CHECK: bl __atomic_compare_exchange 3674 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1 3675 %r = extractvalue { i128, i1 } %pair, 0 3676 ret i128 %r 3677} 3678 3679define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 3680; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst_weak: 3681; CHECK: bl __atomic_compare_exchange 3682 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1 3683 %r = extractvalue { i128, i1 } %pair, 0 3684 ret i128 %r 3685} 3686 3687define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) { 3688; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic: 3689; CHECK: bl __atomic_compare_exchange 3690 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 1 3691 %r = extractvalue { i128, i1 } %pair, 0 3692 ret i128 %r 3693} 3694 3695define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 3696; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic_weak: 3697; CHECK: bl __atomic_compare_exchange 3698 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 1 3699 %r = extractvalue { i128, i1 } %pair, 0 3700 ret i128 %r 3701} 3702 3703define dso_local i128 @cmpxchg_i128_unaligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) { 3704; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire: 3705; CHECK: bl __atomic_compare_exchange 3706 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 1 3707 %r = extractvalue { i128, i1 } %pair, 0 3708 ret i128 %r 3709} 3710 3711define dso_local i128 @cmpxchg_i128_unaligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 3712; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire_weak: 3713; CHECK: bl __atomic_compare_exchange 3714 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 1 3715 %r = extractvalue { i128, i1 } %pair, 0 3716 ret i128 %r 3717} 3718 3719define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 3720; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst: 3721; CHECK: bl __atomic_compare_exchange 3722 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1 3723 %r = extractvalue { i128, i1 } %pair, 0 3724 ret i128 %r 3725} 3726 3727define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 3728; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst_weak: 3729; CHECK: bl __atomic_compare_exchange 3730 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1 3731 %r = extractvalue { i128, i1 } %pair, 0 3732 ret i128 %r 3733} 3734 3735define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) { 3736; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic: 3737; CHECK: bl __atomic_compare_exchange 3738 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1 3739 %r = extractvalue { i128, i1 } %pair, 0 3740 ret i128 %r 3741} 3742 3743define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 3744; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic_weak: 3745; CHECK: bl __atomic_compare_exchange 3746 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1 3747 %r = extractvalue { i128, i1 } %pair, 0 3748 ret i128 %r 3749} 3750 3751define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) { 3752; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire: 3753; CHECK: bl __atomic_compare_exchange 3754 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1 3755 %r = extractvalue { i128, i1 } %pair, 0 3756 ret i128 %r 3757} 3758 3759define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 3760; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire_weak: 3761; CHECK: bl __atomic_compare_exchange 3762 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1 3763 %r = extractvalue { i128, i1 } %pair, 0 3764 ret i128 %r 3765} 3766 3767define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 3768; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst: 3769; CHECK: bl __atomic_compare_exchange 3770 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1 3771 %r = extractvalue { i128, i1 } %pair, 0 3772 ret i128 %r 3773} 3774 3775define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 3776; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst_weak: 3777; CHECK: bl __atomic_compare_exchange 3778 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1 3779 %r = extractvalue { i128, i1 } %pair, 0 3780 ret i128 %r 3781} 3782 3783define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) { 3784; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic: 3785; CHECK: bl __atomic_compare_exchange 3786 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1 3787 %r = extractvalue { i128, i1 } %pair, 0 3788 ret i128 %r 3789} 3790 3791define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 3792; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic_weak: 3793; CHECK: bl __atomic_compare_exchange 3794 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1 3795 %r = extractvalue { i128, i1 } %pair, 0 3796 ret i128 %r 3797} 3798 3799define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) { 3800; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire: 3801; CHECK: bl __atomic_compare_exchange 3802 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1 3803 %r = extractvalue { i128, i1 } %pair, 0 3804 ret i128 %r 3805} 3806 3807define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 3808; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire_weak: 3809; CHECK: bl __atomic_compare_exchange 3810 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1 3811 %r = extractvalue { i128, i1 } %pair, 0 3812 ret i128 %r 3813} 3814 3815define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 3816; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst: 3817; CHECK: bl __atomic_compare_exchange 3818 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1 3819 %r = extractvalue { i128, i1 } %pair, 0 3820 ret i128 %r 3821} 3822 3823define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 3824; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst_weak: 3825; CHECK: bl __atomic_compare_exchange 3826 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1 3827 %r = extractvalue { i128, i1 } %pair, 0 3828 ret i128 %r 3829} 3830