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