xref: /llvm-project/clang/test/CodeGen/unaligned-struct-copy.c (revision d2e7dca5ca92c655e451d6fcb806df38d7f2d56b)
1*d2e7dca5SJan Ole Hüser // RUN: %clang_cc1 -xc   -O2 -triple thumbv7a-unknown-windows-eabi -fms-extensions -emit-llvm < %s | FileCheck %s
2*d2e7dca5SJan Ole Hüser // RUN: %clang_cc1 -xc++ -O2 -triple thumbv7a-unknown-windows-eabi -fms-extensions -emit-llvm < %s | FileCheck %s
3*d2e7dca5SJan Ole Hüser // RUN: %clang_cc1 -xc   -O2 -triple x86_64-unknown-linux-gnu -fms-extensions -emit-llvm < %s | FileCheck %s
4*d2e7dca5SJan Ole Hüser // RUN: %clang_cc1 -xc++ -O2 -triple x86_64-unknown-linux-gnu -fms-extensions -emit-llvm < %s | FileCheck %s
5*d2e7dca5SJan Ole Hüser 
6*d2e7dca5SJan Ole Hüser struct S1 {
7*d2e7dca5SJan Ole Hüser   unsigned long x;
8*d2e7dca5SJan Ole Hüser };
9*d2e7dca5SJan Ole Hüser 
10*d2e7dca5SJan Ole Hüser // CHECK: define
11*d2e7dca5SJan Ole Hüser // CHECK-SAME: void
12*d2e7dca5SJan Ole Hüser // CHECK-SAME: test1
13*d2e7dca5SJan Ole Hüser 
test1(__unaligned struct S1 * out)14*d2e7dca5SJan Ole Hüser void test1(__unaligned struct S1 *out) {
15*d2e7dca5SJan Ole Hüser   // CHECK: store
16*d2e7dca5SJan Ole Hüser   // CHECK-SAME: align 1
17*d2e7dca5SJan Ole Hüser   out->x = 5;
18*d2e7dca5SJan Ole Hüser   // CHECK: ret void
19*d2e7dca5SJan Ole Hüser }
20*d2e7dca5SJan Ole Hüser 
21*d2e7dca5SJan Ole Hüser // CHECK: define
22*d2e7dca5SJan Ole Hüser // CHECK-SAME: void
23*d2e7dca5SJan Ole Hüser // CHECK-SAME: test2
24*d2e7dca5SJan Ole Hüser 
test2(__unaligned struct S1 * out,__unaligned struct S1 * in)25*d2e7dca5SJan Ole Hüser void test2(__unaligned struct S1 *out, __unaligned struct S1 *in) {
26*d2e7dca5SJan Ole Hüser   // CHECK: load
27*d2e7dca5SJan Ole Hüser   // CHECK-SAME: align 1
28*d2e7dca5SJan Ole Hüser   // CHECK: store
29*d2e7dca5SJan Ole Hüser   // CHECK-SAME: align 1
30*d2e7dca5SJan Ole Hüser   *out = *in;
31*d2e7dca5SJan Ole Hüser   // CHECK: ret void
32*d2e7dca5SJan Ole Hüser }
33