69 lines · cpp
1// RUN: %clang_cc1 %s -std=c++11 -emit-llvm -o - -triple=x86_64-linux-gnu | FileCheck %s2// RUN: %clang_cc1 %s -std=c++11 -emit-llvm -o - -triple=x86_64-linux-gnu -target-cpu core2 | FileCheck %s --check-prefix=CORE23// Check the atomic code generation for cpu targets w/wo cx16 support.4 5struct alignas(8) AM8 {6 int f1, f2;7};8AM8 m8;9AM8 load8() {10 AM8 am;11 // CHECK-LABEL: @_Z5load8v12 // CHECK: load atomic i64, {{.*}} monotonic, align 813 // CORE2-LABEL: @_Z5load8v14 // CORE2: load atomic i64, {{.*}} monotonic, align 815 __atomic_load(&m8, &am, 0);16 return am;17}18 19AM8 s8;20void store8() {21 // CHECK-LABEL: @_Z6store8v22 // CHECK: store atomic i64 {{.*}} monotonic, align 823 // CORE2-LABEL: @_Z6store8v24 // CORE2: store atomic i64 {{.*}} monotonic, align 825 __atomic_store(&m8, &s8, 0);26}27 28bool cmpxchg8() {29 AM8 am;30 // CHECK-LABEL: @_Z8cmpxchg8v31 // CHECK: cmpxchg ptr {{.*}} monotonic, align 832 // CORE2-LABEL: @_Z8cmpxchg8v33 // CORE2: cmpxchg ptr {{.*}} monotonic, align 834 return __atomic_compare_exchange(&m8, &s8, &am, 0, 0, 0);35}36 37struct alignas(16) AM16 {38 long f1, f2;39};40 41AM16 m16;42AM16 load16() {43 AM16 am;44 // CHECK-LABEL: @_Z6load16v45 // CHECK: load atomic i128, {{.*}} monotonic, align 1646 // CORE2-LABEL: @_Z6load16v47 // CORE2: load atomic i128, {{.*}} monotonic, align 1648 __atomic_load(&m16, &am, 0);49 return am;50}51 52AM16 s16;53void store16() {54 // CHECK-LABEL: @_Z7store16v55 // CHECK: store atomic i128 {{.*}} monotonic, align 1656 // CORE2-LABEL: @_Z7store16v57 // CORE2: store atomic i128 {{.*}} monotonic, align 1658 __atomic_store(&m16, &s16, 0);59}60 61bool cmpxchg16() {62 AM16 am;63 // CHECK-LABEL: @_Z9cmpxchg16v64 // CHECK: cmpxchg ptr {{.*}} monotonic monotonic, align 1665 // CORE2-LABEL: @_Z9cmpxchg16v66 // CORE2: cmpxchg ptr {{.*}} monotonic monotonic, align 1667 return __atomic_compare_exchange(&m16, &s16, &am, 0, 0, 0);68}69