summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/atomic-ops.c
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-06-03 00:26:35 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-06-03 00:26:35 +0000
commitc6eb650120b879e6fa64a6507b2a03365304d9f1 (patch)
treeb28ba018e53df6dd9ec0a74a847ac9a90eb00b61 /clang/test/CodeGen/atomic-ops.c
parent8e42190d2038d129f9ebec8e83a5380cf0fcff30 (diff)
downloadbcm5719-llvm-c6eb650120b879e6fa64a6507b2a03365304d9f1.tar.gz
bcm5719-llvm-c6eb650120b879e6fa64a6507b2a03365304d9f1.zip
[Sema] Make the atomic builtins more efficient by reducing volatility
The parameter types and return type do not need to be volatile just because the pointer type's pointee type is volatile qualified. This is an unnecessary pessimization. llvm-svn: 238892
Diffstat (limited to 'clang/test/CodeGen/atomic-ops.c')
-rw-r--r--clang/test/CodeGen/atomic-ops.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/test/CodeGen/atomic-ops.c b/clang/test/CodeGen/atomic-ops.c
index 733c60eb859..13ab5f117f9 100644
--- a/clang/test/CodeGen/atomic-ops.c
+++ b/clang/test/CodeGen/atomic-ops.c
@@ -105,6 +105,14 @@ int fi3e(atomic_int *i) {
return atomic_fetch_or(i, 1);
}
+int fi3f(int *i) {
+ // CHECK-LABEL: @fi3f
+ // CHECK-NOT: store volatile
+ // CHECK: atomicrmw or
+ // CHECK-NOT: {{ or }}
+ return __atomic_fetch_or(i, (short)1, memory_order_seq_cst);
+}
+
_Bool fi4(_Atomic(int) *i) {
// CHECK-LABEL: @fi4(
// CHECK: [[PAIR:%[.0-9A-Z_a-z]+]] = cmpxchg i32* [[PTR:%[.0-9A-Z_a-z]+]], i32 [[EXPECTED:%[.0-9A-Z_a-z]+]], i32 [[DESIRED:%[.0-9A-Z_a-z]+]]
OpenPOWER on IntegriCloud