1ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// RUN: %clang_cc1 %s -emit-llvm -o - -triple=thumbv6m-none--eabi -target-cpu cortex-m0 | FileCheck %s
2ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
3ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesint i;
4ef8225444452a1486bd721f3285301fe84643b00Stephen Hineslong long l;
5ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
6ef8225444452a1486bd721f3285301fe84643b00Stephen Hinestypedef enum memory_order {
7ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  memory_order_relaxed, memory_order_consume, memory_order_acquire,
8ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  memory_order_release, memory_order_acq_rel, memory_order_seq_cst
9ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} memory_order;
10ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
11ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesvoid test_presence(void)
12ef8225444452a1486bd721f3285301fe84643b00Stephen Hines{
13ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK-LABEL: @test_presence
14ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK: __atomic_fetch_add_4
15ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  __atomic_fetch_add(&i, 1, memory_order_seq_cst);
16ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK: __atomic_fetch_sub_4
17ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  __atomic_fetch_sub(&i, 1, memory_order_seq_cst);
18ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK: __atomic_load_4
19ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  int r;
20ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  __atomic_load(&i, &r, memory_order_seq_cst);
21ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK: __atomic_store_4
22ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  r = 0;
23ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  __atomic_store(&i, &r, memory_order_seq_cst);
24ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
25ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK: __atomic_fetch_add_8
26ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  __atomic_fetch_add(&l, 1, memory_order_seq_cst);
27ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK: __atomic_fetch_sub_8
28ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  __atomic_fetch_sub(&l, 1, memory_order_seq_cst);
29ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK: __atomic_load_8
30ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  long long rl;
31ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  __atomic_load(&l, &rl, memory_order_seq_cst);
32ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  // CHECK: __atomic_store_8
33ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  rl = 0;
34ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  __atomic_store(&l, &rl, memory_order_seq_cst);
35ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}
36