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