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=+v8.1a -O0 | FileCheck %s --check-prefixes=CHECK,-O0 4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+v8.1a -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: casb w0, w1, [x2] 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: casb w0, w1, [x2] 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: casab w0, w1, [x2] 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: casab w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casab w0, w1, [x2] 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: casab w0, w1, [x2] 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: casab w0, w1, [x2] 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: casab w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: caslb w0, w1, [x2] 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: caslb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: casalb w0, w1, [x2] 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: cash w0, w1, [x2] 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: cash w0, w1, [x2] 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: casah w0, w1, [x2] 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: casah w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casah w0, w1, [x2] 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: casah w0, w1, [x2] 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: casah w0, w1, [x2] 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: casah w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: caslh w0, w1, [x2] 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: caslh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: casalh w0, w1, [x2] 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: cas w0, w1, [x2] 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: cas w0, w1, [x2] 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: casa w0, w1, [x2] 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: casa w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casa w0, w1, [x2] 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: casa w0, w1, [x2] 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: casa w0, w1, [x2] 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: casa w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casl w0, w1, [x2] 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: casl w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: casal w0, w1, [x2] 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: cas x0, x1, [x2] 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: cas x0, x1, [x2] 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: casa x0, x1, [x2] 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: casa x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casa x0, x1, [x2] 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: casa x0, x1, [x2] 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: casa x0, x1, [x2] 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: casa x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casl x0, x1, [x2] 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: casl x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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: casal x0, x1, [x2] 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; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic: 968; -O0: casp x2, x3, x0, x1, [x4] 969; 970; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic: 971; -O1: casp x0, x1, x2, x3, [x4] 972 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16 973 %r = extractvalue { i128, i1 } %pair, 0 974 ret i128 %r 975} 976 977define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 978; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak: 979; -O0: casp x2, x3, x0, x1, [x4] 980; 981; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak: 982; -O1: casp x0, x1, x2, x3, [x4] 983 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16 984 %r = extractvalue { i128, i1 } %pair, 0 985 ret i128 %r 986} 987 988define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) { 989; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire: 990; -O0: caspa x2, x3, x0, x1, [x4] 991; 992; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire: 993; -O1: caspa x0, x1, x2, x3, [x4] 994 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16 995 %r = extractvalue { i128, i1 } %pair, 0 996 ret i128 %r 997} 998 999define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1000; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak: 1001; -O0: caspa x2, x3, x0, x1, [x4] 1002; 1003; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak: 1004; -O1: caspa x0, x1, x2, x3, [x4] 1005 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16 1006 %r = extractvalue { i128, i1 } %pair, 0 1007 ret i128 %r 1008} 1009 1010define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1011; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst: 1012; -O0: caspal x2, x3, x0, x1, [x4] 1013; 1014; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst: 1015; -O1: caspal x0, x1, x2, x3, [x4] 1016 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16 1017 %r = extractvalue { i128, i1 } %pair, 0 1018 ret i128 %r 1019} 1020 1021define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1022; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak: 1023; -O0: caspal x2, x3, x0, x1, [x4] 1024; 1025; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak: 1026; -O1: caspal x0, x1, x2, x3, [x4] 1027 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16 1028 %r = extractvalue { i128, i1 } %pair, 0 1029 ret i128 %r 1030} 1031 1032define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1033; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic: 1034; -O0: caspa x2, x3, x0, x1, [x4] 1035; 1036; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic: 1037; -O1: caspa x0, x1, x2, x3, [x4] 1038 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16 1039 %r = extractvalue { i128, i1 } %pair, 0 1040 ret i128 %r 1041} 1042 1043define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1044; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak: 1045; -O0: caspa x2, x3, x0, x1, [x4] 1046; 1047; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak: 1048; -O1: caspa x0, x1, x2, x3, [x4] 1049 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16 1050 %r = extractvalue { i128, i1 } %pair, 0 1051 ret i128 %r 1052} 1053 1054define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) { 1055; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire: 1056; -O0: caspa x2, x3, x0, x1, [x4] 1057; 1058; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire: 1059; -O1: caspa x0, x1, x2, x3, [x4] 1060 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16 1061 %r = extractvalue { i128, i1 } %pair, 0 1062 ret i128 %r 1063} 1064 1065define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1066; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak: 1067; -O0: caspa x2, x3, x0, x1, [x4] 1068; 1069; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak: 1070; -O1: caspa x0, x1, x2, x3, [x4] 1071 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16 1072 %r = extractvalue { i128, i1 } %pair, 0 1073 ret i128 %r 1074} 1075 1076define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1077; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst: 1078; -O0: caspal x2, x3, x0, x1, [x4] 1079; 1080; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst: 1081; -O1: caspal x0, x1, x2, x3, [x4] 1082 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16 1083 %r = extractvalue { i128, i1 } %pair, 0 1084 ret i128 %r 1085} 1086 1087define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1088; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak: 1089; -O0: caspal x2, x3, x0, x1, [x4] 1090; 1091; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak: 1092; -O1: caspal x0, x1, x2, x3, [x4] 1093 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16 1094 %r = extractvalue { i128, i1 } %pair, 0 1095 ret i128 %r 1096} 1097 1098define dso_local i128 @cmpxchg_i128_aligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1099; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic: 1100; -O0: caspl x2, x3, x0, x1, [x4] 1101; 1102; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic: 1103; -O1: caspl x0, x1, x2, x3, [x4] 1104 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 16 1105 %r = extractvalue { i128, i1 } %pair, 0 1106 ret i128 %r 1107} 1108 1109define dso_local i128 @cmpxchg_i128_aligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1110; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic_weak: 1111; -O0: caspl x2, x3, x0, x1, [x4] 1112; 1113; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic_weak: 1114; -O1: caspl x0, x1, x2, x3, [x4] 1115 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 16 1116 %r = extractvalue { i128, i1 } %pair, 0 1117 ret i128 %r 1118} 1119 1120define dso_local i128 @cmpxchg_i128_aligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) { 1121; -O0-LABEL: cmpxchg_i128_aligned_release_acquire: 1122; -O0: caspal x2, x3, x0, x1, [x4] 1123; 1124; -O1-LABEL: cmpxchg_i128_aligned_release_acquire: 1125; -O1: caspal x0, x1, x2, x3, [x4] 1126 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 16 1127 %r = extractvalue { i128, i1 } %pair, 0 1128 ret i128 %r 1129} 1130 1131define dso_local i128 @cmpxchg_i128_aligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1132; -O0-LABEL: cmpxchg_i128_aligned_release_acquire_weak: 1133; -O0: caspal x2, x3, x0, x1, [x4] 1134; 1135; -O1-LABEL: cmpxchg_i128_aligned_release_acquire_weak: 1136; -O1: caspal x0, x1, x2, x3, [x4] 1137 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 16 1138 %r = extractvalue { i128, i1 } %pair, 0 1139 ret i128 %r 1140} 1141 1142define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1143; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst: 1144; -O0: caspal x2, x3, x0, x1, [x4] 1145; 1146; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst: 1147; -O1: caspal x0, x1, x2, x3, [x4] 1148 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16 1149 %r = extractvalue { i128, i1 } %pair, 0 1150 ret i128 %r 1151} 1152 1153define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1154; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak: 1155; -O0: caspal x2, x3, x0, x1, [x4] 1156; 1157; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak: 1158; -O1: caspal x0, x1, x2, x3, [x4] 1159 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16 1160 %r = extractvalue { i128, i1 } %pair, 0 1161 ret i128 %r 1162} 1163 1164define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1165; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic: 1166; -O0: caspal x2, x3, x0, x1, [x4] 1167; 1168; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic: 1169; -O1: caspal x0, x1, x2, x3, [x4] 1170 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16 1171 %r = extractvalue { i128, i1 } %pair, 0 1172 ret i128 %r 1173} 1174 1175define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1176; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak: 1177; -O0: caspal x2, x3, x0, x1, [x4] 1178; 1179; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak: 1180; -O1: caspal x0, x1, x2, x3, [x4] 1181 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16 1182 %r = extractvalue { i128, i1 } %pair, 0 1183 ret i128 %r 1184} 1185 1186define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) { 1187; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire: 1188; -O0: caspal x2, x3, x0, x1, [x4] 1189; 1190; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire: 1191; -O1: caspal x0, x1, x2, x3, [x4] 1192 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16 1193 %r = extractvalue { i128, i1 } %pair, 0 1194 ret i128 %r 1195} 1196 1197define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1198; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak: 1199; -O0: caspal x2, x3, x0, x1, [x4] 1200; 1201; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak: 1202; -O1: caspal x0, x1, x2, x3, [x4] 1203 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16 1204 %r = extractvalue { i128, i1 } %pair, 0 1205 ret i128 %r 1206} 1207 1208define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1209; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst: 1210; -O0: caspal x2, x3, x0, x1, [x4] 1211; 1212; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst: 1213; -O1: caspal x0, x1, x2, x3, [x4] 1214 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16 1215 %r = extractvalue { i128, i1 } %pair, 0 1216 ret i128 %r 1217} 1218 1219define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1220; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak: 1221; -O0: caspal x2, x3, x0, x1, [x4] 1222; 1223; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak: 1224; -O1: caspal x0, x1, x2, x3, [x4] 1225 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16 1226 %r = extractvalue { i128, i1 } %pair, 0 1227 ret i128 %r 1228} 1229 1230define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) { 1231; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic: 1232; -O0: caspal x2, x3, x0, x1, [x4] 1233; 1234; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic: 1235; -O1: caspal x0, x1, x2, x3, [x4] 1236 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16 1237 %r = extractvalue { i128, i1 } %pair, 0 1238 ret i128 %r 1239} 1240 1241define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 1242; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak: 1243; -O0: caspal x2, x3, x0, x1, [x4] 1244; 1245; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak: 1246; -O1: caspal x0, x1, x2, x3, [x4] 1247 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16 1248 %r = extractvalue { i128, i1 } %pair, 0 1249 ret i128 %r 1250} 1251 1252define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) { 1253; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire: 1254; -O0: caspal x2, x3, x0, x1, [x4] 1255; 1256; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire: 1257; -O1: caspal x0, x1, x2, x3, [x4] 1258 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16 1259 %r = extractvalue { i128, i1 } %pair, 0 1260 ret i128 %r 1261} 1262 1263define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 1264; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak: 1265; -O0: caspal x2, x3, x0, x1, [x4] 1266; 1267; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak: 1268; -O1: caspal x0, x1, x2, x3, [x4] 1269 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16 1270 %r = extractvalue { i128, i1 } %pair, 0 1271 ret i128 %r 1272} 1273 1274define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 1275; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst: 1276; -O0: caspal x2, x3, x0, x1, [x4] 1277; 1278; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst: 1279; -O1: caspal x0, x1, x2, x3, [x4] 1280 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16 1281 %r = extractvalue { i128, i1 } %pair, 0 1282 ret i128 %r 1283} 1284 1285define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 1286; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak: 1287; -O0: caspal x2, x3, x0, x1, [x4] 1288; 1289; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak: 1290; -O1: caspal x0, x1, x2, x3, [x4] 1291 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16 1292 %r = extractvalue { i128, i1 } %pair, 0 1293 ret i128 %r 1294} 1295 1296define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1297; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic: 1298; CHECK: casb w0, w1, [x2] 1299 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1 1300 %r = extractvalue { i8, i1 } %pair, 0 1301 ret i8 %r 1302} 1303 1304define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1305; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak: 1306; CHECK: casb w0, w1, [x2] 1307 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1 1308 %r = extractvalue { i8, i1 } %pair, 0 1309 ret i8 %r 1310} 1311 1312define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) { 1313; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire: 1314; CHECK: casab w0, w1, [x2] 1315 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 1316 %r = extractvalue { i8, i1 } %pair, 0 1317 ret i8 %r 1318} 1319 1320define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1321; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak: 1322; CHECK: casab w0, w1, [x2] 1323 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1 1324 %r = extractvalue { i8, i1 } %pair, 0 1325 ret i8 %r 1326} 1327 1328define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1329; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst: 1330; CHECK: casalb w0, w1, [x2] 1331 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 1332 %r = extractvalue { i8, i1 } %pair, 0 1333 ret i8 %r 1334} 1335 1336define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1337; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak: 1338; CHECK: casalb w0, w1, [x2] 1339 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1 1340 %r = extractvalue { i8, i1 } %pair, 0 1341 ret i8 %r 1342} 1343 1344define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1345; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic: 1346; CHECK: casab w0, w1, [x2] 1347 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 1348 %r = extractvalue { i8, i1 } %pair, 0 1349 ret i8 %r 1350} 1351 1352define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1353; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak: 1354; CHECK: casab w0, w1, [x2] 1355 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1 1356 %r = extractvalue { i8, i1 } %pair, 0 1357 ret i8 %r 1358} 1359 1360define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) { 1361; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire: 1362; CHECK: casab w0, w1, [x2] 1363 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 1364 %r = extractvalue { i8, i1 } %pair, 0 1365 ret i8 %r 1366} 1367 1368define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1369; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak: 1370; CHECK: casab w0, w1, [x2] 1371 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1 1372 %r = extractvalue { i8, i1 } %pair, 0 1373 ret i8 %r 1374} 1375 1376define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1377; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst: 1378; CHECK: casalb w0, w1, [x2] 1379 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 1380 %r = extractvalue { i8, i1 } %pair, 0 1381 ret i8 %r 1382} 1383 1384define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1385; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak: 1386; CHECK: casalb w0, w1, [x2] 1387 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1 1388 %r = extractvalue { i8, i1 } %pair, 0 1389 ret i8 %r 1390} 1391 1392define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1393; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic: 1394; CHECK: caslb w0, w1, [x2] 1395 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 1396 %r = extractvalue { i8, i1 } %pair, 0 1397 ret i8 %r 1398} 1399 1400define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1401; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak: 1402; CHECK: caslb w0, w1, [x2] 1403 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1 1404 %r = extractvalue { i8, i1 } %pair, 0 1405 ret i8 %r 1406} 1407 1408define dso_local i8 @cmpxchg_i8_unaligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) { 1409; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire: 1410; CHECK: casalb w0, w1, [x2] 1411 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1 1412 %r = extractvalue { i8, i1 } %pair, 0 1413 ret i8 %r 1414} 1415 1416define dso_local i8 @cmpxchg_i8_unaligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1417; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire_weak: 1418; CHECK: casalb w0, w1, [x2] 1419 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1 1420 %r = extractvalue { i8, i1 } %pair, 0 1421 ret i8 %r 1422} 1423 1424define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1425; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst: 1426; CHECK: casalb w0, w1, [x2] 1427 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 1428 %r = extractvalue { i8, i1 } %pair, 0 1429 ret i8 %r 1430} 1431 1432define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1433; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak: 1434; CHECK: casalb w0, w1, [x2] 1435 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1 1436 %r = extractvalue { i8, i1 } %pair, 0 1437 ret i8 %r 1438} 1439 1440define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1441; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic: 1442; CHECK: casalb w0, w1, [x2] 1443 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 1444 %r = extractvalue { i8, i1 } %pair, 0 1445 ret i8 %r 1446} 1447 1448define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1449; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak: 1450; CHECK: casalb w0, w1, [x2] 1451 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1 1452 %r = extractvalue { i8, i1 } %pair, 0 1453 ret i8 %r 1454} 1455 1456define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) { 1457; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire: 1458; CHECK: casalb w0, w1, [x2] 1459 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 1460 %r = extractvalue { i8, i1 } %pair, 0 1461 ret i8 %r 1462} 1463 1464define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1465; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak: 1466; CHECK: casalb w0, w1, [x2] 1467 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1 1468 %r = extractvalue { i8, i1 } %pair, 0 1469 ret i8 %r 1470} 1471 1472define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1473; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst: 1474; CHECK: casalb w0, w1, [x2] 1475 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 1476 %r = extractvalue { i8, i1 } %pair, 0 1477 ret i8 %r 1478} 1479 1480define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1481; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak: 1482; CHECK: casalb w0, w1, [x2] 1483 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1 1484 %r = extractvalue { i8, i1 } %pair, 0 1485 ret i8 %r 1486} 1487 1488define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) { 1489; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic: 1490; CHECK: casalb w0, w1, [x2] 1491 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 1492 %r = extractvalue { i8, i1 } %pair, 0 1493 ret i8 %r 1494} 1495 1496define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) { 1497; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak: 1498; CHECK: casalb w0, w1, [x2] 1499 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1 1500 %r = extractvalue { i8, i1 } %pair, 0 1501 ret i8 %r 1502} 1503 1504define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) { 1505; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire: 1506; CHECK: casalb w0, w1, [x2] 1507 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 1508 %r = extractvalue { i8, i1 } %pair, 0 1509 ret i8 %r 1510} 1511 1512define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) { 1513; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak: 1514; CHECK: casalb w0, w1, [x2] 1515 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1 1516 %r = extractvalue { i8, i1 } %pair, 0 1517 ret i8 %r 1518} 1519 1520define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) { 1521; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst: 1522; CHECK: casalb w0, w1, [x2] 1523 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 1524 %r = extractvalue { i8, i1 } %pair, 0 1525 ret i8 %r 1526} 1527 1528define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) { 1529; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak: 1530; CHECK: casalb w0, w1, [x2] 1531 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1 1532 %r = extractvalue { i8, i1 } %pair, 0 1533 ret i8 %r 1534} 1535 1536define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1537; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic: 1538; CHECK: bl __atomic_compare_exchange 1539 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1 1540 %r = extractvalue { i16, i1 } %pair, 0 1541 ret i16 %r 1542} 1543 1544define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1545; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic_weak: 1546; CHECK: bl __atomic_compare_exchange 1547 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1 1548 %r = extractvalue { i16, i1 } %pair, 0 1549 ret i16 %r 1550} 1551 1552define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) { 1553; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire: 1554; CHECK: bl __atomic_compare_exchange 1555 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1 1556 %r = extractvalue { i16, i1 } %pair, 0 1557 ret i16 %r 1558} 1559 1560define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1561; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire_weak: 1562; CHECK: bl __atomic_compare_exchange 1563 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1 1564 %r = extractvalue { i16, i1 } %pair, 0 1565 ret i16 %r 1566} 1567 1568define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1569; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst: 1570; CHECK: bl __atomic_compare_exchange 1571 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1 1572 %r = extractvalue { i16, i1 } %pair, 0 1573 ret i16 %r 1574} 1575 1576define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1577; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst_weak: 1578; CHECK: bl __atomic_compare_exchange 1579 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1 1580 %r = extractvalue { i16, i1 } %pair, 0 1581 ret i16 %r 1582} 1583 1584define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1585; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic: 1586; CHECK: bl __atomic_compare_exchange 1587 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1 1588 %r = extractvalue { i16, i1 } %pair, 0 1589 ret i16 %r 1590} 1591 1592define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1593; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic_weak: 1594; CHECK: bl __atomic_compare_exchange 1595 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1 1596 %r = extractvalue { i16, i1 } %pair, 0 1597 ret i16 %r 1598} 1599 1600define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) { 1601; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire: 1602; CHECK: bl __atomic_compare_exchange 1603 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1 1604 %r = extractvalue { i16, i1 } %pair, 0 1605 ret i16 %r 1606} 1607 1608define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1609; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire_weak: 1610; CHECK: bl __atomic_compare_exchange 1611 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1 1612 %r = extractvalue { i16, i1 } %pair, 0 1613 ret i16 %r 1614} 1615 1616define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1617; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst: 1618; CHECK: bl __atomic_compare_exchange 1619 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1 1620 %r = extractvalue { i16, i1 } %pair, 0 1621 ret i16 %r 1622} 1623 1624define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1625; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst_weak: 1626; CHECK: bl __atomic_compare_exchange 1627 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1 1628 %r = extractvalue { i16, i1 } %pair, 0 1629 ret i16 %r 1630} 1631 1632define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1633; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic: 1634; CHECK: bl __atomic_compare_exchange 1635 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 1 1636 %r = extractvalue { i16, i1 } %pair, 0 1637 ret i16 %r 1638} 1639 1640define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1641; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic_weak: 1642; CHECK: bl __atomic_compare_exchange 1643 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 1 1644 %r = extractvalue { i16, i1 } %pair, 0 1645 ret i16 %r 1646} 1647 1648define dso_local i16 @cmpxchg_i16_unaligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) { 1649; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire: 1650; CHECK: bl __atomic_compare_exchange 1651 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 1 1652 %r = extractvalue { i16, i1 } %pair, 0 1653 ret i16 %r 1654} 1655 1656define dso_local i16 @cmpxchg_i16_unaligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1657; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire_weak: 1658; CHECK: bl __atomic_compare_exchange 1659 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 1 1660 %r = extractvalue { i16, i1 } %pair, 0 1661 ret i16 %r 1662} 1663 1664define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1665; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst: 1666; CHECK: bl __atomic_compare_exchange 1667 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1 1668 %r = extractvalue { i16, i1 } %pair, 0 1669 ret i16 %r 1670} 1671 1672define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1673; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst_weak: 1674; CHECK: bl __atomic_compare_exchange 1675 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1 1676 %r = extractvalue { i16, i1 } %pair, 0 1677 ret i16 %r 1678} 1679 1680define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1681; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic: 1682; CHECK: bl __atomic_compare_exchange 1683 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1 1684 %r = extractvalue { i16, i1 } %pair, 0 1685 ret i16 %r 1686} 1687 1688define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1689; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic_weak: 1690; CHECK: bl __atomic_compare_exchange 1691 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1 1692 %r = extractvalue { i16, i1 } %pair, 0 1693 ret i16 %r 1694} 1695 1696define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) { 1697; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire: 1698; CHECK: bl __atomic_compare_exchange 1699 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1 1700 %r = extractvalue { i16, i1 } %pair, 0 1701 ret i16 %r 1702} 1703 1704define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1705; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire_weak: 1706; CHECK: bl __atomic_compare_exchange 1707 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1 1708 %r = extractvalue { i16, i1 } %pair, 0 1709 ret i16 %r 1710} 1711 1712define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1713; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst: 1714; CHECK: bl __atomic_compare_exchange 1715 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1 1716 %r = extractvalue { i16, i1 } %pair, 0 1717 ret i16 %r 1718} 1719 1720define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1721; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst_weak: 1722; CHECK: bl __atomic_compare_exchange 1723 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1 1724 %r = extractvalue { i16, i1 } %pair, 0 1725 ret i16 %r 1726} 1727 1728define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) { 1729; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic: 1730; CHECK: bl __atomic_compare_exchange 1731 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1 1732 %r = extractvalue { i16, i1 } %pair, 0 1733 ret i16 %r 1734} 1735 1736define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) { 1737; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic_weak: 1738; CHECK: bl __atomic_compare_exchange 1739 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1 1740 %r = extractvalue { i16, i1 } %pair, 0 1741 ret i16 %r 1742} 1743 1744define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) { 1745; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire: 1746; CHECK: bl __atomic_compare_exchange 1747 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1 1748 %r = extractvalue { i16, i1 } %pair, 0 1749 ret i16 %r 1750} 1751 1752define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) { 1753; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire_weak: 1754; CHECK: bl __atomic_compare_exchange 1755 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1 1756 %r = extractvalue { i16, i1 } %pair, 0 1757 ret i16 %r 1758} 1759 1760define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) { 1761; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst: 1762; CHECK: bl __atomic_compare_exchange 1763 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1 1764 %r = extractvalue { i16, i1 } %pair, 0 1765 ret i16 %r 1766} 1767 1768define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) { 1769; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst_weak: 1770; CHECK: bl __atomic_compare_exchange 1771 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1 1772 %r = extractvalue { i16, i1 } %pair, 0 1773 ret i16 %r 1774} 1775 1776define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1777; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic: 1778; CHECK: bl __atomic_compare_exchange 1779 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1 1780 %r = extractvalue { i32, i1 } %pair, 0 1781 ret i32 %r 1782} 1783 1784define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1785; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic_weak: 1786; CHECK: bl __atomic_compare_exchange 1787 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1 1788 %r = extractvalue { i32, i1 } %pair, 0 1789 ret i32 %r 1790} 1791 1792define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) { 1793; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire: 1794; CHECK: bl __atomic_compare_exchange 1795 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1 1796 %r = extractvalue { i32, i1 } %pair, 0 1797 ret i32 %r 1798} 1799 1800define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1801; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire_weak: 1802; CHECK: bl __atomic_compare_exchange 1803 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1 1804 %r = extractvalue { i32, i1 } %pair, 0 1805 ret i32 %r 1806} 1807 1808define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1809; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst: 1810; CHECK: bl __atomic_compare_exchange 1811 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1 1812 %r = extractvalue { i32, i1 } %pair, 0 1813 ret i32 %r 1814} 1815 1816define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1817; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst_weak: 1818; CHECK: bl __atomic_compare_exchange 1819 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1 1820 %r = extractvalue { i32, i1 } %pair, 0 1821 ret i32 %r 1822} 1823 1824define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1825; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic: 1826; CHECK: bl __atomic_compare_exchange 1827 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1 1828 %r = extractvalue { i32, i1 } %pair, 0 1829 ret i32 %r 1830} 1831 1832define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1833; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic_weak: 1834; CHECK: bl __atomic_compare_exchange 1835 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1 1836 %r = extractvalue { i32, i1 } %pair, 0 1837 ret i32 %r 1838} 1839 1840define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) { 1841; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire: 1842; CHECK: bl __atomic_compare_exchange 1843 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1 1844 %r = extractvalue { i32, i1 } %pair, 0 1845 ret i32 %r 1846} 1847 1848define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1849; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire_weak: 1850; CHECK: bl __atomic_compare_exchange 1851 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1 1852 %r = extractvalue { i32, i1 } %pair, 0 1853 ret i32 %r 1854} 1855 1856define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1857; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst: 1858; CHECK: bl __atomic_compare_exchange 1859 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1 1860 %r = extractvalue { i32, i1 } %pair, 0 1861 ret i32 %r 1862} 1863 1864define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1865; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst_weak: 1866; CHECK: bl __atomic_compare_exchange 1867 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1 1868 %r = extractvalue { i32, i1 } %pair, 0 1869 ret i32 %r 1870} 1871 1872define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1873; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic: 1874; CHECK: bl __atomic_compare_exchange 1875 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 1 1876 %r = extractvalue { i32, i1 } %pair, 0 1877 ret i32 %r 1878} 1879 1880define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1881; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic_weak: 1882; CHECK: bl __atomic_compare_exchange 1883 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 1 1884 %r = extractvalue { i32, i1 } %pair, 0 1885 ret i32 %r 1886} 1887 1888define dso_local i32 @cmpxchg_i32_unaligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) { 1889; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire: 1890; CHECK: bl __atomic_compare_exchange 1891 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 1 1892 %r = extractvalue { i32, i1 } %pair, 0 1893 ret i32 %r 1894} 1895 1896define dso_local i32 @cmpxchg_i32_unaligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1897; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire_weak: 1898; CHECK: bl __atomic_compare_exchange 1899 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 1 1900 %r = extractvalue { i32, i1 } %pair, 0 1901 ret i32 %r 1902} 1903 1904define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1905; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst: 1906; CHECK: bl __atomic_compare_exchange 1907 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1 1908 %r = extractvalue { i32, i1 } %pair, 0 1909 ret i32 %r 1910} 1911 1912define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1913; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst_weak: 1914; CHECK: bl __atomic_compare_exchange 1915 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1 1916 %r = extractvalue { i32, i1 } %pair, 0 1917 ret i32 %r 1918} 1919 1920define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1921; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic: 1922; CHECK: bl __atomic_compare_exchange 1923 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1 1924 %r = extractvalue { i32, i1 } %pair, 0 1925 ret i32 %r 1926} 1927 1928define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1929; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic_weak: 1930; CHECK: bl __atomic_compare_exchange 1931 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1 1932 %r = extractvalue { i32, i1 } %pair, 0 1933 ret i32 %r 1934} 1935 1936define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) { 1937; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire: 1938; CHECK: bl __atomic_compare_exchange 1939 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1 1940 %r = extractvalue { i32, i1 } %pair, 0 1941 ret i32 %r 1942} 1943 1944define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1945; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire_weak: 1946; CHECK: bl __atomic_compare_exchange 1947 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1 1948 %r = extractvalue { i32, i1 } %pair, 0 1949 ret i32 %r 1950} 1951 1952define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 1953; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst: 1954; CHECK: bl __atomic_compare_exchange 1955 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1 1956 %r = extractvalue { i32, i1 } %pair, 0 1957 ret i32 %r 1958} 1959 1960define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 1961; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst_weak: 1962; CHECK: bl __atomic_compare_exchange 1963 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1 1964 %r = extractvalue { i32, i1 } %pair, 0 1965 ret i32 %r 1966} 1967 1968define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) { 1969; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic: 1970; CHECK: bl __atomic_compare_exchange 1971 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1 1972 %r = extractvalue { i32, i1 } %pair, 0 1973 ret i32 %r 1974} 1975 1976define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) { 1977; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic_weak: 1978; CHECK: bl __atomic_compare_exchange 1979 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1 1980 %r = extractvalue { i32, i1 } %pair, 0 1981 ret i32 %r 1982} 1983 1984define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) { 1985; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire: 1986; CHECK: bl __atomic_compare_exchange 1987 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1 1988 %r = extractvalue { i32, i1 } %pair, 0 1989 ret i32 %r 1990} 1991 1992define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) { 1993; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire_weak: 1994; CHECK: bl __atomic_compare_exchange 1995 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1 1996 %r = extractvalue { i32, i1 } %pair, 0 1997 ret i32 %r 1998} 1999 2000define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) { 2001; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst: 2002; CHECK: bl __atomic_compare_exchange 2003 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1 2004 %r = extractvalue { i32, i1 } %pair, 0 2005 ret i32 %r 2006} 2007 2008define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) { 2009; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst_weak: 2010; CHECK: bl __atomic_compare_exchange 2011 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1 2012 %r = extractvalue { i32, i1 } %pair, 0 2013 ret i32 %r 2014} 2015 2016define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) { 2017; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic: 2018; CHECK: bl __atomic_compare_exchange 2019 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1 2020 %r = extractvalue { i64, i1 } %pair, 0 2021 ret i64 %r 2022} 2023 2024define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 2025; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic_weak: 2026; CHECK: bl __atomic_compare_exchange 2027 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1 2028 %r = extractvalue { i64, i1 } %pair, 0 2029 ret i64 %r 2030} 2031 2032define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) { 2033; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire: 2034; CHECK: bl __atomic_compare_exchange 2035 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1 2036 %r = extractvalue { i64, i1 } %pair, 0 2037 ret i64 %r 2038} 2039 2040define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 2041; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire_weak: 2042; CHECK: bl __atomic_compare_exchange 2043 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1 2044 %r = extractvalue { i64, i1 } %pair, 0 2045 ret i64 %r 2046} 2047 2048define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 2049; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst: 2050; CHECK: bl __atomic_compare_exchange 2051 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1 2052 %r = extractvalue { i64, i1 } %pair, 0 2053 ret i64 %r 2054} 2055 2056define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 2057; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst_weak: 2058; CHECK: bl __atomic_compare_exchange 2059 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1 2060 %r = extractvalue { i64, i1 } %pair, 0 2061 ret i64 %r 2062} 2063 2064define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) { 2065; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic: 2066; CHECK: bl __atomic_compare_exchange 2067 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1 2068 %r = extractvalue { i64, i1 } %pair, 0 2069 ret i64 %r 2070} 2071 2072define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 2073; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic_weak: 2074; CHECK: bl __atomic_compare_exchange 2075 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1 2076 %r = extractvalue { i64, i1 } %pair, 0 2077 ret i64 %r 2078} 2079 2080define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) { 2081; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire: 2082; CHECK: bl __atomic_compare_exchange 2083 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1 2084 %r = extractvalue { i64, i1 } %pair, 0 2085 ret i64 %r 2086} 2087 2088define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 2089; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire_weak: 2090; CHECK: bl __atomic_compare_exchange 2091 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1 2092 %r = extractvalue { i64, i1 } %pair, 0 2093 ret i64 %r 2094} 2095 2096define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 2097; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst: 2098; CHECK: bl __atomic_compare_exchange 2099 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1 2100 %r = extractvalue { i64, i1 } %pair, 0 2101 ret i64 %r 2102} 2103 2104define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 2105; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst_weak: 2106; CHECK: bl __atomic_compare_exchange 2107 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1 2108 %r = extractvalue { i64, i1 } %pair, 0 2109 ret i64 %r 2110} 2111 2112define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) { 2113; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic: 2114; CHECK: bl __atomic_compare_exchange 2115 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 1 2116 %r = extractvalue { i64, i1 } %pair, 0 2117 ret i64 %r 2118} 2119 2120define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 2121; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic_weak: 2122; CHECK: bl __atomic_compare_exchange 2123 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 1 2124 %r = extractvalue { i64, i1 } %pair, 0 2125 ret i64 %r 2126} 2127 2128define dso_local i64 @cmpxchg_i64_unaligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) { 2129; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire: 2130; CHECK: bl __atomic_compare_exchange 2131 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 1 2132 %r = extractvalue { i64, i1 } %pair, 0 2133 ret i64 %r 2134} 2135 2136define dso_local i64 @cmpxchg_i64_unaligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 2137; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire_weak: 2138; CHECK: bl __atomic_compare_exchange 2139 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 1 2140 %r = extractvalue { i64, i1 } %pair, 0 2141 ret i64 %r 2142} 2143 2144define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 2145; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst: 2146; CHECK: bl __atomic_compare_exchange 2147 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1 2148 %r = extractvalue { i64, i1 } %pair, 0 2149 ret i64 %r 2150} 2151 2152define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 2153; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst_weak: 2154; CHECK: bl __atomic_compare_exchange 2155 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1 2156 %r = extractvalue { i64, i1 } %pair, 0 2157 ret i64 %r 2158} 2159 2160define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) { 2161; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic: 2162; CHECK: bl __atomic_compare_exchange 2163 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1 2164 %r = extractvalue { i64, i1 } %pair, 0 2165 ret i64 %r 2166} 2167 2168define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 2169; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic_weak: 2170; CHECK: bl __atomic_compare_exchange 2171 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1 2172 %r = extractvalue { i64, i1 } %pair, 0 2173 ret i64 %r 2174} 2175 2176define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) { 2177; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire: 2178; CHECK: bl __atomic_compare_exchange 2179 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1 2180 %r = extractvalue { i64, i1 } %pair, 0 2181 ret i64 %r 2182} 2183 2184define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 2185; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire_weak: 2186; CHECK: bl __atomic_compare_exchange 2187 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1 2188 %r = extractvalue { i64, i1 } %pair, 0 2189 ret i64 %r 2190} 2191 2192define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 2193; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst: 2194; CHECK: bl __atomic_compare_exchange 2195 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1 2196 %r = extractvalue { i64, i1 } %pair, 0 2197 ret i64 %r 2198} 2199 2200define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 2201; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst_weak: 2202; CHECK: bl __atomic_compare_exchange 2203 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1 2204 %r = extractvalue { i64, i1 } %pair, 0 2205 ret i64 %r 2206} 2207 2208define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) { 2209; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic: 2210; CHECK: bl __atomic_compare_exchange 2211 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1 2212 %r = extractvalue { i64, i1 } %pair, 0 2213 ret i64 %r 2214} 2215 2216define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) { 2217; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic_weak: 2218; CHECK: bl __atomic_compare_exchange 2219 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1 2220 %r = extractvalue { i64, i1 } %pair, 0 2221 ret i64 %r 2222} 2223 2224define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) { 2225; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire: 2226; CHECK: bl __atomic_compare_exchange 2227 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1 2228 %r = extractvalue { i64, i1 } %pair, 0 2229 ret i64 %r 2230} 2231 2232define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) { 2233; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire_weak: 2234; CHECK: bl __atomic_compare_exchange 2235 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1 2236 %r = extractvalue { i64, i1 } %pair, 0 2237 ret i64 %r 2238} 2239 2240define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) { 2241; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst: 2242; CHECK: bl __atomic_compare_exchange 2243 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1 2244 %r = extractvalue { i64, i1 } %pair, 0 2245 ret i64 %r 2246} 2247 2248define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) { 2249; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst_weak: 2250; CHECK: bl __atomic_compare_exchange 2251 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1 2252 %r = extractvalue { i64, i1 } %pair, 0 2253 ret i64 %r 2254} 2255 2256define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2257; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic: 2258; CHECK: bl __atomic_compare_exchange 2259 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1 2260 %r = extractvalue { i128, i1 } %pair, 0 2261 ret i128 %r 2262} 2263 2264define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2265; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic_weak: 2266; CHECK: bl __atomic_compare_exchange 2267 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1 2268 %r = extractvalue { i128, i1 } %pair, 0 2269 ret i128 %r 2270} 2271 2272define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) { 2273; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire: 2274; CHECK: bl __atomic_compare_exchange 2275 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1 2276 %r = extractvalue { i128, i1 } %pair, 0 2277 ret i128 %r 2278} 2279 2280define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2281; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire_weak: 2282; CHECK: bl __atomic_compare_exchange 2283 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1 2284 %r = extractvalue { i128, i1 } %pair, 0 2285 ret i128 %r 2286} 2287 2288define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2289; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst: 2290; CHECK: bl __atomic_compare_exchange 2291 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1 2292 %r = extractvalue { i128, i1 } %pair, 0 2293 ret i128 %r 2294} 2295 2296define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2297; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst_weak: 2298; CHECK: bl __atomic_compare_exchange 2299 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1 2300 %r = extractvalue { i128, i1 } %pair, 0 2301 ret i128 %r 2302} 2303 2304define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2305; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic: 2306; CHECK: bl __atomic_compare_exchange 2307 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1 2308 %r = extractvalue { i128, i1 } %pair, 0 2309 ret i128 %r 2310} 2311 2312define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2313; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic_weak: 2314; CHECK: bl __atomic_compare_exchange 2315 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1 2316 %r = extractvalue { i128, i1 } %pair, 0 2317 ret i128 %r 2318} 2319 2320define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) { 2321; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire: 2322; CHECK: bl __atomic_compare_exchange 2323 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1 2324 %r = extractvalue { i128, i1 } %pair, 0 2325 ret i128 %r 2326} 2327 2328define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2329; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire_weak: 2330; CHECK: bl __atomic_compare_exchange 2331 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1 2332 %r = extractvalue { i128, i1 } %pair, 0 2333 ret i128 %r 2334} 2335 2336define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2337; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst: 2338; CHECK: bl __atomic_compare_exchange 2339 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1 2340 %r = extractvalue { i128, i1 } %pair, 0 2341 ret i128 %r 2342} 2343 2344define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2345; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst_weak: 2346; CHECK: bl __atomic_compare_exchange 2347 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1 2348 %r = extractvalue { i128, i1 } %pair, 0 2349 ret i128 %r 2350} 2351 2352define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2353; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic: 2354; CHECK: bl __atomic_compare_exchange 2355 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 1 2356 %r = extractvalue { i128, i1 } %pair, 0 2357 ret i128 %r 2358} 2359 2360define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2361; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic_weak: 2362; CHECK: bl __atomic_compare_exchange 2363 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 1 2364 %r = extractvalue { i128, i1 } %pair, 0 2365 ret i128 %r 2366} 2367 2368define dso_local i128 @cmpxchg_i128_unaligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) { 2369; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire: 2370; CHECK: bl __atomic_compare_exchange 2371 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 1 2372 %r = extractvalue { i128, i1 } %pair, 0 2373 ret i128 %r 2374} 2375 2376define dso_local i128 @cmpxchg_i128_unaligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2377; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire_weak: 2378; CHECK: bl __atomic_compare_exchange 2379 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 1 2380 %r = extractvalue { i128, i1 } %pair, 0 2381 ret i128 %r 2382} 2383 2384define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2385; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst: 2386; CHECK: bl __atomic_compare_exchange 2387 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1 2388 %r = extractvalue { i128, i1 } %pair, 0 2389 ret i128 %r 2390} 2391 2392define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2393; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst_weak: 2394; CHECK: bl __atomic_compare_exchange 2395 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1 2396 %r = extractvalue { i128, i1 } %pair, 0 2397 ret i128 %r 2398} 2399 2400define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2401; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic: 2402; CHECK: bl __atomic_compare_exchange 2403 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1 2404 %r = extractvalue { i128, i1 } %pair, 0 2405 ret i128 %r 2406} 2407 2408define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2409; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic_weak: 2410; CHECK: bl __atomic_compare_exchange 2411 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1 2412 %r = extractvalue { i128, i1 } %pair, 0 2413 ret i128 %r 2414} 2415 2416define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) { 2417; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire: 2418; CHECK: bl __atomic_compare_exchange 2419 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1 2420 %r = extractvalue { i128, i1 } %pair, 0 2421 ret i128 %r 2422} 2423 2424define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2425; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire_weak: 2426; CHECK: bl __atomic_compare_exchange 2427 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1 2428 %r = extractvalue { i128, i1 } %pair, 0 2429 ret i128 %r 2430} 2431 2432define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2433; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst: 2434; CHECK: bl __atomic_compare_exchange 2435 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1 2436 %r = extractvalue { i128, i1 } %pair, 0 2437 ret i128 %r 2438} 2439 2440define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2441; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst_weak: 2442; CHECK: bl __atomic_compare_exchange 2443 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1 2444 %r = extractvalue { i128, i1 } %pair, 0 2445 ret i128 %r 2446} 2447 2448define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) { 2449; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic: 2450; CHECK: bl __atomic_compare_exchange 2451 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1 2452 %r = extractvalue { i128, i1 } %pair, 0 2453 ret i128 %r 2454} 2455 2456define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) { 2457; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic_weak: 2458; CHECK: bl __atomic_compare_exchange 2459 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1 2460 %r = extractvalue { i128, i1 } %pair, 0 2461 ret i128 %r 2462} 2463 2464define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) { 2465; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire: 2466; CHECK: bl __atomic_compare_exchange 2467 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1 2468 %r = extractvalue { i128, i1 } %pair, 0 2469 ret i128 %r 2470} 2471 2472define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) { 2473; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire_weak: 2474; CHECK: bl __atomic_compare_exchange 2475 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1 2476 %r = extractvalue { i128, i1 } %pair, 0 2477 ret i128 %r 2478} 2479 2480define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) { 2481; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst: 2482; CHECK: bl __atomic_compare_exchange 2483 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1 2484 %r = extractvalue { i128, i1 } %pair, 0 2485 ret i128 %r 2486} 2487 2488define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) { 2489; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst_weak: 2490; CHECK: bl __atomic_compare_exchange 2491 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1 2492 %r = extractvalue { i128, i1 } %pair, 0 2493 ret i128 %r 2494} 2495