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=+outline-atomics -O0 | FileCheck %s --check-prefixes=CHECK,-O0 4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+outline-atomics -O1 | FileCheck %s --check-prefixes=CHECK,-O1 5 6define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) { 7; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_monotonic: 8; CHECK: bl __aarch64_cas1_relax 9 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1 10 %r = extractvalue { i8, i1 } %pair, 0 11 ret i8 %r 12} 13 14define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 15; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak: 16; CHECK: bl __aarch64_cas1_relax 17 %pair = cmpxchg weak 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_acquire(i8 %expected, i8 %new, ptr %ptr) { 23; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_acquire: 24; CHECK: bl __aarch64_cas1_acq 25 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 26 %r = extractvalue { i8, i1 } %pair, 0 27 ret i8 %r 28} 29 30define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 31; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak: 32; CHECK: bl __aarch64_cas1_acq 33 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 34 %r = extractvalue { i8, i1 } %pair, 0 35 ret i8 %r 36} 37 38define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 39; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst: 40; CHECK: bl __aarch64_cas1_acq_rel 41 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 42 %r = extractvalue { i8, i1 } %pair, 0 43 ret i8 %r 44} 45 46define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 47; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak: 48; CHECK: bl __aarch64_cas1_acq_rel 49 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 50 %r = extractvalue { i8, i1 } %pair, 0 51 ret i8 %r 52} 53 54define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) { 55; CHECK-LABEL: cmpxchg_i8_aligned_acquire_monotonic: 56; CHECK: bl __aarch64_cas1_acq 57 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 58 %r = extractvalue { i8, i1 } %pair, 0 59 ret i8 %r 60} 61 62define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 63; CHECK-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak: 64; CHECK: bl __aarch64_cas1_acq 65 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 66 %r = extractvalue { i8, i1 } %pair, 0 67 ret i8 %r 68} 69 70define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) { 71; CHECK-LABEL: cmpxchg_i8_aligned_acquire_acquire: 72; CHECK: bl __aarch64_cas1_acq 73 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 74 %r = extractvalue { i8, i1 } %pair, 0 75 ret i8 %r 76} 77 78define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 79; CHECK-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak: 80; CHECK: bl __aarch64_cas1_acq 81 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 82 %r = extractvalue { i8, i1 } %pair, 0 83 ret i8 %r 84} 85 86define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 87; CHECK-LABEL: cmpxchg_i8_aligned_acquire_seq_cst: 88; CHECK: bl __aarch64_cas1_acq_rel 89 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 90 %r = extractvalue { i8, i1 } %pair, 0 91 ret i8 %r 92} 93 94define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 95; CHECK-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak: 96; CHECK: bl __aarch64_cas1_acq_rel 97 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 98 %r = extractvalue { i8, i1 } %pair, 0 99 ret i8 %r 100} 101 102define dso_local i8 @cmpxchg_i8_aligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) { 103; CHECK-LABEL: cmpxchg_i8_aligned_release_monotonic: 104; CHECK: bl __aarch64_cas1_rel 105 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 106 %r = extractvalue { i8, i1 } %pair, 0 107 ret i8 %r 108} 109 110define dso_local i8 @cmpxchg_i8_aligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 111; CHECK-LABEL: cmpxchg_i8_aligned_release_monotonic_weak: 112; CHECK: bl __aarch64_cas1_rel 113 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 114 %r = extractvalue { i8, i1 } %pair, 0 115 ret i8 %r 116} 117 118define dso_local i8 @cmpxchg_i8_aligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) { 119; CHECK-LABEL: cmpxchg_i8_aligned_release_acquire: 120; CHECK: bl __aarch64_cas1_acq_rel 121 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1 122 %r = extractvalue { i8, i1 } %pair, 0 123 ret i8 %r 124} 125 126define dso_local i8 @cmpxchg_i8_aligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 127; CHECK-LABEL: cmpxchg_i8_aligned_release_acquire_weak: 128; CHECK: bl __aarch64_cas1_acq_rel 129 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1 130 %r = extractvalue { i8, i1 } %pair, 0 131 ret i8 %r 132} 133 134define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 135; CHECK-LABEL: cmpxchg_i8_aligned_release_seq_cst: 136; CHECK: bl __aarch64_cas1_acq_rel 137 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 138 %r = extractvalue { i8, i1 } %pair, 0 139 ret i8 %r 140} 141 142define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 143; CHECK-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak: 144; CHECK: bl __aarch64_cas1_acq_rel 145 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 146 %r = extractvalue { i8, i1 } %pair, 0 147 ret i8 %r 148} 149 150define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) { 151; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic: 152; CHECK: bl __aarch64_cas1_acq_rel 153 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 154 %r = extractvalue { i8, i1 } %pair, 0 155 ret i8 %r 156} 157 158define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 159; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak: 160; CHECK: bl __aarch64_cas1_acq_rel 161 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 162 %r = extractvalue { i8, i1 } %pair, 0 163 ret i8 %r 164} 165 166define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) { 167; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_acquire: 168; CHECK: bl __aarch64_cas1_acq_rel 169 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 170 %r = extractvalue { i8, i1 } %pair, 0 171 ret i8 %r 172} 173 174define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 175; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak: 176; CHECK: bl __aarch64_cas1_acq_rel 177 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 178 %r = extractvalue { i8, i1 } %pair, 0 179 ret i8 %r 180} 181 182define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 183; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst: 184; CHECK: bl __aarch64_cas1_acq_rel 185 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 186 %r = extractvalue { i8, i1 } %pair, 0 187 ret i8 %r 188} 189 190define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 191; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak: 192; CHECK: bl __aarch64_cas1_acq_rel 193 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 194 %r = extractvalue { i8, i1 } %pair, 0 195 ret i8 %r 196} 197 198define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) { 199; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic: 200; CHECK: bl __aarch64_cas1_acq_rel 201 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 202 %r = extractvalue { i8, i1 } %pair, 0 203 ret i8 %r 204} 205 206define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 207; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak: 208; CHECK: bl __aarch64_cas1_acq_rel 209 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 210 %r = extractvalue { i8, i1 } %pair, 0 211 ret i8 %r 212} 213 214define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) { 215; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_acquire: 216; CHECK: bl __aarch64_cas1_acq_rel 217 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 218 %r = extractvalue { i8, i1 } %pair, 0 219 ret i8 %r 220} 221 222define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 223; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak: 224; CHECK: bl __aarch64_cas1_acq_rel 225 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 226 %r = extractvalue { i8, i1 } %pair, 0 227 ret i8 %r 228} 229 230define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 231; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst: 232; CHECK: bl __aarch64_cas1_acq_rel 233 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 234 %r = extractvalue { i8, i1 } %pair, 0 235 ret i8 %r 236} 237 238define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 239; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak: 240; CHECK: bl __aarch64_cas1_acq_rel 241 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 242 %r = extractvalue { i8, i1 } %pair, 0 243 ret i8 %r 244} 245 246define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) { 247; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_monotonic: 248; CHECK: bl __aarch64_cas2_relax 249 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2 250 %r = extractvalue { i16, i1 } %pair, 0 251 ret i16 %r 252} 253 254define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 255; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak: 256; CHECK: bl __aarch64_cas2_relax 257 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2 258 %r = extractvalue { i16, i1 } %pair, 0 259 ret i16 %r 260} 261 262define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) { 263; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_acquire: 264; CHECK: bl __aarch64_cas2_acq 265 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2 266 %r = extractvalue { i16, i1 } %pair, 0 267 ret i16 %r 268} 269 270define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 271; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak: 272; CHECK: bl __aarch64_cas2_acq 273 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2 274 %r = extractvalue { i16, i1 } %pair, 0 275 ret i16 %r 276} 277 278define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 279; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst: 280; CHECK: bl __aarch64_cas2_acq_rel 281 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2 282 %r = extractvalue { i16, i1 } %pair, 0 283 ret i16 %r 284} 285 286define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 287; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak: 288; CHECK: bl __aarch64_cas2_acq_rel 289 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2 290 %r = extractvalue { i16, i1 } %pair, 0 291 ret i16 %r 292} 293 294define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) { 295; CHECK-LABEL: cmpxchg_i16_aligned_acquire_monotonic: 296; CHECK: bl __aarch64_cas2_acq 297 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2 298 %r = extractvalue { i16, i1 } %pair, 0 299 ret i16 %r 300} 301 302define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 303; CHECK-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak: 304; CHECK: bl __aarch64_cas2_acq 305 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2 306 %r = extractvalue { i16, i1 } %pair, 0 307 ret i16 %r 308} 309 310define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) { 311; CHECK-LABEL: cmpxchg_i16_aligned_acquire_acquire: 312; CHECK: bl __aarch64_cas2_acq 313 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2 314 %r = extractvalue { i16, i1 } %pair, 0 315 ret i16 %r 316} 317 318define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 319; CHECK-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak: 320; CHECK: bl __aarch64_cas2_acq 321 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2 322 %r = extractvalue { i16, i1 } %pair, 0 323 ret i16 %r 324} 325 326define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 327; CHECK-LABEL: cmpxchg_i16_aligned_acquire_seq_cst: 328; CHECK: bl __aarch64_cas2_acq_rel 329 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2 330 %r = extractvalue { i16, i1 } %pair, 0 331 ret i16 %r 332} 333 334define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 335; CHECK-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak: 336; CHECK: bl __aarch64_cas2_acq_rel 337 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2 338 %r = extractvalue { i16, i1 } %pair, 0 339 ret i16 %r 340} 341 342define dso_local i16 @cmpxchg_i16_aligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) { 343; CHECK-LABEL: cmpxchg_i16_aligned_release_monotonic: 344; CHECK: bl __aarch64_cas2_rel 345 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 2 346 %r = extractvalue { i16, i1 } %pair, 0 347 ret i16 %r 348} 349 350define dso_local i16 @cmpxchg_i16_aligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 351; CHECK-LABEL: cmpxchg_i16_aligned_release_monotonic_weak: 352; CHECK: bl __aarch64_cas2_rel 353 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 2 354 %r = extractvalue { i16, i1 } %pair, 0 355 ret i16 %r 356} 357 358define dso_local i16 @cmpxchg_i16_aligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) { 359; CHECK-LABEL: cmpxchg_i16_aligned_release_acquire: 360; CHECK: bl __aarch64_cas2_acq_rel 361 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 2 362 %r = extractvalue { i16, i1 } %pair, 0 363 ret i16 %r 364} 365 366define dso_local i16 @cmpxchg_i16_aligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 367; CHECK-LABEL: cmpxchg_i16_aligned_release_acquire_weak: 368; CHECK: bl __aarch64_cas2_acq_rel 369 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 2 370 %r = extractvalue { i16, i1 } %pair, 0 371 ret i16 %r 372} 373 374define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 375; CHECK-LABEL: cmpxchg_i16_aligned_release_seq_cst: 376; CHECK: bl __aarch64_cas2_acq_rel 377 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2 378 %r = extractvalue { i16, i1 } %pair, 0 379 ret i16 %r 380} 381 382define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 383; CHECK-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak: 384; CHECK: bl __aarch64_cas2_acq_rel 385 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2 386 %r = extractvalue { i16, i1 } %pair, 0 387 ret i16 %r 388} 389 390define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) { 391; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic: 392; CHECK: bl __aarch64_cas2_acq_rel 393 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2 394 %r = extractvalue { i16, i1 } %pair, 0 395 ret i16 %r 396} 397 398define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 399; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak: 400; CHECK: bl __aarch64_cas2_acq_rel 401 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2 402 %r = extractvalue { i16, i1 } %pair, 0 403 ret i16 %r 404} 405 406define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) { 407; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_acquire: 408; CHECK: bl __aarch64_cas2_acq_rel 409 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2 410 %r = extractvalue { i16, i1 } %pair, 0 411 ret i16 %r 412} 413 414define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 415; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak: 416; CHECK: bl __aarch64_cas2_acq_rel 417 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2 418 %r = extractvalue { i16, i1 } %pair, 0 419 ret i16 %r 420} 421 422define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 423; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst: 424; CHECK: bl __aarch64_cas2_acq_rel 425 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2 426 %r = extractvalue { i16, i1 } %pair, 0 427 ret i16 %r 428} 429 430define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 431; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak: 432; CHECK: bl __aarch64_cas2_acq_rel 433 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2 434 %r = extractvalue { i16, i1 } %pair, 0 435 ret i16 %r 436} 437 438define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) { 439; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic: 440; CHECK: bl __aarch64_cas2_acq_rel 441 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2 442 %r = extractvalue { i16, i1 } %pair, 0 443 ret i16 %r 444} 445 446define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 447; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak: 448; CHECK: bl __aarch64_cas2_acq_rel 449 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2 450 %r = extractvalue { i16, i1 } %pair, 0 451 ret i16 %r 452} 453 454define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) { 455; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_acquire: 456; CHECK: bl __aarch64_cas2_acq_rel 457 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2 458 %r = extractvalue { i16, i1 } %pair, 0 459 ret i16 %r 460} 461 462define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 463; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak: 464; CHECK: bl __aarch64_cas2_acq_rel 465 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2 466 %r = extractvalue { i16, i1 } %pair, 0 467 ret i16 %r 468} 469 470define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 471; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst: 472; CHECK: bl __aarch64_cas2_acq_rel 473 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2 474 %r = extractvalue { i16, i1 } %pair, 0 475 ret i16 %r 476} 477 478define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 479; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak: 480; CHECK: bl __aarch64_cas2_acq_rel 481 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2 482 %r = extractvalue { i16, i1 } %pair, 0 483 ret i16 %r 484} 485 486define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) { 487; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_monotonic: 488; CHECK: bl __aarch64_cas4_relax 489 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4 490 %r = extractvalue { i32, i1 } %pair, 0 491 ret i32 %r 492} 493 494define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 495; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak: 496; CHECK: bl __aarch64_cas4_relax 497 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4 498 %r = extractvalue { i32, i1 } %pair, 0 499 ret i32 %r 500} 501 502define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) { 503; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_acquire: 504; CHECK: bl __aarch64_cas4_acq 505 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4 506 %r = extractvalue { i32, i1 } %pair, 0 507 ret i32 %r 508} 509 510define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 511; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak: 512; CHECK: bl __aarch64_cas4_acq 513 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4 514 %r = extractvalue { i32, i1 } %pair, 0 515 ret i32 %r 516} 517 518define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 519; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst: 520; CHECK: bl __aarch64_cas4_acq_rel 521 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4 522 %r = extractvalue { i32, i1 } %pair, 0 523 ret i32 %r 524} 525 526define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 527; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak: 528; CHECK: bl __aarch64_cas4_acq_rel 529 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4 530 %r = extractvalue { i32, i1 } %pair, 0 531 ret i32 %r 532} 533 534define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) { 535; CHECK-LABEL: cmpxchg_i32_aligned_acquire_monotonic: 536; CHECK: bl __aarch64_cas4_acq 537 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4 538 %r = extractvalue { i32, i1 } %pair, 0 539 ret i32 %r 540} 541 542define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 543; CHECK-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak: 544; CHECK: bl __aarch64_cas4_acq 545 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4 546 %r = extractvalue { i32, i1 } %pair, 0 547 ret i32 %r 548} 549 550define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) { 551; CHECK-LABEL: cmpxchg_i32_aligned_acquire_acquire: 552; CHECK: bl __aarch64_cas4_acq 553 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4 554 %r = extractvalue { i32, i1 } %pair, 0 555 ret i32 %r 556} 557 558define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 559; CHECK-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak: 560; CHECK: bl __aarch64_cas4_acq 561 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4 562 %r = extractvalue { i32, i1 } %pair, 0 563 ret i32 %r 564} 565 566define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 567; CHECK-LABEL: cmpxchg_i32_aligned_acquire_seq_cst: 568; CHECK: bl __aarch64_cas4_acq_rel 569 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4 570 %r = extractvalue { i32, i1 } %pair, 0 571 ret i32 %r 572} 573 574define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 575; CHECK-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak: 576; CHECK: bl __aarch64_cas4_acq_rel 577 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4 578 %r = extractvalue { i32, i1 } %pair, 0 579 ret i32 %r 580} 581 582define dso_local i32 @cmpxchg_i32_aligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) { 583; CHECK-LABEL: cmpxchg_i32_aligned_release_monotonic: 584; CHECK: bl __aarch64_cas4_rel 585 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 4 586 %r = extractvalue { i32, i1 } %pair, 0 587 ret i32 %r 588} 589 590define dso_local i32 @cmpxchg_i32_aligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 591; CHECK-LABEL: cmpxchg_i32_aligned_release_monotonic_weak: 592; CHECK: bl __aarch64_cas4_rel 593 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 4 594 %r = extractvalue { i32, i1 } %pair, 0 595 ret i32 %r 596} 597 598define dso_local i32 @cmpxchg_i32_aligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) { 599; CHECK-LABEL: cmpxchg_i32_aligned_release_acquire: 600; CHECK: bl __aarch64_cas4_acq_rel 601 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 4 602 %r = extractvalue { i32, i1 } %pair, 0 603 ret i32 %r 604} 605 606define dso_local i32 @cmpxchg_i32_aligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 607; CHECK-LABEL: cmpxchg_i32_aligned_release_acquire_weak: 608; CHECK: bl __aarch64_cas4_acq_rel 609 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 4 610 %r = extractvalue { i32, i1 } %pair, 0 611 ret i32 %r 612} 613 614define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 615; CHECK-LABEL: cmpxchg_i32_aligned_release_seq_cst: 616; CHECK: bl __aarch64_cas4_acq_rel 617 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4 618 %r = extractvalue { i32, i1 } %pair, 0 619 ret i32 %r 620} 621 622define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 623; CHECK-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak: 624; CHECK: bl __aarch64_cas4_acq_rel 625 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4 626 %r = extractvalue { i32, i1 } %pair, 0 627 ret i32 %r 628} 629 630define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) { 631; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic: 632; CHECK: bl __aarch64_cas4_acq_rel 633 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4 634 %r = extractvalue { i32, i1 } %pair, 0 635 ret i32 %r 636} 637 638define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 639; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak: 640; CHECK: bl __aarch64_cas4_acq_rel 641 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4 642 %r = extractvalue { i32, i1 } %pair, 0 643 ret i32 %r 644} 645 646define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) { 647; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_acquire: 648; CHECK: bl __aarch64_cas4_acq_rel 649 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4 650 %r = extractvalue { i32, i1 } %pair, 0 651 ret i32 %r 652} 653 654define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 655; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak: 656; CHECK: bl __aarch64_cas4_acq_rel 657 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4 658 %r = extractvalue { i32, i1 } %pair, 0 659 ret i32 %r 660} 661 662define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 663; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst: 664; CHECK: bl __aarch64_cas4_acq_rel 665 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4 666 %r = extractvalue { i32, i1 } %pair, 0 667 ret i32 %r 668} 669 670define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 671; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak: 672; CHECK: bl __aarch64_cas4_acq_rel 673 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4 674 %r = extractvalue { i32, i1 } %pair, 0 675 ret i32 %r 676} 677 678define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) { 679; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic: 680; CHECK: bl __aarch64_cas4_acq_rel 681 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4 682 %r = extractvalue { i32, i1 } %pair, 0 683 ret i32 %r 684} 685 686define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 687; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak: 688; CHECK: bl __aarch64_cas4_acq_rel 689 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4 690 %r = extractvalue { i32, i1 } %pair, 0 691 ret i32 %r 692} 693 694define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) { 695; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_acquire: 696; CHECK: bl __aarch64_cas4_acq_rel 697 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4 698 %r = extractvalue { i32, i1 } %pair, 0 699 ret i32 %r 700} 701 702define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 703; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak: 704; CHECK: bl __aarch64_cas4_acq_rel 705 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4 706 %r = extractvalue { i32, i1 } %pair, 0 707 ret i32 %r 708} 709 710define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 711; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst: 712; CHECK: bl __aarch64_cas4_acq_rel 713 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4 714 %r = extractvalue { i32, i1 } %pair, 0 715 ret i32 %r 716} 717 718define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 719; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak: 720; CHECK: bl __aarch64_cas4_acq_rel 721 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4 722 %r = extractvalue { i32, i1 } %pair, 0 723 ret i32 %r 724} 725 726define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) { 727; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_monotonic: 728; CHECK: bl __aarch64_cas8_relax 729 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8 730 %r = extractvalue { i64, i1 } %pair, 0 731 ret i64 %r 732} 733 734define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 735; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak: 736; CHECK: bl __aarch64_cas8_relax 737 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8 738 %r = extractvalue { i64, i1 } %pair, 0 739 ret i64 %r 740} 741 742define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) { 743; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_acquire: 744; CHECK: bl __aarch64_cas8_acq 745 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8 746 %r = extractvalue { i64, i1 } %pair, 0 747 ret i64 %r 748} 749 750define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 751; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak: 752; CHECK: bl __aarch64_cas8_acq 753 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8 754 %r = extractvalue { i64, i1 } %pair, 0 755 ret i64 %r 756} 757 758define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 759; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst: 760; CHECK: bl __aarch64_cas8_acq_rel 761 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8 762 %r = extractvalue { i64, i1 } %pair, 0 763 ret i64 %r 764} 765 766define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 767; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak: 768; CHECK: bl __aarch64_cas8_acq_rel 769 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8 770 %r = extractvalue { i64, i1 } %pair, 0 771 ret i64 %r 772} 773 774define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) { 775; CHECK-LABEL: cmpxchg_i64_aligned_acquire_monotonic: 776; CHECK: bl __aarch64_cas8_acq 777 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8 778 %r = extractvalue { i64, i1 } %pair, 0 779 ret i64 %r 780} 781 782define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 783; CHECK-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak: 784; CHECK: bl __aarch64_cas8_acq 785 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8 786 %r = extractvalue { i64, i1 } %pair, 0 787 ret i64 %r 788} 789 790define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) { 791; CHECK-LABEL: cmpxchg_i64_aligned_acquire_acquire: 792; CHECK: bl __aarch64_cas8_acq 793 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8 794 %r = extractvalue { i64, i1 } %pair, 0 795 ret i64 %r 796} 797 798define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 799; CHECK-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak: 800; CHECK: bl __aarch64_cas8_acq 801 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8 802 %r = extractvalue { i64, i1 } %pair, 0 803 ret i64 %r 804} 805 806define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 807; CHECK-LABEL: cmpxchg_i64_aligned_acquire_seq_cst: 808; CHECK: bl __aarch64_cas8_acq_rel 809 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8 810 %r = extractvalue { i64, i1 } %pair, 0 811 ret i64 %r 812} 813 814define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 815; CHECK-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak: 816; CHECK: bl __aarch64_cas8_acq_rel 817 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8 818 %r = extractvalue { i64, i1 } %pair, 0 819 ret i64 %r 820} 821 822define dso_local i64 @cmpxchg_i64_aligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) { 823; CHECK-LABEL: cmpxchg_i64_aligned_release_monotonic: 824; CHECK: bl __aarch64_cas8_rel 825 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 8 826 %r = extractvalue { i64, i1 } %pair, 0 827 ret i64 %r 828} 829 830define dso_local i64 @cmpxchg_i64_aligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 831; CHECK-LABEL: cmpxchg_i64_aligned_release_monotonic_weak: 832; CHECK: bl __aarch64_cas8_rel 833 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 8 834 %r = extractvalue { i64, i1 } %pair, 0 835 ret i64 %r 836} 837 838define dso_local i64 @cmpxchg_i64_aligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) { 839; CHECK-LABEL: cmpxchg_i64_aligned_release_acquire: 840; CHECK: bl __aarch64_cas8_acq_rel 841 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 8 842 %r = extractvalue { i64, i1 } %pair, 0 843 ret i64 %r 844} 845 846define dso_local i64 @cmpxchg_i64_aligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 847; CHECK-LABEL: cmpxchg_i64_aligned_release_acquire_weak: 848; CHECK: bl __aarch64_cas8_acq_rel 849 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 8 850 %r = extractvalue { i64, i1 } %pair, 0 851 ret i64 %r 852} 853 854define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 855; CHECK-LABEL: cmpxchg_i64_aligned_release_seq_cst: 856; CHECK: bl __aarch64_cas8_acq_rel 857 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8 858 %r = extractvalue { i64, i1 } %pair, 0 859 ret i64 %r 860} 861 862define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 863; CHECK-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak: 864; CHECK: bl __aarch64_cas8_acq_rel 865 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8 866 %r = extractvalue { i64, i1 } %pair, 0 867 ret i64 %r 868} 869 870define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) { 871; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic: 872; CHECK: bl __aarch64_cas8_acq_rel 873 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8 874 %r = extractvalue { i64, i1 } %pair, 0 875 ret i64 %r 876} 877 878define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 879; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak: 880; CHECK: bl __aarch64_cas8_acq_rel 881 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8 882 %r = extractvalue { i64, i1 } %pair, 0 883 ret i64 %r 884} 885 886define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) { 887; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_acquire: 888; CHECK: bl __aarch64_cas8_acq_rel 889 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8 890 %r = extractvalue { i64, i1 } %pair, 0 891 ret i64 %r 892} 893 894define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 895; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak: 896; CHECK: bl __aarch64_cas8_acq_rel 897 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8 898 %r = extractvalue { i64, i1 } %pair, 0 899 ret i64 %r 900} 901 902define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 903; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst: 904; CHECK: bl __aarch64_cas8_acq_rel 905 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8 906 %r = extractvalue { i64, i1 } %pair, 0 907 ret i64 %r 908} 909 910define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 911; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak: 912; CHECK: bl __aarch64_cas8_acq_rel 913 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8 914 %r = extractvalue { i64, i1 } %pair, 0 915 ret i64 %r 916} 917 918define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) { 919; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic: 920; CHECK: bl __aarch64_cas8_acq_rel 921 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8 922 %r = extractvalue { i64, i1 } %pair, 0 923 ret i64 %r 924} 925 926define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 927; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak: 928; CHECK: bl __aarch64_cas8_acq_rel 929 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8 930 %r = extractvalue { i64, i1 } %pair, 0 931 ret i64 %r 932} 933 934define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) { 935; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_acquire: 936; CHECK: bl __aarch64_cas8_acq_rel 937 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8 938 %r = extractvalue { i64, i1 } %pair, 0 939 ret i64 %r 940} 941 942define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 943; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak: 944; CHECK: bl __aarch64_cas8_acq_rel 945 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8 946 %r = extractvalue { i64, i1 } %pair, 0 947 ret i64 %r 948} 949 950define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 951; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst: 952; CHECK: bl __aarch64_cas8_acq_rel 953 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8 954 %r = extractvalue { i64, i1 } %pair, 0 955 ret i64 %r 956} 957 958define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 959; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak: 960; CHECK: bl __aarch64_cas8_acq_rel 961 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8 962 %r = extractvalue { i64, i1 } %pair, 0 963 ret i64 %r 964} 965 966define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) { 967; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_monotonic: 968; CHECK: bl __aarch64_cas16_relax 969 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16 970 %r = extractvalue { i128, i1 } %pair, 0 971 ret i128 %r 972} 973 974define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 975; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak: 976; CHECK: bl __aarch64_cas16_relax 977 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16 978 %r = extractvalue { i128, i1 } %pair, 0 979 ret i128 %r 980} 981 982define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) { 983; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_acquire: 984; CHECK: bl __aarch64_cas16_acq 985 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16 986 %r = extractvalue { i128, i1 } %pair, 0 987 ret i128 %r 988} 989 990define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 991; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak: 992; CHECK: bl __aarch64_cas16_acq 993 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16 994 %r = extractvalue { i128, i1 } %pair, 0 995 ret i128 %r 996} 997 998define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 999; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst: 1000; CHECK: bl __aarch64_cas16_acq_rel 1001 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16 1002 %r = extractvalue { i128, i1 } %pair, 0 1003 ret i128 %r 1004} 1005 1006define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1007; CHECK-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak: 1008; CHECK: bl __aarch64_cas16_acq_rel 1009 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16 1010 %r = extractvalue { i128, i1 } %pair, 0 1011 ret i128 %r 1012} 1013 1014define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1015; CHECK-LABEL: cmpxchg_i128_aligned_acquire_monotonic: 1016; CHECK: bl __aarch64_cas16_acq 1017 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16 1018 %r = extractvalue { i128, i1 } %pair, 0 1019 ret i128 %r 1020} 1021 1022define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1023; CHECK-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak: 1024; CHECK: bl __aarch64_cas16_acq 1025 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16 1026 %r = extractvalue { i128, i1 } %pair, 0 1027 ret i128 %r 1028} 1029 1030define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) { 1031; CHECK-LABEL: cmpxchg_i128_aligned_acquire_acquire: 1032; CHECK: bl __aarch64_cas16_acq 1033 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16 1034 %r = extractvalue { i128, i1 } %pair, 0 1035 ret i128 %r 1036} 1037 1038define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1039; CHECK-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak: 1040; CHECK: bl __aarch64_cas16_acq 1041 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16 1042 %r = extractvalue { i128, i1 } %pair, 0 1043 ret i128 %r 1044} 1045 1046define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1047; CHECK-LABEL: cmpxchg_i128_aligned_acquire_seq_cst: 1048; CHECK: bl __aarch64_cas16_acq_rel 1049 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16 1050 %r = extractvalue { i128, i1 } %pair, 0 1051 ret i128 %r 1052} 1053 1054define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1055; CHECK-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak: 1056; CHECK: bl __aarch64_cas16_acq_rel 1057 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16 1058 %r = extractvalue { i128, i1 } %pair, 0 1059 ret i128 %r 1060} 1061 1062define dso_local i128 @cmpxchg_i128_aligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1063; CHECK-LABEL: cmpxchg_i128_aligned_release_monotonic: 1064; CHECK: bl __aarch64_cas16_rel 1065 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 16 1066 %r = extractvalue { i128, i1 } %pair, 0 1067 ret i128 %r 1068} 1069 1070define dso_local i128 @cmpxchg_i128_aligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1071; CHECK-LABEL: cmpxchg_i128_aligned_release_monotonic_weak: 1072; CHECK: bl __aarch64_cas16_rel 1073 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 16 1074 %r = extractvalue { i128, i1 } %pair, 0 1075 ret i128 %r 1076} 1077 1078define dso_local i128 @cmpxchg_i128_aligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) { 1079; CHECK-LABEL: cmpxchg_i128_aligned_release_acquire: 1080; CHECK: bl __aarch64_cas16_acq_rel 1081 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 16 1082 %r = extractvalue { i128, i1 } %pair, 0 1083 ret i128 %r 1084} 1085 1086define dso_local i128 @cmpxchg_i128_aligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1087; CHECK-LABEL: cmpxchg_i128_aligned_release_acquire_weak: 1088; CHECK: bl __aarch64_cas16_acq_rel 1089 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 16 1090 %r = extractvalue { i128, i1 } %pair, 0 1091 ret i128 %r 1092} 1093 1094define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1095; CHECK-LABEL: cmpxchg_i128_aligned_release_seq_cst: 1096; CHECK: bl __aarch64_cas16_acq_rel 1097 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16 1098 %r = extractvalue { i128, i1 } %pair, 0 1099 ret i128 %r 1100} 1101 1102define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1103; CHECK-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak: 1104; CHECK: bl __aarch64_cas16_acq_rel 1105 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16 1106 %r = extractvalue { i128, i1 } %pair, 0 1107 ret i128 %r 1108} 1109 1110define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1111; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic: 1112; CHECK: bl __aarch64_cas16_acq_rel 1113 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16 1114 %r = extractvalue { i128, i1 } %pair, 0 1115 ret i128 %r 1116} 1117 1118define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1119; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak: 1120; CHECK: bl __aarch64_cas16_acq_rel 1121 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16 1122 %r = extractvalue { i128, i1 } %pair, 0 1123 ret i128 %r 1124} 1125 1126define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) { 1127; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_acquire: 1128; CHECK: bl __aarch64_cas16_acq_rel 1129 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16 1130 %r = extractvalue { i128, i1 } %pair, 0 1131 ret i128 %r 1132} 1133 1134define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1135; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak: 1136; CHECK: bl __aarch64_cas16_acq_rel 1137 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16 1138 %r = extractvalue { i128, i1 } %pair, 0 1139 ret i128 %r 1140} 1141 1142define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1143; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst: 1144; CHECK: bl __aarch64_cas16_acq_rel 1145 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16 1146 %r = extractvalue { i128, i1 } %pair, 0 1147 ret i128 %r 1148} 1149 1150define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1151; CHECK-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak: 1152; CHECK: bl __aarch64_cas16_acq_rel 1153 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16 1154 %r = extractvalue { i128, i1 } %pair, 0 1155 ret i128 %r 1156} 1157 1158define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1159; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic: 1160; CHECK: bl __aarch64_cas16_acq_rel 1161 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16 1162 %r = extractvalue { i128, i1 } %pair, 0 1163 ret i128 %r 1164} 1165 1166define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1167; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak: 1168; CHECK: bl __aarch64_cas16_acq_rel 1169 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16 1170 %r = extractvalue { i128, i1 } %pair, 0 1171 ret i128 %r 1172} 1173 1174define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) { 1175; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_acquire: 1176; CHECK: bl __aarch64_cas16_acq_rel 1177 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16 1178 %r = extractvalue { i128, i1 } %pair, 0 1179 ret i128 %r 1180} 1181 1182define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1183; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak: 1184; CHECK: bl __aarch64_cas16_acq_rel 1185 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16 1186 %r = extractvalue { i128, i1 } %pair, 0 1187 ret i128 %r 1188} 1189 1190define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1191; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst: 1192; CHECK: bl __aarch64_cas16_acq_rel 1193 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16 1194 %r = extractvalue { i128, i1 } %pair, 0 1195 ret i128 %r 1196} 1197 1198define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1199; CHECK-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak: 1200; CHECK: bl __aarch64_cas16_acq_rel 1201 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16 1202 %r = extractvalue { i128, i1 } %pair, 0 1203 ret i128 %r 1204} 1205 1206define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1207; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic: 1208; CHECK: bl __aarch64_cas1_relax 1209 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1 1210 %r = extractvalue { i8, i1 } %pair, 0 1211 ret i8 %r 1212} 1213 1214define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1215; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak: 1216; CHECK: bl __aarch64_cas1_relax 1217 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1 1218 %r = extractvalue { i8, i1 } %pair, 0 1219 ret i8 %r 1220} 1221 1222define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) { 1223; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire: 1224; CHECK: bl __aarch64_cas1_acq 1225 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 1226 %r = extractvalue { i8, i1 } %pair, 0 1227 ret i8 %r 1228} 1229 1230define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1231; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak: 1232; CHECK: bl __aarch64_cas1_acq 1233 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 1234 %r = extractvalue { i8, i1 } %pair, 0 1235 ret i8 %r 1236} 1237 1238define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1239; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst: 1240; CHECK: bl __aarch64_cas1_acq_rel 1241 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 1242 %r = extractvalue { i8, i1 } %pair, 0 1243 ret i8 %r 1244} 1245 1246define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1247; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak: 1248; CHECK: bl __aarch64_cas1_acq_rel 1249 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 1250 %r = extractvalue { i8, i1 } %pair, 0 1251 ret i8 %r 1252} 1253 1254define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1255; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic: 1256; CHECK: bl __aarch64_cas1_acq 1257 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 1258 %r = extractvalue { i8, i1 } %pair, 0 1259 ret i8 %r 1260} 1261 1262define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1263; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak: 1264; CHECK: bl __aarch64_cas1_acq 1265 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 1266 %r = extractvalue { i8, i1 } %pair, 0 1267 ret i8 %r 1268} 1269 1270define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) { 1271; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire: 1272; CHECK: bl __aarch64_cas1_acq 1273 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 1274 %r = extractvalue { i8, i1 } %pair, 0 1275 ret i8 %r 1276} 1277 1278define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1279; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak: 1280; CHECK: bl __aarch64_cas1_acq 1281 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 1282 %r = extractvalue { i8, i1 } %pair, 0 1283 ret i8 %r 1284} 1285 1286define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1287; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst: 1288; CHECK: bl __aarch64_cas1_acq_rel 1289 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 1290 %r = extractvalue { i8, i1 } %pair, 0 1291 ret i8 %r 1292} 1293 1294define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1295; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak: 1296; CHECK: bl __aarch64_cas1_acq_rel 1297 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 1298 %r = extractvalue { i8, i1 } %pair, 0 1299 ret i8 %r 1300} 1301 1302define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1303; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic: 1304; CHECK: bl __aarch64_cas1_rel 1305 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 1306 %r = extractvalue { i8, i1 } %pair, 0 1307 ret i8 %r 1308} 1309 1310define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1311; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak: 1312; CHECK: bl __aarch64_cas1_rel 1313 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 1314 %r = extractvalue { i8, i1 } %pair, 0 1315 ret i8 %r 1316} 1317 1318define dso_local i8 @cmpxchg_i8_unaligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) { 1319; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire: 1320; CHECK: bl __aarch64_cas1_acq_rel 1321 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1 1322 %r = extractvalue { i8, i1 } %pair, 0 1323 ret i8 %r 1324} 1325 1326define dso_local i8 @cmpxchg_i8_unaligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1327; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire_weak: 1328; CHECK: bl __aarch64_cas1_acq_rel 1329 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1 1330 %r = extractvalue { i8, i1 } %pair, 0 1331 ret i8 %r 1332} 1333 1334define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1335; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst: 1336; CHECK: bl __aarch64_cas1_acq_rel 1337 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 1338 %r = extractvalue { i8, i1 } %pair, 0 1339 ret i8 %r 1340} 1341 1342define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1343; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak: 1344; CHECK: bl __aarch64_cas1_acq_rel 1345 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 1346 %r = extractvalue { i8, i1 } %pair, 0 1347 ret i8 %r 1348} 1349 1350define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1351; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic: 1352; CHECK: bl __aarch64_cas1_acq_rel 1353 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 1354 %r = extractvalue { i8, i1 } %pair, 0 1355 ret i8 %r 1356} 1357 1358define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1359; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak: 1360; CHECK: bl __aarch64_cas1_acq_rel 1361 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 1362 %r = extractvalue { i8, i1 } %pair, 0 1363 ret i8 %r 1364} 1365 1366define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) { 1367; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire: 1368; CHECK: bl __aarch64_cas1_acq_rel 1369 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 1370 %r = extractvalue { i8, i1 } %pair, 0 1371 ret i8 %r 1372} 1373 1374define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1375; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak: 1376; CHECK: bl __aarch64_cas1_acq_rel 1377 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 1378 %r = extractvalue { i8, i1 } %pair, 0 1379 ret i8 %r 1380} 1381 1382define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1383; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst: 1384; CHECK: bl __aarch64_cas1_acq_rel 1385 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 1386 %r = extractvalue { i8, i1 } %pair, 0 1387 ret i8 %r 1388} 1389 1390define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1391; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak: 1392; CHECK: bl __aarch64_cas1_acq_rel 1393 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 1394 %r = extractvalue { i8, i1 } %pair, 0 1395 ret i8 %r 1396} 1397 1398define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1399; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic: 1400; CHECK: bl __aarch64_cas1_acq_rel 1401 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 1402 %r = extractvalue { i8, i1 } %pair, 0 1403 ret i8 %r 1404} 1405 1406define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1407; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak: 1408; CHECK: bl __aarch64_cas1_acq_rel 1409 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 1410 %r = extractvalue { i8, i1 } %pair, 0 1411 ret i8 %r 1412} 1413 1414define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) { 1415; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire: 1416; CHECK: bl __aarch64_cas1_acq_rel 1417 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 1418 %r = extractvalue { i8, i1 } %pair, 0 1419 ret i8 %r 1420} 1421 1422define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1423; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak: 1424; CHECK: bl __aarch64_cas1_acq_rel 1425 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 1426 %r = extractvalue { i8, i1 } %pair, 0 1427 ret i8 %r 1428} 1429 1430define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1431; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst: 1432; CHECK: bl __aarch64_cas1_acq_rel 1433 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 1434 %r = extractvalue { i8, i1 } %pair, 0 1435 ret i8 %r 1436} 1437 1438define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1439; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak: 1440; CHECK: bl __aarch64_cas1_acq_rel 1441 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 1442 %r = extractvalue { i8, i1 } %pair, 0 1443 ret i8 %r 1444} 1445 1446define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1447; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic: 1448; CHECK: bl __atomic_compare_exchange 1449 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1 1450 %r = extractvalue { i16, i1 } %pair, 0 1451 ret i16 %r 1452} 1453 1454define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1455; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic_weak: 1456; CHECK: bl __atomic_compare_exchange 1457 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1 1458 %r = extractvalue { i16, i1 } %pair, 0 1459 ret i16 %r 1460} 1461 1462define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) { 1463; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire: 1464; CHECK: bl __atomic_compare_exchange 1465 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1 1466 %r = extractvalue { i16, i1 } %pair, 0 1467 ret i16 %r 1468} 1469 1470define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1471; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire_weak: 1472; CHECK: bl __atomic_compare_exchange 1473 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1 1474 %r = extractvalue { i16, i1 } %pair, 0 1475 ret i16 %r 1476} 1477 1478define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1479; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst: 1480; CHECK: bl __atomic_compare_exchange 1481 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1 1482 %r = extractvalue { i16, i1 } %pair, 0 1483 ret i16 %r 1484} 1485 1486define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1487; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst_weak: 1488; CHECK: bl __atomic_compare_exchange 1489 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1 1490 %r = extractvalue { i16, i1 } %pair, 0 1491 ret i16 %r 1492} 1493 1494define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1495; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic: 1496; CHECK: bl __atomic_compare_exchange 1497 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1 1498 %r = extractvalue { i16, i1 } %pair, 0 1499 ret i16 %r 1500} 1501 1502define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1503; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic_weak: 1504; CHECK: bl __atomic_compare_exchange 1505 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1 1506 %r = extractvalue { i16, i1 } %pair, 0 1507 ret i16 %r 1508} 1509 1510define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) { 1511; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire: 1512; CHECK: bl __atomic_compare_exchange 1513 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1 1514 %r = extractvalue { i16, i1 } %pair, 0 1515 ret i16 %r 1516} 1517 1518define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1519; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire_weak: 1520; CHECK: bl __atomic_compare_exchange 1521 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1 1522 %r = extractvalue { i16, i1 } %pair, 0 1523 ret i16 %r 1524} 1525 1526define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1527; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst: 1528; CHECK: bl __atomic_compare_exchange 1529 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1 1530 %r = extractvalue { i16, i1 } %pair, 0 1531 ret i16 %r 1532} 1533 1534define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1535; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst_weak: 1536; CHECK: bl __atomic_compare_exchange 1537 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1 1538 %r = extractvalue { i16, i1 } %pair, 0 1539 ret i16 %r 1540} 1541 1542define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1543; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic: 1544; CHECK: bl __atomic_compare_exchange 1545 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 1 1546 %r = extractvalue { i16, i1 } %pair, 0 1547 ret i16 %r 1548} 1549 1550define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1551; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic_weak: 1552; CHECK: bl __atomic_compare_exchange 1553 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 1 1554 %r = extractvalue { i16, i1 } %pair, 0 1555 ret i16 %r 1556} 1557 1558define dso_local i16 @cmpxchg_i16_unaligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) { 1559; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire: 1560; CHECK: bl __atomic_compare_exchange 1561 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 1 1562 %r = extractvalue { i16, i1 } %pair, 0 1563 ret i16 %r 1564} 1565 1566define dso_local i16 @cmpxchg_i16_unaligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1567; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire_weak: 1568; CHECK: bl __atomic_compare_exchange 1569 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 1 1570 %r = extractvalue { i16, i1 } %pair, 0 1571 ret i16 %r 1572} 1573 1574define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1575; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst: 1576; CHECK: bl __atomic_compare_exchange 1577 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1 1578 %r = extractvalue { i16, i1 } %pair, 0 1579 ret i16 %r 1580} 1581 1582define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1583; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst_weak: 1584; CHECK: bl __atomic_compare_exchange 1585 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1 1586 %r = extractvalue { i16, i1 } %pair, 0 1587 ret i16 %r 1588} 1589 1590define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1591; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic: 1592; CHECK: bl __atomic_compare_exchange 1593 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1 1594 %r = extractvalue { i16, i1 } %pair, 0 1595 ret i16 %r 1596} 1597 1598define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1599; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic_weak: 1600; CHECK: bl __atomic_compare_exchange 1601 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1 1602 %r = extractvalue { i16, i1 } %pair, 0 1603 ret i16 %r 1604} 1605 1606define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) { 1607; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire: 1608; CHECK: bl __atomic_compare_exchange 1609 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1 1610 %r = extractvalue { i16, i1 } %pair, 0 1611 ret i16 %r 1612} 1613 1614define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1615; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire_weak: 1616; CHECK: bl __atomic_compare_exchange 1617 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1 1618 %r = extractvalue { i16, i1 } %pair, 0 1619 ret i16 %r 1620} 1621 1622define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1623; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst: 1624; CHECK: bl __atomic_compare_exchange 1625 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1 1626 %r = extractvalue { i16, i1 } %pair, 0 1627 ret i16 %r 1628} 1629 1630define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1631; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst_weak: 1632; CHECK: bl __atomic_compare_exchange 1633 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1 1634 %r = extractvalue { i16, i1 } %pair, 0 1635 ret i16 %r 1636} 1637 1638define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1639; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic: 1640; CHECK: bl __atomic_compare_exchange 1641 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1 1642 %r = extractvalue { i16, i1 } %pair, 0 1643 ret i16 %r 1644} 1645 1646define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1647; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic_weak: 1648; CHECK: bl __atomic_compare_exchange 1649 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1 1650 %r = extractvalue { i16, i1 } %pair, 0 1651 ret i16 %r 1652} 1653 1654define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) { 1655; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire: 1656; CHECK: bl __atomic_compare_exchange 1657 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1 1658 %r = extractvalue { i16, i1 } %pair, 0 1659 ret i16 %r 1660} 1661 1662define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1663; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire_weak: 1664; CHECK: bl __atomic_compare_exchange 1665 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1 1666 %r = extractvalue { i16, i1 } %pair, 0 1667 ret i16 %r 1668} 1669 1670define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1671; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst: 1672; CHECK: bl __atomic_compare_exchange 1673 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1 1674 %r = extractvalue { i16, i1 } %pair, 0 1675 ret i16 %r 1676} 1677 1678define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1679; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst_weak: 1680; CHECK: bl __atomic_compare_exchange 1681 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1 1682 %r = extractvalue { i16, i1 } %pair, 0 1683 ret i16 %r 1684} 1685 1686define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1687; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic: 1688; CHECK: bl __atomic_compare_exchange 1689 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1 1690 %r = extractvalue { i32, i1 } %pair, 0 1691 ret i32 %r 1692} 1693 1694define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1695; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic_weak: 1696; CHECK: bl __atomic_compare_exchange 1697 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1 1698 %r = extractvalue { i32, i1 } %pair, 0 1699 ret i32 %r 1700} 1701 1702define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) { 1703; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire: 1704; CHECK: bl __atomic_compare_exchange 1705 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1 1706 %r = extractvalue { i32, i1 } %pair, 0 1707 ret i32 %r 1708} 1709 1710define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1711; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire_weak: 1712; CHECK: bl __atomic_compare_exchange 1713 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1 1714 %r = extractvalue { i32, i1 } %pair, 0 1715 ret i32 %r 1716} 1717 1718define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1719; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst: 1720; CHECK: bl __atomic_compare_exchange 1721 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1 1722 %r = extractvalue { i32, i1 } %pair, 0 1723 ret i32 %r 1724} 1725 1726define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1727; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst_weak: 1728; CHECK: bl __atomic_compare_exchange 1729 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1 1730 %r = extractvalue { i32, i1 } %pair, 0 1731 ret i32 %r 1732} 1733 1734define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1735; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic: 1736; CHECK: bl __atomic_compare_exchange 1737 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1 1738 %r = extractvalue { i32, i1 } %pair, 0 1739 ret i32 %r 1740} 1741 1742define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1743; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic_weak: 1744; CHECK: bl __atomic_compare_exchange 1745 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1 1746 %r = extractvalue { i32, i1 } %pair, 0 1747 ret i32 %r 1748} 1749 1750define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) { 1751; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire: 1752; CHECK: bl __atomic_compare_exchange 1753 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1 1754 %r = extractvalue { i32, i1 } %pair, 0 1755 ret i32 %r 1756} 1757 1758define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1759; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire_weak: 1760; CHECK: bl __atomic_compare_exchange 1761 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1 1762 %r = extractvalue { i32, i1 } %pair, 0 1763 ret i32 %r 1764} 1765 1766define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1767; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst: 1768; CHECK: bl __atomic_compare_exchange 1769 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1 1770 %r = extractvalue { i32, i1 } %pair, 0 1771 ret i32 %r 1772} 1773 1774define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1775; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst_weak: 1776; CHECK: bl __atomic_compare_exchange 1777 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1 1778 %r = extractvalue { i32, i1 } %pair, 0 1779 ret i32 %r 1780} 1781 1782define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1783; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic: 1784; CHECK: bl __atomic_compare_exchange 1785 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 1 1786 %r = extractvalue { i32, i1 } %pair, 0 1787 ret i32 %r 1788} 1789 1790define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1791; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic_weak: 1792; CHECK: bl __atomic_compare_exchange 1793 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 1 1794 %r = extractvalue { i32, i1 } %pair, 0 1795 ret i32 %r 1796} 1797 1798define dso_local i32 @cmpxchg_i32_unaligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) { 1799; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire: 1800; CHECK: bl __atomic_compare_exchange 1801 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 1 1802 %r = extractvalue { i32, i1 } %pair, 0 1803 ret i32 %r 1804} 1805 1806define dso_local i32 @cmpxchg_i32_unaligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1807; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire_weak: 1808; CHECK: bl __atomic_compare_exchange 1809 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 1 1810 %r = extractvalue { i32, i1 } %pair, 0 1811 ret i32 %r 1812} 1813 1814define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1815; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst: 1816; CHECK: bl __atomic_compare_exchange 1817 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1 1818 %r = extractvalue { i32, i1 } %pair, 0 1819 ret i32 %r 1820} 1821 1822define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1823; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst_weak: 1824; CHECK: bl __atomic_compare_exchange 1825 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1 1826 %r = extractvalue { i32, i1 } %pair, 0 1827 ret i32 %r 1828} 1829 1830define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1831; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic: 1832; CHECK: bl __atomic_compare_exchange 1833 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1 1834 %r = extractvalue { i32, i1 } %pair, 0 1835 ret i32 %r 1836} 1837 1838define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1839; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic_weak: 1840; CHECK: bl __atomic_compare_exchange 1841 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1 1842 %r = extractvalue { i32, i1 } %pair, 0 1843 ret i32 %r 1844} 1845 1846define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) { 1847; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire: 1848; CHECK: bl __atomic_compare_exchange 1849 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1 1850 %r = extractvalue { i32, i1 } %pair, 0 1851 ret i32 %r 1852} 1853 1854define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1855; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire_weak: 1856; CHECK: bl __atomic_compare_exchange 1857 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1 1858 %r = extractvalue { i32, i1 } %pair, 0 1859 ret i32 %r 1860} 1861 1862define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1863; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst: 1864; CHECK: bl __atomic_compare_exchange 1865 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1 1866 %r = extractvalue { i32, i1 } %pair, 0 1867 ret i32 %r 1868} 1869 1870define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1871; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst_weak: 1872; CHECK: bl __atomic_compare_exchange 1873 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1 1874 %r = extractvalue { i32, i1 } %pair, 0 1875 ret i32 %r 1876} 1877 1878define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1879; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic: 1880; CHECK: bl __atomic_compare_exchange 1881 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1 1882 %r = extractvalue { i32, i1 } %pair, 0 1883 ret i32 %r 1884} 1885 1886define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1887; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic_weak: 1888; CHECK: bl __atomic_compare_exchange 1889 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1 1890 %r = extractvalue { i32, i1 } %pair, 0 1891 ret i32 %r 1892} 1893 1894define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) { 1895; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire: 1896; CHECK: bl __atomic_compare_exchange 1897 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1 1898 %r = extractvalue { i32, i1 } %pair, 0 1899 ret i32 %r 1900} 1901 1902define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1903; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire_weak: 1904; CHECK: bl __atomic_compare_exchange 1905 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1 1906 %r = extractvalue { i32, i1 } %pair, 0 1907 ret i32 %r 1908} 1909 1910define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1911; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst: 1912; CHECK: bl __atomic_compare_exchange 1913 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1 1914 %r = extractvalue { i32, i1 } %pair, 0 1915 ret i32 %r 1916} 1917 1918define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1919; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst_weak: 1920; CHECK: bl __atomic_compare_exchange 1921 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1 1922 %r = extractvalue { i32, i1 } %pair, 0 1923 ret i32 %r 1924} 1925 1926define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) { 1927; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic: 1928; CHECK: bl __atomic_compare_exchange 1929 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1 1930 %r = extractvalue { i64, i1 } %pair, 0 1931 ret i64 %r 1932} 1933 1934define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 1935; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic_weak: 1936; CHECK: bl __atomic_compare_exchange 1937 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1 1938 %r = extractvalue { i64, i1 } %pair, 0 1939 ret i64 %r 1940} 1941 1942define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) { 1943; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire: 1944; CHECK: bl __atomic_compare_exchange 1945 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1 1946 %r = extractvalue { i64, i1 } %pair, 0 1947 ret i64 %r 1948} 1949 1950define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 1951; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire_weak: 1952; CHECK: bl __atomic_compare_exchange 1953 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1 1954 %r = extractvalue { i64, i1 } %pair, 0 1955 ret i64 %r 1956} 1957 1958define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 1959; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst: 1960; CHECK: bl __atomic_compare_exchange 1961 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1 1962 %r = extractvalue { i64, i1 } %pair, 0 1963 ret i64 %r 1964} 1965 1966define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 1967; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst_weak: 1968; CHECK: bl __atomic_compare_exchange 1969 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1 1970 %r = extractvalue { i64, i1 } %pair, 0 1971 ret i64 %r 1972} 1973 1974define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) { 1975; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic: 1976; CHECK: bl __atomic_compare_exchange 1977 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1 1978 %r = extractvalue { i64, i1 } %pair, 0 1979 ret i64 %r 1980} 1981 1982define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 1983; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic_weak: 1984; CHECK: bl __atomic_compare_exchange 1985 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1 1986 %r = extractvalue { i64, i1 } %pair, 0 1987 ret i64 %r 1988} 1989 1990define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) { 1991; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire: 1992; CHECK: bl __atomic_compare_exchange 1993 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1 1994 %r = extractvalue { i64, i1 } %pair, 0 1995 ret i64 %r 1996} 1997 1998define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 1999; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire_weak: 2000; CHECK: bl __atomic_compare_exchange 2001 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1 2002 %r = extractvalue { i64, i1 } %pair, 0 2003 ret i64 %r 2004} 2005 2006define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 2007; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst: 2008; CHECK: bl __atomic_compare_exchange 2009 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1 2010 %r = extractvalue { i64, i1 } %pair, 0 2011 ret i64 %r 2012} 2013 2014define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 2015; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst_weak: 2016; CHECK: bl __atomic_compare_exchange 2017 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1 2018 %r = extractvalue { i64, i1 } %pair, 0 2019 ret i64 %r 2020} 2021 2022define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) { 2023; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic: 2024; CHECK: bl __atomic_compare_exchange 2025 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 1 2026 %r = extractvalue { i64, i1 } %pair, 0 2027 ret i64 %r 2028} 2029 2030define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 2031; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic_weak: 2032; CHECK: bl __atomic_compare_exchange 2033 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 1 2034 %r = extractvalue { i64, i1 } %pair, 0 2035 ret i64 %r 2036} 2037 2038define dso_local i64 @cmpxchg_i64_unaligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) { 2039; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire: 2040; CHECK: bl __atomic_compare_exchange 2041 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 1 2042 %r = extractvalue { i64, i1 } %pair, 0 2043 ret i64 %r 2044} 2045 2046define dso_local i64 @cmpxchg_i64_unaligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 2047; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire_weak: 2048; CHECK: bl __atomic_compare_exchange 2049 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 1 2050 %r = extractvalue { i64, i1 } %pair, 0 2051 ret i64 %r 2052} 2053 2054define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 2055; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst: 2056; CHECK: bl __atomic_compare_exchange 2057 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1 2058 %r = extractvalue { i64, i1 } %pair, 0 2059 ret i64 %r 2060} 2061 2062define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 2063; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst_weak: 2064; CHECK: bl __atomic_compare_exchange 2065 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1 2066 %r = extractvalue { i64, i1 } %pair, 0 2067 ret i64 %r 2068} 2069 2070define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) { 2071; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic: 2072; CHECK: bl __atomic_compare_exchange 2073 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1 2074 %r = extractvalue { i64, i1 } %pair, 0 2075 ret i64 %r 2076} 2077 2078define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 2079; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic_weak: 2080; CHECK: bl __atomic_compare_exchange 2081 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1 2082 %r = extractvalue { i64, i1 } %pair, 0 2083 ret i64 %r 2084} 2085 2086define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) { 2087; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire: 2088; CHECK: bl __atomic_compare_exchange 2089 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1 2090 %r = extractvalue { i64, i1 } %pair, 0 2091 ret i64 %r 2092} 2093 2094define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 2095; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire_weak: 2096; CHECK: bl __atomic_compare_exchange 2097 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1 2098 %r = extractvalue { i64, i1 } %pair, 0 2099 ret i64 %r 2100} 2101 2102define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 2103; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst: 2104; CHECK: bl __atomic_compare_exchange 2105 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1 2106 %r = extractvalue { i64, i1 } %pair, 0 2107 ret i64 %r 2108} 2109 2110define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 2111; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst_weak: 2112; CHECK: bl __atomic_compare_exchange 2113 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1 2114 %r = extractvalue { i64, i1 } %pair, 0 2115 ret i64 %r 2116} 2117 2118define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) { 2119; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic: 2120; CHECK: bl __atomic_compare_exchange 2121 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1 2122 %r = extractvalue { i64, i1 } %pair, 0 2123 ret i64 %r 2124} 2125 2126define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 2127; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic_weak: 2128; CHECK: bl __atomic_compare_exchange 2129 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1 2130 %r = extractvalue { i64, i1 } %pair, 0 2131 ret i64 %r 2132} 2133 2134define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) { 2135; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire: 2136; CHECK: bl __atomic_compare_exchange 2137 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1 2138 %r = extractvalue { i64, i1 } %pair, 0 2139 ret i64 %r 2140} 2141 2142define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 2143; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire_weak: 2144; CHECK: bl __atomic_compare_exchange 2145 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1 2146 %r = extractvalue { i64, i1 } %pair, 0 2147 ret i64 %r 2148} 2149 2150define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 2151; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst: 2152; CHECK: bl __atomic_compare_exchange 2153 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1 2154 %r = extractvalue { i64, i1 } %pair, 0 2155 ret i64 %r 2156} 2157 2158define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 2159; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst_weak: 2160; CHECK: bl __atomic_compare_exchange 2161 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1 2162 %r = extractvalue { i64, i1 } %pair, 0 2163 ret i64 %r 2164} 2165 2166define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2167; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic: 2168; CHECK: bl __atomic_compare_exchange 2169 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1 2170 %r = extractvalue { i128, i1 } %pair, 0 2171 ret i128 %r 2172} 2173 2174define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2175; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic_weak: 2176; CHECK: bl __atomic_compare_exchange 2177 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1 2178 %r = extractvalue { i128, i1 } %pair, 0 2179 ret i128 %r 2180} 2181 2182define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) { 2183; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire: 2184; CHECK: bl __atomic_compare_exchange 2185 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1 2186 %r = extractvalue { i128, i1 } %pair, 0 2187 ret i128 %r 2188} 2189 2190define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2191; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire_weak: 2192; CHECK: bl __atomic_compare_exchange 2193 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1 2194 %r = extractvalue { i128, i1 } %pair, 0 2195 ret i128 %r 2196} 2197 2198define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2199; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst: 2200; CHECK: bl __atomic_compare_exchange 2201 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1 2202 %r = extractvalue { i128, i1 } %pair, 0 2203 ret i128 %r 2204} 2205 2206define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2207; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst_weak: 2208; CHECK: bl __atomic_compare_exchange 2209 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1 2210 %r = extractvalue { i128, i1 } %pair, 0 2211 ret i128 %r 2212} 2213 2214define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2215; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic: 2216; CHECK: bl __atomic_compare_exchange 2217 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1 2218 %r = extractvalue { i128, i1 } %pair, 0 2219 ret i128 %r 2220} 2221 2222define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2223; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic_weak: 2224; CHECK: bl __atomic_compare_exchange 2225 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1 2226 %r = extractvalue { i128, i1 } %pair, 0 2227 ret i128 %r 2228} 2229 2230define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) { 2231; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire: 2232; CHECK: bl __atomic_compare_exchange 2233 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1 2234 %r = extractvalue { i128, i1 } %pair, 0 2235 ret i128 %r 2236} 2237 2238define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2239; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire_weak: 2240; CHECK: bl __atomic_compare_exchange 2241 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1 2242 %r = extractvalue { i128, i1 } %pair, 0 2243 ret i128 %r 2244} 2245 2246define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2247; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst: 2248; CHECK: bl __atomic_compare_exchange 2249 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1 2250 %r = extractvalue { i128, i1 } %pair, 0 2251 ret i128 %r 2252} 2253 2254define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2255; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst_weak: 2256; CHECK: bl __atomic_compare_exchange 2257 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1 2258 %r = extractvalue { i128, i1 } %pair, 0 2259 ret i128 %r 2260} 2261 2262define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2263; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic: 2264; CHECK: bl __atomic_compare_exchange 2265 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 1 2266 %r = extractvalue { i128, i1 } %pair, 0 2267 ret i128 %r 2268} 2269 2270define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2271; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic_weak: 2272; CHECK: bl __atomic_compare_exchange 2273 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 1 2274 %r = extractvalue { i128, i1 } %pair, 0 2275 ret i128 %r 2276} 2277 2278define dso_local i128 @cmpxchg_i128_unaligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) { 2279; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire: 2280; CHECK: bl __atomic_compare_exchange 2281 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 1 2282 %r = extractvalue { i128, i1 } %pair, 0 2283 ret i128 %r 2284} 2285 2286define dso_local i128 @cmpxchg_i128_unaligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2287; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire_weak: 2288; CHECK: bl __atomic_compare_exchange 2289 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 1 2290 %r = extractvalue { i128, i1 } %pair, 0 2291 ret i128 %r 2292} 2293 2294define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2295; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst: 2296; CHECK: bl __atomic_compare_exchange 2297 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1 2298 %r = extractvalue { i128, i1 } %pair, 0 2299 ret i128 %r 2300} 2301 2302define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2303; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst_weak: 2304; CHECK: bl __atomic_compare_exchange 2305 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1 2306 %r = extractvalue { i128, i1 } %pair, 0 2307 ret i128 %r 2308} 2309 2310define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2311; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic: 2312; CHECK: bl __atomic_compare_exchange 2313 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1 2314 %r = extractvalue { i128, i1 } %pair, 0 2315 ret i128 %r 2316} 2317 2318define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2319; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic_weak: 2320; CHECK: bl __atomic_compare_exchange 2321 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1 2322 %r = extractvalue { i128, i1 } %pair, 0 2323 ret i128 %r 2324} 2325 2326define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) { 2327; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire: 2328; CHECK: bl __atomic_compare_exchange 2329 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1 2330 %r = extractvalue { i128, i1 } %pair, 0 2331 ret i128 %r 2332} 2333 2334define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2335; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire_weak: 2336; CHECK: bl __atomic_compare_exchange 2337 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1 2338 %r = extractvalue { i128, i1 } %pair, 0 2339 ret i128 %r 2340} 2341 2342define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2343; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst: 2344; CHECK: bl __atomic_compare_exchange 2345 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1 2346 %r = extractvalue { i128, i1 } %pair, 0 2347 ret i128 %r 2348} 2349 2350define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2351; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst_weak: 2352; CHECK: bl __atomic_compare_exchange 2353 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1 2354 %r = extractvalue { i128, i1 } %pair, 0 2355 ret i128 %r 2356} 2357 2358define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2359; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic: 2360; CHECK: bl __atomic_compare_exchange 2361 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1 2362 %r = extractvalue { i128, i1 } %pair, 0 2363 ret i128 %r 2364} 2365 2366define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2367; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic_weak: 2368; CHECK: bl __atomic_compare_exchange 2369 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1 2370 %r = extractvalue { i128, i1 } %pair, 0 2371 ret i128 %r 2372} 2373 2374define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) { 2375; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire: 2376; CHECK: bl __atomic_compare_exchange 2377 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1 2378 %r = extractvalue { i128, i1 } %pair, 0 2379 ret i128 %r 2380} 2381 2382define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2383; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire_weak: 2384; CHECK: bl __atomic_compare_exchange 2385 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1 2386 %r = extractvalue { i128, i1 } %pair, 0 2387 ret i128 %r 2388} 2389 2390define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2391; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst: 2392; CHECK: bl __atomic_compare_exchange 2393 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1 2394 %r = extractvalue { i128, i1 } %pair, 0 2395 ret i128 %r 2396} 2397 2398define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2399; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst_weak: 2400; CHECK: bl __atomic_compare_exchange 2401 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1 2402 %r = extractvalue { i128, i1 } %pair, 0 2403 ret i128 %r 2404} 2405;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 2406; -O0: {{.*}} 2407; -O1: {{.*}} 2408