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
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
;
15 // CHECK: call <2 x i64> @llvm.ppc.altivec.vmaxsd
17 // CHECK-NEXT: call void @dummy()
18 vec_add(vsll1
, vsll2
);
19 // CHECK: add <2 x i64>
21 // CHECK: call void @dummy()
22 vec_and(vsll1
, vsll2
);
23 // CHECK: and <2 x i64>
25 // CHECK: call void @dummy()
26 vec_vand(vsll1
, vsll2
);
27 // CHECK: and <2 x i64>
29 // CHECK: call void @dummy()
30 vec_andc(vsll1
, vsll2
);
31 // CHECK: xor <2 x i64>
32 // CHECK: and <2 x i64>
34 // CHECK: call void @dummy()
35 vec_vandc(vsll1
, vsll2
);
36 // CHECK: xor <2 x i64>
37 // CHECK: and <2 x i64>
39 // CHECK: call void @dummy()
40 vec_cmpeq(vsll1
, vsll2
);
41 // CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpequd
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>
48 // CHECK: call void @dummy()
49 vec_cmpgt(vsll1
, vsll2
);
50 // CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd
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>
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>
62 // CHECK: call void @dummy()
63 vec_cmplt(vsll1
, vsll2
);
64 // CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd
66 // CHECK: call void @dummy()
68 // CHECK: call <2 x i64> @llvm.ctpop.v2i64
70 // CHECK: call void @dummy()
72 // CHECK: call <2 x i64> @llvm.ctlz.v2i64
74 // CHECK: call void @dummy()
75 vec_float2(vsll1
, vsll2
);
76 // CHECK: sitofp i64 %{{.*}} to float
78 // CHECK: call void @dummy()
80 // CHECK: call <4 x float> @llvm.ppc.vsx.xvcvsxdsp
82 // CHECK: call void @dummy()
84 // CHECK: call <4 x float> @llvm.ppc.vsx.xvcvsxdsp
86 // CHECK: call void @dummy()
88 // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
90 // CHECK: call void @dummy()
91 vec_div(vsll1
, vsll2
);
92 // CHECK: sdiv <2 x i64>
94 // CHECK: call void @dummy()
95 vec_eqv(vsll1
, vsll2
);
96 // CHECK: call <4 x i32> @llvm.ppc.vsx.xxleqv
98 // CHECK: call void @dummy()
99 vec_max(vsll1
, vsll2
);
100 // CHECK: call <2 x i64> @llvm.ppc.altivec.vmaxsd
102 // CHECK: call void @dummy()
103 vec_mergeh(vsll1
, vsll2
);
104 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
106 // CHECK: call void @dummy()
107 vec_mergel(vsll1
, vsll2
);
108 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
110 // CHECK: call void @dummy()
111 vec_mergee(vsll1
, vsll2
);
112 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
114 // CHECK: call void @dummy()
115 vec_mergeo(vsll1
, vsll2
);
116 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
118 // CHECK: call void @dummy()
119 vec_min(vsll1
, vsll2
);
120 // CHECK: call <2 x i64> @llvm.ppc.altivec.vminsd
122 // CHECK: call void @dummy()
123 vec_mul(vsll1
, vsll2
);
124 // CHECK: mul <2 x i64>
126 // CHECK: call void @dummy()
127 vec_nand(vsll1
, vsll2
);
128 // CHECK: and <2 x i64>
129 // CHECK: xor <2 x i64>
131 // CHECK: call void @dummy()
132 vec_nor(vsll1
, vsll2
);
133 // CHECK: or <2 x i64>
134 // CHECK: xor <2 x i64>
136 // CHECK: call void @dummy()
137 vec_or(vsll1
, vsll2
);
138 // CHECK: or <2 x i64>
140 // CHECK: call void @dummy()
141 vec_orc(vsll1
, vsll2
);
142 // CHECK: xor <2 x i64>
143 // CHECK: or <2 x i64>
145 // CHECK: call void @dummy()
146 vec_vor(vsll1
, vsll2
);
147 // CHECK: or <2 x i64>
149 // CHECK: call void @dummy()
150 vec_pack(vsll1
, vsll2
);
151 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
153 // CHECK: call void @dummy()
154 vec_vpkudum(vsll1
, vsll2
);
155 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
157 // CHECK: call void @dummy()
158 vec_packs(vsll1
, vsll2
);
159 // CHECK: call <4 x i32> @llvm.ppc.altivec.vpksdss
161 // CHECK: call void @dummy()
162 vec_vpkudus(vull1
, vull2
);
163 // CHECK: call <4 x i32> @llvm.ppc.altivec.vpkudus
165 // CHECK: call void @dummy()
166 vec_packsu(vsll1
, vsll2
);
167 // CHECK: call <4 x i32> @llvm.ppc.altivec.vpksdus
169 // CHECK: call void @dummy()
170 vec_rl(vull1
, vull2
);
171 // CHECK: call <2 x i64> @llvm.ppc.altivec.vrld
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>
180 // CHECK: call void @dummy()
181 vec_sl(vull1
, vull2
);
182 // CHECK: shl <2 x i64>
184 // CHECK: call void @dummy()
185 vec_sld(vsll1
, vsll2
, 2);
186 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
188 // CHECK: call void @dummy()
189 vec_sldw(vsll1
, vsll2
, 2);
190 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
192 // CHECK: call void @dummy()
194 // CHECK: call <4 x i32> @llvm.ppc.altivec.vsl
196 // CHECK: call void @dummy()
198 // CHECK: call <4 x i32> @llvm.ppc.altivec.vslo
200 // CHECK: call void @dummy()
202 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm
204 // CHECK: call void @dummy()
205 vec_sr(vull1
, vull2
);
206 // CHECK: lshr <2 x i64>
208 // CHECK: call void @dummy()
209 vec_sra(vsll1
, vull2
);
210 // CHECK: ashr <2 x i64>
212 // CHECK: call void @dummy()
214 // CHECK: call <4 x i32> @llvm.ppc.altivec.vsr
216 // CHECK: call void @dummy()
218 // CHECK: call <4 x i32> @llvm.ppc.altivec.vsro
220 // CHECK: call void @dummy()
221 vec_sub(vsll1
, vsll2
);
222 // CHECK: sub <2 x i64>
224 // CHECK: call void @dummy()
225 vec_xor(vsll1
, vsll2
);
226 // CHECK: xor <2 x i64>
228 // CHECK: call void @dummy()
229 vec_vxor(vsll1
, vsll2
);
230 // CHECK: xor <2 x i64>
232 // CHECK: call void @dummy()
233 vec_extract(vsll1
, 2);
234 // CHECK: extractelement <2 x i64>
236 // CHECK: call void @dummy()
237 vec_all_eq(vsll1
, vsll2
);
238 // CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p
240 // CHECK: call void @dummy()
241 vec_all_ge(vsll1
, vsll2
);
242 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
244 // CHECK: call void @dummy()
245 vec_all_gt(vsll1
, vsll2
);
246 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
248 // CHECK: call void @dummy()
249 vec_all_le(vsll1
, vsll2
);
250 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
252 // CHECK: call void @dummy()
253 vec_all_lt(vsll1
, vsll2
);
254 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
256 // CHECK: call void @dummy()
257 vec_all_ne(vsll1
, vsll2
);
258 // CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p
260 // CHECK: call void @dummy()
261 vec_any_eq(vsll1
, vsll2
);
262 // CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p
264 // CHECK: call void @dummy()
265 vec_any_ge(vsll1
, vsll2
);
266 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
268 // CHECK: call void @dummy()
269 vec_any_gt(vsll1
, vsll2
);
270 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
272 // CHECK: call void @dummy()
273 vec_any_le(vsll1
, vsll2
);
274 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
276 // CHECK: call void @dummy()
277 vec_any_lt(vsll1
, vsll2
);
278 // CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p
280 // CHECK: call void @dummy()
281 vec_any_ne(vsll1
, vsll2
);
282 // CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p
284 // CHECK: call void @dummy()
286 // CHECK: call <16 x i8> @llvm.ppc.altivec.vgbbd
288 // CHECK: call void @dummy()
290 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 0>
292 // CHECK: call void @dummy()
294 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm