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