1c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// RUN: %clang_cc1 %s -emit-llvm -o - -triple=thumbv7-none--eabi | FileCheck %s
2c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// RUN: %clang_cc1 %s -emit-llvm -o - -triple=armv6-none--eabi | FileCheck %s
3c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// RUN: %clang_cc1 %s -emit-llvm -o - -triple=armv7-unknown-openbsd | FileCheck %s
4c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines
5c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesint i;
6c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hineslong long l;
7c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines
8c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestypedef enum memory_order {
9c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  memory_order_relaxed, memory_order_consume, memory_order_acquire,
10c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  memory_order_release, memory_order_acq_rel, memory_order_seq_cst
11c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} memory_order;
12c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines
13c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid test_presence(void)
14c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines{
15c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK-LABEL: @test_presence
16c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: atomicrmw add i32* {{.*}} seq_cst
17c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  __atomic_fetch_add(&i, 1, memory_order_seq_cst);
18c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: atomicrmw sub i32* {{.*}} seq_cst
19c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  __atomic_fetch_sub(&i, 1, memory_order_seq_cst);
203ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: load atomic i32, i32* {{.*}} seq_cst
21c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  int r;
22c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  __atomic_load(&i, &r, memory_order_seq_cst);
23c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: store atomic i32 {{.*}} seq_cst
24c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  r = 0;
25c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  __atomic_store(&i, &r, memory_order_seq_cst);
26c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines
27c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: atomicrmw add i64* {{.*}} seq_cst
28c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  __atomic_fetch_add(&l, 1, memory_order_seq_cst);
29c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: atomicrmw sub i64* {{.*}} seq_cst
30c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  __atomic_fetch_sub(&l, 1, memory_order_seq_cst);
313ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: load atomic i64, i64* {{.*}} seq_cst
32c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  long long rl;
33c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  __atomic_load(&l, &rl, memory_order_seq_cst);
34c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  // CHECK: store atomic i64 {{.*}} seq_cst
35c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  rl = 0;
36c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  __atomic_store(&l, &rl, memory_order_seq_cst);
37c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines}
38