diff options
Diffstat (limited to 'test/CodeGenCXX/atomic-align.cpp')
-rw-r--r-- | test/CodeGenCXX/atomic-align.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/CodeGenCXX/atomic-align.cpp b/test/CodeGenCXX/atomic-align.cpp new file mode 100644 index 000000000000..9852ac38a6c8 --- /dev/null +++ b/test/CodeGenCXX/atomic-align.cpp @@ -0,0 +1,30 @@ +// 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; +} |