1
; RUN: opt < %s -tsan -S | FileCheck %s
2
; Check that atomic memory operations are converted to calls into ThreadSanitizer runtime.
3
target 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"
5
define i8 @atomic8_load_unordered(i8* %a) nounwind uwtable {
7
%0 = load atomic i8, i8* %a unordered, align 1, !dbg !7
10
; CHECK-LABEL: atomic8_load_unordered
11
; CHECK: call i8 @__tsan_atomic8_load(i8* %a, i32 0), !dbg
13
define i8 @atomic8_load_monotonic(i8* %a) nounwind uwtable {
15
%0 = load atomic i8, i8* %a monotonic, align 1, !dbg !7
18
; CHECK-LABEL: atomic8_load_monotonic
19
; CHECK: call i8 @__tsan_atomic8_load(i8* %a, i32 0), !dbg
21
define i8 @atomic8_load_acquire(i8* %a) nounwind uwtable {
23
%0 = load atomic i8, i8* %a acquire, align 1, !dbg !7
26
; CHECK-LABEL: atomic8_load_acquire
27
; CHECK: call i8 @__tsan_atomic8_load(i8* %a, i32 2), !dbg
29
define i8 @atomic8_load_seq_cst(i8* %a) nounwind uwtable {
31
%0 = load atomic i8, i8* %a seq_cst, align 1, !dbg !7
34
; CHECK-LABEL: atomic8_load_seq_cst
35
; CHECK: call i8 @__tsan_atomic8_load(i8* %a, i32 5), !dbg
37
define void @atomic8_store_unordered(i8* %a) nounwind uwtable {
39
store atomic i8 0, i8* %a unordered, align 1, !dbg !7
42
; CHECK-LABEL: atomic8_store_unordered
43
; CHECK: call void @__tsan_atomic8_store(i8* %a, i8 0, i32 0), !dbg
45
define void @atomic8_store_monotonic(i8* %a) nounwind uwtable {
47
store atomic i8 0, i8* %a monotonic, align 1, !dbg !7
50
; CHECK-LABEL: atomic8_store_monotonic
51
; CHECK: call void @__tsan_atomic8_store(i8* %a, i8 0, i32 0), !dbg
53
define void @atomic8_store_release(i8* %a) nounwind uwtable {
55
store atomic i8 0, i8* %a release, align 1, !dbg !7
58
; CHECK-LABEL: atomic8_store_release
59
; CHECK: call void @__tsan_atomic8_store(i8* %a, i8 0, i32 3), !dbg
61
define void @atomic8_store_seq_cst(i8* %a) nounwind uwtable {
63
store atomic i8 0, i8* %a seq_cst, align 1, !dbg !7
66
; CHECK-LABEL: atomic8_store_seq_cst
67
; CHECK: call void @__tsan_atomic8_store(i8* %a, i8 0, i32 5), !dbg
69
define void @atomic8_xchg_monotonic(i8* %a) nounwind uwtable {
71
atomicrmw xchg i8* %a, i8 0 monotonic, !dbg !7
74
; CHECK-LABEL: atomic8_xchg_monotonic
75
; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 0), !dbg
77
define void @atomic8_add_monotonic(i8* %a) nounwind uwtable {
79
atomicrmw add i8* %a, i8 0 monotonic, !dbg !7
82
; CHECK-LABEL: atomic8_add_monotonic
83
; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 0), !dbg
85
define void @atomic8_sub_monotonic(i8* %a) nounwind uwtable {
87
atomicrmw sub i8* %a, i8 0 monotonic, !dbg !7
90
; CHECK-LABEL: atomic8_sub_monotonic
91
; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 0), !dbg
93
define void @atomic8_and_monotonic(i8* %a) nounwind uwtable {
95
atomicrmw and i8* %a, i8 0 monotonic, !dbg !7
98
; CHECK-LABEL: atomic8_and_monotonic
99
; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 0), !dbg
101
define void @atomic8_or_monotonic(i8* %a) nounwind uwtable {
103
atomicrmw or i8* %a, i8 0 monotonic, !dbg !7
106
; CHECK-LABEL: atomic8_or_monotonic
107
; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 0), !dbg
109
define void @atomic8_xor_monotonic(i8* %a) nounwind uwtable {
111
atomicrmw xor i8* %a, i8 0 monotonic, !dbg !7
114
; CHECK-LABEL: atomic8_xor_monotonic
115
; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 0), !dbg
117
define void @atomic8_nand_monotonic(i8* %a) nounwind uwtable {
119
atomicrmw nand i8* %a, i8 0 monotonic, !dbg !7
122
; CHECK-LABEL: atomic8_nand_monotonic
123
; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 0), !dbg
125
define void @atomic8_xchg_acquire(i8* %a) nounwind uwtable {
127
atomicrmw xchg i8* %a, i8 0 acquire, !dbg !7
130
; CHECK-LABEL: atomic8_xchg_acquire
131
; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 2), !dbg
133
define void @atomic8_add_acquire(i8* %a) nounwind uwtable {
135
atomicrmw add i8* %a, i8 0 acquire, !dbg !7
138
; CHECK-LABEL: atomic8_add_acquire
139
; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 2), !dbg
141
define void @atomic8_sub_acquire(i8* %a) nounwind uwtable {
143
atomicrmw sub i8* %a, i8 0 acquire, !dbg !7
146
; CHECK-LABEL: atomic8_sub_acquire
147
; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 2), !dbg
149
define void @atomic8_and_acquire(i8* %a) nounwind uwtable {
151
atomicrmw and i8* %a, i8 0 acquire, !dbg !7
154
; CHECK-LABEL: atomic8_and_acquire
155
; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 2), !dbg
157
define void @atomic8_or_acquire(i8* %a) nounwind uwtable {
159
atomicrmw or i8* %a, i8 0 acquire, !dbg !7
162
; CHECK-LABEL: atomic8_or_acquire
163
; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 2), !dbg
165
define void @atomic8_xor_acquire(i8* %a) nounwind uwtable {
167
atomicrmw xor i8* %a, i8 0 acquire, !dbg !7
170
; CHECK-LABEL: atomic8_xor_acquire
171
; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 2), !dbg
173
define void @atomic8_nand_acquire(i8* %a) nounwind uwtable {
175
atomicrmw nand i8* %a, i8 0 acquire, !dbg !7
178
; CHECK-LABEL: atomic8_nand_acquire
179
; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 2), !dbg
181
define void @atomic8_xchg_release(i8* %a) nounwind uwtable {
183
atomicrmw xchg i8* %a, i8 0 release, !dbg !7
186
; CHECK-LABEL: atomic8_xchg_release
187
; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 3), !dbg
189
define void @atomic8_add_release(i8* %a) nounwind uwtable {
191
atomicrmw add i8* %a, i8 0 release, !dbg !7
194
; CHECK-LABEL: atomic8_add_release
195
; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 3), !dbg
197
define void @atomic8_sub_release(i8* %a) nounwind uwtable {
199
atomicrmw sub i8* %a, i8 0 release, !dbg !7
202
; CHECK-LABEL: atomic8_sub_release
203
; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 3), !dbg
205
define void @atomic8_and_release(i8* %a) nounwind uwtable {
207
atomicrmw and i8* %a, i8 0 release, !dbg !7
210
; CHECK-LABEL: atomic8_and_release
211
; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 3), !dbg
213
define void @atomic8_or_release(i8* %a) nounwind uwtable {
215
atomicrmw or i8* %a, i8 0 release, !dbg !7
218
; CHECK-LABEL: atomic8_or_release
219
; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 3), !dbg
221
define void @atomic8_xor_release(i8* %a) nounwind uwtable {
223
atomicrmw xor i8* %a, i8 0 release, !dbg !7
226
; CHECK-LABEL: atomic8_xor_release
227
; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 3), !dbg
229
define void @atomic8_nand_release(i8* %a) nounwind uwtable {
231
atomicrmw nand i8* %a, i8 0 release, !dbg !7
234
; CHECK-LABEL: atomic8_nand_release
235
; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 3), !dbg
237
define void @atomic8_xchg_acq_rel(i8* %a) nounwind uwtable {
239
atomicrmw xchg i8* %a, i8 0 acq_rel, !dbg !7
242
; CHECK-LABEL: atomic8_xchg_acq_rel
243
; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 4), !dbg
245
define void @atomic8_add_acq_rel(i8* %a) nounwind uwtable {
247
atomicrmw add i8* %a, i8 0 acq_rel, !dbg !7
250
; CHECK-LABEL: atomic8_add_acq_rel
251
; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 4), !dbg
253
define void @atomic8_sub_acq_rel(i8* %a) nounwind uwtable {
255
atomicrmw sub i8* %a, i8 0 acq_rel, !dbg !7
258
; CHECK-LABEL: atomic8_sub_acq_rel
259
; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 4), !dbg
261
define void @atomic8_and_acq_rel(i8* %a) nounwind uwtable {
263
atomicrmw and i8* %a, i8 0 acq_rel, !dbg !7
266
; CHECK-LABEL: atomic8_and_acq_rel
267
; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 4), !dbg
269
define void @atomic8_or_acq_rel(i8* %a) nounwind uwtable {
271
atomicrmw or i8* %a, i8 0 acq_rel, !dbg !7
274
; CHECK-LABEL: atomic8_or_acq_rel
275
; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 4), !dbg
277
define void @atomic8_xor_acq_rel(i8* %a) nounwind uwtable {
279
atomicrmw xor i8* %a, i8 0 acq_rel, !dbg !7
282
; CHECK-LABEL: atomic8_xor_acq_rel
283
; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 4), !dbg
285
define void @atomic8_nand_acq_rel(i8* %a) nounwind uwtable {
287
atomicrmw nand i8* %a, i8 0 acq_rel, !dbg !7
290
; CHECK-LABEL: atomic8_nand_acq_rel
291
; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 4), !dbg
293
define void @atomic8_xchg_seq_cst(i8* %a) nounwind uwtable {
295
atomicrmw xchg i8* %a, i8 0 seq_cst, !dbg !7
298
; CHECK-LABEL: atomic8_xchg_seq_cst
299
; CHECK: call i8 @__tsan_atomic8_exchange(i8* %a, i8 0, i32 5), !dbg
301
define void @atomic8_add_seq_cst(i8* %a) nounwind uwtable {
303
atomicrmw add i8* %a, i8 0 seq_cst, !dbg !7
306
; CHECK-LABEL: atomic8_add_seq_cst
307
; CHECK: call i8 @__tsan_atomic8_fetch_add(i8* %a, i8 0, i32 5), !dbg
309
define void @atomic8_sub_seq_cst(i8* %a) nounwind uwtable {
311
atomicrmw sub i8* %a, i8 0 seq_cst, !dbg !7
314
; CHECK-LABEL: atomic8_sub_seq_cst
315
; CHECK: call i8 @__tsan_atomic8_fetch_sub(i8* %a, i8 0, i32 5), !dbg
317
define void @atomic8_and_seq_cst(i8* %a) nounwind uwtable {
319
atomicrmw and i8* %a, i8 0 seq_cst, !dbg !7
322
; CHECK-LABEL: atomic8_and_seq_cst
323
; CHECK: call i8 @__tsan_atomic8_fetch_and(i8* %a, i8 0, i32 5), !dbg
325
define void @atomic8_or_seq_cst(i8* %a) nounwind uwtable {
327
atomicrmw or i8* %a, i8 0 seq_cst, !dbg !7
330
; CHECK-LABEL: atomic8_or_seq_cst
331
; CHECK: call i8 @__tsan_atomic8_fetch_or(i8* %a, i8 0, i32 5), !dbg
333
define void @atomic8_xor_seq_cst(i8* %a) nounwind uwtable {
335
atomicrmw xor i8* %a, i8 0 seq_cst, !dbg !7
338
; CHECK-LABEL: atomic8_xor_seq_cst
339
; CHECK: call i8 @__tsan_atomic8_fetch_xor(i8* %a, i8 0, i32 5), !dbg
341
define void @atomic8_nand_seq_cst(i8* %a) nounwind uwtable {
343
atomicrmw nand i8* %a, i8 0 seq_cst, !dbg !7
346
; CHECK-LABEL: atomic8_nand_seq_cst
347
; CHECK: call i8 @__tsan_atomic8_fetch_nand(i8* %a, i8 0, i32 5), !dbg
349
define void @atomic8_cas_monotonic(i8* %a) nounwind uwtable {
351
cmpxchg i8* %a, i8 0, i8 1 monotonic monotonic, !dbg !7
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
357
define void @atomic8_cas_acquire(i8* %a) nounwind uwtable {
359
cmpxchg i8* %a, i8 0, i8 1 acquire acquire, !dbg !7
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
365
define void @atomic8_cas_release(i8* %a) nounwind uwtable {
367
cmpxchg i8* %a, i8 0, i8 1 release monotonic, !dbg !7
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
373
define void @atomic8_cas_acq_rel(i8* %a) nounwind uwtable {
375
cmpxchg i8* %a, i8 0, i8 1 acq_rel acquire, !dbg !7
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
381
define void @atomic8_cas_seq_cst(i8* %a) nounwind uwtable {
383
cmpxchg i8* %a, i8 0, i8 1 seq_cst seq_cst, !dbg !7
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
389
define i16 @atomic16_load_unordered(i16* %a) nounwind uwtable {
391
%0 = load atomic i16, i16* %a unordered, align 2, !dbg !7
394
; CHECK-LABEL: atomic16_load_unordered
395
; CHECK: call i16 @__tsan_atomic16_load(i16* %a, i32 0), !dbg
397
define i16 @atomic16_load_monotonic(i16* %a) nounwind uwtable {
399
%0 = load atomic i16, i16* %a monotonic, align 2, !dbg !7
402
; CHECK-LABEL: atomic16_load_monotonic
403
; CHECK: call i16 @__tsan_atomic16_load(i16* %a, i32 0), !dbg
405
define i16 @atomic16_load_acquire(i16* %a) nounwind uwtable {
407
%0 = load atomic i16, i16* %a acquire, align 2, !dbg !7
410
; CHECK-LABEL: atomic16_load_acquire
411
; CHECK: call i16 @__tsan_atomic16_load(i16* %a, i32 2), !dbg
413
define i16 @atomic16_load_seq_cst(i16* %a) nounwind uwtable {
415
%0 = load atomic i16, i16* %a seq_cst, align 2, !dbg !7
418
; CHECK-LABEL: atomic16_load_seq_cst
419
; CHECK: call i16 @__tsan_atomic16_load(i16* %a, i32 5), !dbg
421
define void @atomic16_store_unordered(i16* %a) nounwind uwtable {
423
store atomic i16 0, i16* %a unordered, align 2, !dbg !7
426
; CHECK-LABEL: atomic16_store_unordered
427
; CHECK: call void @__tsan_atomic16_store(i16* %a, i16 0, i32 0), !dbg
429
define void @atomic16_store_monotonic(i16* %a) nounwind uwtable {
431
store atomic i16 0, i16* %a monotonic, align 2, !dbg !7
434
; CHECK-LABEL: atomic16_store_monotonic
435
; CHECK: call void @__tsan_atomic16_store(i16* %a, i16 0, i32 0), !dbg
437
define void @atomic16_store_release(i16* %a) nounwind uwtable {
439
store atomic i16 0, i16* %a release, align 2, !dbg !7
442
; CHECK-LABEL: atomic16_store_release
443
; CHECK: call void @__tsan_atomic16_store(i16* %a, i16 0, i32 3), !dbg
445
define void @atomic16_store_seq_cst(i16* %a) nounwind uwtable {
447
store atomic i16 0, i16* %a seq_cst, align 2, !dbg !7
450
; CHECK-LABEL: atomic16_store_seq_cst
451
; CHECK: call void @__tsan_atomic16_store(i16* %a, i16 0, i32 5), !dbg
453
define void @atomic16_xchg_monotonic(i16* %a) nounwind uwtable {
455
atomicrmw xchg i16* %a, i16 0 monotonic, !dbg !7
458
; CHECK-LABEL: atomic16_xchg_monotonic
459
; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 0), !dbg
461
define void @atomic16_add_monotonic(i16* %a) nounwind uwtable {
463
atomicrmw add i16* %a, i16 0 monotonic, !dbg !7
466
; CHECK-LABEL: atomic16_add_monotonic
467
; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 0), !dbg
469
define void @atomic16_sub_monotonic(i16* %a) nounwind uwtable {
471
atomicrmw sub i16* %a, i16 0 monotonic, !dbg !7
474
; CHECK-LABEL: atomic16_sub_monotonic
475
; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 0), !dbg
477
define void @atomic16_and_monotonic(i16* %a) nounwind uwtable {
479
atomicrmw and i16* %a, i16 0 monotonic, !dbg !7
482
; CHECK-LABEL: atomic16_and_monotonic
483
; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 0), !dbg
485
define void @atomic16_or_monotonic(i16* %a) nounwind uwtable {
487
atomicrmw or i16* %a, i16 0 monotonic, !dbg !7
490
; CHECK-LABEL: atomic16_or_monotonic
491
; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 0), !dbg
493
define void @atomic16_xor_monotonic(i16* %a) nounwind uwtable {
495
atomicrmw xor i16* %a, i16 0 monotonic, !dbg !7
498
; CHECK-LABEL: atomic16_xor_monotonic
499
; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 0), !dbg
501
define void @atomic16_nand_monotonic(i16* %a) nounwind uwtable {
503
atomicrmw nand i16* %a, i16 0 monotonic, !dbg !7
506
; CHECK-LABEL: atomic16_nand_monotonic
507
; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 0), !dbg
509
define void @atomic16_xchg_acquire(i16* %a) nounwind uwtable {
511
atomicrmw xchg i16* %a, i16 0 acquire, !dbg !7
514
; CHECK-LABEL: atomic16_xchg_acquire
515
; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 2), !dbg
517
define void @atomic16_add_acquire(i16* %a) nounwind uwtable {
519
atomicrmw add i16* %a, i16 0 acquire, !dbg !7
522
; CHECK-LABEL: atomic16_add_acquire
523
; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 2), !dbg
525
define void @atomic16_sub_acquire(i16* %a) nounwind uwtable {
527
atomicrmw sub i16* %a, i16 0 acquire, !dbg !7
530
; CHECK-LABEL: atomic16_sub_acquire
531
; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 2), !dbg
533
define void @atomic16_and_acquire(i16* %a) nounwind uwtable {
535
atomicrmw and i16* %a, i16 0 acquire, !dbg !7
538
; CHECK-LABEL: atomic16_and_acquire
539
; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 2), !dbg
541
define void @atomic16_or_acquire(i16* %a) nounwind uwtable {
543
atomicrmw or i16* %a, i16 0 acquire, !dbg !7
546
; CHECK-LABEL: atomic16_or_acquire
547
; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 2), !dbg
549
define void @atomic16_xor_acquire(i16* %a) nounwind uwtable {
551
atomicrmw xor i16* %a, i16 0 acquire, !dbg !7
554
; CHECK-LABEL: atomic16_xor_acquire
555
; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 2), !dbg
557
define void @atomic16_nand_acquire(i16* %a) nounwind uwtable {
559
atomicrmw nand i16* %a, i16 0 acquire, !dbg !7
562
; CHECK-LABEL: atomic16_nand_acquire
563
; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 2), !dbg
565
define void @atomic16_xchg_release(i16* %a) nounwind uwtable {
567
atomicrmw xchg i16* %a, i16 0 release, !dbg !7
570
; CHECK-LABEL: atomic16_xchg_release
571
; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 3), !dbg
573
define void @atomic16_add_release(i16* %a) nounwind uwtable {
575
atomicrmw add i16* %a, i16 0 release, !dbg !7
578
; CHECK-LABEL: atomic16_add_release
579
; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 3), !dbg
581
define void @atomic16_sub_release(i16* %a) nounwind uwtable {
583
atomicrmw sub i16* %a, i16 0 release, !dbg !7
586
; CHECK-LABEL: atomic16_sub_release
587
; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 3), !dbg
589
define void @atomic16_and_release(i16* %a) nounwind uwtable {
591
atomicrmw and i16* %a, i16 0 release, !dbg !7
594
; CHECK-LABEL: atomic16_and_release
595
; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 3), !dbg
597
define void @atomic16_or_release(i16* %a) nounwind uwtable {
599
atomicrmw or i16* %a, i16 0 release, !dbg !7
602
; CHECK-LABEL: atomic16_or_release
603
; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 3), !dbg
605
define void @atomic16_xor_release(i16* %a) nounwind uwtable {
607
atomicrmw xor i16* %a, i16 0 release, !dbg !7
610
; CHECK-LABEL: atomic16_xor_release
611
; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 3), !dbg
613
define void @atomic16_nand_release(i16* %a) nounwind uwtable {
615
atomicrmw nand i16* %a, i16 0 release, !dbg !7
618
; CHECK-LABEL: atomic16_nand_release
619
; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 3), !dbg
621
define void @atomic16_xchg_acq_rel(i16* %a) nounwind uwtable {
623
atomicrmw xchg i16* %a, i16 0 acq_rel, !dbg !7
626
; CHECK-LABEL: atomic16_xchg_acq_rel
627
; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 4), !dbg
629
define void @atomic16_add_acq_rel(i16* %a) nounwind uwtable {
631
atomicrmw add i16* %a, i16 0 acq_rel, !dbg !7
634
; CHECK-LABEL: atomic16_add_acq_rel
635
; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 4), !dbg
637
define void @atomic16_sub_acq_rel(i16* %a) nounwind uwtable {
639
atomicrmw sub i16* %a, i16 0 acq_rel, !dbg !7
642
; CHECK-LABEL: atomic16_sub_acq_rel
643
; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 4), !dbg
645
define void @atomic16_and_acq_rel(i16* %a) nounwind uwtable {
647
atomicrmw and i16* %a, i16 0 acq_rel, !dbg !7
650
; CHECK-LABEL: atomic16_and_acq_rel
651
; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 4), !dbg
653
define void @atomic16_or_acq_rel(i16* %a) nounwind uwtable {
655
atomicrmw or i16* %a, i16 0 acq_rel, !dbg !7
658
; CHECK-LABEL: atomic16_or_acq_rel
659
; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 4), !dbg
661
define void @atomic16_xor_acq_rel(i16* %a) nounwind uwtable {
663
atomicrmw xor i16* %a, i16 0 acq_rel, !dbg !7
666
; CHECK-LABEL: atomic16_xor_acq_rel
667
; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 4), !dbg
669
define void @atomic16_nand_acq_rel(i16* %a) nounwind uwtable {
671
atomicrmw nand i16* %a, i16 0 acq_rel, !dbg !7
674
; CHECK-LABEL: atomic16_nand_acq_rel
675
; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 4), !dbg
677
define void @atomic16_xchg_seq_cst(i16* %a) nounwind uwtable {
679
atomicrmw xchg i16* %a, i16 0 seq_cst, !dbg !7
682
; CHECK-LABEL: atomic16_xchg_seq_cst
683
; CHECK: call i16 @__tsan_atomic16_exchange(i16* %a, i16 0, i32 5), !dbg
685
define void @atomic16_add_seq_cst(i16* %a) nounwind uwtable {
687
atomicrmw add i16* %a, i16 0 seq_cst, !dbg !7
690
; CHECK-LABEL: atomic16_add_seq_cst
691
; CHECK: call i16 @__tsan_atomic16_fetch_add(i16* %a, i16 0, i32 5), !dbg
693
define void @atomic16_sub_seq_cst(i16* %a) nounwind uwtable {
695
atomicrmw sub i16* %a, i16 0 seq_cst, !dbg !7
698
; CHECK-LABEL: atomic16_sub_seq_cst
699
; CHECK: call i16 @__tsan_atomic16_fetch_sub(i16* %a, i16 0, i32 5), !dbg
701
define void @atomic16_and_seq_cst(i16* %a) nounwind uwtable {
703
atomicrmw and i16* %a, i16 0 seq_cst, !dbg !7
706
; CHECK-LABEL: atomic16_and_seq_cst
707
; CHECK: call i16 @__tsan_atomic16_fetch_and(i16* %a, i16 0, i32 5), !dbg
709
define void @atomic16_or_seq_cst(i16* %a) nounwind uwtable {
711
atomicrmw or i16* %a, i16 0 seq_cst, !dbg !7
714
; CHECK-LABEL: atomic16_or_seq_cst
715
; CHECK: call i16 @__tsan_atomic16_fetch_or(i16* %a, i16 0, i32 5), !dbg
717
define void @atomic16_xor_seq_cst(i16* %a) nounwind uwtable {
719
atomicrmw xor i16* %a, i16 0 seq_cst, !dbg !7
722
; CHECK-LABEL: atomic16_xor_seq_cst
723
; CHECK: call i16 @__tsan_atomic16_fetch_xor(i16* %a, i16 0, i32 5), !dbg
725
define void @atomic16_nand_seq_cst(i16* %a) nounwind uwtable {
727
atomicrmw nand i16* %a, i16 0 seq_cst, !dbg !7
730
; CHECK-LABEL: atomic16_nand_seq_cst
731
; CHECK: call i16 @__tsan_atomic16_fetch_nand(i16* %a, i16 0, i32 5), !dbg
733
define void @atomic16_cas_monotonic(i16* %a) nounwind uwtable {
735
cmpxchg i16* %a, i16 0, i16 1 monotonic monotonic, !dbg !7
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
741
define void @atomic16_cas_acquire(i16* %a) nounwind uwtable {
743
cmpxchg i16* %a, i16 0, i16 1 acquire acquire, !dbg !7
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
749
define void @atomic16_cas_release(i16* %a) nounwind uwtable {
751
cmpxchg i16* %a, i16 0, i16 1 release monotonic, !dbg !7
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
757
define void @atomic16_cas_acq_rel(i16* %a) nounwind uwtable {
759
cmpxchg i16* %a, i16 0, i16 1 acq_rel acquire, !dbg !7
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
765
define void @atomic16_cas_seq_cst(i16* %a) nounwind uwtable {
767
cmpxchg i16* %a, i16 0, i16 1 seq_cst seq_cst, !dbg !7
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
773
define i32 @atomic32_load_unordered(i32* %a) nounwind uwtable {
775
%0 = load atomic i32, i32* %a unordered, align 4, !dbg !7
778
; CHECK-LABEL: atomic32_load_unordered
779
; CHECK: call i32 @__tsan_atomic32_load(i32* %a, i32 0), !dbg
781
define i32 @atomic32_load_monotonic(i32* %a) nounwind uwtable {
783
%0 = load atomic i32, i32* %a monotonic, align 4, !dbg !7
786
; CHECK-LABEL: atomic32_load_monotonic
787
; CHECK: call i32 @__tsan_atomic32_load(i32* %a, i32 0), !dbg
789
define i32 @atomic32_load_acquire(i32* %a) nounwind uwtable {
791
%0 = load atomic i32, i32* %a acquire, align 4, !dbg !7
794
; CHECK-LABEL: atomic32_load_acquire
795
; CHECK: call i32 @__tsan_atomic32_load(i32* %a, i32 2), !dbg
797
define i32 @atomic32_load_seq_cst(i32* %a) nounwind uwtable {
799
%0 = load atomic i32, i32* %a seq_cst, align 4, !dbg !7
802
; CHECK-LABEL: atomic32_load_seq_cst
803
; CHECK: call i32 @__tsan_atomic32_load(i32* %a, i32 5), !dbg
805
define void @atomic32_store_unordered(i32* %a) nounwind uwtable {
807
store atomic i32 0, i32* %a unordered, align 4, !dbg !7
810
; CHECK-LABEL: atomic32_store_unordered
811
; CHECK: call void @__tsan_atomic32_store(i32* %a, i32 0, i32 0), !dbg
813
define void @atomic32_store_monotonic(i32* %a) nounwind uwtable {
815
store atomic i32 0, i32* %a monotonic, align 4, !dbg !7
818
; CHECK-LABEL: atomic32_store_monotonic
819
; CHECK: call void @__tsan_atomic32_store(i32* %a, i32 0, i32 0), !dbg
821
define void @atomic32_store_release(i32* %a) nounwind uwtable {
823
store atomic i32 0, i32* %a release, align 4, !dbg !7
826
; CHECK-LABEL: atomic32_store_release
827
; CHECK: call void @__tsan_atomic32_store(i32* %a, i32 0, i32 3), !dbg
829
define void @atomic32_store_seq_cst(i32* %a) nounwind uwtable {
831
store atomic i32 0, i32* %a seq_cst, align 4, !dbg !7
834
; CHECK-LABEL: atomic32_store_seq_cst
835
; CHECK: call void @__tsan_atomic32_store(i32* %a, i32 0, i32 5), !dbg
837
define void @atomic32_xchg_monotonic(i32* %a) nounwind uwtable {
839
atomicrmw xchg i32* %a, i32 0 monotonic, !dbg !7
842
; CHECK-LABEL: atomic32_xchg_monotonic
843
; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 0), !dbg
845
define void @atomic32_add_monotonic(i32* %a) nounwind uwtable {
847
atomicrmw add i32* %a, i32 0 monotonic, !dbg !7
850
; CHECK-LABEL: atomic32_add_monotonic
851
; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 0), !dbg
853
define void @atomic32_sub_monotonic(i32* %a) nounwind uwtable {
855
atomicrmw sub i32* %a, i32 0 monotonic, !dbg !7
858
; CHECK-LABEL: atomic32_sub_monotonic
859
; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 0), !dbg
861
define void @atomic32_and_monotonic(i32* %a) nounwind uwtable {
863
atomicrmw and i32* %a, i32 0 monotonic, !dbg !7
866
; CHECK-LABEL: atomic32_and_monotonic
867
; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 0), !dbg
869
define void @atomic32_or_monotonic(i32* %a) nounwind uwtable {
871
atomicrmw or i32* %a, i32 0 monotonic, !dbg !7
874
; CHECK-LABEL: atomic32_or_monotonic
875
; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 0), !dbg
877
define void @atomic32_xor_monotonic(i32* %a) nounwind uwtable {
879
atomicrmw xor i32* %a, i32 0 monotonic, !dbg !7
882
; CHECK-LABEL: atomic32_xor_monotonic
883
; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 0), !dbg
885
define void @atomic32_nand_monotonic(i32* %a) nounwind uwtable {
887
atomicrmw nand i32* %a, i32 0 monotonic, !dbg !7
890
; CHECK-LABEL: atomic32_nand_monotonic
891
; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 0), !dbg
893
define void @atomic32_xchg_acquire(i32* %a) nounwind uwtable {
895
atomicrmw xchg i32* %a, i32 0 acquire, !dbg !7
898
; CHECK-LABEL: atomic32_xchg_acquire
899
; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 2), !dbg
901
define void @atomic32_add_acquire(i32* %a) nounwind uwtable {
903
atomicrmw add i32* %a, i32 0 acquire, !dbg !7
906
; CHECK-LABEL: atomic32_add_acquire
907
; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 2), !dbg
909
define void @atomic32_sub_acquire(i32* %a) nounwind uwtable {
911
atomicrmw sub i32* %a, i32 0 acquire, !dbg !7
914
; CHECK-LABEL: atomic32_sub_acquire
915
; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 2), !dbg
917
define void @atomic32_and_acquire(i32* %a) nounwind uwtable {
919
atomicrmw and i32* %a, i32 0 acquire, !dbg !7
922
; CHECK-LABEL: atomic32_and_acquire
923
; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 2), !dbg
925
define void @atomic32_or_acquire(i32* %a) nounwind uwtable {
927
atomicrmw or i32* %a, i32 0 acquire, !dbg !7
930
; CHECK-LABEL: atomic32_or_acquire
931
; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 2), !dbg
933
define void @atomic32_xor_acquire(i32* %a) nounwind uwtable {
935
atomicrmw xor i32* %a, i32 0 acquire, !dbg !7
938
; CHECK-LABEL: atomic32_xor_acquire
939
; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 2), !dbg
941
define void @atomic32_nand_acquire(i32* %a) nounwind uwtable {
943
atomicrmw nand i32* %a, i32 0 acquire, !dbg !7
946
; CHECK-LABEL: atomic32_nand_acquire
947
; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 2), !dbg
949
define void @atomic32_xchg_release(i32* %a) nounwind uwtable {
951
atomicrmw xchg i32* %a, i32 0 release, !dbg !7
954
; CHECK-LABEL: atomic32_xchg_release
955
; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 3), !dbg
957
define void @atomic32_add_release(i32* %a) nounwind uwtable {
959
atomicrmw add i32* %a, i32 0 release, !dbg !7
962
; CHECK-LABEL: atomic32_add_release
963
; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 3), !dbg
965
define void @atomic32_sub_release(i32* %a) nounwind uwtable {
967
atomicrmw sub i32* %a, i32 0 release, !dbg !7
970
; CHECK-LABEL: atomic32_sub_release
971
; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 3), !dbg
973
define void @atomic32_and_release(i32* %a) nounwind uwtable {
975
atomicrmw and i32* %a, i32 0 release, !dbg !7
978
; CHECK-LABEL: atomic32_and_release
979
; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 3), !dbg
981
define void @atomic32_or_release(i32* %a) nounwind uwtable {
983
atomicrmw or i32* %a, i32 0 release, !dbg !7
986
; CHECK-LABEL: atomic32_or_release
987
; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 3), !dbg
989
define void @atomic32_xor_release(i32* %a) nounwind uwtable {
991
atomicrmw xor i32* %a, i32 0 release, !dbg !7
994
; CHECK-LABEL: atomic32_xor_release
995
; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 3), !dbg
997
define void @atomic32_nand_release(i32* %a) nounwind uwtable {
999
atomicrmw nand i32* %a, i32 0 release, !dbg !7
1002
; CHECK-LABEL: atomic32_nand_release
1003
; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 3), !dbg
1005
define void @atomic32_xchg_acq_rel(i32* %a) nounwind uwtable {
1007
atomicrmw xchg i32* %a, i32 0 acq_rel, !dbg !7
1010
; CHECK-LABEL: atomic32_xchg_acq_rel
1011
; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 4), !dbg
1013
define void @atomic32_add_acq_rel(i32* %a) nounwind uwtable {
1015
atomicrmw add i32* %a, i32 0 acq_rel, !dbg !7
1018
; CHECK-LABEL: atomic32_add_acq_rel
1019
; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 4), !dbg
1021
define void @atomic32_sub_acq_rel(i32* %a) nounwind uwtable {
1023
atomicrmw sub i32* %a, i32 0 acq_rel, !dbg !7
1026
; CHECK-LABEL: atomic32_sub_acq_rel
1027
; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 4), !dbg
1029
define void @atomic32_and_acq_rel(i32* %a) nounwind uwtable {
1031
atomicrmw and i32* %a, i32 0 acq_rel, !dbg !7
1034
; CHECK-LABEL: atomic32_and_acq_rel
1035
; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 4), !dbg
1037
define void @atomic32_or_acq_rel(i32* %a) nounwind uwtable {
1039
atomicrmw or i32* %a, i32 0 acq_rel, !dbg !7
1042
; CHECK-LABEL: atomic32_or_acq_rel
1043
; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 4), !dbg
1045
define void @atomic32_xor_acq_rel(i32* %a) nounwind uwtable {
1047
atomicrmw xor i32* %a, i32 0 acq_rel, !dbg !7
1050
; CHECK-LABEL: atomic32_xor_acq_rel
1051
; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 4), !dbg
1053
define void @atomic32_nand_acq_rel(i32* %a) nounwind uwtable {
1055
atomicrmw nand i32* %a, i32 0 acq_rel, !dbg !7
1058
; CHECK-LABEL: atomic32_nand_acq_rel
1059
; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 4), !dbg
1061
define void @atomic32_xchg_seq_cst(i32* %a) nounwind uwtable {
1063
atomicrmw xchg i32* %a, i32 0 seq_cst, !dbg !7
1066
; CHECK-LABEL: atomic32_xchg_seq_cst
1067
; CHECK: call i32 @__tsan_atomic32_exchange(i32* %a, i32 0, i32 5), !dbg
1069
define void @atomic32_add_seq_cst(i32* %a) nounwind uwtable {
1071
atomicrmw add i32* %a, i32 0 seq_cst, !dbg !7
1074
; CHECK-LABEL: atomic32_add_seq_cst
1075
; CHECK: call i32 @__tsan_atomic32_fetch_add(i32* %a, i32 0, i32 5), !dbg
1077
define void @atomic32_sub_seq_cst(i32* %a) nounwind uwtable {
1079
atomicrmw sub i32* %a, i32 0 seq_cst, !dbg !7
1082
; CHECK-LABEL: atomic32_sub_seq_cst
1083
; CHECK: call i32 @__tsan_atomic32_fetch_sub(i32* %a, i32 0, i32 5), !dbg
1085
define void @atomic32_and_seq_cst(i32* %a) nounwind uwtable {
1087
atomicrmw and i32* %a, i32 0 seq_cst, !dbg !7
1090
; CHECK-LABEL: atomic32_and_seq_cst
1091
; CHECK: call i32 @__tsan_atomic32_fetch_and(i32* %a, i32 0, i32 5), !dbg
1093
define void @atomic32_or_seq_cst(i32* %a) nounwind uwtable {
1095
atomicrmw or i32* %a, i32 0 seq_cst, !dbg !7
1098
; CHECK-LABEL: atomic32_or_seq_cst
1099
; CHECK: call i32 @__tsan_atomic32_fetch_or(i32* %a, i32 0, i32 5), !dbg
1101
define void @atomic32_xor_seq_cst(i32* %a) nounwind uwtable {
1103
atomicrmw xor i32* %a, i32 0 seq_cst, !dbg !7
1106
; CHECK-LABEL: atomic32_xor_seq_cst
1107
; CHECK: call i32 @__tsan_atomic32_fetch_xor(i32* %a, i32 0, i32 5), !dbg
1109
define void @atomic32_nand_seq_cst(i32* %a) nounwind uwtable {
1111
atomicrmw nand i32* %a, i32 0 seq_cst, !dbg !7
1114
; CHECK-LABEL: atomic32_nand_seq_cst
1115
; CHECK: call i32 @__tsan_atomic32_fetch_nand(i32* %a, i32 0, i32 5), !dbg
1117
define void @atomic32_cas_monotonic(i32* %a) nounwind uwtable {
1119
cmpxchg i32* %a, i32 0, i32 1 monotonic monotonic, !dbg !7
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
1125
define void @atomic32_cas_acquire(i32* %a) nounwind uwtable {
1127
cmpxchg i32* %a, i32 0, i32 1 acquire acquire, !dbg !7
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
1133
define void @atomic32_cas_release(i32* %a) nounwind uwtable {
1135
cmpxchg i32* %a, i32 0, i32 1 release monotonic, !dbg !7
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
1141
define void @atomic32_cas_acq_rel(i32* %a) nounwind uwtable {
1143
cmpxchg i32* %a, i32 0, i32 1 acq_rel acquire, !dbg !7
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
1149
define void @atomic32_cas_seq_cst(i32* %a) nounwind uwtable {
1151
cmpxchg i32* %a, i32 0, i32 1 seq_cst seq_cst, !dbg !7
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
1157
define i64 @atomic64_load_unordered(i64* %a) nounwind uwtable {
1159
%0 = load atomic i64, i64* %a unordered, align 8, !dbg !7
1162
; CHECK-LABEL: atomic64_load_unordered
1163
; CHECK: call i64 @__tsan_atomic64_load(i64* %a, i32 0), !dbg
1165
define i64 @atomic64_load_monotonic(i64* %a) nounwind uwtable {
1167
%0 = load atomic i64, i64* %a monotonic, align 8, !dbg !7
1170
; CHECK-LABEL: atomic64_load_monotonic
1171
; CHECK: call i64 @__tsan_atomic64_load(i64* %a, i32 0), !dbg
1173
define i64 @atomic64_load_acquire(i64* %a) nounwind uwtable {
1175
%0 = load atomic i64, i64* %a acquire, align 8, !dbg !7
1178
; CHECK-LABEL: atomic64_load_acquire
1179
; CHECK: call i64 @__tsan_atomic64_load(i64* %a, i32 2), !dbg
1181
define i64 @atomic64_load_seq_cst(i64* %a) nounwind uwtable {
1183
%0 = load atomic i64, i64* %a seq_cst, align 8, !dbg !7
1186
; CHECK-LABEL: atomic64_load_seq_cst
1187
; CHECK: call i64 @__tsan_atomic64_load(i64* %a, i32 5), !dbg
1189
define void @atomic64_store_unordered(i64* %a) nounwind uwtable {
1191
store atomic i64 0, i64* %a unordered, align 8, !dbg !7
1194
; CHECK-LABEL: atomic64_store_unordered
1195
; CHECK: call void @__tsan_atomic64_store(i64* %a, i64 0, i32 0), !dbg
1197
define void @atomic64_store_monotonic(i64* %a) nounwind uwtable {
1199
store atomic i64 0, i64* %a monotonic, align 8, !dbg !7
1202
; CHECK-LABEL: atomic64_store_monotonic
1203
; CHECK: call void @__tsan_atomic64_store(i64* %a, i64 0, i32 0), !dbg
1205
define void @atomic64_store_release(i64* %a) nounwind uwtable {
1207
store atomic i64 0, i64* %a release, align 8, !dbg !7
1210
; CHECK-LABEL: atomic64_store_release
1211
; CHECK: call void @__tsan_atomic64_store(i64* %a, i64 0, i32 3), !dbg
1213
define void @atomic64_store_seq_cst(i64* %a) nounwind uwtable {
1215
store atomic i64 0, i64* %a seq_cst, align 8, !dbg !7
1218
; CHECK-LABEL: atomic64_store_seq_cst
1219
; CHECK: call void @__tsan_atomic64_store(i64* %a, i64 0, i32 5), !dbg
1221
define void @atomic64_xchg_monotonic(i64* %a) nounwind uwtable {
1223
atomicrmw xchg i64* %a, i64 0 monotonic, !dbg !7
1226
; CHECK-LABEL: atomic64_xchg_monotonic
1227
; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 0), !dbg
1229
define void @atomic64_add_monotonic(i64* %a) nounwind uwtable {
1231
atomicrmw add i64* %a, i64 0 monotonic, !dbg !7
1234
; CHECK-LABEL: atomic64_add_monotonic
1235
; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 0), !dbg
1237
define void @atomic64_sub_monotonic(i64* %a) nounwind uwtable {
1239
atomicrmw sub i64* %a, i64 0 monotonic, !dbg !7
1242
; CHECK-LABEL: atomic64_sub_monotonic
1243
; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 0), !dbg
1245
define void @atomic64_and_monotonic(i64* %a) nounwind uwtable {
1247
atomicrmw and i64* %a, i64 0 monotonic, !dbg !7
1250
; CHECK-LABEL: atomic64_and_monotonic
1251
; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 0), !dbg
1253
define void @atomic64_or_monotonic(i64* %a) nounwind uwtable {
1255
atomicrmw or i64* %a, i64 0 monotonic, !dbg !7
1258
; CHECK-LABEL: atomic64_or_monotonic
1259
; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 0), !dbg
1261
define void @atomic64_xor_monotonic(i64* %a) nounwind uwtable {
1263
atomicrmw xor i64* %a, i64 0 monotonic, !dbg !7
1266
; CHECK-LABEL: atomic64_xor_monotonic
1267
; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 0), !dbg
1269
define void @atomic64_nand_monotonic(i64* %a) nounwind uwtable {
1271
atomicrmw nand i64* %a, i64 0 monotonic, !dbg !7
1274
; CHECK-LABEL: atomic64_nand_monotonic
1275
; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 0), !dbg
1277
define void @atomic64_xchg_acquire(i64* %a) nounwind uwtable {
1279
atomicrmw xchg i64* %a, i64 0 acquire, !dbg !7
1282
; CHECK-LABEL: atomic64_xchg_acquire
1283
; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 2), !dbg
1285
define void @atomic64_add_acquire(i64* %a) nounwind uwtable {
1287
atomicrmw add i64* %a, i64 0 acquire, !dbg !7
1290
; CHECK-LABEL: atomic64_add_acquire
1291
; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 2), !dbg
1293
define void @atomic64_sub_acquire(i64* %a) nounwind uwtable {
1295
atomicrmw sub i64* %a, i64 0 acquire, !dbg !7
1298
; CHECK-LABEL: atomic64_sub_acquire
1299
; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 2), !dbg
1301
define void @atomic64_and_acquire(i64* %a) nounwind uwtable {
1303
atomicrmw and i64* %a, i64 0 acquire, !dbg !7
1306
; CHECK-LABEL: atomic64_and_acquire
1307
; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 2), !dbg
1309
define void @atomic64_or_acquire(i64* %a) nounwind uwtable {
1311
atomicrmw or i64* %a, i64 0 acquire, !dbg !7
1314
; CHECK-LABEL: atomic64_or_acquire
1315
; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 2), !dbg
1317
define void @atomic64_xor_acquire(i64* %a) nounwind uwtable {
1319
atomicrmw xor i64* %a, i64 0 acquire, !dbg !7
1322
; CHECK-LABEL: atomic64_xor_acquire
1323
; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 2), !dbg
1325
define void @atomic64_nand_acquire(i64* %a) nounwind uwtable {
1327
atomicrmw nand i64* %a, i64 0 acquire, !dbg !7
1330
; CHECK-LABEL: atomic64_nand_acquire
1331
; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 2), !dbg
1333
define void @atomic64_xchg_release(i64* %a) nounwind uwtable {
1335
atomicrmw xchg i64* %a, i64 0 release, !dbg !7
1338
; CHECK-LABEL: atomic64_xchg_release
1339
; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 3), !dbg
1341
define void @atomic64_add_release(i64* %a) nounwind uwtable {
1343
atomicrmw add i64* %a, i64 0 release, !dbg !7
1346
; CHECK-LABEL: atomic64_add_release
1347
; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 3), !dbg
1349
define void @atomic64_sub_release(i64* %a) nounwind uwtable {
1351
atomicrmw sub i64* %a, i64 0 release, !dbg !7
1354
; CHECK-LABEL: atomic64_sub_release
1355
; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 3), !dbg
1357
define void @atomic64_and_release(i64* %a) nounwind uwtable {
1359
atomicrmw and i64* %a, i64 0 release, !dbg !7
1362
; CHECK-LABEL: atomic64_and_release
1363
; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 3), !dbg
1365
define void @atomic64_or_release(i64* %a) nounwind uwtable {
1367
atomicrmw or i64* %a, i64 0 release, !dbg !7
1370
; CHECK-LABEL: atomic64_or_release
1371
; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 3), !dbg
1373
define void @atomic64_xor_release(i64* %a) nounwind uwtable {
1375
atomicrmw xor i64* %a, i64 0 release, !dbg !7
1378
; CHECK-LABEL: atomic64_xor_release
1379
; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 3), !dbg
1381
define void @atomic64_nand_release(i64* %a) nounwind uwtable {
1383
atomicrmw nand i64* %a, i64 0 release, !dbg !7
1386
; CHECK-LABEL: atomic64_nand_release
1387
; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 3), !dbg
1389
define void @atomic64_xchg_acq_rel(i64* %a) nounwind uwtable {
1391
atomicrmw xchg i64* %a, i64 0 acq_rel, !dbg !7
1394
; CHECK-LABEL: atomic64_xchg_acq_rel
1395
; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 4), !dbg
1397
define void @atomic64_add_acq_rel(i64* %a) nounwind uwtable {
1399
atomicrmw add i64* %a, i64 0 acq_rel, !dbg !7
1402
; CHECK-LABEL: atomic64_add_acq_rel
1403
; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 4), !dbg
1405
define void @atomic64_sub_acq_rel(i64* %a) nounwind uwtable {
1407
atomicrmw sub i64* %a, i64 0 acq_rel, !dbg !7
1410
; CHECK-LABEL: atomic64_sub_acq_rel
1411
; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 4), !dbg
1413
define void @atomic64_and_acq_rel(i64* %a) nounwind uwtable {
1415
atomicrmw and i64* %a, i64 0 acq_rel, !dbg !7
1418
; CHECK-LABEL: atomic64_and_acq_rel
1419
; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 4), !dbg
1421
define void @atomic64_or_acq_rel(i64* %a) nounwind uwtable {
1423
atomicrmw or i64* %a, i64 0 acq_rel, !dbg !7
1426
; CHECK-LABEL: atomic64_or_acq_rel
1427
; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 4), !dbg
1429
define void @atomic64_xor_acq_rel(i64* %a) nounwind uwtable {
1431
atomicrmw xor i64* %a, i64 0 acq_rel, !dbg !7
1434
; CHECK-LABEL: atomic64_xor_acq_rel
1435
; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 4), !dbg
1437
define void @atomic64_nand_acq_rel(i64* %a) nounwind uwtable {
1439
atomicrmw nand i64* %a, i64 0 acq_rel, !dbg !7
1442
; CHECK-LABEL: atomic64_nand_acq_rel
1443
; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 4), !dbg
1445
define void @atomic64_xchg_seq_cst(i64* %a) nounwind uwtable {
1447
atomicrmw xchg i64* %a, i64 0 seq_cst, !dbg !7
1450
; CHECK-LABEL: atomic64_xchg_seq_cst
1451
; CHECK: call i64 @__tsan_atomic64_exchange(i64* %a, i64 0, i32 5), !dbg
1453
define void @atomic64_add_seq_cst(i64* %a) nounwind uwtable {
1455
atomicrmw add i64* %a, i64 0 seq_cst, !dbg !7
1458
; CHECK-LABEL: atomic64_add_seq_cst
1459
; CHECK: call i64 @__tsan_atomic64_fetch_add(i64* %a, i64 0, i32 5), !dbg
1461
define void @atomic64_sub_seq_cst(i64* %a) nounwind uwtable {
1463
atomicrmw sub i64* %a, i64 0 seq_cst, !dbg !7
1466
; CHECK-LABEL: atomic64_sub_seq_cst
1467
; CHECK: call i64 @__tsan_atomic64_fetch_sub(i64* %a, i64 0, i32 5), !dbg
1469
define void @atomic64_and_seq_cst(i64* %a) nounwind uwtable {
1471
atomicrmw and i64* %a, i64 0 seq_cst, !dbg !7
1474
; CHECK-LABEL: atomic64_and_seq_cst
1475
; CHECK: call i64 @__tsan_atomic64_fetch_and(i64* %a, i64 0, i32 5), !dbg
1477
define void @atomic64_or_seq_cst(i64* %a) nounwind uwtable {
1479
atomicrmw or i64* %a, i64 0 seq_cst, !dbg !7
1482
; CHECK-LABEL: atomic64_or_seq_cst
1483
; CHECK: call i64 @__tsan_atomic64_fetch_or(i64* %a, i64 0, i32 5), !dbg
1485
define void @atomic64_xor_seq_cst(i64* %a) nounwind uwtable {
1487
atomicrmw xor i64* %a, i64 0 seq_cst, !dbg !7
1490
; CHECK-LABEL: atomic64_xor_seq_cst
1491
; CHECK: call i64 @__tsan_atomic64_fetch_xor(i64* %a, i64 0, i32 5), !dbg
1493
define void @atomic64_nand_seq_cst(i64* %a) nounwind uwtable {
1495
atomicrmw nand i64* %a, i64 0 seq_cst, !dbg !7
1498
; CHECK-LABEL: atomic64_nand_seq_cst
1499
; CHECK: call i64 @__tsan_atomic64_fetch_nand(i64* %a, i64 0, i32 5), !dbg
1501
define void @atomic64_cas_monotonic(i64* %a) nounwind uwtable {
1503
cmpxchg i64* %a, i64 0, i64 1 monotonic monotonic, !dbg !7
1506
; CHECK-LABEL: atomic64_cas_monotonic
1507
; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 0, i32 0), !dbg
1509
define void @atomic64_cas_acquire(i64* %a) nounwind uwtable {
1511
cmpxchg i64* %a, i64 0, i64 1 acquire acquire, !dbg !7
1514
; CHECK-LABEL: atomic64_cas_acquire
1515
; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 2, i32 2), !dbg
1517
define void @atomic64_cas_release(i64* %a) nounwind uwtable {
1519
cmpxchg i64* %a, i64 0, i64 1 release monotonic, !dbg !7
1522
; CHECK-LABEL: atomic64_cas_release
1523
; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 3, i32 0), !dbg
1525
define void @atomic64_cas_acq_rel(i64* %a) nounwind uwtable {
1527
cmpxchg i64* %a, i64 0, i64 1 acq_rel acquire, !dbg !7
1530
; CHECK-LABEL: atomic64_cas_acq_rel
1531
; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 4, i32 2), !dbg
1533
define void @atomic64_cas_seq_cst(i64* %a) nounwind uwtable {
1535
cmpxchg i64* %a, i64 0, i64 1 seq_cst seq_cst, !dbg !7
1538
; CHECK-LABEL: atomic64_cas_seq_cst
1539
; CHECK: call i64 @__tsan_atomic64_compare_exchange_val(i64* %a, i64 0, i64 1, i32 5, i32 5), !dbg
1541
define i128 @atomic128_load_unordered(i128* %a) nounwind uwtable {
1543
%0 = load atomic i128, i128* %a unordered, align 16, !dbg !7
1544
ret i128 %0, !dbg !7
1546
; CHECK-LABEL: atomic128_load_unordered
1547
; CHECK: call i128 @__tsan_atomic128_load(i128* %a, i32 0), !dbg
1549
define i128 @atomic128_load_monotonic(i128* %a) nounwind uwtable {
1551
%0 = load atomic i128, i128* %a monotonic, align 16, !dbg !7
1552
ret i128 %0, !dbg !7
1554
; CHECK-LABEL: atomic128_load_monotonic
1555
; CHECK: call i128 @__tsan_atomic128_load(i128* %a, i32 0), !dbg
1557
define i128 @atomic128_load_acquire(i128* %a) nounwind uwtable {
1559
%0 = load atomic i128, i128* %a acquire, align 16, !dbg !7
1560
ret i128 %0, !dbg !7
1562
; CHECK-LABEL: atomic128_load_acquire
1563
; CHECK: call i128 @__tsan_atomic128_load(i128* %a, i32 2), !dbg
1565
define i128 @atomic128_load_seq_cst(i128* %a) nounwind uwtable {
1567
%0 = load atomic i128, i128* %a seq_cst, align 16, !dbg !7
1568
ret i128 %0, !dbg !7
1570
; CHECK-LABEL: atomic128_load_seq_cst
1571
; CHECK: call i128 @__tsan_atomic128_load(i128* %a, i32 5), !dbg
1573
define void @atomic128_store_unordered(i128* %a) nounwind uwtable {
1575
store atomic i128 0, i128* %a unordered, align 16, !dbg !7
1578
; CHECK-LABEL: atomic128_store_unordered
1579
; CHECK: call void @__tsan_atomic128_store(i128* %a, i128 0, i32 0), !dbg
1581
define void @atomic128_store_monotonic(i128* %a) nounwind uwtable {
1583
store atomic i128 0, i128* %a monotonic, align 16, !dbg !7
1586
; CHECK-LABEL: atomic128_store_monotonic
1587
; CHECK: call void @__tsan_atomic128_store(i128* %a, i128 0, i32 0), !dbg
1589
define void @atomic128_store_release(i128* %a) nounwind uwtable {
1591
store atomic i128 0, i128* %a release, align 16, !dbg !7
1594
; CHECK-LABEL: atomic128_store_release
1595
; CHECK: call void @__tsan_atomic128_store(i128* %a, i128 0, i32 3), !dbg
1597
define void @atomic128_store_seq_cst(i128* %a) nounwind uwtable {
1599
store atomic i128 0, i128* %a seq_cst, align 16, !dbg !7
1602
; CHECK-LABEL: atomic128_store_seq_cst
1603
; CHECK: call void @__tsan_atomic128_store(i128* %a, i128 0, i32 5), !dbg
1605
define void @atomic128_xchg_monotonic(i128* %a) nounwind uwtable {
1607
atomicrmw xchg i128* %a, i128 0 monotonic, !dbg !7
1610
; CHECK-LABEL: atomic128_xchg_monotonic
1611
; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 0), !dbg
1613
define void @atomic128_add_monotonic(i128* %a) nounwind uwtable {
1615
atomicrmw add i128* %a, i128 0 monotonic, !dbg !7
1618
; CHECK-LABEL: atomic128_add_monotonic
1619
; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 0), !dbg
1621
define void @atomic128_sub_monotonic(i128* %a) nounwind uwtable {
1623
atomicrmw sub i128* %a, i128 0 monotonic, !dbg !7
1626
; CHECK-LABEL: atomic128_sub_monotonic
1627
; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 0), !dbg
1629
define void @atomic128_and_monotonic(i128* %a) nounwind uwtable {
1631
atomicrmw and i128* %a, i128 0 monotonic, !dbg !7
1634
; CHECK-LABEL: atomic128_and_monotonic
1635
; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 0), !dbg
1637
define void @atomic128_or_monotonic(i128* %a) nounwind uwtable {
1639
atomicrmw or i128* %a, i128 0 monotonic, !dbg !7
1642
; CHECK-LABEL: atomic128_or_monotonic
1643
; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 0), !dbg
1645
define void @atomic128_xor_monotonic(i128* %a) nounwind uwtable {
1647
atomicrmw xor i128* %a, i128 0 monotonic, !dbg !7
1650
; CHECK-LABEL: atomic128_xor_monotonic
1651
; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 0), !dbg
1653
define void @atomic128_nand_monotonic(i128* %a) nounwind uwtable {
1655
atomicrmw nand i128* %a, i128 0 monotonic, !dbg !7
1658
; CHECK-LABEL: atomic128_nand_monotonic
1659
; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 0), !dbg
1661
define void @atomic128_xchg_acquire(i128* %a) nounwind uwtable {
1663
atomicrmw xchg i128* %a, i128 0 acquire, !dbg !7
1666
; CHECK-LABEL: atomic128_xchg_acquire
1667
; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 2), !dbg
1669
define void @atomic128_add_acquire(i128* %a) nounwind uwtable {
1671
atomicrmw add i128* %a, i128 0 acquire, !dbg !7
1674
; CHECK-LABEL: atomic128_add_acquire
1675
; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 2), !dbg
1677
define void @atomic128_sub_acquire(i128* %a) nounwind uwtable {
1679
atomicrmw sub i128* %a, i128 0 acquire, !dbg !7
1682
; CHECK-LABEL: atomic128_sub_acquire
1683
; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 2), !dbg
1685
define void @atomic128_and_acquire(i128* %a) nounwind uwtable {
1687
atomicrmw and i128* %a, i128 0 acquire, !dbg !7
1690
; CHECK-LABEL: atomic128_and_acquire
1691
; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 2), !dbg
1693
define void @atomic128_or_acquire(i128* %a) nounwind uwtable {
1695
atomicrmw or i128* %a, i128 0 acquire, !dbg !7
1698
; CHECK-LABEL: atomic128_or_acquire
1699
; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 2), !dbg
1701
define void @atomic128_xor_acquire(i128* %a) nounwind uwtable {
1703
atomicrmw xor i128* %a, i128 0 acquire, !dbg !7
1706
; CHECK-LABEL: atomic128_xor_acquire
1707
; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 2), !dbg
1709
define void @atomic128_nand_acquire(i128* %a) nounwind uwtable {
1711
atomicrmw nand i128* %a, i128 0 acquire, !dbg !7
1714
; CHECK-LABEL: atomic128_nand_acquire
1715
; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 2), !dbg
1717
define void @atomic128_xchg_release(i128* %a) nounwind uwtable {
1719
atomicrmw xchg i128* %a, i128 0 release, !dbg !7
1722
; CHECK-LABEL: atomic128_xchg_release
1723
; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 3), !dbg
1725
define void @atomic128_add_release(i128* %a) nounwind uwtable {
1727
atomicrmw add i128* %a, i128 0 release, !dbg !7
1730
; CHECK-LABEL: atomic128_add_release
1731
; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 3), !dbg
1733
define void @atomic128_sub_release(i128* %a) nounwind uwtable {
1735
atomicrmw sub i128* %a, i128 0 release, !dbg !7
1738
; CHECK-LABEL: atomic128_sub_release
1739
; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 3), !dbg
1741
define void @atomic128_and_release(i128* %a) nounwind uwtable {
1743
atomicrmw and i128* %a, i128 0 release, !dbg !7
1746
; CHECK-LABEL: atomic128_and_release
1747
; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 3), !dbg
1749
define void @atomic128_or_release(i128* %a) nounwind uwtable {
1751
atomicrmw or i128* %a, i128 0 release, !dbg !7
1754
; CHECK-LABEL: atomic128_or_release
1755
; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 3), !dbg
1757
define void @atomic128_xor_release(i128* %a) nounwind uwtable {
1759
atomicrmw xor i128* %a, i128 0 release, !dbg !7
1762
; CHECK-LABEL: atomic128_xor_release
1763
; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 3), !dbg
1765
define void @atomic128_nand_release(i128* %a) nounwind uwtable {
1767
atomicrmw nand i128* %a, i128 0 release, !dbg !7
1770
; CHECK-LABEL: atomic128_nand_release
1771
; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 3), !dbg
1773
define void @atomic128_xchg_acq_rel(i128* %a) nounwind uwtable {
1775
atomicrmw xchg i128* %a, i128 0 acq_rel, !dbg !7
1778
; CHECK-LABEL: atomic128_xchg_acq_rel
1779
; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 4), !dbg
1781
define void @atomic128_add_acq_rel(i128* %a) nounwind uwtable {
1783
atomicrmw add i128* %a, i128 0 acq_rel, !dbg !7
1786
; CHECK-LABEL: atomic128_add_acq_rel
1787
; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 4), !dbg
1789
define void @atomic128_sub_acq_rel(i128* %a) nounwind uwtable {
1791
atomicrmw sub i128* %a, i128 0 acq_rel, !dbg !7
1794
; CHECK-LABEL: atomic128_sub_acq_rel
1795
; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 4), !dbg
1797
define void @atomic128_and_acq_rel(i128* %a) nounwind uwtable {
1799
atomicrmw and i128* %a, i128 0 acq_rel, !dbg !7
1802
; CHECK-LABEL: atomic128_and_acq_rel
1803
; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 4), !dbg
1805
define void @atomic128_or_acq_rel(i128* %a) nounwind uwtable {
1807
atomicrmw or i128* %a, i128 0 acq_rel, !dbg !7
1810
; CHECK-LABEL: atomic128_or_acq_rel
1811
; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 4), !dbg
1813
define void @atomic128_xor_acq_rel(i128* %a) nounwind uwtable {
1815
atomicrmw xor i128* %a, i128 0 acq_rel, !dbg !7
1818
; CHECK-LABEL: atomic128_xor_acq_rel
1819
; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 4), !dbg
1821
define void @atomic128_nand_acq_rel(i128* %a) nounwind uwtable {
1823
atomicrmw nand i128* %a, i128 0 acq_rel, !dbg !7
1826
; CHECK-LABEL: atomic128_nand_acq_rel
1827
; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 4), !dbg
1829
define void @atomic128_xchg_seq_cst(i128* %a) nounwind uwtable {
1831
atomicrmw xchg i128* %a, i128 0 seq_cst, !dbg !7
1834
; CHECK-LABEL: atomic128_xchg_seq_cst
1835
; CHECK: call i128 @__tsan_atomic128_exchange(i128* %a, i128 0, i32 5), !dbg
1837
define void @atomic128_add_seq_cst(i128* %a) nounwind uwtable {
1839
atomicrmw add i128* %a, i128 0 seq_cst, !dbg !7
1842
; CHECK-LABEL: atomic128_add_seq_cst
1843
; CHECK: call i128 @__tsan_atomic128_fetch_add(i128* %a, i128 0, i32 5), !dbg
1845
define void @atomic128_sub_seq_cst(i128* %a) nounwind uwtable {
1847
atomicrmw sub i128* %a, i128 0 seq_cst, !dbg !7
1850
; CHECK-LABEL: atomic128_sub_seq_cst
1851
; CHECK: call i128 @__tsan_atomic128_fetch_sub(i128* %a, i128 0, i32 5), !dbg
1853
define void @atomic128_and_seq_cst(i128* %a) nounwind uwtable {
1855
atomicrmw and i128* %a, i128 0 seq_cst, !dbg !7
1858
; CHECK-LABEL: atomic128_and_seq_cst
1859
; CHECK: call i128 @__tsan_atomic128_fetch_and(i128* %a, i128 0, i32 5), !dbg
1861
define void @atomic128_or_seq_cst(i128* %a) nounwind uwtable {
1863
atomicrmw or i128* %a, i128 0 seq_cst, !dbg !7
1866
; CHECK-LABEL: atomic128_or_seq_cst
1867
; CHECK: call i128 @__tsan_atomic128_fetch_or(i128* %a, i128 0, i32 5), !dbg
1869
define void @atomic128_xor_seq_cst(i128* %a) nounwind uwtable {
1871
atomicrmw xor i128* %a, i128 0 seq_cst, !dbg !7
1874
; CHECK-LABEL: atomic128_xor_seq_cst
1875
; CHECK: call i128 @__tsan_atomic128_fetch_xor(i128* %a, i128 0, i32 5), !dbg
1877
define void @atomic128_nand_seq_cst(i128* %a) nounwind uwtable {
1879
atomicrmw nand i128* %a, i128 0 seq_cst, !dbg !7
1882
; CHECK-LABEL: atomic128_nand_seq_cst
1883
; CHECK: call i128 @__tsan_atomic128_fetch_nand(i128* %a, i128 0, i32 5), !dbg
1885
define void @atomic128_cas_monotonic(i128* %a) nounwind uwtable {
1887
cmpxchg i128* %a, i128 0, i128 1 monotonic monotonic, !dbg !7
1890
; CHECK-LABEL: atomic128_cas_monotonic
1891
; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 0, i32 0), !dbg
1893
define void @atomic128_cas_acquire(i128* %a) nounwind uwtable {
1895
cmpxchg i128* %a, i128 0, i128 1 acquire acquire, !dbg !7
1898
; CHECK-LABEL: atomic128_cas_acquire
1899
; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 2, i32 2), !dbg
1901
define void @atomic128_cas_release(i128* %a) nounwind uwtable {
1903
cmpxchg i128* %a, i128 0, i128 1 release monotonic, !dbg !7
1906
; CHECK-LABEL: atomic128_cas_release
1907
; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 3, i32 0), !dbg
1909
define void @atomic128_cas_acq_rel(i128* %a) nounwind uwtable {
1911
cmpxchg i128* %a, i128 0, i128 1 acq_rel acquire, !dbg !7
1914
; CHECK-LABEL: atomic128_cas_acq_rel
1915
; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 4, i32 2), !dbg
1917
define void @atomic128_cas_seq_cst(i128* %a) nounwind uwtable {
1919
cmpxchg i128* %a, i128 0, i128 1 seq_cst seq_cst, !dbg !7
1922
; CHECK-LABEL: atomic128_cas_seq_cst
1923
; CHECK: call i128 @__tsan_atomic128_compare_exchange_val(i128* %a, i128 0, i128 1, i32 5, i32 5), !dbg
1925
define void @atomic_signal_fence_acquire() nounwind uwtable {
1927
fence singlethread acquire, !dbg !7
1930
; CHECK-LABEL: atomic_signal_fence_acquire
1931
; CHECK: call void @__tsan_atomic_signal_fence(i32 2), !dbg
1933
define void @atomic_thread_fence_acquire() nounwind uwtable {
1935
fence acquire, !dbg !7
1938
; CHECK-LABEL: atomic_thread_fence_acquire
1939
; CHECK: call void @__tsan_atomic_thread_fence(i32 2), !dbg
1941
define void @atomic_signal_fence_release() nounwind uwtable {
1943
fence singlethread release, !dbg !7
1946
; CHECK-LABEL: atomic_signal_fence_release
1947
; CHECK: call void @__tsan_atomic_signal_fence(i32 3), !dbg
1949
define void @atomic_thread_fence_release() nounwind uwtable {
1951
fence release, !dbg !7
1954
; CHECK-LABEL: atomic_thread_fence_release
1955
; CHECK: call void @__tsan_atomic_thread_fence(i32 3), !dbg
1957
define void @atomic_signal_fence_acq_rel() nounwind uwtable {
1959
fence singlethread acq_rel, !dbg !7
1962
; CHECK-LABEL: atomic_signal_fence_acq_rel
1963
; CHECK: call void @__tsan_atomic_signal_fence(i32 4), !dbg
1965
define void @atomic_thread_fence_acq_rel() nounwind uwtable {
1967
fence acq_rel, !dbg !7
1970
; CHECK-LABEL: atomic_thread_fence_acq_rel
1971
; CHECK: call void @__tsan_atomic_thread_fence(i32 4), !dbg
1973
define void @atomic_signal_fence_seq_cst() nounwind uwtable {
1975
fence singlethread seq_cst, !dbg !7
1978
; CHECK-LABEL: atomic_signal_fence_seq_cst
1979
; CHECK: call void @__tsan_atomic_signal_fence(i32 5), !dbg
1981
define void @atomic_thread_fence_seq_cst() nounwind uwtable {
1983
fence seq_cst, !dbg !7
1986
; CHECK-LABEL: atomic_thread_fence_seq_cst
1987
; CHECK: call void @__tsan_atomic_thread_fence(i32 5), !dbg
1989
!llvm.module.flags = !{!0, !1, !2}
1990
!0 = !{i32 2, !"Dwarf Version", i32 4}
1991
!1 = !{i32 2, !"Debug Info Version", i32 3}
1992
!2 = !{i32 1, !"PIC Level", i32 2}
1995
!4 = !DISubroutineType(types: !3)
1996
!5 = !DIFile(filename: "atomic.cpp", directory: "/tmp")
1997
!6 = !DISubprogram(name: "test", scope: !5, file: !5, line: 99, type: !4, isLocal: false, isDefinition: true, scopeLine: 100, flags: DIFlagPrototyped, isOptimized: false, variables: !3)
1998
!7 = !DILocation(line: 100, column: 1, scope: !6)