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