xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/xop-intrinsics-x86_64.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+fma4,+xop | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_int_x86_xop_vpermil2pd(<2 x double> %a0, <2 x double> %a1, <2 x i64> %a2) {
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpermil2pd:
6*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermil2pd $1, %xmm2, %xmm1, %xmm0, %xmm0
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
9*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double> %a0, <2 x double> %a1, <2 x i64> %a2, i8 1) ;  [#uses=1]
10*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_int_x86_xop_vpermil2pd_mr(<2 x double> %a0, <2 x double>* %a1, <2 x i64> %a2) {
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpermil2pd_mr:
14*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermil2pd $1, %xmm1, (%rdi), %xmm0, %xmm0
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
17*9880d681SAndroid Build Coastguard Worker  %vec = load <2 x double>, <2 x double>* %a1
18*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double> %a0, <2 x double> %vec, <2 x i64> %a2, i8 1) ;  [#uses=1]
19*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_int_x86_xop_vpermil2pd_rm(<2 x double> %a0, <2 x double> %a1, <2 x i64>* %a2) {
22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpermil2pd_rm:
23*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermil2pd $1, (%rdi), %xmm1, %xmm0, %xmm0
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
26*9880d681SAndroid Build Coastguard Worker  %vec = load <2 x i64>, <2 x i64>* %a2
27*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double> %a0, <2 x double> %a1, <2 x i64> %vec, i8 1) ;  [#uses=1]
28*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double>, <2 x double>, <2 x i64>, i8) nounwind readnone
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_int_x86_xop_vpermil2pd_256(<4 x double> %a0, <4 x double> %a1, <4 x i64> %a2) {
33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpermil2pd_256:
34*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermil2pd $2, %ymm2, %ymm1, %ymm0, %ymm0
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
37*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %a0, <4 x double> %a1, <4 x i64> %a2, i8 2) ;
38*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_int_x86_xop_vpermil2pd_256_mr(<4 x double> %a0, <4 x double>* %a1, <4 x i64> %a2) {
41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpermil2pd_256_mr:
42*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermil2pd $2, %ymm1, (%rdi), %ymm0, %ymm0
44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
45*9880d681SAndroid Build Coastguard Worker  %vec = load <4 x double>, <4 x double>* %a1
46*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %a0, <4 x double> %vec, <4 x i64> %a2, i8 2) ;
47*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_int_x86_xop_vpermil2pd_256_rm(<4 x double> %a0, <4 x double> %a1, <4 x i64>* %a2) {
50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpermil2pd_256_rm:
51*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermil2pd $2, (%rdi), %ymm1, %ymm0, %ymm0
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
54*9880d681SAndroid Build Coastguard Worker  %vec = load <4 x i64>, <4 x i64>* %a2
55*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double> %a0, <4 x double> %a1, <4 x i64> %vec, i8 2) ;
56*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double>, <4 x double>, <4 x i64>, i8) nounwind readnone
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_int_x86_xop_vpermil2ps(<4 x float> %a0, <4 x float> %a1, <4 x i32> %a2) {
61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpermil2ps:
62*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermil2ps $3, %xmm2, %xmm1, %xmm0, %xmm0
64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
65*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float> %a0, <4 x float> %a1, <4 x i32> %a2, i8 3) ;
66*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float>, <4 x float>, <4 x i32>, i8) nounwind readnone
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_int_x86_xop_vpermil2ps_256(<8 x float> %a0, <8 x float> %a1, <8 x i32> %a2) {
71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpermil2ps_256:
72*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermil2ps $4, %ymm2, %ymm1, %ymm0, %ymm0
74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
75*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float> %a0, <8 x float> %a1, <8 x i32> %a2, i8 4) ;
76*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float>, <8 x float>, <8 x i32>, i8) nounwind readnone
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vpcmov(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) {
81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcmov:
82*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmov %xmm2, %xmm1, %xmm0, %xmm0
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
85*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpcmov(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) ;
86*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcmov(<2 x i64>, <2 x i64>, <2 x i64>) nounwind readnone
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_int_x86_xop_vpcmov_256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) {
91*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcmov_256:
92*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmov %ymm2, %ymm1, %ymm0, %ymm0
94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
95*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) ;
96*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_int_x86_xop_vpcmov_256_mr(<4 x i64> %a0, <4 x i64>* %a1, <4 x i64> %a2) {
99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcmov_256_mr:
100*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmov %ymm1, (%rdi), %ymm0, %ymm0
102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
103*9880d681SAndroid Build Coastguard Worker  %vec = load <4 x i64>, <4 x i64>* %a1
104*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %a0, <4 x i64> %vec, <4 x i64> %a2) ;
105*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
106*9880d681SAndroid Build Coastguard Worker}
107*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_int_x86_xop_vpcmov_256_rm(<4 x i64> %a0, <4 x i64> %a1, <4 x i64>* %a2) {
108*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcmov_256_rm:
109*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmov (%rdi), %ymm1, %ymm0, %ymm0
111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
112*9880d681SAndroid Build Coastguard Worker %vec = load <4 x i64>, <4 x i64>* %a2
113*9880d681SAndroid Build Coastguard Worker %res = call <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %vec) ;
114*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64>, <4 x i64>, <4 x i64>) nounwind readnone
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vphaddbd(<16 x i8> %a0) {
119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphaddbd:
120*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphaddbd %xmm0, %xmm0
122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
123*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphaddbd(<16 x i8> %a0) ;
124*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
125*9880d681SAndroid Build Coastguard Worker}
126*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphaddbd(<16 x i8>) nounwind readnone
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vphaddbq(<16 x i8> %a0) {
129*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphaddbq:
130*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphaddbq %xmm0, %xmm0
132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
133*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphaddbq(<16 x i8> %a0) ;
134*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphaddbq(<16 x i8>) nounwind readnone
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vphaddbw(<16 x i8> %a0) {
139*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphaddbw:
140*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphaddbw %xmm0, %xmm0
142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
143*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vphaddbw(<16 x i8> %a0) ;
144*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vphaddbw(<16 x i8>) nounwind readnone
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vphadddq(<4 x i32> %a0) {
149*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphadddq:
150*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphadddq %xmm0, %xmm0
152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
153*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphadddq(<4 x i32> %a0) ;
154*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphadddq(<4 x i32>) nounwind readnone
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vphaddubd(<16 x i8> %a0) {
159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphaddubd:
160*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
161*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphaddubd %xmm0, %xmm0
162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
163*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphaddubd(<16 x i8> %a0) ;
164*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphaddubd(<16 x i8>) nounwind readnone
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vphaddubq(<16 x i8> %a0) {
169*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphaddubq:
170*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphaddubq %xmm0, %xmm0
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
173*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphaddubq(<16 x i8> %a0) ;
174*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
175*9880d681SAndroid Build Coastguard Worker}
176*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphaddubq(<16 x i8>) nounwind readnone
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vphaddubw(<16 x i8> %a0) {
179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphaddubw:
180*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphaddubw %xmm0, %xmm0
182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
183*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vphaddubw(<16 x i8> %a0) ;
184*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vphaddubw(<16 x i8>) nounwind readnone
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vphaddudq(<4 x i32> %a0) {
189*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphaddudq:
190*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphaddudq %xmm0, %xmm0
192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
193*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphaddudq(<4 x i32> %a0) ;
194*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphaddudq(<4 x i32>) nounwind readnone
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vphadduwd(<8 x i16> %a0) {
199*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphadduwd:
200*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphadduwd %xmm0, %xmm0
202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
203*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphadduwd(<8 x i16> %a0) ;
204*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphadduwd(<8 x i16>) nounwind readnone
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vphadduwq(<8 x i16> %a0) {
209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphadduwq:
210*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphadduwq %xmm0, %xmm0
212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
213*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphadduwq(<8 x i16> %a0) ;
214*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
215*9880d681SAndroid Build Coastguard Worker}
216*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphadduwq(<8 x i16>) nounwind readnone
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vphaddwd(<8 x i16> %a0) {
219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphaddwd:
220*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphaddwd %xmm0, %xmm0
222*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
223*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphaddwd(<8 x i16> %a0) ;
224*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
225*9880d681SAndroid Build Coastguard Worker}
226*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphaddwd(<8 x i16>) nounwind readnone
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vphaddwq(<8 x i16> %a0) {
229*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphaddwq:
230*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphaddwq %xmm0, %xmm0
232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
233*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphaddwq(<8 x i16> %a0) ;
234*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphaddwq(<8 x i16>) nounwind readnone
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vphsubbw(<16 x i8> %a0) {
239*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphsubbw:
240*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
241*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphsubbw %xmm0, %xmm0
242*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
243*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vphsubbw(<16 x i8> %a0) ;
244*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vphsubbw(<16 x i8>) nounwind readnone
247*9880d681SAndroid Build Coastguard Worker
248*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vphsubdq(<4 x i32> %a0) {
249*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphsubdq:
250*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
251*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphsubdq %xmm0, %xmm0
252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
253*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32> %a0) ;
254*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vphsubdq_mem(<4 x i32>* %a0) {
257*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphsubdq_mem:
258*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphsubdq (%rdi), %xmm0
260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
261*9880d681SAndroid Build Coastguard Worker  %vec = load <4 x i32>, <4 x i32>* %a0
262*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32> %vec) ;
263*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
264*9880d681SAndroid Build Coastguard Worker}
265*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32>) nounwind readnone
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vphsubwd(<8 x i16> %a0) {
268*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphsubwd:
269*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
270*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphsubwd %xmm0, %xmm0
271*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
272*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphsubwd(<8 x i16> %a0) ;
273*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
274*9880d681SAndroid Build Coastguard Worker}
275*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vphsubwd_mem(<8 x i16>* %a0) {
276*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vphsubwd_mem:
277*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vphsubwd (%rdi), %xmm0
279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
280*9880d681SAndroid Build Coastguard Worker  %vec = load <8 x i16>, <8 x i16>* %a0
281*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphsubwd(<8 x i16> %vec) ;
282*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
283*9880d681SAndroid Build Coastguard Worker}
284*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphsubwd(<8 x i16>) nounwind readnone
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpmacsdd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) {
287*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacsdd:
288*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacsdd %xmm2, %xmm1, %xmm0, %xmm0
290*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
291*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) ;
292*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
293*9880d681SAndroid Build Coastguard Worker}
294*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vpmacsdqh(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) {
297*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacsdqh:
298*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
299*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacsdqh %xmm2, %xmm1, %xmm0, %xmm0
300*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
301*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) ;
302*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
303*9880d681SAndroid Build Coastguard Worker}
304*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vpmacsdql(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) {
307*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacsdql:
308*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacsdql %xmm2, %xmm1, %xmm0, %xmm0
310*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
311*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) ;
312*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
313*9880d681SAndroid Build Coastguard Worker}
314*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpmacssdd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) {
317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacssdd:
318*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacssdd %xmm2, %xmm1, %xmm0, %xmm0
320*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
321*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> %a2) ;
322*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
323*9880d681SAndroid Build Coastguard Worker}
324*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vpmacssdqh(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) {
327*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacssdqh:
328*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacssdqh %xmm2, %xmm1, %xmm0, %xmm0
330*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
331*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) ;
332*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
333*9880d681SAndroid Build Coastguard Worker}
334*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vpmacssdql(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) {
337*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacssdql:
338*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacssdql %xmm2, %xmm1, %xmm0, %xmm0
340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
341*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32> %a0, <4 x i32> %a1, <2 x i64> %a2) ;
342*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
343*9880d681SAndroid Build Coastguard Worker}
344*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
345*9880d681SAndroid Build Coastguard Worker
346*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpmacsswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) {
347*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacsswd:
348*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
349*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacsswd %xmm2, %xmm1, %xmm0, %xmm0
350*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
351*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) ;
352*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
353*9880d681SAndroid Build Coastguard Worker}
354*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vpmacssww(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) {
357*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacssww:
358*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
359*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacssww %xmm2, %xmm1, %xmm0, %xmm0
360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
361*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) ;
362*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
363*9880d681SAndroid Build Coastguard Worker}
364*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpmacswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) {
367*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacswd:
368*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
369*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacswd %xmm2, %xmm1, %xmm0, %xmm0
370*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
371*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) ;
372*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
373*9880d681SAndroid Build Coastguard Worker}
374*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
375*9880d681SAndroid Build Coastguard Worker
376*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vpmacsww(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) {
377*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmacsww:
378*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
379*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmacsww %xmm2, %xmm1, %xmm0, %xmm0
380*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
381*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) ;
382*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
383*9880d681SAndroid Build Coastguard Worker}
384*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpmadcsswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) {
387*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmadcsswd:
388*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
389*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmadcsswd %xmm2, %xmm1, %xmm0, %xmm0
390*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
391*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) ;
392*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
393*9880d681SAndroid Build Coastguard Worker}
394*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
395*9880d681SAndroid Build Coastguard Worker
396*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpmadcswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) {
397*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmadcswd:
398*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
399*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmadcswd %xmm2, %xmm1, %xmm0, %xmm0
400*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
401*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16> %a0, <8 x i16> %a1, <4 x i32> %a2) ;
402*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
403*9880d681SAndroid Build Coastguard Worker}
404*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpmadcswd_mem(<8 x i16> %a0, <8 x i16>* %a1, <4 x i32> %a2) {
405*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpmadcswd_mem:
406*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
407*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmadcswd %xmm1, (%rdi), %xmm0, %xmm0
408*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
409*9880d681SAndroid Build Coastguard Worker  %vec = load <8 x i16>, <8 x i16>* %a1
410*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16> %a0, <8 x i16> %vec, <4 x i32> %a2) ;
411*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
412*9880d681SAndroid Build Coastguard Worker}
413*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
414*9880d681SAndroid Build Coastguard Worker
415*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_int_x86_xop_vpperm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) {
416*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpperm:
417*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
418*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm0
419*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
420*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) ;
421*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
422*9880d681SAndroid Build Coastguard Worker}
423*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_int_x86_xop_vpperm_rm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8>* %a2) {
424*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpperm_rm:
425*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpperm (%rdi), %xmm1, %xmm0, %xmm0
427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
428*9880d681SAndroid Build Coastguard Worker  %vec = load <16 x i8>, <16 x i8>* %a2
429*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %vec) ;
430*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
431*9880d681SAndroid Build Coastguard Worker}
432*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_int_x86_xop_vpperm_mr(<16 x i8> %a0, <16 x i8>* %a1, <16 x i8> %a2) {
433*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpperm_mr:
434*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
435*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpperm %xmm1, (%rdi), %xmm0, %xmm0
436*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
437*9880d681SAndroid Build Coastguard Worker  %vec = load <16 x i8>, <16 x i8>* %a1
438*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %a0, <16 x i8> %vec, <16 x i8> %a2) ;
439*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
440*9880d681SAndroid Build Coastguard Worker}
441*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpperm(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_int_x86_xop_vprotb(<16 x i8> %a0, <16 x i8> %a1) {
444*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vprotb:
445*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
446*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vprotb %xmm1, %xmm0, %xmm0
447*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
448*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vprotb(<16 x i8> %a0, <16 x i8> %a1) ;
449*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
450*9880d681SAndroid Build Coastguard Worker}
451*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vprotb(<16 x i8>, <16 x i8>) nounwind readnone
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vprotd(<4 x i32> %a0, <4 x i32> %a1) {
454*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vprotd:
455*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
456*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vprotd %xmm1, %xmm0, %xmm0
457*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
458*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vprotd(<4 x i32> %a0, <4 x i32> %a1) ;
459*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
460*9880d681SAndroid Build Coastguard Worker}
461*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vprotd(<4 x i32>, <4 x i32>) nounwind readnone
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vprotq(<2 x i64> %a0, <2 x i64> %a1) {
464*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vprotq:
465*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
466*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vprotq %xmm1, %xmm0, %xmm0
467*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
468*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vprotq(<2 x i64> %a0, <2 x i64> %a1) ;
469*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
470*9880d681SAndroid Build Coastguard Worker}
471*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vprotq(<2 x i64>, <2 x i64>) nounwind readnone
472*9880d681SAndroid Build Coastguard Worker
473*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vprotw(<8 x i16> %a0, <8 x i16> %a1) {
474*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vprotw:
475*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
476*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vprotw %xmm1, %xmm0, %xmm0
477*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
478*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vprotw(<8 x i16> %a0, <8 x i16> %a1) ;
479*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
480*9880d681SAndroid Build Coastguard Worker}
481*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vprotw(<8 x i16>, <8 x i16>) nounwind readnone
482*9880d681SAndroid Build Coastguard Worker
483*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_int_x86_xop_vprotbi(<16 x i8> %a0) {
484*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vprotbi:
485*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
486*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vprotb $1, %xmm0, %xmm0
487*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
488*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vprotbi(<16 x i8> %a0, i8 1) ;
489*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
490*9880d681SAndroid Build Coastguard Worker}
491*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vprotbi(<16 x i8>, i8) nounwind readnone
492*9880d681SAndroid Build Coastguard Worker
493*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vprotdi(<4 x i32> %a0) {
494*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vprotdi:
495*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
496*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vprotd $254, %xmm0, %xmm0
497*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
498*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vprotdi(<4 x i32> %a0, i8 -2) ;
499*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
500*9880d681SAndroid Build Coastguard Worker}
501*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vprotdi(<4 x i32>, i8) nounwind readnone
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vprotqi(<2 x i64> %a0) {
504*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vprotqi:
505*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
506*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vprotq $3, %xmm0, %xmm0
507*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
508*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vprotqi(<2 x i64> %a0, i8 3) ;
509*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
510*9880d681SAndroid Build Coastguard Worker}
511*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vprotqi(<2 x i64>, i8) nounwind readnone
512*9880d681SAndroid Build Coastguard Worker
513*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vprotwi(<8 x i16> %a0) {
514*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vprotwi:
515*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
516*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vprotw $252, %xmm0, %xmm0
517*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
518*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vprotwi(<8 x i16> %a0, i8 -4) ;
519*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
520*9880d681SAndroid Build Coastguard Worker}
521*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vprotwi(<8 x i16>, i8) nounwind readnone
522*9880d681SAndroid Build Coastguard Worker
523*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_int_x86_xop_vpshab(<16 x i8> %a0, <16 x i8> %a1) {
524*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshab:
525*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
526*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshab %xmm1, %xmm0, %xmm0
527*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
528*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpshab(<16 x i8> %a0, <16 x i8> %a1) ;
529*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
530*9880d681SAndroid Build Coastguard Worker}
531*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpshab(<16 x i8>, <16 x i8>) nounwind readnone
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpshad(<4 x i32> %a0, <4 x i32> %a1) {
534*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshad:
535*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
536*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshad %xmm1, %xmm0, %xmm0
537*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
538*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpshad(<4 x i32> %a0, <4 x i32> %a1) ;
539*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
540*9880d681SAndroid Build Coastguard Worker}
541*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpshad(<4 x i32>, <4 x i32>) nounwind readnone
542*9880d681SAndroid Build Coastguard Worker
543*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vpshaq(<2 x i64> %a0, <2 x i64> %a1) {
544*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshaq:
545*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
546*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
547*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
548*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpshaq(<2 x i64> %a0, <2 x i64> %a1) ;
549*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
550*9880d681SAndroid Build Coastguard Worker}
551*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpshaq(<2 x i64>, <2 x i64>) nounwind readnone
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vpshaw(<8 x i16> %a0, <8 x i16> %a1) {
554*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshaw:
555*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
556*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshaw %xmm1, %xmm0, %xmm0
557*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
558*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpshaw(<8 x i16> %a0, <8 x i16> %a1) ;
559*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
560*9880d681SAndroid Build Coastguard Worker}
561*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpshaw(<8 x i16>, <8 x i16>) nounwind readnone
562*9880d681SAndroid Build Coastguard Worker
563*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_int_x86_xop_vpshlb(<16 x i8> %a0, <16 x i8> %a1) {
564*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshlb:
565*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
566*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
567*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
568*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpshlb(<16 x i8> %a0, <16 x i8> %a1) ;
569*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
570*9880d681SAndroid Build Coastguard Worker}
571*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpshlb(<16 x i8>, <16 x i8>) nounwind readnone
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpshld(<4 x i32> %a0, <4 x i32> %a1) {
574*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshld:
575*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
576*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshld %xmm1, %xmm0, %xmm0
577*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
578*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpshld(<4 x i32> %a0, <4 x i32> %a1) ;
579*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
580*9880d681SAndroid Build Coastguard Worker}
581*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpshld(<4 x i32>, <4 x i32>) nounwind readnone
582*9880d681SAndroid Build Coastguard Worker
583*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vpshlq(<2 x i64> %a0, <2 x i64> %a1) {
584*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshlq:
585*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
586*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshlq %xmm1, %xmm0, %xmm0
587*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
588*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpshlq(<2 x i64> %a0, <2 x i64> %a1) ;
589*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
590*9880d681SAndroid Build Coastguard Worker}
591*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpshlq(<2 x i64>, <2 x i64>) nounwind readnone
592*9880d681SAndroid Build Coastguard Worker
593*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vpshlw(<8 x i16> %a0, <8 x i16> %a1) {
594*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshlw:
595*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
596*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshlw %xmm1, %xmm0, %xmm0
597*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
598*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16> %a0, <8 x i16> %a1) ;
599*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
600*9880d681SAndroid Build Coastguard Worker}
601*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vpshlw_rm(<8 x i16> %a0, <8 x i16>* %a1) {
602*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshlw_rm:
603*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
604*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshlw (%rdi), %xmm0, %xmm0
605*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
606*9880d681SAndroid Build Coastguard Worker  %vec = load <8 x i16>, <8 x i16>* %a1
607*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16> %a0, <8 x i16> %vec) ;
608*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
609*9880d681SAndroid Build Coastguard Worker}
610*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vpshlw_mr(<8 x i16>* %a0, <8 x i16> %a1) {
611*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpshlw_mr:
612*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
613*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshlw %xmm0, (%rdi), %xmm0
614*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
615*9880d681SAndroid Build Coastguard Worker  %vec = load <8 x i16>, <8 x i16>* %a0
616*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16> %vec, <8 x i16> %a1) ;
617*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
618*9880d681SAndroid Build Coastguard Worker}
619*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16>, <8 x i16>) nounwind readnone
620*9880d681SAndroid Build Coastguard Worker
621*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_int_x86_xop_vfrcz_ss(<4 x float> %a0) {
622*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_ss:
623*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
624*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczss %xmm0, %xmm0
625*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
626*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float> %a0) ;
627*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
628*9880d681SAndroid Build Coastguard Worker}
629*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_int_x86_xop_vfrcz_ss_mem(float* %a0) {
630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_ss_mem:
631*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
632*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczss (%rdi), %xmm0
633*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
634*9880d681SAndroid Build Coastguard Worker  %elem = load float, float* %a0
635*9880d681SAndroid Build Coastguard Worker  %vec = insertelement <4 x float> undef, float %elem, i32 0
636*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float> %vec) ;
637*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
638*9880d681SAndroid Build Coastguard Worker}
639*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float>) nounwind readnone
640*9880d681SAndroid Build Coastguard Worker
641*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_int_x86_xop_vfrcz_sd(<2 x double> %a0) {
642*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_sd:
643*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
644*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczsd %xmm0, %xmm0
645*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
646*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double> %a0) ;
647*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
648*9880d681SAndroid Build Coastguard Worker}
649*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_int_x86_xop_vfrcz_sd_mem(double* %a0) {
650*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_sd_mem:
651*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
652*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczsd (%rdi), %xmm0
653*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
654*9880d681SAndroid Build Coastguard Worker  %elem = load double, double* %a0
655*9880d681SAndroid Build Coastguard Worker  %vec = insertelement <2 x double> undef, double %elem, i32 0
656*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double> %vec) ;
657*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
658*9880d681SAndroid Build Coastguard Worker}
659*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double>) nounwind readnone
660*9880d681SAndroid Build Coastguard Worker
661*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_int_x86_xop_vfrcz_pd(<2 x double> %a0) {
662*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_pd:
663*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
664*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczpd %xmm0, %xmm0
665*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
666*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double> %a0) ;
667*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
668*9880d681SAndroid Build Coastguard Worker}
669*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_int_x86_xop_vfrcz_pd_mem(<2 x double>* %a0) {
670*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_pd_mem:
671*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
672*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczpd (%rdi), %xmm0
673*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
674*9880d681SAndroid Build Coastguard Worker  %vec = load <2 x double>, <2 x double>* %a0
675*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double> %vec) ;
676*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
677*9880d681SAndroid Build Coastguard Worker}
678*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double>) nounwind readnone
679*9880d681SAndroid Build Coastguard Worker
680*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_int_x86_xop_vfrcz_pd_256(<4 x double> %a0) {
681*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_pd_256:
682*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
683*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczpd %ymm0, %ymm0
684*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
685*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double> %a0) ;
686*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
687*9880d681SAndroid Build Coastguard Worker}
688*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_int_x86_xop_vfrcz_pd_256_mem(<4 x double>* %a0) {
689*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_pd_256_mem:
690*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
691*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczpd (%rdi), %ymm0
692*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
693*9880d681SAndroid Build Coastguard Worker  %vec = load <4 x double>, <4 x double>* %a0
694*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double> %vec) ;
695*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
696*9880d681SAndroid Build Coastguard Worker}
697*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double>) nounwind readnone
698*9880d681SAndroid Build Coastguard Worker
699*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_int_x86_xop_vfrcz_ps(<4 x float> %a0) {
700*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_ps:
701*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
702*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczps %xmm0, %xmm0
703*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
704*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float> %a0) ;
705*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
706*9880d681SAndroid Build Coastguard Worker}
707*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_int_x86_xop_vfrcz_ps_mem(<4 x float>* %a0) {
708*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_ps_mem:
709*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
710*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczps (%rdi), %xmm0
711*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
712*9880d681SAndroid Build Coastguard Worker  %vec = load <4 x float>, <4 x float>* %a0
713*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float> %vec) ;
714*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
715*9880d681SAndroid Build Coastguard Worker}
716*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float>) nounwind readnone
717*9880d681SAndroid Build Coastguard Worker
718*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_int_x86_xop_vfrcz_ps_256(<8 x float> %a0) {
719*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_ps_256:
720*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
721*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczps %ymm0, %ymm0
722*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
723*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float> %a0) ;
724*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
725*9880d681SAndroid Build Coastguard Worker}
726*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_int_x86_xop_vfrcz_ps_256_mem(<8 x float>* %a0) {
727*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vfrcz_ps_256_mem:
728*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
729*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vfrczps (%rdi), %ymm0
730*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
731*9880d681SAndroid Build Coastguard Worker  %vec = load <8 x float>, <8 x float>* %a0
732*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float> %vec) ;
733*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
734*9880d681SAndroid Build Coastguard Worker}
735*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float>) nounwind readnone
736*9880d681SAndroid Build Coastguard Worker
737*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_int_x86_xop_vpcomb(<16 x i8> %a0, <16 x i8> %a1) {
738*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcomb:
739*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
740*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcomltb %xmm1, %xmm0, %xmm0
741*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
742*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %a0, <16 x i8> %a1, i8 0) ;
743*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
744*9880d681SAndroid Build Coastguard Worker}
745*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8>, <16 x i8>, i8) nounwind readnone
746*9880d681SAndroid Build Coastguard Worker
747*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vpcomw(<8 x i16> %a0, <8 x i16> %a1) {
748*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcomw:
749*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
750*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcomltw %xmm1, %xmm0, %xmm0
751*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
752*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %a0, <8 x i16> %a1, i8 0) ;
753*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
754*9880d681SAndroid Build Coastguard Worker}
755*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16>, <8 x i16>, i8) nounwind readnone
756*9880d681SAndroid Build Coastguard Worker
757*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpcomd(<4 x i32> %a0, <4 x i32> %a1) {
758*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcomd:
759*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
760*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcomltd %xmm1, %xmm0, %xmm0
761*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
762*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %a0, <4 x i32> %a1, i8 0) ;
763*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
764*9880d681SAndroid Build Coastguard Worker}
765*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32>, <4 x i32>, i8) nounwind readnone
766*9880d681SAndroid Build Coastguard Worker
767*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vpcomq(<2 x i64> %a0, <2 x i64> %a1) {
768*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcomq:
769*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
770*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcomltq %xmm1, %xmm0, %xmm0
771*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
772*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %a0, <2 x i64> %a1, i8 0) ;
773*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
774*9880d681SAndroid Build Coastguard Worker}
775*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64>, <2 x i64>, i8) nounwind readnone
776*9880d681SAndroid Build Coastguard Worker
777*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_int_x86_xop_vpcomub(<16 x i8> %a0, <16 x i8> %a1) {
778*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcomub:
779*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
780*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcomltub %xmm1, %xmm0, %xmm0
781*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
782*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %a0, <16 x i8> %a1, i8 0) ;
783*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
784*9880d681SAndroid Build Coastguard Worker}
785*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8>, <16 x i8>, i8) nounwind readnone
786*9880d681SAndroid Build Coastguard Worker
787*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_int_x86_xop_vpcomuw(<8 x i16> %a0, <8 x i16> %a1) {
788*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcomuw:
789*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
790*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcomltuw %xmm1, %xmm0, %xmm0
791*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
792*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %a0, <8 x i16> %a1, i8 0) ;
793*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
794*9880d681SAndroid Build Coastguard Worker}
795*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16>, <8 x i16>, i8) nounwind readnone
796*9880d681SAndroid Build Coastguard Worker
797*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_int_x86_xop_vpcomud(<4 x i32> %a0, <4 x i32> %a1) {
798*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcomud:
799*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
800*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcomltud %xmm1, %xmm0, %xmm0
801*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
802*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %a0, <4 x i32> %a1, i8 0) ;
803*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
804*9880d681SAndroid Build Coastguard Worker}
805*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32>, <4 x i32>, i8) nounwind readnone
806*9880d681SAndroid Build Coastguard Worker
807*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_int_x86_xop_vpcomuq(<2 x i64> %a0, <2 x i64> %a1) {
808*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_xop_vpcomuq:
809*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
810*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcomltuq %xmm1, %xmm0, %xmm0
811*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
812*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %a0, <2 x i64> %a1, i8 0) ;
813*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
814*9880d681SAndroid Build Coastguard Worker}
815*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64>, <2 x i64>, i8) nounwind readnone
816*9880d681SAndroid Build Coastguard Worker
817