aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGen/atomic.c
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-05-08 06:58:22 +0000
committerChris Lattner <sabre@nondot.org>2009-05-08 06:58:22 +0000
commit5caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534 (patch)
tree325c140baaa5ecb1abc5f7d3a8353040d468253e /test/CodeGen/atomic.c
parentfb1e3310da7e3886c8057a5f009d2cdf30d8804f (diff)
reimplement __sync_* builtins to be variadic and to follow the same
semantic rules that gcc and icc use. This implements the variadic and concrete versions as builtins and has sema do the disambiguation. There are probably a bunch of details to finish up but this seems like a large monotonic step forward :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71212 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/atomic.c')
-rw-r--r--test/CodeGen/atomic.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/test/CodeGen/atomic.c b/test/CodeGen/atomic.c
index d1b3cbb0d4..c224cbdeba 100644
--- a/test/CodeGen/atomic.c
+++ b/test/CodeGen/atomic.c
@@ -1,15 +1,15 @@
// RUN: clang-cc %s -emit-llvm -o - > %t1 &&
// RUN: grep @llvm.atomic.load.add.i32 %t1 | count 3 &&
-// RUN: grep @llvm.atomic.load.sub.i32 %t1 | count 3 &&
+// RUN: grep @llvm.atomic.load.sub.i8 %t1 | count 2 &&
// RUN: grep @llvm.atomic.load.min.i32 %t1 &&
// RUN: grep @llvm.atomic.load.max.i32 %t1 &&
// RUN: grep @llvm.atomic.load.umin.i32 %t1 &&
// RUN: grep @llvm.atomic.load.umax.i32 %t1 &&
// RUN: grep @llvm.atomic.swap.i32 %t1 &&
// RUN: grep @llvm.atomic.cmp.swap.i32 %t1 | count 3 &&
-// RUN: grep @llvm.atomic.load.and.i32 %t1 | count 3 &&
-// RUN: grep @llvm.atomic.load.or.i32 %t1 | count 3 &&
-// RUN: grep @llvm.atomic.load.xor.i32 %t1 | count 3
+// RUN: grep @llvm.atomic.load.and.i32 %t1 | count 2 &&
+// RUN: grep @llvm.atomic.load.or.i8 %t1 &&
+// RUN: grep @llvm.atomic.load.xor.i8 %t1
int atomic(void)
@@ -17,11 +17,12 @@ int atomic(void)
// nonsenical test for sync functions
int old;
int val = 1;
+ char valc = 1;
unsigned int uval = 1;
int cmp = 0;
old = __sync_fetch_and_add(&val, 1);
- old = __sync_fetch_and_sub(&val, 2);
+ old = __sync_fetch_and_sub(&valc, 2);
old = __sync_fetch_and_min(&val, 3);
old = __sync_fetch_and_max(&val, 4);
old = __sync_fetch_and_umin(&uval, 5u);
@@ -35,9 +36,9 @@ int atomic(void)
old = __sync_add_and_fetch(&val, 1);
old = __sync_sub_and_fetch(&val, 2);
- old = __sync_and_and_fetch(&val, 3);
- old = __sync_or_and_fetch(&val, 4);
- old = __sync_xor_and_fetch(&val, 5);
+ old = __sync_and_and_fetch(&valc, 3);
+ old = __sync_or_and_fetch(&valc, 4);
+ old = __sync_xor_and_fetch(&valc, 5);
return old;
}