Clang Project

clang_source_code/test/CodeGenCXX/atomic-align.cpp
1// RUN: %clang_cc1 %s -std=c++11 -emit-llvm -o - -triple=x86_64-linux-gnu | FileCheck %s
2
3struct AM {
4  int f1, f2;
5};
6alignas(8) AM m;
7AM load1() {
8  AM am;
9  // m is declared to align to 8bytes, so generate load atomic instead
10  // of libcall.
11  // CHECK-LABEL: @_Z5load1v
12  // CHECK: load atomic {{.*}} monotonic
13  __atomic_load(&m, &am, 0);
14  return am;
15}
16
17struct BM {
18  int f1;
19  alignas(8) AM f2;
20};
21BM bm;
22AM load2() {
23  AM am;
24  // BM::f2 is declared to align to 8bytes, so generate load atomic instead
25  // of libcall.
26  // CHECK-LABEL: @_Z5load2v
27  // CHECK: load atomic {{.*}} monotonic
28  __atomic_load(&bm.f2, &am, 0);
29  return am;
30}
31