Clang Project

clang_source_code/test/Frontend/fixed_point_bit_widths.c
1// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - %s | FileCheck %s
2// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - --target=x86_64-scei-ps4-ubuntu-fast %s | FileCheck %s
3// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - --target=ppc64 %s | FileCheck %s
4// RUN: %clang -x c -ffixed-point -S -emit-llvm -o - --target=x86_64-scei-ps4-windows10pro-fast %s | FileCheck %s
5
6/* Primary signed _Accum */
7
8int size_SsA = sizeof(signed short _Accum);
9int size_SA  = sizeof(signed _Accum);
10int size_SlA = sizeof(signed long _Accum);
11int align_SsA = __alignof(signed short _Accum);
12int align_SA  = __alignof(signed _Accum);
13int align_SlA = __alignof(signed long _Accum);
14
15// CHECK:      @size_SsA  = {{.*}}global i{{[0-9]+}} 2
16// CHECK-NEXT: @size_SA   = {{.*}}global i{{[0-9]+}} 4
17// CHECK-NEXT: @size_SlA  = {{.*}}global i{{[0-9]+}} 8
18// CHECK-NEXT: @align_SsA = {{.*}}global i{{[0-9]+}} 2
19// CHECK-NEXT: @align_SA  = {{.*}}global i{{[0-9]+}} 4
20// CHECK-NEXT: @align_SlA = {{.*}}global i{{[0-9]+}} 8
21
22/* Primary unsigned _Accum */
23
24int size_UsA = sizeof(unsigned short _Accum);
25int size_UA  = sizeof(unsigned _Accum);
26int size_UlA = sizeof(unsigned long _Accum);
27int align_UsA = __alignof(unsigned short _Accum);
28int align_UA  = __alignof(unsigned _Accum);
29int align_UlA = __alignof(unsigned long _Accum);
30
31// CHECK-NEXT: @size_UsA  = {{.*}}global i{{[0-9]+}} 2
32// CHECK-NEXT: @size_UA   = {{.*}}global i{{[0-9]+}} 4
33// CHECK-NEXT: @size_UlA  = {{.*}}global i{{[0-9]+}} 8
34// CHECK-NEXT: @align_UsA = {{.*}}global i{{[0-9]+}} 2
35// CHECK-NEXT: @align_UA  = {{.*}}global i{{[0-9]+}} 4
36// CHECK-NEXT: @align_UlA = {{.*}}global i{{[0-9]+}} 8
37
38/* Primary signed _Fract */
39
40int size_SsF = sizeof(signed short _Fract);
41int size_SF  = sizeof(signed _Fract);
42int size_SlF = sizeof(signed long _Fract);
43int align_SsF = __alignof(signed short _Fract);
44int align_SF  = __alignof(signed _Fract);
45int align_SlF = __alignof(signed long _Fract);
46
47// CHECK-NEXT: @size_SsF  = {{.*}}global i{{[0-9]+}} 1
48// CHECK-NEXT: @size_SF   = {{.*}}global i{{[0-9]+}} 2
49// CHECK-NEXT: @size_SlF  = {{.*}}global i{{[0-9]+}} 4
50// CHECK-NEXT: @align_SsF = {{.*}}global i{{[0-9]+}} 1
51// CHECK-NEXT: @align_SF  = {{.*}}global i{{[0-9]+}} 2
52// CHECK-NEXT: @align_SlF = {{.*}}global i{{[0-9]+}} 4
53
54/* Primary unsigned _Fract */
55
56int size_UsF = sizeof(unsigned short _Fract);
57int size_UF  = sizeof(unsigned _Fract);
58int size_UlF = sizeof(unsigned long _Fract);
59int align_UsF = __alignof(unsigned short _Fract);
60int align_UF  = __alignof(unsigned _Fract);
61int align_UlF = __alignof(unsigned long _Fract);
62
63// CHECK-NEXT: @size_UsF  = {{.*}}global i{{[0-9]+}} 1
64// CHECK-NEXT: @size_UF   = {{.*}}global i{{[0-9]+}} 2
65// CHECK-NEXT: @size_UlF  = {{.*}}global i{{[0-9]+}} 4
66// CHECK-NEXT: @align_UsF = {{.*}}global i{{[0-9]+}} 1
67// CHECK-NEXT: @align_UF  = {{.*}}global i{{[0-9]+}} 2
68// CHECK-NEXT: @align_UlF = {{.*}}global i{{[0-9]+}} 4
69
70/* Aliased _Accum */
71
72int size_sA = sizeof(short _Accum);
73int size_A  = sizeof(_Accum);
74int size_lA = sizeof(long _Accum);
75int align_sA = __alignof(short _Accum);
76int align_A  = __alignof(_Accum);
77int align_lA = __alignof(long _Accum);
78
79// CHECK-NEXT: @size_sA   = {{.*}}global i{{[0-9]+}} 2
80// CHECK-NEXT: @size_A    = {{.*}}global i{{[0-9]+}} 4
81// CHECK-NEXT: @size_lA   = {{.*}}global i{{[0-9]+}} 8
82// CHECK-NEXT: @align_sA  = {{.*}}global i{{[0-9]+}} 2
83// CHECK-NEXT: @align_A   = {{.*}}global i{{[0-9]+}} 4
84// CHECK-NEXT: @align_lA  = {{.*}}global i{{[0-9]+}} 8
85
86/* Aliased _Fract */
87
88int size_sF = sizeof(short _Fract);
89int size_F  = sizeof(_Fract);
90int size_lF = sizeof(long _Fract);
91int align_sF = __alignof(short _Fract);
92int align_F  = __alignof(_Fract);
93int align_lF = __alignof(long _Fract);
94
95// CHECK-NEXT: @size_sF   = {{.*}}global i{{[0-9]+}} 1
96// CHECK-NEXT: @size_F    = {{.*}}global i{{[0-9]+}} 2
97// CHECK-NEXT: @size_lF   = {{.*}}global i{{[0-9]+}} 4
98// CHECK-NEXT: @align_sF  = {{.*}}global i{{[0-9]+}} 1
99// CHECK-NEXT: @align_F   = {{.*}}global i{{[0-9]+}} 2
100// CHECK-NEXT: @align_lF  = {{.*}}global i{{[0-9]+}} 4
101
102/* Saturated signed _Accum */
103
104int size_SatSsA = sizeof(_Sat signed short _Accum);
105int size_SatSA  = sizeof(_Sat signed _Accum);
106int size_SatSlA = sizeof(_Sat signed long _Accum);
107int align_SatSsA = __alignof(_Sat signed short _Accum);
108int align_SatSA  = __alignof(_Sat signed _Accum);
109int align_SatSlA = __alignof(_Sat signed long _Accum);
110
111// CHECK:      @size_SatSsA  = {{.*}}global i{{[0-9]+}} 2
112// CHECK-NEXT: @size_SatSA   = {{.*}}global i{{[0-9]+}} 4
113// CHECK-NEXT: @size_SatSlA  = {{.*}}global i{{[0-9]+}} 8
114// CHECK-NEXT: @align_SatSsA = {{.*}}global i{{[0-9]+}} 2
115// CHECK-NEXT: @align_SatSA  = {{.*}}global i{{[0-9]+}} 4
116// CHECK-NEXT: @align_SatSlA = {{.*}}global i{{[0-9]+}} 8
117
118/* Saturated unsigned _Accum */
119
120int size_SatUsA = sizeof(_Sat unsigned short _Accum);
121int size_SatUA  = sizeof(_Sat unsigned _Accum);
122int size_SatUlA = sizeof(_Sat unsigned long _Accum);
123int align_SatUsA = __alignof(_Sat unsigned short _Accum);
124int align_SatUA  = __alignof(_Sat unsigned _Accum);
125int align_SatUlA = __alignof(_Sat unsigned long _Accum);
126
127// CHECK-NEXT: @size_SatUsA  = {{.*}}global i{{[0-9]+}} 2
128// CHECK-NEXT: @size_SatUA   = {{.*}}global i{{[0-9]+}} 4
129// CHECK-NEXT: @size_SatUlA  = {{.*}}global i{{[0-9]+}} 8
130// CHECK-NEXT: @align_SatUsA = {{.*}}global i{{[0-9]+}} 2
131// CHECK-NEXT: @align_SatUA  = {{.*}}global i{{[0-9]+}} 4
132// CHECK-NEXT: @align_SatUlA = {{.*}}global i{{[0-9]+}} 8
133
134/* Saturated signed _Fract */
135
136int size_SatSsF = sizeof(_Sat signed short _Fract);
137int size_SatSF  = sizeof(_Sat signed _Fract);
138int size_SatSlF = sizeof(_Sat signed long _Fract);
139int align_SatSsF = __alignof(_Sat signed short _Fract);
140int align_SatSF  = __alignof(_Sat signed _Fract);
141int align_SatSlF = __alignof(_Sat signed long _Fract);
142
143// CHECK-NEXT: @size_SatSsF  = {{.*}}global i{{[0-9]+}} 1
144// CHECK-NEXT: @size_SatSF   = {{.*}}global i{{[0-9]+}} 2
145// CHECK-NEXT: @size_SatSlF  = {{.*}}global i{{[0-9]+}} 4
146// CHECK-NEXT: @align_SatSsF = {{.*}}global i{{[0-9]+}} 1
147// CHECK-NEXT: @align_SatSF  = {{.*}}global i{{[0-9]+}} 2
148// CHECK-NEXT: @align_SatSlF = {{.*}}global i{{[0-9]+}} 4
149
150/* Saturated unsigned _Fract */
151
152int size_SatUsF = sizeof(_Sat unsigned short _Fract);
153int size_SatUF  = sizeof(_Sat unsigned _Fract);
154int size_SatUlF = sizeof(_Sat unsigned long _Fract);
155int align_SatUsF = __alignof(_Sat unsigned short _Fract);
156int align_SatUF  = __alignof(_Sat unsigned _Fract);
157int align_SatUlF = __alignof(_Sat unsigned long _Fract);
158
159// CHECK-NEXT: @size_SatUsF  = {{.*}}global i{{[0-9]+}} 1
160// CHECK-NEXT: @size_SatUF   = {{.*}}global i{{[0-9]+}} 2
161// CHECK-NEXT: @size_SatUlF  = {{.*}}global i{{[0-9]+}} 4
162// CHECK-NEXT: @align_SatUsF = {{.*}}global i{{[0-9]+}} 1
163// CHECK-NEXT: @align_SatUF  = {{.*}}global i{{[0-9]+}} 2
164// CHECK-NEXT: @align_SatUlF = {{.*}}global i{{[0-9]+}} 4
165
166/* Aliased saturated signed _Accum */
167
168int size_SatsA = sizeof(_Sat short _Accum);
169int size_SatA  = sizeof(_Sat _Accum);
170int size_SatlA = sizeof(_Sat long _Accum);
171int align_SatsA = __alignof(_Sat short _Accum);
172int align_SatA  = __alignof(_Sat _Accum);
173int align_SatlA = __alignof(_Sat long _Accum);
174
175// CHECK-NEXT: @size_SatsA   = {{.*}}global i{{[0-9]+}} 2
176// CHECK-NEXT: @size_SatA    = {{.*}}global i{{[0-9]+}} 4
177// CHECK-NEXT: @size_SatlA   = {{.*}}global i{{[0-9]+}} 8
178// CHECK-NEXT: @align_SatsA  = {{.*}}global i{{[0-9]+}} 2
179// CHECK-NEXT: @align_SatA   = {{.*}}global i{{[0-9]+}} 4
180// CHECK-NEXT: @align_SatlA  = {{.*}}global i{{[0-9]+}} 8
181
182/* Aliased saturated _Fract */
183
184int size_SatsF = sizeof(_Sat short _Fract);
185int size_SatF  = sizeof(_Sat _Fract);
186int size_SatlF = sizeof(_Sat long _Fract);
187int align_SatsF = __alignof(_Sat short _Fract);
188int align_SatF  = __alignof(_Sat _Fract);
189int align_SatlF = __alignof(_Sat long _Fract);
190
191// CHECK-NEXT: @size_SatsF   = {{.*}}global i{{[0-9]+}} 1
192// CHECK-NEXT: @size_SatF    = {{.*}}global i{{[0-9]+}} 2
193// CHECK-NEXT: @size_SatlF   = {{.*}}global i{{[0-9]+}} 4
194// CHECK-NEXT: @align_SatsF  = {{.*}}global i{{[0-9]+}} 1
195// CHECK-NEXT: @align_SatF   = {{.*}}global i{{[0-9]+}} 2
196// CHECK-NEXT: @align_SatlF  = {{.*}}global i{{[0-9]+}} 4
197