1; RUN: llc < %s -march=ppc64 | grep ldarx  | count 3
2; RUN: llc < %s -march=ppc64 | grep stdcx. | count 4
3
4define i64 @exchange_and_add(i64* %mem, i64 %val) nounwind {
5  %tmp = call i64 @llvm.atomic.load.add.i64.p0i64(i64* %mem, i64 %val)
6  ret i64 %tmp
7}
8
9define i64 @exchange_and_cmp(i64* %mem) nounwind {
10  %tmp = call i64 @llvm.atomic.cmp.swap.i64.p0i64(i64* %mem, i64 0, i64 1)
11  ret i64 %tmp
12}
13
14define i64 @exchange(i64* %mem, i64 %val) nounwind {
15  %tmp = call i64 @llvm.atomic.swap.i64.p0i64(i64* %mem, i64 1)
16  ret i64 %tmp
17}
18
19declare i64 @llvm.atomic.load.add.i64.p0i64(i64* nocapture, i64) nounwind
20
21declare i64 @llvm.atomic.cmp.swap.i64.p0i64(i64* nocapture, i64, i64) nounwind
22
23declare i64 @llvm.atomic.swap.i64.p0i64(i64* nocapture, i64) nounwind
24