[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / xop-intrinsics-x86_64-upgrade.ll
blob1a40c22648d9c21678ae23dfa10ab7b2a467c54f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+fma4,+xop | FileCheck %s
4 define <2 x double> @test_int_x86_xop_vpermil2pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
5 ; CHECK-LABEL: test_int_x86_xop_vpermil2pd:
6 ; CHECK:       # %bb.0:
7 ; CHECK-NEXT:    vpermil2pd $1, %xmm2, %xmm1, %xmm0, %xmm0
8 ; CHECK-NEXT:    retq
9   %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]
10   ret <2 x double> %res
12 define <2 x double> @test_int_x86_xop_vpermil2pd_mr(<2 x double> %a0, ptr %a1, <2 x double> %a2) {
13 ; CHECK-LABEL: test_int_x86_xop_vpermil2pd_mr:
14 ; CHECK:       # %bb.0:
15 ; CHECK-NEXT:    vpermil2pd $1, %xmm1, (%rdi), %xmm0, %xmm0
16 ; CHECK-NEXT:    retq
17   %vec = load <2 x double>, ptr %a1
18   %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]
19   ret <2 x double> %res
21 define <2 x double> @test_int_x86_xop_vpermil2pd_rm(<2 x double> %a0, <2 x double> %a1, ptr %a2) {
22 ; CHECK-LABEL: test_int_x86_xop_vpermil2pd_rm:
23 ; CHECK:       # %bb.0:
24 ; CHECK-NEXT:    vpermil2pd $1, (%rdi), %xmm1, %xmm0, %xmm0
25 ; CHECK-NEXT:    retq
26   %vec = load <2 x double>, ptr %a2
27   %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]
28   ret <2 x double> %res
30 declare <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double>, <2 x double>, <2 x double>, i8) nounwind readnone
32 define <4 x double> @test_int_x86_xop_vpermil2pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) {
33 ; CHECK-LABEL: test_int_x86_xop_vpermil2pd_256:
34 ; CHECK:       # %bb.0:
35 ; CHECK-NEXT:    vpermil2pd $2, %ymm2, %ymm1, %ymm0, %ymm0
36 ; CHECK-NEXT:    retq
37   %res = call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, i8 2) ;
38   ret <4 x double> %res
40 define <4 x double> @test_int_x86_xop_vpermil2pd_256_mr(<4 x double> %a0, ptr %a1, <4 x double> %a2) {
41 ; CHECK-LABEL: test_int_x86_xop_vpermil2pd_256_mr:
42 ; CHECK:       # %bb.0:
43 ; CHECK-NEXT:    vpermil2pd $2, %ymm1, (%rdi), %ymm0, %ymm0
44 ; CHECK-NEXT:    retq
45   %vec = load <4 x double>, ptr %a1
46   %res = call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %a0, <4 x double> %vec, <4 x double> %a2, i8 2) ;
47   ret <4 x double> %res
49 define <4 x double> @test_int_x86_xop_vpermil2pd_256_rm(<4 x double> %a0, <4 x double> %a1, ptr %a2) {
50 ; CHECK-LABEL: test_int_x86_xop_vpermil2pd_256_rm:
51 ; CHECK:       # %bb.0:
52 ; CHECK-NEXT:    vpermil2pd $2, (%rdi), %ymm1, %ymm0, %ymm0
53 ; CHECK-NEXT:    retq
54   %vec = load <4 x double>, ptr %a2
55   %res = call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %vec, i8 2) ;
56   ret <4 x double> %res
58 declare <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double>, <4 x double>, <4 x double>, i8) nounwind readnone
60 define <4 x float> @test_int_x86_xop_vpermil2ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
61 ; CHECK-LABEL: test_int_x86_xop_vpermil2ps:
62 ; CHECK:       # %bb.0:
63 ; CHECK-NEXT:    vpermil2ps $3, %xmm2, %xmm1, %xmm0, %xmm0
64 ; CHECK-NEXT:    retq
65   %res = call <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, i8 3) ;
66   ret <4 x float> %res
68 declare <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float>, <4 x float>, <4 x float>, i8) nounwind readnone
70 define <8 x float> @test_int_x86_xop_vpermil2ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {
71 ; CHECK-LABEL: test_int_x86_xop_vpermil2ps_256:
72 ; CHECK:       # %bb.0:
73 ; CHECK-NEXT:    vpermil2ps $4, %ymm2, %ymm1, %ymm0, %ymm0
74 ; CHECK-NEXT:    retq
75   %res = call <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, i8 4) ;
76   ret <8 x float> %res
78 declare <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float>, <8 x float>, <8 x float>, i8) nounwind readnone
80 define <16 x i8> @test_int_x86_xop_vpcomeqb(<16 x i8> %a0, <16 x i8> %a1) {
81 ; CHECK-LABEL: test_int_x86_xop_vpcomeqb:
82 ; CHECK:       # %bb.0:
83 ; CHECK-NEXT:    vpcomeqb %xmm1, %xmm0, %xmm0
84 ; CHECK-NEXT:    retq
85   %res = call <16 x i8> @llvm.x86.xop.vpcomeqb(<16 x i8> %a0, <16 x i8> %a1) ;
86   ret <16 x i8> %res
88 define <16 x i8> @test_int_x86_xop_vpcomeqb_mem(<16 x i8> %a0, ptr %a1) {
89 ; CHECK-LABEL: test_int_x86_xop_vpcomeqb_mem:
90 ; CHECK:       # %bb.0:
91 ; CHECK-NEXT:    vpcomeqb (%rdi), %xmm0, %xmm0
92 ; CHECK-NEXT:    retq
93   %vec = load <16 x i8>, ptr %a1
94   %res = call <16 x i8> @llvm.x86.xop.vpcomeqb(<16 x i8> %a0, <16 x i8> %vec) ;
95   ret <16 x i8> %res
97 declare <16 x i8> @llvm.x86.xop.vpcomeqb(<16 x i8>, <16 x i8>) nounwind readnone
99 define <8 x i16> @test_int_x86_xop_vpcomeqw(<8 x i16> %a0, <8 x i16> %a1) {
100 ; CHECK-LABEL: test_int_x86_xop_vpcomeqw:
101 ; CHECK:       # %bb.0:
102 ; CHECK-NEXT:    vpcomeqw %xmm1, %xmm0, %xmm0
103 ; CHECK-NEXT:    retq
104   %res = call <8 x i16> @llvm.x86.xop.vpcomeqw(<8 x i16> %a0, <8 x i16> %a1) ;
105   ret <8 x i16> %res
107 declare <8 x i16> @llvm.x86.xop.vpcomeqw(<8 x i16>, <8 x i16>) nounwind readnone
109 define <4 x i32> @test_int_x86_xop_vpcomeqd(<4 x i32> %a0, <4 x i32> %a1) {
110 ; CHECK-LABEL: test_int_x86_xop_vpcomeqd:
111 ; CHECK:       # %bb.0:
112 ; CHECK-NEXT:    vpcomeqd %xmm1, %xmm0, %xmm0
113 ; CHECK-NEXT:    retq
114   %res = call <4 x i32> @llvm.x86.xop.vpcomeqd(<4 x i32> %a0, <4 x i32> %a1) ;
115   ret <4 x i32> %res
117 declare <4 x i32> @llvm.x86.xop.vpcomeqd(<4 x i32>, <4 x i32>) nounwind readnone
119 define <2 x i64> @test_int_x86_xop_vpcomeqq(<2 x i64> %a0, <2 x i64> %a1) {
120 ; CHECK-LABEL: test_int_x86_xop_vpcomeqq:
121 ; CHECK:       # %bb.0:
122 ; CHECK-NEXT:    vpcomeqq %xmm1, %xmm0, %xmm0
123 ; CHECK-NEXT:    retq
124   %res = call <2 x i64> @llvm.x86.xop.vpcomeqq(<2 x i64> %a0, <2 x i64> %a1) ;
125   ret <2 x i64> %res
127 declare <2 x i64> @llvm.x86.xop.vpcomeqq(<2 x i64>, <2 x i64>) nounwind readnone
129 define <16 x i8> @test_int_x86_xop_vpcomequb(<16 x i8> %a0, <16 x i8> %a1) {
130 ; CHECK-LABEL: test_int_x86_xop_vpcomequb:
131 ; CHECK:       # %bb.0:
132 ; CHECK-NEXT:    vpcomeqb %xmm1, %xmm0, %xmm0
133 ; CHECK-NEXT:    retq
134   %res = call <16 x i8> @llvm.x86.xop.vpcomequb(<16 x i8> %a0, <16 x i8> %a1) ;
135   ret <16 x i8> %res
137 declare <16 x i8> @llvm.x86.xop.vpcomequb(<16 x i8>, <16 x i8>) nounwind readnone
139 define <4 x i32> @test_int_x86_xop_vpcomequd(<4 x i32> %a0, <4 x i32> %a1) {
140 ; CHECK-LABEL: test_int_x86_xop_vpcomequd:
141 ; CHECK:       # %bb.0:
142 ; CHECK-NEXT:    vpcomeqd %xmm1, %xmm0, %xmm0
143 ; CHECK-NEXT:    retq
144   %res = call <4 x i32> @llvm.x86.xop.vpcomequd(<4 x i32> %a0, <4 x i32> %a1) ;
145   ret <4 x i32> %res
147 declare <4 x i32> @llvm.x86.xop.vpcomequd(<4 x i32>, <4 x i32>) nounwind readnone
149 define <2 x i64> @test_int_x86_xop_vpcomequq(<2 x i64> %a0, <2 x i64> %a1) {
150 ; CHECK-LABEL: test_int_x86_xop_vpcomequq:
151 ; CHECK:       # %bb.0:
152 ; CHECK-NEXT:    vpcomeqq %xmm1, %xmm0, %xmm0
153 ; CHECK-NEXT:    retq
154   %res = call <2 x i64> @llvm.x86.xop.vpcomequq(<2 x i64> %a0, <2 x i64> %a1) ;
155   ret <2 x i64> %res
157 declare <2 x i64> @llvm.x86.xop.vpcomequq(<2 x i64>, <2 x i64>) nounwind readnone
159 define <8 x i16> @test_int_x86_xop_vpcomequw(<8 x i16> %a0, <8 x i16> %a1) {
160 ; CHECK-LABEL: test_int_x86_xop_vpcomequw:
161 ; CHECK:       # %bb.0:
162 ; CHECK-NEXT:    vpcomeqw %xmm1, %xmm0, %xmm0
163 ; CHECK-NEXT:    retq
164   %res = call <8 x i16> @llvm.x86.xop.vpcomequw(<8 x i16> %a0, <8 x i16> %a1) ;
165   ret <8 x i16> %res
167 declare <8 x i16> @llvm.x86.xop.vpcomequw(<8 x i16>, <8 x i16>) nounwind readnone
169 define <16 x i8> @test_int_x86_xop_vpcomfalseb(<16 x i8> %a0, <16 x i8> %a1) {
170 ; CHECK-LABEL: test_int_x86_xop_vpcomfalseb:
171 ; CHECK:       # %bb.0:
172 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
173 ; CHECK-NEXT:    retq
174   %res = call <16 x i8> @llvm.x86.xop.vpcomfalseb(<16 x i8> %a0, <16 x i8> %a1) ;
175   ret <16 x i8> %res
177 declare <16 x i8> @llvm.x86.xop.vpcomfalseb(<16 x i8>, <16 x i8>) nounwind readnone
179 define <4 x i32> @test_int_x86_xop_vpcomfalsed(<4 x i32> %a0, <4 x i32> %a1) {
180 ; CHECK-LABEL: test_int_x86_xop_vpcomfalsed:
181 ; CHECK:       # %bb.0:
182 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
183 ; CHECK-NEXT:    retq
184   %res = call <4 x i32> @llvm.x86.xop.vpcomfalsed(<4 x i32> %a0, <4 x i32> %a1) ;
185   ret <4 x i32> %res
187 declare <4 x i32> @llvm.x86.xop.vpcomfalsed(<4 x i32>, <4 x i32>) nounwind readnone
189 define <2 x i64> @test_int_x86_xop_vpcomfalseq(<2 x i64> %a0, <2 x i64> %a1) {
190 ; CHECK-LABEL: test_int_x86_xop_vpcomfalseq:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
193 ; CHECK-NEXT:    retq
194   %res = call <2 x i64> @llvm.x86.xop.vpcomfalseq(<2 x i64> %a0, <2 x i64> %a1) ;
195   ret <2 x i64> %res
197 declare <2 x i64> @llvm.x86.xop.vpcomfalseq(<2 x i64>, <2 x i64>) nounwind readnone
199 define <16 x i8> @test_int_x86_xop_vpcomfalseub(<16 x i8> %a0, <16 x i8> %a1) {
200 ; CHECK-LABEL: test_int_x86_xop_vpcomfalseub:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
203 ; CHECK-NEXT:    retq
204   %res = call <16 x i8> @llvm.x86.xop.vpcomfalseub(<16 x i8> %a0, <16 x i8> %a1) ;
205   ret <16 x i8> %res
207 declare <16 x i8> @llvm.x86.xop.vpcomfalseub(<16 x i8>, <16 x i8>) nounwind readnone
209 define <4 x i32> @test_int_x86_xop_vpcomfalseud(<4 x i32> %a0, <4 x i32> %a1) {
210 ; CHECK-LABEL: test_int_x86_xop_vpcomfalseud:
211 ; CHECK:       # %bb.0:
212 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
213 ; CHECK-NEXT:    retq
214   %res = call <4 x i32> @llvm.x86.xop.vpcomfalseud(<4 x i32> %a0, <4 x i32> %a1) ;
215   ret <4 x i32> %res
217 declare <4 x i32> @llvm.x86.xop.vpcomfalseud(<4 x i32>, <4 x i32>) nounwind readnone
219 define <2 x i64> @test_int_x86_xop_vpcomfalseuq(<2 x i64> %a0, <2 x i64> %a1) {
220 ; CHECK-LABEL: test_int_x86_xop_vpcomfalseuq:
221 ; CHECK:       # %bb.0:
222 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
223 ; CHECK-NEXT:    retq
224   %res = call <2 x i64> @llvm.x86.xop.vpcomfalseuq(<2 x i64> %a0, <2 x i64> %a1) ;
225   ret <2 x i64> %res
227 declare <2 x i64> @llvm.x86.xop.vpcomfalseuq(<2 x i64>, <2 x i64>) nounwind readnone
229 define <8 x i16> @test_int_x86_xop_vpcomfalseuw(<8 x i16> %a0, <8 x i16> %a1) {
230 ; CHECK-LABEL: test_int_x86_xop_vpcomfalseuw:
231 ; CHECK:       # %bb.0:
232 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
233 ; CHECK-NEXT:    retq
234   %res = call <8 x i16> @llvm.x86.xop.vpcomfalseuw(<8 x i16> %a0, <8 x i16> %a1) ;
235   ret <8 x i16> %res
237 declare <8 x i16> @llvm.x86.xop.vpcomfalseuw(<8 x i16>, <8 x i16>) nounwind readnone
239 define <8 x i16> @test_int_x86_xop_vpcomfalsew(<8 x i16> %a0, <8 x i16> %a1) {
240 ; CHECK-LABEL: test_int_x86_xop_vpcomfalsew:
241 ; CHECK:       # %bb.0:
242 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
243 ; CHECK-NEXT:    retq
244   %res = call <8 x i16> @llvm.x86.xop.vpcomfalsew(<8 x i16> %a0, <8 x i16> %a1) ;
245   ret <8 x i16> %res
247 declare <8 x i16> @llvm.x86.xop.vpcomfalsew(<8 x i16>, <8 x i16>) nounwind readnone
249 define <16 x i8> @test_int_x86_xop_vpcomgeb(<16 x i8> %a0, <16 x i8> %a1) {
250 ; CHECK-LABEL: test_int_x86_xop_vpcomgeb:
251 ; CHECK:       # %bb.0:
252 ; CHECK-NEXT:    vpcomgeb %xmm1, %xmm0, %xmm0
253 ; CHECK-NEXT:    retq
254   %res = call <16 x i8> @llvm.x86.xop.vpcomgeb(<16 x i8> %a0, <16 x i8> %a1) ;
255   ret <16 x i8> %res
257 declare <16 x i8> @llvm.x86.xop.vpcomgeb(<16 x i8>, <16 x i8>) nounwind readnone
259 define <4 x i32> @test_int_x86_xop_vpcomged(<4 x i32> %a0, <4 x i32> %a1) {
260 ; CHECK-LABEL: test_int_x86_xop_vpcomged:
261 ; CHECK:       # %bb.0:
262 ; CHECK-NEXT:    vpcomged %xmm1, %xmm0, %xmm0
263 ; CHECK-NEXT:    retq
264   %res = call <4 x i32> @llvm.x86.xop.vpcomged(<4 x i32> %a0, <4 x i32> %a1) ;
265   ret <4 x i32> %res
267 declare <4 x i32> @llvm.x86.xop.vpcomged(<4 x i32>, <4 x i32>) nounwind readnone
269 define <2 x i64> @test_int_x86_xop_vpcomgeq(<2 x i64> %a0, <2 x i64> %a1) {
270 ; CHECK-LABEL: test_int_x86_xop_vpcomgeq:
271 ; CHECK:       # %bb.0:
272 ; CHECK-NEXT:    vpcomgeq %xmm1, %xmm0, %xmm0
273 ; CHECK-NEXT:    retq
274   %res = call <2 x i64> @llvm.x86.xop.vpcomgeq(<2 x i64> %a0, <2 x i64> %a1) ;
275   ret <2 x i64> %res
277 declare <2 x i64> @llvm.x86.xop.vpcomgeq(<2 x i64>, <2 x i64>) nounwind readnone
279 define <16 x i8> @test_int_x86_xop_vpcomgeub(<16 x i8> %a0, <16 x i8> %a1) {
280 ; CHECK-LABEL: test_int_x86_xop_vpcomgeub:
281 ; CHECK:       # %bb.0:
282 ; CHECK-NEXT:    vpcomgeub %xmm1, %xmm0, %xmm0
283 ; CHECK-NEXT:    retq
284   %res = call <16 x i8> @llvm.x86.xop.vpcomgeub(<16 x i8> %a0, <16 x i8> %a1) ;
285   ret <16 x i8> %res
287 declare <16 x i8> @llvm.x86.xop.vpcomgeub(<16 x i8>, <16 x i8>) nounwind readnone
289 define <4 x i32> @test_int_x86_xop_vpcomgeud(<4 x i32> %a0, <4 x i32> %a1) {
290 ; CHECK-LABEL: test_int_x86_xop_vpcomgeud:
291 ; CHECK:       # %bb.0:
292 ; CHECK-NEXT:    vpcomgeud %xmm1, %xmm0, %xmm0
293 ; CHECK-NEXT:    retq
294   %res = call <4 x i32> @llvm.x86.xop.vpcomgeud(<4 x i32> %a0, <4 x i32> %a1) ;
295   ret <4 x i32> %res
297 declare <4 x i32> @llvm.x86.xop.vpcomgeud(<4 x i32>, <4 x i32>) nounwind readnone
299 define <2 x i64> @test_int_x86_xop_vpcomgeuq(<2 x i64> %a0, <2 x i64> %a1) {
300 ; CHECK-LABEL: test_int_x86_xop_vpcomgeuq:
301 ; CHECK:       # %bb.0:
302 ; CHECK-NEXT:    vpcomgeuq %xmm1, %xmm0, %xmm0
303 ; CHECK-NEXT:    retq
304   %res = call <2 x i64> @llvm.x86.xop.vpcomgeuq(<2 x i64> %a0, <2 x i64> %a1) ;
305   ret <2 x i64> %res
307 declare <2 x i64> @llvm.x86.xop.vpcomgeuq(<2 x i64>, <2 x i64>) nounwind readnone
309 define <8 x i16> @test_int_x86_xop_vpcomgeuw(<8 x i16> %a0, <8 x i16> %a1) {
310 ; CHECK-LABEL: test_int_x86_xop_vpcomgeuw:
311 ; CHECK:       # %bb.0:
312 ; CHECK-NEXT:    vpcomgeuw %xmm1, %xmm0, %xmm0
313 ; CHECK-NEXT:    retq
314   %res = call <8 x i16> @llvm.x86.xop.vpcomgeuw(<8 x i16> %a0, <8 x i16> %a1) ;
315   ret <8 x i16> %res
317 declare <8 x i16> @llvm.x86.xop.vpcomgeuw(<8 x i16>, <8 x i16>) nounwind readnone
319 define <8 x i16> @test_int_x86_xop_vpcomgew(<8 x i16> %a0, <8 x i16> %a1) {
320 ; CHECK-LABEL: test_int_x86_xop_vpcomgew:
321 ; CHECK:       # %bb.0:
322 ; CHECK-NEXT:    vpcomgew %xmm1, %xmm0, %xmm0
323 ; CHECK-NEXT:    retq
324   %res = call <8 x i16> @llvm.x86.xop.vpcomgew(<8 x i16> %a0, <8 x i16> %a1) ;
325   ret <8 x i16> %res
327 declare <8 x i16> @llvm.x86.xop.vpcomgew(<8 x i16>, <8 x i16>) nounwind readnone
329 define <16 x i8> @test_int_x86_xop_vpcomgtb(<16 x i8> %a0, <16 x i8> %a1) {
330 ; CHECK-LABEL: test_int_x86_xop_vpcomgtb:
331 ; CHECK:       # %bb.0:
332 ; CHECK-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm0
333 ; CHECK-NEXT:    retq
334   %res = call <16 x i8> @llvm.x86.xop.vpcomgtb(<16 x i8> %a0, <16 x i8> %a1) ;
335   ret <16 x i8> %res
337 declare <16 x i8> @llvm.x86.xop.vpcomgtb(<16 x i8>, <16 x i8>) nounwind readnone
339 define <4 x i32> @test_int_x86_xop_vpcomgtd(<4 x i32> %a0, <4 x i32> %a1) {
340 ; CHECK-LABEL: test_int_x86_xop_vpcomgtd:
341 ; CHECK:       # %bb.0:
342 ; CHECK-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm0
343 ; CHECK-NEXT:    retq
344   %res = call <4 x i32> @llvm.x86.xop.vpcomgtd(<4 x i32> %a0, <4 x i32> %a1) ;
345   ret <4 x i32> %res
347 declare <4 x i32> @llvm.x86.xop.vpcomgtd(<4 x i32>, <4 x i32>) nounwind readnone
349 define <2 x i64> @test_int_x86_xop_vpcomgtq(<2 x i64> %a0, <2 x i64> %a1) {
350 ; CHECK-LABEL: test_int_x86_xop_vpcomgtq:
351 ; CHECK:       # %bb.0:
352 ; CHECK-NEXT:    vpcomgtq %xmm1, %xmm0, %xmm0
353 ; CHECK-NEXT:    retq
354   %res = call <2 x i64> @llvm.x86.xop.vpcomgtq(<2 x i64> %a0, <2 x i64> %a1) ;
355   ret <2 x i64> %res
357 declare <2 x i64> @llvm.x86.xop.vpcomgtq(<2 x i64>, <2 x i64>) nounwind readnone
359 define <16 x i8> @test_int_x86_xop_vpcomgtub(<16 x i8> %a0, <16 x i8> %a1) {
360 ; CHECK-LABEL: test_int_x86_xop_vpcomgtub:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    vpcomgtub %xmm1, %xmm0, %xmm0
363 ; CHECK-NEXT:    retq
364   %res = call <16 x i8> @llvm.x86.xop.vpcomgtub(<16 x i8> %a0, <16 x i8> %a1) ;
365   ret <16 x i8> %res
367 declare <16 x i8> @llvm.x86.xop.vpcomgtub(<16 x i8>, <16 x i8>) nounwind readnone
369 define <4 x i32> @test_int_x86_xop_vpcomgtud(<4 x i32> %a0, <4 x i32> %a1) {
370 ; CHECK-LABEL: test_int_x86_xop_vpcomgtud:
371 ; CHECK:       # %bb.0:
372 ; CHECK-NEXT:    vpcomgtud %xmm1, %xmm0, %xmm0
373 ; CHECK-NEXT:    retq
374   %res = call <4 x i32> @llvm.x86.xop.vpcomgtud(<4 x i32> %a0, <4 x i32> %a1) ;
375   ret <4 x i32> %res
377 declare <4 x i32> @llvm.x86.xop.vpcomgtud(<4 x i32>, <4 x i32>) nounwind readnone
379 define <2 x i64> @test_int_x86_xop_vpcomgtuq(<2 x i64> %a0, <2 x i64> %a1) {
380 ; CHECK-LABEL: test_int_x86_xop_vpcomgtuq:
381 ; CHECK:       # %bb.0:
382 ; CHECK-NEXT:    vpcomgtuq %xmm1, %xmm0, %xmm0
383 ; CHECK-NEXT:    retq
384   %res = call <2 x i64> @llvm.x86.xop.vpcomgtuq(<2 x i64> %a0, <2 x i64> %a1) ;
385   ret <2 x i64> %res
387 declare <2 x i64> @llvm.x86.xop.vpcomgtuq(<2 x i64>, <2 x i64>) nounwind readnone
389 define <8 x i16> @test_int_x86_xop_vpcomgtuw(<8 x i16> %a0, <8 x i16> %a1) {
390 ; CHECK-LABEL: test_int_x86_xop_vpcomgtuw:
391 ; CHECK:       # %bb.0:
392 ; CHECK-NEXT:    vpcomgtuw %xmm1, %xmm0, %xmm0
393 ; CHECK-NEXT:    retq
394   %res = call <8 x i16> @llvm.x86.xop.vpcomgtuw(<8 x i16> %a0, <8 x i16> %a1) ;
395   ret <8 x i16> %res
397 declare <8 x i16> @llvm.x86.xop.vpcomgtuw(<8 x i16>, <8 x i16>) nounwind readnone
399 define <8 x i16> @test_int_x86_xop_vpcomgtw(<8 x i16> %a0, <8 x i16> %a1) {
400 ; CHECK-LABEL: test_int_x86_xop_vpcomgtw:
401 ; CHECK:       # %bb.0:
402 ; CHECK-NEXT:    vpcomgtw %xmm1, %xmm0, %xmm0
403 ; CHECK-NEXT:    retq
404   %res = call <8 x i16> @llvm.x86.xop.vpcomgtw(<8 x i16> %a0, <8 x i16> %a1) ;
405   ret <8 x i16> %res
407 declare <8 x i16> @llvm.x86.xop.vpcomgtw(<8 x i16>, <8 x i16>) nounwind readnone
409 define <16 x i8> @test_int_x86_xop_vpcomleb(<16 x i8> %a0, <16 x i8> %a1) {
410 ; CHECK-LABEL: test_int_x86_xop_vpcomleb:
411 ; CHECK:       # %bb.0:
412 ; CHECK-NEXT:    vpcomleb %xmm1, %xmm0, %xmm0
413 ; CHECK-NEXT:    retq
414   %res = call <16 x i8> @llvm.x86.xop.vpcomleb(<16 x i8> %a0, <16 x i8> %a1) ;
415   ret <16 x i8> %res
417 declare <16 x i8> @llvm.x86.xop.vpcomleb(<16 x i8>, <16 x i8>) nounwind readnone
419 define <4 x i32> @test_int_x86_xop_vpcomled(<4 x i32> %a0, <4 x i32> %a1) {
420 ; CHECK-LABEL: test_int_x86_xop_vpcomled:
421 ; CHECK:       # %bb.0:
422 ; CHECK-NEXT:    vpcomled %xmm1, %xmm0, %xmm0
423 ; CHECK-NEXT:    retq
424   %res = call <4 x i32> @llvm.x86.xop.vpcomled(<4 x i32> %a0, <4 x i32> %a1) ;
425   ret <4 x i32> %res
427 declare <4 x i32> @llvm.x86.xop.vpcomled(<4 x i32>, <4 x i32>) nounwind readnone
429 define <2 x i64> @test_int_x86_xop_vpcomleq(<2 x i64> %a0, <2 x i64> %a1) {
430 ; CHECK-LABEL: test_int_x86_xop_vpcomleq:
431 ; CHECK:       # %bb.0:
432 ; CHECK-NEXT:    vpcomleq %xmm1, %xmm0, %xmm0
433 ; CHECK-NEXT:    retq
434   %res = call <2 x i64> @llvm.x86.xop.vpcomleq(<2 x i64> %a0, <2 x i64> %a1) ;
435   ret <2 x i64> %res
437 declare <2 x i64> @llvm.x86.xop.vpcomleq(<2 x i64>, <2 x i64>) nounwind readnone
439 define <16 x i8> @test_int_x86_xop_vpcomleub(<16 x i8> %a0, <16 x i8> %a1) {
440 ; CHECK-LABEL: test_int_x86_xop_vpcomleub:
441 ; CHECK:       # %bb.0:
442 ; CHECK-NEXT:    vpcomleub %xmm1, %xmm0, %xmm0
443 ; CHECK-NEXT:    retq
444   %res = call <16 x i8> @llvm.x86.xop.vpcomleub(<16 x i8> %a0, <16 x i8> %a1) ;
445   ret <16 x i8> %res
447 declare <16 x i8> @llvm.x86.xop.vpcomleub(<16 x i8>, <16 x i8>) nounwind readnone
449 define <4 x i32> @test_int_x86_xop_vpcomleud(<4 x i32> %a0, <4 x i32> %a1) {
450 ; CHECK-LABEL: test_int_x86_xop_vpcomleud:
451 ; CHECK:       # %bb.0:
452 ; CHECK-NEXT:    vpcomleud %xmm1, %xmm0, %xmm0
453 ; CHECK-NEXT:    retq
454   %res = call <4 x i32> @llvm.x86.xop.vpcomleud(<4 x i32> %a0, <4 x i32> %a1) ;
455   ret <4 x i32> %res
457 declare <4 x i32> @llvm.x86.xop.vpcomleud(<4 x i32>, <4 x i32>) nounwind readnone
459 define <2 x i64> @test_int_x86_xop_vpcomleuq(<2 x i64> %a0, <2 x i64> %a1) {
460 ; CHECK-LABEL: test_int_x86_xop_vpcomleuq:
461 ; CHECK:       # %bb.0:
462 ; CHECK-NEXT:    vpcomleuq %xmm1, %xmm0, %xmm0
463 ; CHECK-NEXT:    retq
464   %res = call <2 x i64> @llvm.x86.xop.vpcomleuq(<2 x i64> %a0, <2 x i64> %a1) ;
465   ret <2 x i64> %res
467 declare <2 x i64> @llvm.x86.xop.vpcomleuq(<2 x i64>, <2 x i64>) nounwind readnone
469 define <8 x i16> @test_int_x86_xop_vpcomleuw(<8 x i16> %a0, <8 x i16> %a1) {
470 ; CHECK-LABEL: test_int_x86_xop_vpcomleuw:
471 ; CHECK:       # %bb.0:
472 ; CHECK-NEXT:    vpcomleuw %xmm1, %xmm0, %xmm0
473 ; CHECK-NEXT:    retq
474   %res = call <8 x i16> @llvm.x86.xop.vpcomleuw(<8 x i16> %a0, <8 x i16> %a1) ;
475   ret <8 x i16> %res
477 declare <8 x i16> @llvm.x86.xop.vpcomleuw(<8 x i16>, <8 x i16>) nounwind readnone
479 define <8 x i16> @test_int_x86_xop_vpcomlew(<8 x i16> %a0, <8 x i16> %a1) {
480 ; CHECK-LABEL: test_int_x86_xop_vpcomlew:
481 ; CHECK:       # %bb.0:
482 ; CHECK-NEXT:    vpcomlew %xmm1, %xmm0, %xmm0
483 ; CHECK-NEXT:    retq
484   %res = call <8 x i16> @llvm.x86.xop.vpcomlew(<8 x i16> %a0, <8 x i16> %a1) ;
485   ret <8 x i16> %res
487 declare <8 x i16> @llvm.x86.xop.vpcomlew(<8 x i16>, <8 x i16>) nounwind readnone
489 define <16 x i8> @test_int_x86_xop_vpcomltb(<16 x i8> %a0, <16 x i8> %a1) {
490 ; CHECK-LABEL: test_int_x86_xop_vpcomltb:
491 ; CHECK:       # %bb.0:
492 ; CHECK-NEXT:    vpcomltb %xmm1, %xmm0, %xmm0
493 ; CHECK-NEXT:    retq
494   %res = call <16 x i8> @llvm.x86.xop.vpcomltb(<16 x i8> %a0, <16 x i8> %a1) ;
495   ret <16 x i8> %res
497 declare <16 x i8> @llvm.x86.xop.vpcomltb(<16 x i8>, <16 x i8>) nounwind readnone
499 define <4 x i32> @test_int_x86_xop_vpcomltd(<4 x i32> %a0, <4 x i32> %a1) {
500 ; CHECK-LABEL: test_int_x86_xop_vpcomltd:
501 ; CHECK:       # %bb.0:
502 ; CHECK-NEXT:    vpcomltd %xmm1, %xmm0, %xmm0
503 ; CHECK-NEXT:    retq
504   %res = call <4 x i32> @llvm.x86.xop.vpcomltd(<4 x i32> %a0, <4 x i32> %a1) ;
505   ret <4 x i32> %res
507 declare <4 x i32> @llvm.x86.xop.vpcomltd(<4 x i32>, <4 x i32>) nounwind readnone
509 define <2 x i64> @test_int_x86_xop_vpcomltq(<2 x i64> %a0, <2 x i64> %a1) {
510 ; CHECK-LABEL: test_int_x86_xop_vpcomltq:
511 ; CHECK:       # %bb.0:
512 ; CHECK-NEXT:    vpcomltq %xmm1, %xmm0, %xmm0
513 ; CHECK-NEXT:    retq
514   %res = call <2 x i64> @llvm.x86.xop.vpcomltq(<2 x i64> %a0, <2 x i64> %a1) ;
515   ret <2 x i64> %res
517 declare <2 x i64> @llvm.x86.xop.vpcomltq(<2 x i64>, <2 x i64>) nounwind readnone
519 define <16 x i8> @test_int_x86_xop_vpcomltub(<16 x i8> %a0, <16 x i8> %a1) {
520 ; CHECK-LABEL: test_int_x86_xop_vpcomltub:
521 ; CHECK:       # %bb.0:
522 ; CHECK-NEXT:    vpcomltub %xmm1, %xmm0, %xmm0
523 ; CHECK-NEXT:    retq
524   %res = call <16 x i8> @llvm.x86.xop.vpcomltub(<16 x i8> %a0, <16 x i8> %a1) ;
525   ret <16 x i8> %res
527 declare <16 x i8> @llvm.x86.xop.vpcomltub(<16 x i8>, <16 x i8>) nounwind readnone
529 define <4 x i32> @test_int_x86_xop_vpcomltud(<4 x i32> %a0, <4 x i32> %a1) {
530 ; CHECK-LABEL: test_int_x86_xop_vpcomltud:
531 ; CHECK:       # %bb.0:
532 ; CHECK-NEXT:    vpcomltud %xmm1, %xmm0, %xmm0
533 ; CHECK-NEXT:    retq
534   %res = call <4 x i32> @llvm.x86.xop.vpcomltud(<4 x i32> %a0, <4 x i32> %a1) ;
535   ret <4 x i32> %res
537 declare <4 x i32> @llvm.x86.xop.vpcomltud(<4 x i32>, <4 x i32>) nounwind readnone
539 define <2 x i64> @test_int_x86_xop_vpcomltuq(<2 x i64> %a0, <2 x i64> %a1) {
540 ; CHECK-LABEL: test_int_x86_xop_vpcomltuq:
541 ; CHECK:       # %bb.0:
542 ; CHECK-NEXT:    vpcomltuq %xmm1, %xmm0, %xmm0
543 ; CHECK-NEXT:    retq
544   %res = call <2 x i64> @llvm.x86.xop.vpcomltuq(<2 x i64> %a0, <2 x i64> %a1) ;
545   ret <2 x i64> %res
547 declare <2 x i64> @llvm.x86.xop.vpcomltuq(<2 x i64>, <2 x i64>) nounwind readnone
549 define <8 x i16> @test_int_x86_xop_vpcomltuw(<8 x i16> %a0, <8 x i16> %a1) {
550 ; CHECK-LABEL: test_int_x86_xop_vpcomltuw:
551 ; CHECK:       # %bb.0:
552 ; CHECK-NEXT:    vpcomltuw %xmm1, %xmm0, %xmm0
553 ; CHECK-NEXT:    retq
554   %res = call <8 x i16> @llvm.x86.xop.vpcomltuw(<8 x i16> %a0, <8 x i16> %a1) ;
555   ret <8 x i16> %res
557 declare <8 x i16> @llvm.x86.xop.vpcomltuw(<8 x i16>, <8 x i16>) nounwind readnone
559 define <8 x i16> @test_int_x86_xop_vpcomltw(<8 x i16> %a0, <8 x i16> %a1) {
560 ; CHECK-LABEL: test_int_x86_xop_vpcomltw:
561 ; CHECK:       # %bb.0:
562 ; CHECK-NEXT:    vpcomltw %xmm1, %xmm0, %xmm0
563 ; CHECK-NEXT:    retq
564   %res = call <8 x i16> @llvm.x86.xop.vpcomltw(<8 x i16> %a0, <8 x i16> %a1) ;
565   ret <8 x i16> %res
567 declare <8 x i16> @llvm.x86.xop.vpcomltw(<8 x i16>, <8 x i16>) nounwind readnone
569 define <16 x i8> @test_int_x86_xop_vpcomneb(<16 x i8> %a0, <16 x i8> %a1) {
570 ; CHECK-LABEL: test_int_x86_xop_vpcomneb:
571 ; CHECK:       # %bb.0:
572 ; CHECK-NEXT:    vpcomneqb %xmm1, %xmm0, %xmm0
573 ; CHECK-NEXT:    retq
574   %res = call <16 x i8> @llvm.x86.xop.vpcomneb(<16 x i8> %a0, <16 x i8> %a1) ;
575   ret <16 x i8> %res
577 declare <16 x i8> @llvm.x86.xop.vpcomneb(<16 x i8>, <16 x i8>) nounwind readnone
579 define <4 x i32> @test_int_x86_xop_vpcomned(<4 x i32> %a0, <4 x i32> %a1) {
580 ; CHECK-LABEL: test_int_x86_xop_vpcomned:
581 ; CHECK:       # %bb.0:
582 ; CHECK-NEXT:    vpcomneqd %xmm1, %xmm0, %xmm0
583 ; CHECK-NEXT:    retq
584   %res = call <4 x i32> @llvm.x86.xop.vpcomned(<4 x i32> %a0, <4 x i32> %a1) ;
585   ret <4 x i32> %res
587 declare <4 x i32> @llvm.x86.xop.vpcomned(<4 x i32>, <4 x i32>) nounwind readnone
589 define <2 x i64> @test_int_x86_xop_vpcomneq(<2 x i64> %a0, <2 x i64> %a1) {
590 ; CHECK-LABEL: test_int_x86_xop_vpcomneq:
591 ; CHECK:       # %bb.0:
592 ; CHECK-NEXT:    vpcomneqq %xmm1, %xmm0, %xmm0
593 ; CHECK-NEXT:    retq
594   %res = call <2 x i64> @llvm.x86.xop.vpcomneq(<2 x i64> %a0, <2 x i64> %a1) ;
595   ret <2 x i64> %res
597 declare <2 x i64> @llvm.x86.xop.vpcomneq(<2 x i64>, <2 x i64>) nounwind readnone
599 define <16 x i8> @test_int_x86_xop_vpcomneub(<16 x i8> %a0, <16 x i8> %a1) {
600 ; CHECK-LABEL: test_int_x86_xop_vpcomneub:
601 ; CHECK:       # %bb.0:
602 ; CHECK-NEXT:    vpcomneqb %xmm1, %xmm0, %xmm0
603 ; CHECK-NEXT:    retq
604   %res = call <16 x i8> @llvm.x86.xop.vpcomneub(<16 x i8> %a0, <16 x i8> %a1) ;
605   ret <16 x i8> %res
607 declare <16 x i8> @llvm.x86.xop.vpcomneub(<16 x i8>, <16 x i8>) nounwind readnone
609 define <4 x i32> @test_int_x86_xop_vpcomneud(<4 x i32> %a0, <4 x i32> %a1) {
610 ; CHECK-LABEL: test_int_x86_xop_vpcomneud:
611 ; CHECK:       # %bb.0:
612 ; CHECK-NEXT:    vpcomneqd %xmm1, %xmm0, %xmm0
613 ; CHECK-NEXT:    retq
614   %res = call <4 x i32> @llvm.x86.xop.vpcomneud(<4 x i32> %a0, <4 x i32> %a1) ;
615   ret <4 x i32> %res
617 declare <4 x i32> @llvm.x86.xop.vpcomneud(<4 x i32>, <4 x i32>) nounwind readnone
619 define <2 x i64> @test_int_x86_xop_vpcomneuq(<2 x i64> %a0, <2 x i64> %a1) {
620 ; CHECK-LABEL: test_int_x86_xop_vpcomneuq:
621 ; CHECK:       # %bb.0:
622 ; CHECK-NEXT:    vpcomneqq %xmm1, %xmm0, %xmm0
623 ; CHECK-NEXT:    retq
624   %res = call <2 x i64> @llvm.x86.xop.vpcomneuq(<2 x i64> %a0, <2 x i64> %a1) ;
625   ret <2 x i64> %res
627 declare <2 x i64> @llvm.x86.xop.vpcomneuq(<2 x i64>, <2 x i64>) nounwind readnone
629 define <8 x i16> @test_int_x86_xop_vpcomneuw(<8 x i16> %a0, <8 x i16> %a1) {
630 ; CHECK-LABEL: test_int_x86_xop_vpcomneuw:
631 ; CHECK:       # %bb.0:
632 ; CHECK-NEXT:    vpcomneqw %xmm1, %xmm0, %xmm0
633 ; CHECK-NEXT:    retq
634   %res = call <8 x i16> @llvm.x86.xop.vpcomneuw(<8 x i16> %a0, <8 x i16> %a1) ;
635   ret <8 x i16> %res
637 declare <8 x i16> @llvm.x86.xop.vpcomneuw(<8 x i16>, <8 x i16>) nounwind readnone
639 define <8 x i16> @test_int_x86_xop_vpcomnew(<8 x i16> %a0, <8 x i16> %a1) {
640 ; CHECK-LABEL: test_int_x86_xop_vpcomnew:
641 ; CHECK:       # %bb.0:
642 ; CHECK-NEXT:    vpcomneqw %xmm1, %xmm0, %xmm0
643 ; CHECK-NEXT:    retq
644   %res = call <8 x i16> @llvm.x86.xop.vpcomnew(<8 x i16> %a0, <8 x i16> %a1) ;
645   ret <8 x i16> %res
647 declare <8 x i16> @llvm.x86.xop.vpcomnew(<8 x i16>, <8 x i16>) nounwind readnone
649 define <16 x i8> @test_int_x86_xop_vpcomtrueb(<16 x i8> %a0, <16 x i8> %a1) {
650 ; CHECK-LABEL: test_int_x86_xop_vpcomtrueb:
651 ; CHECK:       # %bb.0:
652 ; CHECK-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
653 ; CHECK-NEXT:    retq
654   %res = call <16 x i8> @llvm.x86.xop.vpcomtrueb(<16 x i8> %a0, <16 x i8> %a1) ;
655   ret <16 x i8> %res
657 declare <16 x i8> @llvm.x86.xop.vpcomtrueb(<16 x i8>, <16 x i8>) nounwind readnone
659 define <4 x i32> @test_int_x86_xop_vpcomtrued(<4 x i32> %a0, <4 x i32> %a1) {
660 ; CHECK-LABEL: test_int_x86_xop_vpcomtrued:
661 ; CHECK:       # %bb.0:
662 ; CHECK-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
663 ; CHECK-NEXT:    retq
664   %res = call <4 x i32> @llvm.x86.xop.vpcomtrued(<4 x i32> %a0, <4 x i32> %a1) ;
665   ret <4 x i32> %res
667 declare <4 x i32> @llvm.x86.xop.vpcomtrued(<4 x i32>, <4 x i32>) nounwind readnone
669 define <2 x i64> @test_int_x86_xop_vpcomtrueq(<2 x i64> %a0, <2 x i64> %a1) {
670 ; CHECK-LABEL: test_int_x86_xop_vpcomtrueq:
671 ; CHECK:       # %bb.0:
672 ; CHECK-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
673 ; CHECK-NEXT:    retq
674   %res = call <2 x i64> @llvm.x86.xop.vpcomtrueq(<2 x i64> %a0, <2 x i64> %a1) ;
675   ret <2 x i64> %res
677 declare <2 x i64> @llvm.x86.xop.vpcomtrueq(<2 x i64>, <2 x i64>) nounwind readnone
679 define <16 x i8> @test_int_x86_xop_vpcomtrueub(<16 x i8> %a0, <16 x i8> %a1) {
680 ; CHECK-LABEL: test_int_x86_xop_vpcomtrueub:
681 ; CHECK:       # %bb.0:
682 ; CHECK-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
683 ; CHECK-NEXT:    retq
684   %res = call <16 x i8> @llvm.x86.xop.vpcomtrueub(<16 x i8> %a0, <16 x i8> %a1) ;
685   ret <16 x i8> %res
687 declare <16 x i8> @llvm.x86.xop.vpcomtrueub(<16 x i8>, <16 x i8>) nounwind readnone
689 define <4 x i32> @test_int_x86_xop_vpcomtrueud(<4 x i32> %a0, <4 x i32> %a1) {
690 ; CHECK-LABEL: test_int_x86_xop_vpcomtrueud:
691 ; CHECK:       # %bb.0:
692 ; CHECK-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
693 ; CHECK-NEXT:    retq
694   %res = call <4 x i32> @llvm.x86.xop.vpcomtrueud(<4 x i32> %a0, <4 x i32> %a1) ;
695   ret <4 x i32> %res
697 declare <4 x i32> @llvm.x86.xop.vpcomtrueud(<4 x i32>, <4 x i32>) nounwind readnone
699 define <2 x i64> @test_int_x86_xop_vpcomtrueuq(<2 x i64> %a0, <2 x i64> %a1) {
700 ; CHECK-LABEL: test_int_x86_xop_vpcomtrueuq:
701 ; CHECK:       # %bb.0:
702 ; CHECK-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
703 ; CHECK-NEXT:    retq
704   %res = call <2 x i64> @llvm.x86.xop.vpcomtrueuq(<2 x i64> %a0, <2 x i64> %a1) ;
705   ret <2 x i64> %res
707 declare <2 x i64> @llvm.x86.xop.vpcomtrueuq(<2 x i64>, <2 x i64>) nounwind readnone
709 define <8 x i16> @test_int_x86_xop_vpcomtrueuw(<8 x i16> %a0, <8 x i16> %a1) {
710 ; CHECK-LABEL: test_int_x86_xop_vpcomtrueuw:
711 ; CHECK:       # %bb.0:
712 ; CHECK-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
713 ; CHECK-NEXT:    retq
714   %res = call <8 x i16> @llvm.x86.xop.vpcomtrueuw(<8 x i16> %a0, <8 x i16> %a1) ;
715   ret <8 x i16> %res
717 declare <8 x i16> @llvm.x86.xop.vpcomtrueuw(<8 x i16>, <8 x i16>) nounwind readnone
719 define <8 x i16> @test_int_x86_xop_vpcomtruew(<8 x i16> %a0, <8 x i16> %a1) {
720 ; CHECK-LABEL: test_int_x86_xop_vpcomtruew:
721 ; CHECK:       # %bb.0:
722 ; CHECK-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
723 ; CHECK-NEXT:    retq
724   %res = call <8 x i16> @llvm.x86.xop.vpcomtruew(<8 x i16> %a0, <8 x i16> %a1) ;
725   ret <8 x i16> %res
727 declare <8 x i16> @llvm.x86.xop.vpcomtruew(<8 x i16>, <8 x i16>) nounwind readnone
729 define <16 x i8> @test_int_x86_xop_vpcomb(<16 x i8> %a0, <16 x i8> %a1) {
730 ; CHECK-LABEL: test_int_x86_xop_vpcomb:
731 ; CHECK:       # %bb.0:
732 ; CHECK-NEXT:    vpcomltb %xmm1, %xmm0, %xmm0
733 ; CHECK-NEXT:    retq
734   %res = call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %a0, <16 x i8> %a1, i8 0) ;
735   ret <16 x i8> %res
737 declare <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8>, <16 x i8>, i8) nounwind readnone
739 define <8 x i16> @test_int_x86_xop_vpcomw(<8 x i16> %a0, <8 x i16> %a1) {
740 ; CHECK-LABEL: test_int_x86_xop_vpcomw:
741 ; CHECK:       # %bb.0:
742 ; CHECK-NEXT:    vpcomltw %xmm1, %xmm0, %xmm0
743 ; CHECK-NEXT:    retq
744   %res = call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %a0, <8 x i16> %a1, i8 0) ;
745   ret <8 x i16> %res
747 declare <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16>, <8 x i16>, i8) nounwind readnone
749 define <4 x i32> @test_int_x86_xop_vpcomd(<4 x i32> %a0, <4 x i32> %a1) {
750 ; CHECK-LABEL: test_int_x86_xop_vpcomd:
751 ; CHECK:       # %bb.0:
752 ; CHECK-NEXT:    vpcomltd %xmm1, %xmm0, %xmm0
753 ; CHECK-NEXT:    retq
754   %res = call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %a0, <4 x i32> %a1, i8 0) ;
755   ret <4 x i32> %res
757 declare <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32>, <4 x i32>, i8) nounwind readnone
759 define <2 x i64> @test_int_x86_xop_vpcomq(<2 x i64> %a0, <2 x i64> %a1) {
760 ; CHECK-LABEL: test_int_x86_xop_vpcomq:
761 ; CHECK:       # %bb.0:
762 ; CHECK-NEXT:    vpcomltq %xmm1, %xmm0, %xmm0
763 ; CHECK-NEXT:    retq
764   %res = call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %a0, <2 x i64> %a1, i8 0) ;
765   ret <2 x i64> %res
767 declare <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64>, <2 x i64>, i8) nounwind readnone
769 define <16 x i8> @test_int_x86_xop_vpcomub(<16 x i8> %a0, <16 x i8> %a1) {
770 ; CHECK-LABEL: test_int_x86_xop_vpcomub:
771 ; CHECK:       # %bb.0:
772 ; CHECK-NEXT:    vpcomltub %xmm1, %xmm0, %xmm0
773 ; CHECK-NEXT:    retq
774   %res = call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %a0, <16 x i8> %a1, i8 0) ;
775   ret <16 x i8> %res
777 declare <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8>, <16 x i8>, i8) nounwind readnone
779 define <8 x i16> @test_int_x86_xop_vpcomuw(<8 x i16> %a0, <8 x i16> %a1) {
780 ; CHECK-LABEL: test_int_x86_xop_vpcomuw:
781 ; CHECK:       # %bb.0:
782 ; CHECK-NEXT:    vpcomltuw %xmm1, %xmm0, %xmm0
783 ; CHECK-NEXT:    retq
784   %res = call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %a0, <8 x i16> %a1, i8 0) ;
785   ret <8 x i16> %res
787 declare <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16>, <8 x i16>, i8) nounwind readnone
789 define <4 x i32> @test_int_x86_xop_vpcomud(<4 x i32> %a0, <4 x i32> %a1) {
790 ; CHECK-LABEL: test_int_x86_xop_vpcomud:
791 ; CHECK:       # %bb.0:
792 ; CHECK-NEXT:    vpcomltud %xmm1, %xmm0, %xmm0
793 ; CHECK-NEXT:    retq
794   %res = call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %a0, <4 x i32> %a1, i8 0) ;
795   ret <4 x i32> %res
797 declare <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32>, <4 x i32>, i8) nounwind readnone
799 define <2 x i64> @test_int_x86_xop_vpcomuq(<2 x i64> %a0, <2 x i64> %a1) {
800 ; CHECK-LABEL: test_int_x86_xop_vpcomuq:
801 ; CHECK:       # %bb.0:
802 ; CHECK-NEXT:    vpcomltuq %xmm1, %xmm0, %xmm0
803 ; CHECK-NEXT:    retq
804   %res = call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %a0, <2 x i64> %a1, i8 0) ;
805   ret <2 x i64> %res
807 declare <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64>, <2 x i64>, i8) nounwind readnone
809 define <2 x i64> @test_int_x86_xop_vpcmov(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) {
810 ; CHECK-LABEL: test_int_x86_xop_vpcmov:
811 ; CHECK:       # %bb.0:
812 ; CHECK-NEXT:    vpcmov %xmm2, %xmm1, %xmm0, %xmm0
813 ; CHECK-NEXT:    retq
814   %res = call <2 x i64> @llvm.x86.xop.vpcmov(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) ;
815   ret <2 x i64> %res
817 declare <2 x i64> @llvm.x86.xop.vpcmov(<2 x i64>, <2 x i64>, <2 x i64>) nounwind readnone
819 define <4 x i64> @test_int_x86_xop_vpcmov_256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) {
820 ; CHECK-LABEL: test_int_x86_xop_vpcmov_256:
821 ; CHECK:       # %bb.0:
822 ; CHECK-NEXT:    vpcmov %ymm2, %ymm1, %ymm0, %ymm0
823 ; CHECK-NEXT:    retq
824   %res = call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) ;
825   ret <4 x i64> %res
827 define <4 x i64> @test_int_x86_xop_vpcmov_256_mr(<4 x i64> %a0, ptr %a1, <4 x i64> %a2) {
828 ; CHECK-LABEL: test_int_x86_xop_vpcmov_256_mr:
829 ; CHECK:       # %bb.0:
830 ; CHECK-NEXT:    vpcmov %ymm1, (%rdi), %ymm0, %ymm0
831 ; CHECK-NEXT:    retq
832   %vec = load <4 x i64>, ptr %a1
833   %res = call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %a0, <4 x i64> %vec, <4 x i64> %a2) ;
834   ret <4 x i64> %res
836 define <4 x i64> @test_int_x86_xop_vpcmov_256_rm(<4 x i64> %a0, <4 x i64> %a1, ptr %a2) {
837 ; CHECK-LABEL: test_int_x86_xop_vpcmov_256_rm:
838 ; CHECK:       # %bb.0:
839 ; CHECK-NEXT:    vpcmov (%rdi), %ymm1, %ymm0, %ymm0
840 ; CHECK-NEXT:    retq
841  %vec = load <4 x i64>, ptr %a2
842  %res = call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %vec) ;
843   ret <4 x i64> %res
845 declare <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64>, <4 x i64>, <4 x i64>) nounwind readnone
847 define <16 x i8> @test_int_x86_xop_vprotb(<16 x i8> %a0, <16 x i8> %a1) {
848 ; CHECK-LABEL: test_int_x86_xop_vprotb:
849 ; CHECK:       # %bb.0:
850 ; CHECK-NEXT:    vprotb %xmm1, %xmm0, %xmm0
851 ; CHECK-NEXT:    retq
852   %res = call <16 x i8> @llvm.x86.xop.vprotb(<16 x i8> %a0, <16 x i8> %a1) ;
853   ret <16 x i8> %res
855 declare <16 x i8> @llvm.x86.xop.vprotb(<16 x i8>, <16 x i8>) nounwind readnone
857 define <4 x i32> @test_int_x86_xop_vprotd(<4 x i32> %a0, <4 x i32> %a1) {
858 ; CHECK-LABEL: test_int_x86_xop_vprotd:
859 ; CHECK:       # %bb.0:
860 ; CHECK-NEXT:    vprotd %xmm1, %xmm0, %xmm0
861 ; CHECK-NEXT:    retq
862   %res = call <4 x i32> @llvm.x86.xop.vprotd(<4 x i32> %a0, <4 x i32> %a1) ;
863   ret <4 x i32> %res
865 declare <4 x i32> @llvm.x86.xop.vprotd(<4 x i32>, <4 x i32>) nounwind readnone
867 define <2 x i64> @test_int_x86_xop_vprotq(<2 x i64> %a0, <2 x i64> %a1) {
868 ; CHECK-LABEL: test_int_x86_xop_vprotq:
869 ; CHECK:       # %bb.0:
870 ; CHECK-NEXT:    vprotq %xmm1, %xmm0, %xmm0
871 ; CHECK-NEXT:    retq
872   %res = call <2 x i64> @llvm.x86.xop.vprotq(<2 x i64> %a0, <2 x i64> %a1) ;
873   ret <2 x i64> %res
875 declare <2 x i64> @llvm.x86.xop.vprotq(<2 x i64>, <2 x i64>) nounwind readnone
877 define <8 x i16> @test_int_x86_xop_vprotw(<8 x i16> %a0, <8 x i16> %a1) {
878 ; CHECK-LABEL: test_int_x86_xop_vprotw:
879 ; CHECK:       # %bb.0:
880 ; CHECK-NEXT:    vprotw %xmm1, %xmm0, %xmm0
881 ; CHECK-NEXT:    retq
882   %res = call <8 x i16> @llvm.x86.xop.vprotw(<8 x i16> %a0, <8 x i16> %a1) ;
883   ret <8 x i16> %res
885 declare <8 x i16> @llvm.x86.xop.vprotw(<8 x i16>, <8 x i16>) nounwind readnone
887 define <16 x i8> @test_int_x86_xop_vprotbi(<16 x i8> %a0) {
888 ; CHECK-LABEL: test_int_x86_xop_vprotbi:
889 ; CHECK:       # %bb.0:
890 ; CHECK-NEXT:    vprotb $1, %xmm0, %xmm0
891 ; CHECK-NEXT:    retq
892   %res = call <16 x i8> @llvm.x86.xop.vprotbi(<16 x i8> %a0, i8 1) ;
893   ret <16 x i8> %res
895 declare <16 x i8> @llvm.x86.xop.vprotbi(<16 x i8>, i8) nounwind readnone
897 define <4 x i32> @test_int_x86_xop_vprotdi(<4 x i32> %a0) {
898 ; CHECK-LABEL: test_int_x86_xop_vprotdi:
899 ; CHECK:       # %bb.0:
900 ; CHECK-NEXT:    vprotd $30, %xmm0, %xmm0
901 ; CHECK-NEXT:    retq
902   %res = call <4 x i32> @llvm.x86.xop.vprotdi(<4 x i32> %a0, i8 -2) ;
903   ret <4 x i32> %res
905 declare <4 x i32> @llvm.x86.xop.vprotdi(<4 x i32>, i8) nounwind readnone
907 define <2 x i64> @test_int_x86_xop_vprotqi(<2 x i64> %a0) {
908 ; CHECK-LABEL: test_int_x86_xop_vprotqi:
909 ; CHECK:       # %bb.0:
910 ; CHECK-NEXT:    vprotq $3, %xmm0, %xmm0
911 ; CHECK-NEXT:    retq
912   %res = call <2 x i64> @llvm.x86.xop.vprotqi(<2 x i64> %a0, i8 3) ;
913   ret <2 x i64> %res
915 declare <2 x i64> @llvm.x86.xop.vprotqi(<2 x i64>, i8) nounwind readnone
917 define <8 x i16> @test_int_x86_xop_vprotwi(<8 x i16> %a0) {
918 ; CHECK-LABEL: test_int_x86_xop_vprotwi:
919 ; CHECK:       # %bb.0:
920 ; CHECK-NEXT:    vprotw $12, %xmm0, %xmm0
921 ; CHECK-NEXT:    retq
922   %res = call <8 x i16> @llvm.x86.xop.vprotwi(<8 x i16> %a0, i8 -4) ;
923   ret <8 x i16> %res
925 declare <8 x i16> @llvm.x86.xop.vprotwi(<8 x i16>, i8) nounwind readnone