1; RUN: opt < %s -tsan -S | FileCheck %s 2; Check that atomic memory operations are converted to calls into ThreadSanitizer runtime. 3target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 4 5define i8 @atomic8_load_unordered(i8* %a) nounwind uwtable { 6entry: 7 %0 = load atomic i8, i8* %a unordered, align 1, !dbg !7 8 ret i8 %0, !dbg !7 9} 10; CHECK-LABEL: atomic8_load_unordered 11; CHECK: call i8 @__tsan_atomic8_load(i8* %a, i32 0), !dbg 12 13define i8 @atomic8_load_monotonic(i8* %a) nounwind uwtable { 14entry: 15 %0 = load atomic i8, i8* %a monotonic, align 1, !dbg !7 16 ret i8 %0, !dbg !7 17} 18; CHECK-LABEL: atomic8_load_monotonic 19; CHECK: call i8 @__tsan_atomic8_load(i8* %a, i32 0), !dbg 20 21define i8 @atomic8_load_acquire(i8* %a) nounwind uwtable { 22entry: 23 %0 = load atomic i8, i8* %a acquire, align 1, !dbg !7 24 ret i8 %0, !dbg !7 25} 26; CHECK-LABEL: atomic8_load_acquire 27; CHECK: call i8 @__tsan_atomic8_load(i8* %a, i32 2), !dbg 28 29define i8 @atomic8_load_seq_cst(i8* %a) nounwind uwtable { 30entry: 31 %0 = load atomic i8, i8* %a seq_cst, align 1, !dbg !7 32 ret i8 %0, !dbg !7 33} 34; CHECK-LABEL: atomic8_load_seq_cst 35; CHECK: call i8 @__tsan_atomic8_load(i8* %a, i32 5), !dbg 36 37define void @atomic8_store_unordered(i8* %a) nounwind uwtable { 38entry: 39 store atomic i8 0, i8* %a unordered, align 1, !dbg !7 40 ret void, !dbg !7 41} 42; CHECK-LABEL: atomic8_store_unordered 43; CHECK: call void @__tsan_atomic8_store(i8* %a, i8 0, i32 0), !dbg 44 45define void @atomic8_store_monotonic(i8* %a) nounwind uwtable { 46entry: 47 store atomic i8 0, i8* %a monotonic, align 1, !dbg !7 48 ret void, !dbg !7 49} 50; CHECK-LABEL: atomic8_store_monotonic 51; CHECK: call void @__tsan_atomic8_store(i8* %a, i8 0, i32 0), !dbg 52 53define void @atomic8_store_release(i8* %a) nounwind uwtable { 54entry: 55 store atomic i8 0, i8* %a release, align 1, !dbg !7 56 ret void, !dbg !7 57} 58; CHECK-LABEL: atomic8_store_release 59; CHECK: call void @__tsan_atomic8_store(i8* %a, i8 0, i32 3), !dbg 60 61define void @atomic8_store_seq_cst(i8* %a) nounwind uwtable { 62entry: 63 store atomic i8 0, i8* %a seq_cst, align 1, !dbg !7 64 ret void, !dbg !7 65} 66; CHECK-LABEL: atomic8_store_seq_cst 67; CHECK: call void @__tsan_atomic8_store(i8* %a, i8 0, i32 5), !dbg 68 69define void @atomic8_xchg_monotonic(i8* %a) nounwind uwtable { 70entry: 71 atomicrmw xchg i8* %a, i8 0 monotonic, !dbg !7 72 ret void, !dbg !7 73} 74; CHECK-LABEL: atomic8_xchg_monotonic 75; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 0), !dbg 76 77define void @atomic8_add_monotonic(i8* %a) nounwind uwtable { 78entry: 79 atomicrmw add i8* %a, i8 0 monotonic, !dbg !7 80 ret void, !dbg !7 81} 82; CHECK-LABEL: atomic8_add_monotonic 83; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 0), !dbg 84 85define void @atomic8_sub_monotonic(i8* %a) nounwind uwtable { 86entry: 87 atomicrmw sub i8* %a, i8 0 monotonic, !dbg !7 88 ret void, !dbg !7 89} 90; CHECK-LABEL: atomic8_sub_monotonic 91; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 0), !dbg 92 93define void @atomic8_and_monotonic(i8* %a) nounwind uwtable { 94entry: 95 atomicrmw and i8* %a, i8 0 monotonic, !dbg !7 96 ret void, !dbg !7 97} 98; CHECK-LABEL: atomic8_and_monotonic 99; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 0), !dbg 100 101define void @atomic8_or_monotonic(i8* %a) nounwind uwtable { 102entry: 103 atomicrmw or i8* %a, i8 0 monotonic, !dbg !7 104 ret void, !dbg !7 105} 106; CHECK-LABEL: atomic8_or_monotonic 107; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 0), !dbg 108 109define void @atomic8_xor_monotonic(i8* %a) nounwind uwtable { 110entry: 111 atomicrmw xor i8* %a, i8 0 monotonic, !dbg !7 112 ret void, !dbg !7 113} 114; CHECK-LABEL: atomic8_xor_monotonic 115; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 0), !dbg 116 117define void @atomic8_nand_monotonic(i8* %a) nounwind uwtable { 118entry: 119 atomicrmw nand i8* %a, i8 0 monotonic, !dbg !7 120 ret void, !dbg !7 121} 122; CHECK-LABEL: atomic8_nand_monotonic 123; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 0), !dbg 124 125define void @atomic8_xchg_acquire(i8* %a) nounwind uwtable { 126entry: 127 atomicrmw xchg i8* %a, i8 0 acquire, !dbg !7 128 ret void, !dbg !7 129} 130; CHECK-LABEL: atomic8_xchg_acquire 131; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 2), !dbg 132 133define void @atomic8_add_acquire(i8* %a) nounwind uwtable { 134entry: 135 atomicrmw add i8* %a, i8 0 acquire, !dbg !7 136 ret void, !dbg !7 137} 138; CHECK-LABEL: atomic8_add_acquire 139; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 2), !dbg 140 141define void @atomic8_sub_acquire(i8* %a) nounwind uwtable { 142entry: 143 atomicrmw sub i8* %a, i8 0 acquire, !dbg !7 144 ret void, !dbg !7 145} 146; CHECK-LABEL: atomic8_sub_acquire 147; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 2), !dbg 148 149define void @atomic8_and_acquire(i8* %a) nounwind uwtable { 150entry: 151 atomicrmw and i8* %a, i8 0 acquire, !dbg !7 152 ret void, !dbg !7 153} 154; CHECK-LABEL: atomic8_and_acquire 155; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 2), !dbg 156 157define void @atomic8_or_acquire(i8* %a) nounwind uwtable { 158entry: 159 atomicrmw or i8* %a, i8 0 acquire, !dbg !7 160 ret void, !dbg !7 161} 162; CHECK-LABEL: atomic8_or_acquire 163; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 2), !dbg 164 165define void @atomic8_xor_acquire(i8* %a) nounwind uwtable { 166entry: 167 atomicrmw xor i8* %a, i8 0 acquire, !dbg !7 168 ret void, !dbg !7 169} 170; CHECK-LABEL: atomic8_xor_acquire 171; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 2), !dbg 172 173define void @atomic8_nand_acquire(i8* %a) nounwind uwtable { 174entry: 175 atomicrmw nand i8* %a, i8 0 acquire, !dbg !7 176 ret void, !dbg !7 177} 178; CHECK-LABEL: atomic8_nand_acquire 179; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 2), !dbg 180 181define void @atomic8_xchg_release(i8* %a) nounwind uwtable { 182entry: 183 atomicrmw xchg i8* %a, i8 0 release, !dbg !7 184 ret void, !dbg !7 185} 186; CHECK-LABEL: atomic8_xchg_release 187; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 3), !dbg 188 189define void @atomic8_add_release(i8* %a) nounwind uwtable { 190entry: 191 atomicrmw add i8* %a, i8 0 release, !dbg !7 192 ret void, !dbg !7 193} 194; CHECK-LABEL: atomic8_add_release 195; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 3), !dbg 196 197define void @atomic8_sub_release(i8* %a) nounwind uwtable { 198entry: 199 atomicrmw sub i8* %a, i8 0 release, !dbg !7 200 ret void, !dbg !7 201} 202; CHECK-LABEL: atomic8_sub_release 203; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 3), !dbg 204 205define void @atomic8_and_release(i8* %a) nounwind uwtable { 206entry: 207 atomicrmw and i8* %a, i8 0 release, !dbg !7 208 ret void, !dbg !7 209} 210; CHECK-LABEL: atomic8_and_release 211; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 3), !dbg 212 213define void @atomic8_or_release(i8* %a) nounwind uwtable { 214entry: 215 atomicrmw or i8* %a, i8 0 release, !dbg !7 216 ret void, !dbg !7 217} 218; CHECK-LABEL: atomic8_or_release 219; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 3), !dbg 220 221define void @atomic8_xor_release(i8* %a) nounwind uwtable { 222entry: 223 atomicrmw xor i8* %a, i8 0 release, !dbg !7 224 ret void, !dbg !7 225} 226; CHECK-LABEL: atomic8_xor_release 227; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 3), !dbg 228 229define void @atomic8_nand_release(i8* %a) nounwind uwtable { 230entry: 231 atomicrmw nand i8* %a, i8 0 release, !dbg !7 232 ret void, !dbg !7 233} 234; CHECK-LABEL: atomic8_nand_release 235; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 3), !dbg 236 237define void @atomic8_xchg_acq_rel(i8* %a) nounwind uwtable { 238entry: 239 atomicrmw xchg i8* %a, i8 0 acq_rel, !dbg !7 240 ret void, !dbg !7 241} 242; CHECK-LABEL: atomic8_xchg_acq_rel 243; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 4), !dbg 244 245define void @atomic8_add_acq_rel(i8* %a) nounwind uwtable { 246entry: 247 atomicrmw add i8* %a, i8 0 acq_rel, !dbg !7 248 ret void, !dbg !7 249} 250; CHECK-LABEL: atomic8_add_acq_rel 251; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 4), !dbg 252 253define void @atomic8_sub_acq_rel(i8* %a) nounwind uwtable { 254entry: 255 atomicrmw sub i8* %a, i8 0 acq_rel, !dbg !7 256 ret void, !dbg !7 257} 258; CHECK-LABEL: atomic8_sub_acq_rel 259; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 4), !dbg 260 261define void @atomic8_and_acq_rel(i8* %a) nounwind uwtable { 262entry: 263 atomicrmw and i8* %a, i8 0 acq_rel, !dbg !7 264 ret void, !dbg !7 265} 266; CHECK-LABEL: atomic8_and_acq_rel 267; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 4), !dbg 268 269define void @atomic8_or_acq_rel(i8* %a) nounwind uwtable { 270entry: 271 atomicrmw or i8* %a, i8 0 acq_rel, !dbg !7 272 ret void, !dbg !7 273} 274; CHECK-LABEL: atomic8_or_acq_rel 275; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 4), !dbg 276 277define void @atomic8_xor_acq_rel(i8* %a) nounwind uwtable { 278entry: 279 atomicrmw xor i8* %a, i8 0 acq_rel, !dbg !7 280 ret void, !dbg !7 281} 282; CHECK-LABEL: atomic8_xor_acq_rel 283; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 4), !dbg 284 285define void @atomic8_nand_acq_rel(i8* %a) nounwind uwtable { 286entry: 287 atomicrmw nand i8* %a, i8 0 acq_rel, !dbg !7 288 ret void, !dbg !7 289} 290; CHECK-LABEL: atomic8_nand_acq_rel 291; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 4), !dbg 292 293define void @atomic8_xchg_seq_cst(i8* %a) nounwind uwtable { 294entry: 295 atomicrmw xchg i8* %a, i8 0 seq_cst, !dbg !7 296 ret void, !dbg !7 297} 298; CHECK-LABEL: atomic8_xchg_seq_cst 299; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 5), !dbg 300 301define void @atomic8_add_seq_cst(i8* %a) nounwind uwtable { 302entry: 303 atomicrmw add i8* %a, i8 0 seq_cst, !dbg !7 304 ret void, !dbg !7 305} 306; CHECK-LABEL: atomic8_add_seq_cst 307; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 5), !dbg 308 309define void @atomic8_sub_seq_cst(i8* %a) nounwind uwtable { 310entry: 311 atomicrmw sub i8* %a, i8 0 seq_cst, !dbg !7 312 ret void, !dbg !7 313} 314; CHECK-LABEL: atomic8_sub_seq_cst 315; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 5), !dbg 316 317define void @atomic8_and_seq_cst(i8* %a) nounwind uwtable { 318entry: 319 atomicrmw and i8* %a, i8 0 seq_cst, !dbg !7 320 ret void, !dbg !7 321} 322; CHECK-LABEL: atomic8_and_seq_cst 323; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 5), !dbg 324 325define void @atomic8_or_seq_cst(i8* %a) nounwind uwtable { 326entry: 327 atomicrmw or i8* %a, i8 0 seq_cst, !dbg !7 328 ret void, !dbg !7 329} 330; CHECK-LABEL: atomic8_or_seq_cst 331; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 5), !dbg 332 333define void @atomic8_xor_seq_cst(i8* %a) nounwind uwtable { 334entry: 335 atomicrmw xor i8* %a, i8 0 seq_cst, !dbg !7 336 ret void, !dbg !7 337} 338; CHECK-LABEL: atomic8_xor_seq_cst 339; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 5), !dbg 340 341define void @atomic8_nand_seq_cst(i8* %a) nounwind uwtable { 342entry: 343 atomicrmw nand i8* %a, i8 0 seq_cst, !dbg !7 344 ret void, !dbg !7 345} 346; CHECK-LABEL: atomic8_nand_seq_cst 347; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 5), !dbg 348 349define void @atomic8_cas_monotonic(i8* %a) nounwind uwtable { 350entry: 351 cmpxchg i8* %a, i8 0, i8 1 monotonic monotonic, !dbg !7 352 ret void, !dbg !7 353} 354; CHECK-LABEL: atomic8_cas_monotonic 355; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(i8* %a, i8 0, i8 1, i32 0, i32 0), !dbg 356 357define void @atomic8_cas_acquire(i8* %a) nounwind uwtable { 358entry: 359 cmpxchg i8* %a, i8 0, i8 1 acquire acquire, !dbg !7 360 ret void, !dbg !7 361} 362; CHECK-LABEL: atomic8_cas_acquire 363; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(i8* %a, i8 0, i8 1, i32 2, i32 2), !dbg 364 365define void @atomic8_cas_release(i8* %a) nounwind uwtable { 366entry: 367 cmpxchg i8* %a, i8 0, i8 1 release monotonic, !dbg !7 368 ret void, !dbg !7 369} 370; CHECK-LABEL: atomic8_cas_release 371; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(i8* %a, i8 0, i8 1, i32 3, i32 0), !dbg 372 373define void @atomic8_cas_acq_rel(i8* %a) nounwind uwtable { 374entry: 375 cmpxchg i8* %a, i8 0, i8 1 acq_rel acquire, !dbg !7 376 ret void, !dbg !7 377} 378; CHECK-LABEL: atomic8_cas_acq_rel 379; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(i8* %a, i8 0, i8 1, i32 4, i32 2), !dbg 380 381define void @atomic8_cas_seq_cst(i8* %a) nounwind uwtable { 382entry: 383 cmpxchg i8* %a, i8 0, i8 1 seq_cst seq_cst, !dbg !7 384 ret void, !dbg !7 385} 386; CHECK-LABEL: atomic8_cas_seq_cst 387; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(i8* %a, i8 0, i8 1, i32 5, i32 5), !dbg 388 389define i16 @atomic16_load_unordered(i16* %a) nounwind uwtable { 390entry: 391 %0 = load atomic i16, i16* %a unordered, align 2, !dbg !7 392 ret i16 %0, !dbg !7 393} 394; CHECK-LABEL: atomic16_load_unordered 395; CHECK: call i16 @__tsan_atomic16_load(i16* %a, i32 0), !dbg 396 397define i16 @atomic16_load_monotonic(i16* %a) nounwind uwtable { 398entry: 399 %0 = load atomic i16, i16* %a monotonic, align 2, !dbg !7 400 ret i16 %0, !dbg !7 401} 402; CHECK-LABEL: atomic16_load_monotonic 403; CHECK: call i16 @__tsan_atomic16_load(i16* %a, i32 0), !dbg 404 405define i16 @atomic16_load_acquire(i16* %a) nounwind uwtable { 406entry: 407 %0 = load atomic i16, i16* %a acquire, align 2, !dbg !7 408 ret i16 %0, !dbg !7 409} 410; CHECK-LABEL: atomic16_load_acquire 411; CHECK: call i16 @__tsan_atomic16_load(i16* %a, i32 2), !dbg 412 413define i16 @atomic16_load_seq_cst(i16* %a) nounwind uwtable { 414entry: 415 %0 = load atomic i16, i16* %a seq_cst, align 2, !dbg !7 416 ret i16 %0, !dbg !7 417} 418; CHECK-LABEL: atomic16_load_seq_cst 419; CHECK: call i16 @__tsan_atomic16_load(i16* %a, i32 5), !dbg 420 421define void @atomic16_store_unordered(i16* %a) nounwind uwtable { 422entry: 423 store atomic i16 0, i16* %a unordered, align 2, !dbg !7 424 ret void, !dbg !7 425} 426; CHECK-LABEL: atomic16_store_unordered 427; CHECK: call void @__tsan_atomic16_store(i16* %a, i16 0, i32 0), !dbg 428 429define void @atomic16_store_monotonic(i16* %a) nounwind uwtable { 430entry: 431 store atomic i16 0, i16* %a monotonic, align 2, !dbg !7 432 ret void, !dbg !7 433} 434; CHECK-LABEL: atomic16_store_monotonic 435; CHECK: call void @__tsan_atomic16_store(i16* %a, i16 0, i32 0), !dbg 436 437define void @atomic16_store_release(i16* %a) nounwind uwtable { 438entry: 439 store atomic i16 0, i16* %a release, align 2, !dbg !7 440 ret void, !dbg !7 441} 442; CHECK-LABEL: atomic16_store_release 443; CHECK: call void @__tsan_atomic16_store(i16* %a, i16 0, i32 3), !dbg 444 445define void @atomic16_store_seq_cst(i16* %a) nounwind uwtable { 446entry: 447 store atomic i16 0, i16* %a seq_cst, align 2, !dbg !7 448 ret void, !dbg !7 449} 450; CHECK-LABEL: atomic16_store_seq_cst 451; CHECK: call void @__tsan_atomic16_store(i16* %a, i16 0, i32 5), !dbg 452 453define void @atomic16_xchg_monotonic(i16* %a) nounwind uwtable { 454entry: 455 atomicrmw xchg i16* %a, i16 0 monotonic, !dbg !7 456 ret void, !dbg !7 457} 458; CHECK-LABEL: atomic16_xchg_monotonic 459; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 0), !dbg 460 461define void @atomic16_add_monotonic(i16* %a) nounwind uwtable { 462entry: 463 atomicrmw add i16* %a, i16 0 monotonic, !dbg !7 464 ret void, !dbg !7 465} 466; CHECK-LABEL: atomic16_add_monotonic 467; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 0), !dbg 468 469define void @atomic16_sub_monotonic(i16* %a) nounwind uwtable { 470entry: 471 atomicrmw sub i16* %a, i16 0 monotonic, !dbg !7 472 ret void, !dbg !7 473} 474; CHECK-LABEL: atomic16_sub_monotonic 475; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 0), !dbg 476 477define void @atomic16_and_monotonic(i16* %a) nounwind uwtable { 478entry: 479 atomicrmw and i16* %a, i16 0 monotonic, !dbg !7 480 ret void, !dbg !7 481} 482; CHECK-LABEL: atomic16_and_monotonic 483; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 0), !dbg 484 485define void @atomic16_or_monotonic(i16* %a) nounwind uwtable { 486entry: 487 atomicrmw or i16* %a, i16 0 monotonic, !dbg !7 488 ret void, !dbg !7 489} 490; CHECK-LABEL: atomic16_or_monotonic 491; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 0), !dbg 492 493define void @atomic16_xor_monotonic(i16* %a) nounwind uwtable { 494entry: 495 atomicrmw xor i16* %a, i16 0 monotonic, !dbg !7 496 ret void, !dbg !7 497} 498; CHECK-LABEL: atomic16_xor_monotonic 499; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 0), !dbg 500 501define void @atomic16_nand_monotonic(i16* %a) nounwind uwtable { 502entry: 503 atomicrmw nand i16* %a, i16 0 monotonic, !dbg !7 504 ret void, !dbg !7 505} 506; CHECK-LABEL: atomic16_nand_monotonic 507; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 0), !dbg 508 509define void @atomic16_xchg_acquire(i16* %a) nounwind uwtable { 510entry: 511 atomicrmw xchg i16* %a, i16 0 acquire, !dbg !7 512 ret void, !dbg !7 513} 514; CHECK-LABEL: atomic16_xchg_acquire 515; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 2), !dbg 516 517define void @atomic16_add_acquire(i16* %a) nounwind uwtable { 518entry: 519 atomicrmw add i16* %a, i16 0 acquire, !dbg !7 520 ret void, !dbg !7 521} 522; CHECK-LABEL: atomic16_add_acquire 523; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 2), !dbg 524 525define void @atomic16_sub_acquire(i16* %a) nounwind uwtable { 526entry: 527 atomicrmw sub i16* %a, i16 0 acquire, !dbg !7 528 ret void, !dbg !7 529} 530; CHECK-LABEL: atomic16_sub_acquire 531; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 2), !dbg 532 533define void @atomic16_and_acquire(i16* %a) nounwind uwtable { 534entry: 535 atomicrmw and i16* %a, i16 0 acquire, !dbg !7 536 ret void, !dbg !7 537} 538; CHECK-LABEL: atomic16_and_acquire 539; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 2), !dbg 540 541define void @atomic16_or_acquire(i16* %a) nounwind uwtable { 542entry: 543 atomicrmw or i16* %a, i16 0 acquire, !dbg !7 544 ret void, !dbg !7 545} 546; CHECK-LABEL: atomic16_or_acquire 547; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 2), !dbg 548 549define void @atomic16_xor_acquire(i16* %a) nounwind uwtable { 550entry: 551 atomicrmw xor i16* %a, i16 0 acquire, !dbg !7 552 ret void, !dbg !7 553} 554; CHECK-LABEL: atomic16_xor_acquire 555; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 2), !dbg 556 557define void @atomic16_nand_acquire(i16* %a) nounwind uwtable { 558entry: 559 atomicrmw nand i16* %a, i16 0 acquire, !dbg !7 560 ret void, !dbg !7 561} 562; CHECK-LABEL: atomic16_nand_acquire 563; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 2), !dbg 564 565define void @atomic16_xchg_release(i16* %a) nounwind uwtable { 566entry: 567 atomicrmw xchg i16* %a, i16 0 release, !dbg !7 568 ret void, !dbg !7 569} 570; CHECK-LABEL: atomic16_xchg_release 571; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 3), !dbg 572 573define void @atomic16_add_release(i16* %a) nounwind uwtable { 574entry: 575 atomicrmw add i16* %a, i16 0 release, !dbg !7 576 ret void, !dbg !7 577} 578; CHECK-LABEL: atomic16_add_release 579; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 3), !dbg 580 581define void @atomic16_sub_release(i16* %a) nounwind uwtable { 582entry: 583 atomicrmw sub i16* %a, i16 0 release, !dbg !7 584 ret void, !dbg !7 585} 586; CHECK-LABEL: atomic16_sub_release 587; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 3), !dbg 588 589define void @atomic16_and_release(i16* %a) nounwind uwtable { 590entry: 591 atomicrmw and i16* %a, i16 0 release, !dbg !7 592 ret void, !dbg !7 593} 594; CHECK-LABEL: atomic16_and_release 595; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 3), !dbg 596 597define void @atomic16_or_release(i16* %a) nounwind uwtable { 598entry: 599 atomicrmw or i16* %a, i16 0 release, !dbg !7 600 ret void, !dbg !7 601} 602; CHECK-LABEL: atomic16_or_release 603; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 3), !dbg 604 605define void @atomic16_xor_release(i16* %a) nounwind uwtable { 606entry: 607 atomicrmw xor i16* %a, i16 0 release, !dbg !7 608 ret void, !dbg !7 609} 610; CHECK-LABEL: atomic16_xor_release 611; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 3), !dbg 612 613define void @atomic16_nand_release(i16* %a) nounwind uwtable { 614entry: 615 atomicrmw nand i16* %a, i16 0 release, !dbg !7 616 ret void, !dbg !7 617} 618; CHECK-LABEL: atomic16_nand_release 619; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 3), !dbg 620 621define void @atomic16_xchg_acq_rel(i16* %a) nounwind uwtable { 622entry: 623 atomicrmw xchg i16* %a, i16 0 acq_rel, !dbg !7 624 ret void, !dbg !7 625} 626; CHECK-LABEL: atomic16_xchg_acq_rel 627; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 4), !dbg 628 629define void @atomic16_add_acq_rel(i16* %a) nounwind uwtable { 630entry: 631 atomicrmw add i16* %a, i16 0 acq_rel, !dbg !7 632 ret void, !dbg !7 633} 634; CHECK-LABEL: atomic16_add_acq_rel 635; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 4), !dbg 636 637define void @atomic16_sub_acq_rel(i16* %a) nounwind uwtable { 638entry: 639 atomicrmw sub i16* %a, i16 0 acq_rel, !dbg !7 640 ret void, !dbg !7 641} 642; CHECK-LABEL: atomic16_sub_acq_rel 643; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 4), !dbg 644 645define void @atomic16_and_acq_rel(i16* %a) nounwind uwtable { 646entry: 647 atomicrmw and i16* %a, i16 0 acq_rel, !dbg !7 648 ret void, !dbg !7 649} 650; CHECK-LABEL: atomic16_and_acq_rel 651; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 4), !dbg 652 653define void @atomic16_or_acq_rel(i16* %a) nounwind uwtable { 654entry: 655 atomicrmw or i16* %a, i16 0 acq_rel, !dbg !7 656 ret void, !dbg !7 657} 658; CHECK-LABEL: atomic16_or_acq_rel 659; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 4), !dbg 660 661define void @atomic16_xor_acq_rel(i16* %a) nounwind uwtable { 662entry: 663 atomicrmw xor i16* %a, i16 0 acq_rel, !dbg !7 664 ret void, !dbg !7 665} 666; CHECK-LABEL: atomic16_xor_acq_rel 667; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 4), !dbg 668 669define void @atomic16_nand_acq_rel(i16* %a) nounwind uwtable { 670entry: 671 atomicrmw nand i16* %a, i16 0 acq_rel, !dbg !7 672 ret void, !dbg !7 673} 674; CHECK-LABEL: atomic16_nand_acq_rel 675; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 4), !dbg 676 677define void @atomic16_xchg_seq_cst(i16* %a) nounwind uwtable { 678entry: 679 atomicrmw xchg i16* %a, i16 0 seq_cst, !dbg !7 680 ret void, !dbg !7 681} 682; CHECK-LABEL: atomic16_xchg_seq_cst 683; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 5), !dbg 684 685define void @atomic16_add_seq_cst(i16* %a) nounwind uwtable { 686entry: 687 atomicrmw add i16* %a, i16 0 seq_cst, !dbg !7 688 ret void, !dbg !7 689} 690; CHECK-LABEL: atomic16_add_seq_cst 691; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 5), !dbg 692 693define void @atomic16_sub_seq_cst(i16* %a) nounwind uwtable { 694entry: 695 atomicrmw sub i16* %a, i16 0 seq_cst, !dbg !7 696 ret void, !dbg !7 697} 698; CHECK-LABEL: atomic16_sub_seq_cst 699; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 5), !dbg 700 701define void @atomic16_and_seq_cst(i16* %a) nounwind uwtable { 702entry: 703 atomicrmw and i16* %a, i16 0 seq_cst, !dbg !7 704 ret void, !dbg !7 705} 706; CHECK-LABEL: atomic16_and_seq_cst 707; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 5), !dbg 708 709define void @atomic16_or_seq_cst(i16* %a) nounwind uwtable { 710entry: 711 atomicrmw or i16* %a, i16 0 seq_cst, !dbg !7 712 ret void, !dbg !7 713} 714; CHECK-LABEL: atomic16_or_seq_cst 715; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 5), !dbg 716 717define void @atomic16_xor_seq_cst(i16* %a) nounwind uwtable { 718entry: 719 atomicrmw xor i16* %a, i16 0 seq_cst, !dbg !7 720 ret void, !dbg !7 721} 722; CHECK-LABEL: atomic16_xor_seq_cst 723; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 5), !dbg 724 725define void @atomic16_nand_seq_cst(i16* %a) nounwind uwtable { 726entry: 727 atomicrmw nand i16* %a, i16 0 seq_cst, !dbg !7 728 ret void, !dbg !7 729} 730; CHECK-LABEL: atomic16_nand_seq_cst 731; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 5), !dbg 732 733define void @atomic16_cas_monotonic(i16* %a) nounwind uwtable { 734entry: 735 cmpxchg i16* %a, i16 0, i16 1 monotonic monotonic, !dbg !7 736 ret void, !dbg !7 737} 738; CHECK-LABEL: atomic16_cas_monotonic 739; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(i16* %a, i16 0, i16 1, i32 0, i32 0), !dbg 740 741define void @atomic16_cas_acquire(i16* %a) nounwind uwtable { 742entry: 743 cmpxchg i16* %a, i16 0, i16 1 acquire acquire, !dbg !7 744 ret void, !dbg !7 745} 746; CHECK-LABEL: atomic16_cas_acquire 747; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(i16* %a, i16 0, i16 1, i32 2, i32 2), !dbg 748 749define void @atomic16_cas_release(i16* %a) nounwind uwtable { 750entry: 751 cmpxchg i16* %a, i16 0, i16 1 release monotonic, !dbg !7 752 ret void, !dbg !7 753} 754; CHECK-LABEL: atomic16_cas_release 755; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(i16* %a, i16 0, i16 1, i32 3, i32 0), !dbg 756 757define void @atomic16_cas_acq_rel(i16* %a) nounwind uwtable { 758entry: 759 cmpxchg i16* %a, i16 0, i16 1 acq_rel acquire, !dbg !7 760 ret void, !dbg !7 761} 762; CHECK-LABEL: atomic16_cas_acq_rel 763; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(i16* %a, i16 0, i16 1, i32 4, i32 2), !dbg 764 765define void @atomic16_cas_seq_cst(i16* %a) nounwind uwtable { 766entry: 767 cmpxchg i16* %a, i16 0, i16 1 seq_cst seq_cst, !dbg !7 768 ret void, !dbg !7 769} 770; CHECK-LABEL: atomic16_cas_seq_cst 771; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(i16* %a, i16 0, i16 1, i32 5, i32 5), !dbg 772 773define i32 @atomic32_load_unordered(i32* %a) nounwind uwtable { 774entry: 775 %0 = load atomic i32, i32* %a unordered, align 4, !dbg !7 776 ret i32 %0, !dbg !7 777} 778; CHECK-LABEL: atomic32_load_unordered 779; CHECK: call i32 @__tsan_atomic32_load(i32* %a, i32 0), !dbg 780 781define i32 @atomic32_load_monotonic(i32* %a) nounwind uwtable { 782entry: 783 %0 = load atomic i32, i32* %a monotonic, align 4, !dbg !7 784 ret i32 %0, !dbg !7 785} 786; CHECK-LABEL: atomic32_load_monotonic 787; CHECK: call i32 @__tsan_atomic32_load(i32* %a, i32 0), !dbg 788 789define i32 @atomic32_load_acquire(i32* %a) nounwind uwtable { 790entry: 791 %0 = load atomic i32, i32* %a acquire, align 4, !dbg !7 792 ret i32 %0, !dbg !7 793} 794; CHECK-LABEL: atomic32_load_acquire 795; CHECK: call i32 @__tsan_atomic32_load(i32* %a, i32 2), !dbg 796 797define i32 @atomic32_load_seq_cst(i32* %a) nounwind uwtable { 798entry: 799 %0 = load atomic i32, i32* %a seq_cst, align 4, !dbg !7 800 ret i32 %0, !dbg !7 801} 802; CHECK-LABEL: atomic32_load_seq_cst 803; CHECK: call i32 @__tsan_atomic32_load(i32* %a, i32 5), !dbg 804 805define void @atomic32_store_unordered(i32* %a) nounwind uwtable { 806entry: 807 store atomic i32 0, i32* %a unordered, align 4, !dbg !7 808 ret void, !dbg !7 809} 810; CHECK-LABEL: atomic32_store_unordered 811; CHECK: call void @__tsan_atomic32_store(i32* %a, i32 0, i32 0), !dbg 812 813define void @atomic32_store_monotonic(i32* %a) nounwind uwtable { 814entry: 815 store atomic i32 0, i32* %a monotonic, align 4, !dbg !7 816 ret void, !dbg !7 817} 818; CHECK-LABEL: atomic32_store_monotonic 819; CHECK: call void @__tsan_atomic32_store(i32* %a, i32 0, i32 0), !dbg 820 821define void @atomic32_store_release(i32* %a) nounwind uwtable { 822entry: 823 store atomic i32 0, i32* %a release, align 4, !dbg !7 824 ret void, !dbg !7 825} 826; CHECK-LABEL: atomic32_store_release 827; CHECK: call void @__tsan_atomic32_store(i32* %a, i32 0, i32 3), !dbg 828 829define void @atomic32_store_seq_cst(i32* %a) nounwind uwtable { 830entry: 831 store atomic i32 0, i32* %a seq_cst, align 4, !dbg !7 832 ret void, !dbg !7 833} 834; CHECK-LABEL: atomic32_store_seq_cst 835; CHECK: call void @__tsan_atomic32_store(i32* %a, i32 0, i32 5), !dbg 836 837define void @atomic32_xchg_monotonic(i32* %a) nounwind uwtable { 838entry: 839 atomicrmw xchg i32* %a, i32 0 monotonic, !dbg !7 840 ret void, !dbg !7 841} 842; CHECK-LABEL: atomic32_xchg_monotonic 843; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 0), !dbg 844 845define void @atomic32_add_monotonic(i32* %a) nounwind uwtable { 846entry: 847 atomicrmw add i32* %a, i32 0 monotonic, !dbg !7 848 ret void, !dbg !7 849} 850; CHECK-LABEL: atomic32_add_monotonic 851; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 0), !dbg 852 853define void @atomic32_sub_monotonic(i32* %a) nounwind uwtable { 854entry: 855 atomicrmw sub i32* %a, i32 0 monotonic, !dbg !7 856 ret void, !dbg !7 857} 858; CHECK-LABEL: atomic32_sub_monotonic 859; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 0), !dbg 860 861define void @atomic32_and_monotonic(i32* %a) nounwind uwtable { 862entry: 863 atomicrmw and i32* %a, i32 0 monotonic, !dbg !7 864 ret void, !dbg !7 865} 866; CHECK-LABEL: atomic32_and_monotonic 867; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 0), !dbg 868 869define void @atomic32_or_monotonic(i32* %a) nounwind uwtable { 870entry: 871 atomicrmw or i32* %a, i32 0 monotonic, !dbg !7 872 ret void, !dbg !7 873} 874; CHECK-LABEL: atomic32_or_monotonic 875; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 0), !dbg 876 877define void @atomic32_xor_monotonic(i32* %a) nounwind uwtable { 878entry: 879 atomicrmw xor i32* %a, i32 0 monotonic, !dbg !7 880 ret void, !dbg !7 881} 882; CHECK-LABEL: atomic32_xor_monotonic 883; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 0), !dbg 884 885define void @atomic32_nand_monotonic(i32* %a) nounwind uwtable { 886entry: 887 atomicrmw nand i32* %a, i32 0 monotonic, !dbg !7 888 ret void, !dbg !7 889} 890; CHECK-LABEL: atomic32_nand_monotonic 891; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 0), !dbg 892 893define void @atomic32_xchg_acquire(i32* %a) nounwind uwtable { 894entry: 895 atomicrmw xchg i32* %a, i32 0 acquire, !dbg !7 896 ret void, !dbg !7 897} 898; CHECK-LABEL: atomic32_xchg_acquire 899; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 2), !dbg 900 901define void @atomic32_add_acquire(i32* %a) nounwind uwtable { 902entry: 903 atomicrmw add i32* %a, i32 0 acquire, !dbg !7 904 ret void, !dbg !7 905} 906; CHECK-LABEL: atomic32_add_acquire 907; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 2), !dbg 908 909define void @atomic32_sub_acquire(i32* %a) nounwind uwtable { 910entry: 911 atomicrmw sub i32* %a, i32 0 acquire, !dbg !7 912 ret void, !dbg !7 913} 914; CHECK-LABEL: atomic32_sub_acquire 915; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 2), !dbg 916 917define void @atomic32_and_acquire(i32* %a) nounwind uwtable { 918entry: 919 atomicrmw and i32* %a, i32 0 acquire, !dbg !7 920 ret void, !dbg !7 921} 922; CHECK-LABEL: atomic32_and_acquire 923; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 2), !dbg 924 925define void @atomic32_or_acquire(i32* %a) nounwind uwtable { 926entry: 927 atomicrmw or i32* %a, i32 0 acquire, !dbg !7 928 ret void, !dbg !7 929} 930; CHECK-LABEL: atomic32_or_acquire 931; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 2), !dbg 932 933define void @atomic32_xor_acquire(i32* %a) nounwind uwtable { 934entry: 935 atomicrmw xor i32* %a, i32 0 acquire, !dbg !7 936 ret void, !dbg !7 937} 938; CHECK-LABEL: atomic32_xor_acquire 939; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 2), !dbg 940 941define void @atomic32_nand_acquire(i32* %a) nounwind uwtable { 942entry: 943 atomicrmw nand i32* %a, i32 0 acquire, !dbg !7 944 ret void, !dbg !7 945} 946; CHECK-LABEL: atomic32_nand_acquire 947; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 2), !dbg 948 949define void @atomic32_xchg_release(i32* %a) nounwind uwtable { 950entry: 951 atomicrmw xchg i32* %a, i32 0 release, !dbg !7 952 ret void, !dbg !7 953} 954; CHECK-LABEL: atomic32_xchg_release 955; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 3), !dbg 956 957define void @atomic32_add_release(i32* %a) nounwind uwtable { 958entry: 959 atomicrmw add i32* %a, i32 0 release, !dbg !7 960 ret void, !dbg !7 961} 962; CHECK-LABEL: atomic32_add_release 963; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 3), !dbg 964 965define void @atomic32_sub_release(i32* %a) nounwind uwtable { 966entry: 967 atomicrmw sub i32* %a, i32 0 release, !dbg !7 968 ret void, !dbg !7 969} 970; CHECK-LABEL: atomic32_sub_release 971; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 3), !dbg 972 973define void @atomic32_and_release(i32* %a) nounwind uwtable { 974entry: 975 atomicrmw and i32* %a, i32 0 release, !dbg !7 976 ret void, !dbg !7 977} 978; CHECK-LABEL: atomic32_and_release 979; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 3), !dbg 980 981define void @atomic32_or_release(i32* %a) nounwind uwtable { 982entry: 983 atomicrmw or i32* %a, i32 0 release, !dbg !7 984 ret void, !dbg !7 985} 986; CHECK-LABEL: atomic32_or_release 987; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 3), !dbg 988 989define void @atomic32_xor_release(i32* %a) nounwind uwtable { 990entry: 991 atomicrmw xor i32* %a, i32 0 release, !dbg !7 992 ret void, !dbg !7 993} 994; CHECK-LABEL: atomic32_xor_release 995; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 3), !dbg 996 997define void @atomic32_nand_release(i32* %a) nounwind uwtable { 998entry: 999 atomicrmw nand i32* %a, i32 0 release, !dbg !7 1000 ret void, !dbg !7 1001} 1002; CHECK-LABEL: atomic32_nand_release 1003; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 3), !dbg 1004 1005define void @atomic32_xchg_acq_rel(i32* %a) nounwind uwtable { 1006entry: 1007 atomicrmw xchg i32* %a, i32 0 acq_rel, !dbg !7 1008 ret void, !dbg !7 1009} 1010; CHECK-LABEL: atomic32_xchg_acq_rel 1011; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 4), !dbg 1012 1013define void @atomic32_add_acq_rel(i32* %a) nounwind uwtable { 1014entry: 1015 atomicrmw add i32* %a, i32 0 acq_rel, !dbg !7 1016 ret void, !dbg !7 1017} 1018; CHECK-LABEL: atomic32_add_acq_rel 1019; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 4), !dbg 1020 1021define void @atomic32_sub_acq_rel(i32* %a) nounwind uwtable { 1022entry: 1023 atomicrmw sub i32* %a, i32 0 acq_rel, !dbg !7 1024 ret void, !dbg !7 1025} 1026; CHECK-LABEL: atomic32_sub_acq_rel 1027; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 4), !dbg 1028 1029define void @atomic32_and_acq_rel(i32* %a) nounwind uwtable { 1030entry: 1031 atomicrmw and i32* %a, i32 0 acq_rel, !dbg !7 1032 ret void, !dbg !7 1033} 1034; CHECK-LABEL: atomic32_and_acq_rel 1035; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 4), !dbg 1036 1037define void @atomic32_or_acq_rel(i32* %a) nounwind uwtable { 1038entry: 1039 atomicrmw or i32* %a, i32 0 acq_rel, !dbg !7 1040 ret void, !dbg !7 1041} 1042; CHECK-LABEL: atomic32_or_acq_rel 1043; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 4), !dbg 1044 1045define void @atomic32_xor_acq_rel(i32* %a) nounwind uwtable { 1046entry: 1047 atomicrmw xor i32* %a, i32 0 acq_rel, !dbg !7 1048 ret void, !dbg !7 1049} 1050; CHECK-LABEL: atomic32_xor_acq_rel 1051; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 4), !dbg 1052 1053define void @atomic32_nand_acq_rel(i32* %a) nounwind uwtable { 1054entry: 1055 atomicrmw nand i32* %a, i32 0 acq_rel, !dbg !7 1056 ret void, !dbg !7 1057} 1058; CHECK-LABEL: atomic32_nand_acq_rel 1059; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 4), !dbg 1060 1061define void @atomic32_xchg_seq_cst(i32* %a) nounwind uwtable { 1062entry: 1063 atomicrmw xchg i32* %a, i32 0 seq_cst, !dbg !7 1064 ret void, !dbg !7 1065} 1066; CHECK-LABEL: atomic32_xchg_seq_cst 1067; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 5), !dbg 1068 1069define void @atomic32_add_seq_cst(i32* %a) nounwind uwtable { 1070entry: 1071 atomicrmw add i32* %a, i32 0 seq_cst, !dbg !7 1072 ret void, !dbg !7 1073} 1074; CHECK-LABEL: atomic32_add_seq_cst 1075; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 5), !dbg 1076 1077define void @atomic32_sub_seq_cst(i32* %a) nounwind uwtable { 1078entry: 1079 atomicrmw sub i32* %a, i32 0 seq_cst, !dbg !7 1080 ret void, !dbg !7 1081} 1082; CHECK-LABEL: atomic32_sub_seq_cst 1083; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 5), !dbg 1084 1085define void @atomic32_and_seq_cst(i32* %a) nounwind uwtable { 1086entry: 1087 atomicrmw and i32* %a, i32 0 seq_cst, !dbg !7 1088 ret void, !dbg !7 1089} 1090; CHECK-LABEL: atomic32_and_seq_cst 1091; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 5), !dbg 1092 1093define void @atomic32_or_seq_cst(i32* %a) nounwind uwtable { 1094entry: 1095 atomicrmw or i32* %a, i32 0 seq_cst, !dbg !7 1096 ret void, !dbg !7 1097} 1098; CHECK-LABEL: atomic32_or_seq_cst 1099; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 5), !dbg 1100 1101define void @atomic32_xor_seq_cst(i32* %a) nounwind uwtable { 1102entry: 1103 atomicrmw xor i32* %a, i32 0 seq_cst, !dbg !7 1104 ret void, !dbg !7 1105} 1106; CHECK-LABEL: atomic32_xor_seq_cst 1107; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 5), !dbg 1108 1109define void @atomic32_nand_seq_cst(i32* %a) nounwind uwtable { 1110entry: 1111 atomicrmw nand i32* %a, i32 0 seq_cst, !dbg !7 1112 ret void, !dbg !7 1113} 1114; CHECK-LABEL: atomic32_nand_seq_cst 1115; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 5), !dbg 1116 1117define void @atomic32_cas_monotonic(i32* %a) nounwind uwtable { 1118entry: 1119 cmpxchg i32* %a, i32 0, i32 1 monotonic monotonic, !dbg !7 1120 ret void, !dbg !7 1121} 1122; CHECK-LABEL: atomic32_cas_monotonic 1123; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(i32* %a, i32 0, i32 1, i32 0, i32 0), !dbg 1124 1125define void @atomic32_cas_acquire(i32* %a) nounwind uwtable { 1126entry: 1127 cmpxchg i32* %a, i32 0, i32 1 acquire acquire, !dbg !7 1128 ret void, !dbg !7 1129} 1130; CHECK-LABEL: atomic32_cas_acquire 1131; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(i32* %a, i32 0, i32 1, i32 2, i32 2), !dbg 1132 1133define void @atomic32_cas_release(i32* %a) nounwind uwtable { 1134entry: 1135 cmpxchg i32* %a, i32 0, i32 1 release monotonic, !dbg !7 1136 ret void, !dbg !7 1137} 1138; CHECK-LABEL: atomic32_cas_release 1139; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(i32* %a, i32 0, i32 1, i32 3, i32 0), !dbg 1140 1141define void @atomic32_cas_acq_rel(i32* %a) nounwind uwtable { 1142entry: 1143 cmpxchg i32* %a, i32 0, i32 1 acq_rel acquire, !dbg !7 1144 ret void, !dbg !7 1145} 1146; CHECK-LABEL: atomic32_cas_acq_rel 1147; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(i32* %a, i32 0, i32 1, i32 4, i32 2), !dbg 1148 1149define void @atomic32_cas_seq_cst(i32* %a) nounwind uwtable { 1150entry: 1151 cmpxchg i32* %a, i32 0, i32 1 seq_cst seq_cst, !dbg !7 1152 ret void, !dbg !7 1153} 1154; CHECK-LABEL: atomic32_cas_seq_cst 1155; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(i32* %a, i32 0, i32 1, i32 5, i32 5), !dbg 1156 1157define i64 @atomic64_load_unordered(i64* %a) nounwind uwtable { 1158entry: 1159 %0 = load atomic i64, i64* %a unordered, align 8, !dbg !7 1160 ret i64 %0, !dbg !7 1161} 1162; CHECK-LABEL: atomic64_load_unordered 1163; CHECK: call i64 @__tsan_atomic64_load(i64* %a, i32 0), !dbg 1164 1165define i64 @atomic64_load_monotonic(i64* %a) nounwind uwtable { 1166entry: 1167 %0 = load atomic i64, i64* %a monotonic, align 8, !dbg !7 1168 ret i64 %0, !dbg !7 1169} 1170; CHECK-LABEL: atomic64_load_monotonic 1171; CHECK: call i64 @__tsan_atomic64_load(i64* %a, i32 0), !dbg 1172 1173define i64 @atomic64_load_acquire(i64* %a) nounwind uwtable { 1174entry: 1175 %0 = load atomic i64, i64* %a acquire, align 8, !dbg !7 1176 ret i64 %0, !dbg !7 1177} 1178; CHECK-LABEL: atomic64_load_acquire 1179; CHECK: call i64 @__tsan_atomic64_load(i64* %a, i32 2), !dbg 1180 1181define i64 @atomic64_load_seq_cst(i64* %a) nounwind uwtable { 1182entry: 1183 %0 = load atomic i64, i64* %a seq_cst, align 8, !dbg !7 1184 ret i64 %0, !dbg !7 1185} 1186; CHECK-LABEL: atomic64_load_seq_cst 1187; CHECK: call i64 @__tsan_atomic64_load(i64* %a, i32 5), !dbg 1188 1189define i8* @atomic64_load_seq_cst_ptr_ty(i8** %a) nounwind uwtable { 1190entry: 1191 %0 = load atomic i8*, i8** %a seq_cst, align 8, !dbg !7 1192 ret i8* %0, !dbg !7 1193} 1194; CHECK-LABEL: atomic64_load_seq_cst 1195; CHECK: bitcast i8** %{{.+}} to i64* 1196; CHECK-NEXT: call i64 @__tsan_atomic64_load(i64* %{{.+}}, i32 5), !dbg 1197; CHECK-NEXT: inttoptr i64 %{{.+}} to i8* 1198 1199define void @atomic64_store_unordered(i64* %a) nounwind uwtable { 1200entry: 1201 store atomic i64 0, i64* %a unordered, align 8, !dbg !7 1202 ret void, !dbg !7 1203} 1204; CHECK-LABEL: atomic64_store_unordered 1205; CHECK: call void @__tsan_atomic64_store(i64* %a, i64 0, i32 0), !dbg 1206 1207define void @atomic64_store_monotonic(i64* %a) nounwind uwtable { 1208entry: 1209 store atomic i64 0, i64* %a monotonic, align 8, !dbg !7 1210 ret void, !dbg !7 1211} 1212; CHECK-LABEL: atomic64_store_monotonic 1213; CHECK: call void @__tsan_atomic64_store(i64* %a, i64 0, i32 0), !dbg 1214 1215define void @atomic64_store_release(i64* %a) nounwind uwtable { 1216entry: 1217 store atomic i64 0, i64* %a release, align 8, !dbg !7 1218 ret void, !dbg !7 1219} 1220; CHECK-LABEL: atomic64_store_release 1221; CHECK: call void @__tsan_atomic64_store(i64* %a, i64 0, i32 3), !dbg 1222 1223define void @atomic64_store_seq_cst(i64* %a) nounwind uwtable { 1224entry: 1225 store atomic i64 0, i64* %a seq_cst, align 8, !dbg !7 1226 ret void, !dbg !7 1227} 1228; CHECK-LABEL: atomic64_store_seq_cst 1229; CHECK: call void @__tsan_atomic64_store(i64* %a, i64 0, i32 5), !dbg 1230 1231define void @atomic64_store_seq_cst_ptr_ty(i8** %a, i8* %v) nounwind uwtable { 1232entry: 1233 store atomic i8* %v, i8** %a seq_cst, align 8, !dbg !7 1234 ret void, !dbg !7 1235} 1236; CHECK-LABEL: atomic64_store_seq_cst 1237; CHECK: %{{.*}} = bitcast i8** %{{.*}} to i64* 1238; CHECK-NEXT: %{{.*}} = ptrtoint i8* %{{.*}} to i64 1239; CHECK-NEXT: call void @__tsan_atomic64_store(i64* %{{.*}}, i64 %{{.*}}, i32 5), !dbg 1240 1241define void @atomic64_xchg_monotonic(i64* %a) nounwind uwtable { 1242entry: 1243 atomicrmw xchg i64* %a, i64 0 monotonic, !dbg !7 1244 ret void, !dbg !7 1245} 1246; CHECK-LABEL: atomic64_xchg_monotonic 1247; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 0), !dbg 1248 1249define void @atomic64_add_monotonic(i64* %a) nounwind uwtable { 1250entry: 1251 atomicrmw add i64* %a, i64 0 monotonic, !dbg !7 1252 ret void, !dbg !7 1253} 1254; CHECK-LABEL: atomic64_add_monotonic 1255; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 0), !dbg 1256 1257define void @atomic64_sub_monotonic(i64* %a) nounwind uwtable { 1258entry: 1259 atomicrmw sub i64* %a, i64 0 monotonic, !dbg !7 1260 ret void, !dbg !7 1261} 1262; CHECK-LABEL: atomic64_sub_monotonic 1263; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 0), !dbg 1264 1265define void @atomic64_and_monotonic(i64* %a) nounwind uwtable { 1266entry: 1267 atomicrmw and i64* %a, i64 0 monotonic, !dbg !7 1268 ret void, !dbg !7 1269} 1270; CHECK-LABEL: atomic64_and_monotonic 1271; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 0), !dbg 1272 1273define void @atomic64_or_monotonic(i64* %a) nounwind uwtable { 1274entry: 1275 atomicrmw or i64* %a, i64 0 monotonic, !dbg !7 1276 ret void, !dbg !7 1277} 1278; CHECK-LABEL: atomic64_or_monotonic 1279; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 0), !dbg 1280 1281define void @atomic64_xor_monotonic(i64* %a) nounwind uwtable { 1282entry: 1283 atomicrmw xor i64* %a, i64 0 monotonic, !dbg !7 1284 ret void, !dbg !7 1285} 1286; CHECK-LABEL: atomic64_xor_monotonic 1287; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 0), !dbg 1288 1289define void @atomic64_nand_monotonic(i64* %a) nounwind uwtable { 1290entry: 1291 atomicrmw nand i64* %a, i64 0 monotonic, !dbg !7 1292 ret void, !dbg !7 1293} 1294; CHECK-LABEL: atomic64_nand_monotonic 1295; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 0), !dbg 1296 1297define void @atomic64_xchg_acquire(i64* %a) nounwind uwtable { 1298entry: 1299 atomicrmw xchg i64* %a, i64 0 acquire, !dbg !7 1300 ret void, !dbg !7 1301} 1302; CHECK-LABEL: atomic64_xchg_acquire 1303; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 2), !dbg 1304 1305define void @atomic64_add_acquire(i64* %a) nounwind uwtable { 1306entry: 1307 atomicrmw add i64* %a, i64 0 acquire, !dbg !7 1308 ret void, !dbg !7 1309} 1310; CHECK-LABEL: atomic64_add_acquire 1311; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 2), !dbg 1312 1313define void @atomic64_sub_acquire(i64* %a) nounwind uwtable { 1314entry: 1315 atomicrmw sub i64* %a, i64 0 acquire, !dbg !7 1316 ret void, !dbg !7 1317} 1318; CHECK-LABEL: atomic64_sub_acquire 1319; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 2), !dbg 1320 1321define void @atomic64_and_acquire(i64* %a) nounwind uwtable { 1322entry: 1323 atomicrmw and i64* %a, i64 0 acquire, !dbg !7 1324 ret void, !dbg !7 1325} 1326; CHECK-LABEL: atomic64_and_acquire 1327; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 2), !dbg 1328 1329define void @atomic64_or_acquire(i64* %a) nounwind uwtable { 1330entry: 1331 atomicrmw or i64* %a, i64 0 acquire, !dbg !7 1332 ret void, !dbg !7 1333} 1334; CHECK-LABEL: atomic64_or_acquire 1335; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 2), !dbg 1336 1337define void @atomic64_xor_acquire(i64* %a) nounwind uwtable { 1338entry: 1339 atomicrmw xor i64* %a, i64 0 acquire, !dbg !7 1340 ret void, !dbg !7 1341} 1342; CHECK-LABEL: atomic64_xor_acquire 1343; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 2), !dbg 1344 1345define void @atomic64_nand_acquire(i64* %a) nounwind uwtable { 1346entry: 1347 atomicrmw nand i64* %a, i64 0 acquire, !dbg !7 1348 ret void, !dbg !7 1349} 1350; CHECK-LABEL: atomic64_nand_acquire 1351; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 2), !dbg 1352 1353define void @atomic64_xchg_release(i64* %a) nounwind uwtable { 1354entry: 1355 atomicrmw xchg i64* %a, i64 0 release, !dbg !7 1356 ret void, !dbg !7 1357} 1358; CHECK-LABEL: atomic64_xchg_release 1359; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 3), !dbg 1360 1361define void @atomic64_add_release(i64* %a) nounwind uwtable { 1362entry: 1363 atomicrmw add i64* %a, i64 0 release, !dbg !7 1364 ret void, !dbg !7 1365} 1366; CHECK-LABEL: atomic64_add_release 1367; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 3), !dbg 1368 1369define void @atomic64_sub_release(i64* %a) nounwind uwtable { 1370entry: 1371 atomicrmw sub i64* %a, i64 0 release, !dbg !7 1372 ret void, !dbg !7 1373} 1374; CHECK-LABEL: atomic64_sub_release 1375; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 3), !dbg 1376 1377define void @atomic64_and_release(i64* %a) nounwind uwtable { 1378entry: 1379 atomicrmw and i64* %a, i64 0 release, !dbg !7 1380 ret void, !dbg !7 1381} 1382; CHECK-LABEL: atomic64_and_release 1383; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 3), !dbg 1384 1385define void @atomic64_or_release(i64* %a) nounwind uwtable { 1386entry: 1387 atomicrmw or i64* %a, i64 0 release, !dbg !7 1388 ret void, !dbg !7 1389} 1390; CHECK-LABEL: atomic64_or_release 1391; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 3), !dbg 1392 1393define void @atomic64_xor_release(i64* %a) nounwind uwtable { 1394entry: 1395 atomicrmw xor i64* %a, i64 0 release, !dbg !7 1396 ret void, !dbg !7 1397} 1398; CHECK-LABEL: atomic64_xor_release 1399; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 3), !dbg 1400 1401define void @atomic64_nand_release(i64* %a) nounwind uwtable { 1402entry: 1403 atomicrmw nand i64* %a, i64 0 release, !dbg !7 1404 ret void, !dbg !7 1405} 1406; CHECK-LABEL: atomic64_nand_release 1407; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 3), !dbg 1408 1409define void @atomic64_xchg_acq_rel(i64* %a) nounwind uwtable { 1410entry: 1411 atomicrmw xchg i64* %a, i64 0 acq_rel, !dbg !7 1412 ret void, !dbg !7 1413} 1414; CHECK-LABEL: atomic64_xchg_acq_rel 1415; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 4), !dbg 1416 1417define void @atomic64_add_acq_rel(i64* %a) nounwind uwtable { 1418entry: 1419 atomicrmw add i64* %a, i64 0 acq_rel, !dbg !7 1420 ret void, !dbg !7 1421} 1422; CHECK-LABEL: atomic64_add_acq_rel 1423; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 4), !dbg 1424 1425define void @atomic64_sub_acq_rel(i64* %a) nounwind uwtable { 1426entry: 1427 atomicrmw sub i64* %a, i64 0 acq_rel, !dbg !7 1428 ret void, !dbg !7 1429} 1430; CHECK-LABEL: atomic64_sub_acq_rel 1431; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 4), !dbg 1432 1433define void @atomic64_and_acq_rel(i64* %a) nounwind uwtable { 1434entry: 1435 atomicrmw and i64* %a, i64 0 acq_rel, !dbg !7 1436 ret void, !dbg !7 1437} 1438; CHECK-LABEL: atomic64_and_acq_rel 1439; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 4), !dbg 1440 1441define void @atomic64_or_acq_rel(i64* %a) nounwind uwtable { 1442entry: 1443 atomicrmw or i64* %a, i64 0 acq_rel, !dbg !7 1444 ret void, !dbg !7 1445} 1446; CHECK-LABEL: atomic64_or_acq_rel 1447; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 4), !dbg 1448 1449define void @atomic64_xor_acq_rel(i64* %a) nounwind uwtable { 1450entry: 1451 atomicrmw xor i64* %a, i64 0 acq_rel, !dbg !7 1452 ret void, !dbg !7 1453} 1454; CHECK-LABEL: atomic64_xor_acq_rel 1455; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 4), !dbg 1456 1457define void @atomic64_nand_acq_rel(i64* %a) nounwind uwtable { 1458entry: 1459 atomicrmw nand i64* %a, i64 0 acq_rel, !dbg !7 1460 ret void, !dbg !7 1461} 1462; CHECK-LABEL: atomic64_nand_acq_rel 1463; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 4), !dbg 1464 1465define void @atomic64_xchg_seq_cst(i64* %a) nounwind uwtable { 1466entry: 1467 atomicrmw xchg i64* %a, i64 0 seq_cst, !dbg !7 1468 ret void, !dbg !7 1469} 1470; CHECK-LABEL: atomic64_xchg_seq_cst 1471; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 5), !dbg 1472 1473define void @atomic64_add_seq_cst(i64* %a) nounwind uwtable { 1474entry: 1475 atomicrmw add i64* %a, i64 0 seq_cst, !dbg !7 1476 ret void, !dbg !7 1477} 1478; CHECK-LABEL: atomic64_add_seq_cst 1479; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 5), !dbg 1480 1481define void @atomic64_sub_seq_cst(i64* %a) nounwind uwtable { 1482entry: 1483 atomicrmw sub i64* %a, i64 0 seq_cst, !dbg !7 1484 ret void, !dbg !7 1485} 1486; CHECK-LABEL: atomic64_sub_seq_cst 1487; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 5), !dbg 1488 1489define void @atomic64_and_seq_cst(i64* %a) nounwind uwtable { 1490entry: 1491 atomicrmw and i64* %a, i64 0 seq_cst, !dbg !7 1492 ret void, !dbg !7 1493} 1494; CHECK-LABEL: atomic64_and_seq_cst 1495; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 5), !dbg 1496 1497define void @atomic64_or_seq_cst(i64* %a) nounwind uwtable { 1498entry: 1499 atomicrmw or i64* %a, i64 0 seq_cst, !dbg !7 1500 ret void, !dbg !7 1501} 1502; CHECK-LABEL: atomic64_or_seq_cst 1503; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 5), !dbg 1504 1505define void @atomic64_xor_seq_cst(i64* %a) nounwind uwtable { 1506entry: 1507 atomicrmw xor i64* %a, i64 0 seq_cst, !dbg !7 1508 ret void, !dbg !7 1509} 1510; CHECK-LABEL: atomic64_xor_seq_cst 1511; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 5), !dbg 1512 1513define void @atomic64_nand_seq_cst(i64* %a) nounwind uwtable { 1514entry: 1515 atomicrmw nand i64* %a, i64 0 seq_cst, !dbg !7 1516 ret void, !dbg !7 1517} 1518; CHECK-LABEL: atomic64_nand_seq_cst 1519; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 5), !dbg 1520 1521define void @atomic64_cas_monotonic(i64* %a) nounwind uwtable { 1522entry: 1523 cmpxchg i64* %a, i64 0, i64 1 monotonic monotonic, !dbg !7 1524 ret void, !dbg !7 1525} 1526; CHECK-LABEL: atomic64_cas_monotonic 1527; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 0, i32 0), !dbg 1528 1529define void @atomic64_cas_acquire(i64* %a) nounwind uwtable { 1530entry: 1531 cmpxchg i64* %a, i64 0, i64 1 acquire acquire, !dbg !7 1532 ret void, !dbg !7 1533} 1534; CHECK-LABEL: atomic64_cas_acquire 1535; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 2, i32 2), !dbg 1536 1537define void @atomic64_cas_release(i64* %a) nounwind uwtable { 1538entry: 1539 cmpxchg i64* %a, i64 0, i64 1 release monotonic, !dbg !7 1540 ret void, !dbg !7 1541} 1542; CHECK-LABEL: atomic64_cas_release 1543; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 3, i32 0), !dbg 1544 1545define void @atomic64_cas_acq_rel(i64* %a) nounwind uwtable { 1546entry: 1547 cmpxchg i64* %a, i64 0, i64 1 acq_rel acquire, !dbg !7 1548 ret void, !dbg !7 1549} 1550; CHECK-LABEL: atomic64_cas_acq_rel 1551; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 4, i32 2), !dbg 1552 1553define void @atomic64_cas_seq_cst(i64* %a) nounwind uwtable { 1554entry: 1555 cmpxchg i64* %a, i64 0, i64 1 seq_cst seq_cst, !dbg !7 1556 ret void, !dbg !7 1557} 1558; CHECK-LABEL: atomic64_cas_seq_cst 1559; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 5, i32 5), !dbg 1560 1561define void @atomic64_cas_seq_cst_ptr_ty(i8** %a, i8* %v1, i8* %v2) nounwind uwtable { 1562entry: 1563 cmpxchg i8** %a, i8* %v1, i8* %v2 seq_cst seq_cst, !dbg !7 1564 ret void 1565} 1566; CHECK-LABEL: atomic64_cas_seq_cst 1567; CHECK: {{.*}} = ptrtoint i8* %v1 to i64 1568; CHECK-NEXT: {{.*}} = ptrtoint i8* %v2 to i64 1569; CHECK-NEXT: {{.*}} = bitcast i8** %a to i64* 1570; CHECK-NEXT: {{.*}} = call i64 @__tsan_atomic64_compare_exchange_val(i64* {{.*}}, i64 {{.*}}, i64 {{.*}}, i32 5, i32 5), !dbg 1571; CHECK-NEXT: {{.*}} = icmp eq i64 1572; CHECK-NEXT: {{.*}} = inttoptr i64 {{.*}} to i8* 1573; CHECK-NEXT: {{.*}} = insertvalue { i8*, i1 } undef, i8* {{.*}}, 0 1574; CHECK-NEXT: {{.*}} = insertvalue { i8*, i1 } {{.*}}, i1 {{.*}}, 1 1575 1576define i128 @atomic128_load_unordered(i128* %a) nounwind uwtable { 1577entry: 1578 %0 = load atomic i128, i128* %a unordered, align 16, !dbg !7 1579 ret i128 %0, !dbg !7 1580} 1581; CHECK-LABEL: atomic128_load_unordered 1582; CHECK: call i128 @__tsan_atomic128_load(i128* %a, i32 0), !dbg 1583 1584define i128 @atomic128_load_monotonic(i128* %a) nounwind uwtable { 1585entry: 1586 %0 = load atomic i128, i128* %a monotonic, align 16, !dbg !7 1587 ret i128 %0, !dbg !7 1588} 1589; CHECK-LABEL: atomic128_load_monotonic 1590; CHECK: call i128 @__tsan_atomic128_load(i128* %a, i32 0), !dbg 1591 1592define i128 @atomic128_load_acquire(i128* %a) nounwind uwtable { 1593entry: 1594 %0 = load atomic i128, i128* %a acquire, align 16, !dbg !7 1595 ret i128 %0, !dbg !7 1596} 1597; CHECK-LABEL: atomic128_load_acquire 1598; CHECK: call i128 @__tsan_atomic128_load(i128* %a, i32 2), !dbg 1599 1600define i128 @atomic128_load_seq_cst(i128* %a) nounwind uwtable { 1601entry: 1602 %0 = load atomic i128, i128* %a seq_cst, align 16, !dbg !7 1603 ret i128 %0, !dbg !7 1604} 1605; CHECK-LABEL: atomic128_load_seq_cst 1606; CHECK: call i128 @__tsan_atomic128_load(i128* %a, i32 5), !dbg 1607 1608define void @atomic128_store_unordered(i128* %a) nounwind uwtable { 1609entry: 1610 store atomic i128 0, i128* %a unordered, align 16, !dbg !7 1611 ret void, !dbg !7 1612} 1613; CHECK-LABEL: atomic128_store_unordered 1614; CHECK: call void @__tsan_atomic128_store(i128* %a, i128 0, i32 0), !dbg 1615 1616define void @atomic128_store_monotonic(i128* %a) nounwind uwtable { 1617entry: 1618 store atomic i128 0, i128* %a monotonic, align 16, !dbg !7 1619 ret void, !dbg !7 1620} 1621; CHECK-LABEL: atomic128_store_monotonic 1622; CHECK: call void @__tsan_atomic128_store(i128* %a, i128 0, i32 0), !dbg 1623 1624define void @atomic128_store_release(i128* %a) nounwind uwtable { 1625entry: 1626 store atomic i128 0, i128* %a release, align 16, !dbg !7 1627 ret void, !dbg !7 1628} 1629; CHECK-LABEL: atomic128_store_release 1630; CHECK: call void @__tsan_atomic128_store(i128* %a, i128 0, i32 3), !dbg 1631 1632define void @atomic128_store_seq_cst(i128* %a) nounwind uwtable { 1633entry: 1634 store atomic i128 0, i128* %a seq_cst, align 16, !dbg !7 1635 ret void, !dbg !7 1636} 1637; CHECK-LABEL: atomic128_store_seq_cst 1638; CHECK: call void @__tsan_atomic128_store(i128* %a, i128 0, i32 5), !dbg 1639 1640define void @atomic128_xchg_monotonic(i128* %a) nounwind uwtable { 1641entry: 1642 atomicrmw xchg i128* %a, i128 0 monotonic, !dbg !7 1643 ret void, !dbg !7 1644} 1645; CHECK-LABEL: atomic128_xchg_monotonic 1646; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 0), !dbg 1647 1648define void @atomic128_add_monotonic(i128* %a) nounwind uwtable { 1649entry: 1650 atomicrmw add i128* %a, i128 0 monotonic, !dbg !7 1651 ret void, !dbg !7 1652} 1653; CHECK-LABEL: atomic128_add_monotonic 1654; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 0), !dbg 1655 1656define void @atomic128_sub_monotonic(i128* %a) nounwind uwtable { 1657entry: 1658 atomicrmw sub i128* %a, i128 0 monotonic, !dbg !7 1659 ret void, !dbg !7 1660} 1661; CHECK-LABEL: atomic128_sub_monotonic 1662; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 0), !dbg 1663 1664define void @atomic128_and_monotonic(i128* %a) nounwind uwtable { 1665entry: 1666 atomicrmw and i128* %a, i128 0 monotonic, !dbg !7 1667 ret void, !dbg !7 1668} 1669; CHECK-LABEL: atomic128_and_monotonic 1670; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 0), !dbg 1671 1672define void @atomic128_or_monotonic(i128* %a) nounwind uwtable { 1673entry: 1674 atomicrmw or i128* %a, i128 0 monotonic, !dbg !7 1675 ret void, !dbg !7 1676} 1677; CHECK-LABEL: atomic128_or_monotonic 1678; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 0), !dbg 1679 1680define void @atomic128_xor_monotonic(i128* %a) nounwind uwtable { 1681entry: 1682 atomicrmw xor i128* %a, i128 0 monotonic, !dbg !7 1683 ret void, !dbg !7 1684} 1685; CHECK-LABEL: atomic128_xor_monotonic 1686; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 0), !dbg 1687 1688define void @atomic128_nand_monotonic(i128* %a) nounwind uwtable { 1689entry: 1690 atomicrmw nand i128* %a, i128 0 monotonic, !dbg !7 1691 ret void, !dbg !7 1692} 1693; CHECK-LABEL: atomic128_nand_monotonic 1694; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 0), !dbg 1695 1696define void @atomic128_xchg_acquire(i128* %a) nounwind uwtable { 1697entry: 1698 atomicrmw xchg i128* %a, i128 0 acquire, !dbg !7 1699 ret void, !dbg !7 1700} 1701; CHECK-LABEL: atomic128_xchg_acquire 1702; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 2), !dbg 1703 1704define void @atomic128_add_acquire(i128* %a) nounwind uwtable { 1705entry: 1706 atomicrmw add i128* %a, i128 0 acquire, !dbg !7 1707 ret void, !dbg !7 1708} 1709; CHECK-LABEL: atomic128_add_acquire 1710; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 2), !dbg 1711 1712define void @atomic128_sub_acquire(i128* %a) nounwind uwtable { 1713entry: 1714 atomicrmw sub i128* %a, i128 0 acquire, !dbg !7 1715 ret void, !dbg !7 1716} 1717; CHECK-LABEL: atomic128_sub_acquire 1718; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 2), !dbg 1719 1720define void @atomic128_and_acquire(i128* %a) nounwind uwtable { 1721entry: 1722 atomicrmw and i128* %a, i128 0 acquire, !dbg !7 1723 ret void, !dbg !7 1724} 1725; CHECK-LABEL: atomic128_and_acquire 1726; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 2), !dbg 1727 1728define void @atomic128_or_acquire(i128* %a) nounwind uwtable { 1729entry: 1730 atomicrmw or i128* %a, i128 0 acquire, !dbg !7 1731 ret void, !dbg !7 1732} 1733; CHECK-LABEL: atomic128_or_acquire 1734; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 2), !dbg 1735 1736define void @atomic128_xor_acquire(i128* %a) nounwind uwtable { 1737entry: 1738 atomicrmw xor i128* %a, i128 0 acquire, !dbg !7 1739 ret void, !dbg !7 1740} 1741; CHECK-LABEL: atomic128_xor_acquire 1742; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 2), !dbg 1743 1744define void @atomic128_nand_acquire(i128* %a) nounwind uwtable { 1745entry: 1746 atomicrmw nand i128* %a, i128 0 acquire, !dbg !7 1747 ret void, !dbg !7 1748} 1749; CHECK-LABEL: atomic128_nand_acquire 1750; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 2), !dbg 1751 1752define void @atomic128_xchg_release(i128* %a) nounwind uwtable { 1753entry: 1754 atomicrmw xchg i128* %a, i128 0 release, !dbg !7 1755 ret void, !dbg !7 1756} 1757; CHECK-LABEL: atomic128_xchg_release 1758; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 3), !dbg 1759 1760define void @atomic128_add_release(i128* %a) nounwind uwtable { 1761entry: 1762 atomicrmw add i128* %a, i128 0 release, !dbg !7 1763 ret void, !dbg !7 1764} 1765; CHECK-LABEL: atomic128_add_release 1766; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 3), !dbg 1767 1768define void @atomic128_sub_release(i128* %a) nounwind uwtable { 1769entry: 1770 atomicrmw sub i128* %a, i128 0 release, !dbg !7 1771 ret void, !dbg !7 1772} 1773; CHECK-LABEL: atomic128_sub_release 1774; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 3), !dbg 1775 1776define void @atomic128_and_release(i128* %a) nounwind uwtable { 1777entry: 1778 atomicrmw and i128* %a, i128 0 release, !dbg !7 1779 ret void, !dbg !7 1780} 1781; CHECK-LABEL: atomic128_and_release 1782; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 3), !dbg 1783 1784define void @atomic128_or_release(i128* %a) nounwind uwtable { 1785entry: 1786 atomicrmw or i128* %a, i128 0 release, !dbg !7 1787 ret void, !dbg !7 1788} 1789; CHECK-LABEL: atomic128_or_release 1790; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 3), !dbg 1791 1792define void @atomic128_xor_release(i128* %a) nounwind uwtable { 1793entry: 1794 atomicrmw xor i128* %a, i128 0 release, !dbg !7 1795 ret void, !dbg !7 1796} 1797; CHECK-LABEL: atomic128_xor_release 1798; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 3), !dbg 1799 1800define void @atomic128_nand_release(i128* %a) nounwind uwtable { 1801entry: 1802 atomicrmw nand i128* %a, i128 0 release, !dbg !7 1803 ret void, !dbg !7 1804} 1805; CHECK-LABEL: atomic128_nand_release 1806; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 3), !dbg 1807 1808define void @atomic128_xchg_acq_rel(i128* %a) nounwind uwtable { 1809entry: 1810 atomicrmw xchg i128* %a, i128 0 acq_rel, !dbg !7 1811 ret void, !dbg !7 1812} 1813; CHECK-LABEL: atomic128_xchg_acq_rel 1814; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 4), !dbg 1815 1816define void @atomic128_add_acq_rel(i128* %a) nounwind uwtable { 1817entry: 1818 atomicrmw add i128* %a, i128 0 acq_rel, !dbg !7 1819 ret void, !dbg !7 1820} 1821; CHECK-LABEL: atomic128_add_acq_rel 1822; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 4), !dbg 1823 1824define void @atomic128_sub_acq_rel(i128* %a) nounwind uwtable { 1825entry: 1826 atomicrmw sub i128* %a, i128 0 acq_rel, !dbg !7 1827 ret void, !dbg !7 1828} 1829; CHECK-LABEL: atomic128_sub_acq_rel 1830; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 4), !dbg 1831 1832define void @atomic128_and_acq_rel(i128* %a) nounwind uwtable { 1833entry: 1834 atomicrmw and i128* %a, i128 0 acq_rel, !dbg !7 1835 ret void, !dbg !7 1836} 1837; CHECK-LABEL: atomic128_and_acq_rel 1838; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 4), !dbg 1839 1840define void @atomic128_or_acq_rel(i128* %a) nounwind uwtable { 1841entry: 1842 atomicrmw or i128* %a, i128 0 acq_rel, !dbg !7 1843 ret void, !dbg !7 1844} 1845; CHECK-LABEL: atomic128_or_acq_rel 1846; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 4), !dbg 1847 1848define void @atomic128_xor_acq_rel(i128* %a) nounwind uwtable { 1849entry: 1850 atomicrmw xor i128* %a, i128 0 acq_rel, !dbg !7 1851 ret void, !dbg !7 1852} 1853; CHECK-LABEL: atomic128_xor_acq_rel 1854; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 4), !dbg 1855 1856define void @atomic128_nand_acq_rel(i128* %a) nounwind uwtable { 1857entry: 1858 atomicrmw nand i128* %a, i128 0 acq_rel, !dbg !7 1859 ret void, !dbg !7 1860} 1861; CHECK-LABEL: atomic128_nand_acq_rel 1862; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 4), !dbg 1863 1864define void @atomic128_xchg_seq_cst(i128* %a) nounwind uwtable { 1865entry: 1866 atomicrmw xchg i128* %a, i128 0 seq_cst, !dbg !7 1867 ret void, !dbg !7 1868} 1869; CHECK-LABEL: atomic128_xchg_seq_cst 1870; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 5), !dbg 1871 1872define void @atomic128_add_seq_cst(i128* %a) nounwind uwtable { 1873entry: 1874 atomicrmw add i128* %a, i128 0 seq_cst, !dbg !7 1875 ret void, !dbg !7 1876} 1877; CHECK-LABEL: atomic128_add_seq_cst 1878; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 5), !dbg 1879 1880define void @atomic128_sub_seq_cst(i128* %a) nounwind uwtable { 1881entry: 1882 atomicrmw sub i128* %a, i128 0 seq_cst, !dbg !7 1883 ret void, !dbg !7 1884} 1885; CHECK-LABEL: atomic128_sub_seq_cst 1886; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 5), !dbg 1887 1888define void @atomic128_and_seq_cst(i128* %a) nounwind uwtable { 1889entry: 1890 atomicrmw and i128* %a, i128 0 seq_cst, !dbg !7 1891 ret void, !dbg !7 1892} 1893; CHECK-LABEL: atomic128_and_seq_cst 1894; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 5), !dbg 1895 1896define void @atomic128_or_seq_cst(i128* %a) nounwind uwtable { 1897entry: 1898 atomicrmw or i128* %a, i128 0 seq_cst, !dbg !7 1899 ret void, !dbg !7 1900} 1901; CHECK-LABEL: atomic128_or_seq_cst 1902; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 5), !dbg 1903 1904define void @atomic128_xor_seq_cst(i128* %a) nounwind uwtable { 1905entry: 1906 atomicrmw xor i128* %a, i128 0 seq_cst, !dbg !7 1907 ret void, !dbg !7 1908} 1909; CHECK-LABEL: atomic128_xor_seq_cst 1910; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 5), !dbg 1911 1912define void @atomic128_nand_seq_cst(i128* %a) nounwind uwtable { 1913entry: 1914 atomicrmw nand i128* %a, i128 0 seq_cst, !dbg !7 1915 ret void, !dbg !7 1916} 1917; CHECK-LABEL: atomic128_nand_seq_cst 1918; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 5), !dbg 1919 1920define void @atomic128_cas_monotonic(i128* %a) nounwind uwtable { 1921entry: 1922 cmpxchg i128* %a, i128 0, i128 1 monotonic monotonic, !dbg !7 1923 ret void, !dbg !7 1924} 1925; CHECK-LABEL: atomic128_cas_monotonic 1926; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 0, i32 0), !dbg 1927 1928define void @atomic128_cas_acquire(i128* %a) nounwind uwtable { 1929entry: 1930 cmpxchg i128* %a, i128 0, i128 1 acquire acquire, !dbg !7 1931 ret void, !dbg !7 1932} 1933; CHECK-LABEL: atomic128_cas_acquire 1934; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 2, i32 2), !dbg 1935 1936define void @atomic128_cas_release(i128* %a) nounwind uwtable { 1937entry: 1938 cmpxchg i128* %a, i128 0, i128 1 release monotonic, !dbg !7 1939 ret void, !dbg !7 1940} 1941; CHECK-LABEL: atomic128_cas_release 1942; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 3, i32 0), !dbg 1943 1944define void @atomic128_cas_acq_rel(i128* %a) nounwind uwtable { 1945entry: 1946 cmpxchg i128* %a, i128 0, i128 1 acq_rel acquire, !dbg !7 1947 ret void, !dbg !7 1948} 1949; CHECK-LABEL: atomic128_cas_acq_rel 1950; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 4, i32 2), !dbg 1951 1952define void @atomic128_cas_seq_cst(i128* %a) nounwind uwtable { 1953entry: 1954 cmpxchg i128* %a, i128 0, i128 1 seq_cst seq_cst, !dbg !7 1955 ret void, !dbg !7 1956} 1957; CHECK-LABEL: atomic128_cas_seq_cst 1958; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 5, i32 5), !dbg 1959 1960define void @atomic_signal_fence_acquire() nounwind uwtable { 1961entry: 1962 fence singlethread acquire, !dbg !7 1963 ret void, !dbg !7 1964} 1965; CHECK-LABEL: atomic_signal_fence_acquire 1966; CHECK: call void @__tsan_atomic_signal_fence(i32 2), !dbg 1967 1968define void @atomic_thread_fence_acquire() nounwind uwtable { 1969entry: 1970 fence acquire, !dbg !7 1971 ret void, !dbg !7 1972} 1973; CHECK-LABEL: atomic_thread_fence_acquire 1974; CHECK: call void @__tsan_atomic_thread_fence(i32 2), !dbg 1975 1976define void @atomic_signal_fence_release() nounwind uwtable { 1977entry: 1978 fence singlethread release, !dbg !7 1979 ret void, !dbg !7 1980} 1981; CHECK-LABEL: atomic_signal_fence_release 1982; CHECK: call void @__tsan_atomic_signal_fence(i32 3), !dbg 1983 1984define void @atomic_thread_fence_release() nounwind uwtable { 1985entry: 1986 fence release, !dbg !7 1987 ret void, !dbg !7 1988} 1989; CHECK-LABEL: atomic_thread_fence_release 1990; CHECK: call void @__tsan_atomic_thread_fence(i32 3), !dbg 1991 1992define void @atomic_signal_fence_acq_rel() nounwind uwtable { 1993entry: 1994 fence singlethread acq_rel, !dbg !7 1995 ret void, !dbg !7 1996} 1997; CHECK-LABEL: atomic_signal_fence_acq_rel 1998; CHECK: call void @__tsan_atomic_signal_fence(i32 4), !dbg 1999 2000define void @atomic_thread_fence_acq_rel() nounwind uwtable { 2001entry: 2002 fence acq_rel, !dbg !7 2003 ret void, !dbg !7 2004} 2005; CHECK-LABEL: atomic_thread_fence_acq_rel 2006; CHECK: call void @__tsan_atomic_thread_fence(i32 4), !dbg 2007 2008define void @atomic_signal_fence_seq_cst() nounwind uwtable { 2009entry: 2010 fence singlethread seq_cst, !dbg !7 2011 ret void, !dbg !7 2012} 2013; CHECK-LABEL: atomic_signal_fence_seq_cst 2014; CHECK: call void @__tsan_atomic_signal_fence(i32 5), !dbg 2015 2016define void @atomic_thread_fence_seq_cst() nounwind uwtable { 2017entry: 2018 fence seq_cst, !dbg !7 2019 ret void, !dbg !7 2020} 2021; CHECK-LABEL: atomic_thread_fence_seq_cst 2022; CHECK: call void @__tsan_atomic_thread_fence(i32 5), !dbg 2023 2024!llvm.module.flags = !{!0, !1, !2} 2025!llvm.dbg.cu = !{!8} 2026!0 = !{i32 2, !"Dwarf Version", i32 4} 2027!1 = !{i32 2, !"Debug Info Version", i32 3} 2028!2 = !{i32 1, !"PIC Level", i32 2} 2029 2030!3 = !{} 2031!4 = !DISubroutineType(types: !3) 2032!5 = !DIFile(filename: "atomic.cpp", directory: "/tmp") 2033!6 = distinct !DISubprogram(name: "test", scope: !5, file: !5, line: 99, type: !4, isLocal: false, isDefinition: true, scopeLine: 100, flags: DIFlagPrototyped, isOptimized: false, unit: !8, variables: !3) 2034!7 = !DILocation(line: 100, column: 1, scope: !6) 2035 2036!8 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang", 2037 file: !5, 2038 isOptimized: true, flags: "-O2", 2039 splitDebugFilename: "abc.debug", emissionKind: 2) 2040