// RUN: %clang_cc1 %s -std=c++11 -emit-llvm -o - -triple=x86_64-linux-gnu | FileCheck %s | |
struct AM { | |
int f1, f2; | |
}; | |
alignas(8) AM m; | |
AM load1() { | |
AM am; | |
// m is declared to align to 8bytes, so generate load atomic instead | |
// of libcall. | |
// CHECK-LABEL: @_Z5load1v | |
// CHECK: load atomic {{.*}} monotonic | |
__atomic_load(&m, &am, 0); | |
return am; | |
} | |
struct BM { | |
int f1; | |
alignas(8) AM f2; | |
}; | |
BM bm; | |
AM load2() { | |
AM am; | |
// BM::f2 is declared to align to 8bytes, so generate load atomic instead | |
// of libcall. | |
// CHECK-LABEL: @_Z5load2v | |
// CHECK: load atomic {{.*}} monotonic | |
__atomic_load(&bm.f2, &am, 0); | |
return am; | |
} |