1ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// RUN: %clang_cc1 %s -emit-llvm -o - -triple=thumbv7m-none--eabi -target-cpu cortex-m3 | 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: atomicrmw add i32* {{.*}} seq_cst 15ef8225444452a1486bd721f3285301fe84643b00Stephen Hines __atomic_fetch_add(&i, 1, memory_order_seq_cst); 16ef8225444452a1486bd721f3285301fe84643b00Stephen Hines // CHECK: atomicrmw sub i32* {{.*}} seq_cst 17ef8225444452a1486bd721f3285301fe84643b00Stephen Hines __atomic_fetch_sub(&i, 1, memory_order_seq_cst); 18ef8225444452a1486bd721f3285301fe84643b00Stephen Hines // CHECK: load atomic i32* {{.*}} seq_cst 19ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int r; 20ef8225444452a1486bd721f3285301fe84643b00Stephen Hines __atomic_load(&i, &r, memory_order_seq_cst); 21ef8225444452a1486bd721f3285301fe84643b00Stephen Hines // CHECK: store atomic i32 {{.*}} seq_cst 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