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