blob: 0af1d387192d2f403223c5981900605d014bf603 [file] [log] [blame]
James Y Knight57fc89f2015-08-07 22:52:34 +00001// XFAIL: hexagon,sparc
2// (due to not having native load atomic support)
David Chisnallfa35df62012-01-16 17:27:18 +00003// RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck %s
Daniel Sanders933f0a02015-02-18 15:08:37 +00004// RUN: %clang_cc1 -triple mips-linux-gnu -emit-llvm %s -o - | FileCheck %s
David Chisnallfa35df62012-01-16 17:27:18 +00005
Eli Friedman93ee5ca2012-06-16 02:19:17 +00006void foo(int x)
David Chisnallfa35df62012-01-16 17:27:18 +00007{
8 _Atomic(int) i = 0;
Eli Friedman93ee5ca2012-06-16 02:19:17 +00009 _Atomic(short) j = 0;
David Chisnallfa35df62012-01-16 17:27:18 +000010 // Check that multiply / divides on atomics produce a cmpxchg loop
Eli Friedman93ee5ca2012-06-16 02:19:17 +000011 i *= 2;
12 // CHECK: mul nsw i32
Alexey Bataeva47ae902014-12-15 06:12:42 +000013 // CHECK: {{(cmpxchg i32*|i1 @__atomic_compare_exchange\(i32 4,)}}
Eli Friedman93ee5ca2012-06-16 02:19:17 +000014 i /= 2;
15 // CHECK: sdiv i32
Alexey Bataeva47ae902014-12-15 06:12:42 +000016 // CHECK: {{(cmpxchg i32*|i1 @__atomic_compare_exchange\(i32 4, )}}
Eli Friedman93ee5ca2012-06-16 02:19:17 +000017 j /= x;
18 // CHECK: sdiv i32
Alexey Bataeva47ae902014-12-15 06:12:42 +000019 // CHECK: {{(cmpxchg i16*|i1 @__atomic_compare_exchange\(i32 2, )}}
Eli Friedman93ee5ca2012-06-16 02:19:17 +000020
David Chisnallfa35df62012-01-16 17:27:18 +000021}
David Majnemer6866a3c2015-02-14 01:35:07 +000022
23extern _Atomic _Bool b;
24
25_Bool bar() {
26// CHECK-LABEL: @bar
David Blaikiea953f282015-02-27 21:19:58 +000027// CHECK: %[[load:.*]] = load atomic i8, i8* @b seq_cst
David Majnemer6866a3c2015-02-14 01:35:07 +000028// CHECK: %[[tobool:.*]] = trunc i8 %[[load]] to i1
29// CHECK: ret i1 %[[tobool]]
30 return b;
31}
David Majnemerce27e422015-02-14 01:48:17 +000032
33extern _Atomic(_Complex int) x;
34
35void baz(int y) {
36// CHECK-LABEL: @baz
Daniel Sanders933f0a02015-02-18 15:08:37 +000037// CHECK: {{store atomic|call void @__atomic_store}}
David Majnemerce27e422015-02-14 01:48:17 +000038 x += y;
39}