brintos

brintos / llvm-project-archived public Read only

0
0
Text · 73.3 KiB · 8b387cd Raw
2184 lines · plain
1; RUN: opt < %s -passes=tsan -S | FileCheck %s2; RUN: opt < %s -passes=tsan -S -mtriple=s390x-unknown-linux | FileCheck --check-prefix=EXT %s3; RUN: opt < %s -passes=tsan -S -mtriple=mips-linux-gnu | FileCheck --check-prefix=MIPS_EXT %s4; RUN: opt < %s -passes=tsan -S -mtriple=loongarch64-unknown-linux-gnu | FileCheck --check-prefix=LA_EXT %s5; REQUIRES: x86-registered-target, systemz-registered-target, mips-registered-target, loongarch-registered-target6; Check that atomic memory operations are converted to calls into ThreadSanitizer runtime.7target 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"8 9define i8 @atomic8_load_unordered(ptr %a) nounwind uwtable {10entry:11  %0 = load atomic i8, ptr %a unordered, align 1, !dbg !712  ret i8 %0, !dbg !713}14; CHECK-LABEL: atomic8_load_unordered15; CHECK: call i8 @__tsan_atomic8_load(ptr %a, i32 0), !dbg16 17define i8 @atomic8_load_monotonic(ptr %a) nounwind uwtable {18entry:19  %0 = load atomic i8, ptr %a monotonic, align 1, !dbg !720  ret i8 %0, !dbg !721}22; CHECK-LABEL: atomic8_load_monotonic23; CHECK: call i8 @__tsan_atomic8_load(ptr %a, i32 0), !dbg24 25define i8 @atomic8_load_acquire(ptr %a) nounwind uwtable {26entry:27  %0 = load atomic i8, ptr %a acquire, align 1, !dbg !728  ret i8 %0, !dbg !729}30; CHECK-LABEL: atomic8_load_acquire31; CHECK: call i8 @__tsan_atomic8_load(ptr %a, i32 2), !dbg32 33define i8 @atomic8_load_seq_cst(ptr %a) nounwind uwtable {34entry:35  %0 = load atomic i8, ptr %a seq_cst, align 1, !dbg !736  ret i8 %0, !dbg !737}38; CHECK-LABEL: atomic8_load_seq_cst39; CHECK: call i8 @__tsan_atomic8_load(ptr %a, i32 5), !dbg40 41define void @atomic8_store_unordered(ptr %a) nounwind uwtable {42entry:43  store atomic i8 0, ptr %a unordered, align 1, !dbg !744  ret void, !dbg !745}46; CHECK-LABEL: atomic8_store_unordered47; CHECK: call void @__tsan_atomic8_store(ptr %a, i8 0, i32 0), !dbg48 49define void @atomic8_store_monotonic(ptr %a) nounwind uwtable {50entry:51  store atomic i8 0, ptr %a monotonic, align 1, !dbg !752  ret void, !dbg !753}54; CHECK-LABEL: atomic8_store_monotonic55; CHECK: call void @__tsan_atomic8_store(ptr %a, i8 0, i32 0), !dbg56 57define void @atomic8_store_release(ptr %a) nounwind uwtable {58entry:59  store atomic i8 0, ptr %a release, align 1, !dbg !760  ret void, !dbg !761}62; CHECK-LABEL: atomic8_store_release63; CHECK: call void @__tsan_atomic8_store(ptr %a, i8 0, i32 3), !dbg64 65define void @atomic8_store_seq_cst(ptr %a) nounwind uwtable {66entry:67  store atomic i8 0, ptr %a seq_cst, align 1, !dbg !768  ret void, !dbg !769}70; CHECK-LABEL: atomic8_store_seq_cst71; CHECK: call void @__tsan_atomic8_store(ptr %a, i8 0, i32 5), !dbg72 73define void @atomic8_xchg_monotonic(ptr %a) nounwind uwtable {74entry:75  atomicrmw xchg ptr %a, i8 0 monotonic, !dbg !776  ret void, !dbg !777}78; CHECK-LABEL: atomic8_xchg_monotonic79; CHECK: call i8 @__tsan_atomic8_exchange(ptr %a, i8 0, i32 0), !dbg80 81define void @atomic8_xchg_monotonic_ptr(ptr %a, ptr %b) nounwind uwtable {82entry:83  atomicrmw xchg ptr %a, ptr %b monotonic, !dbg !784  ret void, !dbg !785}86; CHECK-LABEL: atomic8_xchg_monotonic_ptr87; CHECK: [[ARG:%.*]] = ptrtoint ptr %b to i64, !dbg88; CHECK: [[RES:%.*]] = call i64 @__tsan_atomic64_exchange(ptr %a, i64 [[ARG]], i32 0), !dbg89; CHECK: [[CAST:%.*]] = inttoptr i64 [[RES]] to ptr, !dbg90 91define void @atomic8_xchg_monotonic_float(ptr %a, float %b) nounwind uwtable {92entry:93  atomicrmw xchg ptr %a, float %b monotonic, !dbg !794  ret void, !dbg !795}96; CHECK-LABEL: atomic8_xchg_monotonic_float97; CHECK: [[ARG:%.*]] = bitcast float %b to i32, !dbg98; CHECK: [[RES:%.*]] = call i32 @__tsan_atomic32_exchange(ptr %a, i32 [[ARG]], i32 0), !dbg99; CHECK: [[CAST:%.*]] = bitcast i32 [[RES]] to float, !dbg100 101define void @atomic8_add_monotonic(ptr %a) nounwind uwtable {102entry:103  atomicrmw add ptr %a, i8 0 monotonic, !dbg !7104  ret void, !dbg !7105}106; CHECK-LABEL: atomic8_add_monotonic107; CHECK: call i8 @__tsan_atomic8_fetch_add(ptr %a, i8 0, i32 0), !dbg108 109define void @atomic8_sub_monotonic(ptr %a) nounwind uwtable {110entry:111  atomicrmw sub ptr %a, i8 0 monotonic, !dbg !7112  ret void, !dbg !7113}114; CHECK-LABEL: atomic8_sub_monotonic115; CHECK: call i8 @__tsan_atomic8_fetch_sub(ptr %a, i8 0, i32 0), !dbg116 117define void @atomic8_and_monotonic(ptr %a) nounwind uwtable {118entry:119  atomicrmw and ptr %a, i8 0 monotonic, !dbg !7120  ret void, !dbg !7121}122; CHECK-LABEL: atomic8_and_monotonic123; CHECK: call i8 @__tsan_atomic8_fetch_and(ptr %a, i8 0, i32 0), !dbg124 125define void @atomic8_or_monotonic(ptr %a) nounwind uwtable {126entry:127  atomicrmw or ptr %a, i8 0 monotonic, !dbg !7128  ret void, !dbg !7129}130; CHECK-LABEL: atomic8_or_monotonic131; CHECK: call i8 @__tsan_atomic8_fetch_or(ptr %a, i8 0, i32 0), !dbg132 133define void @atomic8_xor_monotonic(ptr %a) nounwind uwtable {134entry:135  atomicrmw xor ptr %a, i8 0 monotonic, !dbg !7136  ret void, !dbg !7137}138; CHECK-LABEL: atomic8_xor_monotonic139; CHECK: call i8 @__tsan_atomic8_fetch_xor(ptr %a, i8 0, i32 0), !dbg140 141define void @atomic8_nand_monotonic(ptr %a) nounwind uwtable {142entry:143  atomicrmw nand ptr %a, i8 0 monotonic, !dbg !7144  ret void, !dbg !7145}146; CHECK-LABEL: atomic8_nand_monotonic147; CHECK: call i8 @__tsan_atomic8_fetch_nand(ptr %a, i8 0, i32 0), !dbg148 149define void @atomic8_xchg_acquire(ptr %a) nounwind uwtable {150entry:151  atomicrmw xchg ptr %a, i8 0 acquire, !dbg !7152  ret void, !dbg !7153}154; CHECK-LABEL: atomic8_xchg_acquire155; CHECK: call i8 @__tsan_atomic8_exchange(ptr %a, i8 0, i32 2), !dbg156 157define void @atomic8_add_acquire(ptr %a) nounwind uwtable {158entry:159  atomicrmw add ptr %a, i8 0 acquire, !dbg !7160  ret void, !dbg !7161}162; CHECK-LABEL: atomic8_add_acquire163; CHECK: call i8 @__tsan_atomic8_fetch_add(ptr %a, i8 0, i32 2), !dbg164 165define void @atomic8_sub_acquire(ptr %a) nounwind uwtable {166entry:167  atomicrmw sub ptr %a, i8 0 acquire, !dbg !7168  ret void, !dbg !7169}170; CHECK-LABEL: atomic8_sub_acquire171; CHECK: call i8 @__tsan_atomic8_fetch_sub(ptr %a, i8 0, i32 2), !dbg172 173define void @atomic8_and_acquire(ptr %a) nounwind uwtable {174entry:175  atomicrmw and ptr %a, i8 0 acquire, !dbg !7176  ret void, !dbg !7177}178; CHECK-LABEL: atomic8_and_acquire179; CHECK: call i8 @__tsan_atomic8_fetch_and(ptr %a, i8 0, i32 2), !dbg180 181define void @atomic8_or_acquire(ptr %a) nounwind uwtable {182entry:183  atomicrmw or ptr %a, i8 0 acquire, !dbg !7184  ret void, !dbg !7185}186; CHECK-LABEL: atomic8_or_acquire187; CHECK: call i8 @__tsan_atomic8_fetch_or(ptr %a, i8 0, i32 2), !dbg188 189define void @atomic8_xor_acquire(ptr %a) nounwind uwtable {190entry:191  atomicrmw xor ptr %a, i8 0 acquire, !dbg !7192  ret void, !dbg !7193}194; CHECK-LABEL: atomic8_xor_acquire195; CHECK: call i8 @__tsan_atomic8_fetch_xor(ptr %a, i8 0, i32 2), !dbg196 197define void @atomic8_nand_acquire(ptr %a) nounwind uwtable {198entry:199  atomicrmw nand ptr %a, i8 0 acquire, !dbg !7200  ret void, !dbg !7201}202; CHECK-LABEL: atomic8_nand_acquire203; CHECK: call i8 @__tsan_atomic8_fetch_nand(ptr %a, i8 0, i32 2), !dbg204 205define void @atomic8_xchg_release(ptr %a) nounwind uwtable {206entry:207  atomicrmw xchg ptr %a, i8 0 release, !dbg !7208  ret void, !dbg !7209}210; CHECK-LABEL: atomic8_xchg_release211; CHECK: call i8 @__tsan_atomic8_exchange(ptr %a, i8 0, i32 3), !dbg212 213define void @atomic8_add_release(ptr %a) nounwind uwtable {214entry:215  atomicrmw add ptr %a, i8 0 release, !dbg !7216  ret void, !dbg !7217}218; CHECK-LABEL: atomic8_add_release219; CHECK: call i8 @__tsan_atomic8_fetch_add(ptr %a, i8 0, i32 3), !dbg220 221define void @atomic8_sub_release(ptr %a) nounwind uwtable {222entry:223  atomicrmw sub ptr %a, i8 0 release, !dbg !7224  ret void, !dbg !7225}226; CHECK-LABEL: atomic8_sub_release227; CHECK: call i8 @__tsan_atomic8_fetch_sub(ptr %a, i8 0, i32 3), !dbg228 229define void @atomic8_and_release(ptr %a) nounwind uwtable {230entry:231  atomicrmw and ptr %a, i8 0 release, !dbg !7232  ret void, !dbg !7233}234; CHECK-LABEL: atomic8_and_release235; CHECK: call i8 @__tsan_atomic8_fetch_and(ptr %a, i8 0, i32 3), !dbg236 237define void @atomic8_or_release(ptr %a) nounwind uwtable {238entry:239  atomicrmw or ptr %a, i8 0 release, !dbg !7240  ret void, !dbg !7241}242; CHECK-LABEL: atomic8_or_release243; CHECK: call i8 @__tsan_atomic8_fetch_or(ptr %a, i8 0, i32 3), !dbg244 245define void @atomic8_xor_release(ptr %a) nounwind uwtable {246entry:247  atomicrmw xor ptr %a, i8 0 release, !dbg !7248  ret void, !dbg !7249}250; CHECK-LABEL: atomic8_xor_release251; CHECK: call i8 @__tsan_atomic8_fetch_xor(ptr %a, i8 0, i32 3), !dbg252 253define void @atomic8_nand_release(ptr %a) nounwind uwtable {254entry:255  atomicrmw nand ptr %a, i8 0 release, !dbg !7256  ret void, !dbg !7257}258; CHECK-LABEL: atomic8_nand_release259; CHECK: call i8 @__tsan_atomic8_fetch_nand(ptr %a, i8 0, i32 3), !dbg260 261define void @atomic8_xchg_acq_rel(ptr %a) nounwind uwtable {262entry:263  atomicrmw xchg ptr %a, i8 0 acq_rel, !dbg !7264  ret void, !dbg !7265}266; CHECK-LABEL: atomic8_xchg_acq_rel267; CHECK: call i8 @__tsan_atomic8_exchange(ptr %a, i8 0, i32 4), !dbg268 269define void @atomic8_add_acq_rel(ptr %a) nounwind uwtable {270entry:271  atomicrmw add ptr %a, i8 0 acq_rel, !dbg !7272  ret void, !dbg !7273}274; CHECK-LABEL: atomic8_add_acq_rel275; CHECK: call i8 @__tsan_atomic8_fetch_add(ptr %a, i8 0, i32 4), !dbg276 277define void @atomic8_sub_acq_rel(ptr %a) nounwind uwtable {278entry:279  atomicrmw sub ptr %a, i8 0 acq_rel, !dbg !7280  ret void, !dbg !7281}282; CHECK-LABEL: atomic8_sub_acq_rel283; CHECK: call i8 @__tsan_atomic8_fetch_sub(ptr %a, i8 0, i32 4), !dbg284 285define void @atomic8_and_acq_rel(ptr %a) nounwind uwtable {286entry:287  atomicrmw and ptr %a, i8 0 acq_rel, !dbg !7288  ret void, !dbg !7289}290; CHECK-LABEL: atomic8_and_acq_rel291; CHECK: call i8 @__tsan_atomic8_fetch_and(ptr %a, i8 0, i32 4), !dbg292 293define void @atomic8_or_acq_rel(ptr %a) nounwind uwtable {294entry:295  atomicrmw or ptr %a, i8 0 acq_rel, !dbg !7296  ret void, !dbg !7297}298; CHECK-LABEL: atomic8_or_acq_rel299; CHECK: call i8 @__tsan_atomic8_fetch_or(ptr %a, i8 0, i32 4), !dbg300 301define void @atomic8_xor_acq_rel(ptr %a) nounwind uwtable {302entry:303  atomicrmw xor ptr %a, i8 0 acq_rel, !dbg !7304  ret void, !dbg !7305}306; CHECK-LABEL: atomic8_xor_acq_rel307; CHECK: call i8 @__tsan_atomic8_fetch_xor(ptr %a, i8 0, i32 4), !dbg308 309define void @atomic8_nand_acq_rel(ptr %a) nounwind uwtable {310entry:311  atomicrmw nand ptr %a, i8 0 acq_rel, !dbg !7312  ret void, !dbg !7313}314; CHECK-LABEL: atomic8_nand_acq_rel315; CHECK: call i8 @__tsan_atomic8_fetch_nand(ptr %a, i8 0, i32 4), !dbg316 317define void @atomic8_xchg_seq_cst(ptr %a) nounwind uwtable {318entry:319  atomicrmw xchg ptr %a, i8 0 seq_cst, !dbg !7320  ret void, !dbg !7321}322; CHECK-LABEL: atomic8_xchg_seq_cst323; CHECK: call i8 @__tsan_atomic8_exchange(ptr %a, i8 0, i32 5), !dbg324 325define void @atomic8_add_seq_cst(ptr %a) nounwind uwtable {326entry:327  atomicrmw add ptr %a, i8 0 seq_cst, !dbg !7328  ret void, !dbg !7329}330; CHECK-LABEL: atomic8_add_seq_cst331; CHECK: call i8 @__tsan_atomic8_fetch_add(ptr %a, i8 0, i32 5), !dbg332 333define void @atomic8_sub_seq_cst(ptr %a) nounwind uwtable {334entry:335  atomicrmw sub ptr %a, i8 0 seq_cst, !dbg !7336  ret void, !dbg !7337}338; CHECK-LABEL: atomic8_sub_seq_cst339; CHECK: call i8 @__tsan_atomic8_fetch_sub(ptr %a, i8 0, i32 5), !dbg340 341define void @atomic8_and_seq_cst(ptr %a) nounwind uwtable {342entry:343  atomicrmw and ptr %a, i8 0 seq_cst, !dbg !7344  ret void, !dbg !7345}346; CHECK-LABEL: atomic8_and_seq_cst347; CHECK: call i8 @__tsan_atomic8_fetch_and(ptr %a, i8 0, i32 5), !dbg348 349define void @atomic8_or_seq_cst(ptr %a) nounwind uwtable {350entry:351  atomicrmw or ptr %a, i8 0 seq_cst, !dbg !7352  ret void, !dbg !7353}354; CHECK-LABEL: atomic8_or_seq_cst355; CHECK: call i8 @__tsan_atomic8_fetch_or(ptr %a, i8 0, i32 5), !dbg356 357define void @atomic8_xor_seq_cst(ptr %a) nounwind uwtable {358entry:359  atomicrmw xor ptr %a, i8 0 seq_cst, !dbg !7360  ret void, !dbg !7361}362; CHECK-LABEL: atomic8_xor_seq_cst363; CHECK: call i8 @__tsan_atomic8_fetch_xor(ptr %a, i8 0, i32 5), !dbg364 365define void @atomic8_nand_seq_cst(ptr %a) nounwind uwtable {366entry:367  atomicrmw nand ptr %a, i8 0 seq_cst, !dbg !7368  ret void, !dbg !7369}370; CHECK-LABEL: atomic8_nand_seq_cst371; CHECK: call i8 @__tsan_atomic8_fetch_nand(ptr %a, i8 0, i32 5), !dbg372 373define void @atomic8_cas_monotonic(ptr %a) nounwind uwtable {374entry:375  cmpxchg ptr %a, i8 0, i8 1 monotonic monotonic, !dbg !7376  cmpxchg ptr %a, i8 0, i8 1 monotonic acquire, !dbg !7377  cmpxchg ptr %a, i8 0, i8 1 monotonic seq_cst, !dbg !7378  ret void, !dbg !7379}380; CHECK-LABEL: atomic8_cas_monotonic381; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 0, i32 0), !dbg382; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 0, i32 2), !dbg383; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 0, i32 5), !dbg384 385define void @atomic8_cas_acquire(ptr %a) nounwind uwtable {386entry:387  cmpxchg ptr %a, i8 0, i8 1 acquire monotonic, !dbg !7388  cmpxchg ptr %a, i8 0, i8 1 acquire acquire, !dbg !7389  cmpxchg ptr %a, i8 0, i8 1 acquire seq_cst, !dbg !7390  ret void, !dbg !7391}392; CHECK-LABEL: atomic8_cas_acquire393; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 2, i32 0), !dbg394; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 2, i32 2), !dbg395; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 2, i32 5), !dbg396 397define void @atomic8_cas_release(ptr %a) nounwind uwtable {398entry:399  cmpxchg ptr %a, i8 0, i8 1 release monotonic, !dbg !7400  cmpxchg ptr %a, i8 0, i8 1 release acquire, !dbg !7401  cmpxchg ptr %a, i8 0, i8 1 release seq_cst, !dbg !7402  ret void, !dbg !7403}404; CHECK-LABEL: atomic8_cas_release405; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 3, i32 0), !dbg406; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 3, i32 2), !dbg407; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 3, i32 5), !dbg408 409define void @atomic8_cas_acq_rel(ptr %a) nounwind uwtable {410entry:411  cmpxchg ptr %a, i8 0, i8 1 acq_rel monotonic, !dbg !7412  cmpxchg ptr %a, i8 0, i8 1 acq_rel acquire, !dbg !7413  cmpxchg ptr %a, i8 0, i8 1 acq_rel seq_cst, !dbg !7414  ret void, !dbg !7415}416; CHECK-LABEL: atomic8_cas_acq_rel417; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 4, i32 0), !dbg418; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 4, i32 2), !dbg419; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 4, i32 5), !dbg420 421define void @atomic8_cas_seq_cst(ptr %a) nounwind uwtable {422entry:423  cmpxchg ptr %a, i8 0, i8 1 seq_cst monotonic, !dbg !7424  cmpxchg ptr %a, i8 0, i8 1 seq_cst acquire, !dbg !7425  cmpxchg ptr %a, i8 0, i8 1 seq_cst seq_cst, !dbg !7426  ret void, !dbg !7427}428; CHECK-LABEL: atomic8_cas_seq_cst429; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 5, i32 0), !dbg430; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 5, i32 2), !dbg431; CHECK: call i8 @__tsan_atomic8_compare_exchange_val(ptr %a, i8 0, i8 1, i32 5, i32 5), !dbg432 433define i16 @atomic16_load_unordered(ptr %a) nounwind uwtable {434entry:435  %0 = load atomic i16, ptr %a unordered, align 2, !dbg !7436  ret i16 %0, !dbg !7437}438; CHECK-LABEL: atomic16_load_unordered439; CHECK: call i16 @__tsan_atomic16_load(ptr %a, i32 0), !dbg440 441define i16 @atomic16_load_monotonic(ptr %a) nounwind uwtable {442entry:443  %0 = load atomic i16, ptr %a monotonic, align 2, !dbg !7444  ret i16 %0, !dbg !7445}446; CHECK-LABEL: atomic16_load_monotonic447; CHECK: call i16 @__tsan_atomic16_load(ptr %a, i32 0), !dbg448 449define i16 @atomic16_load_acquire(ptr %a) nounwind uwtable {450entry:451  %0 = load atomic i16, ptr %a acquire, align 2, !dbg !7452  ret i16 %0, !dbg !7453}454; CHECK-LABEL: atomic16_load_acquire455; CHECK: call i16 @__tsan_atomic16_load(ptr %a, i32 2), !dbg456 457define i16 @atomic16_load_seq_cst(ptr %a) nounwind uwtable {458entry:459  %0 = load atomic i16, ptr %a seq_cst, align 2, !dbg !7460  ret i16 %0, !dbg !7461}462; CHECK-LABEL: atomic16_load_seq_cst463; CHECK: call i16 @__tsan_atomic16_load(ptr %a, i32 5), !dbg464 465define void @atomic16_store_unordered(ptr %a) nounwind uwtable {466entry:467  store atomic i16 0, ptr %a unordered, align 2, !dbg !7468  ret void, !dbg !7469}470; CHECK-LABEL: atomic16_store_unordered471; CHECK: call void @__tsan_atomic16_store(ptr %a, i16 0, i32 0), !dbg472 473define void @atomic16_store_monotonic(ptr %a) nounwind uwtable {474entry:475  store atomic i16 0, ptr %a monotonic, align 2, !dbg !7476  ret void, !dbg !7477}478; CHECK-LABEL: atomic16_store_monotonic479; CHECK: call void @__tsan_atomic16_store(ptr %a, i16 0, i32 0), !dbg480 481define void @atomic16_store_release(ptr %a) nounwind uwtable {482entry:483  store atomic i16 0, ptr %a release, align 2, !dbg !7484  ret void, !dbg !7485}486; CHECK-LABEL: atomic16_store_release487; CHECK: call void @__tsan_atomic16_store(ptr %a, i16 0, i32 3), !dbg488 489define void @atomic16_store_seq_cst(ptr %a) nounwind uwtable {490entry:491  store atomic i16 0, ptr %a seq_cst, align 2, !dbg !7492  ret void, !dbg !7493}494; CHECK-LABEL: atomic16_store_seq_cst495; CHECK: call void @__tsan_atomic16_store(ptr %a, i16 0, i32 5), !dbg496 497define void @atomic16_xchg_monotonic(ptr %a) nounwind uwtable {498entry:499  atomicrmw xchg ptr %a, i16 0 monotonic, !dbg !7500  ret void, !dbg !7501}502; CHECK-LABEL: atomic16_xchg_monotonic503; CHECK: call i16 @__tsan_atomic16_exchange(ptr %a, i16 0, i32 0), !dbg504 505define void @atomic16_add_monotonic(ptr %a) nounwind uwtable {506entry:507  atomicrmw add ptr %a, i16 0 monotonic, !dbg !7508  ret void, !dbg !7509}510; CHECK-LABEL: atomic16_add_monotonic511; CHECK: call i16 @__tsan_atomic16_fetch_add(ptr %a, i16 0, i32 0), !dbg512 513define void @atomic16_sub_monotonic(ptr %a) nounwind uwtable {514entry:515  atomicrmw sub ptr %a, i16 0 monotonic, !dbg !7516  ret void, !dbg !7517}518; CHECK-LABEL: atomic16_sub_monotonic519; CHECK: call i16 @__tsan_atomic16_fetch_sub(ptr %a, i16 0, i32 0), !dbg520 521define void @atomic16_and_monotonic(ptr %a) nounwind uwtable {522entry:523  atomicrmw and ptr %a, i16 0 monotonic, !dbg !7524  ret void, !dbg !7525}526; CHECK-LABEL: atomic16_and_monotonic527; CHECK: call i16 @__tsan_atomic16_fetch_and(ptr %a, i16 0, i32 0), !dbg528 529define void @atomic16_or_monotonic(ptr %a) nounwind uwtable {530entry:531  atomicrmw or ptr %a, i16 0 monotonic, !dbg !7532  ret void, !dbg !7533}534; CHECK-LABEL: atomic16_or_monotonic535; CHECK: call i16 @__tsan_atomic16_fetch_or(ptr %a, i16 0, i32 0), !dbg536 537define void @atomic16_xor_monotonic(ptr %a) nounwind uwtable {538entry:539  atomicrmw xor ptr %a, i16 0 monotonic, !dbg !7540  ret void, !dbg !7541}542; CHECK-LABEL: atomic16_xor_monotonic543; CHECK: call i16 @__tsan_atomic16_fetch_xor(ptr %a, i16 0, i32 0), !dbg544 545define void @atomic16_nand_monotonic(ptr %a) nounwind uwtable {546entry:547  atomicrmw nand ptr %a, i16 0 monotonic, !dbg !7548  ret void, !dbg !7549}550; CHECK-LABEL: atomic16_nand_monotonic551; CHECK: call i16 @__tsan_atomic16_fetch_nand(ptr %a, i16 0, i32 0), !dbg552 553define void @atomic16_xchg_acquire(ptr %a) nounwind uwtable {554entry:555  atomicrmw xchg ptr %a, i16 0 acquire, !dbg !7556  ret void, !dbg !7557}558; CHECK-LABEL: atomic16_xchg_acquire559; CHECK: call i16 @__tsan_atomic16_exchange(ptr %a, i16 0, i32 2), !dbg560 561define void @atomic16_add_acquire(ptr %a) nounwind uwtable {562entry:563  atomicrmw add ptr %a, i16 0 acquire, !dbg !7564  ret void, !dbg !7565}566; CHECK-LABEL: atomic16_add_acquire567; CHECK: call i16 @__tsan_atomic16_fetch_add(ptr %a, i16 0, i32 2), !dbg568 569define void @atomic16_sub_acquire(ptr %a) nounwind uwtable {570entry:571  atomicrmw sub ptr %a, i16 0 acquire, !dbg !7572  ret void, !dbg !7573}574; CHECK-LABEL: atomic16_sub_acquire575; CHECK: call i16 @__tsan_atomic16_fetch_sub(ptr %a, i16 0, i32 2), !dbg576 577define void @atomic16_and_acquire(ptr %a) nounwind uwtable {578entry:579  atomicrmw and ptr %a, i16 0 acquire, !dbg !7580  ret void, !dbg !7581}582; CHECK-LABEL: atomic16_and_acquire583; CHECK: call i16 @__tsan_atomic16_fetch_and(ptr %a, i16 0, i32 2), !dbg584 585define void @atomic16_or_acquire(ptr %a) nounwind uwtable {586entry:587  atomicrmw or ptr %a, i16 0 acquire, !dbg !7588  ret void, !dbg !7589}590; CHECK-LABEL: atomic16_or_acquire591; CHECK: call i16 @__tsan_atomic16_fetch_or(ptr %a, i16 0, i32 2), !dbg592 593define void @atomic16_xor_acquire(ptr %a) nounwind uwtable {594entry:595  atomicrmw xor ptr %a, i16 0 acquire, !dbg !7596  ret void, !dbg !7597}598; CHECK-LABEL: atomic16_xor_acquire599; CHECK: call i16 @__tsan_atomic16_fetch_xor(ptr %a, i16 0, i32 2), !dbg600 601define void @atomic16_nand_acquire(ptr %a) nounwind uwtable {602entry:603  atomicrmw nand ptr %a, i16 0 acquire, !dbg !7604  ret void, !dbg !7605}606; CHECK-LABEL: atomic16_nand_acquire607; CHECK: call i16 @__tsan_atomic16_fetch_nand(ptr %a, i16 0, i32 2), !dbg608 609define void @atomic16_xchg_release(ptr %a) nounwind uwtable {610entry:611  atomicrmw xchg ptr %a, i16 0 release, !dbg !7612  ret void, !dbg !7613}614; CHECK-LABEL: atomic16_xchg_release615; CHECK: call i16 @__tsan_atomic16_exchange(ptr %a, i16 0, i32 3), !dbg616 617define void @atomic16_add_release(ptr %a) nounwind uwtable {618entry:619  atomicrmw add ptr %a, i16 0 release, !dbg !7620  ret void, !dbg !7621}622; CHECK-LABEL: atomic16_add_release623; CHECK: call i16 @__tsan_atomic16_fetch_add(ptr %a, i16 0, i32 3), !dbg624 625define void @atomic16_sub_release(ptr %a) nounwind uwtable {626entry:627  atomicrmw sub ptr %a, i16 0 release, !dbg !7628  ret void, !dbg !7629}630; CHECK-LABEL: atomic16_sub_release631; CHECK: call i16 @__tsan_atomic16_fetch_sub(ptr %a, i16 0, i32 3), !dbg632 633define void @atomic16_and_release(ptr %a) nounwind uwtable {634entry:635  atomicrmw and ptr %a, i16 0 release, !dbg !7636  ret void, !dbg !7637}638; CHECK-LABEL: atomic16_and_release639; CHECK: call i16 @__tsan_atomic16_fetch_and(ptr %a, i16 0, i32 3), !dbg640 641define void @atomic16_or_release(ptr %a) nounwind uwtable {642entry:643  atomicrmw or ptr %a, i16 0 release, !dbg !7644  ret void, !dbg !7645}646; CHECK-LABEL: atomic16_or_release647; CHECK: call i16 @__tsan_atomic16_fetch_or(ptr %a, i16 0, i32 3), !dbg648 649define void @atomic16_xor_release(ptr %a) nounwind uwtable {650entry:651  atomicrmw xor ptr %a, i16 0 release, !dbg !7652  ret void, !dbg !7653}654; CHECK-LABEL: atomic16_xor_release655; CHECK: call i16 @__tsan_atomic16_fetch_xor(ptr %a, i16 0, i32 3), !dbg656 657define void @atomic16_nand_release(ptr %a) nounwind uwtable {658entry:659  atomicrmw nand ptr %a, i16 0 release, !dbg !7660  ret void, !dbg !7661}662; CHECK-LABEL: atomic16_nand_release663; CHECK: call i16 @__tsan_atomic16_fetch_nand(ptr %a, i16 0, i32 3), !dbg664 665define void @atomic16_xchg_acq_rel(ptr %a) nounwind uwtable {666entry:667  atomicrmw xchg ptr %a, i16 0 acq_rel, !dbg !7668  ret void, !dbg !7669}670; CHECK-LABEL: atomic16_xchg_acq_rel671; CHECK: call i16 @__tsan_atomic16_exchange(ptr %a, i16 0, i32 4), !dbg672 673define void @atomic16_add_acq_rel(ptr %a) nounwind uwtable {674entry:675  atomicrmw add ptr %a, i16 0 acq_rel, !dbg !7676  ret void, !dbg !7677}678; CHECK-LABEL: atomic16_add_acq_rel679; CHECK: call i16 @__tsan_atomic16_fetch_add(ptr %a, i16 0, i32 4), !dbg680 681define void @atomic16_sub_acq_rel(ptr %a) nounwind uwtable {682entry:683  atomicrmw sub ptr %a, i16 0 acq_rel, !dbg !7684  ret void, !dbg !7685}686; CHECK-LABEL: atomic16_sub_acq_rel687; CHECK: call i16 @__tsan_atomic16_fetch_sub(ptr %a, i16 0, i32 4), !dbg688 689define void @atomic16_and_acq_rel(ptr %a) nounwind uwtable {690entry:691  atomicrmw and ptr %a, i16 0 acq_rel, !dbg !7692  ret void, !dbg !7693}694; CHECK-LABEL: atomic16_and_acq_rel695; CHECK: call i16 @__tsan_atomic16_fetch_and(ptr %a, i16 0, i32 4), !dbg696 697define void @atomic16_or_acq_rel(ptr %a) nounwind uwtable {698entry:699  atomicrmw or ptr %a, i16 0 acq_rel, !dbg !7700  ret void, !dbg !7701}702; CHECK-LABEL: atomic16_or_acq_rel703; CHECK: call i16 @__tsan_atomic16_fetch_or(ptr %a, i16 0, i32 4), !dbg704 705define void @atomic16_xor_acq_rel(ptr %a) nounwind uwtable {706entry:707  atomicrmw xor ptr %a, i16 0 acq_rel, !dbg !7708  ret void, !dbg !7709}710; CHECK-LABEL: atomic16_xor_acq_rel711; CHECK: call i16 @__tsan_atomic16_fetch_xor(ptr %a, i16 0, i32 4), !dbg712 713define void @atomic16_nand_acq_rel(ptr %a) nounwind uwtable {714entry:715  atomicrmw nand ptr %a, i16 0 acq_rel, !dbg !7716  ret void, !dbg !7717}718; CHECK-LABEL: atomic16_nand_acq_rel719; CHECK: call i16 @__tsan_atomic16_fetch_nand(ptr %a, i16 0, i32 4), !dbg720 721define void @atomic16_xchg_seq_cst(ptr %a) nounwind uwtable {722entry:723  atomicrmw xchg ptr %a, i16 0 seq_cst, !dbg !7724  ret void, !dbg !7725}726; CHECK-LABEL: atomic16_xchg_seq_cst727; CHECK: call i16 @__tsan_atomic16_exchange(ptr %a, i16 0, i32 5), !dbg728 729define void @atomic16_add_seq_cst(ptr %a) nounwind uwtable {730entry:731  atomicrmw add ptr %a, i16 0 seq_cst, !dbg !7732  ret void, !dbg !7733}734; CHECK-LABEL: atomic16_add_seq_cst735; CHECK: call i16 @__tsan_atomic16_fetch_add(ptr %a, i16 0, i32 5), !dbg736 737define void @atomic16_sub_seq_cst(ptr %a) nounwind uwtable {738entry:739  atomicrmw sub ptr %a, i16 0 seq_cst, !dbg !7740  ret void, !dbg !7741}742; CHECK-LABEL: atomic16_sub_seq_cst743; CHECK: call i16 @__tsan_atomic16_fetch_sub(ptr %a, i16 0, i32 5), !dbg744 745define void @atomic16_and_seq_cst(ptr %a) nounwind uwtable {746entry:747  atomicrmw and ptr %a, i16 0 seq_cst, !dbg !7748  ret void, !dbg !7749}750; CHECK-LABEL: atomic16_and_seq_cst751; CHECK: call i16 @__tsan_atomic16_fetch_and(ptr %a, i16 0, i32 5), !dbg752 753define void @atomic16_or_seq_cst(ptr %a) nounwind uwtable {754entry:755  atomicrmw or ptr %a, i16 0 seq_cst, !dbg !7756  ret void, !dbg !7757}758; CHECK-LABEL: atomic16_or_seq_cst759; CHECK: call i16 @__tsan_atomic16_fetch_or(ptr %a, i16 0, i32 5), !dbg760 761define void @atomic16_xor_seq_cst(ptr %a) nounwind uwtable {762entry:763  atomicrmw xor ptr %a, i16 0 seq_cst, !dbg !7764  ret void, !dbg !7765}766; CHECK-LABEL: atomic16_xor_seq_cst767; CHECK: call i16 @__tsan_atomic16_fetch_xor(ptr %a, i16 0, i32 5), !dbg768 769define void @atomic16_nand_seq_cst(ptr %a) nounwind uwtable {770entry:771  atomicrmw nand ptr %a, i16 0 seq_cst, !dbg !7772  ret void, !dbg !7773}774; CHECK-LABEL: atomic16_nand_seq_cst775; CHECK: call i16 @__tsan_atomic16_fetch_nand(ptr %a, i16 0, i32 5), !dbg776 777define void @atomic16_cas_monotonic(ptr %a) nounwind uwtable {778entry:779  cmpxchg ptr %a, i16 0, i16 1 monotonic monotonic, !dbg !7780  cmpxchg ptr %a, i16 0, i16 1 monotonic acquire, !dbg !7781  cmpxchg ptr %a, i16 0, i16 1 monotonic seq_cst, !dbg !7782  ret void, !dbg !7783}784; CHECK-LABEL: atomic16_cas_monotonic785; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 0, i32 0), !dbg786; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 0, i32 2), !dbg787; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 0, i32 5), !dbg788 789define void @atomic16_cas_acquire(ptr %a) nounwind uwtable {790entry:791  cmpxchg ptr %a, i16 0, i16 1 acquire monotonic, !dbg !7792  cmpxchg ptr %a, i16 0, i16 1 acquire acquire, !dbg !7793  cmpxchg ptr %a, i16 0, i16 1 acquire seq_cst, !dbg !7794  ret void, !dbg !7795}796; CHECK-LABEL: atomic16_cas_acquire797; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 2, i32 0), !dbg798; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 2, i32 2), !dbg799; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 2, i32 5), !dbg800 801define void @atomic16_cas_release(ptr %a) nounwind uwtable {802entry:803  cmpxchg ptr %a, i16 0, i16 1 release monotonic, !dbg !7804  cmpxchg ptr %a, i16 0, i16 1 release acquire, !dbg !7805  cmpxchg ptr %a, i16 0, i16 1 release seq_cst, !dbg !7806  ret void, !dbg !7807}808; CHECK-LABEL: atomic16_cas_release809; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 3, i32 0), !dbg810; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 3, i32 2), !dbg811; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 3, i32 5), !dbg812 813define void @atomic16_cas_acq_rel(ptr %a) nounwind uwtable {814entry:815  cmpxchg ptr %a, i16 0, i16 1 acq_rel monotonic, !dbg !7816  cmpxchg ptr %a, i16 0, i16 1 acq_rel acquire, !dbg !7817  cmpxchg ptr %a, i16 0, i16 1 acq_rel seq_cst, !dbg !7818  ret void, !dbg !7819}820; CHECK-LABEL: atomic16_cas_acq_rel821; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 4, i32 0), !dbg822; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 4, i32 2), !dbg823; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 4, i32 5), !dbg824 825define void @atomic16_cas_seq_cst(ptr %a) nounwind uwtable {826entry:827  cmpxchg ptr %a, i16 0, i16 1 seq_cst monotonic, !dbg !7828  cmpxchg ptr %a, i16 0, i16 1 seq_cst acquire, !dbg !7829  cmpxchg ptr %a, i16 0, i16 1 seq_cst seq_cst, !dbg !7830  ret void, !dbg !7831}832; CHECK-LABEL: atomic16_cas_seq_cst833; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 5, i32 0), !dbg834; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 5, i32 2), !dbg835; CHECK: call i16 @__tsan_atomic16_compare_exchange_val(ptr %a, i16 0, i16 1, i32 5, i32 5), !dbg836 837define i32 @atomic32_load_unordered(ptr %a) nounwind uwtable {838entry:839  %0 = load atomic i32, ptr %a unordered, align 4, !dbg !7840  ret i32 %0, !dbg !7841}842; CHECK-LABEL: atomic32_load_unordered843; CHECK: call i32 @__tsan_atomic32_load(ptr %a, i32 0), !dbg844 845define i32 @atomic32_load_monotonic(ptr %a) nounwind uwtable {846entry:847  %0 = load atomic i32, ptr %a monotonic, align 4, !dbg !7848  ret i32 %0, !dbg !7849}850; CHECK-LABEL: atomic32_load_monotonic851; CHECK: call i32 @__tsan_atomic32_load(ptr %a, i32 0), !dbg852 853define i32 @atomic32_load_acquire(ptr %a) nounwind uwtable {854entry:855  %0 = load atomic i32, ptr %a acquire, align 4, !dbg !7856  ret i32 %0, !dbg !7857}858; CHECK-LABEL: atomic32_load_acquire859; CHECK: call i32 @__tsan_atomic32_load(ptr %a, i32 2), !dbg860 861define i32 @atomic32_load_seq_cst(ptr %a) nounwind uwtable {862entry:863  %0 = load atomic i32, ptr %a seq_cst, align 4, !dbg !7864  ret i32 %0, !dbg !7865}866; CHECK-LABEL: atomic32_load_seq_cst867; CHECK: call i32 @__tsan_atomic32_load(ptr %a, i32 5), !dbg868 869define void @atomic32_store_unordered(ptr %a) nounwind uwtable {870entry:871  store atomic i32 0, ptr %a unordered, align 4, !dbg !7872  ret void, !dbg !7873}874; CHECK-LABEL: atomic32_store_unordered875; CHECK: call void @__tsan_atomic32_store(ptr %a, i32 0, i32 0), !dbg876 877define void @atomic32_store_monotonic(ptr %a) nounwind uwtable {878entry:879  store atomic i32 0, ptr %a monotonic, align 4, !dbg !7880  ret void, !dbg !7881}882; CHECK-LABEL: atomic32_store_monotonic883; CHECK: call void @__tsan_atomic32_store(ptr %a, i32 0, i32 0), !dbg884 885define void @atomic32_store_release(ptr %a) nounwind uwtable {886entry:887  store atomic i32 0, ptr %a release, align 4, !dbg !7888  ret void, !dbg !7889}890; CHECK-LABEL: atomic32_store_release891; CHECK: call void @__tsan_atomic32_store(ptr %a, i32 0, i32 3), !dbg892 893define void @atomic32_store_seq_cst(ptr %a) nounwind uwtable {894entry:895  store atomic i32 0, ptr %a seq_cst, align 4, !dbg !7896  ret void, !dbg !7897}898; CHECK-LABEL: atomic32_store_seq_cst899; CHECK: call void @__tsan_atomic32_store(ptr %a, i32 0, i32 5), !dbg900 901define void @atomic32_xchg_monotonic(ptr %a) nounwind uwtable {902entry:903  atomicrmw xchg ptr %a, i32 0 monotonic, !dbg !7904  ret void, !dbg !7905}906; CHECK-LABEL: atomic32_xchg_monotonic907; CHECK: call i32 @__tsan_atomic32_exchange(ptr %a, i32 0, i32 0), !dbg908 909define void @atomic32_add_monotonic(ptr %a) nounwind uwtable {910entry:911  atomicrmw add ptr %a, i32 0 monotonic, !dbg !7912  ret void, !dbg !7913}914; CHECK-LABEL: atomic32_add_monotonic915; CHECK: call i32 @__tsan_atomic32_fetch_add(ptr %a, i32 0, i32 0), !dbg916 917define void @atomic32_sub_monotonic(ptr %a) nounwind uwtable {918entry:919  atomicrmw sub ptr %a, i32 0 monotonic, !dbg !7920  ret void, !dbg !7921}922; CHECK-LABEL: atomic32_sub_monotonic923; CHECK: call i32 @__tsan_atomic32_fetch_sub(ptr %a, i32 0, i32 0), !dbg924 925define void @atomic32_and_monotonic(ptr %a) nounwind uwtable {926entry:927  atomicrmw and ptr %a, i32 0 monotonic, !dbg !7928  ret void, !dbg !7929}930; CHECK-LABEL: atomic32_and_monotonic931; CHECK: call i32 @__tsan_atomic32_fetch_and(ptr %a, i32 0, i32 0), !dbg932 933define void @atomic32_or_monotonic(ptr %a) nounwind uwtable {934entry:935  atomicrmw or ptr %a, i32 0 monotonic, !dbg !7936  ret void, !dbg !7937}938; CHECK-LABEL: atomic32_or_monotonic939; CHECK: call i32 @__tsan_atomic32_fetch_or(ptr %a, i32 0, i32 0), !dbg940 941define void @atomic32_xor_monotonic(ptr %a) nounwind uwtable {942entry:943  atomicrmw xor ptr %a, i32 0 monotonic, !dbg !7944  ret void, !dbg !7945}946; CHECK-LABEL: atomic32_xor_monotonic947; CHECK: call i32 @__tsan_atomic32_fetch_xor(ptr %a, i32 0, i32 0), !dbg948 949define void @atomic32_nand_monotonic(ptr %a) nounwind uwtable {950entry:951  atomicrmw nand ptr %a, i32 0 monotonic, !dbg !7952  ret void, !dbg !7953}954; CHECK-LABEL: atomic32_nand_monotonic955; CHECK: call i32 @__tsan_atomic32_fetch_nand(ptr %a, i32 0, i32 0), !dbg956 957define void @atomic32_xchg_acquire(ptr %a) nounwind uwtable {958entry:959  atomicrmw xchg ptr %a, i32 0 acquire, !dbg !7960  ret void, !dbg !7961}962; CHECK-LABEL: atomic32_xchg_acquire963; CHECK: call i32 @__tsan_atomic32_exchange(ptr %a, i32 0, i32 2), !dbg964 965define void @atomic32_add_acquire(ptr %a) nounwind uwtable {966entry:967  atomicrmw add ptr %a, i32 0 acquire, !dbg !7968  ret void, !dbg !7969}970; CHECK-LABEL: atomic32_add_acquire971; CHECK: call i32 @__tsan_atomic32_fetch_add(ptr %a, i32 0, i32 2), !dbg972 973define void @atomic32_sub_acquire(ptr %a) nounwind uwtable {974entry:975  atomicrmw sub ptr %a, i32 0 acquire, !dbg !7976  ret void, !dbg !7977}978; CHECK-LABEL: atomic32_sub_acquire979; CHECK: call i32 @__tsan_atomic32_fetch_sub(ptr %a, i32 0, i32 2), !dbg980 981define void @atomic32_and_acquire(ptr %a) nounwind uwtable {982entry:983  atomicrmw and ptr %a, i32 0 acquire, !dbg !7984  ret void, !dbg !7985}986; CHECK-LABEL: atomic32_and_acquire987; CHECK: call i32 @__tsan_atomic32_fetch_and(ptr %a, i32 0, i32 2), !dbg988 989define void @atomic32_or_acquire(ptr %a) nounwind uwtable {990entry:991  atomicrmw or ptr %a, i32 0 acquire, !dbg !7992  ret void, !dbg !7993}994; CHECK-LABEL: atomic32_or_acquire995; CHECK: call i32 @__tsan_atomic32_fetch_or(ptr %a, i32 0, i32 2), !dbg996 997define void @atomic32_xor_acquire(ptr %a) nounwind uwtable {998entry:999  atomicrmw xor ptr %a, i32 0 acquire, !dbg !71000  ret void, !dbg !71001}1002; CHECK-LABEL: atomic32_xor_acquire1003; CHECK: call i32 @__tsan_atomic32_fetch_xor(ptr %a, i32 0, i32 2), !dbg1004 1005define void @atomic32_nand_acquire(ptr %a) nounwind uwtable {1006entry:1007  atomicrmw nand ptr %a, i32 0 acquire, !dbg !71008  ret void, !dbg !71009}1010; CHECK-LABEL: atomic32_nand_acquire1011; CHECK: call i32 @__tsan_atomic32_fetch_nand(ptr %a, i32 0, i32 2), !dbg1012 1013define void @atomic32_xchg_release(ptr %a) nounwind uwtable {1014entry:1015  atomicrmw xchg ptr %a, i32 0 release, !dbg !71016  ret void, !dbg !71017}1018; CHECK-LABEL: atomic32_xchg_release1019; CHECK: call i32 @__tsan_atomic32_exchange(ptr %a, i32 0, i32 3), !dbg1020 1021define void @atomic32_add_release(ptr %a) nounwind uwtable {1022entry:1023  atomicrmw add ptr %a, i32 0 release, !dbg !71024  ret void, !dbg !71025}1026; CHECK-LABEL: atomic32_add_release1027; CHECK: call i32 @__tsan_atomic32_fetch_add(ptr %a, i32 0, i32 3), !dbg1028 1029define void @atomic32_sub_release(ptr %a) nounwind uwtable {1030entry:1031  atomicrmw sub ptr %a, i32 0 release, !dbg !71032  ret void, !dbg !71033}1034; CHECK-LABEL: atomic32_sub_release1035; CHECK: call i32 @__tsan_atomic32_fetch_sub(ptr %a, i32 0, i32 3), !dbg1036 1037define void @atomic32_and_release(ptr %a) nounwind uwtable {1038entry:1039  atomicrmw and ptr %a, i32 0 release, !dbg !71040  ret void, !dbg !71041}1042; CHECK-LABEL: atomic32_and_release1043; CHECK: call i32 @__tsan_atomic32_fetch_and(ptr %a, i32 0, i32 3), !dbg1044 1045define void @atomic32_or_release(ptr %a) nounwind uwtable {1046entry:1047  atomicrmw or ptr %a, i32 0 release, !dbg !71048  ret void, !dbg !71049}1050; CHECK-LABEL: atomic32_or_release1051; CHECK: call i32 @__tsan_atomic32_fetch_or(ptr %a, i32 0, i32 3), !dbg1052 1053define void @atomic32_xor_release(ptr %a) nounwind uwtable {1054entry:1055  atomicrmw xor ptr %a, i32 0 release, !dbg !71056  ret void, !dbg !71057}1058; CHECK-LABEL: atomic32_xor_release1059; CHECK: call i32 @__tsan_atomic32_fetch_xor(ptr %a, i32 0, i32 3), !dbg1060 1061define void @atomic32_nand_release(ptr %a) nounwind uwtable {1062entry:1063  atomicrmw nand ptr %a, i32 0 release, !dbg !71064  ret void, !dbg !71065}1066; CHECK-LABEL: atomic32_nand_release1067; CHECK: call i32 @__tsan_atomic32_fetch_nand(ptr %a, i32 0, i32 3), !dbg1068 1069define void @atomic32_xchg_acq_rel(ptr %a) nounwind uwtable {1070entry:1071  atomicrmw xchg ptr %a, i32 0 acq_rel, !dbg !71072  ret void, !dbg !71073}1074; CHECK-LABEL: atomic32_xchg_acq_rel1075; CHECK: call i32 @__tsan_atomic32_exchange(ptr %a, i32 0, i32 4), !dbg1076 1077define void @atomic32_add_acq_rel(ptr %a) nounwind uwtable {1078entry:1079  atomicrmw add ptr %a, i32 0 acq_rel, !dbg !71080  ret void, !dbg !71081}1082; CHECK-LABEL: atomic32_add_acq_rel1083; CHECK: call i32 @__tsan_atomic32_fetch_add(ptr %a, i32 0, i32 4), !dbg1084 1085define void @atomic32_sub_acq_rel(ptr %a) nounwind uwtable {1086entry:1087  atomicrmw sub ptr %a, i32 0 acq_rel, !dbg !71088  ret void, !dbg !71089}1090; CHECK-LABEL: atomic32_sub_acq_rel1091; CHECK: call i32 @__tsan_atomic32_fetch_sub(ptr %a, i32 0, i32 4), !dbg1092 1093define void @atomic32_and_acq_rel(ptr %a) nounwind uwtable {1094entry:1095  atomicrmw and ptr %a, i32 0 acq_rel, !dbg !71096  ret void, !dbg !71097}1098; CHECK-LABEL: atomic32_and_acq_rel1099; CHECK: call i32 @__tsan_atomic32_fetch_and(ptr %a, i32 0, i32 4), !dbg1100 1101define void @atomic32_or_acq_rel(ptr %a) nounwind uwtable {1102entry:1103  atomicrmw or ptr %a, i32 0 acq_rel, !dbg !71104  ret void, !dbg !71105}1106; CHECK-LABEL: atomic32_or_acq_rel1107; CHECK: call i32 @__tsan_atomic32_fetch_or(ptr %a, i32 0, i32 4), !dbg1108 1109define void @atomic32_xor_acq_rel(ptr %a) nounwind uwtable {1110entry:1111  atomicrmw xor ptr %a, i32 0 acq_rel, !dbg !71112  ret void, !dbg !71113}1114; CHECK-LABEL: atomic32_xor_acq_rel1115; CHECK: call i32 @__tsan_atomic32_fetch_xor(ptr %a, i32 0, i32 4), !dbg1116 1117define void @atomic32_nand_acq_rel(ptr %a) nounwind uwtable {1118entry:1119  atomicrmw nand ptr %a, i32 0 acq_rel, !dbg !71120  ret void, !dbg !71121}1122; CHECK-LABEL: atomic32_nand_acq_rel1123; CHECK: call i32 @__tsan_atomic32_fetch_nand(ptr %a, i32 0, i32 4), !dbg1124 1125define void @atomic32_xchg_seq_cst(ptr %a) nounwind uwtable {1126entry:1127  atomicrmw xchg ptr %a, i32 0 seq_cst, !dbg !71128  ret void, !dbg !71129}1130; CHECK-LABEL: atomic32_xchg_seq_cst1131; CHECK: call i32 @__tsan_atomic32_exchange(ptr %a, i32 0, i32 5), !dbg1132 1133define void @atomic32_add_seq_cst(ptr %a) nounwind uwtable {1134entry:1135  atomicrmw add ptr %a, i32 0 seq_cst, !dbg !71136  ret void, !dbg !71137}1138; CHECK-LABEL: atomic32_add_seq_cst1139; CHECK: call i32 @__tsan_atomic32_fetch_add(ptr %a, i32 0, i32 5), !dbg1140 1141define void @atomic32_sub_seq_cst(ptr %a) nounwind uwtable {1142entry:1143  atomicrmw sub ptr %a, i32 0 seq_cst, !dbg !71144  ret void, !dbg !71145}1146; CHECK-LABEL: atomic32_sub_seq_cst1147; CHECK: call i32 @__tsan_atomic32_fetch_sub(ptr %a, i32 0, i32 5), !dbg1148 1149define void @atomic32_and_seq_cst(ptr %a) nounwind uwtable {1150entry:1151  atomicrmw and ptr %a, i32 0 seq_cst, !dbg !71152  ret void, !dbg !71153}1154; CHECK-LABEL: atomic32_and_seq_cst1155; CHECK: call i32 @__tsan_atomic32_fetch_and(ptr %a, i32 0, i32 5), !dbg1156 1157define void @atomic32_or_seq_cst(ptr %a) nounwind uwtable {1158entry:1159  atomicrmw or ptr %a, i32 0 seq_cst, !dbg !71160  ret void, !dbg !71161}1162; CHECK-LABEL: atomic32_or_seq_cst1163; CHECK: call i32 @__tsan_atomic32_fetch_or(ptr %a, i32 0, i32 5), !dbg1164 1165define void @atomic32_xor_seq_cst(ptr %a) nounwind uwtable {1166entry:1167  atomicrmw xor ptr %a, i32 0 seq_cst, !dbg !71168  ret void, !dbg !71169}1170; CHECK-LABEL: atomic32_xor_seq_cst1171; CHECK: call i32 @__tsan_atomic32_fetch_xor(ptr %a, i32 0, i32 5), !dbg1172 1173define void @atomic32_nand_seq_cst(ptr %a) nounwind uwtable {1174entry:1175  atomicrmw nand ptr %a, i32 0 seq_cst, !dbg !71176  ret void, !dbg !71177}1178; CHECK-LABEL: atomic32_nand_seq_cst1179; CHECK: call i32 @__tsan_atomic32_fetch_nand(ptr %a, i32 0, i32 5), !dbg1180 1181define void @atomic32_cas_monotonic(ptr %a) nounwind uwtable {1182entry:1183  cmpxchg ptr %a, i32 0, i32 1 monotonic monotonic, !dbg !71184  cmpxchg ptr %a, i32 0, i32 1 monotonic acquire, !dbg !71185  cmpxchg ptr %a, i32 0, i32 1 monotonic seq_cst, !dbg !71186  ret void, !dbg !71187}1188; CHECK-LABEL: atomic32_cas_monotonic1189; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 0, i32 0), !dbg1190; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 0, i32 2), !dbg1191; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 0, i32 5), !dbg1192 1193define void @atomic32_cas_acquire(ptr %a) nounwind uwtable {1194entry:1195  cmpxchg ptr %a, i32 0, i32 1 acquire monotonic, !dbg !71196  cmpxchg ptr %a, i32 0, i32 1 acquire acquire, !dbg !71197  cmpxchg ptr %a, i32 0, i32 1 acquire seq_cst, !dbg !71198  ret void, !dbg !71199}1200; CHECK-LABEL: atomic32_cas_acquire1201; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 2, i32 0), !dbg1202; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 2, i32 2), !dbg1203; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 2, i32 5), !dbg1204 1205define void @atomic32_cas_release(ptr %a) nounwind uwtable {1206entry:1207  cmpxchg ptr %a, i32 0, i32 1 release monotonic, !dbg !71208  cmpxchg ptr %a, i32 0, i32 1 release acquire, !dbg !71209  cmpxchg ptr %a, i32 0, i32 1 release seq_cst, !dbg !71210  ret void, !dbg !71211}1212; CHECK-LABEL: atomic32_cas_release1213; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 3, i32 0), !dbg1214; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 3, i32 2), !dbg1215; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 3, i32 5), !dbg1216 1217define void @atomic32_cas_acq_rel(ptr %a) nounwind uwtable {1218entry:1219  cmpxchg ptr %a, i32 0, i32 1 acq_rel monotonic, !dbg !71220  cmpxchg ptr %a, i32 0, i32 1 acq_rel acquire, !dbg !71221  cmpxchg ptr %a, i32 0, i32 1 acq_rel seq_cst, !dbg !71222  ret void, !dbg !71223}1224; CHECK-LABEL: atomic32_cas_acq_rel1225; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 4, i32 0), !dbg1226; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 4, i32 2), !dbg1227; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 4, i32 5), !dbg1228 1229define void @atomic32_cas_seq_cst(ptr %a) nounwind uwtable {1230entry:1231  cmpxchg ptr %a, i32 0, i32 1 seq_cst monotonic, !dbg !71232  cmpxchg ptr %a, i32 0, i32 1 seq_cst acquire, !dbg !71233  cmpxchg ptr %a, i32 0, i32 1 seq_cst seq_cst, !dbg !71234  ret void, !dbg !71235}1236; CHECK-LABEL: atomic32_cas_seq_cst1237; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 5, i32 0), !dbg1238; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 5, i32 2), !dbg1239; CHECK: call i32 @__tsan_atomic32_compare_exchange_val(ptr %a, i32 0, i32 1, i32 5, i32 5), !dbg1240 1241define i64 @atomic64_load_unordered(ptr %a) nounwind uwtable {1242entry:1243  %0 = load atomic i64, ptr %a unordered, align 8, !dbg !71244  ret i64 %0, !dbg !71245}1246; CHECK-LABEL: atomic64_load_unordered1247; CHECK: call i64 @__tsan_atomic64_load(ptr %a, i32 0), !dbg1248 1249define i64 @atomic64_load_monotonic(ptr %a) nounwind uwtable {1250entry:1251  %0 = load atomic i64, ptr %a monotonic, align 8, !dbg !71252  ret i64 %0, !dbg !71253}1254; CHECK-LABEL: atomic64_load_monotonic1255; CHECK: call i64 @__tsan_atomic64_load(ptr %a, i32 0), !dbg1256 1257define i64 @atomic64_load_acquire(ptr %a) nounwind uwtable {1258entry:1259  %0 = load atomic i64, ptr %a acquire, align 8, !dbg !71260  ret i64 %0, !dbg !71261}1262; CHECK-LABEL: atomic64_load_acquire1263; CHECK: call i64 @__tsan_atomic64_load(ptr %a, i32 2), !dbg1264 1265define i64 @atomic64_load_seq_cst(ptr %a) nounwind uwtable {1266entry:1267  %0 = load atomic i64, ptr %a seq_cst, align 8, !dbg !71268  ret i64 %0, !dbg !71269}1270; CHECK-LABEL: atomic64_load_seq_cst1271; CHECK: call i64 @__tsan_atomic64_load(ptr %a, i32 5), !dbg1272 1273define ptr @atomic64_load_seq_cst_ptr_ty(ptr %a) nounwind uwtable {1274entry:1275  %0 = load atomic ptr, ptr %a seq_cst, align 8, !dbg !71276  ret ptr %0, !dbg !71277}1278; CHECK-LABEL: atomic64_load_seq_cst1279; CHECK: call i64 @__tsan_atomic64_load(ptr %a, i32 5), !dbg1280; CHECK-NEXT: inttoptr i64 %{{.+}} to ptr1281 1282define void @atomic64_store_unordered(ptr %a) nounwind uwtable {1283entry:1284  store atomic i64 0, ptr %a unordered, align 8, !dbg !71285  ret void, !dbg !71286}1287; CHECK-LABEL: atomic64_store_unordered1288; CHECK: call void @__tsan_atomic64_store(ptr %a, i64 0, i32 0), !dbg1289 1290define void @atomic64_store_monotonic(ptr %a) nounwind uwtable {1291entry:1292  store atomic i64 0, ptr %a monotonic, align 8, !dbg !71293  ret void, !dbg !71294}1295; CHECK-LABEL: atomic64_store_monotonic1296; CHECK: call void @__tsan_atomic64_store(ptr %a, i64 0, i32 0), !dbg1297 1298define void @atomic64_store_release(ptr %a) nounwind uwtable {1299entry:1300  store atomic i64 0, ptr %a release, align 8, !dbg !71301  ret void, !dbg !71302}1303; CHECK-LABEL: atomic64_store_release1304; CHECK: call void @__tsan_atomic64_store(ptr %a, i64 0, i32 3), !dbg1305 1306define void @atomic64_store_seq_cst(ptr %a) nounwind uwtable {1307entry:1308  store atomic i64 0, ptr %a seq_cst, align 8, !dbg !71309  ret void, !dbg !71310}1311; CHECK-LABEL: atomic64_store_seq_cst1312; CHECK: call void @__tsan_atomic64_store(ptr %a, i64 0, i32 5), !dbg1313 1314define void @atomic64_store_seq_cst_ptr_ty(ptr %a, ptr %v) nounwind uwtable {1315entry:1316  store atomic ptr %v, ptr %a seq_cst, align 8, !dbg !71317  ret void, !dbg !71318}1319; CHECK-LABEL: atomic64_store_seq_cst1320; CHECK: call void @__tsan_atomic64_store(ptr %a, i64 %{{.*}}, i32 5), !dbg1321define void @atomic64_xchg_monotonic(ptr %a) nounwind uwtable {1322entry:1323  atomicrmw xchg ptr %a, i64 0 monotonic, !dbg !71324  ret void, !dbg !71325}1326; CHECK-LABEL: atomic64_xchg_monotonic1327; CHECK: call i64 @__tsan_atomic64_exchange(ptr %a, i64 0, i32 0), !dbg1328 1329define void @atomic64_add_monotonic(ptr %a) nounwind uwtable {1330entry:1331  atomicrmw add ptr %a, i64 0 monotonic, !dbg !71332  ret void, !dbg !71333}1334; CHECK-LABEL: atomic64_add_monotonic1335; CHECK: call i64 @__tsan_atomic64_fetch_add(ptr %a, i64 0, i32 0), !dbg1336 1337define void @atomic64_sub_monotonic(ptr %a) nounwind uwtable {1338entry:1339  atomicrmw sub ptr %a, i64 0 monotonic, !dbg !71340  ret void, !dbg !71341}1342; CHECK-LABEL: atomic64_sub_monotonic1343; CHECK: call i64 @__tsan_atomic64_fetch_sub(ptr %a, i64 0, i32 0), !dbg1344 1345define void @atomic64_and_monotonic(ptr %a) nounwind uwtable {1346entry:1347  atomicrmw and ptr %a, i64 0 monotonic, !dbg !71348  ret void, !dbg !71349}1350; CHECK-LABEL: atomic64_and_monotonic1351; CHECK: call i64 @__tsan_atomic64_fetch_and(ptr %a, i64 0, i32 0), !dbg1352 1353define void @atomic64_or_monotonic(ptr %a) nounwind uwtable {1354entry:1355  atomicrmw or ptr %a, i64 0 monotonic, !dbg !71356  ret void, !dbg !71357}1358; CHECK-LABEL: atomic64_or_monotonic1359; CHECK: call i64 @__tsan_atomic64_fetch_or(ptr %a, i64 0, i32 0), !dbg1360 1361define void @atomic64_xor_monotonic(ptr %a) nounwind uwtable {1362entry:1363  atomicrmw xor ptr %a, i64 0 monotonic, !dbg !71364  ret void, !dbg !71365}1366; CHECK-LABEL: atomic64_xor_monotonic1367; CHECK: call i64 @__tsan_atomic64_fetch_xor(ptr %a, i64 0, i32 0), !dbg1368 1369define void @atomic64_nand_monotonic(ptr %a) nounwind uwtable {1370entry:1371  atomicrmw nand ptr %a, i64 0 monotonic, !dbg !71372  ret void, !dbg !71373}1374; CHECK-LABEL: atomic64_nand_monotonic1375; CHECK: call i64 @__tsan_atomic64_fetch_nand(ptr %a, i64 0, i32 0), !dbg1376 1377define void @atomic64_xchg_acquire(ptr %a) nounwind uwtable {1378entry:1379  atomicrmw xchg ptr %a, i64 0 acquire, !dbg !71380  ret void, !dbg !71381}1382; CHECK-LABEL: atomic64_xchg_acquire1383; CHECK: call i64 @__tsan_atomic64_exchange(ptr %a, i64 0, i32 2), !dbg1384 1385define void @atomic64_add_acquire(ptr %a) nounwind uwtable {1386entry:1387  atomicrmw add ptr %a, i64 0 acquire, !dbg !71388  ret void, !dbg !71389}1390; CHECK-LABEL: atomic64_add_acquire1391; CHECK: call i64 @__tsan_atomic64_fetch_add(ptr %a, i64 0, i32 2), !dbg1392 1393define void @atomic64_sub_acquire(ptr %a) nounwind uwtable {1394entry:1395  atomicrmw sub ptr %a, i64 0 acquire, !dbg !71396  ret void, !dbg !71397}1398; CHECK-LABEL: atomic64_sub_acquire1399; CHECK: call i64 @__tsan_atomic64_fetch_sub(ptr %a, i64 0, i32 2), !dbg1400 1401define void @atomic64_and_acquire(ptr %a) nounwind uwtable {1402entry:1403  atomicrmw and ptr %a, i64 0 acquire, !dbg !71404  ret void, !dbg !71405}1406; CHECK-LABEL: atomic64_and_acquire1407; CHECK: call i64 @__tsan_atomic64_fetch_and(ptr %a, i64 0, i32 2), !dbg1408 1409define void @atomic64_or_acquire(ptr %a) nounwind uwtable {1410entry:1411  atomicrmw or ptr %a, i64 0 acquire, !dbg !71412  ret void, !dbg !71413}1414; CHECK-LABEL: atomic64_or_acquire1415; CHECK: call i64 @__tsan_atomic64_fetch_or(ptr %a, i64 0, i32 2), !dbg1416 1417define void @atomic64_xor_acquire(ptr %a) nounwind uwtable {1418entry:1419  atomicrmw xor ptr %a, i64 0 acquire, !dbg !71420  ret void, !dbg !71421}1422; CHECK-LABEL: atomic64_xor_acquire1423; CHECK: call i64 @__tsan_atomic64_fetch_xor(ptr %a, i64 0, i32 2), !dbg1424 1425define void @atomic64_nand_acquire(ptr %a) nounwind uwtable {1426entry:1427  atomicrmw nand ptr %a, i64 0 acquire, !dbg !71428  ret void, !dbg !71429}1430; CHECK-LABEL: atomic64_nand_acquire1431; CHECK: call i64 @__tsan_atomic64_fetch_nand(ptr %a, i64 0, i32 2), !dbg1432 1433define void @atomic64_xchg_release(ptr %a) nounwind uwtable {1434entry:1435  atomicrmw xchg ptr %a, i64 0 release, !dbg !71436  ret void, !dbg !71437}1438; CHECK-LABEL: atomic64_xchg_release1439; CHECK: call i64 @__tsan_atomic64_exchange(ptr %a, i64 0, i32 3), !dbg1440 1441define void @atomic64_add_release(ptr %a) nounwind uwtable {1442entry:1443  atomicrmw add ptr %a, i64 0 release, !dbg !71444  ret void, !dbg !71445}1446; CHECK-LABEL: atomic64_add_release1447; CHECK: call i64 @__tsan_atomic64_fetch_add(ptr %a, i64 0, i32 3), !dbg1448 1449define void @atomic64_sub_release(ptr %a) nounwind uwtable {1450entry:1451  atomicrmw sub ptr %a, i64 0 release, !dbg !71452  ret void, !dbg !71453}1454; CHECK-LABEL: atomic64_sub_release1455; CHECK: call i64 @__tsan_atomic64_fetch_sub(ptr %a, i64 0, i32 3), !dbg1456 1457define void @atomic64_and_release(ptr %a) nounwind uwtable {1458entry:1459  atomicrmw and ptr %a, i64 0 release, !dbg !71460  ret void, !dbg !71461}1462; CHECK-LABEL: atomic64_and_release1463; CHECK: call i64 @__tsan_atomic64_fetch_and(ptr %a, i64 0, i32 3), !dbg1464 1465define void @atomic64_or_release(ptr %a) nounwind uwtable {1466entry:1467  atomicrmw or ptr %a, i64 0 release, !dbg !71468  ret void, !dbg !71469}1470; CHECK-LABEL: atomic64_or_release1471; CHECK: call i64 @__tsan_atomic64_fetch_or(ptr %a, i64 0, i32 3), !dbg1472 1473define void @atomic64_xor_release(ptr %a) nounwind uwtable {1474entry:1475  atomicrmw xor ptr %a, i64 0 release, !dbg !71476  ret void, !dbg !71477}1478; CHECK-LABEL: atomic64_xor_release1479; CHECK: call i64 @__tsan_atomic64_fetch_xor(ptr %a, i64 0, i32 3), !dbg1480 1481define void @atomic64_nand_release(ptr %a) nounwind uwtable {1482entry:1483  atomicrmw nand ptr %a, i64 0 release, !dbg !71484  ret void, !dbg !71485}1486; CHECK-LABEL: atomic64_nand_release1487; CHECK: call i64 @__tsan_atomic64_fetch_nand(ptr %a, i64 0, i32 3), !dbg1488 1489define void @atomic64_xchg_acq_rel(ptr %a) nounwind uwtable {1490entry:1491  atomicrmw xchg ptr %a, i64 0 acq_rel, !dbg !71492  ret void, !dbg !71493}1494; CHECK-LABEL: atomic64_xchg_acq_rel1495; CHECK: call i64 @__tsan_atomic64_exchange(ptr %a, i64 0, i32 4), !dbg1496 1497define void @atomic64_add_acq_rel(ptr %a) nounwind uwtable {1498entry:1499  atomicrmw add ptr %a, i64 0 acq_rel, !dbg !71500  ret void, !dbg !71501}1502; CHECK-LABEL: atomic64_add_acq_rel1503; CHECK: call i64 @__tsan_atomic64_fetch_add(ptr %a, i64 0, i32 4), !dbg1504 1505define void @atomic64_sub_acq_rel(ptr %a) nounwind uwtable {1506entry:1507  atomicrmw sub ptr %a, i64 0 acq_rel, !dbg !71508  ret void, !dbg !71509}1510; CHECK-LABEL: atomic64_sub_acq_rel1511; CHECK: call i64 @__tsan_atomic64_fetch_sub(ptr %a, i64 0, i32 4), !dbg1512 1513define void @atomic64_and_acq_rel(ptr %a) nounwind uwtable {1514entry:1515  atomicrmw and ptr %a, i64 0 acq_rel, !dbg !71516  ret void, !dbg !71517}1518; CHECK-LABEL: atomic64_and_acq_rel1519; CHECK: call i64 @__tsan_atomic64_fetch_and(ptr %a, i64 0, i32 4), !dbg1520 1521define void @atomic64_or_acq_rel(ptr %a) nounwind uwtable {1522entry:1523  atomicrmw or ptr %a, i64 0 acq_rel, !dbg !71524  ret void, !dbg !71525}1526; CHECK-LABEL: atomic64_or_acq_rel1527; CHECK: call i64 @__tsan_atomic64_fetch_or(ptr %a, i64 0, i32 4), !dbg1528 1529define void @atomic64_xor_acq_rel(ptr %a) nounwind uwtable {1530entry:1531  atomicrmw xor ptr %a, i64 0 acq_rel, !dbg !71532  ret void, !dbg !71533}1534; CHECK-LABEL: atomic64_xor_acq_rel1535; CHECK: call i64 @__tsan_atomic64_fetch_xor(ptr %a, i64 0, i32 4), !dbg1536 1537define void @atomic64_nand_acq_rel(ptr %a) nounwind uwtable {1538entry:1539  atomicrmw nand ptr %a, i64 0 acq_rel, !dbg !71540  ret void, !dbg !71541}1542; CHECK-LABEL: atomic64_nand_acq_rel1543; CHECK: call i64 @__tsan_atomic64_fetch_nand(ptr %a, i64 0, i32 4), !dbg1544 1545define void @atomic64_xchg_seq_cst(ptr %a) nounwind uwtable {1546entry:1547  atomicrmw xchg ptr %a, i64 0 seq_cst, !dbg !71548  ret void, !dbg !71549}1550; CHECK-LABEL: atomic64_xchg_seq_cst1551; CHECK: call i64 @__tsan_atomic64_exchange(ptr %a, i64 0, i32 5), !dbg1552 1553define void @atomic64_add_seq_cst(ptr %a) nounwind uwtable {1554entry:1555  atomicrmw add ptr %a, i64 0 seq_cst, !dbg !71556  ret void, !dbg !71557}1558; CHECK-LABEL: atomic64_add_seq_cst1559; CHECK: call i64 @__tsan_atomic64_fetch_add(ptr %a, i64 0, i32 5), !dbg1560 1561define void @atomic64_sub_seq_cst(ptr %a) nounwind uwtable {1562entry:1563  atomicrmw sub ptr %a, i64 0 seq_cst, !dbg !71564  ret void, !dbg !71565}1566; CHECK-LABEL: atomic64_sub_seq_cst1567; CHECK: call i64 @__tsan_atomic64_fetch_sub(ptr %a, i64 0, i32 5), !dbg1568 1569define void @atomic64_and_seq_cst(ptr %a) nounwind uwtable {1570entry:1571  atomicrmw and ptr %a, i64 0 seq_cst, !dbg !71572  ret void, !dbg !71573}1574; CHECK-LABEL: atomic64_and_seq_cst1575; CHECK: call i64 @__tsan_atomic64_fetch_and(ptr %a, i64 0, i32 5), !dbg1576 1577define void @atomic64_or_seq_cst(ptr %a) nounwind uwtable {1578entry:1579  atomicrmw or ptr %a, i64 0 seq_cst, !dbg !71580  ret void, !dbg !71581}1582; CHECK-LABEL: atomic64_or_seq_cst1583; CHECK: call i64 @__tsan_atomic64_fetch_or(ptr %a, i64 0, i32 5), !dbg1584 1585define void @atomic64_xor_seq_cst(ptr %a) nounwind uwtable {1586entry:1587  atomicrmw xor ptr %a, i64 0 seq_cst, !dbg !71588  ret void, !dbg !71589}1590; CHECK-LABEL: atomic64_xor_seq_cst1591; CHECK: call i64 @__tsan_atomic64_fetch_xor(ptr %a, i64 0, i32 5), !dbg1592 1593define void @atomic64_nand_seq_cst(ptr %a) nounwind uwtable {1594entry:1595  atomicrmw nand ptr %a, i64 0 seq_cst, !dbg !71596  ret void, !dbg !71597}1598; CHECK-LABEL: atomic64_nand_seq_cst1599; CHECK: call i64 @__tsan_atomic64_fetch_nand(ptr %a, i64 0, i32 5), !dbg1600 1601define void @atomic64_cas_monotonic(ptr %a) nounwind uwtable {1602entry:1603  cmpxchg ptr %a, i64 0, i64 1 monotonic monotonic, !dbg !71604  cmpxchg ptr %a, i64 0, i64 1 monotonic acquire, !dbg !71605  cmpxchg ptr %a, i64 0, i64 1 monotonic seq_cst, !dbg !71606  ret void, !dbg !71607}1608; CHECK-LABEL: atomic64_cas_monotonic1609; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 0, i32 0), !dbg1610; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 0, i32 2), !dbg1611; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 0, i32 5), !dbg1612 1613define void @atomic64_cas_acquire(ptr %a) nounwind uwtable {1614entry:1615  cmpxchg ptr %a, i64 0, i64 1 acquire monotonic, !dbg !71616  cmpxchg ptr %a, i64 0, i64 1 acquire acquire, !dbg !71617  cmpxchg ptr %a, i64 0, i64 1 acquire seq_cst, !dbg !71618  ret void, !dbg !71619}1620; CHECK-LABEL: atomic64_cas_acquire1621; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 2, i32 0), !dbg1622; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 2, i32 2), !dbg1623; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 2, i32 5), !dbg1624 1625define void @atomic64_cas_release(ptr %a) nounwind uwtable {1626entry:1627  cmpxchg ptr %a, i64 0, i64 1 release monotonic, !dbg !71628  cmpxchg ptr %a, i64 0, i64 1 release acquire, !dbg !71629  cmpxchg ptr %a, i64 0, i64 1 release seq_cst, !dbg !71630  ret void, !dbg !71631}1632; CHECK-LABEL: atomic64_cas_release1633; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 3, i32 0), !dbg1634; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 3, i32 2), !dbg1635; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 3, i32 5), !dbg1636 1637define void @atomic64_cas_acq_rel(ptr %a) nounwind uwtable {1638entry:1639  cmpxchg ptr %a, i64 0, i64 1 acq_rel monotonic, !dbg !71640  cmpxchg ptr %a, i64 0, i64 1 acq_rel acquire, !dbg !71641  cmpxchg ptr %a, i64 0, i64 1 acq_rel seq_cst, !dbg !71642  ret void, !dbg !71643}1644; CHECK-LABEL: atomic64_cas_acq_rel1645; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 4, i32 0), !dbg1646; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 4, i32 2), !dbg1647; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 4, i32 5), !dbg1648 1649define void @atomic64_cas_seq_cst(ptr %a) nounwind uwtable {1650entry:1651  cmpxchg ptr %a, i64 0, i64 1 seq_cst monotonic, !dbg !71652  cmpxchg ptr %a, i64 0, i64 1 seq_cst acquire, !dbg !71653  cmpxchg ptr %a, i64 0, i64 1 seq_cst seq_cst, !dbg !71654  ret void, !dbg !71655}1656; CHECK-LABEL: atomic64_cas_seq_cst1657; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 5, i32 0), !dbg1658; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 5, i32 2), !dbg1659; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(ptr %a, i64 0, i64 1, i32 5, i32 5), !dbg1660 1661define void @atomic64_cas_seq_cst_ptr_ty(ptr %a, ptr %v1, ptr %v2) nounwind uwtable {1662entry:1663  cmpxchg ptr %a, ptr %v1, ptr %v2 seq_cst seq_cst, !dbg !71664  ret void1665}1666; CHECK-LABEL: atomic64_cas_seq_cst1667; CHECK: {{.*}} = ptrtoint ptr %v1 to i641668; CHECK-NEXT: {{.*}} = ptrtoint ptr %v2 to i641669; CHECK-NEXT: {{.*}} = call i64 @__tsan_atomic64_compare_exchange_val(ptr {{.*}}, i64 {{.*}}, i64 {{.*}}, i32 5, i32 5), !dbg1670; CHECK-NEXT: {{.*}} = icmp eq i641671; CHECK-NEXT: {{.*}} = inttoptr i64 {{.*}} to ptr1672; CHECK-NEXT: {{.*}} = insertvalue { ptr, i1 } poison, ptr {{.*}}, 01673; CHECK-NEXT: {{.*}} = insertvalue { ptr, i1 } {{.*}}, i1 {{.*}}, 11674 1675define i128 @atomic128_load_unordered(ptr %a) nounwind uwtable {1676entry:1677  %0 = load atomic i128, ptr %a unordered, align 16, !dbg !71678  ret i128 %0, !dbg !71679}1680; CHECK-LABEL: atomic128_load_unordered1681; CHECK: call i128 @__tsan_atomic128_load(ptr %a, i32 0), !dbg1682 1683define i128 @atomic128_load_monotonic(ptr %a) nounwind uwtable {1684entry:1685  %0 = load atomic i128, ptr %a monotonic, align 16, !dbg !71686  ret i128 %0, !dbg !71687}1688; CHECK-LABEL: atomic128_load_monotonic1689; CHECK: call i128 @__tsan_atomic128_load(ptr %a, i32 0), !dbg1690 1691define i128 @atomic128_load_acquire(ptr %a) nounwind uwtable {1692entry:1693  %0 = load atomic i128, ptr %a acquire, align 16, !dbg !71694  ret i128 %0, !dbg !71695}1696; CHECK-LABEL: atomic128_load_acquire1697; CHECK: call i128 @__tsan_atomic128_load(ptr %a, i32 2), !dbg1698 1699define i128 @atomic128_load_seq_cst(ptr %a) nounwind uwtable {1700entry:1701  %0 = load atomic i128, ptr %a seq_cst, align 16, !dbg !71702  ret i128 %0, !dbg !71703}1704; CHECK-LABEL: atomic128_load_seq_cst1705; CHECK: call i128 @__tsan_atomic128_load(ptr %a, i32 5), !dbg1706 1707define void @atomic128_store_unordered(ptr %a) nounwind uwtable {1708entry:1709  store atomic i128 0, ptr %a unordered, align 16, !dbg !71710  ret void, !dbg !71711}1712; CHECK-LABEL: atomic128_store_unordered1713; CHECK: call void @__tsan_atomic128_store(ptr %a, i128 0, i32 0), !dbg1714 1715define void @atomic128_store_monotonic(ptr %a) nounwind uwtable {1716entry:1717  store atomic i128 0, ptr %a monotonic, align 16, !dbg !71718  ret void, !dbg !71719}1720; CHECK-LABEL: atomic128_store_monotonic1721; CHECK: call void @__tsan_atomic128_store(ptr %a, i128 0, i32 0), !dbg1722 1723define void @atomic128_store_release(ptr %a) nounwind uwtable {1724entry:1725  store atomic i128 0, ptr %a release, align 16, !dbg !71726  ret void, !dbg !71727}1728; CHECK-LABEL: atomic128_store_release1729; CHECK: call void @__tsan_atomic128_store(ptr %a, i128 0, i32 3), !dbg1730 1731define void @atomic128_store_seq_cst(ptr %a) nounwind uwtable {1732entry:1733  store atomic i128 0, ptr %a seq_cst, align 16, !dbg !71734  ret void, !dbg !71735}1736; CHECK-LABEL: atomic128_store_seq_cst1737; CHECK: call void @__tsan_atomic128_store(ptr %a, i128 0, i32 5), !dbg1738 1739define void @atomic128_xchg_monotonic(ptr %a) nounwind uwtable {1740entry:1741  atomicrmw xchg ptr %a, i128 0 monotonic, !dbg !71742  ret void, !dbg !71743}1744; CHECK-LABEL: atomic128_xchg_monotonic1745; CHECK: call i128 @__tsan_atomic128_exchange(ptr %a, i128 0, i32 0), !dbg1746 1747define void @atomic128_add_monotonic(ptr %a) nounwind uwtable {1748entry:1749  atomicrmw add ptr %a, i128 0 monotonic, !dbg !71750  ret void, !dbg !71751}1752; CHECK-LABEL: atomic128_add_monotonic1753; CHECK: call i128 @__tsan_atomic128_fetch_add(ptr %a, i128 0, i32 0), !dbg1754 1755define void @atomic128_sub_monotonic(ptr %a) nounwind uwtable {1756entry:1757  atomicrmw sub ptr %a, i128 0 monotonic, !dbg !71758  ret void, !dbg !71759}1760; CHECK-LABEL: atomic128_sub_monotonic1761; CHECK: call i128 @__tsan_atomic128_fetch_sub(ptr %a, i128 0, i32 0), !dbg1762 1763define void @atomic128_and_monotonic(ptr %a) nounwind uwtable {1764entry:1765  atomicrmw and ptr %a, i128 0 monotonic, !dbg !71766  ret void, !dbg !71767}1768; CHECK-LABEL: atomic128_and_monotonic1769; CHECK: call i128 @__tsan_atomic128_fetch_and(ptr %a, i128 0, i32 0), !dbg1770 1771define void @atomic128_or_monotonic(ptr %a) nounwind uwtable {1772entry:1773  atomicrmw or ptr %a, i128 0 monotonic, !dbg !71774  ret void, !dbg !71775}1776; CHECK-LABEL: atomic128_or_monotonic1777; CHECK: call i128 @__tsan_atomic128_fetch_or(ptr %a, i128 0, i32 0), !dbg1778 1779define void @atomic128_xor_monotonic(ptr %a) nounwind uwtable {1780entry:1781  atomicrmw xor ptr %a, i128 0 monotonic, !dbg !71782  ret void, !dbg !71783}1784; CHECK-LABEL: atomic128_xor_monotonic1785; CHECK: call i128 @__tsan_atomic128_fetch_xor(ptr %a, i128 0, i32 0), !dbg1786 1787define void @atomic128_nand_monotonic(ptr %a) nounwind uwtable {1788entry:1789  atomicrmw nand ptr %a, i128 0 monotonic, !dbg !71790  ret void, !dbg !71791}1792; CHECK-LABEL: atomic128_nand_monotonic1793; CHECK: call i128 @__tsan_atomic128_fetch_nand(ptr %a, i128 0, i32 0), !dbg1794 1795define void @atomic128_xchg_acquire(ptr %a) nounwind uwtable {1796entry:1797  atomicrmw xchg ptr %a, i128 0 acquire, !dbg !71798  ret void, !dbg !71799}1800; CHECK-LABEL: atomic128_xchg_acquire1801; CHECK: call i128 @__tsan_atomic128_exchange(ptr %a, i128 0, i32 2), !dbg1802 1803define void @atomic128_add_acquire(ptr %a) nounwind uwtable {1804entry:1805  atomicrmw add ptr %a, i128 0 acquire, !dbg !71806  ret void, !dbg !71807}1808; CHECK-LABEL: atomic128_add_acquire1809; CHECK: call i128 @__tsan_atomic128_fetch_add(ptr %a, i128 0, i32 2), !dbg1810 1811define void @atomic128_sub_acquire(ptr %a) nounwind uwtable {1812entry:1813  atomicrmw sub ptr %a, i128 0 acquire, !dbg !71814  ret void, !dbg !71815}1816; CHECK-LABEL: atomic128_sub_acquire1817; CHECK: call i128 @__tsan_atomic128_fetch_sub(ptr %a, i128 0, i32 2), !dbg1818 1819define void @atomic128_and_acquire(ptr %a) nounwind uwtable {1820entry:1821  atomicrmw and ptr %a, i128 0 acquire, !dbg !71822  ret void, !dbg !71823}1824; CHECK-LABEL: atomic128_and_acquire1825; CHECK: call i128 @__tsan_atomic128_fetch_and(ptr %a, i128 0, i32 2), !dbg1826 1827define void @atomic128_or_acquire(ptr %a) nounwind uwtable {1828entry:1829  atomicrmw or ptr %a, i128 0 acquire, !dbg !71830  ret void, !dbg !71831}1832; CHECK-LABEL: atomic128_or_acquire1833; CHECK: call i128 @__tsan_atomic128_fetch_or(ptr %a, i128 0, i32 2), !dbg1834 1835define void @atomic128_xor_acquire(ptr %a) nounwind uwtable {1836entry:1837  atomicrmw xor ptr %a, i128 0 acquire, !dbg !71838  ret void, !dbg !71839}1840; CHECK-LABEL: atomic128_xor_acquire1841; CHECK: call i128 @__tsan_atomic128_fetch_xor(ptr %a, i128 0, i32 2), !dbg1842 1843define void @atomic128_nand_acquire(ptr %a) nounwind uwtable {1844entry:1845  atomicrmw nand ptr %a, i128 0 acquire, !dbg !71846  ret void, !dbg !71847}1848; CHECK-LABEL: atomic128_nand_acquire1849; CHECK: call i128 @__tsan_atomic128_fetch_nand(ptr %a, i128 0, i32 2), !dbg1850 1851define void @atomic128_xchg_release(ptr %a) nounwind uwtable {1852entry:1853  atomicrmw xchg ptr %a, i128 0 release, !dbg !71854  ret void, !dbg !71855}1856; CHECK-LABEL: atomic128_xchg_release1857; CHECK: call i128 @__tsan_atomic128_exchange(ptr %a, i128 0, i32 3), !dbg1858 1859define void @atomic128_add_release(ptr %a) nounwind uwtable {1860entry:1861  atomicrmw add ptr %a, i128 0 release, !dbg !71862  ret void, !dbg !71863}1864; CHECK-LABEL: atomic128_add_release1865; CHECK: call i128 @__tsan_atomic128_fetch_add(ptr %a, i128 0, i32 3), !dbg1866 1867define void @atomic128_sub_release(ptr %a) nounwind uwtable {1868entry:1869  atomicrmw sub ptr %a, i128 0 release, !dbg !71870  ret void, !dbg !71871}1872; CHECK-LABEL: atomic128_sub_release1873; CHECK: call i128 @__tsan_atomic128_fetch_sub(ptr %a, i128 0, i32 3), !dbg1874 1875define void @atomic128_and_release(ptr %a) nounwind uwtable {1876entry:1877  atomicrmw and ptr %a, i128 0 release, !dbg !71878  ret void, !dbg !71879}1880; CHECK-LABEL: atomic128_and_release1881; CHECK: call i128 @__tsan_atomic128_fetch_and(ptr %a, i128 0, i32 3), !dbg1882 1883define void @atomic128_or_release(ptr %a) nounwind uwtable {1884entry:1885  atomicrmw or ptr %a, i128 0 release, !dbg !71886  ret void, !dbg !71887}1888; CHECK-LABEL: atomic128_or_release1889; CHECK: call i128 @__tsan_atomic128_fetch_or(ptr %a, i128 0, i32 3), !dbg1890 1891define void @atomic128_xor_release(ptr %a) nounwind uwtable {1892entry:1893  atomicrmw xor ptr %a, i128 0 release, !dbg !71894  ret void, !dbg !71895}1896; CHECK-LABEL: atomic128_xor_release1897; CHECK: call i128 @__tsan_atomic128_fetch_xor(ptr %a, i128 0, i32 3), !dbg1898 1899define void @atomic128_nand_release(ptr %a) nounwind uwtable {1900entry:1901  atomicrmw nand ptr %a, i128 0 release, !dbg !71902  ret void, !dbg !71903}1904; CHECK-LABEL: atomic128_nand_release1905; CHECK: call i128 @__tsan_atomic128_fetch_nand(ptr %a, i128 0, i32 3), !dbg1906 1907define void @atomic128_xchg_acq_rel(ptr %a) nounwind uwtable {1908entry:1909  atomicrmw xchg ptr %a, i128 0 acq_rel, !dbg !71910  ret void, !dbg !71911}1912; CHECK-LABEL: atomic128_xchg_acq_rel1913; CHECK: call i128 @__tsan_atomic128_exchange(ptr %a, i128 0, i32 4), !dbg1914 1915define void @atomic128_add_acq_rel(ptr %a) nounwind uwtable {1916entry:1917  atomicrmw add ptr %a, i128 0 acq_rel, !dbg !71918  ret void, !dbg !71919}1920; CHECK-LABEL: atomic128_add_acq_rel1921; CHECK: call i128 @__tsan_atomic128_fetch_add(ptr %a, i128 0, i32 4), !dbg1922 1923define void @atomic128_sub_acq_rel(ptr %a) nounwind uwtable {1924entry:1925  atomicrmw sub ptr %a, i128 0 acq_rel, !dbg !71926  ret void, !dbg !71927}1928; CHECK-LABEL: atomic128_sub_acq_rel1929; CHECK: call i128 @__tsan_atomic128_fetch_sub(ptr %a, i128 0, i32 4), !dbg1930 1931define void @atomic128_and_acq_rel(ptr %a) nounwind uwtable {1932entry:1933  atomicrmw and ptr %a, i128 0 acq_rel, !dbg !71934  ret void, !dbg !71935}1936; CHECK-LABEL: atomic128_and_acq_rel1937; CHECK: call i128 @__tsan_atomic128_fetch_and(ptr %a, i128 0, i32 4), !dbg1938 1939define void @atomic128_or_acq_rel(ptr %a) nounwind uwtable {1940entry:1941  atomicrmw or ptr %a, i128 0 acq_rel, !dbg !71942  ret void, !dbg !71943}1944; CHECK-LABEL: atomic128_or_acq_rel1945; CHECK: call i128 @__tsan_atomic128_fetch_or(ptr %a, i128 0, i32 4), !dbg1946 1947define void @atomic128_xor_acq_rel(ptr %a) nounwind uwtable {1948entry:1949  atomicrmw xor ptr %a, i128 0 acq_rel, !dbg !71950  ret void, !dbg !71951}1952; CHECK-LABEL: atomic128_xor_acq_rel1953; CHECK: call i128 @__tsan_atomic128_fetch_xor(ptr %a, i128 0, i32 4), !dbg1954 1955define void @atomic128_nand_acq_rel(ptr %a) nounwind uwtable {1956entry:1957  atomicrmw nand ptr %a, i128 0 acq_rel, !dbg !71958  ret void, !dbg !71959}1960; CHECK-LABEL: atomic128_nand_acq_rel1961; CHECK: call i128 @__tsan_atomic128_fetch_nand(ptr %a, i128 0, i32 4), !dbg1962 1963define void @atomic128_xchg_seq_cst(ptr %a) nounwind uwtable {1964entry:1965  atomicrmw xchg ptr %a, i128 0 seq_cst, !dbg !71966  ret void, !dbg !71967}1968; CHECK-LABEL: atomic128_xchg_seq_cst1969; CHECK: call i128 @__tsan_atomic128_exchange(ptr %a, i128 0, i32 5), !dbg1970 1971define void @atomic128_add_seq_cst(ptr %a) nounwind uwtable {1972entry:1973  atomicrmw add ptr %a, i128 0 seq_cst, !dbg !71974  ret void, !dbg !71975}1976; CHECK-LABEL: atomic128_add_seq_cst1977; CHECK: call i128 @__tsan_atomic128_fetch_add(ptr %a, i128 0, i32 5), !dbg1978 1979define void @atomic128_sub_seq_cst(ptr %a) nounwind uwtable {1980entry:1981  atomicrmw sub ptr %a, i128 0 seq_cst, !dbg !71982  ret void, !dbg !71983}1984; CHECK-LABEL: atomic128_sub_seq_cst1985; CHECK: call i128 @__tsan_atomic128_fetch_sub(ptr %a, i128 0, i32 5), !dbg1986 1987define void @atomic128_and_seq_cst(ptr %a) nounwind uwtable {1988entry:1989  atomicrmw and ptr %a, i128 0 seq_cst, !dbg !71990  ret void, !dbg !71991}1992; CHECK-LABEL: atomic128_and_seq_cst1993; CHECK: call i128 @__tsan_atomic128_fetch_and(ptr %a, i128 0, i32 5), !dbg1994 1995define void @atomic128_or_seq_cst(ptr %a) nounwind uwtable {1996entry:1997  atomicrmw or ptr %a, i128 0 seq_cst, !dbg !71998  ret void, !dbg !71999}2000; CHECK-LABEL: atomic128_or_seq_cst2001; CHECK: call i128 @__tsan_atomic128_fetch_or(ptr %a, i128 0, i32 5), !dbg2002 2003define void @atomic128_xor_seq_cst(ptr %a) nounwind uwtable {2004entry:2005  atomicrmw xor ptr %a, i128 0 seq_cst, !dbg !72006  ret void, !dbg !72007}2008; CHECK-LABEL: atomic128_xor_seq_cst2009; CHECK: call i128 @__tsan_atomic128_fetch_xor(ptr %a, i128 0, i32 5), !dbg2010 2011define void @atomic128_nand_seq_cst(ptr %a) nounwind uwtable {2012entry:2013  atomicrmw nand ptr %a, i128 0 seq_cst, !dbg !72014  ret void, !dbg !72015}2016; CHECK-LABEL: atomic128_nand_seq_cst2017; CHECK: call i128 @__tsan_atomic128_fetch_nand(ptr %a, i128 0, i32 5), !dbg2018 2019define void @atomic128_cas_monotonic(ptr %a) nounwind uwtable {2020entry:2021  cmpxchg ptr %a, i128 0, i128 1 monotonic monotonic, !dbg !72022  ret void, !dbg !72023}2024; CHECK-LABEL: atomic128_cas_monotonic2025; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(ptr %a, i128 0, i128 1, i32 0, i32 0), !dbg2026 2027define void @atomic128_cas_acquire(ptr %a) nounwind uwtable {2028entry:2029  cmpxchg ptr %a, i128 0, i128 1 acquire acquire, !dbg !72030  ret void, !dbg !72031}2032; CHECK-LABEL: atomic128_cas_acquire2033; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(ptr %a, i128 0, i128 1, i32 2, i32 2), !dbg2034 2035define void @atomic128_cas_release(ptr %a) nounwind uwtable {2036entry:2037  cmpxchg ptr %a, i128 0, i128 1 release monotonic, !dbg !72038  ret void, !dbg !72039}2040; CHECK-LABEL: atomic128_cas_release2041; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(ptr %a, i128 0, i128 1, i32 3, i32 0), !dbg2042 2043define void @atomic128_cas_acq_rel(ptr %a) nounwind uwtable {2044entry:2045  cmpxchg ptr %a, i128 0, i128 1 acq_rel acquire, !dbg !72046  ret void, !dbg !72047}2048; CHECK-LABEL: atomic128_cas_acq_rel2049; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(ptr %a, i128 0, i128 1, i32 4, i32 2), !dbg2050 2051define void @atomic128_cas_seq_cst(ptr %a) nounwind uwtable {2052entry:2053  cmpxchg ptr %a, i128 0, i128 1 seq_cst seq_cst, !dbg !72054  ret void, !dbg !72055}2056; CHECK-LABEL: atomic128_cas_seq_cst2057; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(ptr %a, i128 0, i128 1, i32 5, i32 5), !dbg2058 2059define void @atomic_signal_fence_acquire() nounwind uwtable {2060entry:2061  fence syncscope("singlethread") acquire, !dbg !72062  ret void, !dbg !72063}2064; CHECK-LABEL: atomic_signal_fence_acquire2065; CHECK: call void @__tsan_atomic_signal_fence(i32 2), !dbg2066 2067define void @atomic_thread_fence_acquire() nounwind uwtable {2068entry:2069  fence  acquire, !dbg !72070  ret void, !dbg !72071}2072; CHECK-LABEL: atomic_thread_fence_acquire2073; CHECK: call void @__tsan_atomic_thread_fence(i32 2), !dbg2074 2075define void @atomic_signal_fence_release() nounwind uwtable {2076entry:2077  fence syncscope("singlethread") release, !dbg !72078  ret void, !dbg !72079}2080; CHECK-LABEL: atomic_signal_fence_release2081; CHECK: call void @__tsan_atomic_signal_fence(i32 3), !dbg2082 2083define void @atomic_thread_fence_release() nounwind uwtable {2084entry:2085  fence  release, !dbg !72086  ret void, !dbg !72087}2088; CHECK-LABEL: atomic_thread_fence_release2089; CHECK: call void @__tsan_atomic_thread_fence(i32 3), !dbg2090 2091define void @atomic_signal_fence_acq_rel() nounwind uwtable {2092entry:2093  fence syncscope("singlethread") acq_rel, !dbg !72094  ret void, !dbg !72095}2096; CHECK-LABEL: atomic_signal_fence_acq_rel2097; CHECK: call void @__tsan_atomic_signal_fence(i32 4), !dbg2098 2099define void @atomic_thread_fence_acq_rel() nounwind uwtable {2100entry:2101  fence  acq_rel, !dbg !72102  ret void, !dbg !72103}2104; CHECK-LABEL: atomic_thread_fence_acq_rel2105; CHECK: call void @__tsan_atomic_thread_fence(i32 4), !dbg2106 2107define void @atomic_signal_fence_seq_cst() nounwind uwtable {2108entry:2109  fence syncscope("singlethread") seq_cst, !dbg !72110  ret void, !dbg !72111}2112; CHECK-LABEL: atomic_signal_fence_seq_cst2113; CHECK: call void @__tsan_atomic_signal_fence(i32 5), !dbg2114 2115define void @atomic_thread_fence_seq_cst() nounwind uwtable {2116entry:2117  fence  seq_cst, !dbg !72118  ret void, !dbg !72119}2120; CHECK-LABEL: atomic_thread_fence_seq_cst2121; CHECK: call void @__tsan_atomic_thread_fence(i32 5), !dbg2122 2123; CHECK:    declare void @__tsan_atomic32_store(ptr, i32, i32)2124; EXT:      declare void @__tsan_atomic32_store(ptr, i32 signext, i32 signext)2125; MIPS_EXT: declare void @__tsan_atomic32_store(ptr, i32 signext, i32 signext)2126; LA_EXT:   declare void @__tsan_atomic32_store(ptr, i32 signext, i32 signext)2127 2128; CHECK:    declare i32 @__tsan_atomic32_compare_exchange_val(ptr, i32, i32, i32, i32)2129; EXT:      declare signext i32 @__tsan_atomic32_compare_exchange_val(ptr, i32 signext, i32 signext, i32 signext, i32 signext)2130; MIPS_EXT: declare i32 @__tsan_atomic32_compare_exchange_val(ptr, i32 signext, i32 signext, i32 signext, i32 signext)2131; LA_EXT:   declare signext i32 @__tsan_atomic32_compare_exchange_val(ptr, i32 signext, i32 signext, i32 signext, i32 signext)2132 2133; CHECK:    declare i64 @__tsan_atomic64_load(ptr, i32)2134; EXT:      declare i64 @__tsan_atomic64_load(ptr, i32 signext)2135; MIPS_EXT: declare i64 @__tsan_atomic64_load(ptr, i32 signext)2136; LA_EXT:   declare i64 @__tsan_atomic64_load(ptr, i32 signext)2137 2138; CHECK:    declare void @__tsan_atomic64_store(ptr, i64, i32)2139; EXT:      declare void @__tsan_atomic64_store(ptr, i64, i32 signext)2140; MIPS_EXT: declare void @__tsan_atomic64_store(ptr, i64, i32 signext)2141; LA_EXT:   declare void @__tsan_atomic64_store(ptr, i64, i32 signext)2142 2143; CHECK:    declare i64 @__tsan_atomic64_fetch_add(ptr, i64, i32)2144; EXT:      declare i64 @__tsan_atomic64_fetch_add(ptr, i64, i32 signext)2145; MIPS_EXT: declare i64 @__tsan_atomic64_fetch_add(ptr, i64, i32 signext)2146; LA_EXT:   declare i64 @__tsan_atomic64_fetch_add(ptr, i64, i32 signext)2147 2148; CHECK:    declare i64 @__tsan_atomic64_compare_exchange_val(ptr, i64, i64, i32, i32)2149; EXT:      declare i64 @__tsan_atomic64_compare_exchange_val(ptr, i64, i64, i32 signext, i32 signext)2150; MIPS_EXT: declare i64 @__tsan_atomic64_compare_exchange_val(ptr, i64, i64, i32 signext, i32 signext)2151; LA_EXT:   declare i64 @__tsan_atomic64_compare_exchange_val(ptr, i64, i64, i32 signext, i32 signext)2152 2153; CHECK:    declare void @__tsan_atomic_thread_fence(i32)2154; EXT:      declare void @__tsan_atomic_thread_fence(i32 signext)2155; MIPS_EXT: declare void @__tsan_atomic_thread_fence(i32 signext)2156; LA_EXT:   declare void @__tsan_atomic_thread_fence(i32 signext)2157 2158; CHECK:    declare void @__tsan_atomic_signal_fence(i32)2159; EXT:      declare void @__tsan_atomic_signal_fence(i32 signext)2160; MIPS_EXT: declare void @__tsan_atomic_signal_fence(i32 signext)2161; LA_EXT:   declare void @__tsan_atomic_signal_fence(i32 signext)2162 2163; CHECK:    declare ptr @__tsan_memset(ptr, i32, i64)2164; EXT:      declare ptr @__tsan_memset(ptr, i32 signext, i64)2165; MIPS_EXT: declare ptr @__tsan_memset(ptr, i32 signext, i64)2166; LA_EXT:   declare ptr @__tsan_memset(ptr, i32 signext, i64)2167 2168!llvm.module.flags = !{!0, !1, !2}2169!llvm.dbg.cu = !{!8}2170!0 = !{i32 2, !"Dwarf Version", i32 4}2171!1 = !{i32 2, !"Debug Info Version", i32 3}2172!2 = !{i32 1, !"PIC Level", i32 2}2173 2174!3 = !{}2175!4 = !DISubroutineType(types: !3)2176!5 = !DIFile(filename: "atomic.cpp", directory: "/tmp")2177!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, retainedNodes: !3)2178!7 = !DILocation(line: 100, column: 1, scope: !6)2179 2180!8 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang",2181                             file: !5,2182                             isOptimized: true, flags: "-O2",2183                             splitDebugFilename: "abc.debug", emissionKind: 2)2184