[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / CodeGen / PowerPC / builtins-ppc-32bit-vec-ll.c
bloba865bc59bee2535735d8ca5b03e527fc8b49028d
1 // REQUIRES: powerpc-registered-target
2 // RUN: %clang_cc1 -flax-vector-conversions=none -target-feature +altivec \
3 // RUN: -target-feature +power8-vector -triple powerpc-unknown-unknown -emit-llvm %s -o - | FileCheck %s
5 #include <altivec.h>
6 vector signed long long vsll1, vsll2, vsll3;
7 vector unsigned long long vull1, vull2, vull3;
8 vector signed char vsc;
9 vector unsigned char vuc;
10 vector bool long long vbll;
12 void dummy();
13 void test() {
14 vec_abs(vsll1);
15 // CHECK: call <2 x i64> @llvm.ppc.altivec.vmaxsd
16 dummy();
17 // CHECK-NEXT: call void @dummy()
18 vec_add(vsll1, vsll2);
19 // CHECK: add <2 x i64>
20 dummy();
21 // CHECK: call void @dummy()
22 vec_and(vsll1, vsll2);
23 // CHECK: and <2 x i64>
24 dummy();
25 // CHECK: call void @dummy()
26 vec_vand(vsll1, vsll2);
27 // CHECK: and <2 x i64>
28 dummy();
29 // CHECK: call void @dummy()
30 vec_andc(vsll1, vsll2);
31 // CHECK: xor <2 x i64>
32 // CHECK: and <2 x i64>
33 dummy();
34 // CHECK: call void @dummy()
35 vec_vandc(vsll1, vsll2);
36 // CHECK: xor <2 x i64>
37 // CHECK: and <2 x i64>
38 dummy();
39 // CHECK: call void @dummy()
40 vec_cmpeq(vsll1, vsll2);
41 // CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpequd
42 dummy();
43 // CHECK: call void @dummy()
44 vec_cmpne(vsll1, vsll2);
45 // CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpequd
46 // CHECK: xor <2 x i64>
47 dummy();
48 // CHECK: call void @dummy()
49 vec_cmpgt(vsll1, vsll2);
50 // CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd
51 dummy();
52 // CHECK: call void @dummy()
53 vec_cmpge(vsll1, vsll2);
54 // CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd
55 // CHECK: xor <2 x i64>
56 dummy();
57 // CHECK: call void @dummy()
58 vec_cmple(vsll1, vsll2);
59 // CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd
60 // CHECK: xor <2 x i64>
61 dummy();
62 // CHECK: call void @dummy()
63 vec_cmplt(vsll1, vsll2);
64 // CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd
65 dummy();
66 // CHECK: call void @dummy()
67 vec_popcnt(vsll1);
68 // CHECK: call <2 x i64> @llvm.ctpop.v2i64
69 dummy();
70 // CHECK: call void @dummy()
71 vec_cntlz(vsll1);
72 // CHECK: call <2 x i64> @llvm.ctlz.v2i64
73 dummy();
74 // CHECK: call void @dummy()
75 vec_float2(vsll1, vsll2);
76 // CHECK: sitofp i64 %{{.*}} to float
77 dummy();
78 // CHECK: call void @dummy()
79 vec_floate(vsll1);
80 // CHECK: call <4 x float> @llvm.ppc.vsx.xvcvsxdsp
81 dummy();
82 // CHECK: call void @dummy()
83 vec_floato(vsll1);
84 // CHECK: call <4 x float> @llvm.ppc.vsx.xvcvsxdsp
85 dummy();
86 // CHECK: call void @dummy()
87 vec_double(vsll1);
88 // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
89 dummy();
90 // CHECK: call void @dummy()
91 vec_div(vsll1, vsll2);
92 // CHECK: sdiv <2 x i64>
93 dummy();
94 // CHECK: call void @dummy()
95 vec_eqv(vsll1, vsll2);
96 // CHECK: call <4 x i32> @llvm.ppc.vsx.xxleqv
97 dummy();
98 // CHECK: call void @dummy()
99 vec_max(vsll1, vsll2);
100 // CHECK: call <2 x i64> @llvm.ppc.altivec.vmaxsd
101 dummy();
102 // CHECK: call void @dummy()
103 vec_mergeh(vsll1, vsll2);
104 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
105 dummy();
106 // CHECK: call void @dummy()
107 vec_mergel(vsll1, vsll2);
108 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
109 dummy();
110 // CHECK: call void @dummy()
111 vec_mergee(vsll1, vsll2);
112 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
113 dummy();
114 // CHECK: call void @dummy()
115 vec_mergeo(vsll1, vsll2);
116 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
117 dummy();
118 // CHECK: call void @dummy()
119 vec_min(vsll1, vsll2);
120 // CHECK: call <2 x i64> @llvm.ppc.altivec.vminsd
121 dummy();
122 // CHECK: call void @dummy()
123 vec_mul(vsll1, vsll2);
124 // CHECK: mul <2 x i64>
125 dummy();
126 // CHECK: call void @dummy()
127 vec_nand(vsll1, vsll2);
128 // CHECK: and <2 x i64>
129 // CHECK: xor <2 x i64>
130 dummy();
131 // CHECK: call void @dummy()
132 vec_nor(vsll1, vsll2);
133 // CHECK: or <2 x i64>
134 // CHECK: xor <2 x i64>
135 dummy();
136 // CHECK: call void @dummy()
137 vec_or(vsll1, vsll2);
138 // CHECK: or <2 x i64>
139 dummy();
140 // CHECK: call void @dummy()
141 vec_orc(vsll1, vsll2);
142 // CHECK: xor <2 x i64>
143 // CHECK: or <2 x i64>
144 dummy();
145 // CHECK: call void @dummy()
146 vec_vor(vsll1, vsll2);
147 // CHECK: or <2 x i64>
148 dummy();
149 // CHECK: call void @dummy()
150 vec_pack(vsll1, vsll2);
151 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
152 dummy();
153 // CHECK: call void @dummy()
154 vec_vpkudum(vsll1, vsll2);
155 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
156 dummy();
157 // CHECK: call void @dummy()
158 vec_packs(vsll1, vsll2);
159 // CHECK: call <4 x i32> @llvm.ppc.altivec.vpksdss
160 dummy();
161 // CHECK: call void @dummy()
162 vec_vpkudus(vull1, vull2);
163 // CHECK: call <4 x i32> @llvm.ppc.altivec.vpkudus
164 dummy();
165 // CHECK: call void @dummy()
166 vec_packsu(vsll1, vsll2);
167 // CHECK: call <4 x i32> @llvm.ppc.altivec.vpksdus
168 dummy();
169 // CHECK: call void @dummy()
170 vec_rl(vull1, vull2);
171 // CHECK: call <2 x i64> @llvm.ppc.altivec.vrld
172 dummy();
173 // CHECK: call void @dummy()
174 vec_sel(vsll1, vsll2, vbll);
175 // CHECK: xor <2 x i64>
176 // CHECK: and <2 x i64>
177 // CHECK: and <2 x i64>
178 // CHECK: or <2 x i64>
179 dummy();
180 // CHECK: call void @dummy()
181 vec_sl(vull1, vull2);
182 // CHECK: shl <2 x i64>
183 dummy();
184 // CHECK: call void @dummy()
185 vec_sld(vsll1, vsll2, 2);
186 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
187 dummy();
188 // CHECK: call void @dummy()
189 vec_sldw(vsll1, vsll2, 2);
190 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
191 dummy();
192 // CHECK: call void @dummy()
193 vec_sll(vsll1, vuc);
194 // CHECK: call <4 x i32> @llvm.ppc.altivec.vsl
195 dummy();
196 // CHECK: call void @dummy()
197 vec_slo(vsll1, vsc);
198 // CHECK: call <4 x i32> @llvm.ppc.altivec.vslo
199 dummy();
200 // CHECK: call void @dummy()
201 vec_splat(vsll1, 2);
202 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
203 dummy();
204 // CHECK: call void @dummy()
205 vec_sr(vull1, vull2);
206 // CHECK: lshr <2 x i64>
207 dummy();
208 // CHECK: call void @dummy()
209 vec_sra(vsll1, vull2);
210 // CHECK: ashr <2 x i64>
211 dummy();
212 // CHECK: call void @dummy()
213 vec_srl(vsll1, vuc);
214 // CHECK: call <4 x i32> @llvm.ppc.altivec.vsr
215 dummy();
216 // CHECK: call void @dummy()
217 vec_sro(vsll1, vsc);
218 // CHECK: call <4 x i32> @llvm.ppc.altivec.vsro
219 dummy();
220 // CHECK: call void @dummy()
221 vec_sub(vsll1, vsll2);
222 // CHECK: sub <2 x i64>
223 dummy();
224 // CHECK: call void @dummy()
225 vec_xor(vsll1, vsll2);
226 // CHECK: xor <2 x i64>
227 dummy();
228 // CHECK: call void @dummy()
229 vec_vxor(vsll1, vsll2);
230 // CHECK: xor <2 x i64>
231 dummy();
232 // CHECK: call void @dummy()
233 vec_extract(vsll1, 2);
234 // CHECK: extractelement <2 x i64>
235 dummy();
236 // CHECK: call void @dummy()
237 vec_all_eq(vsll1, vsll2);
238 // CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p
239 dummy();
240 // CHECK: call void @dummy()
241 vec_all_ge(vsll1, vsll2);
242 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
243 dummy();
244 // CHECK: call void @dummy()
245 vec_all_gt(vsll1, vsll2);
246 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
247 dummy();
248 // CHECK: call void @dummy()
249 vec_all_le(vsll1, vsll2);
250 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
251 dummy();
252 // CHECK: call void @dummy()
253 vec_all_lt(vsll1, vsll2);
254 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
255 dummy();
256 // CHECK: call void @dummy()
257 vec_all_ne(vsll1, vsll2);
258 // CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p
259 dummy();
260 // CHECK: call void @dummy()
261 vec_any_eq(vsll1, vsll2);
262 // CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p
263 dummy();
264 // CHECK: call void @dummy()
265 vec_any_ge(vsll1, vsll2);
266 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
267 dummy();
268 // CHECK: call void @dummy()
269 vec_any_gt(vsll1, vsll2);
270 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
271 dummy();
272 // CHECK: call void @dummy()
273 vec_any_le(vsll1, vsll2);
274 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
275 dummy();
276 // CHECK: call void @dummy()
277 vec_any_lt(vsll1, vsll2);
278 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
279 dummy();
280 // CHECK: call void @dummy()
281 vec_any_ne(vsll1, vsll2);
282 // CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p
283 dummy();
284 // CHECK: call void @dummy()
285 vec_gbb(vsll1);
286 // CHECK: call <16 x i8> @llvm.ppc.altivec.vgbbd
287 dummy();
288 // CHECK: call void @dummy()
289 vec_reve(vsll1);
290 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 0>
291 dummy();
292 // CHECK: call void @dummy()
293 vec_revb(vsll1);
294 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm