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