Fix pastos in handling of AVX cvttsd2si, PR8491.
[oota-llvm.git] / test / CodeGen / X86 / avx-intrinsics-x86.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -march=x86 -mcpu=corei7 -mattr=avx | FileCheck %s
2
3 define <2 x i64> @test_x86_aesni_aesdec(<2 x i64> %a0, <2 x i64> %a1) {
4   ; CHECK: vaesdec
5   %res = call <2 x i64> @llvm.x86.aesni.aesdec(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
6   ret <2 x i64> %res
7 }
8 declare <2 x i64> @llvm.x86.aesni.aesdec(<2 x i64>, <2 x i64>) nounwind readnone
9
10
11 define <2 x i64> @test_x86_aesni_aesdeclast(<2 x i64> %a0, <2 x i64> %a1) {
12   ; CHECK: vaesdeclast
13   %res = call <2 x i64> @llvm.x86.aesni.aesdeclast(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
14   ret <2 x i64> %res
15 }
16 declare <2 x i64> @llvm.x86.aesni.aesdeclast(<2 x i64>, <2 x i64>) nounwind readnone
17
18
19 define <2 x i64> @test_x86_aesni_aesenc(<2 x i64> %a0, <2 x i64> %a1) {
20   ; CHECK: vaesenc
21   %res = call <2 x i64> @llvm.x86.aesni.aesenc(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
22   ret <2 x i64> %res
23 }
24 declare <2 x i64> @llvm.x86.aesni.aesenc(<2 x i64>, <2 x i64>) nounwind readnone
25
26
27 define <2 x i64> @test_x86_aesni_aesenclast(<2 x i64> %a0, <2 x i64> %a1) {
28   ; CHECK: vaesenclast
29   %res = call <2 x i64> @llvm.x86.aesni.aesenclast(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
30   ret <2 x i64> %res
31 }
32 declare <2 x i64> @llvm.x86.aesni.aesenclast(<2 x i64>, <2 x i64>) nounwind readnone
33
34
35 define <2 x i64> @test_x86_aesni_aesimc(<2 x i64> %a0) {
36   ; CHECK: vaesimc
37   %res = call <2 x i64> @llvm.x86.aesni.aesimc(<2 x i64> %a0) ; <<2 x i64>> [#uses=1]
38   ret <2 x i64> %res
39 }
40 declare <2 x i64> @llvm.x86.aesni.aesimc(<2 x i64>) nounwind readnone
41
42
43 define <2 x i64> @test_x86_aesni_aeskeygenassist(<2 x i64> %a0) {
44   ; CHECK: vaeskeygenassist
45   %res = call <2 x i64> @llvm.x86.aesni.aeskeygenassist(<2 x i64> %a0, i8 7) ; <<2 x i64>> [#uses=1]
46   ret <2 x i64> %res
47 }
48 declare <2 x i64> @llvm.x86.aesni.aeskeygenassist(<2 x i64>, i8) nounwind readnone
49
50
51 define <2 x double> @test_x86_sse2_add_sd(<2 x double> %a0, <2 x double> %a1) {
52   ; CHECK: vaddsd
53   %res = call <2 x double> @llvm.x86.sse2.add.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
54   ret <2 x double> %res
55 }
56 declare <2 x double> @llvm.x86.sse2.add.sd(<2 x double>, <2 x double>) nounwind readnone
57
58
59 define <2 x double> @test_x86_sse2_cmp_pd(<2 x double> %a0, <2 x double> %a1) {
60   ; CHECK: vcmpordpd
61   %res = call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %a0, <2 x double> %a1, i8 7) ; <<2 x double>> [#uses=1]
62   ret <2 x double> %res
63 }
64 declare <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double>, <2 x double>, i8) nounwind readnone
65
66
67 define <2 x double> @test_x86_sse2_cmp_sd(<2 x double> %a0, <2 x double> %a1) {
68   ; CHECK: vcmpordsd
69   %res = call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %a0, <2 x double> %a1, i8 7) ; <<2 x double>> [#uses=1]
70   ret <2 x double> %res
71 }
72 declare <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double>, <2 x double>, i8) nounwind readnone
73
74
75 define i32 @test_x86_sse2_comieq_sd(<2 x double> %a0, <2 x double> %a1) {
76   ; CHECK: vcomisd
77   ; CHECK: sete
78   ; CHECK: movzbl
79   %res = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
80   ret i32 %res
81 }
82 declare i32 @llvm.x86.sse2.comieq.sd(<2 x double>, <2 x double>) nounwind readnone
83
84
85 define i32 @test_x86_sse2_comige_sd(<2 x double> %a0, <2 x double> %a1) {
86   ; CHECK: vcomisd
87   ; CHECK: setae
88   ; CHECK: movzbl
89   %res = call i32 @llvm.x86.sse2.comige.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
90   ret i32 %res
91 }
92 declare i32 @llvm.x86.sse2.comige.sd(<2 x double>, <2 x double>) nounwind readnone
93
94
95 define i32 @test_x86_sse2_comigt_sd(<2 x double> %a0, <2 x double> %a1) {
96   ; CHECK: vcomisd
97   ; CHECK: seta
98   ; CHECK: movzbl
99   %res = call i32 @llvm.x86.sse2.comigt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
100   ret i32 %res
101 }
102 declare i32 @llvm.x86.sse2.comigt.sd(<2 x double>, <2 x double>) nounwind readnone
103
104
105 define i32 @test_x86_sse2_comile_sd(<2 x double> %a0, <2 x double> %a1) {
106   ; CHECK: vcomisd
107   ; CHECK: setbe
108   ; CHECK: movzbl
109   %res = call i32 @llvm.x86.sse2.comile.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
110   ret i32 %res
111 }
112 declare i32 @llvm.x86.sse2.comile.sd(<2 x double>, <2 x double>) nounwind readnone
113
114
115 define i32 @test_x86_sse2_comilt_sd(<2 x double> %a0, <2 x double> %a1) {
116   ; CHECK: vcomisd
117   ; CHECK: setb
118   ; CHECK: movzbl
119   %res = call i32 @llvm.x86.sse2.comilt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
120   ret i32 %res
121 }
122 declare i32 @llvm.x86.sse2.comilt.sd(<2 x double>, <2 x double>) nounwind readnone
123
124
125 define i32 @test_x86_sse2_comineq_sd(<2 x double> %a0, <2 x double> %a1) {
126   ; CHECK: vcomisd
127   ; CHECK: setne
128   ; CHECK: movzbl
129   %res = call i32 @llvm.x86.sse2.comineq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
130   ret i32 %res
131 }
132 declare i32 @llvm.x86.sse2.comineq.sd(<2 x double>, <2 x double>) nounwind readnone
133
134
135 define <2 x double> @test_x86_sse2_cvtdq2pd(<4 x i32> %a0) {
136   ; CHECK: vcvtdq2pd
137   %res = call <2 x double> @llvm.x86.sse2.cvtdq2pd(<4 x i32> %a0) ; <<2 x double>> [#uses=1]
138   ret <2 x double> %res
139 }
140 declare <2 x double> @llvm.x86.sse2.cvtdq2pd(<4 x i32>) nounwind readnone
141
142
143 define <4 x float> @test_x86_sse2_cvtdq2ps(<4 x i32> %a0) {
144   ; CHECK: vcvtdq2ps
145   %res = call <4 x float> @llvm.x86.sse2.cvtdq2ps(<4 x i32> %a0) ; <<4 x float>> [#uses=1]
146   ret <4 x float> %res
147 }
148 declare <4 x float> @llvm.x86.sse2.cvtdq2ps(<4 x i32>) nounwind readnone
149
150
151 define <4 x i32> @test_x86_sse2_cvtpd2dq(<2 x double> %a0) {
152   ; CHECK: vcvtpd2dq
153   %res = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> %a0) ; <<4 x i32>> [#uses=1]
154   ret <4 x i32> %res
155 }
156 declare <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double>) nounwind readnone
157
158
159 define <4 x float> @test_x86_sse2_cvtpd2ps(<2 x double> %a0) {
160   ; CHECK: vcvtpd2ps
161   %res = call <4 x float> @llvm.x86.sse2.cvtpd2ps(<2 x double> %a0) ; <<4 x float>> [#uses=1]
162   ret <4 x float> %res
163 }
164 declare <4 x float> @llvm.x86.sse2.cvtpd2ps(<2 x double>) nounwind readnone
165
166
167 define <4 x i32> @test_x86_sse2_cvtps2dq(<4 x float> %a0) {
168   ; CHECK: vcvtps2dq
169   %res = call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> %a0) ; <<4 x i32>> [#uses=1]
170   ret <4 x i32> %res
171 }
172 declare <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float>) nounwind readnone
173
174
175 define <2 x double> @test_x86_sse2_cvtps2pd(<4 x float> %a0) {
176   ; CHECK: vcvtps2pd
177   %res = call <2 x double> @llvm.x86.sse2.cvtps2pd(<4 x float> %a0) ; <<2 x double>> [#uses=1]
178   ret <2 x double> %res
179 }
180 declare <2 x double> @llvm.x86.sse2.cvtps2pd(<4 x float>) nounwind readnone
181
182
183 define i32 @test_x86_sse2_cvtsd2si(<2 x double> %a0) {
184   ; CHECK: vcvtsd2si
185   %res = call i32 @llvm.x86.sse2.cvtsd2si(<2 x double> %a0) ; <i32> [#uses=1]
186   ret i32 %res
187 }
188 declare i32 @llvm.x86.sse2.cvtsd2si(<2 x double>) nounwind readnone
189
190
191 define <4 x float> @test_x86_sse2_cvtsd2ss(<4 x float> %a0, <2 x double> %a1) {
192   ; CHECK: vcvtsd2ss
193   %res = call <4 x float> @llvm.x86.sse2.cvtsd2ss(<4 x float> %a0, <2 x double> %a1) ; <<4 x float>> [#uses=1]
194   ret <4 x float> %res
195 }
196 declare <4 x float> @llvm.x86.sse2.cvtsd2ss(<4 x float>, <2 x double>) nounwind readnone
197
198
199 define <2 x double> @test_x86_sse2_cvtsi2sd(<2 x double> %a0) {
200   ; CHECK: movl
201   ; CHECK: vcvtsi2sd
202   %res = call <2 x double> @llvm.x86.sse2.cvtsi2sd(<2 x double> %a0, i32 7) ; <<2 x double>> [#uses=1]
203   ret <2 x double> %res
204 }
205 declare <2 x double> @llvm.x86.sse2.cvtsi2sd(<2 x double>, i32) nounwind readnone
206
207
208 define <2 x double> @test_x86_sse2_cvtss2sd(<2 x double> %a0, <4 x float> %a1) {
209   ; CHECK: vcvtss2sd
210   %res = call <2 x double> @llvm.x86.sse2.cvtss2sd(<2 x double> %a0, <4 x float> %a1) ; <<2 x double>> [#uses=1]
211   ret <2 x double> %res
212 }
213 declare <2 x double> @llvm.x86.sse2.cvtss2sd(<2 x double>, <4 x float>) nounwind readnone
214
215
216 define <4 x i32> @test_x86_sse2_cvttpd2dq(<2 x double> %a0) {
217   ; CHECK: vcvttpd2dq
218   %res = call <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double> %a0) ; <<4 x i32>> [#uses=1]
219   ret <4 x i32> %res
220 }
221 declare <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double>) nounwind readnone
222
223
224 define <4 x i32> @test_x86_sse2_cvttps2dq(<4 x float> %a0) {
225   ; CHECK: vcvttps2dq
226   %res = call <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float> %a0) ; <<4 x i32>> [#uses=1]
227   ret <4 x i32> %res
228 }
229 declare <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float>) nounwind readnone
230
231
232 define i32 @test_x86_sse2_cvttsd2si(<2 x double> %a0) {
233   ; CHECK: vcvttsd2si
234   %res = call i32 @llvm.x86.sse2.cvttsd2si(<2 x double> %a0) ; <i32> [#uses=1]
235   ret i32 %res
236 }
237 declare i32 @llvm.x86.sse2.cvttsd2si(<2 x double>) nounwind readnone
238
239
240 define <2 x double> @test_x86_sse2_div_sd(<2 x double> %a0, <2 x double> %a1) {
241   ; CHECK: vdivsd
242   %res = call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
243   ret <2 x double> %res
244 }
245 declare <2 x double> @llvm.x86.sse2.div.sd(<2 x double>, <2 x double>) nounwind readnone
246
247
248 define <16 x i8> @test_x86_sse2_loadu_dq(i8* %a0) {
249   ; CHECK: movl
250   ; CHECK: vmovdqu
251   %res = call <16 x i8> @llvm.x86.sse2.loadu.dq(i8* %a0) ; <<16 x i8>> [#uses=1]
252   ret <16 x i8> %res
253 }
254 declare <16 x i8> @llvm.x86.sse2.loadu.dq(i8*) nounwind readonly
255
256
257 define <2 x double> @test_x86_sse2_loadu_pd(i8* %a0) {
258   ; CHECK: movl
259   ; CHECK: vmovupd
260   %res = call <2 x double> @llvm.x86.sse2.loadu.pd(i8* %a0) ; <<2 x double>> [#uses=1]
261   ret <2 x double> %res
262 }
263 declare <2 x double> @llvm.x86.sse2.loadu.pd(i8*) nounwind readonly
264
265
266 define void @test_x86_sse2_maskmov_dqu(<16 x i8> %a0, <16 x i8> %a1, i8* %a2) {
267   ; CHECK: pushl
268   ; CHECK: movl
269   ; CHECK: vmaskmovdqu
270   ; CHECK: popl
271   call void @llvm.x86.sse2.maskmov.dqu(<16 x i8> %a0, <16 x i8> %a1, i8* %a2)
272   ret void
273 }
274 declare void @llvm.x86.sse2.maskmov.dqu(<16 x i8>, <16 x i8>, i8*) nounwind
275
276
277 define <2 x double> @test_x86_sse2_max_pd(<2 x double> %a0, <2 x double> %a1) {
278   ; CHECK: vmaxpd
279   %res = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
280   ret <2 x double> %res
281 }
282 declare <2 x double> @llvm.x86.sse2.max.pd(<2 x double>, <2 x double>) nounwind readnone
283
284
285 define <2 x double> @test_x86_sse2_max_sd(<2 x double> %a0, <2 x double> %a1) {
286   ; CHECK: vmaxsd
287   %res = call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
288   ret <2 x double> %res
289 }
290 declare <2 x double> @llvm.x86.sse2.max.sd(<2 x double>, <2 x double>) nounwind readnone
291
292
293 define <2 x double> @test_x86_sse2_min_pd(<2 x double> %a0, <2 x double> %a1) {
294   ; CHECK: vminpd
295   %res = call <2 x double> @llvm.x86.sse2.min.pd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
296   ret <2 x double> %res
297 }
298 declare <2 x double> @llvm.x86.sse2.min.pd(<2 x double>, <2 x double>) nounwind readnone
299
300
301 define <2 x double> @test_x86_sse2_min_sd(<2 x double> %a0, <2 x double> %a1) {
302   ; CHECK: vminsd
303   %res = call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
304   ret <2 x double> %res
305 }
306 declare <2 x double> @llvm.x86.sse2.min.sd(<2 x double>, <2 x double>) nounwind readnone
307
308
309 define i32 @test_x86_sse2_movmsk_pd(<2 x double> %a0) {
310   ; CHECK: vmovmskpd
311   %res = call i32 @llvm.x86.sse2.movmsk.pd(<2 x double> %a0) ; <i32> [#uses=1]
312   ret i32 %res
313 }
314 declare i32 @llvm.x86.sse2.movmsk.pd(<2 x double>) nounwind readnone
315
316
317 define void @test_x86_sse2_movnt_dq(i8* %a0, <2 x i64> %a1) {
318   ; CHECK: movl
319   ; CHECK: vmovntdq
320   call void @llvm.x86.sse2.movnt.dq(i8* %a0, <2 x i64> %a1)
321   ret void
322 }
323 declare void @llvm.x86.sse2.movnt.dq(i8*, <2 x i64>) nounwind
324
325
326 define void @test_x86_sse2_movnt_pd(i8* %a0, <2 x double> %a1) {
327   ; CHECK: movl
328   ; CHECK: vmovntpd
329   call void @llvm.x86.sse2.movnt.pd(i8* %a0, <2 x double> %a1)
330   ret void
331 }
332 declare void @llvm.x86.sse2.movnt.pd(i8*, <2 x double>) nounwind
333
334
335 define <2 x double> @test_x86_sse2_mul_sd(<2 x double> %a0, <2 x double> %a1) {
336   ; CHECK: vmulsd
337   %res = call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
338   ret <2 x double> %res
339 }
340 declare <2 x double> @llvm.x86.sse2.mul.sd(<2 x double>, <2 x double>) nounwind readnone
341
342
343 define <8 x i16> @test_x86_sse2_packssdw_128(<4 x i32> %a0, <4 x i32> %a1) {
344   ; CHECK: vpackssdw
345   %res = call <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32> %a0, <4 x i32> %a1) ; <<8 x i16>> [#uses=1]
346   ret <8 x i16> %res
347 }
348 declare <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32>, <4 x i32>) nounwind readnone
349
350
351 define <16 x i8> @test_x86_sse2_packsswb_128(<8 x i16> %a0, <8 x i16> %a1) {
352   ; CHECK: vpacksswb
353   %res = call <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16> %a0, <8 x i16> %a1) ; <<16 x i8>> [#uses=1]
354   ret <16 x i8> %res
355 }
356 declare <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16>, <8 x i16>) nounwind readnone
357
358
359 define <16 x i8> @test_x86_sse2_packuswb_128(<8 x i16> %a0, <8 x i16> %a1) {
360   ; CHECK: vpackuswb
361   %res = call <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16> %a0, <8 x i16> %a1) ; <<16 x i8>> [#uses=1]
362   ret <16 x i8> %res
363 }
364 declare <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16>, <8 x i16>) nounwind readnone
365
366
367 define <16 x i8> @test_x86_sse2_padds_b(<16 x i8> %a0, <16 x i8> %a1) {
368   ; CHECK: vpaddsb
369   %res = call <16 x i8> @llvm.x86.sse2.padds.b(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
370   ret <16 x i8> %res
371 }
372 declare <16 x i8> @llvm.x86.sse2.padds.b(<16 x i8>, <16 x i8>) nounwind readnone
373
374
375 define <8 x i16> @test_x86_sse2_padds_w(<8 x i16> %a0, <8 x i16> %a1) {
376   ; CHECK: vpaddsw
377   %res = call <8 x i16> @llvm.x86.sse2.padds.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
378   ret <8 x i16> %res
379 }
380 declare <8 x i16> @llvm.x86.sse2.padds.w(<8 x i16>, <8 x i16>) nounwind readnone
381
382
383 define <16 x i8> @test_x86_sse2_paddus_b(<16 x i8> %a0, <16 x i8> %a1) {
384   ; CHECK: vpaddusb
385   %res = call <16 x i8> @llvm.x86.sse2.paddus.b(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
386   ret <16 x i8> %res
387 }
388 declare <16 x i8> @llvm.x86.sse2.paddus.b(<16 x i8>, <16 x i8>) nounwind readnone
389
390
391 define <8 x i16> @test_x86_sse2_paddus_w(<8 x i16> %a0, <8 x i16> %a1) {
392   ; CHECK: vpaddusw
393   %res = call <8 x i16> @llvm.x86.sse2.paddus.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
394   ret <8 x i16> %res
395 }
396 declare <8 x i16> @llvm.x86.sse2.paddus.w(<8 x i16>, <8 x i16>) nounwind readnone
397
398
399 define <16 x i8> @test_x86_sse2_pavg_b(<16 x i8> %a0, <16 x i8> %a1) {
400   ; CHECK: vpavgb
401   %res = call <16 x i8> @llvm.x86.sse2.pavg.b(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
402   ret <16 x i8> %res
403 }
404 declare <16 x i8> @llvm.x86.sse2.pavg.b(<16 x i8>, <16 x i8>) nounwind readnone
405
406
407 define <8 x i16> @test_x86_sse2_pavg_w(<8 x i16> %a0, <8 x i16> %a1) {
408   ; CHECK: vpavgw
409   %res = call <8 x i16> @llvm.x86.sse2.pavg.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
410   ret <8 x i16> %res
411 }
412 declare <8 x i16> @llvm.x86.sse2.pavg.w(<8 x i16>, <8 x i16>) nounwind readnone
413
414
415 define <16 x i8> @test_x86_sse2_pcmpeq_b(<16 x i8> %a0, <16 x i8> %a1) {
416   ; CHECK: vpcmpeqb
417   %res = call <16 x i8> @llvm.x86.sse2.pcmpeq.b(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
418   ret <16 x i8> %res
419 }
420 declare <16 x i8> @llvm.x86.sse2.pcmpeq.b(<16 x i8>, <16 x i8>) nounwind readnone
421
422
423 define <4 x i32> @test_x86_sse2_pcmpeq_d(<4 x i32> %a0, <4 x i32> %a1) {
424   ; CHECK: vpcmpeqd
425   %res = call <4 x i32> @llvm.x86.sse2.pcmpeq.d(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
426   ret <4 x i32> %res
427 }
428 declare <4 x i32> @llvm.x86.sse2.pcmpeq.d(<4 x i32>, <4 x i32>) nounwind readnone
429
430
431 define <8 x i16> @test_x86_sse2_pcmpeq_w(<8 x i16> %a0, <8 x i16> %a1) {
432   ; CHECK: vpcmpeqw
433   %res = call <8 x i16> @llvm.x86.sse2.pcmpeq.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
434   ret <8 x i16> %res
435 }
436 declare <8 x i16> @llvm.x86.sse2.pcmpeq.w(<8 x i16>, <8 x i16>) nounwind readnone
437
438
439 define <16 x i8> @test_x86_sse2_pcmpgt_b(<16 x i8> %a0, <16 x i8> %a1) {
440   ; CHECK: vpcmpgtb
441   %res = call <16 x i8> @llvm.x86.sse2.pcmpgt.b(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
442   ret <16 x i8> %res
443 }
444 declare <16 x i8> @llvm.x86.sse2.pcmpgt.b(<16 x i8>, <16 x i8>) nounwind readnone
445
446
447 define <4 x i32> @test_x86_sse2_pcmpgt_d(<4 x i32> %a0, <4 x i32> %a1) {
448   ; CHECK: vpcmpgtd
449   %res = call <4 x i32> @llvm.x86.sse2.pcmpgt.d(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
450   ret <4 x i32> %res
451 }
452 declare <4 x i32> @llvm.x86.sse2.pcmpgt.d(<4 x i32>, <4 x i32>) nounwind readnone
453
454
455 define <8 x i16> @test_x86_sse2_pcmpgt_w(<8 x i16> %a0, <8 x i16> %a1) {
456   ; CHECK: vpcmpgtw
457   %res = call <8 x i16> @llvm.x86.sse2.pcmpgt.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
458   ret <8 x i16> %res
459 }
460 declare <8 x i16> @llvm.x86.sse2.pcmpgt.w(<8 x i16>, <8 x i16>) nounwind readnone
461
462
463 define <4 x i32> @test_x86_sse2_pmadd_wd(<8 x i16> %a0, <8 x i16> %a1) {
464   ; CHECK: vpmaddwd
465   %res = call <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16> %a0, <8 x i16> %a1) ; <<4 x i32>> [#uses=1]
466   ret <4 x i32> %res
467 }
468 declare <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16>, <8 x i16>) nounwind readnone
469
470
471 define <8 x i16> @test_x86_sse2_pmaxs_w(<8 x i16> %a0, <8 x i16> %a1) {
472   ; CHECK: vpmaxsw
473   %res = call <8 x i16> @llvm.x86.sse2.pmaxs.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
474   ret <8 x i16> %res
475 }
476 declare <8 x i16> @llvm.x86.sse2.pmaxs.w(<8 x i16>, <8 x i16>) nounwind readnone
477
478
479 define <16 x i8> @test_x86_sse2_pmaxu_b(<16 x i8> %a0, <16 x i8> %a1) {
480   ; CHECK: vpmaxub
481   %res = call <16 x i8> @llvm.x86.sse2.pmaxu.b(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
482   ret <16 x i8> %res
483 }
484 declare <16 x i8> @llvm.x86.sse2.pmaxu.b(<16 x i8>, <16 x i8>) nounwind readnone
485
486
487 define <8 x i16> @test_x86_sse2_pmins_w(<8 x i16> %a0, <8 x i16> %a1) {
488   ; CHECK: vpminsw
489   %res = call <8 x i16> @llvm.x86.sse2.pmins.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
490   ret <8 x i16> %res
491 }
492 declare <8 x i16> @llvm.x86.sse2.pmins.w(<8 x i16>, <8 x i16>) nounwind readnone
493
494
495 define <16 x i8> @test_x86_sse2_pminu_b(<16 x i8> %a0, <16 x i8> %a1) {
496   ; CHECK: vpminub
497   %res = call <16 x i8> @llvm.x86.sse2.pminu.b(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
498   ret <16 x i8> %res
499 }
500 declare <16 x i8> @llvm.x86.sse2.pminu.b(<16 x i8>, <16 x i8>) nounwind readnone
501
502
503 define i32 @test_x86_sse2_pmovmskb_128(<16 x i8> %a0) {
504   ; CHECK: vpmovmskb
505   %res = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %a0) ; <i32> [#uses=1]
506   ret i32 %res
507 }
508 declare i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8>) nounwind readnone
509
510
511 define <8 x i16> @test_x86_sse2_pmulh_w(<8 x i16> %a0, <8 x i16> %a1) {
512   ; CHECK: vpmulhw
513   %res = call <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
514   ret <8 x i16> %res
515 }
516 declare <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16>, <8 x i16>) nounwind readnone
517
518
519 define <8 x i16> @test_x86_sse2_pmulhu_w(<8 x i16> %a0, <8 x i16> %a1) {
520   ; CHECK: vpmulhuw
521   %res = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
522   ret <8 x i16> %res
523 }
524 declare <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16>, <8 x i16>) nounwind readnone
525
526
527 define <2 x i64> @test_x86_sse2_pmulu_dq(<4 x i32> %a0, <4 x i32> %a1) {
528   ; CHECK: vpmuludq
529   %res = call <2 x i64> @llvm.x86.sse2.pmulu.dq(<4 x i32> %a0, <4 x i32> %a1) ; <<2 x i64>> [#uses=1]
530   ret <2 x i64> %res
531 }
532 declare <2 x i64> @llvm.x86.sse2.pmulu.dq(<4 x i32>, <4 x i32>) nounwind readnone
533
534
535 define <2 x i64> @test_x86_sse2_psad_bw(<16 x i8> %a0, <16 x i8> %a1) {
536   ; CHECK: vpsadbw
537   %res = call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> %a0, <16 x i8> %a1) ; <<2 x i64>> [#uses=1]
538   ret <2 x i64> %res
539 }
540 declare <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8>, <16 x i8>) nounwind readnone
541
542
543 define <4 x i32> @test_x86_sse2_psll_d(<4 x i32> %a0, <4 x i32> %a1) {
544   ; CHECK: vpslld
545   %res = call <4 x i32> @llvm.x86.sse2.psll.d(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
546   ret <4 x i32> %res
547 }
548 declare <4 x i32> @llvm.x86.sse2.psll.d(<4 x i32>, <4 x i32>) nounwind readnone
549
550
551 define <2 x i64> @test_x86_sse2_psll_dq(<2 x i64> %a0) {
552   ; CHECK: vpslldq
553   %res = call <2 x i64> @llvm.x86.sse2.psll.dq(<2 x i64> %a0, i32 7) ; <<2 x i64>> [#uses=1]
554   ret <2 x i64> %res
555 }
556 declare <2 x i64> @llvm.x86.sse2.psll.dq(<2 x i64>, i32) nounwind readnone
557
558
559 define <2 x i64> @test_x86_sse2_psll_dq_bs(<2 x i64> %a0) {
560   ; CHECK: vpslldq
561   %res = call <2 x i64> @llvm.x86.sse2.psll.dq.bs(<2 x i64> %a0, i32 7) ; <<2 x i64>> [#uses=1]
562   ret <2 x i64> %res
563 }
564 declare <2 x i64> @llvm.x86.sse2.psll.dq.bs(<2 x i64>, i32) nounwind readnone
565
566
567 define <2 x i64> @test_x86_sse2_psll_q(<2 x i64> %a0, <2 x i64> %a1) {
568   ; CHECK: vpsllq
569   %res = call <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
570   ret <2 x i64> %res
571 }
572 declare <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64>, <2 x i64>) nounwind readnone
573
574
575 define <8 x i16> @test_x86_sse2_psll_w(<8 x i16> %a0, <8 x i16> %a1) {
576   ; CHECK: vpsllw
577   %res = call <8 x i16> @llvm.x86.sse2.psll.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
578   ret <8 x i16> %res
579 }
580 declare <8 x i16> @llvm.x86.sse2.psll.w(<8 x i16>, <8 x i16>) nounwind readnone
581
582
583 define <4 x i32> @test_x86_sse2_pslli_d(<4 x i32> %a0) {
584   ; CHECK: vpslld
585   %res = call <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32> %a0, i32 7) ; <<4 x i32>> [#uses=1]
586   ret <4 x i32> %res
587 }
588 declare <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32>, i32) nounwind readnone
589
590
591 define <2 x i64> @test_x86_sse2_pslli_q(<2 x i64> %a0) {
592   ; CHECK: vpsllq
593   %res = call <2 x i64> @llvm.x86.sse2.pslli.q(<2 x i64> %a0, i32 7) ; <<2 x i64>> [#uses=1]
594   ret <2 x i64> %res
595 }
596 declare <2 x i64> @llvm.x86.sse2.pslli.q(<2 x i64>, i32) nounwind readnone
597
598
599 define <8 x i16> @test_x86_sse2_pslli_w(<8 x i16> %a0) {
600   ; CHECK: vpsllw
601   %res = call <8 x i16> @llvm.x86.sse2.pslli.w(<8 x i16> %a0, i32 7) ; <<8 x i16>> [#uses=1]
602   ret <8 x i16> %res
603 }
604 declare <8 x i16> @llvm.x86.sse2.pslli.w(<8 x i16>, i32) nounwind readnone
605
606
607 define <4 x i32> @test_x86_sse2_psra_d(<4 x i32> %a0, <4 x i32> %a1) {
608   ; CHECK: vpsrad
609   %res = call <4 x i32> @llvm.x86.sse2.psra.d(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
610   ret <4 x i32> %res
611 }
612 declare <4 x i32> @llvm.x86.sse2.psra.d(<4 x i32>, <4 x i32>) nounwind readnone
613
614
615 define <8 x i16> @test_x86_sse2_psra_w(<8 x i16> %a0, <8 x i16> %a1) {
616   ; CHECK: vpsraw
617   %res = call <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
618   ret <8 x i16> %res
619 }
620 declare <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16>, <8 x i16>) nounwind readnone
621
622
623 define <4 x i32> @test_x86_sse2_psrai_d(<4 x i32> %a0) {
624   ; CHECK: vpsrad
625   %res = call <4 x i32> @llvm.x86.sse2.psrai.d(<4 x i32> %a0, i32 7) ; <<4 x i32>> [#uses=1]
626   ret <4 x i32> %res
627 }
628 declare <4 x i32> @llvm.x86.sse2.psrai.d(<4 x i32>, i32) nounwind readnone
629
630
631 define <8 x i16> @test_x86_sse2_psrai_w(<8 x i16> %a0) {
632   ; CHECK: vpsraw
633   %res = call <8 x i16> @llvm.x86.sse2.psrai.w(<8 x i16> %a0, i32 7) ; <<8 x i16>> [#uses=1]
634   ret <8 x i16> %res
635 }
636 declare <8 x i16> @llvm.x86.sse2.psrai.w(<8 x i16>, i32) nounwind readnone
637
638
639 define <4 x i32> @test_x86_sse2_psrl_d(<4 x i32> %a0, <4 x i32> %a1) {
640   ; CHECK: vpsrld
641   %res = call <4 x i32> @llvm.x86.sse2.psrl.d(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
642   ret <4 x i32> %res
643 }
644 declare <4 x i32> @llvm.x86.sse2.psrl.d(<4 x i32>, <4 x i32>) nounwind readnone
645
646
647 define <2 x i64> @test_x86_sse2_psrl_dq(<2 x i64> %a0) {
648   ; CHECK: vpsrldq
649   %res = call <2 x i64> @llvm.x86.sse2.psrl.dq(<2 x i64> %a0, i32 7) ; <<2 x i64>> [#uses=1]
650   ret <2 x i64> %res
651 }
652 declare <2 x i64> @llvm.x86.sse2.psrl.dq(<2 x i64>, i32) nounwind readnone
653
654
655 define <2 x i64> @test_x86_sse2_psrl_dq_bs(<2 x i64> %a0) {
656   ; CHECK: vpsrldq
657   %res = call <2 x i64> @llvm.x86.sse2.psrl.dq.bs(<2 x i64> %a0, i32 7) ; <<2 x i64>> [#uses=1]
658   ret <2 x i64> %res
659 }
660 declare <2 x i64> @llvm.x86.sse2.psrl.dq.bs(<2 x i64>, i32) nounwind readnone
661
662
663 define <2 x i64> @test_x86_sse2_psrl_q(<2 x i64> %a0, <2 x i64> %a1) {
664   ; CHECK: vpsrlq
665   %res = call <2 x i64> @llvm.x86.sse2.psrl.q(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
666   ret <2 x i64> %res
667 }
668 declare <2 x i64> @llvm.x86.sse2.psrl.q(<2 x i64>, <2 x i64>) nounwind readnone
669
670
671 define <8 x i16> @test_x86_sse2_psrl_w(<8 x i16> %a0, <8 x i16> %a1) {
672   ; CHECK: vpsrlw
673   %res = call <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
674   ret <8 x i16> %res
675 }
676 declare <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16>, <8 x i16>) nounwind readnone
677
678
679 define <4 x i32> @test_x86_sse2_psrli_d(<4 x i32> %a0) {
680   ; CHECK: vpsrld
681   %res = call <4 x i32> @llvm.x86.sse2.psrli.d(<4 x i32> %a0, i32 7) ; <<4 x i32>> [#uses=1]
682   ret <4 x i32> %res
683 }
684 declare <4 x i32> @llvm.x86.sse2.psrli.d(<4 x i32>, i32) nounwind readnone
685
686
687 define <2 x i64> @test_x86_sse2_psrli_q(<2 x i64> %a0) {
688   ; CHECK: vpsrlq
689   %res = call <2 x i64> @llvm.x86.sse2.psrli.q(<2 x i64> %a0, i32 7) ; <<2 x i64>> [#uses=1]
690   ret <2 x i64> %res
691 }
692 declare <2 x i64> @llvm.x86.sse2.psrli.q(<2 x i64>, i32) nounwind readnone
693
694
695 define <8 x i16> @test_x86_sse2_psrli_w(<8 x i16> %a0) {
696   ; CHECK: vpsrlw
697   %res = call <8 x i16> @llvm.x86.sse2.psrli.w(<8 x i16> %a0, i32 7) ; <<8 x i16>> [#uses=1]
698   ret <8 x i16> %res
699 }
700 declare <8 x i16> @llvm.x86.sse2.psrli.w(<8 x i16>, i32) nounwind readnone
701
702
703 define <16 x i8> @test_x86_sse2_psubs_b(<16 x i8> %a0, <16 x i8> %a1) {
704   ; CHECK: vpsubsb
705   %res = call <16 x i8> @llvm.x86.sse2.psubs.b(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
706   ret <16 x i8> %res
707 }
708 declare <16 x i8> @llvm.x86.sse2.psubs.b(<16 x i8>, <16 x i8>) nounwind readnone
709
710
711 define <8 x i16> @test_x86_sse2_psubs_w(<8 x i16> %a0, <8 x i16> %a1) {
712   ; CHECK: vpsubsw
713   %res = call <8 x i16> @llvm.x86.sse2.psubs.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
714   ret <8 x i16> %res
715 }
716 declare <8 x i16> @llvm.x86.sse2.psubs.w(<8 x i16>, <8 x i16>) nounwind readnone
717
718
719 define <16 x i8> @test_x86_sse2_psubus_b(<16 x i8> %a0, <16 x i8> %a1) {
720   ; CHECK: vpsubusb
721   %res = call <16 x i8> @llvm.x86.sse2.psubus.b(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
722   ret <16 x i8> %res
723 }
724 declare <16 x i8> @llvm.x86.sse2.psubus.b(<16 x i8>, <16 x i8>) nounwind readnone
725
726
727 define <8 x i16> @test_x86_sse2_psubus_w(<8 x i16> %a0, <8 x i16> %a1) {
728   ; CHECK: vpsubusw
729   %res = call <8 x i16> @llvm.x86.sse2.psubus.w(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
730   ret <8 x i16> %res
731 }
732 declare <8 x i16> @llvm.x86.sse2.psubus.w(<8 x i16>, <8 x i16>) nounwind readnone
733
734
735 define <2 x double> @test_x86_sse2_sqrt_pd(<2 x double> %a0) {
736   ; CHECK: vsqrtpd
737   %res = call <2 x double> @llvm.x86.sse2.sqrt.pd(<2 x double> %a0) ; <<2 x double>> [#uses=1]
738   ret <2 x double> %res
739 }
740 declare <2 x double> @llvm.x86.sse2.sqrt.pd(<2 x double>) nounwind readnone
741
742
743 define <2 x double> @test_x86_sse2_sqrt_sd(<2 x double> %a0) {
744   ; CHECK: vsqrtsd
745   %res = call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %a0) ; <<2 x double>> [#uses=1]
746   ret <2 x double> %res
747 }
748 declare <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double>) nounwind readnone
749
750
751 define void @test_x86_sse2_storel_dq(i8* %a0, <4 x i32> %a1) {
752   ; CHECK: movl
753   ; CHECK: vmovq
754   call void @llvm.x86.sse2.storel.dq(i8* %a0, <4 x i32> %a1)
755   ret void
756 }
757 declare void @llvm.x86.sse2.storel.dq(i8*, <4 x i32>) nounwind
758
759
760 define void @test_x86_sse2_storeu_dq(i8* %a0, <16 x i8> %a1) {
761   ; CHECK: movl
762   ; CHECK: vmovdqu
763   call void @llvm.x86.sse2.storeu.dq(i8* %a0, <16 x i8> %a1)
764   ret void
765 }
766 declare void @llvm.x86.sse2.storeu.dq(i8*, <16 x i8>) nounwind
767
768
769 define void @test_x86_sse2_storeu_pd(i8* %a0, <2 x double> %a1) {
770   ; CHECK: movl
771   ; CHECK: vmovupd
772   call void @llvm.x86.sse2.storeu.pd(i8* %a0, <2 x double> %a1)
773   ret void
774 }
775 declare void @llvm.x86.sse2.storeu.pd(i8*, <2 x double>) nounwind
776
777
778 define <2 x double> @test_x86_sse2_sub_sd(<2 x double> %a0, <2 x double> %a1) {
779   ; CHECK: vsubsd
780   %res = call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
781   ret <2 x double> %res
782 }
783 declare <2 x double> @llvm.x86.sse2.sub.sd(<2 x double>, <2 x double>) nounwind readnone
784
785
786 define i32 @test_x86_sse2_ucomieq_sd(<2 x double> %a0, <2 x double> %a1) {
787   ; CHECK: vucomisd
788   ; CHECK: sete
789   ; CHECK: movzbl
790   %res = call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
791   ret i32 %res
792 }
793 declare i32 @llvm.x86.sse2.ucomieq.sd(<2 x double>, <2 x double>) nounwind readnone
794
795
796 define i32 @test_x86_sse2_ucomige_sd(<2 x double> %a0, <2 x double> %a1) {
797   ; CHECK: vucomisd
798   ; CHECK: setae
799   ; CHECK: movzbl
800   %res = call i32 @llvm.x86.sse2.ucomige.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
801   ret i32 %res
802 }
803 declare i32 @llvm.x86.sse2.ucomige.sd(<2 x double>, <2 x double>) nounwind readnone
804
805
806 define i32 @test_x86_sse2_ucomigt_sd(<2 x double> %a0, <2 x double> %a1) {
807   ; CHECK: vucomisd
808   ; CHECK: seta
809   ; CHECK: movzbl
810   %res = call i32 @llvm.x86.sse2.ucomigt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
811   ret i32 %res
812 }
813 declare i32 @llvm.x86.sse2.ucomigt.sd(<2 x double>, <2 x double>) nounwind readnone
814
815
816 define i32 @test_x86_sse2_ucomile_sd(<2 x double> %a0, <2 x double> %a1) {
817   ; CHECK: vucomisd
818   ; CHECK: setbe
819   ; CHECK: movzbl
820   %res = call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
821   ret i32 %res
822 }
823 declare i32 @llvm.x86.sse2.ucomile.sd(<2 x double>, <2 x double>) nounwind readnone
824
825
826 define i32 @test_x86_sse2_ucomilt_sd(<2 x double> %a0, <2 x double> %a1) {
827   ; CHECK: vucomisd
828   ; CHECK: setb
829   ; CHECK: movzbl
830   %res = call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
831   ret i32 %res
832 }
833 declare i32 @llvm.x86.sse2.ucomilt.sd(<2 x double>, <2 x double>) nounwind readnone
834
835
836 define i32 @test_x86_sse2_ucomineq_sd(<2 x double> %a0, <2 x double> %a1) {
837   ; CHECK: vucomisd
838   ; CHECK: setne
839   ; CHECK: movzbl
840   %res = call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
841   ret i32 %res
842 }
843 declare i32 @llvm.x86.sse2.ucomineq.sd(<2 x double>, <2 x double>) nounwind readnone
844
845
846 define <2 x double> @test_x86_sse3_addsub_pd(<2 x double> %a0, <2 x double> %a1) {
847   ; CHECK: vaddsubpd
848   %res = call <2 x double> @llvm.x86.sse3.addsub.pd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
849   ret <2 x double> %res
850 }
851 declare <2 x double> @llvm.x86.sse3.addsub.pd(<2 x double>, <2 x double>) nounwind readnone
852
853
854 define <4 x float> @test_x86_sse3_addsub_ps(<4 x float> %a0, <4 x float> %a1) {
855   ; CHECK: vaddsubps
856   %res = call <4 x float> @llvm.x86.sse3.addsub.ps(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
857   ret <4 x float> %res
858 }
859 declare <4 x float> @llvm.x86.sse3.addsub.ps(<4 x float>, <4 x float>) nounwind readnone
860
861
862 define <2 x double> @test_x86_sse3_hadd_pd(<2 x double> %a0, <2 x double> %a1) {
863   ; CHECK: vhaddpd
864   %res = call <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
865   ret <2 x double> %res
866 }
867 declare <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double>, <2 x double>) nounwind readnone
868
869
870 define <4 x float> @test_x86_sse3_hadd_ps(<4 x float> %a0, <4 x float> %a1) {
871   ; CHECK: vhaddps
872   %res = call <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
873   ret <4 x float> %res
874 }
875 declare <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float>, <4 x float>) nounwind readnone
876
877
878 define <2 x double> @test_x86_sse3_hsub_pd(<2 x double> %a0, <2 x double> %a1) {
879   ; CHECK: vhsubpd
880   %res = call <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
881   ret <2 x double> %res
882 }
883 declare <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double>, <2 x double>) nounwind readnone
884
885
886 define <4 x float> @test_x86_sse3_hsub_ps(<4 x float> %a0, <4 x float> %a1) {
887   ; CHECK: vhsubps
888   %res = call <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
889   ret <4 x float> %res
890 }
891 declare <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float>, <4 x float>) nounwind readnone
892
893
894 define <16 x i8> @test_x86_sse3_ldu_dq(i8* %a0) {
895   ; CHECK: movl
896   ; CHECK: vlddqu
897   %res = call <16 x i8> @llvm.x86.sse3.ldu.dq(i8* %a0) ; <<16 x i8>> [#uses=1]
898   ret <16 x i8> %res
899 }
900 declare <16 x i8> @llvm.x86.sse3.ldu.dq(i8*) nounwind readonly
901
902
903 define <2 x double> @test_x86_sse41_blendpd(<2 x double> %a0, <2 x double> %a1) {
904   ; CHECK: vblendpd
905   %res = call <2 x double> @llvm.x86.sse41.blendpd(<2 x double> %a0, <2 x double> %a1, i32 7) ; <<2 x double>> [#uses=1]
906   ret <2 x double> %res
907 }
908 declare <2 x double> @llvm.x86.sse41.blendpd(<2 x double>, <2 x double>, i32) nounwind readnone
909
910
911 define <4 x float> @test_x86_sse41_blendps(<4 x float> %a0, <4 x float> %a1) {
912   ; CHECK: vblendps
913   %res = call <4 x float> @llvm.x86.sse41.blendps(<4 x float> %a0, <4 x float> %a1, i32 7) ; <<4 x float>> [#uses=1]
914   ret <4 x float> %res
915 }
916 declare <4 x float> @llvm.x86.sse41.blendps(<4 x float>, <4 x float>, i32) nounwind readnone
917
918
919 define <2 x double> @test_x86_sse41_blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
920   ; CHECK: vblendvpd
921   %res = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) ; <<2 x double>> [#uses=1]
922   ret <2 x double> %res
923 }
924 declare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
925
926
927 define <4 x float> @test_x86_sse41_blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
928   ; CHECK: vblendvps
929   %res = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) ; <<4 x float>> [#uses=1]
930   ret <4 x float> %res
931 }
932 declare <4 x float> @llvm.x86.sse41.blendvps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
933
934
935 define <2 x double> @test_x86_sse41_dppd(<2 x double> %a0, <2 x double> %a1) {
936   ; CHECK: vdppd
937   %res = call <2 x double> @llvm.x86.sse41.dppd(<2 x double> %a0, <2 x double> %a1, i32 7) ; <<2 x double>> [#uses=1]
938   ret <2 x double> %res
939 }
940 declare <2 x double> @llvm.x86.sse41.dppd(<2 x double>, <2 x double>, i32) nounwind readnone
941
942
943 define <4 x float> @test_x86_sse41_dpps(<4 x float> %a0, <4 x float> %a1) {
944   ; CHECK: vdpps
945   %res = call <4 x float> @llvm.x86.sse41.dpps(<4 x float> %a0, <4 x float> %a1, i32 7) ; <<4 x float>> [#uses=1]
946   ret <4 x float> %res
947 }
948 declare <4 x float> @llvm.x86.sse41.dpps(<4 x float>, <4 x float>, i32) nounwind readnone
949
950
951 define <4 x float> @test_x86_sse41_insertps(<4 x float> %a0, <4 x float> %a1) {
952   ; CHECK: vinsertps
953   %res = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %a0, <4 x float> %a1, i32 7) ; <<4 x float>> [#uses=1]
954   ret <4 x float> %res
955 }
956 declare <4 x float> @llvm.x86.sse41.insertps(<4 x float>, <4 x float>, i32) nounwind readnone
957
958
959 define <2 x i64> @test_x86_sse41_movntdqa(i8* %a0) {
960   ; CHECK: movl
961   ; CHECK: vmovntdqa
962   %res = call <2 x i64> @llvm.x86.sse41.movntdqa(i8* %a0) ; <<2 x i64>> [#uses=1]
963   ret <2 x i64> %res
964 }
965 declare <2 x i64> @llvm.x86.sse41.movntdqa(i8*) nounwind readonly
966
967
968 define <16 x i8> @test_x86_sse41_mpsadbw(<16 x i8> %a0, <16 x i8> %a1) {
969   ; CHECK: vmpsadbw
970   %res = call <16 x i8> @llvm.x86.sse41.mpsadbw(<16 x i8> %a0, <16 x i8> %a1, i32 7) ; <<16 x i8>> [#uses=1]
971   ret <16 x i8> %res
972 }
973 declare <16 x i8> @llvm.x86.sse41.mpsadbw(<16 x i8>, <16 x i8>, i32) nounwind readnone
974
975
976 define <8 x i16> @test_x86_sse41_packusdw(<4 x i32> %a0, <4 x i32> %a1) {
977   ; CHECK: vpackusdw
978   %res = call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %a0, <4 x i32> %a1) ; <<8 x i16>> [#uses=1]
979   ret <8 x i16> %res
980 }
981 declare <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32>, <4 x i32>) nounwind readnone
982
983
984 define <16 x i8> @test_x86_sse41_pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) {
985   ; CHECK: vpblendvb
986   %res = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) ; <<16 x i8>> [#uses=1]
987   ret <16 x i8> %res
988 }
989 declare <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone
990
991
992 define <8 x i16> @test_x86_sse41_pblendw(<8 x i16> %a0, <8 x i16> %a1) {
993   ; CHECK: vpblendw
994   %res = call <8 x i16> @llvm.x86.sse41.pblendw(<8 x i16> %a0, <8 x i16> %a1, i32 7) ; <<8 x i16>> [#uses=1]
995   ret <8 x i16> %res
996 }
997 declare <8 x i16> @llvm.x86.sse41.pblendw(<8 x i16>, <8 x i16>, i32) nounwind readnone
998
999
1000 define <2 x i64> @test_x86_sse41_pcmpeqq(<2 x i64> %a0, <2 x i64> %a1) {
1001   ; CHECK: vpcmpeqq
1002   %res = call <2 x i64> @llvm.x86.sse41.pcmpeqq(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
1003   ret <2 x i64> %res
1004 }
1005 declare <2 x i64> @llvm.x86.sse41.pcmpeqq(<2 x i64>, <2 x i64>) nounwind readnone
1006
1007
1008 define <8 x i16> @test_x86_sse41_phminposuw(<8 x i16> %a0) {
1009   ; CHECK: vphminposuw
1010   %res = call <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16> %a0) ; <<8 x i16>> [#uses=1]
1011   ret <8 x i16> %res
1012 }
1013 declare <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16>) nounwind readnone
1014
1015
1016 define <16 x i8> @test_x86_sse41_pmaxsb(<16 x i8> %a0, <16 x i8> %a1) {
1017   ; CHECK: vpmaxsb
1018   %res = call <16 x i8> @llvm.x86.sse41.pmaxsb(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
1019   ret <16 x i8> %res
1020 }
1021 declare <16 x i8> @llvm.x86.sse41.pmaxsb(<16 x i8>, <16 x i8>) nounwind readnone
1022
1023
1024 define <4 x i32> @test_x86_sse41_pmaxsd(<4 x i32> %a0, <4 x i32> %a1) {
1025   ; CHECK: vpmaxsd
1026   %res = call <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1027   ret <4 x i32> %res
1028 }
1029 declare <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32>, <4 x i32>) nounwind readnone
1030
1031
1032 define <4 x i32> @test_x86_sse41_pmaxud(<4 x i32> %a0, <4 x i32> %a1) {
1033   ; CHECK: vpmaxud
1034   %res = call <4 x i32> @llvm.x86.sse41.pmaxud(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1035   ret <4 x i32> %res
1036 }
1037 declare <4 x i32> @llvm.x86.sse41.pmaxud(<4 x i32>, <4 x i32>) nounwind readnone
1038
1039
1040 define <8 x i16> @test_x86_sse41_pmaxuw(<8 x i16> %a0, <8 x i16> %a1) {
1041   ; CHECK: vpmaxuw
1042   %res = call <8 x i16> @llvm.x86.sse41.pmaxuw(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
1043   ret <8 x i16> %res
1044 }
1045 declare <8 x i16> @llvm.x86.sse41.pmaxuw(<8 x i16>, <8 x i16>) nounwind readnone
1046
1047
1048 define <16 x i8> @test_x86_sse41_pminsb(<16 x i8> %a0, <16 x i8> %a1) {
1049   ; CHECK: vpminsb
1050   %res = call <16 x i8> @llvm.x86.sse41.pminsb(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
1051   ret <16 x i8> %res
1052 }
1053 declare <16 x i8> @llvm.x86.sse41.pminsb(<16 x i8>, <16 x i8>) nounwind readnone
1054
1055
1056 define <4 x i32> @test_x86_sse41_pminsd(<4 x i32> %a0, <4 x i32> %a1) {
1057   ; CHECK: vpminsd
1058   %res = call <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1059   ret <4 x i32> %res
1060 }
1061 declare <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32>, <4 x i32>) nounwind readnone
1062
1063
1064 define <4 x i32> @test_x86_sse41_pminud(<4 x i32> %a0, <4 x i32> %a1) {
1065   ; CHECK: vpminud
1066   %res = call <4 x i32> @llvm.x86.sse41.pminud(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1067   ret <4 x i32> %res
1068 }
1069 declare <4 x i32> @llvm.x86.sse41.pminud(<4 x i32>, <4 x i32>) nounwind readnone
1070
1071
1072 define <8 x i16> @test_x86_sse41_pminuw(<8 x i16> %a0, <8 x i16> %a1) {
1073   ; CHECK: vpminuw
1074   %res = call <8 x i16> @llvm.x86.sse41.pminuw(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
1075   ret <8 x i16> %res
1076 }
1077 declare <8 x i16> @llvm.x86.sse41.pminuw(<8 x i16>, <8 x i16>) nounwind readnone
1078
1079
1080 define <4 x i32> @test_x86_sse41_pmovsxbd(<16 x i8> %a0) {
1081   ; CHECK: vpmovsxbd
1082   %res = call <4 x i32> @llvm.x86.sse41.pmovsxbd(<16 x i8> %a0) ; <<4 x i32>> [#uses=1]
1083   ret <4 x i32> %res
1084 }
1085 declare <4 x i32> @llvm.x86.sse41.pmovsxbd(<16 x i8>) nounwind readnone
1086
1087
1088 define <2 x i64> @test_x86_sse41_pmovsxbq(<16 x i8> %a0) {
1089   ; CHECK: vpmovsxbq
1090   %res = call <2 x i64> @llvm.x86.sse41.pmovsxbq(<16 x i8> %a0) ; <<2 x i64>> [#uses=1]
1091   ret <2 x i64> %res
1092 }
1093 declare <2 x i64> @llvm.x86.sse41.pmovsxbq(<16 x i8>) nounwind readnone
1094
1095
1096 define <8 x i16> @test_x86_sse41_pmovsxbw(<16 x i8> %a0) {
1097   ; CHECK: vpmovsxbw
1098   %res = call <8 x i16> @llvm.x86.sse41.pmovsxbw(<16 x i8> %a0) ; <<8 x i16>> [#uses=1]
1099   ret <8 x i16> %res
1100 }
1101 declare <8 x i16> @llvm.x86.sse41.pmovsxbw(<16 x i8>) nounwind readnone
1102
1103
1104 define <2 x i64> @test_x86_sse41_pmovsxdq(<4 x i32> %a0) {
1105   ; CHECK: vpmovsxdq
1106   %res = call <2 x i64> @llvm.x86.sse41.pmovsxdq(<4 x i32> %a0) ; <<2 x i64>> [#uses=1]
1107   ret <2 x i64> %res
1108 }
1109 declare <2 x i64> @llvm.x86.sse41.pmovsxdq(<4 x i32>) nounwind readnone
1110
1111
1112 define <4 x i32> @test_x86_sse41_pmovsxwd(<8 x i16> %a0) {
1113   ; CHECK: vpmovsxwd
1114   %res = call <4 x i32> @llvm.x86.sse41.pmovsxwd(<8 x i16> %a0) ; <<4 x i32>> [#uses=1]
1115   ret <4 x i32> %res
1116 }
1117 declare <4 x i32> @llvm.x86.sse41.pmovsxwd(<8 x i16>) nounwind readnone
1118
1119
1120 define <2 x i64> @test_x86_sse41_pmovsxwq(<8 x i16> %a0) {
1121   ; CHECK: vpmovsxwq
1122   %res = call <2 x i64> @llvm.x86.sse41.pmovsxwq(<8 x i16> %a0) ; <<2 x i64>> [#uses=1]
1123   ret <2 x i64> %res
1124 }
1125 declare <2 x i64> @llvm.x86.sse41.pmovsxwq(<8 x i16>) nounwind readnone
1126
1127
1128 define <4 x i32> @test_x86_sse41_pmovzxbd(<16 x i8> %a0) {
1129   ; CHECK: vpmovzxbd
1130   %res = call <4 x i32> @llvm.x86.sse41.pmovzxbd(<16 x i8> %a0) ; <<4 x i32>> [#uses=1]
1131   ret <4 x i32> %res
1132 }
1133 declare <4 x i32> @llvm.x86.sse41.pmovzxbd(<16 x i8>) nounwind readnone
1134
1135
1136 define <2 x i64> @test_x86_sse41_pmovzxbq(<16 x i8> %a0) {
1137   ; CHECK: vpmovzxbq
1138   %res = call <2 x i64> @llvm.x86.sse41.pmovzxbq(<16 x i8> %a0) ; <<2 x i64>> [#uses=1]
1139   ret <2 x i64> %res
1140 }
1141 declare <2 x i64> @llvm.x86.sse41.pmovzxbq(<16 x i8>) nounwind readnone
1142
1143
1144 define <8 x i16> @test_x86_sse41_pmovzxbw(<16 x i8> %a0) {
1145   ; CHECK: vpmovzxbw
1146   %res = call <8 x i16> @llvm.x86.sse41.pmovzxbw(<16 x i8> %a0) ; <<8 x i16>> [#uses=1]
1147   ret <8 x i16> %res
1148 }
1149 declare <8 x i16> @llvm.x86.sse41.pmovzxbw(<16 x i8>) nounwind readnone
1150
1151
1152 define <2 x i64> @test_x86_sse41_pmovzxdq(<4 x i32> %a0) {
1153   ; CHECK: vpmovzxdq
1154   %res = call <2 x i64> @llvm.x86.sse41.pmovzxdq(<4 x i32> %a0) ; <<2 x i64>> [#uses=1]
1155   ret <2 x i64> %res
1156 }
1157 declare <2 x i64> @llvm.x86.sse41.pmovzxdq(<4 x i32>) nounwind readnone
1158
1159
1160 define <4 x i32> @test_x86_sse41_pmovzxwd(<8 x i16> %a0) {
1161   ; CHECK: vpmovzxwd
1162   %res = call <4 x i32> @llvm.x86.sse41.pmovzxwd(<8 x i16> %a0) ; <<4 x i32>> [#uses=1]
1163   ret <4 x i32> %res
1164 }
1165 declare <4 x i32> @llvm.x86.sse41.pmovzxwd(<8 x i16>) nounwind readnone
1166
1167
1168 define <2 x i64> @test_x86_sse41_pmovzxwq(<8 x i16> %a0) {
1169   ; CHECK: vpmovzxwq
1170   %res = call <2 x i64> @llvm.x86.sse41.pmovzxwq(<8 x i16> %a0) ; <<2 x i64>> [#uses=1]
1171   ret <2 x i64> %res
1172 }
1173 declare <2 x i64> @llvm.x86.sse41.pmovzxwq(<8 x i16>) nounwind readnone
1174
1175
1176 define <2 x i64> @test_x86_sse41_pmuldq(<4 x i32> %a0, <4 x i32> %a1) {
1177   ; CHECK: vpmuldq
1178   %res = call <2 x i64> @llvm.x86.sse41.pmuldq(<4 x i32> %a0, <4 x i32> %a1) ; <<2 x i64>> [#uses=1]
1179   ret <2 x i64> %res
1180 }
1181 declare <2 x i64> @llvm.x86.sse41.pmuldq(<4 x i32>, <4 x i32>) nounwind readnone
1182
1183
1184 define i32 @test_x86_sse41_ptestc(<4 x float> %a0, <4 x float> %a1) {
1185   ; CHECK: vptest 
1186   ; CHECK: setb
1187   ; CHECK: movzbl
1188   %res = call i32 @llvm.x86.sse41.ptestc(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1189   ret i32 %res
1190 }
1191 declare i32 @llvm.x86.sse41.ptestc(<4 x float>, <4 x float>) nounwind readnone
1192
1193
1194 define i32 @test_x86_sse41_ptestnzc(<4 x float> %a0, <4 x float> %a1) {
1195   ; CHECK: vptest 
1196   ; CHECK: seta
1197   ; CHECK: movzbl
1198   %res = call i32 @llvm.x86.sse41.ptestnzc(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1199   ret i32 %res
1200 }
1201 declare i32 @llvm.x86.sse41.ptestnzc(<4 x float>, <4 x float>) nounwind readnone
1202
1203
1204 define i32 @test_x86_sse41_ptestz(<4 x float> %a0, <4 x float> %a1) {
1205   ; CHECK: vptest 
1206   ; CHECK: sete
1207   ; CHECK: movzbl
1208   %res = call i32 @llvm.x86.sse41.ptestz(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1209   ret i32 %res
1210 }
1211 declare i32 @llvm.x86.sse41.ptestz(<4 x float>, <4 x float>) nounwind readnone
1212
1213
1214 define <2 x double> @test_x86_sse41_round_pd(<2 x double> %a0) {
1215   ; CHECK: vroundpd
1216   %res = call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %a0, i32 7) ; <<2 x double>> [#uses=1]
1217   ret <2 x double> %res
1218 }
1219 declare <2 x double> @llvm.x86.sse41.round.pd(<2 x double>, i32) nounwind readnone
1220
1221
1222 define <4 x float> @test_x86_sse41_round_ps(<4 x float> %a0) {
1223   ; CHECK: vroundps
1224   %res = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %a0, i32 7) ; <<4 x float>> [#uses=1]
1225   ret <4 x float> %res
1226 }
1227 declare <4 x float> @llvm.x86.sse41.round.ps(<4 x float>, i32) nounwind readnone
1228
1229
1230 define <2 x double> @test_x86_sse41_round_sd(<2 x double> %a0, <2 x double> %a1) {
1231   ; CHECK: vroundsd
1232   %res = call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %a0, <2 x double> %a1, i32 7) ; <<2 x double>> [#uses=1]
1233   ret <2 x double> %res
1234 }
1235 declare <2 x double> @llvm.x86.sse41.round.sd(<2 x double>, <2 x double>, i32) nounwind readnone
1236
1237
1238 define <4 x float> @test_x86_sse41_round_ss(<4 x float> %a0, <4 x float> %a1) {
1239   ; CHECK: vroundss
1240   %res = call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %a0, <4 x float> %a1, i32 7) ; <<4 x float>> [#uses=1]
1241   ret <4 x float> %res
1242 }
1243 declare <4 x float> @llvm.x86.sse41.round.ss(<4 x float>, <4 x float>, i32) nounwind readnone
1244
1245
1246 define i32 @test_x86_sse42_pcmpestri128(<16 x i8> %a0, <16 x i8> %a2) {
1247   ; CHECK: movl
1248   ; CHECK: movl
1249   ; CHECK: vpcmpestri
1250   ; CHECK: movl
1251   %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
1252   ret i32 %res
1253 }
1254 declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
1255
1256
1257 define i32 @test_x86_sse42_pcmpestria128(<16 x i8> %a0, <16 x i8> %a2) {
1258   ; CHECK: movl
1259   ; CHECK: movl
1260   ; CHECK: vpcmpestri
1261   ; CHECK: movl
1262   %res = call i32 @llvm.x86.sse42.pcmpestria128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
1263   ret i32 %res
1264 }
1265 declare i32 @llvm.x86.sse42.pcmpestria128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
1266
1267
1268 define i32 @test_x86_sse42_pcmpestric128(<16 x i8> %a0, <16 x i8> %a2) {
1269   ; CHECK: movl
1270   ; CHECK: movl
1271   ; CHECK: vpcmpestri
1272   ; CHECK: movl
1273   %res = call i32 @llvm.x86.sse42.pcmpestric128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
1274   ret i32 %res
1275 }
1276 declare i32 @llvm.x86.sse42.pcmpestric128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
1277
1278
1279 define i32 @test_x86_sse42_pcmpestrio128(<16 x i8> %a0, <16 x i8> %a2) {
1280   ; CHECK: movl
1281   ; CHECK: movl
1282   ; CHECK: vpcmpestri
1283   ; CHECK: movl
1284   %res = call i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
1285   ret i32 %res
1286 }
1287 declare i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
1288
1289
1290 define i32 @test_x86_sse42_pcmpestris128(<16 x i8> %a0, <16 x i8> %a2) {
1291   ; CHECK: movl
1292   ; CHECK: movl
1293   ; CHECK: vpcmpestri
1294   ; CHECK: movl
1295   %res = call i32 @llvm.x86.sse42.pcmpestris128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
1296   ret i32 %res
1297 }
1298 declare i32 @llvm.x86.sse42.pcmpestris128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
1299
1300
1301 define i32 @test_x86_sse42_pcmpestriz128(<16 x i8> %a0, <16 x i8> %a2) {
1302   ; CHECK: movl
1303   ; CHECK: movl
1304   ; CHECK: vpcmpestri
1305   ; CHECK: movl
1306   %res = call i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
1307   ret i32 %res
1308 }
1309 declare i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
1310
1311
1312 define <16 x i8> @test_x86_sse42_pcmpestrm128(<16 x i8> %a0, <16 x i8> %a2) {
1313   ; CHECK: movl
1314   ; CHECK: movl
1315   ; CHECK: vpcmpestrm
1316   %res = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <<16 x i8>> [#uses=1]
1317   ret <16 x i8> %res
1318 }
1319 declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
1320
1321
1322 define <2 x i64> @test_x86_sse42_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1) {
1323   ; CHECK: vpcmpgtq
1324   %res = call <2 x i64> @llvm.x86.sse42.pcmpgtq(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
1325   ret <2 x i64> %res
1326 }
1327 declare <2 x i64> @llvm.x86.sse42.pcmpgtq(<2 x i64>, <2 x i64>) nounwind readnone
1328
1329
1330 define i32 @test_x86_sse42_pcmpistri128(<16 x i8> %a0, <16 x i8> %a1) {
1331   ; CHECK: vpcmpistri
1332   ; CHECK: movl
1333   %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
1334   ret i32 %res
1335 }
1336 declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone
1337
1338
1339 define i32 @test_x86_sse42_pcmpistria128(<16 x i8> %a0, <16 x i8> %a1) {
1340   ; CHECK: vpcmpistri
1341   ; CHECK: movl
1342   %res = call i32 @llvm.x86.sse42.pcmpistria128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
1343   ret i32 %res
1344 }
1345 declare i32 @llvm.x86.sse42.pcmpistria128(<16 x i8>, <16 x i8>, i8) nounwind readnone
1346
1347
1348 define i32 @test_x86_sse42_pcmpistric128(<16 x i8> %a0, <16 x i8> %a1) {
1349   ; CHECK: vpcmpistri
1350   ; CHECK: movl
1351   %res = call i32 @llvm.x86.sse42.pcmpistric128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
1352   ret i32 %res
1353 }
1354 declare i32 @llvm.x86.sse42.pcmpistric128(<16 x i8>, <16 x i8>, i8) nounwind readnone
1355
1356
1357 define i32 @test_x86_sse42_pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1) {
1358   ; CHECK: vpcmpistri
1359   ; CHECK: movl
1360   %res = call i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
1361   ret i32 %res
1362 }
1363 declare i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8>, <16 x i8>, i8) nounwind readnone
1364
1365
1366 define i32 @test_x86_sse42_pcmpistris128(<16 x i8> %a0, <16 x i8> %a1) {
1367   ; CHECK: vpcmpistri
1368   ; CHECK: movl
1369   %res = call i32 @llvm.x86.sse42.pcmpistris128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
1370   ret i32 %res
1371 }
1372 declare i32 @llvm.x86.sse42.pcmpistris128(<16 x i8>, <16 x i8>, i8) nounwind readnone
1373
1374
1375 define i32 @test_x86_sse42_pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1) {
1376   ; CHECK: vpcmpistri
1377   ; CHECK: movl
1378   %res = call i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
1379   ret i32 %res
1380 }
1381 declare i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8>, <16 x i8>, i8) nounwind readnone
1382
1383
1384 define <16 x i8> @test_x86_sse42_pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1) {
1385   ; CHECK: vpcmpistrm
1386   %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <<16 x i8>> [#uses=1]
1387   ret <16 x i8> %res
1388 }
1389 declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone
1390
1391
1392 define <4 x float> @test_x86_sse_add_ss(<4 x float> %a0, <4 x float> %a1) {
1393   ; CHECK: vaddss
1394   %res = call <4 x float> @llvm.x86.sse.add.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
1395   ret <4 x float> %res
1396 }
1397 declare <4 x float> @llvm.x86.sse.add.ss(<4 x float>, <4 x float>) nounwind readnone
1398
1399
1400 define <4 x float> @test_x86_sse_cmp_ps(<4 x float> %a0, <4 x float> %a1) {
1401   ; CHECK: vcmpordps
1402   %res = call <4 x float> @llvm.x86.sse.cmp.ps(<4 x float> %a0, <4 x float> %a1, i8 7) ; <<4 x float>> [#uses=1]
1403   ret <4 x float> %res
1404 }
1405 declare <4 x float> @llvm.x86.sse.cmp.ps(<4 x float>, <4 x float>, i8) nounwind readnone
1406
1407
1408 define <4 x float> @test_x86_sse_cmp_ss(<4 x float> %a0, <4 x float> %a1) {
1409   ; CHECK: vcmpordss
1410   %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 7) ; <<4 x float>> [#uses=1]
1411   ret <4 x float> %res
1412 }
1413 declare <4 x float> @llvm.x86.sse.cmp.ss(<4 x float>, <4 x float>, i8) nounwind readnone
1414
1415
1416 define i32 @test_x86_sse_comieq_ss(<4 x float> %a0, <4 x float> %a1) {
1417   ; CHECK: vcomiss
1418   ; CHECK: sete
1419   ; CHECK: movzbl
1420   %res = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1421   ret i32 %res
1422 }
1423 declare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone
1424
1425
1426 define i32 @test_x86_sse_comige_ss(<4 x float> %a0, <4 x float> %a1) {
1427   ; CHECK: vcomiss
1428   ; CHECK: setae
1429   ; CHECK: movzbl
1430   %res = call i32 @llvm.x86.sse.comige.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1431   ret i32 %res
1432 }
1433 declare i32 @llvm.x86.sse.comige.ss(<4 x float>, <4 x float>) nounwind readnone
1434
1435
1436 define i32 @test_x86_sse_comigt_ss(<4 x float> %a0, <4 x float> %a1) {
1437   ; CHECK: vcomiss
1438   ; CHECK: seta
1439   ; CHECK: movzbl
1440   %res = call i32 @llvm.x86.sse.comigt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1441   ret i32 %res
1442 }
1443 declare i32 @llvm.x86.sse.comigt.ss(<4 x float>, <4 x float>) nounwind readnone
1444
1445
1446 define i32 @test_x86_sse_comile_ss(<4 x float> %a0, <4 x float> %a1) {
1447   ; CHECK: vcomiss
1448   ; CHECK: setbe
1449   ; CHECK: movzbl
1450   %res = call i32 @llvm.x86.sse.comile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1451   ret i32 %res
1452 }
1453 declare i32 @llvm.x86.sse.comile.ss(<4 x float>, <4 x float>) nounwind readnone
1454
1455
1456 define i32 @test_x86_sse_comilt_ss(<4 x float> %a0, <4 x float> %a1) {
1457   ; CHECK: vcomiss
1458   ; CHECK: setb
1459   ; CHECK: movzbl
1460   %res = call i32 @llvm.x86.sse.comilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1461   ret i32 %res
1462 }
1463 declare i32 @llvm.x86.sse.comilt.ss(<4 x float>, <4 x float>) nounwind readnone
1464
1465
1466 define i32 @test_x86_sse_comineq_ss(<4 x float> %a0, <4 x float> %a1) {
1467   ; CHECK: vcomiss
1468   ; CHECK: setne
1469   ; CHECK: movzbl
1470   %res = call i32 @llvm.x86.sse.comineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1471   ret i32 %res
1472 }
1473 declare i32 @llvm.x86.sse.comineq.ss(<4 x float>, <4 x float>) nounwind readnone
1474
1475
1476 define <4 x float> @test_x86_sse_cvtsi2ss(<4 x float> %a0) {
1477   ; CHECK: movl
1478   ; CHECK: vcvtsi2ss
1479   %res = call <4 x float> @llvm.x86.sse.cvtsi2ss(<4 x float> %a0, i32 7) ; <<4 x float>> [#uses=1]
1480   ret <4 x float> %res
1481 }
1482 declare <4 x float> @llvm.x86.sse.cvtsi2ss(<4 x float>, i32) nounwind readnone
1483
1484
1485 define i32 @test_x86_sse_cvtss2si(<4 x float> %a0) {
1486   ; CHECK: vcvtss2si
1487   %res = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %a0) ; <i32> [#uses=1]
1488   ret i32 %res
1489 }
1490 declare i32 @llvm.x86.sse.cvtss2si(<4 x float>) nounwind readnone
1491
1492
1493 define i32 @test_x86_sse_cvttss2si(<4 x float> %a0) {
1494   ; CHECK: vcvttss2si
1495   %res = call i32 @llvm.x86.sse.cvttss2si(<4 x float> %a0) ; <i32> [#uses=1]
1496   ret i32 %res
1497 }
1498 declare i32 @llvm.x86.sse.cvttss2si(<4 x float>) nounwind readnone
1499
1500
1501 define <4 x float> @test_x86_sse_div_ss(<4 x float> %a0, <4 x float> %a1) {
1502   ; CHECK: vdivss
1503   %res = call <4 x float> @llvm.x86.sse.div.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
1504   ret <4 x float> %res
1505 }
1506 declare <4 x float> @llvm.x86.sse.div.ss(<4 x float>, <4 x float>) nounwind readnone
1507
1508
1509 define void @test_x86_sse_ldmxcsr(i8* %a0) {
1510   ; CHECK: movl
1511   ; CHECK: vldmxcsr
1512   call void @llvm.x86.sse.ldmxcsr(i8* %a0)
1513   ret void
1514 }
1515 declare void @llvm.x86.sse.ldmxcsr(i8*) nounwind
1516
1517
1518 define <4 x float> @test_x86_sse_loadu_ps(i8* %a0) {
1519   ; CHECK: movl
1520   ; CHECK: vmovups
1521   %res = call <4 x float> @llvm.x86.sse.loadu.ps(i8* %a0) ; <<4 x float>> [#uses=1]
1522   ret <4 x float> %res
1523 }
1524 declare <4 x float> @llvm.x86.sse.loadu.ps(i8*) nounwind readonly
1525
1526
1527 define <4 x float> @test_x86_sse_max_ps(<4 x float> %a0, <4 x float> %a1) {
1528   ; CHECK: vmaxps
1529   %res = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
1530   ret <4 x float> %res
1531 }
1532 declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone
1533
1534
1535 define <4 x float> @test_x86_sse_max_ss(<4 x float> %a0, <4 x float> %a1) {
1536   ; CHECK: vmaxss
1537   %res = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
1538   ret <4 x float> %res
1539 }
1540 declare <4 x float> @llvm.x86.sse.max.ss(<4 x float>, <4 x float>) nounwind readnone
1541
1542
1543 define <4 x float> @test_x86_sse_min_ps(<4 x float> %a0, <4 x float> %a1) {
1544   ; CHECK: vminps
1545   %res = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
1546   ret <4 x float> %res
1547 }
1548 declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone
1549
1550
1551 define <4 x float> @test_x86_sse_min_ss(<4 x float> %a0, <4 x float> %a1) {
1552   ; CHECK: vminss
1553   %res = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
1554   ret <4 x float> %res
1555 }
1556 declare <4 x float> @llvm.x86.sse.min.ss(<4 x float>, <4 x float>) nounwind readnone
1557
1558
1559 define i32 @test_x86_sse_movmsk_ps(<4 x float> %a0) {
1560   ; CHECK: vmovmskps
1561   %res = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0) ; <i32> [#uses=1]
1562   ret i32 %res
1563 }
1564 declare i32 @llvm.x86.sse.movmsk.ps(<4 x float>) nounwind readnone
1565
1566
1567 define void @test_x86_sse_movnt_ps(i8* %a0, <4 x float> %a1) {
1568   ; CHECK: movl
1569   ; CHECK: vmovntps
1570   call void @llvm.x86.sse.movnt.ps(i8* %a0, <4 x float> %a1)
1571   ret void
1572 }
1573 declare void @llvm.x86.sse.movnt.ps(i8*, <4 x float>) nounwind
1574
1575
1576 define <4 x float> @test_x86_sse_mul_ss(<4 x float> %a0, <4 x float> %a1) {
1577   ; CHECK: vmulss
1578   %res = call <4 x float> @llvm.x86.sse.mul.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
1579   ret <4 x float> %res
1580 }
1581 declare <4 x float> @llvm.x86.sse.mul.ss(<4 x float>, <4 x float>) nounwind readnone
1582
1583
1584 define <4 x float> @test_x86_sse_rcp_ps(<4 x float> %a0) {
1585   ; CHECK: vrcpps
1586   %res = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %a0) ; <<4 x float>> [#uses=1]
1587   ret <4 x float> %res
1588 }
1589 declare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) nounwind readnone
1590
1591
1592 define <4 x float> @test_x86_sse_rcp_ss(<4 x float> %a0) {
1593   ; CHECK: vrcpss
1594   %res = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
1595   ret <4 x float> %res
1596 }
1597 declare <4 x float> @llvm.x86.sse.rcp.ss(<4 x float>) nounwind readnone
1598
1599
1600 define <4 x float> @test_x86_sse_rsqrt_ps(<4 x float> %a0) {
1601   ; CHECK: vrsqrtps
1602   %res = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %a0) ; <<4 x float>> [#uses=1]
1603   ret <4 x float> %res
1604 }
1605 declare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) nounwind readnone
1606
1607
1608 define <4 x float> @test_x86_sse_rsqrt_ss(<4 x float> %a0) {
1609   ; CHECK: vrsqrtss
1610   %res = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
1611   ret <4 x float> %res
1612 }
1613 declare <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float>) nounwind readnone
1614
1615
1616 define <4 x float> @test_x86_sse_sqrt_ps(<4 x float> %a0) {
1617   ; CHECK: vsqrtps
1618   %res = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %a0) ; <<4 x float>> [#uses=1]
1619   ret <4 x float> %res
1620 }
1621 declare <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float>) nounwind readnone
1622
1623
1624 define <4 x float> @test_x86_sse_sqrt_ss(<4 x float> %a0) {
1625   ; CHECK: vsqrtss
1626   %res = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
1627   ret <4 x float> %res
1628 }
1629 declare <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float>) nounwind readnone
1630
1631
1632 define void @test_x86_sse_stmxcsr(i8* %a0) {
1633   ; CHECK: movl
1634   ; CHECK: vstmxcsr
1635   call void @llvm.x86.sse.stmxcsr(i8* %a0)
1636   ret void
1637 }
1638 declare void @llvm.x86.sse.stmxcsr(i8*) nounwind
1639
1640
1641 define void @test_x86_sse_storeu_ps(i8* %a0, <4 x float> %a1) {
1642   ; CHECK: movl
1643   ; CHECK: vmovups
1644   call void @llvm.x86.sse.storeu.ps(i8* %a0, <4 x float> %a1)
1645   ret void
1646 }
1647 declare void @llvm.x86.sse.storeu.ps(i8*, <4 x float>) nounwind
1648
1649
1650 define <4 x float> @test_x86_sse_sub_ss(<4 x float> %a0, <4 x float> %a1) {
1651   ; CHECK: vsubss
1652   %res = call <4 x float> @llvm.x86.sse.sub.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
1653   ret <4 x float> %res
1654 }
1655 declare <4 x float> @llvm.x86.sse.sub.ss(<4 x float>, <4 x float>) nounwind readnone
1656
1657
1658 define i32 @test_x86_sse_ucomieq_ss(<4 x float> %a0, <4 x float> %a1) {
1659   ; CHECK: vucomiss
1660   ; CHECK: sete
1661   ; CHECK: movzbl
1662   %res = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1663   ret i32 %res
1664 }
1665 declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone
1666
1667
1668 define i32 @test_x86_sse_ucomige_ss(<4 x float> %a0, <4 x float> %a1) {
1669   ; CHECK: vucomiss
1670   ; CHECK: setae
1671   ; CHECK: movzbl
1672   %res = call i32 @llvm.x86.sse.ucomige.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1673   ret i32 %res
1674 }
1675 declare i32 @llvm.x86.sse.ucomige.ss(<4 x float>, <4 x float>) nounwind readnone
1676
1677
1678 define i32 @test_x86_sse_ucomigt_ss(<4 x float> %a0, <4 x float> %a1) {
1679   ; CHECK: vucomiss
1680   ; CHECK: seta
1681   ; CHECK: movzbl
1682   %res = call i32 @llvm.x86.sse.ucomigt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1683   ret i32 %res
1684 }
1685 declare i32 @llvm.x86.sse.ucomigt.ss(<4 x float>, <4 x float>) nounwind readnone
1686
1687
1688 define i32 @test_x86_sse_ucomile_ss(<4 x float> %a0, <4 x float> %a1) {
1689   ; CHECK: vucomiss
1690   ; CHECK: setbe
1691   ; CHECK: movzbl
1692   %res = call i32 @llvm.x86.sse.ucomile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1693   ret i32 %res
1694 }
1695 declare i32 @llvm.x86.sse.ucomile.ss(<4 x float>, <4 x float>) nounwind readnone
1696
1697
1698 define i32 @test_x86_sse_ucomilt_ss(<4 x float> %a0, <4 x float> %a1) {
1699   ; CHECK: vucomiss
1700   ; CHECK: setb
1701   ; CHECK: movzbl
1702   %res = call i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1703   ret i32 %res
1704 }
1705 declare i32 @llvm.x86.sse.ucomilt.ss(<4 x float>, <4 x float>) nounwind readnone
1706
1707
1708 define i32 @test_x86_sse_ucomineq_ss(<4 x float> %a0, <4 x float> %a1) {
1709   ; CHECK: vucomiss
1710   ; CHECK: setne
1711   ; CHECK: movzbl
1712   %res = call i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
1713   ret i32 %res
1714 }
1715 declare i32 @llvm.x86.sse.ucomineq.ss(<4 x float>, <4 x float>) nounwind readnone
1716
1717
1718 define <16 x i8> @test_x86_ssse3_pabs_b_128(<16 x i8> %a0) {
1719   ; CHECK: vpabsb
1720   %res = call <16 x i8> @llvm.x86.ssse3.pabs.b.128(<16 x i8> %a0) ; <<16 x i8>> [#uses=1]
1721   ret <16 x i8> %res
1722 }
1723 declare <16 x i8> @llvm.x86.ssse3.pabs.b.128(<16 x i8>) nounwind readnone
1724
1725
1726 define <4 x i32> @test_x86_ssse3_pabs_d_128(<4 x i32> %a0) {
1727   ; CHECK: vpabsd
1728   %res = call <4 x i32> @llvm.x86.ssse3.pabs.d.128(<4 x i32> %a0) ; <<4 x i32>> [#uses=1]
1729   ret <4 x i32> %res
1730 }
1731 declare <4 x i32> @llvm.x86.ssse3.pabs.d.128(<4 x i32>) nounwind readnone
1732
1733
1734 define <8 x i16> @test_x86_ssse3_pabs_w_128(<8 x i16> %a0) {
1735   ; CHECK: vpabsw
1736   %res = call <8 x i16> @llvm.x86.ssse3.pabs.w.128(<8 x i16> %a0) ; <<8 x i16>> [#uses=1]
1737   ret <8 x i16> %res
1738 }
1739 declare <8 x i16> @llvm.x86.ssse3.pabs.w.128(<8 x i16>) nounwind readnone
1740
1741
1742 define <4 x i32> @test_x86_ssse3_phadd_d_128(<4 x i32> %a0, <4 x i32> %a1) {
1743   ; CHECK: vphaddd
1744   %res = call <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1745   ret <4 x i32> %res
1746 }
1747 declare <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32>, <4 x i32>) nounwind readnone
1748
1749
1750 define <4 x i32> @test_x86_ssse3_phadd_sw_128(<4 x i32> %a0, <4 x i32> %a1) {
1751   ; CHECK: vphaddsw
1752   %res = call <4 x i32> @llvm.x86.ssse3.phadd.sw.128(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1753   ret <4 x i32> %res
1754 }
1755 declare <4 x i32> @llvm.x86.ssse3.phadd.sw.128(<4 x i32>, <4 x i32>) nounwind readnone
1756
1757
1758 define <8 x i16> @test_x86_ssse3_phadd_w_128(<8 x i16> %a0, <8 x i16> %a1) {
1759   ; CHECK: vphaddw
1760   %res = call <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
1761   ret <8 x i16> %res
1762 }
1763 declare <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16>, <8 x i16>) nounwind readnone
1764
1765
1766 define <4 x i32> @test_x86_ssse3_phsub_d_128(<4 x i32> %a0, <4 x i32> %a1) {
1767   ; CHECK: vphsubd
1768   %res = call <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1769   ret <4 x i32> %res
1770 }
1771 declare <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32>, <4 x i32>) nounwind readnone
1772
1773
1774 define <8 x i16> @test_x86_ssse3_phsub_sw_128(<8 x i16> %a0, <8 x i16> %a1) {
1775   ; CHECK: vphsubsw
1776   %res = call <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
1777   ret <8 x i16> %res
1778 }
1779 declare <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16>, <8 x i16>) nounwind readnone
1780
1781
1782 define <8 x i16> @test_x86_ssse3_phsub_w_128(<8 x i16> %a0, <8 x i16> %a1) {
1783   ; CHECK: vphsubw
1784   %res = call <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
1785   ret <8 x i16> %res
1786 }
1787 declare <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16>, <8 x i16>) nounwind readnone
1788
1789
1790 define <8 x i16> @test_x86_ssse3_pmadd_ub_sw_128(<8 x i16> %a0, <8 x i16> %a1) {
1791   ; CHECK: vpmaddubsw
1792   %res = call <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
1793   ret <8 x i16> %res
1794 }
1795 declare <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<8 x i16>, <8 x i16>) nounwind readnone
1796
1797
1798 define <8 x i16> @test_x86_ssse3_pmul_hr_sw_128(<8 x i16> %a0, <8 x i16> %a1) {
1799   ; CHECK: vpmulhrsw
1800   %res = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
1801   ret <8 x i16> %res
1802 }
1803 declare <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16>, <8 x i16>) nounwind readnone
1804
1805
1806 define <16 x i8> @test_x86_ssse3_pshuf_b_128(<16 x i8> %a0, <16 x i8> %a1) {
1807   ; CHECK: vpshufb
1808   %res = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
1809   ret <16 x i8> %res
1810 }
1811 declare <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8>, <16 x i8>) nounwind readnone
1812
1813
1814 define <16 x i8> @test_x86_ssse3_psign_b_128(<16 x i8> %a0, <16 x i8> %a1) {
1815   ; CHECK: vpsignb
1816   %res = call <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
1817   ret <16 x i8> %res
1818 }
1819 declare <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8>, <16 x i8>) nounwind readnone
1820
1821
1822 define <4 x i32> @test_x86_ssse3_psign_d_128(<4 x i32> %a0, <4 x i32> %a1) {
1823   ; CHECK: vpsignd
1824   %res = call <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1825   ret <4 x i32> %res
1826 }
1827 declare <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32>, <4 x i32>) nounwind readnone
1828
1829
1830 define <8 x i16> @test_x86_ssse3_psign_w_128(<8 x i16> %a0, <8 x i16> %a1) {
1831   ; CHECK: vpsignw
1832   %res = call <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
1833   ret <8 x i16> %res
1834 }
1835 declare <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16>, <8 x i16>) nounwind readnone
1836
1837
1838 define <4 x double> @test_x86_avx_addsub_pd_256(<4 x double> %a0, <4 x double> %a1) {
1839   ; CHECK: vaddsubpd
1840   %res = call <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %a0, <4 x double> %a1) ; <<4 x double>> [#uses=1]
1841   ret <4 x double> %res
1842 }
1843 declare <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double>, <4 x double>) nounwind readnone
1844
1845
1846 define <8 x float> @test_x86_avx_addsub_ps_256(<8 x float> %a0, <8 x float> %a1) {
1847   ; CHECK: vaddsubps
1848   %res = call <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %a0, <8 x float> %a1) ; <<8 x float>> [#uses=1]
1849   ret <8 x float> %res
1850 }
1851 declare <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float>, <8 x float>) nounwind readnone
1852
1853
1854 define <4 x double> @test_x86_avx_blend_pd_256(<4 x double> %a0, <4 x double> %a1) {
1855   ; CHECK: vblendpd
1856   %res = call <4 x double> @llvm.x86.avx.blend.pd.256(<4 x double> %a0, <4 x double> %a1, i32 7) ; <<4 x double>> [#uses=1]
1857   ret <4 x double> %res
1858 }
1859 declare <4 x double> @llvm.x86.avx.blend.pd.256(<4 x double>, <4 x double>, i32) nounwind readnone
1860
1861
1862 define <8 x float> @test_x86_avx_blend_ps_256(<8 x float> %a0, <8 x float> %a1) {
1863   ; CHECK: vblendps
1864   %res = call <8 x float> @llvm.x86.avx.blend.ps.256(<8 x float> %a0, <8 x float> %a1, i32 7) ; <<8 x float>> [#uses=1]
1865   ret <8 x float> %res
1866 }
1867 declare <8 x float> @llvm.x86.avx.blend.ps.256(<8 x float>, <8 x float>, i32) nounwind readnone
1868
1869
1870 define <4 x double> @test_x86_avx_blendv_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) {
1871   ; CHECK: vblendvpd
1872   %res = call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) ; <<4 x double>> [#uses=1]
1873   ret <4 x double> %res
1874 }
1875 declare <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone
1876
1877
1878 define <8 x float> @test_x86_avx_blendv_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {
1879   ; CHECK: vblendvps
1880   %res = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) ; <<8 x float>> [#uses=1]
1881   ret <8 x float> %res
1882 }
1883 declare <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone
1884
1885
1886 define <4 x double> @test_x86_avx_cmp_pd_256(<4 x double> %a0, <4 x double> %a1) {
1887   ; CHECK: vcmpordpd
1888   %res = call <4 x double> @llvm.x86.avx.cmp.pd.256(<4 x double> %a0, <4 x double> %a1, i8 7) ; <<4 x double>> [#uses=1]
1889   ret <4 x double> %res
1890 }
1891 declare <4 x double> @llvm.x86.avx.cmp.pd.256(<4 x double>, <4 x double>, i8) nounwind readnone
1892
1893
1894 define <8 x float> @test_x86_avx_cmp_ps_256(<8 x float> %a0, <8 x float> %a1) {
1895   ; CHECK: vcmpordps
1896   %res = call <8 x float> @llvm.x86.avx.cmp.ps.256(<8 x float> %a0, <8 x float> %a1, i8 7) ; <<8 x float>> [#uses=1]
1897   ret <8 x float> %res
1898 }
1899 declare <8 x float> @llvm.x86.avx.cmp.ps.256(<8 x float>, <8 x float>, i8) nounwind readnone
1900
1901
1902 define <4 x float> @test_x86_avx_cvt_pd2_ps_256(<4 x double> %a0) {
1903   ; CHECK: vcvtpd2psy
1904   %res = call <4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double> %a0) ; <<4 x float>> [#uses=1]
1905   ret <4 x float> %res
1906 }
1907 declare <4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double>) nounwind readnone
1908
1909
1910 define <4 x i32> @test_x86_avx_cvt_pd2dq_256(<4 x double> %a0) {
1911   ; CHECK: vcvtpd2dqy
1912   %res = call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %a0) ; <<4 x i32>> [#uses=1]
1913   ret <4 x i32> %res
1914 }
1915 declare <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double>) nounwind readnone
1916
1917
1918 define <4 x double> @test_x86_avx_cvt_ps2_pd_256(<4 x float> %a0) {
1919   ; CHECK: vcvtps2pd
1920   %res = call <4 x double> @llvm.x86.avx.cvt.ps2.pd.256(<4 x float> %a0) ; <<4 x double>> [#uses=1]
1921   ret <4 x double> %res
1922 }
1923 declare <4 x double> @llvm.x86.avx.cvt.ps2.pd.256(<4 x float>) nounwind readnone
1924
1925
1926 define <8 x i32> @test_x86_avx_cvt_ps2dq_256(<8 x float> %a0) {
1927   ; CHECK: vcvtps2dq
1928   %res = call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> %a0) ; <<8 x i32>> [#uses=1]
1929   ret <8 x i32> %res
1930 }
1931 declare <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float>) nounwind readnone
1932
1933
1934 define <4 x double> @test_x86_avx_cvtdq2_pd_256(<4 x i32> %a0) {
1935   ; CHECK: vcvtdq2pd
1936   %res = call <4 x double> @llvm.x86.avx.cvtdq2.pd.256(<4 x i32> %a0) ; <<4 x double>> [#uses=1]
1937   ret <4 x double> %res
1938 }
1939 declare <4 x double> @llvm.x86.avx.cvtdq2.pd.256(<4 x i32>) nounwind readnone
1940
1941
1942 define <8 x float> @test_x86_avx_cvtdq2_ps_256(<8 x i32> %a0) {
1943   ; CHECK: vcvtdq2ps
1944   %res = call <8 x float> @llvm.x86.avx.cvtdq2.ps.256(<8 x i32> %a0) ; <<8 x float>> [#uses=1]
1945   ret <8 x float> %res
1946 }
1947 declare <8 x float> @llvm.x86.avx.cvtdq2.ps.256(<8 x i32>) nounwind readnone
1948
1949
1950 define <4 x i32> @test_x86_avx_cvtt_pd2dq_256(<4 x double> %a0) {
1951   ; CHECK: vcvttpd2dqy
1952   %res = call <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double> %a0) ; <<4 x i32>> [#uses=1]
1953   ret <4 x i32> %res
1954 }
1955 declare <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double>) nounwind readnone
1956
1957
1958 define <8 x i32> @test_x86_avx_cvtt_ps2dq_256(<8 x float> %a0) {
1959   ; CHECK: vcvttps2dq
1960   %res = call <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float> %a0) ; <<8 x i32>> [#uses=1]
1961   ret <8 x i32> %res
1962 }
1963 declare <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float>) nounwind readnone
1964
1965
1966 define <8 x float> @test_x86_avx_dp_ps_256(<8 x float> %a0, <8 x float> %a1) {
1967   ; CHECK: vdpps
1968   %res = call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> %a0, <8 x float> %a1, i32 7) ; <<8 x float>> [#uses=1]
1969   ret <8 x float> %res
1970 }
1971 declare <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float>, <8 x float>, i32) nounwind readnone
1972
1973
1974 define <4 x double> @test_x86_avx_hadd_pd_256(<4 x double> %a0, <4 x double> %a1) {
1975   ; CHECK: vhaddpd
1976   %res = call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %a0, <4 x double> %a1) ; <<4 x double>> [#uses=1]
1977   ret <4 x double> %res
1978 }
1979 declare <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double>, <4 x double>) nounwind readnone
1980
1981
1982 define <8 x float> @test_x86_avx_hadd_ps_256(<8 x float> %a0, <8 x float> %a1) {
1983   ; CHECK: vhaddps
1984   %res = call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %a0, <8 x float> %a1) ; <<8 x float>> [#uses=1]
1985   ret <8 x float> %res
1986 }
1987 declare <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float>, <8 x float>) nounwind readnone
1988
1989
1990 define <4 x double> @test_x86_avx_hsub_pd_256(<4 x double> %a0, <4 x double> %a1) {
1991   ; CHECK: vhsubpd
1992   %res = call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %a0, <4 x double> %a1) ; <<4 x double>> [#uses=1]
1993   ret <4 x double> %res
1994 }
1995 declare <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double>, <4 x double>) nounwind readnone
1996
1997
1998 define <8 x float> @test_x86_avx_hsub_ps_256(<8 x float> %a0, <8 x float> %a1) {
1999   ; CHECK: vhsubps
2000   %res = call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %a0, <8 x float> %a1) ; <<8 x float>> [#uses=1]
2001   ret <8 x float> %res
2002 }
2003 declare <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float>, <8 x float>) nounwind readnone
2004
2005
2006 define <32 x i8> @test_x86_avx_ldu_dq_256(i8* %a0) {
2007   ; CHECK: vlddqu
2008   %res = call <32 x i8> @llvm.x86.avx.ldu.dq.256(i8* %a0) ; <<32 x i8>> [#uses=1]
2009   ret <32 x i8> %res
2010 }
2011 declare <32 x i8> @llvm.x86.avx.ldu.dq.256(i8*) nounwind readonly
2012
2013
2014 define <32 x i8> @test_x86_avx_loadu_dq_256(i8* %a0) {
2015   ; CHECK: vmovdqu
2016   %res = call <32 x i8> @llvm.x86.avx.loadu.dq.256(i8* %a0) ; <<32 x i8>> [#uses=1]
2017   ret <32 x i8> %res
2018 }
2019 declare <32 x i8> @llvm.x86.avx.loadu.dq.256(i8*) nounwind readonly
2020
2021
2022 define <4 x double> @test_x86_avx_loadu_pd_256(i8* %a0) {
2023   ; CHECK: vmovupd
2024   %res = call <4 x double> @llvm.x86.avx.loadu.pd.256(i8* %a0) ; <<4 x double>> [#uses=1]
2025   ret <4 x double> %res
2026 }
2027 declare <4 x double> @llvm.x86.avx.loadu.pd.256(i8*) nounwind readonly
2028
2029
2030 define <8 x float> @test_x86_avx_loadu_ps_256(i8* %a0) {
2031   ; CHECK: vmovups
2032   %res = call <8 x float> @llvm.x86.avx.loadu.ps.256(i8* %a0) ; <<8 x float>> [#uses=1]
2033   ret <8 x float> %res
2034 }
2035 declare <8 x float> @llvm.x86.avx.loadu.ps.256(i8*) nounwind readonly
2036
2037
2038 define <2 x double> @test_x86_avx_maskload_pd(i8* %a0, <2 x double> %a1) {
2039   ; CHECK: vmaskmovpd
2040   %res = call <2 x double> @llvm.x86.avx.maskload.pd(i8* %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
2041   ret <2 x double> %res
2042 }
2043 declare <2 x double> @llvm.x86.avx.maskload.pd(i8*, <2 x double>) nounwind readonly
2044
2045
2046 define <4 x double> @test_x86_avx_maskload_pd_256(i8* %a0, <4 x double> %a1) {
2047   ; CHECK: vmaskmovpd
2048   %res = call <4 x double> @llvm.x86.avx.maskload.pd.256(i8* %a0, <4 x double> %a1) ; <<4 x double>> [#uses=1]
2049   ret <4 x double> %res
2050 }
2051 declare <4 x double> @llvm.x86.avx.maskload.pd.256(i8*, <4 x double>) nounwind readonly
2052
2053
2054 define <4 x float> @test_x86_avx_maskload_ps(i8* %a0, <4 x float> %a1) {
2055   ; CHECK: vmaskmovps
2056   %res = call <4 x float> @llvm.x86.avx.maskload.ps(i8* %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
2057   ret <4 x float> %res
2058 }
2059 declare <4 x float> @llvm.x86.avx.maskload.ps(i8*, <4 x float>) nounwind readonly
2060
2061
2062 define <8 x float> @test_x86_avx_maskload_ps_256(i8* %a0, <8 x float> %a1) {
2063   ; CHECK: vmaskmovps
2064   %res = call <8 x float> @llvm.x86.avx.maskload.ps.256(i8* %a0, <8 x float> %a1) ; <<8 x float>> [#uses=1]
2065   ret <8 x float> %res
2066 }
2067 declare <8 x float> @llvm.x86.avx.maskload.ps.256(i8*, <8 x float>) nounwind readonly
2068
2069
2070 define void @test_x86_avx_maskstore_pd(i8* %a0, <2 x double> %a1, <2 x double> %a2) {
2071   ; CHECK: vmaskmovpd
2072   call void @llvm.x86.avx.maskstore.pd(i8* %a0, <2 x double> %a1, <2 x double> %a2)
2073   ret void
2074 }
2075 declare void @llvm.x86.avx.maskstore.pd(i8*, <2 x double>, <2 x double>) nounwind
2076
2077
2078 define void @test_x86_avx_maskstore_pd_256(i8* %a0, <4 x double> %a1, <4 x double> %a2) {
2079   ; CHECK: vmaskmovpd
2080   call void @llvm.x86.avx.maskstore.pd.256(i8* %a0, <4 x double> %a1, <4 x double> %a2)
2081   ret void
2082 }
2083 declare void @llvm.x86.avx.maskstore.pd.256(i8*, <4 x double>, <4 x double>) nounwind
2084
2085
2086 define void @test_x86_avx_maskstore_ps(i8* %a0, <4 x float> %a1, <4 x float> %a2) {
2087   ; CHECK: vmaskmovps
2088   call void @llvm.x86.avx.maskstore.ps(i8* %a0, <4 x float> %a1, <4 x float> %a2)
2089   ret void
2090 }
2091 declare void @llvm.x86.avx.maskstore.ps(i8*, <4 x float>, <4 x float>) nounwind
2092
2093
2094 define void @test_x86_avx_maskstore_ps_256(i8* %a0, <8 x float> %a1, <8 x float> %a2) {
2095   ; CHECK: vmaskmovps
2096   call void @llvm.x86.avx.maskstore.ps.256(i8* %a0, <8 x float> %a1, <8 x float> %a2)
2097   ret void
2098 }
2099 declare void @llvm.x86.avx.maskstore.ps.256(i8*, <8 x float>, <8 x float>) nounwind
2100
2101
2102 define <4 x double> @test_x86_avx_max_pd_256(<4 x double> %a0, <4 x double> %a1) {
2103   ; CHECK: vmaxpd
2104   %res = call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %a0, <4 x double> %a1) ; <<4 x double>> [#uses=1]
2105   ret <4 x double> %res
2106 }
2107 declare <4 x double> @llvm.x86.avx.max.pd.256(<4 x double>, <4 x double>) nounwind readnone
2108
2109
2110 define <8 x float> @test_x86_avx_max_ps_256(<8 x float> %a0, <8 x float> %a1) {
2111   ; CHECK: vmaxps
2112   %res = call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %a0, <8 x float> %a1) ; <<8 x float>> [#uses=1]
2113   ret <8 x float> %res
2114 }
2115 declare <8 x float> @llvm.x86.avx.max.ps.256(<8 x float>, <8 x float>) nounwind readnone
2116
2117
2118 define <4 x double> @test_x86_avx_min_pd_256(<4 x double> %a0, <4 x double> %a1) {
2119   ; CHECK: vminpd
2120   %res = call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %a0, <4 x double> %a1) ; <<4 x double>> [#uses=1]
2121   ret <4 x double> %res
2122 }
2123 declare <4 x double> @llvm.x86.avx.min.pd.256(<4 x double>, <4 x double>) nounwind readnone
2124
2125
2126 define <8 x float> @test_x86_avx_min_ps_256(<8 x float> %a0, <8 x float> %a1) {
2127   ; CHECK: vminps
2128   %res = call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %a0, <8 x float> %a1) ; <<8 x float>> [#uses=1]
2129   ret <8 x float> %res
2130 }
2131 declare <8 x float> @llvm.x86.avx.min.ps.256(<8 x float>, <8 x float>) nounwind readnone
2132
2133
2134 define i32 @test_x86_avx_movmsk_pd_256(<4 x double> %a0) {
2135   ; CHECK: vmovmskpd
2136   %res = call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %a0) ; <i32> [#uses=1]
2137   ret i32 %res
2138 }
2139 declare i32 @llvm.x86.avx.movmsk.pd.256(<4 x double>) nounwind readnone
2140
2141
2142 define i32 @test_x86_avx_movmsk_ps_256(<8 x float> %a0) {
2143   ; CHECK: vmovmskps
2144   %res = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %a0) ; <i32> [#uses=1]
2145   ret i32 %res
2146 }
2147 declare i32 @llvm.x86.avx.movmsk.ps.256(<8 x float>) nounwind readnone
2148
2149
2150 define void @test_x86_avx_movnt_dq_256(i8* %a0, <4 x i64> %a1) {
2151   ; CHECK: vmovntdq
2152   call void @llvm.x86.avx.movnt.dq.256(i8* %a0, <4 x i64> %a1)
2153   ret void
2154 }
2155 declare void @llvm.x86.avx.movnt.dq.256(i8*, <4 x i64>) nounwind
2156
2157
2158 define void @test_x86_avx_movnt_pd_256(i8* %a0, <4 x double> %a1) {
2159   ; CHECK: vmovntpd
2160   call void @llvm.x86.avx.movnt.pd.256(i8* %a0, <4 x double> %a1)
2161   ret void
2162 }
2163 declare void @llvm.x86.avx.movnt.pd.256(i8*, <4 x double>) nounwind
2164
2165
2166 define void @test_x86_avx_movnt_ps_256(i8* %a0, <8 x float> %a1) {
2167   ; CHECK: vmovntps
2168   call void @llvm.x86.avx.movnt.ps.256(i8* %a0, <8 x float> %a1)
2169   ret void
2170 }
2171 declare void @llvm.x86.avx.movnt.ps.256(i8*, <8 x float>) nounwind
2172
2173
2174 define i32 @test_x86_avx_ptestc_256(<4 x i64> %a0, <4 x i64> %a1) {
2175   ; CHECK: vptest
2176   ; CHECK: setb
2177   ; CHECK: movzbl
2178   %res = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a0, <4 x i64> %a1) ; <i32> [#uses=1]
2179   ret i32 %res
2180 }
2181 declare i32 @llvm.x86.avx.ptestc.256(<4 x i64>, <4 x i64>) nounwind readnone
2182
2183
2184 define i32 @test_x86_avx_ptestnzc_256(<4 x i64> %a0, <4 x i64> %a1) {
2185   ; CHECK: vptest
2186   ; CHECK: seta
2187   ; CHECK: movzbl
2188   %res = call i32 @llvm.x86.avx.ptestnzc.256(<4 x i64> %a0, <4 x i64> %a1) ; <i32> [#uses=1]
2189   ret i32 %res
2190 }
2191 declare i32 @llvm.x86.avx.ptestnzc.256(<4 x i64>, <4 x i64>) nounwind readnone
2192
2193
2194 define i32 @test_x86_avx_ptestz_256(<4 x i64> %a0, <4 x i64> %a1) {
2195   ; CHECK: vptest
2196   ; CHECK: sete
2197   ; CHECK: movzbl
2198   %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a0, <4 x i64> %a1) ; <i32> [#uses=1]
2199   ret i32 %res
2200 }
2201 declare i32 @llvm.x86.avx.ptestz.256(<4 x i64>, <4 x i64>) nounwind readnone
2202
2203
2204 define <8 x float> @test_x86_avx_rcp_ps_256(<8 x float> %a0) {
2205   ; CHECK: vrcpps
2206   %res = call <8 x float> @llvm.x86.avx.rcp.ps.256(<8 x float> %a0) ; <<8 x float>> [#uses=1]
2207   ret <8 x float> %res
2208 }
2209 declare <8 x float> @llvm.x86.avx.rcp.ps.256(<8 x float>) nounwind readnone
2210
2211
2212 define <4 x double> @test_x86_avx_round_pd_256(<4 x double> %a0) {
2213   ; CHECK: vroundpd
2214   %res = call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %a0, i32 7) ; <<4 x double>> [#uses=1]
2215   ret <4 x double> %res
2216 }
2217 declare <4 x double> @llvm.x86.avx.round.pd.256(<4 x double>, i32) nounwind readnone
2218
2219
2220 define <8 x float> @test_x86_avx_round_ps_256(<8 x float> %a0) {
2221   ; CHECK: vroundps
2222   %res = call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %a0, i32 7) ; <<8 x float>> [#uses=1]
2223   ret <8 x float> %res
2224 }
2225 declare <8 x float> @llvm.x86.avx.round.ps.256(<8 x float>, i32) nounwind readnone
2226
2227
2228 define <8 x float> @test_x86_avx_rsqrt_ps_256(<8 x float> %a0) {
2229   ; CHECK: vrsqrtps
2230   %res = call <8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float> %a0) ; <<8 x float>> [#uses=1]
2231   ret <8 x float> %res
2232 }
2233 declare <8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float>) nounwind readnone
2234
2235
2236 define <4 x double> @test_x86_avx_sqrt_pd_256(<4 x double> %a0) {
2237   ; CHECK: vsqrtpd
2238   %res = call <4 x double> @llvm.x86.avx.sqrt.pd.256(<4 x double> %a0) ; <<4 x double>> [#uses=1]
2239   ret <4 x double> %res
2240 }
2241 declare <4 x double> @llvm.x86.avx.sqrt.pd.256(<4 x double>) nounwind readnone
2242
2243
2244 define <8 x float> @test_x86_avx_sqrt_ps_256(<8 x float> %a0) {
2245   ; CHECK: vsqrtps
2246   %res = call <8 x float> @llvm.x86.avx.sqrt.ps.256(<8 x float> %a0) ; <<8 x float>> [#uses=1]
2247   ret <8 x float> %res
2248 }
2249 declare <8 x float> @llvm.x86.avx.sqrt.ps.256(<8 x float>) nounwind readnone
2250
2251
2252 define void @test_x86_avx_storeu_dq_256(i8* %a0, <32 x i8> %a1) {
2253   ; CHECK: vmovdqu
2254   call void @llvm.x86.avx.storeu.dq.256(i8* %a0, <32 x i8> %a1)
2255   ret void
2256 }
2257 declare void @llvm.x86.avx.storeu.dq.256(i8*, <32 x i8>) nounwind
2258
2259
2260 define void @test_x86_avx_storeu_pd_256(i8* %a0, <4 x double> %a1) {
2261   ; CHECK: vmovupd
2262   call void @llvm.x86.avx.storeu.pd.256(i8* %a0, <4 x double> %a1)
2263   ret void
2264 }
2265 declare void @llvm.x86.avx.storeu.pd.256(i8*, <4 x double>) nounwind
2266
2267
2268 define void @test_x86_avx_storeu_ps_256(i8* %a0, <8 x float> %a1) {
2269   ; CHECK: vmovups
2270   call void @llvm.x86.avx.storeu.ps.256(i8* %a0, <8 x float> %a1)
2271   ret void
2272 }
2273 declare void @llvm.x86.avx.storeu.ps.256(i8*, <8 x float>) nounwind
2274
2275
2276 define <4 x double> @test_x86_avx_vbroadcast_sd_256(i8* %a0) {
2277   ; CHECK: vbroadcastsd
2278   %res = call <4 x double> @llvm.x86.avx.vbroadcast.sd.256(i8* %a0) ; <<4 x double>> [#uses=1]
2279   ret <4 x double> %res
2280 }
2281 declare <4 x double> @llvm.x86.avx.vbroadcast.sd.256(i8*) nounwind readonly
2282
2283
2284 define <4 x double> @test_x86_avx_vbroadcastf128_pd_256(i8* %a0) {
2285   ; CHECK: vbroadcastf128
2286   %res = call <4 x double> @llvm.x86.avx.vbroadcastf128.pd.256(i8* %a0) ; <<4 x double>> [#uses=1]
2287   ret <4 x double> %res
2288 }
2289 declare <4 x double> @llvm.x86.avx.vbroadcastf128.pd.256(i8*) nounwind readonly
2290
2291
2292 define <8 x float> @test_x86_avx_vbroadcastf128_ps_256(i8* %a0) {
2293   ; CHECK: vbroadcastf128
2294   %res = call <8 x float> @llvm.x86.avx.vbroadcastf128.ps.256(i8* %a0) ; <<8 x float>> [#uses=1]
2295   ret <8 x float> %res
2296 }
2297 declare <8 x float> @llvm.x86.avx.vbroadcastf128.ps.256(i8*) nounwind readonly
2298
2299
2300 define <4 x float> @test_x86_avx_vbroadcastss(i8* %a0) {
2301   ; CHECK: vbroadcastss
2302   %res = call <4 x float> @llvm.x86.avx.vbroadcastss(i8* %a0) ; <<4 x float>> [#uses=1]
2303   ret <4 x float> %res
2304 }
2305 declare <4 x float> @llvm.x86.avx.vbroadcastss(i8*) nounwind readonly
2306
2307
2308 define <8 x float> @test_x86_avx_vbroadcastss_256(i8* %a0) {
2309   ; CHECK: vbroadcastss
2310   %res = call <8 x float> @llvm.x86.avx.vbroadcastss.256(i8* %a0) ; <<8 x float>> [#uses=1]
2311   ret <8 x float> %res
2312 }
2313 declare <8 x float> @llvm.x86.avx.vbroadcastss.256(i8*) nounwind readonly
2314
2315
2316 define <2 x double> @test_x86_avx_vextractf128_pd_256(<4 x double> %a0) {
2317   ; CHECK: vextractf128
2318   %res = call <2 x double> @llvm.x86.avx.vextractf128.pd.256(<4 x double> %a0, i8 7) ; <<2 x double>> [#uses=1]
2319   ret <2 x double> %res
2320 }
2321 declare <2 x double> @llvm.x86.avx.vextractf128.pd.256(<4 x double>, i8) nounwind readnone
2322
2323
2324 define <4 x float> @test_x86_avx_vextractf128_ps_256(<8 x float> %a0) {
2325   ; CHECK: vextractf128
2326   %res = call <4 x float> @llvm.x86.avx.vextractf128.ps.256(<8 x float> %a0, i8 7) ; <<4 x float>> [#uses=1]
2327   ret <4 x float> %res
2328 }
2329 declare <4 x float> @llvm.x86.avx.vextractf128.ps.256(<8 x float>, i8) nounwind readnone
2330
2331
2332 define <4 x i32> @test_x86_avx_vextractf128_si_256(<8 x i32> %a0) {
2333   ; CHECK: vextractf128
2334   %res = call <4 x i32> @llvm.x86.avx.vextractf128.si.256(<8 x i32> %a0, i8 7) ; <<4 x i32>> [#uses=1]
2335   ret <4 x i32> %res
2336 }
2337 declare <4 x i32> @llvm.x86.avx.vextractf128.si.256(<8 x i32>, i8) nounwind readnone
2338
2339
2340 define <4 x double> @test_x86_avx_vinsertf128_pd_256(<4 x double> %a0, <2 x double> %a1) {
2341   ; CHECK: vinsertf128
2342   %res = call <4 x double> @llvm.x86.avx.vinsertf128.pd.256(<4 x double> %a0, <2 x double> %a1, i8 7) ; <<4 x double>> [#uses=1]
2343   ret <4 x double> %res
2344 }
2345 declare <4 x double> @llvm.x86.avx.vinsertf128.pd.256(<4 x double>, <2 x double>, i8) nounwind readnone
2346
2347
2348 define <8 x float> @test_x86_avx_vinsertf128_ps_256(<8 x float> %a0, <4 x float> %a1) {
2349   ; CHECK: vinsertf128
2350   %res = call <8 x float> @llvm.x86.avx.vinsertf128.ps.256(<8 x float> %a0, <4 x float> %a1, i8 7) ; <<8 x float>> [#uses=1]
2351   ret <8 x float> %res
2352 }
2353 declare <8 x float> @llvm.x86.avx.vinsertf128.ps.256(<8 x float>, <4 x float>, i8) nounwind readnone
2354
2355
2356 define <8 x i32> @test_x86_avx_vinsertf128_si_256(<8 x i32> %a0, <4 x i32> %a1) {
2357   ; CHECK: vinsertf128
2358   %res = call <8 x i32> @llvm.x86.avx.vinsertf128.si.256(<8 x i32> %a0, <4 x i32> %a1, i8 7) ; <<8 x i32>> [#uses=1]
2359   ret <8 x i32> %res
2360 }
2361 declare <8 x i32> @llvm.x86.avx.vinsertf128.si.256(<8 x i32>, <4 x i32>, i8) nounwind readnone
2362
2363
2364 define <4 x double> @test_x86_avx_vperm2f128_pd_256(<4 x double> %a0, <4 x double> %a1) {
2365   ; CHECK: vperm2f128
2366   %res = call <4 x double> @llvm.x86.avx.vperm2f128.pd.256(<4 x double> %a0, <4 x double> %a1, i8 7) ; <<4 x double>> [#uses=1]
2367   ret <4 x double> %res
2368 }
2369 declare <4 x double> @llvm.x86.avx.vperm2f128.pd.256(<4 x double>, <4 x double>, i8) nounwind readnone
2370
2371
2372 define <8 x float> @test_x86_avx_vperm2f128_ps_256(<8 x float> %a0, <8 x float> %a1) {
2373   ; CHECK: vperm2f128
2374   %res = call <8 x float> @llvm.x86.avx.vperm2f128.ps.256(<8 x float> %a0, <8 x float> %a1, i8 7) ; <<8 x float>> [#uses=1]
2375   ret <8 x float> %res
2376 }
2377 declare <8 x float> @llvm.x86.avx.vperm2f128.ps.256(<8 x float>, <8 x float>, i8) nounwind readnone
2378
2379
2380 define <8 x i32> @test_x86_avx_vperm2f128_si_256(<8 x i32> %a0, <8 x i32> %a1) {
2381   ; CHECK: vperm2f128
2382   %res = call <8 x i32> @llvm.x86.avx.vperm2f128.si.256(<8 x i32> %a0, <8 x i32> %a1, i8 7) ; <<8 x i32>> [#uses=1]
2383   ret <8 x i32> %res
2384 }
2385 declare <8 x i32> @llvm.x86.avx.vperm2f128.si.256(<8 x i32>, <8 x i32>, i8) nounwind readnone
2386
2387
2388 define <2 x double> @test_x86_avx_vpermil_pd(<2 x double> %a0) {
2389   ; CHECK: vpermilpd
2390   %res = call <2 x double> @llvm.x86.avx.vpermil.pd(<2 x double> %a0, i8 7) ; <<2 x double>> [#uses=1]
2391   ret <2 x double> %res
2392 }
2393 declare <2 x double> @llvm.x86.avx.vpermil.pd(<2 x double>, i8) nounwind readnone
2394
2395
2396 define <4 x double> @test_x86_avx_vpermil_pd_256(<4 x double> %a0) {
2397   ; CHECK: vpermilpd
2398   %res = call <4 x double> @llvm.x86.avx.vpermil.pd.256(<4 x double> %a0, i8 7) ; <<4 x double>> [#uses=1]
2399   ret <4 x double> %res
2400 }
2401 declare <4 x double> @llvm.x86.avx.vpermil.pd.256(<4 x double>, i8) nounwind readnone
2402
2403
2404 define <4 x float> @test_x86_avx_vpermil_ps(<4 x float> %a0) {
2405   ; CHECK: vpermilps
2406   %res = call <4 x float> @llvm.x86.avx.vpermil.ps(<4 x float> %a0, i8 7) ; <<4 x float>> [#uses=1]
2407   ret <4 x float> %res
2408 }
2409 declare <4 x float> @llvm.x86.avx.vpermil.ps(<4 x float>, i8) nounwind readnone
2410
2411
2412 define <8 x float> @test_x86_avx_vpermil_ps_256(<8 x float> %a0) {
2413   ; CHECK: vpermilps
2414   %res = call <8 x float> @llvm.x86.avx.vpermil.ps.256(<8 x float> %a0, i8 7) ; <<8 x float>> [#uses=1]
2415   ret <8 x float> %res
2416 }
2417 declare <8 x float> @llvm.x86.avx.vpermil.ps.256(<8 x float>, i8) nounwind readnone
2418
2419
2420 define <2 x double> @test_x86_avx_vpermilvar_pd(<2 x double> %a0, <2 x i64> %a1) {
2421   ; CHECK: vpermilpd
2422   %res = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %a0, <2 x i64> %a1) ; <<2 x double>> [#uses=1]
2423   ret <2 x double> %res
2424 }
2425 declare <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double>, <2 x i64>) nounwind readnone
2426
2427
2428 define <4 x double> @test_x86_avx_vpermilvar_pd_256(<4 x double> %a0, <4 x i64> %a1) {
2429   ; CHECK: vpermilpd
2430   %res = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> %a1) ; <<4 x double>> [#uses=1]
2431   ret <4 x double> %res
2432 }
2433 declare <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double>, <4 x i64>) nounwind readnone
2434
2435
2436 define <4 x float> @test_x86_avx_vpermilvar_ps(<4 x float> %a0, <4 x i32> %a1) {
2437   ; CHECK: vpermilps
2438   %res = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> %a1) ; <<4 x float>> [#uses=1]
2439   ret <4 x float> %res
2440 }
2441 declare <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float>, <4 x i32>) nounwind readnone
2442
2443
2444 define <8 x float> @test_x86_avx_vpermilvar_ps_256(<8 x float> %a0, <8 x i32> %a1) {
2445   ; CHECK: vpermilps
2446   %res = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> %a1) ; <<8 x float>> [#uses=1]
2447   ret <8 x float> %res
2448 }
2449 declare <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float>, <8 x i32>) nounwind readnone
2450
2451
2452 define i32 @test_x86_avx_vtestc_pd(<2 x double> %a0, <2 x double> %a1) {
2453   ; CHECK: vtestpd
2454   ; CHECK: setb
2455   ; CHECK: movzbl
2456   %res = call i32 @llvm.x86.avx.vtestc.pd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
2457   ret i32 %res
2458 }
2459 declare i32 @llvm.x86.avx.vtestc.pd(<2 x double>, <2 x double>) nounwind readnone
2460
2461
2462 define i32 @test_x86_avx_vtestc_pd_256(<4 x double> %a0, <4 x double> %a1) {
2463   ; CHECK: vtestpd
2464   ; CHECK: setb
2465   ; CHECK: movzbl
2466   %res = call i32 @llvm.x86.avx.vtestc.pd.256(<4 x double> %a0, <4 x double> %a1) ; <i32> [#uses=1]
2467   ret i32 %res
2468 }
2469 declare i32 @llvm.x86.avx.vtestc.pd.256(<4 x double>, <4 x double>) nounwind readnone
2470
2471
2472 define i32 @test_x86_avx_vtestc_ps(<4 x float> %a0, <4 x float> %a1) {
2473   ; CHECK: vtestps
2474   ; CHECK: setb
2475   ; CHECK: movzbl
2476   %res = call i32 @llvm.x86.avx.vtestc.ps(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
2477   ret i32 %res
2478 }
2479 declare i32 @llvm.x86.avx.vtestc.ps(<4 x float>, <4 x float>) nounwind readnone
2480
2481
2482 define i32 @test_x86_avx_vtestc_ps_256(<8 x float> %a0, <8 x float> %a1) {
2483   ; CHECK: vtestps
2484   ; CHECK: setb
2485   ; CHECK: movzbl
2486   %res = call i32 @llvm.x86.avx.vtestc.ps.256(<8 x float> %a0, <8 x float> %a1) ; <i32> [#uses=1]
2487   ret i32 %res
2488 }
2489 declare i32 @llvm.x86.avx.vtestc.ps.256(<8 x float>, <8 x float>) nounwind readnone
2490
2491
2492 define i32 @test_x86_avx_vtestnzc_pd(<2 x double> %a0, <2 x double> %a1) {
2493   ; CHECK: vtestpd
2494   ; CHECK: seta
2495   ; CHECK: movzbl
2496   %res = call i32 @llvm.x86.avx.vtestnzc.pd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
2497   ret i32 %res
2498 }
2499 declare i32 @llvm.x86.avx.vtestnzc.pd(<2 x double>, <2 x double>) nounwind readnone
2500
2501
2502 define i32 @test_x86_avx_vtestnzc_pd_256(<4 x double> %a0, <4 x double> %a1) {
2503   ; CHECK: vtestpd
2504   ; CHECK: seta
2505   ; CHECK: movzbl
2506   %res = call i32 @llvm.x86.avx.vtestnzc.pd.256(<4 x double> %a0, <4 x double> %a1) ; <i32> [#uses=1]
2507   ret i32 %res
2508 }
2509 declare i32 @llvm.x86.avx.vtestnzc.pd.256(<4 x double>, <4 x double>) nounwind readnone
2510
2511
2512 define i32 @test_x86_avx_vtestnzc_ps(<4 x float> %a0, <4 x float> %a1) {
2513   ; CHECK: vtestps
2514   ; CHECK: seta
2515   ; CHECK: movzbl
2516   %res = call i32 @llvm.x86.avx.vtestnzc.ps(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
2517   ret i32 %res
2518 }
2519 declare i32 @llvm.x86.avx.vtestnzc.ps(<4 x float>, <4 x float>) nounwind readnone
2520
2521
2522 define i32 @test_x86_avx_vtestnzc_ps_256(<8 x float> %a0, <8 x float> %a1) {
2523   ; CHECK: vtestps
2524   ; CHECK: seta
2525   ; CHECK: movzbl
2526   %res = call i32 @llvm.x86.avx.vtestnzc.ps.256(<8 x float> %a0, <8 x float> %a1) ; <i32> [#uses=1]
2527   ret i32 %res
2528 }
2529 declare i32 @llvm.x86.avx.vtestnzc.ps.256(<8 x float>, <8 x float>) nounwind readnone
2530
2531
2532 define i32 @test_x86_avx_vtestz_pd(<2 x double> %a0, <2 x double> %a1) {
2533   ; CHECK: vtestpd
2534   ; CHECK: sete
2535   ; CHECK: movzbl
2536   %res = call i32 @llvm.x86.avx.vtestz.pd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]
2537   ret i32 %res
2538 }
2539 declare i32 @llvm.x86.avx.vtestz.pd(<2 x double>, <2 x double>) nounwind readnone
2540
2541
2542 define i32 @test_x86_avx_vtestz_pd_256(<4 x double> %a0, <4 x double> %a1) {
2543   ; CHECK: vtestpd
2544   ; CHECK: sete
2545   ; CHECK: movzbl
2546   %res = call i32 @llvm.x86.avx.vtestz.pd.256(<4 x double> %a0, <4 x double> %a1) ; <i32> [#uses=1]
2547   ret i32 %res
2548 }
2549 declare i32 @llvm.x86.avx.vtestz.pd.256(<4 x double>, <4 x double>) nounwind readnone
2550
2551
2552 define i32 @test_x86_avx_vtestz_ps(<4 x float> %a0, <4 x float> %a1) {
2553   ; CHECK: vtestps
2554   ; CHECK: sete
2555   ; CHECK: movzbl
2556   %res = call i32 @llvm.x86.avx.vtestz.ps(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
2557   ret i32 %res
2558 }
2559 declare i32 @llvm.x86.avx.vtestz.ps(<4 x float>, <4 x float>) nounwind readnone
2560
2561
2562 define i32 @test_x86_avx_vtestz_ps_256(<8 x float> %a0, <8 x float> %a1) {
2563   ; CHECK: vtestps
2564   ; CHECK: sete
2565   ; CHECK: movzbl
2566   %res = call i32 @llvm.x86.avx.vtestz.ps.256(<8 x float> %a0, <8 x float> %a1) ; <i32> [#uses=1]
2567   ret i32 %res
2568 }
2569 declare i32 @llvm.x86.avx.vtestz.ps.256(<8 x float>, <8 x float>) nounwind readnone
2570
2571
2572 define void @test_x86_avx_vzeroall() {
2573   ; CHECK: vzeroall
2574   call void @llvm.x86.avx.vzeroall()
2575   ret void
2576 }
2577 declare void @llvm.x86.avx.vzeroall() nounwind
2578
2579
2580 define void @test_x86_avx_vzeroupper() {
2581   ; CHECK: vzeroupper
2582   call void @llvm.x86.avx.vzeroupper()
2583   ret void
2584 }
2585 declare void @llvm.x86.avx.vzeroupper() nounwind
2586
2587