Add XOP Intrinsics and tests
[oota-llvm.git] / test / CodeGen / X86 / xop-intrinsics-x86_64.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -march=x86-64 -mattr=+avx,+fma4,+xop | FileCheck %s
2
3 define <2 x double> @test_int_x86_xop_vpermil2pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
4   ; CHECK: vpermil2pd
5   %res = call <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, i8 1) ;  [#uses=1]
6   ret <2 x double> %res
7 }
8 define <2 x double> @test_int_x86_xop_vpermil2pd_mr(<2 x double> %a0, <2 x double>* %a1, <2 x double> %a2) {
9   ; CHECK-NOT: vmovaps
10   ; CHECK: vpermil2pd
11   %vec = load <2 x double>* %a1
12   %res = call <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double> %a0, <2 x double> %vec, <2 x double> %a2, i8 1) ;  [#uses=1]
13   ret <2 x double> %res
14 }
15 define <2 x double> @test_int_x86_xop_vpermil2pd_rm(<2 x double> %a0, <2 x double> %a1, <2 x double>* %a2) {
16   ; CHECK-NOT: vmovaps
17   ; CHECK: vpermil2pd
18   %vec = load <2 x double>* %a2
19   %res = call <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %vec, i8 1) ;  [#uses=1]
20   ret <2 x double> %res
21 }
22 declare <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double>, <2 x double>, <2 x double>, i8) nounwind readnone
23
24 define <4 x double> @test_int_x86_xop_vpermil2pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) {
25   ; CHECK: vpermil2pd
26   ; CHECK: ymm
27   %res = call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, i8 2) ;
28   ret <4 x double> %res
29 }
30 define <4 x double> @test_int_x86_xop_vpermil2pd_256_mr(<4 x double> %a0, <4 x double>* %a1, <4 x double> %a2) {
31   ; CHECK-NOT: vmovaps
32   ; CHECK: vpermil2pd
33   ; CHECK: ymm
34   %vec = load <4 x double>* %a1
35   %res = call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %a0, <4 x double> %vec, <4 x double> %a2, i8 2) ;
36   ret <4 x double> %res
37 }
38 define <4 x double> @test_int_x86_xop_vpermil2pd_256_rm(<4 x double> %a0, <4 x double> %a1, <4 x double>* %a2) {
39   ; CHECK-NOT: vmovaps
40   ; CHECK: vpermil2pd
41   ; CHECK: ymm
42   %vec = load <4 x double>* %a2
43   %res = call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %vec, i8 2) ;
44   ret <4 x double> %res
45 }
46 declare <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double>, <4 x double>, <4 x double>, i8) nounwind readnone
47
48 define <4 x float> @test_int_x86_xop_vpermil2ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
49   ; CHECK: vpermil2ps
50   %res = call <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, i8 3) ;
51   ret <4 x float> %res
52 }
53 declare <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float>, <4 x float>, <4 x float>, i8) nounwind readnone
54
55 define <8 x float> @test_int_x86_xop_vpermil2ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {
56   ; CHECK: vpermil2ps
57   ; CHECK: ymm
58   %res = call <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, i8 4) ;
59   ret <8 x float> %res
60 }
61 declare <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float>, <8 x float>, <8 x float>, i8) nounwind readnone
62
63 define <2 x i64> @test_int_x86_xop_vpcmov(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) {
64   ; CHECK: vpcmov
65   %res = call <2 x i64> @llvm.x86.xop.vpcmov(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) ;
66   ret <2 x i64> %res
67 }
68 declare <2 x i64> @llvm.x86.xop.vpcmov(<2 x i64>, <2 x i64>, <2 x i64>) nounwind readnone
69
70 define <2 x i64> @test_int_x86_xop_vpcmov_v2di(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) {
71   ; CHECK: vpcmov
72   %res = call <2 x i64> @llvm.x86.xop.vpcmov.v2di(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) ;
73   ret <2 x i64> %res
74 }
75 declare <2 x i64> @llvm.x86.xop.vpcmov.v2di(<2 x i64>, <2 x i64>, <2 x i64>) nounwind readnone
76
77 define <4 x i32> @test_int_x86_xop_vpcmov_v4si(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) {
78   ; CHECK: vpcmov
79   %res = call <4 x i32> @llvm.x86.xop.vpcmov.v4si(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) ;
80   ret <4 x i32> %res
81 }
82 declare <4 x i32> @llvm.x86.xop.vpcmov.v4si(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone
83
84 define <8 x i16> @test_int_x86_xop_vpcmov_v8hi(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) {
85   ; CHECK: vpcmov
86   %res = call <8 x i16> @llvm.x86.xop.vpcmov.v8hi(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) ;
87   ret <8 x i16> %res
88 }
89 declare <8 x i16> @llvm.x86.xop.vpcmov.v8hi(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone
90
91 define <16 x i8> @test_int_x86_xop_vpcmov_v16qi(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) {
92   ; CHECK: vpcmov
93   %res = call <16 x i8> @llvm.x86.xop.vpcmov.v16qi(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) ;
94   ret <16 x i8> %res
95 }
96 declare <16 x i8> @llvm.x86.xop.vpcmov.v16qi(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone
97
98 define <2 x double> @test_int_x86_xop_vpcmov_v2df(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
99   ; CHECK: vpcmov
100   %res = call <2 x double> @llvm.x86.xop.vpcmov.v2df(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) ;
101   ret <2 x double> %res
102 }
103 declare <2 x double> @llvm.x86.xop.vpcmov.v2df(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
104
105 define <4 x float> @test_int_x86_xop_vpcmov_v4sf(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
106   ; CHECK: vpcmov
107   %res = call <4 x float> @llvm.x86.xop.vpcmov.v4sf(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) ;
108   ret <4 x float> %res
109 }
110 declare <4 x float> @llvm.x86.xop.vpcmov.v4sf(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
111
112 define <4 x i64> @test_int_x86_xop_vpcmov_256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) {
113   ; CHECK: vpcmov
114   ; CHECK: ymm
115   %res = call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) ;
116   ret <4 x i64> %res
117 }
118 define <4 x i64> @test_int_x86_xop_vpcmov_256_mr(<4 x i64> %a0, <4 x i64>* %a1, <4 x i64> %a2) {
119   ; CHECK-NOT: vmovaps
120   ; CHECK: vpcmov
121   ; CHECK: ymm
122   %vec = load <4 x i64>* %a1
123   %res = call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %a0, <4 x i64> %vec, <4 x i64> %a2) ;
124   ret <4 x i64> %res
125 }
126 define <4 x i64> @test_int_x86_xop_vpcmov_256_rm(<4 x i64> %a0, <4 x i64> %a1, <4 x i64>* %a2) {
127   ; CHECK-NOT: vmovaps
128   ; CHECK: vpcmov
129   ; CHECK: ymm
130  %vec = load <4 x i64>* %a2
131  %res = call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %vec) ;
132   ret <4 x i64> %res
133 }
134 declare <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64>, <4 x i64>, <4 x i64>) nounwind readnone
135
136 define <4 x i64> @test_int_x86_xop_vpcmov_v4di_256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) {
137   ; CHECK: vpcmov
138   ; CHECK: ymm
139   %res = call <4 x i64> @llvm.x86.xop.vpcmov.v4di.256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) ;
140   ret <4 x i64> %res
141 }
142 declare <4 x i64> @llvm.x86.xop.vpcmov.v4di.256(<4 x i64>, <4 x i64>, <4 x i64>) nounwind readnone
143
144 define <8 x i32> @test_int_x86_xop_vpcmov_v8si_256(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> %a2) {
145   ; CHECK: vpcmov
146   ; CHECK: ymm
147   %res = call <8 x i32> @llvm.x86.xop.vpcmov.v8si.256(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> %a2) ;
148   ret <8 x i32> %res
149 }
150 declare <8 x i32> @llvm.x86.xop.vpcmov.v8si.256(<8 x i32>, <8 x i32>, <8 x i32>) nounwind readnone
151
152 define <16 x i16> @test_int_x86_xop_vpcmov_v16hi_256(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> %a2) {
153   ; CHECK: vpcmov
154   ; CHECK: ymm
155   %res = call <16 x i16> @llvm.x86.xop.vpcmov.v16hi.256(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> %a2) ;
156   ret <16 x i16> %res
157 }
158 declare <16 x i16> @llvm.x86.xop.vpcmov.v16hi.256(<16 x i16>, <16 x i16>, <16 x i16>) nounwind readnone
159
160 define <32 x i8> @test_int_x86_xop_vpcmov_v32qi_256(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> %a2) {
161   ; CHECK: vpcmov
162   ; CHECK: ymm
163   %res = call <32 x i8> @llvm.x86.xop.vpcmov.v32qi.256(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> %a2) ;
164   ret <32 x i8> %res
165 }
166 declare <32 x i8> @llvm.x86.xop.vpcmov.v32qi.256(<32 x i8>, <32 x i8>, <32 x i8>) nounwind readnone
167
168 define <4 x double> @test_int_x86_xop_vpcmov_v4df_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) {
169   ; CHECK: vpcmov
170   ; CHECK: ymm
171   %res = call <4 x double> @llvm.x86.xop.vpcmov.v4df.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) ;
172   ret <4 x double> %res
173 }
174 declare <4 x double> @llvm.x86.xop.vpcmov.v4df.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone
175
176 define <8 x float> @test_int_x86_xop_vpcmov_v8sf_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {
177   ; CHECK: vpcmov
178   ; CHECK: ymm
179   %res = call <8 x float> @llvm.x86.xop.vpcmov.v8sf.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) ;
180   ret <8 x float> %res
181 }
182 declare <8 x float> @llvm.x86.xop.vpcmov.v8sf.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone
183
184 define <16 x i8> @test_int_x86_xop_vpcomeqb(<16 x i8> %a0, <16 x i8> %a1) {
185   ; CHECK:vpcomb
186   %res = call <16 x i8> @llvm.x86.xop.vpcomeqb(<16 x i8> %a0, <16 x i8> %a1) ;
187   ret <16 x i8> %res
188 }
189 define <16 x i8> @test_int_x86_xop_vpcomeqb_mem(<16 x i8> %a0, <16 x i8>* %a1) {
190   ; CHECK-NOT: vmovaps
191   ; CHECK:vpcomb
192   %vec = load <16 x i8>* %a1
193   %res = call <16 x i8> @llvm.x86.xop.vpcomeqb(<16 x i8> %a0, <16 x i8> %vec) ;
194   ret <16 x i8> %res
195 }
196 declare <16 x i8> @llvm.x86.xop.vpcomeqb(<16 x i8>, <16 x i8>) nounwind readnone
197
198 define <8 x i16> @test_int_x86_xop_vpcomeqw(<8 x i16> %a0, <8 x i16> %a1) {
199   ; CHECK: vpcomw
200   %res = call <8 x i16> @llvm.x86.xop.vpcomeqw(<8 x i16> %a0, <8 x i16> %a1) ;
201   ret <8 x i16> %res
202 }
203 declare <8 x i16> @llvm.x86.xop.vpcomeqw(<8 x i16>, <8 x i16>) nounwind readnone
204
205 define <4 x i32> @test_int_x86_xop_vpcomeqd(<4 x i32> %a0, <4 x i32> %a1) {
206   ; CHECK: vpcomd
207   %res = call <4 x i32> @llvm.x86.xop.vpcomeqd(<4 x i32> %a0, <4 x i32> %a1) ;
208   ret <4 x i32> %res
209 }
210 declare <4 x i32> @llvm.x86.xop.vpcomeqd(<4 x i32>, <4 x i32>) nounwind readnone
211
212 define <2 x i64> @test_int_x86_xop_vpcomeqq(<2 x i64> %a0, <2 x i64> %a1) {
213   ; CHECK: vpcomq
214   %res = call <2 x i64> @llvm.x86.xop.vpcomeqq(<2 x i64> %a0, <2 x i64> %a1) ;
215   ret <2 x i64> %res
216 }
217 declare <2 x i64> @llvm.x86.xop.vpcomeqq(<2 x i64>, <2 x i64>) nounwind readnone
218
219 define <16 x i8> @test_int_x86_xop_vpcomequb(<16 x i8> %a0, <16 x i8> %a1) {
220   ; CHECK: vpcomub
221   %res = call <16 x i8> @llvm.x86.xop.vpcomequb(<16 x i8> %a0, <16 x i8> %a1) ;
222   ret <16 x i8> %res
223 }
224 declare <16 x i8> @llvm.x86.xop.vpcomequb(<16 x i8>, <16 x i8>) nounwind readnone
225
226 define <4 x i32> @test_int_x86_xop_vpcomequd(<4 x i32> %a0, <4 x i32> %a1) {
227   ; CHECK: vpcomud
228   %res = call <4 x i32> @llvm.x86.xop.vpcomequd(<4 x i32> %a0, <4 x i32> %a1) ;
229   ret <4 x i32> %res
230 }
231 declare <4 x i32> @llvm.x86.xop.vpcomequd(<4 x i32>, <4 x i32>) nounwind readnone
232
233 define <2 x i64> @test_int_x86_xop_vpcomequq(<2 x i64> %a0, <2 x i64> %a1) {
234   ; CHECK: vpcomuq
235   %res = call <2 x i64> @llvm.x86.xop.vpcomequq(<2 x i64> %a0, <2 x i64> %a1) ;
236   ret <2 x i64> %res
237 }
238 declare <2 x i64> @llvm.x86.xop.vpcomequq(<2 x i64>, <2 x i64>) nounwind readnone
239
240 define <8 x i16> @test_int_x86_xop_vpcomequw(<8 x i16> %a0, <8 x i16> %a1) {
241   ; CHECK: vpcomuw
242   %res = call <8 x i16> @llvm.x86.xop.vpcomequw(<8 x i16> %a0, <8 x i16> %a1) ;
243   ret <8 x i16> %res
244 }
245 declare <8 x i16> @llvm.x86.xop.vpcomequw(<8 x i16>, <8 x i16>) nounwind readnone
246
247 define <16 x i8> @test_int_x86_xop_vpcomfalseb(<16 x i8> %a0, <16 x i8> %a1) {
248   ; CHECK: vpcomb
249   %res = call <16 x i8> @llvm.x86.xop.vpcomfalseb(<16 x i8> %a0, <16 x i8> %a1) ;
250   ret <16 x i8> %res
251 }
252 declare <16 x i8> @llvm.x86.xop.vpcomfalseb(<16 x i8>, <16 x i8>) nounwind readnone
253
254 define <4 x i32> @test_int_x86_xop_vpcomfalsed(<4 x i32> %a0, <4 x i32> %a1) {
255   ; CHECK: vpcomd
256   %res = call <4 x i32> @llvm.x86.xop.vpcomfalsed(<4 x i32> %a0, <4 x i32> %a1) ;
257   ret <4 x i32> %res
258 }
259 declare <4 x i32> @llvm.x86.xop.vpcomfalsed(<4 x i32>, <4 x i32>) nounwind readnone
260
261 define <2 x i64> @test_int_x86_xop_vpcomfalseq(<2 x i64> %a0, <2 x i64> %a1) {
262   ; CHECK: vpcomq
263   %res = call <2 x i64> @llvm.x86.xop.vpcomfalseq(<2 x i64> %a0, <2 x i64> %a1) ;
264   ret <2 x i64> %res
265 }
266 declare <2 x i64> @llvm.x86.xop.vpcomfalseq(<2 x i64>, <2 x i64>) nounwind readnone
267
268 define <16 x i8> @test_int_x86_xop_vpcomfalseub(<16 x i8> %a0, <16 x i8> %a1) {
269   ; CHECK: vpcomub
270   %res = call <16 x i8> @llvm.x86.xop.vpcomfalseub(<16 x i8> %a0, <16 x i8> %a1) ;
271   ret <16 x i8> %res
272 }
273 declare <16 x i8> @llvm.x86.xop.vpcomfalseub(<16 x i8>, <16 x i8>) nounwind readnone
274
275 define <4 x i32> @test_int_x86_xop_vpcomfalseud(<4 x i32> %a0, <4 x i32> %a1) {
276   ; CHECK: vpcomud
277   %res = call <4 x i32> @llvm.x86.xop.vpcomfalseud(<4 x i32> %a0, <4 x i32> %a1) ;
278   ret <4 x i32> %res
279 }
280 declare <4 x i32> @llvm.x86.xop.vpcomfalseud(<4 x i32>, <4 x i32>) nounwind readnone
281
282 define <2 x i64> @test_int_x86_xop_vpcomfalseuq(<2 x i64> %a0, <2 x i64> %a1) {
283   ; CHECK: vpcomuq
284   %res = call <2 x i64> @llvm.x86.xop.vpcomfalseuq(<2 x i64> %a0, <2 x i64> %a1) ;
285   ret <2 x i64> %res
286 }
287 declare <2 x i64> @llvm.x86.xop.vpcomfalseuq(<2 x i64>, <2 x i64>) nounwind readnone
288
289 define <8 x i16> @test_int_x86_xop_vpcomfalseuw(<8 x i16> %a0, <8 x i16> %a1) {
290   ; CHECK: vpcomuw
291   %res = call <8 x i16> @llvm.x86.xop.vpcomfalseuw(<8 x i16> %a0, <8 x i16> %a1) ;
292   ret <8 x i16> %res
293 }
294 declare <8 x i16> @llvm.x86.xop.vpcomfalseuw(<8 x i16>, <8 x i16>) nounwind readnone
295
296 define <8 x i16> @test_int_x86_xop_vpcomfalsew(<8 x i16> %a0, <8 x i16> %a1) {
297   ; CHECK: vpcomw
298   %res = call <8 x i16> @llvm.x86.xop.vpcomfalsew(<8 x i16> %a0, <8 x i16> %a1) ;
299   ret <8 x i16> %res
300 }
301 declare <8 x i16> @llvm.x86.xop.vpcomfalsew(<8 x i16>, <8 x i16>) nounwind readnone
302
303 define <16 x i8> @test_int_x86_xop_vpcomgeb(<16 x i8> %a0, <16 x i8> %a1) {
304   ; CHECK: vpcomb
305   %res = call <16 x i8> @llvm.x86.xop.vpcomgeb(<16 x i8> %a0, <16 x i8> %a1) ;
306   ret <16 x i8> %res
307 }
308 declare <16 x i8> @llvm.x86.xop.vpcomgeb(<16 x i8>, <16 x i8>) nounwind readnone
309
310 define <4 x i32> @test_int_x86_xop_vpcomged(<4 x i32> %a0, <4 x i32> %a1) {
311   ; CHECK: vpcomd
312   %res = call <4 x i32> @llvm.x86.xop.vpcomged(<4 x i32> %a0, <4 x i32> %a1) ;
313   ret <4 x i32> %res
314 }
315 declare <4 x i32> @llvm.x86.xop.vpcomged(<4 x i32>, <4 x i32>) nounwind readnone
316
317 define <2 x i64> @test_int_x86_xop_vpcomgeq(<2 x i64> %a0, <2 x i64> %a1) {
318   ; CHECK: vpcomq
319   %res = call <2 x i64> @llvm.x86.xop.vpcomgeq(<2 x i64> %a0, <2 x i64> %a1) ;
320   ret <2 x i64> %res
321 }
322 declare <2 x i64> @llvm.x86.xop.vpcomgeq(<2 x i64>, <2 x i64>) nounwind readnone
323
324 define <16 x i8> @test_int_x86_xop_vpcomgeub(<16 x i8> %a0, <16 x i8> %a1) {
325   ; CHECK: vpcomub
326   %res = call <16 x i8> @llvm.x86.xop.vpcomgeub(<16 x i8> %a0, <16 x i8> %a1) ;
327   ret <16 x i8> %res
328 }
329 declare <16 x i8> @llvm.x86.xop.vpcomgeub(<16 x i8>, <16 x i8>) nounwind readnone
330
331 define <4 x i32> @test_int_x86_xop_vpcomgeud(<4 x i32> %a0, <4 x i32> %a1) {
332   ; CHECK: vpcomud
333   %res = call <4 x i32> @llvm.x86.xop.vpcomgeud(<4 x i32> %a0, <4 x i32> %a1) ;
334   ret <4 x i32> %res
335 }
336 declare <4 x i32> @llvm.x86.xop.vpcomgeud(<4 x i32>, <4 x i32>) nounwind readnone
337
338 define <2 x i64> @test_int_x86_xop_vpcomgeuq(<2 x i64> %a0, <2 x i64> %a1) {
339   ; CHECK: vpcomuq
340   %res = call <2 x i64> @llvm.x86.xop.vpcomgeuq(<2 x i64> %a0, <2 x i64> %a1) ;
341   ret <2 x i64> %res
342 }
343 declare <2 x i64> @llvm.x86.xop.vpcomgeuq(<2 x i64>, <2 x i64>) nounwind readnone
344
345 define <8 x i16> @test_int_x86_xop_vpcomgeuw(<8 x i16> %a0, <8 x i16> %a1) {
346   ; CHECK: vpcomuw
347   %res = call <8 x i16> @llvm.x86.xop.vpcomgeuw(<8 x i16> %a0, <8 x i16> %a1) ;
348   ret <8 x i16> %res
349 }
350 declare <8 x i16> @llvm.x86.xop.vpcomgeuw(<8 x i16>, <8 x i16>) nounwind readnone
351
352 define <8 x i16> @test_int_x86_xop_vpcomgew(<8 x i16> %a0, <8 x i16> %a1) {
353   ; CHECK: vpcomw
354   %res = call <8 x i16> @llvm.x86.xop.vpcomgew(<8 x i16> %a0, <8 x i16> %a1) ;
355   ret <8 x i16> %res
356 }
357 declare <8 x i16> @llvm.x86.xop.vpcomgew(<8 x i16>, <8 x i16>) nounwind readnone
358
359 define <16 x i8> @test_int_x86_xop_vpcomgtb(<16 x i8> %a0, <16 x i8> %a1) {
360   ; CHECK: vpcomb
361   %res = call <16 x i8> @llvm.x86.xop.vpcomgtb(<16 x i8> %a0, <16 x i8> %a1) ;
362   ret <16 x i8> %res
363 }
364 declare <16 x i8> @llvm.x86.xop.vpcomgtb(<16 x i8>, <16 x i8>) nounwind readnone
365
366 define <4 x i32> @test_int_x86_xop_vpcomgtd(<4 x i32> %a0, <4 x i32> %a1) {
367   ; CHECK: vpcomd
368   %res = call <4 x i32> @llvm.x86.xop.vpcomgtd(<4 x i32> %a0, <4 x i32> %a1) ;
369   ret <4 x i32> %res
370 }
371 declare <4 x i32> @llvm.x86.xop.vpcomgtd(<4 x i32>, <4 x i32>) nounwind readnone
372
373 define <2 x i64> @test_int_x86_xop_vpcomgtq(<2 x i64> %a0, <2 x i64> %a1) {
374   ; CHECK: vpcomq
375   %res = call <2 x i64> @llvm.x86.xop.vpcomgtq(<2 x i64> %a0, <2 x i64> %a1) ;
376   ret <2 x i64> %res
377 }
378 declare <2 x i64> @llvm.x86.xop.vpcomgtq(<2 x i64>, <2 x i64>) nounwind readnone
379
380 define <16 x i8> @test_int_x86_xop_vpcomgtub(<16 x i8> %a0, <16 x i8> %a1) {
381   ; CHECK: vpcomub
382   %res = call <16 x i8> @llvm.x86.xop.vpcomgtub(<16 x i8> %a0, <16 x i8> %a1) ;
383   ret <16 x i8> %res
384 }
385 declare <16 x i8> @llvm.x86.xop.vpcomgtub(<16 x i8>, <16 x i8>) nounwind readnone
386
387 define <4 x i32> @test_int_x86_xop_vpcomgtud(<4 x i32> %a0, <4 x i32> %a1) {
388   ; CHECK: vpcomud
389   %res = call <4 x i32> @llvm.x86.xop.vpcomgtud(<4 x i32> %a0, <4 x i32> %a1) ;
390   ret <4 x i32> %res
391 }
392 declare <4 x i32> @llvm.x86.xop.vpcomgtud(<4 x i32>, <4 x i32>) nounwind readnone
393
394 define <2 x i64> @test_int_x86_xop_vpcomgtuq(<2 x i64> %a0, <2 x i64> %a1) {
395   ; CHECK: vpcomuq
396   %res = call <2 x i64> @llvm.x86.xop.vpcomgtuq(<2 x i64> %a0, <2 x i64> %a1) ;
397   ret <2 x i64> %res
398 }
399 declare <2 x i64> @llvm.x86.xop.vpcomgtuq(<2 x i64>, <2 x i64>) nounwind readnone
400
401 define <8 x i16> @test_int_x86_xop_vpcomgtuw(<8 x i16> %a0, <8 x i16> %a1) {
402   ; CHECK: vpcomuw
403   %res = call <8 x i16> @llvm.x86.xop.vpcomgtuw(<8 x i16> %a0, <8 x i16> %a1) ;
404   ret <8 x i16> %res
405 }
406 declare <8 x i16> @llvm.x86.xop.vpcomgtuw(<8 x i16>, <8 x i16>) nounwind readnone
407
408 define <8 x i16> @test_int_x86_xop_vpcomgtw(<8 x i16> %a0, <8 x i16> %a1) {
409   ; CHECK: vpcomw
410   %res = call <8 x i16> @llvm.x86.xop.vpcomgtw(<8 x i16> %a0, <8 x i16> %a1) ;
411   ret <8 x i16> %res
412 }
413 declare <8 x i16> @llvm.x86.xop.vpcomgtw(<8 x i16>, <8 x i16>) nounwind readnone
414
415 define <16 x i8> @test_int_x86_xop_vpcomleb(<16 x i8> %a0, <16 x i8> %a1) {
416   ; CHECK: vpcomb
417   %res = call <16 x i8> @llvm.x86.xop.vpcomleb(<16 x i8> %a0, <16 x i8> %a1) ;
418   ret <16 x i8> %res
419 }
420 declare <16 x i8> @llvm.x86.xop.vpcomleb(<16 x i8>, <16 x i8>) nounwind readnone
421
422 define <4 x i32> @test_int_x86_xop_vpcomled(<4 x i32> %a0, <4 x i32> %a1) {
423   ; CHECK: vpcomd
424   %res = call <4 x i32> @llvm.x86.xop.vpcomled(<4 x i32> %a0, <4 x i32> %a1) ;
425   ret <4 x i32> %res
426 }
427 declare <4 x i32> @llvm.x86.xop.vpcomled(<4 x i32>, <4 x i32>) nounwind readnone
428
429 define <2 x i64> @test_int_x86_xop_vpcomleq(<2 x i64> %a0, <2 x i64> %a1) {
430   ; CHECK: vpcomq
431   %res = call <2 x i64> @llvm.x86.xop.vpcomleq(<2 x i64> %a0, <2 x i64> %a1) ;
432   ret <2 x i64> %res
433 }
434 declare <2 x i64> @llvm.x86.xop.vpcomleq(<2 x i64>, <2 x i64>) nounwind readnone
435
436 define <16 x i8> @test_int_x86_xop_vpcomleub(<16 x i8> %a0, <16 x i8> %a1) {
437   ; CHECK: vpcomub
438   %res = call <16 x i8> @llvm.x86.xop.vpcomleub(<16 x i8> %a0, <16 x i8> %a1) ;
439   ret <16 x i8> %res
440 }
441 declare <16 x i8> @llvm.x86.xop.vpcomleub(<16 x i8>, <16 x i8>) nounwind readnone
442
443 define <4 x i32> @test_int_x86_xop_vpcomleud(<4 x i32> %a0, <4 x i32> %a1) {
444   ; CHECK: vpcomud
445   %res = call <4 x i32> @llvm.x86.xop.vpcomleud(<4 x i32> %a0, <4 x i32> %a1) ;
446   ret <4 x i32> %res
447 }
448 declare <4 x i32> @llvm.x86.xop.vpcomleud(<4 x i32>, <4 x i32>) nounwind readnone
449
450 define <2 x i64> @test_int_x86_xop_vpcomleuq(<2 x i64> %a0, <2 x i64> %a1) {
451   ; CHECK: vpcomuq
452   %res = call <2 x i64> @llvm.x86.xop.vpcomleuq(<2 x i64> %a0, <2 x i64> %a1) ;
453   ret <2 x i64> %res
454 }
455 declare <2 x i64> @llvm.x86.xop.vpcomleuq(<2 x i64>, <2 x i64>) nounwind readnone
456
457 define <8 x i16> @test_int_x86_xop_vpcomleuw(<8 x i16> %a0, <8 x i16> %a1) {
458   ; CHECK: vpcomuw
459   %res = call <8 x i16> @llvm.x86.xop.vpcomleuw(<8 x i16> %a0, <8 x i16> %a1) ;
460   ret <8 x i16> %res
461 }
462 declare <8 x i16> @llvm.x86.xop.vpcomleuw(<8 x i16>, <8 x i16>) nounwind readnone
463
464 define <8 x i16> @test_int_x86_xop_vpcomlew(<8 x i16> %a0, <8 x i16> %a1) {
465   ; CHECK: vpcomw
466   %res = call <8 x i16> @llvm.x86.xop.vpcomlew(<8 x i16> %a0, <8 x i16> %a1) ;
467   ret <8 x i16> %res
468 }
469 declare <8 x i16> @llvm.x86.xop.vpcomlew(<8 x i16>, <8 x i16>) nounwind readnone
470
471 define <16 x i8> @test_int_x86_xop_vpcomltb(<16 x i8> %a0, <16 x i8> %a1) {
472   ; CHECK: vpcomb
473   %res = call <16 x i8> @llvm.x86.xop.vpcomltb(<16 x i8> %a0, <16 x i8> %a1) ;
474   ret <16 x i8> %res
475 }
476 declare <16 x i8> @llvm.x86.xop.vpcomltb(<16 x i8>, <16 x i8>) nounwind readnone
477
478 define <4 x i32> @test_int_x86_xop_vpcomltd(<4 x i32> %a0, <4 x i32> %a1) {
479   ; CHECK: vpcomd
480   %res = call <4 x i32> @llvm.x86.xop.vpcomltd(<4 x i32> %a0, <4 x i32> %a1) ;
481   ret <4 x i32> %res
482 }
483 declare <4 x i32> @llvm.x86.xop.vpcomltd(<4 x i32>, <4 x i32>) nounwind readnone
484
485 define <2 x i64> @test_int_x86_xop_vpcomltq(<2 x i64> %a0, <2 x i64> %a1) {
486   ; CHECK: vpcomq
487   %res = call <2 x i64> @llvm.x86.xop.vpcomltq(<2 x i64> %a0, <2 x i64> %a1) ;
488   ret <2 x i64> %res
489 }
490 declare <2 x i64> @llvm.x86.xop.vpcomltq(<2 x i64>, <2 x i64>) nounwind readnone
491
492 define <16 x i8> @test_int_x86_xop_vpcomltub(<16 x i8> %a0, <16 x i8> %a1) {
493   ; CHECK: vpcomub
494   %res = call <16 x i8> @llvm.x86.xop.vpcomltub(<16 x i8> %a0, <16 x i8> %a1) ;
495   ret <16 x i8> %res
496 }
497 declare <16 x i8> @llvm.x86.xop.vpcomltub(<16 x i8>, <16 x i8>) nounwind readnone
498
499 define <4 x i32> @test_int_x86_xop_vpcomltud(<4 x i32> %a0, <4 x i32> %a1) {
500   ; CHECK: vpcomud
501   %res = call <4 x i32> @llvm.x86.xop.vpcomltud(<4 x i32> %a0, <4 x i32> %a1) ;
502   ret <4 x i32> %res
503 }
504 declare <4 x i32> @llvm.x86.xop.vpcomltud(<4 x i32>, <4 x i32>) nounwind readnone
505
506 define <2 x i64> @test_int_x86_xop_vpcomltuq(<2 x i64> %a0, <2 x i64> %a1) {
507   ; CHECK: vpcomuq
508   %res = call <2 x i64> @llvm.x86.xop.vpcomltuq(<2 x i64> %a0, <2 x i64> %a1) ;
509   ret <2 x i64> %res
510 }
511 declare <2 x i64> @llvm.x86.xop.vpcomltuq(<2 x i64>, <2 x i64>) nounwind readnone
512
513 define <8 x i16> @test_int_x86_xop_vpcomltuw(<8 x i16> %a0, <8 x i16> %a1) {
514   ; CHECK: vpcomuw
515   %res = call <8 x i16> @llvm.x86.xop.vpcomltuw(<8 x i16> %a0, <8 x i16> %a1) ;
516   ret <8 x i16> %res
517 }
518 declare <8 x i16> @llvm.x86.xop.vpcomltuw(<8 x i16>, <8 x i16>) nounwind readnone
519
520 define <8 x i16> @test_int_x86_xop_vpcomltw(<8 x i16> %a0, <8 x i16> %a1) {
521   ; CHECK: vpcomw
522   %res = call <8 x i16> @llvm.x86.xop.vpcomltw(<8 x i16> %a0, <8 x i16> %a1) ;
523   ret <8 x i16> %res
524 }
525 declare <8 x i16> @llvm.x86.xop.vpcomltw(<8 x i16>, <8 x i16>) nounwind readnone
526
527 define <16 x i8> @test_int_x86_xop_vpcomneb(<16 x i8> %a0, <16 x i8> %a1) {
528   ; CHECK: vpcomb
529   %res = call <16 x i8> @llvm.x86.xop.vpcomneb(<16 x i8> %a0, <16 x i8> %a1) ;
530   ret <16 x i8> %res
531 }
532 declare <16 x i8> @llvm.x86.xop.vpcomneb(<16 x i8>, <16 x i8>) nounwind readnone
533
534 define <4 x i32> @test_int_x86_xop_vpcomned(<4 x i32> %a0, <4 x i32> %a1) {
535   ; CHECK: vpcomd
536   %res = call <4 x i32> @llvm.x86.xop.vpcomned(<4 x i32> %a0, <4 x i32> %a1) ;
537   ret <4 x i32> %res
538 }
539 declare <4 x i32> @llvm.x86.xop.vpcomned(<4 x i32>, <4 x i32>) nounwind readnone
540
541 define <2 x i64> @test_int_x86_xop_vpcomneq(<2 x i64> %a0, <2 x i64> %a1) {
542   ; CHECK: vpcomq
543   %res = call <2 x i64> @llvm.x86.xop.vpcomneq(<2 x i64> %a0, <2 x i64> %a1) ;
544   ret <2 x i64> %res
545 }
546 declare <2 x i64> @llvm.x86.xop.vpcomneq(<2 x i64>, <2 x i64>) nounwind readnone
547
548 define <16 x i8> @test_int_x86_xop_vpcomneub(<16 x i8> %a0, <16 x i8> %a1) {
549   ; CHECK: vpcomub
550   %res = call <16 x i8> @llvm.x86.xop.vpcomneub(<16 x i8> %a0, <16 x i8> %a1) ;
551   ret <16 x i8> %res
552 }
553 declare <16 x i8> @llvm.x86.xop.vpcomneub(<16 x i8>, <16 x i8>) nounwind readnone
554
555 define <4 x i32> @test_int_x86_xop_vpcomneud(<4 x i32> %a0, <4 x i32> %a1) {
556   ; CHECK: vpcomud
557   %res = call <4 x i32> @llvm.x86.xop.vpcomneud(<4 x i32> %a0, <4 x i32> %a1) ;
558   ret <4 x i32> %res
559 }
560 declare <4 x i32> @llvm.x86.xop.vpcomneud(<4 x i32>, <4 x i32>) nounwind readnone
561
562 define <2 x i64> @test_int_x86_xop_vpcomneuq(<2 x i64> %a0, <2 x i64> %a1) {
563   ; CHECK: vpcomuq
564   %res = call <2 x i64> @llvm.x86.xop.vpcomneuq(<2 x i64> %a0, <2 x i64> %a1) ;
565   ret <2 x i64> %res
566 }
567 declare <2 x i64> @llvm.x86.xop.vpcomneuq(<2 x i64>, <2 x i64>) nounwind readnone
568
569 define <8 x i16> @test_int_x86_xop_vpcomneuw(<8 x i16> %a0, <8 x i16> %a1) {
570   ; CHECK: vpcomuw
571   %res = call <8 x i16> @llvm.x86.xop.vpcomneuw(<8 x i16> %a0, <8 x i16> %a1) ;
572   ret <8 x i16> %res
573 }
574 declare <8 x i16> @llvm.x86.xop.vpcomneuw(<8 x i16>, <8 x i16>) nounwind readnone
575
576 define <8 x i16> @test_int_x86_xop_vpcomnew(<8 x i16> %a0, <8 x i16> %a1) {
577   ; CHECK: vpcomw
578   %res = call <8 x i16> @llvm.x86.xop.vpcomnew(<8 x i16> %a0, <8 x i16> %a1) ;
579   ret <8 x i16> %res
580 }
581 declare <8 x i16> @llvm.x86.xop.vpcomnew(<8 x i16>, <8 x i16>) nounwind readnone
582
583 define <16 x i8> @test_int_x86_xop_vpcomtrueb(<16 x i8> %a0, <16 x i8> %a1) {
584   ; CHECK: vpcomb
585   %res = call <16 x i8> @llvm.x86.xop.vpcomtrueb(<16 x i8> %a0, <16 x i8> %a1) ;
586   ret <16 x i8> %res
587 }
588 declare <16 x i8> @llvm.x86.xop.vpcomtrueb(<16 x i8>, <16 x i8>) nounwind readnone
589
590 define <4 x i32> @test_int_x86_xop_vpcomtrued(<4 x i32> %a0, <4 x i32> %a1) {
591   ; CHECK: vpcomd
592   %res = call <4 x i32> @llvm.x86.xop.vpcomtrued(<4 x i32> %a0, <4 x i32> %a1) ;
593   ret <4 x i32> %res
594 }
595 declare <4 x i32> @llvm.x86.xop.vpcomtrued(<4 x i32>, <4 x i32>) nounwind readnone
596
597 define <2 x i64> @test_int_x86_xop_vpcomtrueq(<2 x i64> %a0, <2 x i64> %a1) {
598   ; CHECK: vpcomq
599   %res = call <2 x i64> @llvm.x86.xop.vpcomtrueq(<2 x i64> %a0, <2 x i64> %a1) ;
600   ret <2 x i64> %res
601 }
602 declare <2 x i64> @llvm.x86.xop.vpcomtrueq(<2 x i64>, <2 x i64>) nounwind readnone
603
604 define <16 x i8> @test_int_x86_xop_vpcomtrueub(<16 x i8> %a0, <16 x i8> %a1) {
605   ; CHECK: vpcomub
606   %res = call <16 x i8> @llvm.x86.xop.vpcomtrueub(<16 x i8> %a0, <16 x i8> %a1) ;
607   ret <16 x i8> %res
608 }
609 declare <16 x i8> @llvm.x86.xop.vpcomtrueub(<16 x i8>, <16 x i8>) nounwind readnone
610
611 define <4 x i32> @test_int_x86_xop_vpcomtrueud(<4 x i32> %a0, <4 x i32> %a1) {
612   ; CHECK: vpcomud
613   %res = call <4 x i32> @llvm.x86.xop.vpcomtrueud(<4 x i32> %a0, <4 x i32> %a1) ;
614   ret <4 x i32> %res
615 }
616 declare <4 x i32> @llvm.x86.xop.vpcomtrueud(<4 x i32>, <4 x i32>) nounwind readnone
617
618 define <2 x i64> @test_int_x86_xop_vpcomtrueuq(<2 x i64> %a0, <2 x i64> %a1) {
619   ; CHECK: vpcomuq
620   %res = call <2 x i64> @llvm.x86.xop.vpcomtrueuq(<2 x i64> %a0, <2 x i64> %a1) ;
621   ret <2 x i64> %res
622 }
623 declare <2 x i64> @llvm.x86.xop.vpcomtrueuq(<2 x i64>, <2 x i64>) nounwind readnone
624
625 define <8 x i16> @test_int_x86_xop_vpcomtrueuw(<8 x i16> %a0, <8 x i16> %a1) {
626   ; CHECK: vpcomuw
627   %res = call <8 x i16> @llvm.x86.xop.vpcomtrueuw(<8 x i16> %a0, <8 x i16> %a1) ;
628   ret <8 x i16> %res
629 }
630 declare <8 x i16> @llvm.x86.xop.vpcomtrueuw(<8 x i16>, <8 x i16>) nounwind readnone
631
632 define <8 x i16> @test_int_x86_xop_vpcomtruew(<8 x i16> %a0, <8 x i16> %a1) {
633   ; CHECK: vpcomw
634   %res = call <8 x i16> @llvm.x86.xop.vpcomtruew(<8 x i16> %a0, <8 x i16> %a1) ;
635   ret <8 x i16> %res
636 }
637 declare <8 x i16> @llvm.x86.xop.vpcomtruew(<8 x i16>, <8 x i16>) nounwind readnone
638
639 define <4 x i32> @test_int_x86_xop_vphaddbd(<16 x i8> %a0) {
640   ; CHECK: vphaddbd
641   %res = call <4 x i32> @llvm.x86.xop.vphaddbd(<16 x i8> %a0) ;
642   ret <4 x i32> %res
643 }
644 declare <4 x i32> @llvm.x86.xop.vphaddbd(<16 x i8>) nounwind readnone
645
646 define <2 x i64> @test_int_x86_xop_vphaddbq(<16 x i8> %a0) {
647   ; CHECK: vphaddbq
648   %res = call <2 x i64> @llvm.x86.xop.vphaddbq(<16 x i8> %a0) ;
649   ret <2 x i64> %res
650 }
651 declare <2 x i64> @llvm.x86.xop.vphaddbq(<16 x i8>) nounwind readnone
652
653 define <8 x i16> @test_int_x86_xop_vphaddbw(<16 x i8> %a0) {
654   ; CHECK: vphaddbw
655   %res = call <8 x i16> @llvm.x86.xop.vphaddbw(<16 x i8> %a0) ;
656   ret <8 x i16> %res
657 }
658 declare <8 x i16> @llvm.x86.xop.vphaddbw(<16 x i8>) nounwind readnone
659
660 define <2 x i64> @test_int_x86_xop_vphadddq(<4 x i32> %a0) {
661   ; CHECK: vphadddq
662   %res = call <2 x i64> @llvm.x86.xop.vphadddq(<4 x i32> %a0) ;
663   ret <2 x i64> %res
664 }
665 declare <2 x i64> @llvm.x86.xop.vphadddq(<4 x i32>) nounwind readnone
666
667 define <4 x i32> @test_int_x86_xop_vphaddubd(<16 x i8> %a0) {
668   ; CHECK: vphaddubd
669   %res = call <4 x i32> @llvm.x86.xop.vphaddubd(<16 x i8> %a0) ;
670   ret <4 x i32> %res
671 }
672 declare <4 x i32> @llvm.x86.xop.vphaddubd(<16 x i8>) nounwind readnone
673
674 define <2 x i64> @test_int_x86_xop_vphaddubq(<16 x i8> %a0) {
675   ; CHECK: vphaddubq
676   %res = call <2 x i64> @llvm.x86.xop.vphaddubq(<16 x i8> %a0) ;
677   ret <2 x i64> %res
678 }
679 declare <2 x i64> @llvm.x86.xop.vphaddubq(<16 x i8>) nounwind readnone
680
681 define <8 x i16> @test_int_x86_xop_vphaddubw(<16 x i8> %a0) {
682   ; CHECK: vphaddubw
683   %res = call <8 x i16> @llvm.x86.xop.vphaddubw(<16 x i8> %a0) ;
684   ret <8 x i16> %res
685 }
686 declare <8 x i16> @llvm.x86.xop.vphaddubw(<16 x i8>) nounwind readnone
687
688 define <2 x i64> @test_int_x86_xop_vphaddudq(<4 x i32> %a0) {
689   ; CHECK: vphaddudq
690   %res = call <2 x i64> @llvm.x86.xop.vphaddudq(<4 x i32> %a0) ;
691   ret <2 x i64> %res
692 }
693 declare <2 x i64> @llvm.x86.xop.vphaddudq(<4 x i32>) nounwind readnone
694
695 define <4 x i32> @test_int_x86_xop_vphadduwd(<8 x i16> %a0) {
696   ; CHECK: vphadduwd
697   %res = call <4 x i32> @llvm.x86.xop.vphadduwd(<8 x i16> %a0) ;
698   ret <4 x i32> %res
699 }
700 declare <4 x i32> @llvm.x86.xop.vphadduwd(<8 x i16>) nounwind readnone
701
702 define <2 x i64> @test_int_x86_xop_vphadduwq(<8 x i16> %a0) {
703   ; CHECK: vphadduwq
704   %res = call <2 x i64> @llvm.x86.xop.vphadduwq(<8 x i16> %a0) ;
705   ret <2 x i64> %res
706 }
707 declare <2 x i64> @llvm.x86.xop.vphadduwq(<8 x i16>) nounwind readnone
708
709 define <4 x i32> @test_int_x86_xop_vphaddwd(<8 x i16> %a0) {
710   ; CHECK: vphaddwd
711   %res = call <4 x i32> @llvm.x86.xop.vphaddwd(<8 x i16> %a0) ;
712   ret <4 x i32> %res
713 }
714 declare <4 x i32> @llvm.x86.xop.vphaddwd(<8 x i16>) nounwind readnone
715
716 define <2 x i64> @test_int_x86_xop_vphaddwq(<8 x i16> %a0) {
717   ; CHECK: vphaddwq
718   %res = call <2 x i64> @llvm.x86.xop.vphaddwq(<8 x i16> %a0) ;
719   ret <2 x i64> %res
720 }
721 declare <2 x i64> @llvm.x86.xop.vphaddwq(<8 x i16>) nounwind readnone
722
723 define <8 x i16> @test_int_x86_xop_vphsubbw(<16 x i8> %a0) {
724   ; CHECK: vphsubbw
725   %res = call <8 x i16> @llvm.x86.xop.vphsubbw(<16 x i8> %a0) ;
726   ret <8 x i16> %res
727 }
728 declare <8 x i16> @llvm.x86.xop.vphsubbw(<16 x i8>) nounwind readnone
729
730 define <2 x i64> @test_int_x86_xop_vphsubdq(<4 x i32> %a0) {
731   ; CHECK: vphsubdq
732   %res = call <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32> %a0) ;
733   ret <2 x i64> %res
734 }
735 define <2 x i64> @test_int_x86_xop_vphsubdq_mem(<4 x i32>* %a0) {
736   ; CHECK-NOT: vmovaps
737   ; CHECK: vphsubdq
738   %vec = load <4 x i32>* %a0
739   %res = call <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32> %vec) ;
740   ret <2 x i64> %res
741 }
742 declare <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32>) nounwind readnone
743
744 define <4 x i32> @test_int_x86_xop_vphsubwd(<8 x i16> %a0) {
745   ; CHECK: vphsubwd
746   %res = call <4 x i32> @llvm.x86.xop.vphsubwd(<8 x i16> %a0) ;
747   ret <4 x i32> %res
748 }
749 define <4 x i32> @test_int_x86_xop_vphsubwd_mem(<8 x i16>* %a0) {
750   ; CHECK-NOT: vmovaps
751   ; CHECK: vphsubwd
752   %vec = load <8 x i16>* %a0
753   %res = call <4 x i32> @llvm.x86.xop.vphsubwd(<8 x i16> %vec) ;
754   ret <4 x i32> %res
755 }
756 declare <4 x i32> @llvm.x86.xop.vphsubwd(<8 x i16>) nounwind readnone
757
758 define <4 x i32> @test_int_x86_xop_vpmacsdd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) {
759   ; CHECK: vpmacsdd
760   %res = call <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) ;
761   ret <4 x i32> %res
762 }
763 declare <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone
764
765 define <2 x i64> @test_int_x86_xop_vpmacsdqh(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) {
766   ; CHECK: vpmacsdqh
767   %res = call <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) ;
768   ret <2 x i64> %res
769 }
770 declare <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
771
772 define <2 x i64> @test_int_x86_xop_vpmacsdql(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) {
773   ; CHECK: vpmacsdql
774   %res = call <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) ;
775   ret <2 x i64> %res
776 }
777 declare <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
778
779 define <4 x i32> @test_int_x86_xop_vpmacssdd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) {
780   ; CHECK: vpmacssdd
781   %res = call <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) ;
782   ret <4 x i32> %res
783 }
784 declare <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone
785
786 define <2 x i64> @test_int_x86_xop_vpmacssdqh(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) {
787   ; CHECK: vpmacssdqh
788   %res = call <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) ;
789   ret <2 x i64> %res
790 }
791 declare <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
792
793 define <2 x i64> @test_int_x86_xop_vpmacssdql(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) {
794   ; CHECK: vpmacssdql
795   %res = call <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) ;
796   ret <2 x i64> %res
797 }
798 declare <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
799
800 define <4 x i32> @test_int_x86_xop_vpmacsswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) {
801   ; CHECK: vpmacsswd
802   %res = call <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) ;
803   ret <4 x i32> %res
804 }
805 declare <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
806
807 define <8 x i16> @test_int_x86_xop_vpmacssww(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) {
808   ; CHECK: vpmacssww
809   %res = call <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) ;
810   ret <8 x i16> %res
811 }
812 declare <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone
813
814 define <4 x i32> @test_int_x86_xop_vpmacswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) {
815   ; CHECK: vpmacswd
816   %res = call <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) ;
817   ret <4 x i32> %res
818 }
819 declare <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
820
821 define <8 x i16> @test_int_x86_xop_vpmacsww(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) {
822   ; CHECK: vpmacsww
823   %res = call <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) ;
824   ret <8 x i16> %res
825 }
826 declare <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone
827
828 define <4 x i32> @test_int_x86_xop_vpmadcsswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) {
829   ; CHECK: vpmadcsswd
830   %res = call <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) ;
831   ret <4 x i32> %res
832 }
833 declare <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
834
835 define <4 x i32> @test_int_x86_xop_vpmadcswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) {
836   ; CHECK: vpmadcswd
837   %res = call <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) ;
838   ret <4 x i32> %res
839 }
840 define <4 x i32> @test_int_x86_xop_vpmadcswd_mem(<8 x i16> %a0, <8 x i16>* %a1, <4 x i32> %a2) {
841   ; CHECK-NOT: vmovaps
842   ; CHECK: vpmadcswd
843   %vec = load <8 x i16>* %a1
844   %res = call <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16> %a0, <8 x i16> %vec, <4 x i32> %a2) ;
845   ret <4 x i32> %res
846 }
847 declare <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
848
849 define <16 x i8> @test_int_x86_xop_vpperm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) {
850   ; CHECK: vpperm
851   %res = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) ;
852   ret <16 x i8> %res
853 }
854 define <16 x i8> @test_int_x86_xop_vpperm_rm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8>* %a2) {
855   ; CHECK-NOT: vmovaps
856   ; CHECK: vpperm
857   %vec = load <16 x i8>* %a2
858   %res = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %vec) ;
859   ret <16 x i8> %res
860 }
861 define <16 x i8> @test_int_x86_xop_vpperm_mr(<16 x i8> %a0, <16 x i8>* %a1, <16 x i8> %a2) {
862   ; CHECK-NOT: vmovaps
863   ; CHECK: vpperm
864   %vec = load <16 x i8>* %a1
865   %res = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %a0, <16 x i8> %vec, <16 x i8> %a2) ;
866   ret <16 x i8> %res
867 }
868 declare <16 x i8> @llvm.x86.xop.vpperm(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone
869
870 define <16 x i8> @test_int_x86_xop_vprotb(<16 x i8> %a0, <16 x i8> %a1) {
871   ; CHECK: vprotb
872   %res = call <16 x i8> @llvm.x86.xop.vprotb(<16 x i8> %a0, <16 x i8> %a1) ;
873   ret <16 x i8> %res
874 }
875 declare <16 x i8> @llvm.x86.xop.vprotb(<16 x i8>, <16 x i8>) nounwind readnone
876
877 define <4 x i32> @test_int_x86_xop_vprotd(<4 x i32> %a0, <4 x i32> %a1) {
878   ; CHECK: vprotd
879   %res = call <4 x i32> @llvm.x86.xop.vprotd(<4 x i32> %a0, <4 x i32> %a1) ;
880   ret <4 x i32> %res
881 }
882 declare <4 x i32> @llvm.x86.xop.vprotd(<4 x i32>, <4 x i32>) nounwind readnone
883
884 define <2 x i64> @test_int_x86_xop_vprotq(<2 x i64> %a0, <2 x i64> %a1) {
885   ; CHECK: vprotq
886   %res = call <2 x i64> @llvm.x86.xop.vprotq(<2 x i64> %a0, <2 x i64> %a1) ;
887   ret <2 x i64> %res
888 }
889 declare <2 x i64> @llvm.x86.xop.vprotq(<2 x i64>, <2 x i64>) nounwind readnone
890
891 define <8 x i16> @test_int_x86_xop_vprotw(<8 x i16> %a0, <8 x i16> %a1) {
892   ; CHECK: vprotw
893   %res = call <8 x i16> @llvm.x86.xop.vprotw(<8 x i16> %a0, <8 x i16> %a1) ;
894   ret <8 x i16> %res
895 }
896 declare <8 x i16> @llvm.x86.xop.vprotw(<8 x i16>, <8 x i16>) nounwind readnone
897
898 define <16 x i8> @test_int_x86_xop_vpshab(<16 x i8> %a0, <16 x i8> %a1) {
899   ; CHECK: vpshab
900   %res = call <16 x i8> @llvm.x86.xop.vpshab(<16 x i8> %a0, <16 x i8> %a1) ;
901   ret <16 x i8> %res
902 }
903 declare <16 x i8> @llvm.x86.xop.vpshab(<16 x i8>, <16 x i8>) nounwind readnone
904
905 define <4 x i32> @test_int_x86_xop_vpshad(<4 x i32> %a0, <4 x i32> %a1) {
906   ; CHECK: vpshad
907   %res = call <4 x i32> @llvm.x86.xop.vpshad(<4 x i32> %a0, <4 x i32> %a1) ;
908   ret <4 x i32> %res
909 }
910 declare <4 x i32> @llvm.x86.xop.vpshad(<4 x i32>, <4 x i32>) nounwind readnone
911
912 define <2 x i64> @test_int_x86_xop_vpshaq(<2 x i64> %a0, <2 x i64> %a1) {
913   ; CHECK: vpshaq
914   %res = call <2 x i64> @llvm.x86.xop.vpshaq(<2 x i64> %a0, <2 x i64> %a1) ;
915   ret <2 x i64> %res
916 }
917 declare <2 x i64> @llvm.x86.xop.vpshaq(<2 x i64>, <2 x i64>) nounwind readnone
918
919 define <8 x i16> @test_int_x86_xop_vpshaw(<8 x i16> %a0, <8 x i16> %a1) {
920   ; CHECK: vpshaw
921   %res = call <8 x i16> @llvm.x86.xop.vpshaw(<8 x i16> %a0, <8 x i16> %a1) ;
922   ret <8 x i16> %res
923 }
924 declare <8 x i16> @llvm.x86.xop.vpshaw(<8 x i16>, <8 x i16>) nounwind readnone
925
926 define <16 x i8> @test_int_x86_xop_vpshlb(<16 x i8> %a0, <16 x i8> %a1) {
927   ; CHECK: vpshlb
928   %res = call <16 x i8> @llvm.x86.xop.vpshlb(<16 x i8> %a0, <16 x i8> %a1) ;
929   ret <16 x i8> %res
930 }
931 declare <16 x i8> @llvm.x86.xop.vpshlb(<16 x i8>, <16 x i8>) nounwind readnone
932
933 define <4 x i32> @test_int_x86_xop_vpshld(<4 x i32> %a0, <4 x i32> %a1) {
934   ; CHECK: vpshld
935   %res = call <4 x i32> @llvm.x86.xop.vpshld(<4 x i32> %a0, <4 x i32> %a1) ;
936   ret <4 x i32> %res
937 }
938 declare <4 x i32> @llvm.x86.xop.vpshld(<4 x i32>, <4 x i32>) nounwind readnone
939
940 define <2 x i64> @test_int_x86_xop_vpshlq(<2 x i64> %a0, <2 x i64> %a1) {
941   ; CHECK: vpshlq
942   %res = call <2 x i64> @llvm.x86.xop.vpshlq(<2 x i64> %a0, <2 x i64> %a1) ;
943   ret <2 x i64> %res
944 }
945 declare <2 x i64> @llvm.x86.xop.vpshlq(<2 x i64>, <2 x i64>) nounwind readnone
946
947 define <8 x i16> @test_int_x86_xop_vpshlw(<8 x i16> %a0, <8 x i16> %a1) {
948   ; CHECK: vpshlw
949   %res = call <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16> %a0, <8 x i16> %a1) ;
950   ret <8 x i16> %res
951 }
952 define <8 x i16> @test_int_x86_xop_vpshlw_rm(<8 x i16> %a0, <8 x i16>* %a1) {
953   ; CHECK-NOT: vmovaps
954   ; CHECK: vpshlw
955   %vec = load <8 x i16>* %a1
956   %res = call <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16> %a0, <8 x i16> %vec) ;
957   ret <8 x i16> %res
958 }
959 define <8 x i16> @test_int_x86_xop_vpshlw_mr(<8 x i16>* %a0, <8 x i16> %a1) {
960   ; CHECK-NOT: vmovaps
961   ; CHECK: vpshlw
962   %vec = load <8 x i16>* %a0
963   %res = call <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16> %vec, <8 x i16> %a1) ;
964   ret <8 x i16> %res
965 }
966 declare <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16>, <8 x i16>) nounwind readnone
967
968 define <4 x float> @test_int_x86_xop_vfrcz_ss(<4 x float> %a0, <4 x float> %a1) {
969   ; CHECK-NOT: mov
970   ; CHECK: vfrczss
971   %res = call <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float> %a0, <4 x float> %a1) ;
972   ret <4 x float> %res
973 }
974 define <4 x float> @test_int_x86_xop_vfrcz_ss_mem(<4 x float> %a0, float* %a1) {
975   ; CHECK-NOT: mov
976   ; CHECK: vfrczss
977   %elem = load float* %a1
978   %vec = insertelement <4 x float> undef, float %elem, i32 0
979   %res = call <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float> %a0, <4 x float> %vec) ;
980   ret <4 x float> %res
981 }
982 declare <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float>, <4 x float>) nounwind readnone
983
984 define <2 x double> @test_int_x86_xop_vfrcz_sd(<2 x double> %a0, <2 x double> %a1) {
985   ; CHECK-NOT: mov
986   ; CHECK: vfrczsd
987   %res = call <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double> %a0, <2 x double> %a1) ;
988   ret <2 x double> %res
989 }
990 define <2 x double> @test_int_x86_xop_vfrcz_sd_mem(<2 x double> %a0, double* %a1) {
991   ; CHECK-NOT: mov
992   ; CHECK: vfrczsd
993   %elem = load double* %a1
994   %vec = insertelement <2 x double> undef, double %elem, i32 0
995   %res = call <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double> %a0, <2 x double> %vec) ;
996   ret <2 x double> %res
997 }
998 declare <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double>, <2 x double>) nounwind readnone
999
1000 define <2 x double> @test_int_x86_xop_vfrcz_pd(<2 x double> %a0) {
1001   ; CHECK: vfrczpd
1002   %res = call <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double> %a0) ;
1003   ret <2 x double> %res
1004 }
1005 define <2 x double> @test_int_x86_xop_vfrcz_pd_mem(<2 x double>* %a0) {
1006   ; CHECK-NOT: vmovaps
1007   ; CHECK: vfrczpd
1008   %vec = load <2 x double>* %a0
1009   %res = call <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double> %vec) ;
1010   ret <2 x double> %res
1011 }
1012 declare <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double>) nounwind readnone
1013
1014 define <4 x double> @test_int_x86_xop_vfrcz_pd_256(<4 x double> %a0) {
1015   ; CHECK: vfrczpd
1016   ; CHECK: ymm
1017   %res = call <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double> %a0) ;
1018   ret <4 x double> %res
1019 }
1020 define <4 x double> @test_int_x86_xop_vfrcz_pd_256_mem(<4 x double>* %a0) {
1021   ; CHECK-NOT: vmovaps
1022   ; CHECK: vfrczpd
1023   ; CHECK: ymm
1024   %vec = load <4 x double>* %a0
1025   %res = call <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double> %vec) ;
1026   ret <4 x double> %res
1027 }
1028 declare <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double>) nounwind readnone
1029
1030 define <4 x float> @test_int_x86_xop_vfrcz_ps(<4 x float> %a0) {
1031   ; CHECK: vfrczps
1032   %res = call <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float> %a0) ;
1033   ret <4 x float> %res
1034 }
1035 define <4 x float> @test_int_x86_xop_vfrcz_ps_mem(<4 x float>* %a0) {
1036   ; CHECK-NOT: vmovaps
1037   ; CHECK: vfrczps
1038   %vec = load <4 x float>* %a0
1039   %res = call <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float> %vec) ;
1040   ret <4 x float> %res
1041 }
1042 declare <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float>) nounwind readnone
1043
1044 define <8 x float> @test_int_x86_xop_vfrcz_ps_256(<8 x float> %a0) {
1045   ; CHECK: vfrczps
1046   ; CHECK: ymm
1047   %res = call <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float> %a0) ;
1048   ret <8 x float> %res
1049 }
1050 define <8 x float> @test_int_x86_xop_vfrcz_ps_256_mem(<8 x float>* %a0) {
1051   ; CHECK-NOT: vmovaps
1052   ; CHECK: vfrczps
1053   ; CHECK: ymm
1054   %vec = load <8 x float>* %a0
1055   %res = call <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float> %vec) ;
1056   ret <8 x float> %res
1057 }
1058 declare <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float>) nounwind readnone
1059