xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/xop-intrinsics-fast-isel.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 -fast-isel -mtriple=i686-unknown-unknown -mattr=+avx,+fma4,+xop | FileCheck %s --check-prefix=ALL --check-prefix=X32
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+avx,+fma4,+xop | FileCheck %s --check-prefix=ALL --check-prefix=X64
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/xop-builtins.c
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maccs_epi16(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maccs_epi16:
9*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
10*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacssww %xmm2, %xmm1, %xmm0, %xmm0
11*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
12*9880d681SAndroid Build Coastguard Worker;
13*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maccs_epi16:
14*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacssww %xmm2, %xmm1, %xmm0, %xmm0
16*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
17*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
18*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
19*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <8 x i16>
20*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16> %arg0, <8 x i16> %arg1, <8 x i16> %arg2)
21*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
22*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_macc_epi16(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
27*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_macc_epi16:
28*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
29*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacsww %xmm2, %xmm1, %xmm0, %xmm0
30*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
31*9880d681SAndroid Build Coastguard Worker;
32*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_macc_epi16:
33*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
34*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacsww %xmm2, %xmm1, %xmm0, %xmm0
35*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
36*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
37*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
38*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <8 x i16>
39*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16> %arg0, <8 x i16> %arg1, <8 x i16> %arg2)
40*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
41*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maccsd_epi16(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
46*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maccsd_epi16:
47*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
48*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacsswd %xmm2, %xmm1, %xmm0, %xmm0
49*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
50*9880d681SAndroid Build Coastguard Worker;
51*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maccsd_epi16:
52*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
53*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacsswd %xmm2, %xmm1, %xmm0, %xmm0
54*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
55*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
56*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
57*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <4 x i32>
58*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16> %arg0, <8 x i16> %arg1, <4 x i32> %arg2)
59*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
60*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maccd_epi16(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
65*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maccd_epi16:
66*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
67*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacswd %xmm2, %xmm1, %xmm0, %xmm0
68*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
69*9880d681SAndroid Build Coastguard Worker;
70*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maccd_epi16:
71*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
72*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacswd %xmm2, %xmm1, %xmm0, %xmm0
73*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
74*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
75*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
76*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <4 x i32>
77*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16> %arg0, <8 x i16> %arg1, <4 x i32> %arg2)
78*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
79*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
80*9880d681SAndroid Build Coastguard Worker}
81*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maccs_epi32(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
84*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maccs_epi32:
85*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
86*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacssdd %xmm2, %xmm1, %xmm0, %xmm0
87*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
88*9880d681SAndroid Build Coastguard Worker;
89*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maccs_epi32:
90*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
91*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacssdd %xmm2, %xmm1, %xmm0, %xmm0
92*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
93*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
94*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
95*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <4 x i32>
96*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32> %arg0, <4 x i32> %arg1, <4 x i32> %arg2)
97*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
98*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_macc_epi32(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
103*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_macc_epi32:
104*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
105*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacsdd %xmm2, %xmm1, %xmm0, %xmm0
106*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
107*9880d681SAndroid Build Coastguard Worker;
108*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_macc_epi32:
109*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
110*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacsdd %xmm2, %xmm1, %xmm0, %xmm0
111*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
112*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
113*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
114*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <4 x i32>
115*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32> %arg0, <4 x i32> %arg1, <4 x i32> %arg2)
116*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
117*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maccslo_epi32(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
122*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maccslo_epi32:
123*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
124*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacssdql %xmm2, %xmm1, %xmm0, %xmm0
125*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
126*9880d681SAndroid Build Coastguard Worker;
127*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maccslo_epi32:
128*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
129*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacssdql %xmm2, %xmm1, %xmm0, %xmm0
130*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
131*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
132*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
133*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32> %arg0, <4 x i32> %arg1, <2 x i64> %a2)
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.vpmacssdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_macclo_epi32(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
139*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_macclo_epi32:
140*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
141*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacsdql %xmm2, %xmm1, %xmm0, %xmm0
142*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
143*9880d681SAndroid Build Coastguard Worker;
144*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_macclo_epi32:
145*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
146*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacsdql %xmm2, %xmm1, %xmm0, %xmm0
147*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
148*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
149*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
150*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32> %arg0, <4 x i32> %arg1, <2 x i64> %a2)
151*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
152*9880d681SAndroid Build Coastguard Worker}
153*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maccshi_epi32(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
156*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maccshi_epi32:
157*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
158*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacssdqh %xmm2, %xmm1, %xmm0, %xmm0
159*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
160*9880d681SAndroid Build Coastguard Worker;
161*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maccshi_epi32:
162*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
163*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacssdqh %xmm2, %xmm1, %xmm0, %xmm0
164*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
165*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
166*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
167*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32> %arg0, <4 x i32> %arg1, <2 x i64> %a2)
168*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_macchi_epi32(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
173*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_macchi_epi32:
174*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
175*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmacsdqh %xmm2, %xmm1, %xmm0, %xmm0
176*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
177*9880d681SAndroid Build Coastguard Worker;
178*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_macchi_epi32:
179*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
180*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmacsdqh %xmm2, %xmm1, %xmm0, %xmm0
181*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
182*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
183*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
184*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32> %arg0, <4 x i32> %arg1, <2 x i64> %a2)
185*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
186*9880d681SAndroid Build Coastguard Worker}
187*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maddsd_epi16(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
190*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maddsd_epi16:
191*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
192*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmadcsswd %xmm2, %xmm1, %xmm0, %xmm0
193*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
194*9880d681SAndroid Build Coastguard Worker;
195*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maddsd_epi16:
196*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
197*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmadcsswd %xmm2, %xmm1, %xmm0, %xmm0
198*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
199*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
200*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
201*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <4 x i32>
202*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16> %arg0, <8 x i16> %arg1, <4 x i32> %arg2)
203*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
204*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maddd_epi16(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) nounwind {
209*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maddd_epi16:
210*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
211*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpmadcswd %xmm2, %xmm1, %xmm0, %xmm0
212*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
213*9880d681SAndroid Build Coastguard Worker;
214*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maddd_epi16:
215*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
216*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpmadcswd %xmm2, %xmm1, %xmm0, %xmm0
217*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
218*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
219*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
220*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <4 x i32>
221*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16> %arg0, <8 x i16> %arg1, <4 x i32> %arg2)
222*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
223*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
224*9880d681SAndroid Build Coastguard Worker}
225*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddw_epi8(<2 x i64> %a0) {
228*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddw_epi8:
229*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
230*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphaddbw %xmm0, %xmm0
231*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
232*9880d681SAndroid Build Coastguard Worker;
233*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddw_epi8:
234*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
235*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphaddbw %xmm0, %xmm0
236*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
237*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
238*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vphaddbw(<16 x i8> %arg0)
239*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
240*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
241*9880d681SAndroid Build Coastguard Worker}
242*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vphaddbw(<16 x i8>) nounwind readnone
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddd_epi8(<2 x i64> %a0) {
245*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddd_epi8:
246*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
247*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphaddbd %xmm0, %xmm0
248*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
249*9880d681SAndroid Build Coastguard Worker;
250*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddd_epi8:
251*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
252*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphaddbd %xmm0, %xmm0
253*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
254*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
255*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphaddbd(<16 x i8> %arg0)
256*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
257*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphaddbd(<16 x i8>) nounwind readnone
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddq_epi8(<2 x i64> %a0) {
262*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddq_epi8:
263*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
264*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphaddbq %xmm0, %xmm0
265*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
266*9880d681SAndroid Build Coastguard Worker;
267*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddq_epi8:
268*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
269*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphaddbq %xmm0, %xmm0
270*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
271*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
272*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphaddbq(<16 x i8> %arg0)
273*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
274*9880d681SAndroid Build Coastguard Worker}
275*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphaddbq(<16 x i8>) nounwind readnone
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddd_epi16(<2 x i64> %a0) {
278*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddd_epi16:
279*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
280*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphaddwd %xmm0, %xmm0
281*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
282*9880d681SAndroid Build Coastguard Worker;
283*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddd_epi16:
284*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
285*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphaddwd %xmm0, %xmm0
286*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
287*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
288*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphaddwd(<8 x i16> %arg0)
289*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
290*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
291*9880d681SAndroid Build Coastguard Worker}
292*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphaddwd(<8 x i16>) nounwind readnone
293*9880d681SAndroid Build Coastguard Worker
294*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddq_epi16(<2 x i64> %a0) {
295*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddq_epi16:
296*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
297*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphaddwq %xmm0, %xmm0
298*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
299*9880d681SAndroid Build Coastguard Worker;
300*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddq_epi16:
301*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
302*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphaddwq %xmm0, %xmm0
303*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
304*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
305*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphaddwq(<8 x i16> %arg0)
306*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
307*9880d681SAndroid Build Coastguard Worker}
308*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphaddwq(<8 x i16>) nounwind readnone
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddq_epi32(<2 x i64> %a0) {
311*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddq_epi32:
312*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
313*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphadddq %xmm0, %xmm0
314*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
315*9880d681SAndroid Build Coastguard Worker;
316*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddq_epi32:
317*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
318*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphadddq %xmm0, %xmm0
319*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
320*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
321*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphadddq(<4 x i32> %arg0)
322*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
323*9880d681SAndroid Build Coastguard Worker}
324*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphadddq(<4 x i32>) nounwind readnone
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddw_epu8(<2 x i64> %a0) {
327*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddw_epu8:
328*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
329*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphaddubw %xmm0, %xmm0
330*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
331*9880d681SAndroid Build Coastguard Worker;
332*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddw_epu8:
333*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
334*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphaddubw %xmm0, %xmm0
335*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
336*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
337*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vphaddubw(<16 x i8> %arg0)
338*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
339*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
340*9880d681SAndroid Build Coastguard Worker}
341*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vphaddubw(<16 x i8>) nounwind readnone
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddd_epu8(<2 x i64> %a0) {
344*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddd_epu8:
345*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
346*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphaddubd %xmm0, %xmm0
347*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
348*9880d681SAndroid Build Coastguard Worker;
349*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddd_epu8:
350*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
351*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphaddubd %xmm0, %xmm0
352*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
353*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
354*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphaddubd(<16 x i8> %arg0)
355*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
356*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
357*9880d681SAndroid Build Coastguard Worker}
358*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphaddubd(<16 x i8>) nounwind readnone
359*9880d681SAndroid Build Coastguard Worker
360*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddq_epu8(<2 x i64> %a0) {
361*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddq_epu8:
362*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
363*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphaddubq %xmm0, %xmm0
364*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
365*9880d681SAndroid Build Coastguard Worker;
366*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddq_epu8:
367*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
368*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphaddubq %xmm0, %xmm0
369*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
370*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
371*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphaddubq(<16 x i8> %arg0)
372*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
373*9880d681SAndroid Build Coastguard Worker}
374*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphaddubq(<16 x i8>) nounwind readnone
375*9880d681SAndroid Build Coastguard Worker
376*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddd_epu16(<2 x i64> %a0) {
377*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddd_epu16:
378*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
379*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphadduwd %xmm0, %xmm0
380*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
381*9880d681SAndroid Build Coastguard Worker;
382*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddd_epu16:
383*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
384*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphadduwd %xmm0, %xmm0
385*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
386*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
387*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphadduwd(<8 x i16> %arg0)
388*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
389*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
390*9880d681SAndroid Build Coastguard Worker}
391*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphadduwd(<8 x i16>) nounwind readnone
392*9880d681SAndroid Build Coastguard Worker
393*9880d681SAndroid Build Coastguard Worker
394*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddq_epu16(<2 x i64> %a0) {
395*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddq_epu16:
396*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
397*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphadduwq %xmm0, %xmm0
398*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
399*9880d681SAndroid Build Coastguard Worker;
400*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddq_epu16:
401*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
402*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphadduwq %xmm0, %xmm0
403*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
404*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
405*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphadduwq(<8 x i16> %arg0)
406*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
407*9880d681SAndroid Build Coastguard Worker}
408*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphadduwq(<8 x i16>) nounwind readnone
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_haddq_epu32(<2 x i64> %a0) {
411*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_haddq_epu32:
412*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
413*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphaddudq %xmm0, %xmm0
414*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
415*9880d681SAndroid Build Coastguard Worker;
416*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_haddq_epu32:
417*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
418*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphaddudq %xmm0, %xmm0
419*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
420*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
421*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphaddudq(<4 x i32> %arg0)
422*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
423*9880d681SAndroid Build Coastguard Worker}
424*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphaddudq(<4 x i32>) nounwind readnone
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hsubw_epi8(<2 x i64> %a0) {
427*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hsubw_epi8:
428*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
429*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphsubbw %xmm0, %xmm0
430*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
431*9880d681SAndroid Build Coastguard Worker;
432*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hsubw_epi8:
433*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
434*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphsubbw %xmm0, %xmm0
435*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
436*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
437*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vphsubbw(<16 x i8> %arg0)
438*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
439*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
440*9880d681SAndroid Build Coastguard Worker}
441*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vphsubbw(<16 x i8>) nounwind readnone
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hsubd_epi16(<2 x i64> %a0) {
444*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hsubd_epi16:
445*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
446*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphsubwd %xmm0, %xmm0
447*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
448*9880d681SAndroid Build Coastguard Worker;
449*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hsubd_epi16:
450*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
451*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphsubwd %xmm0, %xmm0
452*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
453*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
454*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vphsubwd(<8 x i16> %arg0)
455*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
456*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
457*9880d681SAndroid Build Coastguard Worker}
458*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vphsubwd(<8 x i16>) nounwind readnone
459*9880d681SAndroid Build Coastguard Worker
460*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hsubq_epi32(<2 x i64> %a0) {
461*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hsubq_epi32:
462*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
463*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vphsubdq %xmm0, %xmm0
464*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
465*9880d681SAndroid Build Coastguard Worker;
466*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hsubq_epi32:
467*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
468*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vphsubdq %xmm0, %xmm0
469*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
470*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
471*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32> %arg0)
472*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
473*9880d681SAndroid Build Coastguard Worker}
474*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32>) nounwind readnone
475*9880d681SAndroid Build Coastguard Worker
476*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cmov_si128(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) {
477*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmov_si128:
478*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
479*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
480*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpxor %xmm3, %xmm2, %xmm3
481*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpand %xmm2, %xmm0, %xmm0
482*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpand %xmm3, %xmm1, %xmm1
483*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpor %xmm1, %xmm0, %xmm0
484*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
485*9880d681SAndroid Build Coastguard Worker;
486*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmov_si128:
487*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
488*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
489*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpxor %xmm3, %xmm2, %xmm3
490*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpand %xmm2, %xmm0, %xmm0
491*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpand %xmm3, %xmm1, %xmm1
492*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpor %xmm1, %xmm0, %xmm0
493*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
494*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)
495*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
496*9880d681SAndroid Build Coastguard Worker}
497*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcmov(<2 x i64>, <2 x i64>, <2 x i64>) nounwind readnone
498*9880d681SAndroid Build Coastguard Worker
499*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_mm256_cmov_si256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) {
500*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm256_cmov_si256:
501*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
502*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcmov %ymm2, %ymm1, %ymm0, %ymm0
503*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
504*9880d681SAndroid Build Coastguard Worker;
505*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm256_cmov_si256:
506*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
507*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcmov %ymm2, %ymm1, %ymm0, %ymm0
508*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
509*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)
510*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
511*9880d681SAndroid Build Coastguard Worker}
512*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.xop.vpcmov.256(<4 x i64>, <4 x i64>, <4 x i64>) nounwind readnone
513*9880d681SAndroid Build Coastguard Worker
514*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_perm_epi8(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) {
515*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_perm_epi8:
516*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
517*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm0
518*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
519*9880d681SAndroid Build Coastguard Worker;
520*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_perm_epi8:
521*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
522*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm0
523*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
524*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
525*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
526*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <16 x i8>
527*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %arg0, <16 x i8> %arg1, <16 x i8> %arg2)
528*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
529*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
530*9880d681SAndroid Build Coastguard Worker}
531*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpperm(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_rot_epi8(<2 x i64> %a0, <2 x i64> %a1) {
534*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_rot_epi8:
535*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
536*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vprotb %xmm1, %xmm0, %xmm0
537*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
538*9880d681SAndroid Build Coastguard Worker;
539*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_rot_epi8:
540*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
541*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vprotb %xmm1, %xmm0, %xmm0
542*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
543*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
544*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
545*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vprotb(<16 x i8> %arg0, <16 x i8> %arg1)
546*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
547*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
548*9880d681SAndroid Build Coastguard Worker}
549*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vprotb(<16 x i8>, <16 x i8>) nounwind readnone
550*9880d681SAndroid Build Coastguard Worker
551*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_rot_epi16(<2 x i64> %a0, <2 x i64> %a1) {
552*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_rot_epi16:
553*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
554*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vprotw %xmm1, %xmm0, %xmm0
555*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
556*9880d681SAndroid Build Coastguard Worker;
557*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_rot_epi16:
558*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
559*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vprotw %xmm1, %xmm0, %xmm0
560*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
561*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
562*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
563*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vprotw(<8 x i16> %arg0, <8 x i16> %arg1)
564*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
565*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
566*9880d681SAndroid Build Coastguard Worker}
567*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vprotw(<8 x i16>, <8 x i16>) nounwind readnone
568*9880d681SAndroid Build Coastguard Worker
569*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_rot_epi32(<2 x i64> %a0, <2 x i64> %a1) {
570*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_rot_epi32:
571*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
572*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vprotd %xmm1, %xmm0, %xmm0
573*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
574*9880d681SAndroid Build Coastguard Worker;
575*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_rot_epi32:
576*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
577*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vprotd %xmm1, %xmm0, %xmm0
578*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
579*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
580*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
581*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vprotd(<4 x i32> %arg0, <4 x i32> %arg1)
582*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
583*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
584*9880d681SAndroid Build Coastguard Worker}
585*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vprotd(<4 x i32>, <4 x i32>) nounwind readnone
586*9880d681SAndroid Build Coastguard Worker
587*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_rot_epi64(<2 x i64> %a0, <2 x i64> %a1) {
588*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_rot_epi64:
589*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
590*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vprotq %xmm1, %xmm0, %xmm0
591*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
592*9880d681SAndroid Build Coastguard Worker;
593*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_rot_epi64:
594*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
595*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vprotq %xmm1, %xmm0, %xmm0
596*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
597*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vprotq(<2 x i64> %a0, <2 x i64> %a1)
598*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
599*9880d681SAndroid Build Coastguard Worker}
600*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vprotq(<2 x i64>, <2 x i64>) nounwind readnone
601*9880d681SAndroid Build Coastguard Worker
602*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_roti_epi8(<2 x i64> %a0) {
603*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_roti_epi8:
604*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
605*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vprotb $1, %xmm0, %xmm0
606*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
607*9880d681SAndroid Build Coastguard Worker;
608*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_roti_epi8:
609*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
610*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vprotb $1, %xmm0, %xmm0
611*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
612*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
613*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vprotbi(<16 x i8> %arg0, i8 1)
614*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
615*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
616*9880d681SAndroid Build Coastguard Worker}
617*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vprotbi(<16 x i8>, i8) nounwind readnone
618*9880d681SAndroid Build Coastguard Worker
619*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_roti_epi16(<2 x i64> %a0) {
620*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_roti_epi16:
621*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
622*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vprotw $50, %xmm0, %xmm0
623*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
624*9880d681SAndroid Build Coastguard Worker;
625*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_roti_epi16:
626*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
627*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vprotw $50, %xmm0, %xmm0
628*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
629*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
630*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vprotwi(<8 x i16> %arg0, i8 50)
631*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
632*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
633*9880d681SAndroid Build Coastguard Worker}
634*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vprotwi(<8 x i16>, i8) nounwind readnone
635*9880d681SAndroid Build Coastguard Worker
636*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_roti_epi32(<2 x i64> %a0) {
637*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_roti_epi32:
638*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
639*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vprotd $226, %xmm0, %xmm0
640*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
641*9880d681SAndroid Build Coastguard Worker;
642*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_roti_epi32:
643*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
644*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vprotd $226, %xmm0, %xmm0
645*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
646*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
647*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vprotdi(<4 x i32> %arg0, i8 -30)
648*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
649*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
650*9880d681SAndroid Build Coastguard Worker}
651*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vprotdi(<4 x i32>, i8) nounwind readnone
652*9880d681SAndroid Build Coastguard Worker
653*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_roti_epi64(<2 x i64> %a0) {
654*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_roti_epi64:
655*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
656*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vprotq $100, %xmm0, %xmm0
657*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
658*9880d681SAndroid Build Coastguard Worker;
659*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_roti_epi64:
660*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
661*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vprotq $100, %xmm0, %xmm0
662*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
663*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vprotqi(<2 x i64> %a0, i8 100)
664*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
665*9880d681SAndroid Build Coastguard Worker}
666*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vprotqi(<2 x i64>, i8) nounwind readnone
667*9880d681SAndroid Build Coastguard Worker
668*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_shl_epi8(<2 x i64> %a0, <2 x i64> %a1) {
669*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_shl_epi8:
670*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
671*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
672*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
673*9880d681SAndroid Build Coastguard Worker;
674*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_shl_epi8:
675*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
676*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
677*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
678*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
679*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
680*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpshlb(<16 x i8> %arg0, <16 x i8> %arg1)
681*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
682*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
683*9880d681SAndroid Build Coastguard Worker}
684*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpshlb(<16 x i8>, <16 x i8>) nounwind readnone
685*9880d681SAndroid Build Coastguard Worker
686*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_shl_epi16(<2 x i64> %a0, <2 x i64> %a1) {
687*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_shl_epi16:
688*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
689*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshlw %xmm1, %xmm0, %xmm0
690*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
691*9880d681SAndroid Build Coastguard Worker;
692*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_shl_epi16:
693*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
694*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshlw %xmm1, %xmm0, %xmm0
695*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
696*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
697*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
698*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16> %arg0, <8 x i16> %arg1)
699*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
700*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
701*9880d681SAndroid Build Coastguard Worker}
702*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpshlw(<8 x i16>, <8 x i16>) nounwind readnone
703*9880d681SAndroid Build Coastguard Worker
704*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_shl_epi32(<2 x i64> %a0, <2 x i64> %a1) {
705*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_shl_epi32:
706*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
707*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshld %xmm1, %xmm0, %xmm0
708*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
709*9880d681SAndroid Build Coastguard Worker;
710*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_shl_epi32:
711*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
712*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshld %xmm1, %xmm0, %xmm0
713*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
714*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
715*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
716*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpshld(<4 x i32> %arg0, <4 x i32> %arg1)
717*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
718*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
719*9880d681SAndroid Build Coastguard Worker}
720*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpshld(<4 x i32>, <4 x i32>) nounwind readnone
721*9880d681SAndroid Build Coastguard Worker
722*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_shl_epi64(<2 x i64> %a0, <2 x i64> %a1) {
723*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_shl_epi64:
724*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
725*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshlq %xmm1, %xmm0, %xmm0
726*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
727*9880d681SAndroid Build Coastguard Worker;
728*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_shl_epi64:
729*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
730*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshlq %xmm1, %xmm0, %xmm0
731*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
732*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpshlq(<2 x i64> %a0, <2 x i64> %a1)
733*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
734*9880d681SAndroid Build Coastguard Worker}
735*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpshlq(<2 x i64>, <2 x i64>) nounwind readnone
736*9880d681SAndroid Build Coastguard Worker
737*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sha_epi8(<2 x i64> %a0, <2 x i64> %a1) {
738*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sha_epi8:
739*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
740*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshab %xmm1, %xmm0, %xmm0
741*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
742*9880d681SAndroid Build Coastguard Worker;
743*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sha_epi8:
744*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
745*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshab %xmm1, %xmm0, %xmm0
746*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
747*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
748*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
749*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpshab(<16 x i8> %arg0, <16 x i8> %arg1)
750*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
751*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
752*9880d681SAndroid Build Coastguard Worker}
753*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpshab(<16 x i8>, <16 x i8>) nounwind readnone
754*9880d681SAndroid Build Coastguard Worker
755*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sha_epi16(<2 x i64> %a0, <2 x i64> %a1) {
756*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sha_epi16:
757*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
758*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshaw %xmm1, %xmm0, %xmm0
759*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
760*9880d681SAndroid Build Coastguard Worker;
761*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sha_epi16:
762*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
763*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshaw %xmm1, %xmm0, %xmm0
764*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
765*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
766*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
767*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpshaw(<8 x i16> %arg0, <8 x i16> %arg1)
768*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
769*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
770*9880d681SAndroid Build Coastguard Worker}
771*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpshaw(<8 x i16>, <8 x i16>) nounwind readnone
772*9880d681SAndroid Build Coastguard Worker
773*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sha_epi32(<2 x i64> %a0, <2 x i64> %a1) {
774*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sha_epi32:
775*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
776*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshad %xmm1, %xmm0, %xmm0
777*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
778*9880d681SAndroid Build Coastguard Worker;
779*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sha_epi32:
780*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
781*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshad %xmm1, %xmm0, %xmm0
782*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
783*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
784*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
785*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpshad(<4 x i32> %arg0, <4 x i32> %arg1)
786*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
787*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
788*9880d681SAndroid Build Coastguard Worker}
789*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpshad(<4 x i32>, <4 x i32>) nounwind readnone
790*9880d681SAndroid Build Coastguard Worker
791*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sha_epi64(<2 x i64> %a0, <2 x i64> %a1) {
792*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sha_epi64:
793*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
794*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
795*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
796*9880d681SAndroid Build Coastguard Worker;
797*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sha_epi64:
798*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
799*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
800*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
801*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpshaq(<2 x i64> %a0, <2 x i64> %a1)
802*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
803*9880d681SAndroid Build Coastguard Worker}
804*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpshaq(<2 x i64>, <2 x i64>) nounwind readnone
805*9880d681SAndroid Build Coastguard Worker
806*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_com_epu8(<2 x i64> %a0, <2 x i64> %a1) {
807*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_com_epu8:
808*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
809*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcomltub %xmm1, %xmm0, %xmm0
810*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
811*9880d681SAndroid Build Coastguard Worker;
812*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_com_epu8:
813*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
814*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcomltub %xmm1, %xmm0, %xmm0
815*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
816*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
817*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
818*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %arg0, <16 x i8> %arg1, i8 0)
819*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
820*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
821*9880d681SAndroid Build Coastguard Worker}
822*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8>, <16 x i8>, i8) nounwind readnone
823*9880d681SAndroid Build Coastguard Worker
824*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_com_epu16(<2 x i64> %a0, <2 x i64> %a1) {
825*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_com_epu16:
826*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
827*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcomltuw %xmm1, %xmm0, %xmm0
828*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
829*9880d681SAndroid Build Coastguard Worker;
830*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_com_epu16:
831*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
832*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcomltuw %xmm1, %xmm0, %xmm0
833*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
834*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
835*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
836*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %arg0, <8 x i16> %arg1, i8 0)
837*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
838*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
839*9880d681SAndroid Build Coastguard Worker}
840*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16>, <8 x i16>, i8) nounwind readnone
841*9880d681SAndroid Build Coastguard Worker
842*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_com_epu32(<2 x i64> %a0, <2 x i64> %a1) {
843*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_com_epu32:
844*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
845*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcomltud %xmm1, %xmm0, %xmm0
846*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
847*9880d681SAndroid Build Coastguard Worker;
848*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_com_epu32:
849*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
850*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcomltud %xmm1, %xmm0, %xmm0
851*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
852*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
853*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
854*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %arg0, <4 x i32> %arg1, i8 0)
855*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
856*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
857*9880d681SAndroid Build Coastguard Worker}
858*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32>, <4 x i32>, i8) nounwind readnone
859*9880d681SAndroid Build Coastguard Worker
860*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_com_epu64(<2 x i64> %a0, <2 x i64> %a1) {
861*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_com_epu64:
862*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
863*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcomltuq %xmm1, %xmm0, %xmm0
864*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
865*9880d681SAndroid Build Coastguard Worker;
866*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_com_epu64:
867*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
868*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcomltuq %xmm1, %xmm0, %xmm0
869*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
870*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %a0, <2 x i64> %a1, i8 0)
871*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
872*9880d681SAndroid Build Coastguard Worker}
873*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64>, <2 x i64>, i8) nounwind readnone
874*9880d681SAndroid Build Coastguard Worker
875*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_com_epi8(<2 x i64> %a0, <2 x i64> %a1) {
876*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_com_epi8:
877*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
878*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcomltb %xmm1, %xmm0, %xmm0
879*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
880*9880d681SAndroid Build Coastguard Worker;
881*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_com_epi8:
882*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
883*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcomltb %xmm1, %xmm0, %xmm0
884*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
885*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
886*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
887*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %arg0, <16 x i8> %arg1, i8 0)
888*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
889*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
890*9880d681SAndroid Build Coastguard Worker}
891*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8>, <16 x i8>, i8) nounwind readnone
892*9880d681SAndroid Build Coastguard Worker
893*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_com_epi16(<2 x i64> %a0, <2 x i64> %a1) {
894*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_com_epi16:
895*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
896*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcomltw %xmm1, %xmm0, %xmm0
897*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
898*9880d681SAndroid Build Coastguard Worker;
899*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_com_epi16:
900*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
901*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcomltw %xmm1, %xmm0, %xmm0
902*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
903*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
904*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
905*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %arg0, <8 x i16> %arg1, i8 0)
906*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
907*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
908*9880d681SAndroid Build Coastguard Worker}
909*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16>, <8 x i16>, i8) nounwind readnone
910*9880d681SAndroid Build Coastguard Worker
911*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_com_epi32(<2 x i64> %a0, <2 x i64> %a1) {
912*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_com_epi32:
913*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
914*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcomltd %xmm1, %xmm0, %xmm0
915*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
916*9880d681SAndroid Build Coastguard Worker;
917*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_com_epi32:
918*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
919*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcomltd %xmm1, %xmm0, %xmm0
920*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
921*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
922*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
923*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %arg0, <4 x i32> %arg1, i8 0)
924*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
925*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
926*9880d681SAndroid Build Coastguard Worker}
927*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32>, <4 x i32>, i8) nounwind readnone
928*9880d681SAndroid Build Coastguard Worker
929*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_com_epi64(<2 x i64> %a0, <2 x i64> %a1) {
930*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_com_epi64:
931*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
932*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpcomltq %xmm1, %xmm0, %xmm0
933*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
934*9880d681SAndroid Build Coastguard Worker;
935*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_com_epi64:
936*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
937*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpcomltq %xmm1, %xmm0, %xmm0
938*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
939*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %a0, <2 x i64> %a1, i8 0)
940*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
941*9880d681SAndroid Build Coastguard Worker}
942*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64>, <2 x i64>, i8) nounwind readnone
943*9880d681SAndroid Build Coastguard Worker
944*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_permute2_pd(<2 x double> %a0, <2 x double> %a1, <2 x i64> %a2) {
945*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_permute2_pd:
946*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
947*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermil2pd $0, %xmm2, %xmm1, %xmm0, %xmm0
948*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
949*9880d681SAndroid Build Coastguard Worker;
950*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_permute2_pd:
951*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
952*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermil2pd $0, %xmm2, %xmm1, %xmm0, %xmm0
953*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
954*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 0)
955*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
956*9880d681SAndroid Build Coastguard Worker}
957*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double>, <2 x double>, <2 x i64>, i8) nounwind readnone
958*9880d681SAndroid Build Coastguard Worker
959*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mm256_permute2_pd(<4 x double> %a0, <4 x double> %a1, <4 x i64> %a2) {
960*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm256_permute2_pd:
961*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
962*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermil2pd $0, %ymm2, %ymm1, %ymm0, %ymm0
963*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
964*9880d681SAndroid Build Coastguard Worker;
965*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm256_permute2_pd:
966*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
967*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermil2pd $0, %ymm2, %ymm1, %ymm0, %ymm0
968*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
969*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 0)
970*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
971*9880d681SAndroid Build Coastguard Worker}
972*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double>, <4 x double>, <4 x i64>, i8) nounwind readnone
973*9880d681SAndroid Build Coastguard Worker
974*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_permute2_ps(<4 x float> %a0, <4 x float> %a1, <2 x i64> %a2) {
975*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_permute2_ps:
976*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
977*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermil2ps $0, %xmm2, %xmm1, %xmm0, %xmm0
978*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
979*9880d681SAndroid Build Coastguard Worker;
980*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_permute2_ps:
981*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
982*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermil2ps $0, %xmm2, %xmm1, %xmm0, %xmm0
983*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
984*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <4 x i32>
985*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float> %a0, <4 x float> %a1, <4 x i32> %arg2, i8 0)
986*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
987*9880d681SAndroid Build Coastguard Worker}
988*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float>, <4 x float>, <4 x i32>, i8) nounwind readnone
989*9880d681SAndroid Build Coastguard Worker
990*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mm256_permute2_ps(<8 x float> %a0, <8 x float> %a1, <4 x i64> %a2) {
991*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm256_permute2_ps:
992*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
993*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vpermil2ps $0, %ymm2, %ymm1, %ymm0, %ymm0
994*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
995*9880d681SAndroid Build Coastguard Worker;
996*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm256_permute2_ps:
997*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
998*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vpermil2ps $0, %ymm2, %ymm1, %ymm0, %ymm0
999*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1000*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <4 x i64> %a2 to <8 x i32>
1001*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> %arg2, i8 0)
1002*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
1003*9880d681SAndroid Build Coastguard Worker}
1004*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float>, <8 x float>, <8 x i32>, i8) nounwind readnone
1005*9880d681SAndroid Build Coastguard Worker
1006*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_frcz_ss(<4 x float> %a0) {
1007*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_frcz_ss:
1008*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1009*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vfrczss %xmm0, %xmm0
1010*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1011*9880d681SAndroid Build Coastguard Worker;
1012*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_frcz_ss:
1013*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1014*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vfrczss %xmm0, %xmm0
1015*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1016*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float> %a0)
1017*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1018*9880d681SAndroid Build Coastguard Worker}
1019*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float>) nounwind readnone
1020*9880d681SAndroid Build Coastguard Worker
1021*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_frcz_sd(<2 x double> %a0) {
1022*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_frcz_sd:
1023*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1024*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vfrczsd %xmm0, %xmm0
1025*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1026*9880d681SAndroid Build Coastguard Worker;
1027*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_frcz_sd:
1028*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1029*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vfrczsd %xmm0, %xmm0
1030*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1031*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double> %a0)
1032*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
1033*9880d681SAndroid Build Coastguard Worker}
1034*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double>) nounwind readnone
1035*9880d681SAndroid Build Coastguard Worker
1036*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_frcz_ps(<4 x float> %a0) {
1037*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_frcz_ps:
1038*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1039*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vfrczps %xmm0, %xmm0
1040*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1041*9880d681SAndroid Build Coastguard Worker;
1042*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_frcz_ps:
1043*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1044*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vfrczps %xmm0, %xmm0
1045*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1046*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float> %a0)
1047*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1048*9880d681SAndroid Build Coastguard Worker}
1049*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float>) nounwind readnone
1050*9880d681SAndroid Build Coastguard Worker
1051*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_frcz_pd(<2 x double> %a0) {
1052*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_frcz_pd:
1053*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1054*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vfrczpd %xmm0, %xmm0
1055*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1056*9880d681SAndroid Build Coastguard Worker;
1057*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_frcz_pd:
1058*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1059*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vfrczpd %xmm0, %xmm0
1060*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1061*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double> %a0)
1062*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
1063*9880d681SAndroid Build Coastguard Worker}
1064*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double>) nounwind readnone
1065*9880d681SAndroid Build Coastguard Worker
1066*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_mm256_frcz_ps(<8 x float> %a0) {
1067*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm256_frcz_ps:
1068*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1069*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vfrczps %ymm0, %ymm0
1070*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1071*9880d681SAndroid Build Coastguard Worker;
1072*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm256_frcz_ps:
1073*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1074*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vfrczps %ymm0, %ymm0
1075*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1076*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float> %a0)
1077*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
1078*9880d681SAndroid Build Coastguard Worker}
1079*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float>) nounwind readnone
1080*9880d681SAndroid Build Coastguard Worker
1081*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_mm256_frcz_pd(<4 x double> %a0) {
1082*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm256_frcz_pd:
1083*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1084*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    vfrczpd %ymm0, %ymm0
1085*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1086*9880d681SAndroid Build Coastguard Worker;
1087*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm256_frcz_pd:
1088*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1089*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    vfrczpd %ymm0, %ymm0
1090*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1091*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double> %a0)
1092*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
1093*9880d681SAndroid Build Coastguard Worker}
1094*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double>) nounwind readnone
1095*9880d681SAndroid Build Coastguard Worker
1096*9880d681SAndroid Build Coastguard Worker
1097*9880d681SAndroid Build Coastguard Worker
1098*9880d681SAndroid Build Coastguard Worker
1099*9880d681SAndroid Build Coastguard Worker
1100*9880d681SAndroid Build Coastguard Worker
1101*9880d681SAndroid Build Coastguard Worker
1102*9880d681SAndroid Build Coastguard Worker
1103*9880d681SAndroid Build Coastguard Worker
1104*9880d681SAndroid Build Coastguard Worker
1105*9880d681SAndroid Build Coastguard Worker
1106*9880d681SAndroid Build Coastguard Worker
1107*9880d681SAndroid Build Coastguard Worker
1108*9880d681SAndroid Build Coastguard Worker
1109*9880d681SAndroid Build Coastguard Worker
1110*9880d681SAndroid Build Coastguard Worker
1111*9880d681SAndroid Build Coastguard Worker
1112