forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 %s -emit-llvm -o - -triple=thumbv7-none--eabi | FileCheck %s
 | |
| // RUN: %clang_cc1 %s -emit-llvm -o - -triple=armv6-none--eabi | FileCheck %s
 | |
| // RUN: %clang_cc1 %s -emit-llvm -o - -triple=armv7-unknown-openbsd | FileCheck %s
 | |
| 
 | |
| int i;
 | |
| long long l;
 | |
| 
 | |
| typedef enum memory_order {
 | |
|   memory_order_relaxed, memory_order_consume, memory_order_acquire,
 | |
|   memory_order_release, memory_order_acq_rel, memory_order_seq_cst
 | |
| } memory_order;
 | |
| 
 | |
| void test_presence(void)
 | |
| {
 | |
|   // CHECK-LABEL: @test_presence
 | |
|   // CHECK: atomicrmw add i32* {{.*}} seq_cst
 | |
|   __atomic_fetch_add(&i, 1, memory_order_seq_cst);
 | |
|   // CHECK: atomicrmw sub i32* {{.*}} seq_cst
 | |
|   __atomic_fetch_sub(&i, 1, memory_order_seq_cst);
 | |
|   // CHECK: load atomic i32, i32* {{.*}} seq_cst
 | |
|   int r;
 | |
|   __atomic_load(&i, &r, memory_order_seq_cst);
 | |
|   // CHECK: store atomic i32 {{.*}} seq_cst
 | |
|   r = 0;
 | |
|   __atomic_store(&i, &r, memory_order_seq_cst);
 | |
| 
 | |
|   // CHECK: atomicrmw add i64* {{.*}} seq_cst
 | |
|   __atomic_fetch_add(&l, 1, memory_order_seq_cst);
 | |
|   // CHECK: atomicrmw sub i64* {{.*}} seq_cst
 | |
|   __atomic_fetch_sub(&l, 1, memory_order_seq_cst);
 | |
|   // CHECK: load atomic i64, i64* {{.*}} seq_cst
 | |
|   long long rl;
 | |
|   __atomic_load(&l, &rl, memory_order_seq_cst);
 | |
|   // CHECK: store atomic i64 {{.*}} seq_cst
 | |
|   rl = 0;
 | |
|   __atomic_store(&l, &rl, memory_order_seq_cst);
 | |
| }
 |