|  | // RUN: %clang_cc1 %s -emit-llvm -DDOUBLE -O0 -o - -triple=amdgcn-amd-amdhsa \ | 
|  | // RUN:   | FileCheck -check-prefixes=FLOAT,DOUBLE %s | 
|  |  | 
|  | // RUN: %clang_cc1 %s -emit-llvm -DDOUBLE -O0 -o - -triple=aarch64-linux-gnu \ | 
|  | // RUN:   | FileCheck -check-prefixes=FLOAT,DOUBLE %s | 
|  |  | 
|  | // RUN: %clang_cc1 %s -emit-llvm -O0 -o - -triple=armv8-apple-ios7.0 \ | 
|  | // RUN:   | FileCheck -check-prefixes=FLOAT %s | 
|  |  | 
|  | // RUN: %clang_cc1 %s -emit-llvm -DDOUBLE -O0 -o - -triple=hexagon \ | 
|  | // RUN:   | FileCheck -check-prefixes=FLOAT,DOUBLE %s | 
|  |  | 
|  | // RUN: %clang_cc1 %s -emit-llvm -DDOUBLE -O0 -o - -triple=mips64-mti-linux-gnu \ | 
|  | // RUN:   | FileCheck -check-prefixes=FLOAT,DOUBLE %s | 
|  |  | 
|  | // RUN: %clang_cc1 %s -emit-llvm -O0 -o - -triple=i686-linux-gnu \ | 
|  | // RUN:   | FileCheck -check-prefixes=FLOAT %s | 
|  |  | 
|  | // RUN: %clang_cc1 %s -emit-llvm -DDOUBLE -O0 -o - -triple=x86_64-linux-gnu \ | 
|  | // RUN:   | FileCheck -check-prefixes=FLOAT,DOUBLE %s | 
|  |  | 
|  | typedef enum memory_order { | 
|  | memory_order_relaxed = __ATOMIC_RELAXED, | 
|  | memory_order_acquire = __ATOMIC_ACQUIRE, | 
|  | memory_order_release = __ATOMIC_RELEASE, | 
|  | memory_order_acq_rel = __ATOMIC_ACQ_REL, | 
|  | memory_order_seq_cst = __ATOMIC_SEQ_CST | 
|  | } memory_order; | 
|  |  | 
|  | void test(float *f, float ff, double *d, double dd) { | 
|  | // FLOAT: atomicrmw fadd ptr {{.*}} monotonic | 
|  | __atomic_fetch_add(f, ff, memory_order_relaxed); | 
|  |  | 
|  | // FLOAT: atomicrmw fsub ptr {{.*}} monotonic | 
|  | __atomic_fetch_sub(f, ff, memory_order_relaxed); | 
|  |  | 
|  | #ifdef DOUBLE | 
|  | // DOUBLE: atomicrmw fadd ptr {{.*}} monotonic | 
|  | __atomic_fetch_add(d, dd, memory_order_relaxed); | 
|  |  | 
|  | // DOUBLE: atomicrmw fsub ptr {{.*}} monotonic | 
|  | __atomic_fetch_sub(d, dd, memory_order_relaxed); | 
|  | #endif | 
|  | } |