Clang Project

clang_source_code/test/CodeGen/x86-vec-struct-packing.c
1// RUN: %clang_cc1 -ffreestanding -emit-llvm-only  -triple x86_64-windows-coff -fdump-record-layouts %s | FileCheck %s --check-prefix=CHECK-MS
2// RUN: %clang_cc1 -ffreestanding -emit-llvm-only  -triple x86_64-apple-darwin -fdump-record-layouts %s | FileCheck %s --check-prefix=CHECK-NOTMS
3#include <x86intrin.h>
4
5#pragma pack(1)
6
7struct s_m64 {
8  int a;
9  __m64 b;
10};
11typedef struct s_m64 m64;
12
13#if defined(_WIN32)
14static int a1[(sizeof(m64) == 16) - 1];
15#else
16static int a1[(sizeof(m64) == 12) - 1];
17#endif
18
19struct s_m128 {
20  int a;
21  __m128 b;
22};
23typedef struct s_m128 m128;
24
25#if defined(_WIN32)
26static int a1[(sizeof(m128) == 32) - 1];
27#else
28static int a1[(sizeof(m128) == 20) - 1];
29#endif
30
31struct s_m128i {
32  int a;
33  __m128i b;
34};
35typedef struct s_m128i m128i;
36
37#if defined(_WIN32)
38static int a1[(sizeof(m128i) == 32) - 1];
39#else
40static int a1[(sizeof(m128i) == 20) - 1];
41#endif
42
43struct s_m128d {
44  int a;
45  __m128d b;
46};
47typedef struct s_m128d m128d;
48
49#if defined(_WIN32)
50static int a1[(sizeof(m128d) == 32) - 1];
51#else
52static int a1[(sizeof(m128d) == 20) - 1];
53#endif
54
55struct s_m256 {
56  int a;
57  __m256 b;
58};
59typedef struct s_m256 m256;
60
61#if defined(_WIN32)
62static int a1[(sizeof(m256) == 64) - 1];
63#else
64static int a1[(sizeof(m256) == 36) - 1];
65#endif
66
67struct s_m256i {
68  int a;
69  __m256i b;
70};
71typedef struct s_m256i m256i;
72
73#if defined(_WIN32)
74static int a1[(sizeof(m256i) == 64) - 1];
75#else
76static int a1[(sizeof(m256i) == 36) - 1];
77#endif
78
79struct s_m256d {
80  int a;
81  __m256d b;
82};
83typedef struct s_m256d m256d;
84
85#if defined(_WIN32)
86static int a1[(sizeof(m256d) == 64) - 1];
87#else
88static int a1[(sizeof(m256d) == 36) - 1];
89#endif
90
91struct s_m512 {
92  int a;
93  __m512 b;
94};
95typedef struct s_m512 m512;
96
97#if defined(_WIN32)
98static int a1[(sizeof(m512) == 128) - 1];
99#else
100static int a1[(sizeof(m512) == 68) - 1];
101#endif
102
103struct s_m512i {
104  int a;
105  __m512i b;
106};
107typedef struct s_m512i m512i;
108
109#if defined(_WIN32)
110static int a1[(sizeof(m512i) == 128) - 1];
111#else
112static int a1[(sizeof(m512i) == 68) - 1];
113#endif
114
115struct s_m512d {
116  int a;
117  __m512d b;
118};
119typedef struct s_m512d m512d;
120
121#if defined(_WIN32)
122static int a1[(sizeof(m512d) == 128) - 1];
123#else
124static int a1[(sizeof(m512d) == 68) - 1];
125#endif
126
127// CHECK-MS: *** Dumping AST Record Layout
128// CHECK-MS:          0 | struct s_m64
129// CHECK-MS:          0 |   int a
130// CHECK-MS:          8 |   __m64 b
131// CHECK-MS:            | [sizeof=16, align=8]
132// CHECK-MS: *** Dumping AST Record Layout
133// CHECK-MS:          0 | struct s_m128
134// CHECK-MS:          0 |   int a
135// CHECK-MS:         16 |   __m128 b
136// CHECK-MS:            | [sizeof=32, align=16]
137// CHECK-MS: *** Dumping AST Record Layout
138// CHECK-MS:          0 | struct s_m128i
139// CHECK-MS:          0 |   int a
140// CHECK-MS:         16 |   __m128i b
141// CHECK-MS:            | [sizeof=32, align=16]
142// CHECK-MS: *** Dumping AST Record Layout
143// CHECK-MS:          0 | struct s_m128d
144// CHECK-MS:          0 |   int a
145// CHECK-MS:         16 |   __m128d b
146// CHECK-MS:            | [sizeof=32, align=16]
147// CHECK-MS: *** Dumping AST Record Layout
148// CHECK-MS:          0 | struct s_m256
149// CHECK-MS:          0 |   int a
150// CHECK-MS:         32 |   __m256 b
151// CHECK-MS:            | [sizeof=64, align=32]
152// CHECK-MS: *** Dumping AST Record Layout
153// CHECK-MS:          0 | struct s_m256i
154// CHECK-MS:          0 |   int a
155// CHECK-MS:         32 |   __m256i b
156// CHECK-MS:            | [sizeof=64, align=32]
157// CHECK-MS: *** Dumping AST Record Layout
158// CHECK-MS:          0 | struct s_m256d
159// CHECK-MS:          0 |   int a
160// CHECK-MS:         32 |   __m256d b
161// CHECK-MS:            | [sizeof=64, align=32]
162// CHECK-MS: *** Dumping AST Record Layout
163// CHECK-MS:          0 | struct s_m512
164// CHECK-MS:          0 |   int a
165// CHECK-MS:         64 |   __m512 b
166// CHECK-MS:            | [sizeof=128, align=64]
167// CHECK-MS: *** Dumping AST Record Layout
168// CHECK-MS:          0 | struct s_m512i
169// CHECK-MS:          0 |   int a
170// CHECK-MS:         64 |   __m512i b
171// CHECK-MS:            | [sizeof=128, align=64]
172// CHECK-MS: *** Dumping AST Record Layout
173// CHECK-MS:          0 | struct s_m512d
174// CHECK-MS:          0 |   int a
175// CHECK-MS:         64 |   __m512d b
176// CHECK-MS:            | [sizeof=128, align=64]
177
178// CHECK-NOTMS: *** Dumping AST Record Layout
179// CHECK-NOTMS:          0 | struct s_m64
180// CHECK-NOTMS:          0 |   int a
181// CHECK-NOTMS:          4 |   __m64 b
182// CHECK-NOTMS:            | [sizeof=12, align=1]
183// CHECK-NOTMS: *** Dumping AST Record Layout
184// CHECK-NOTMS:          0 | struct s_m128
185// CHECK-NOTMS:          0 |   int a
186// CHECK-NOTMS:          4 |   __m128 b
187// CHECK-NOTMS:            | [sizeof=20, align=1]
188// CHECK-NOTMS: *** Dumping AST Record Layout
189// CHECK-NOTMS:          0 | struct s_m128i
190// CHECK-NOTMS:          0 |   int a
191// CHECK-NOTMS:          4 |   __m128i b
192// CHECK-NOTMS:            | [sizeof=20, align=1]
193// CHECK-NOTMS: *** Dumping AST Record Layout
194// CHECK-NOTMS:          0 | struct s_m128d
195// CHECK-NOTMS:          0 |   int a
196// CHECK-NOTMS:          4 |   __m128d b
197// CHECK-NOTMS:            | [sizeof=20, align=1]
198// CHECK-NOTMS: *** Dumping AST Record Layout
199// CHECK-NOTMS:          0 | struct s_m256
200// CHECK-NOTMS:          0 |   int a
201// CHECK-NOTMS:          4 |   __m256 b
202// CHECK-NOTMS:            | [sizeof=36, align=1]
203// CHECK-NOTMS: *** Dumping AST Record Layout
204// CHECK-NOTMS:          0 | struct s_m256i
205// CHECK-NOTMS:          0 |   int a
206// CHECK-NOTMS:          4 |   __m256i b
207// CHECK-NOTMS:            | [sizeof=36, align=1]
208// CHECK-NOTMS: *** Dumping AST Record Layout
209// CHECK-NOTMS:          0 | struct s_m256d
210// CHECK-NOTMS:          0 |   int a
211// CHECK-NOTMS:          4 |   __m256d b
212// CHECK-NOTMS:            | [sizeof=36, align=1]
213// CHECK-NOTMS: *** Dumping AST Record Layout
214// CHECK-NOTMS:          0 | struct s_m512
215// CHECK-NOTMS:          0 |   int a
216// CHECK-NOTMS:          4 |   __m512 b
217// CHECK-NOTMS:            | [sizeof=68, align=1]
218// CHECK-NOTMS: *** Dumping AST Record Layout
219// CHECK-NOTMS:          0 | struct s_m512i
220// CHECK-NOTMS:          0 |   int a
221// CHECK-NOTMS:          4 |   __m512i b
222// CHECK-NOTMS:            | [sizeof=68, align=1]
223// CHECK-NOTMS: *** Dumping AST Record Layout
224// CHECK-NOTMS:          0 | struct s_m512d
225// CHECK-NOTMS:          0 |   int a
226// CHECK-NOTMS:          4 |   __m512d b
227// CHECK-NOTMS:            | [sizeof=68, align=1]
228