| // 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; |
| } |