xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/sse41-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=i386-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=X32
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | 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/sse41-builtins.c
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_blend_epi16(<2 x i64> %a0, <2 x i64> %a1) {
8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_blend_epi16:
9*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
10*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6,7]
11*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
12*9880d681SAndroid Build Coastguard Worker;
13*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_blend_epi16:
14*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6,7]
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  %shuf = shufflevector <8 x i16> %arg0, <8 x i16> %arg1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 7>
20*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %shuf to <2 x i64>
21*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_blend_pd(<2 x double> %a0, <2 x double> %a1) {
25*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_blend_pd:
26*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
27*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
28*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
29*9880d681SAndroid Build Coastguard Worker;
30*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_blend_pd:
31*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
32*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1]
33*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
34*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 0, i32 3>
35*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_blend_ps(<4 x float> %a0, <4 x float> %a1) {
39*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_blend_ps:
40*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
41*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3]
42*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
43*9880d681SAndroid Build Coastguard Worker;
44*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_blend_ps:
45*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
46*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3]
47*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
48*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 5, i32 6, i32 3>
49*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_blendv_epi8(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> %a2) {
53*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_blendv_epi8:
54*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
55*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movdqa %xmm0, %xmm3
56*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm2, %xmm0
57*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pblendvb %xmm1, %xmm3
58*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movdqa %xmm3, %xmm0
59*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
60*9880d681SAndroid Build Coastguard Worker;
61*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_blendv_epi8:
62*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
63*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movdqa %xmm0, %xmm3
64*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm2, %xmm0
65*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pblendvb %xmm1, %xmm3
66*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movdqa %xmm3, %xmm0
67*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
68*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
69*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
70*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <16 x i8>
71*9880d681SAndroid Build Coastguard Worker  %call = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %arg0, <16 x i8> %arg1, <16 x i8> %arg2)
72*9880d681SAndroid Build Coastguard Worker  %res = bitcast <16 x i8> %call to <2 x i64>
73*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
74*9880d681SAndroid Build Coastguard Worker}
75*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_blendv_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
78*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_blendv_pd:
79*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
80*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movapd %xmm0, %xmm3
81*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm2, %xmm0
82*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    blendvpd %xmm1, %xmm3
83*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movapd %xmm3, %xmm0
84*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
85*9880d681SAndroid Build Coastguard Worker;
86*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_blendv_pd:
87*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
88*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movapd %xmm0, %xmm3
89*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm2, %xmm0
90*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    blendvpd %xmm1, %xmm3
91*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movapd %xmm3, %xmm0
92*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
93*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
94*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_blendv_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
99*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_blendv_ps:
100*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
101*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, %xmm3
102*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm2, %xmm0
103*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    blendvps %xmm1, %xmm3
104*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm3, %xmm0
105*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
106*9880d681SAndroid Build Coastguard Worker;
107*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_blendv_ps:
108*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
109*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, %xmm3
110*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm2, %xmm0
111*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    blendvps %xmm1, %xmm3
112*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm3, %xmm0
113*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
114*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
115*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.blendvps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_ceil_pd(<2 x double> %a0) {
120*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ceil_pd:
121*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
122*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundpd $2, %xmm0, %xmm0
123*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
124*9880d681SAndroid Build Coastguard Worker;
125*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ceil_pd:
126*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
127*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundpd $2, %xmm0, %xmm0
128*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
129*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %a0, i32 2)
130*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.round.pd(<2 x double>, i32) nounwind readnone
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_ceil_ps(<4 x float> %a0) {
135*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ceil_ps:
136*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
137*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundps $2, %xmm0, %xmm0
138*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
139*9880d681SAndroid Build Coastguard Worker;
140*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ceil_ps:
141*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
142*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundps $2, %xmm0, %xmm0
143*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
144*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %a0, i32 2)
145*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
146*9880d681SAndroid Build Coastguard Worker}
147*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.round.ps(<4 x float>, i32) nounwind readnone
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_ceil_sd(<2 x double> %a0, <2 x double> %a1) {
150*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ceil_sd:
151*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
152*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundsd $2, %xmm1, %xmm0
153*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
154*9880d681SAndroid Build Coastguard Worker;
155*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ceil_sd:
156*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
157*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundsd $2, %xmm1, %xmm0
158*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
159*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %a0, <2 x double> %a1, i32 2)
160*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.round.sd(<2 x double>, <2 x double>, i32) nounwind readnone
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_ceil_ss(<4 x float> %a0, <4 x float> %a1) {
165*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ceil_ss:
166*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
167*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundss $2, %xmm1, %xmm0
168*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
169*9880d681SAndroid Build Coastguard Worker;
170*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ceil_ss:
171*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
172*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundss $2, %xmm1, %xmm0
173*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
174*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %a0, <4 x float> %a1, i32 2)
175*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
176*9880d681SAndroid Build Coastguard Worker}
177*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.round.ss(<4 x float>, <4 x float>, i32) nounwind readnone
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cmpeq_epi64(<2 x i64> %a0, <2 x i64> %a1) {
180*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpeq_epi64:
181*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
182*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpeqq %xmm1, %xmm0
183*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
184*9880d681SAndroid Build Coastguard Worker;
185*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpeq_epi64:
186*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
187*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpeqq %xmm1, %xmm0
188*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
189*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq <2 x i64> %a0, %a1
190*9880d681SAndroid Build Coastguard Worker  %res = sext <2 x i1> %cmp to <2 x i64>
191*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
192*9880d681SAndroid Build Coastguard Worker}
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepi8_epi16(<2 x i64> %a0) {
195*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepi8_epi16:
196*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
197*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovsxbw %xmm0, %xmm0
198*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
199*9880d681SAndroid Build Coastguard Worker;
200*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepi8_epi16:
201*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
202*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovsxbw %xmm0, %xmm0
203*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
204*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
205*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <16 x i8> %arg0, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
206*9880d681SAndroid Build Coastguard Worker  %sext = sext <8 x i8> %ext0 to <8 x i16>
207*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %sext to <2 x i64>
208*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
209*9880d681SAndroid Build Coastguard Worker}
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepi8_epi32(<2 x i64> %a0) {
212*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepi8_epi32:
213*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
214*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovsxbd %xmm0, %xmm0
215*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
216*9880d681SAndroid Build Coastguard Worker;
217*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepi8_epi32:
218*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
219*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovsxbd %xmm0, %xmm0
220*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
221*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
222*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <16 x i8> %arg0, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
223*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i8> %ext0 to <4 x i32>
224*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <2 x i64>
225*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
226*9880d681SAndroid Build Coastguard Worker}
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepi8_epi64(<2 x i64> %a0) {
229*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepi8_epi64:
230*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
231*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovsxbq %xmm0, %xmm0
232*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
233*9880d681SAndroid Build Coastguard Worker;
234*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepi8_epi64:
235*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
236*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovsxbq %xmm0, %xmm0
237*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
238*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
239*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <16 x i8> %arg0, <16 x i8> undef, <2 x i32> <i32 0, i32 1>
240*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i8> %ext0 to <2 x i64>
241*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sext
242*9880d681SAndroid Build Coastguard Worker}
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepi16_epi32(<2 x i64> %a0) {
245*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepi16_epi32:
246*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
247*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovsxwd %xmm0, %xmm0
248*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
249*9880d681SAndroid Build Coastguard Worker;
250*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepi16_epi32:
251*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
252*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovsxwd %xmm0, %xmm0
253*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
254*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
255*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <8 x i16> %arg0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
256*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i16> %ext0 to <4 x i32>
257*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <2 x i64>
258*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepi16_epi64(<2 x i64> %a0) {
262*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepi16_epi64:
263*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
264*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovsxwq %xmm0, %xmm0
265*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
266*9880d681SAndroid Build Coastguard Worker;
267*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepi16_epi64:
268*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
269*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovsxwq %xmm0, %xmm0
270*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
271*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
272*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <8 x i16> %arg0, <8 x i16> undef, <2 x i32> <i32 0, i32 1>
273*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i16> %ext0 to <2 x i64>
274*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sext
275*9880d681SAndroid Build Coastguard Worker}
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepi32_epi64(<2 x i64> %a0) {
278*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepi32_epi64:
279*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
280*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovsxdq %xmm0, %xmm0
281*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
282*9880d681SAndroid Build Coastguard Worker;
283*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepi32_epi64:
284*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
285*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovsxdq %xmm0, %xmm0
286*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
287*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
288*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <4 x i32> %arg0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
289*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i32> %ext0 to <2 x i64>
290*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sext
291*9880d681SAndroid Build Coastguard Worker}
292*9880d681SAndroid Build Coastguard Worker
293*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepu8_epi16(<2 x i64> %a0) {
294*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepu8_epi16:
295*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
296*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
297*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
298*9880d681SAndroid Build Coastguard Worker;
299*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepu8_epi16:
300*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
301*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
302*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
303*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
304*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <16 x i8> %arg0, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
305*9880d681SAndroid Build Coastguard Worker  %sext = zext <8 x i8> %ext0 to <8 x i16>
306*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %sext to <2 x i64>
307*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
308*9880d681SAndroid Build Coastguard Worker}
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepu8_epi32(<2 x i64> %a0) {
311*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepu8_epi32:
312*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
313*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero
314*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
315*9880d681SAndroid Build Coastguard Worker;
316*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepu8_epi32:
317*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
318*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero
319*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
320*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
321*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <16 x i8> %arg0, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
322*9880d681SAndroid Build Coastguard Worker  %sext = zext <4 x i8> %ext0 to <4 x i32>
323*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <2 x i64>
324*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
325*9880d681SAndroid Build Coastguard Worker}
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepu8_epi64(<2 x i64> %a0) {
328*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepu8_epi64:
329*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
330*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero
331*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
332*9880d681SAndroid Build Coastguard Worker;
333*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepu8_epi64:
334*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
335*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero
336*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
337*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
338*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <16 x i8> %arg0, <16 x i8> undef, <2 x i32> <i32 0, i32 1>
339*9880d681SAndroid Build Coastguard Worker  %sext = zext <2 x i8> %ext0 to <2 x i64>
340*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sext
341*9880d681SAndroid Build Coastguard Worker}
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepu16_epi32(<2 x i64> %a0) {
344*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepu16_epi32:
345*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
346*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
347*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
348*9880d681SAndroid Build Coastguard Worker;
349*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepu16_epi32:
350*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
351*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
352*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
353*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
354*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <8 x i16> %arg0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
355*9880d681SAndroid Build Coastguard Worker  %sext = zext <4 x i16> %ext0 to <4 x i32>
356*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <2 x i64>
357*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
358*9880d681SAndroid Build Coastguard Worker}
359*9880d681SAndroid Build Coastguard Worker
360*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepu16_epi64(<2 x i64> %a0) {
361*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepu16_epi64:
362*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
363*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
364*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
365*9880d681SAndroid Build Coastguard Worker;
366*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepu16_epi64:
367*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
368*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
369*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
370*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
371*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <8 x i16> %arg0, <8 x i16> undef, <2 x i32> <i32 0, i32 1>
372*9880d681SAndroid Build Coastguard Worker  %sext = zext <2 x i16> %ext0 to <2 x i64>
373*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sext
374*9880d681SAndroid Build Coastguard Worker}
375*9880d681SAndroid Build Coastguard Worker
376*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cvtepu32_epi64(<2 x i64> %a0) {
377*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtepu32_epi64:
378*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
379*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
380*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
381*9880d681SAndroid Build Coastguard Worker;
382*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtepu32_epi64:
383*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
384*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
385*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
386*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
387*9880d681SAndroid Build Coastguard Worker  %ext0 = shufflevector <4 x i32> %arg0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
388*9880d681SAndroid Build Coastguard Worker  %sext = zext <2 x i32> %ext0 to <2 x i64>
389*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sext
390*9880d681SAndroid Build Coastguard Worker}
391*9880d681SAndroid Build Coastguard Worker
392*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_dp_pd(<2 x double> %a0, <2 x double> %a1) {
393*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_dp_pd:
394*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
395*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    dppd $7, %xmm1, %xmm0
396*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
397*9880d681SAndroid Build Coastguard Worker;
398*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_dp_pd:
399*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
400*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    dppd $7, %xmm1, %xmm0
401*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
402*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.dppd(<2 x double> %a0, <2 x double> %a1, i8 7)
403*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
404*9880d681SAndroid Build Coastguard Worker}
405*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.dppd(<2 x double>, <2 x double>, i8) nounwind readnone
406*9880d681SAndroid Build Coastguard Worker
407*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_dp_ps(<4 x float> %a0, <4 x float> %a1) {
408*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_dp_ps:
409*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
410*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    dpps $7, %xmm1, %xmm0
411*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
412*9880d681SAndroid Build Coastguard Worker;
413*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_dp_ps:
414*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
415*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    dpps $7, %xmm1, %xmm0
416*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
417*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.dpps(<4 x float> %a0, <4 x float> %a1, i8 7)
418*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
419*9880d681SAndroid Build Coastguard Worker}
420*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.dpps(<4 x float>, <4 x float>, i8) nounwind readnone
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_extract_epi8(<2 x i64> %a0) {
423*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_extract_epi8:
424*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
425*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pextrb $1, %xmm0, %eax
426*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movzbl %al, %eax
427*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
428*9880d681SAndroid Build Coastguard Worker;
429*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_extract_epi8:
430*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
431*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pextrb $1, %xmm0, %eax
432*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movzbl %al, %eax
433*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
434*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
435*9880d681SAndroid Build Coastguard Worker  %ext = extractelement <16 x i8> %arg0, i32 1
436*9880d681SAndroid Build Coastguard Worker  %res = zext i8 %ext to i32
437*9880d681SAndroid Build Coastguard Worker  ret i32 %res
438*9880d681SAndroid Build Coastguard Worker}
439*9880d681SAndroid Build Coastguard Worker
440*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_extract_epi32(<2 x i64> %a0) {
441*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_extract_epi32:
442*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
443*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pextrd $1, %xmm0, %eax
444*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
445*9880d681SAndroid Build Coastguard Worker;
446*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_extract_epi32:
447*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
448*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pextrd $1, %xmm0, %eax
449*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
450*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
451*9880d681SAndroid Build Coastguard Worker  %ext = extractelement <4 x i32> %arg0, i32 1
452*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
453*9880d681SAndroid Build Coastguard Worker}
454*9880d681SAndroid Build Coastguard Worker
455*9880d681SAndroid Build Coastguard Workerdefine i64 @test_mm_extract_epi64(<2 x i64> %a0) {
456*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_extract_epi64:
457*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
458*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pextrd $2, %xmm0, %eax
459*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pextrd $3, %xmm0, %edx
460*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
461*9880d681SAndroid Build Coastguard Worker;
462*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_extract_epi64:
463*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
464*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pextrq $1, %xmm0, %rax
465*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
466*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
467*9880d681SAndroid Build Coastguard Worker  %ext = extractelement <2 x i64> %a0, i32 1
468*9880d681SAndroid Build Coastguard Worker  ret i64 %ext
469*9880d681SAndroid Build Coastguard Worker}
470*9880d681SAndroid Build Coastguard Worker
471*9880d681SAndroid Build Coastguard Worker; TODO test_mm_extract_ps
472*9880d681SAndroid Build Coastguard Worker
473*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_floor_pd(<2 x double> %a0) {
474*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_floor_pd:
475*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
476*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundpd $1, %xmm0, %xmm0
477*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
478*9880d681SAndroid Build Coastguard Worker;
479*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_floor_pd:
480*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
481*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundpd $1, %xmm0, %xmm0
482*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
483*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %a0, i32 1)
484*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
485*9880d681SAndroid Build Coastguard Worker}
486*9880d681SAndroid Build Coastguard Worker
487*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_floor_ps(<4 x float> %a0) {
488*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_floor_ps:
489*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
490*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundps $1, %xmm0, %xmm0
491*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
492*9880d681SAndroid Build Coastguard Worker;
493*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_floor_ps:
494*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
495*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundps $1, %xmm0, %xmm0
496*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
497*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %a0, i32 1)
498*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
499*9880d681SAndroid Build Coastguard Worker}
500*9880d681SAndroid Build Coastguard Worker
501*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_floor_sd(<2 x double> %a0, <2 x double> %a1) {
502*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_floor_sd:
503*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
504*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundsd $1, %xmm1, %xmm0
505*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
506*9880d681SAndroid Build Coastguard Worker;
507*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_floor_sd:
508*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
509*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundsd $1, %xmm1, %xmm0
510*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
511*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %a0, <2 x double> %a1, i32 1)
512*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
513*9880d681SAndroid Build Coastguard Worker}
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_floor_ss(<4 x float> %a0, <4 x float> %a1) {
516*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_floor_ss:
517*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
518*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundss $1, %xmm1, %xmm0
519*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
520*9880d681SAndroid Build Coastguard Worker;
521*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_floor_ss:
522*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
523*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundss $1, %xmm1, %xmm0
524*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
525*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %a0, <4 x float> %a1, i32 1)
526*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
527*9880d681SAndroid Build Coastguard Worker}
528*9880d681SAndroid Build Coastguard Worker
529*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_insert_epi8(<2 x i64> %a0, i8 %a1) {
530*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_insert_epi8:
531*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
532*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
533*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pinsrb $1, %eax, %xmm0
534*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
535*9880d681SAndroid Build Coastguard Worker;
536*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_insert_epi8:
537*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
538*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movzbl %dil, %eax
539*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pinsrb $1, %eax, %xmm0
540*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
541*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
542*9880d681SAndroid Build Coastguard Worker  %res = insertelement <16 x i8> %arg0, i8 %a1,i32 1
543*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
544*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
545*9880d681SAndroid Build Coastguard Worker}
546*9880d681SAndroid Build Coastguard Worker
547*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_insert_epi32(<2 x i64> %a0, i32 %a1) {
548*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_insert_epi32:
549*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
550*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pinsrd $1, {{[0-9]+}}(%esp), %xmm0
551*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
552*9880d681SAndroid Build Coastguard Worker;
553*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_insert_epi32:
554*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
555*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pinsrd $1, %edi, %xmm0
556*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
557*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
558*9880d681SAndroid Build Coastguard Worker  %res = insertelement <4 x i32> %arg0, i32 %a1,i32 1
559*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
560*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
561*9880d681SAndroid Build Coastguard Worker}
562*9880d681SAndroid Build Coastguard Worker
563*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_insert_epi64(<2 x i64> %a0, i64 %a1) {
564*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_insert_epi64:
565*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
566*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pinsrd $2, {{[0-9]+}}(%esp), %xmm0
567*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pinsrd $3, {{[0-9]+}}(%esp), %xmm0
568*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
569*9880d681SAndroid Build Coastguard Worker;
570*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_insert_epi64:
571*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
572*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pinsrq $1, %rdi, %xmm0
573*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
574*9880d681SAndroid Build Coastguard Worker  %res = insertelement <2 x i64> %a0, i64 %a1,i32 1
575*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
576*9880d681SAndroid Build Coastguard Worker}
577*9880d681SAndroid Build Coastguard Worker
578*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_insert_ps(<4 x float> %a0, <4 x float> %a1) {
579*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_insert_ps:
580*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
581*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    insertps {{.*#+}} xmm0 = xmm1[0],xmm0[1],zero,xmm0[3]
582*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
583*9880d681SAndroid Build Coastguard Worker;
584*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_insert_ps:
585*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
586*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    insertps {{.*#+}} xmm0 = xmm1[0],xmm0[1],zero,xmm0[3]
587*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
588*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %a0, <4 x float> %a1, i8 4)
589*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
590*9880d681SAndroid Build Coastguard Worker}
591*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.insertps(<4 x float>, <4 x float>, i8) nounwind readnone
592*9880d681SAndroid Build Coastguard Worker
593*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_max_epi8(<2 x i64> %a0, <2 x i64> %a1) {
594*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_max_epi8:
595*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
596*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmaxsb %xmm1, %xmm0
597*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
598*9880d681SAndroid Build Coastguard Worker;
599*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_max_epi8:
600*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
601*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmaxsb %xmm1, %xmm0
602*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
603*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
604*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
605*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt <16 x i8> %arg0, %arg1
606*9880d681SAndroid Build Coastguard Worker  %sel = select <16 x i1> %cmp, <16 x i8> %arg0, <16 x i8> %arg1
607*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %sel to <2 x i64>
608*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
609*9880d681SAndroid Build Coastguard Worker}
610*9880d681SAndroid Build Coastguard Worker
611*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_max_epi32(<2 x i64> %a0, <2 x i64> %a1) {
612*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_max_epi32:
613*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
614*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmaxsd %xmm1, %xmm0
615*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
616*9880d681SAndroid Build Coastguard Worker;
617*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_max_epi32:
618*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
619*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmaxsd %xmm1, %xmm0
620*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
621*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
622*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
623*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt <4 x i32> %arg0, %arg1
624*9880d681SAndroid Build Coastguard Worker  %sel = select <4 x i1> %cmp, <4 x i32> %arg0, <4 x i32> %arg1
625*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %sel to <2 x i64>
626*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
627*9880d681SAndroid Build Coastguard Worker}
628*9880d681SAndroid Build Coastguard Worker
629*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_max_epu16(<2 x i64> %a0, <2 x i64> %a1) {
630*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_max_epu16:
631*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
632*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmaxuw %xmm1, %xmm0
633*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
634*9880d681SAndroid Build Coastguard Worker;
635*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_max_epu16:
636*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
637*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmaxuw %xmm1, %xmm0
638*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
639*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
640*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
641*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt <8 x i16> %arg0, %arg1
642*9880d681SAndroid Build Coastguard Worker  %sel = select <8 x i1> %cmp, <8 x i16> %arg0, <8 x i16> %arg1
643*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %sel to <2 x i64>
644*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
645*9880d681SAndroid Build Coastguard Worker}
646*9880d681SAndroid Build Coastguard Worker
647*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_max_epu32(<2 x i64> %a0, <2 x i64> %a1) {
648*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_max_epu32:
649*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
650*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmaxud %xmm1, %xmm0
651*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
652*9880d681SAndroid Build Coastguard Worker;
653*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_max_epu32:
654*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
655*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmaxud %xmm1, %xmm0
656*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
657*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
658*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
659*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt <4 x i32> %arg0, %arg1
660*9880d681SAndroid Build Coastguard Worker  %sel = select <4 x i1> %cmp, <4 x i32> %arg0, <4 x i32> %arg1
661*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %sel to <2 x i64>
662*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
663*9880d681SAndroid Build Coastguard Worker}
664*9880d681SAndroid Build Coastguard Worker
665*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_min_epi8(<2 x i64> %a0, <2 x i64> %a1) {
666*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_min_epi8:
667*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
668*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pminsb %xmm1, %xmm0
669*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
670*9880d681SAndroid Build Coastguard Worker;
671*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_min_epi8:
672*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
673*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pminsb %xmm1, %xmm0
674*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
675*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
676*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
677*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt <16 x i8> %arg0, %arg1
678*9880d681SAndroid Build Coastguard Worker  %sel = select <16 x i1> %cmp, <16 x i8> %arg0, <16 x i8> %arg1
679*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %sel to <2 x i64>
680*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
681*9880d681SAndroid Build Coastguard Worker}
682*9880d681SAndroid Build Coastguard Worker
683*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_min_epi32(<2 x i64> %a0, <2 x i64> %a1) {
684*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_min_epi32:
685*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
686*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pminsd %xmm1, %xmm0
687*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
688*9880d681SAndroid Build Coastguard Worker;
689*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_min_epi32:
690*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
691*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pminsd %xmm1, %xmm0
692*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
693*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
694*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
695*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt <4 x i32> %arg0, %arg1
696*9880d681SAndroid Build Coastguard Worker  %sel = select <4 x i1> %cmp, <4 x i32> %arg0, <4 x i32> %arg1
697*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %sel to <2 x i64>
698*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
699*9880d681SAndroid Build Coastguard Worker}
700*9880d681SAndroid Build Coastguard Worker
701*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_min_epu16(<2 x i64> %a0, <2 x i64> %a1) {
702*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_min_epu16:
703*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
704*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pminuw %xmm1, %xmm0
705*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
706*9880d681SAndroid Build Coastguard Worker;
707*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_min_epu16:
708*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
709*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pminuw %xmm1, %xmm0
710*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
711*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
712*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
713*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult <8 x i16> %arg0, %arg1
714*9880d681SAndroid Build Coastguard Worker  %sel = select <8 x i1> %cmp, <8 x i16> %arg0, <8 x i16> %arg1
715*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %sel to <2 x i64>
716*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
717*9880d681SAndroid Build Coastguard Worker}
718*9880d681SAndroid Build Coastguard Worker
719*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_min_epu32(<2 x i64> %a0, <2 x i64> %a1) {
720*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_min_epu32:
721*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
722*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pminud %xmm1, %xmm0
723*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
724*9880d681SAndroid Build Coastguard Worker;
725*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_min_epu32:
726*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
727*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pminud %xmm1, %xmm0
728*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
729*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
730*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
731*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult <4 x i32> %arg0, %arg1
732*9880d681SAndroid Build Coastguard Worker  %sel = select <4 x i1> %cmp, <4 x i32> %arg0, <4 x i32> %arg1
733*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %sel to <2 x i64>
734*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
735*9880d681SAndroid Build Coastguard Worker}
736*9880d681SAndroid Build Coastguard Worker
737*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_minpos_epu16(<2 x i64> %a0) {
738*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_minpos_epu16:
739*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
740*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    phminposuw %xmm0, %xmm0
741*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
742*9880d681SAndroid Build Coastguard Worker;
743*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_minpos_epu16:
744*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
745*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    phminposuw %xmm0, %xmm0
746*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
747*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
748*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16> %arg0)
749*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
750*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
751*9880d681SAndroid Build Coastguard Worker}
752*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16>) nounwind readnone
753*9880d681SAndroid Build Coastguard Worker
754*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_mpsadbw_epu8(<2 x i64> %a0, <2 x i64> %a1) {
755*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_mpsadbw_epu8:
756*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
757*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    mpsadbw $1, %xmm1, %xmm0
758*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
759*9880d681SAndroid Build Coastguard Worker;
760*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_mpsadbw_epu8:
761*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
762*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    mpsadbw $1, %xmm1, %xmm0
763*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
764*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
765*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
766*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8> %arg0, <16 x i8> %arg1, i8 1)
767*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %res to <2 x i64>
768*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
769*9880d681SAndroid Build Coastguard Worker}
770*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8>, <16 x i8>, i8) nounwind readnone
771*9880d681SAndroid Build Coastguard Worker
772*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_mul_epi32(<2 x i64> %a0, <2 x i64> %a1) {
773*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_mul_epi32:
774*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
775*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmuldq %xmm1, %xmm0
776*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
777*9880d681SAndroid Build Coastguard Worker;
778*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_mul_epi32:
779*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
780*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmuldq %xmm1, %xmm0
781*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
782*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
783*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
784*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.sse41.pmuldq(<4 x i32> %arg0, <4 x i32> %arg1)
785*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
786*9880d681SAndroid Build Coastguard Worker}
787*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse41.pmuldq(<4 x i32>, <4 x i32>) nounwind readnone
788*9880d681SAndroid Build Coastguard Worker
789*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_mullo_epi32(<2 x i64> %a0, <2 x i64> %a1) {
790*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_mullo_epi32:
791*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
792*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmulld %xmm1, %xmm0
793*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
794*9880d681SAndroid Build Coastguard Worker;
795*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_mullo_epi32:
796*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
797*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmulld %xmm1, %xmm0
798*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
799*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
800*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
801*9880d681SAndroid Build Coastguard Worker  %res = mul <4 x i32> %arg0, %arg1
802*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <2 x i64>
803*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
804*9880d681SAndroid Build Coastguard Worker}
805*9880d681SAndroid Build Coastguard Worker
806*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_packus_epi32(<2 x i64> %a0, <2 x i64> %a1) {
807*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_packus_epi32:
808*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
809*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    packusdw %xmm1, %xmm0
810*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
811*9880d681SAndroid Build Coastguard Worker;
812*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_packus_epi32:
813*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
814*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    packusdw %xmm1, %xmm0
815*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
816*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
817*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
818*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %arg0, <4 x i32> %arg1)
819*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <8 x i16> %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 <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32>, <4 x i32>) nounwind readnone
823*9880d681SAndroid Build Coastguard Worker
824*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_round_pd(<2 x double> %a0) {
825*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_round_pd:
826*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
827*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundpd $4, %xmm0, %xmm0
828*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
829*9880d681SAndroid Build Coastguard Worker;
830*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_round_pd:
831*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
832*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundpd $4, %xmm0, %xmm0
833*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
834*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %a0, i32 4)
835*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
836*9880d681SAndroid Build Coastguard Worker}
837*9880d681SAndroid Build Coastguard Worker
838*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_round_ps(<4 x float> %a0) {
839*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_round_ps:
840*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
841*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundps $4, %xmm0, %xmm0
842*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
843*9880d681SAndroid Build Coastguard Worker;
844*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_round_ps:
845*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
846*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundps $4, %xmm0, %xmm0
847*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
848*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %a0, i32 4)
849*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
850*9880d681SAndroid Build Coastguard Worker}
851*9880d681SAndroid Build Coastguard Worker
852*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mm_round_sd(<2 x double> %a0, <2 x double> %a1) {
853*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_round_sd:
854*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
855*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundsd $4, %xmm1, %xmm0
856*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
857*9880d681SAndroid Build Coastguard Worker;
858*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_round_sd:
859*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
860*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundsd $4, %xmm1, %xmm0
861*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
862*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %a0, <2 x double> %a1, i32 4)
863*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
864*9880d681SAndroid Build Coastguard Worker}
865*9880d681SAndroid Build Coastguard Worker
866*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_round_ss(<4 x float> %a0, <4 x float> %a1) {
867*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_round_ss:
868*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
869*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    roundss $4, %xmm1, %xmm0
870*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
871*9880d681SAndroid Build Coastguard Worker;
872*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_round_ss:
873*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
874*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    roundss $4, %xmm1, %xmm0
875*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
876*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %a0, <4 x float> %a1, i32 4)
877*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
878*9880d681SAndroid Build Coastguard Worker}
879*9880d681SAndroid Build Coastguard Worker
880*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_stream_load_si128(<2 x i64>* %a0) {
881*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_stream_load_si128:
882*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
883*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
884*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movntdqa (%eax), %xmm0
885*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
886*9880d681SAndroid Build Coastguard Worker;
887*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_stream_load_si128:
888*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
889*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movntdqa (%rdi), %xmm0
890*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
891*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64>* %a0 to i8*
892*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.sse41.movntdqa(i8* %arg0)
893*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
894*9880d681SAndroid Build Coastguard Worker}
895*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse41.movntdqa(i8*) nounwind readnone
896*9880d681SAndroid Build Coastguard Worker
897*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_test_all_ones(<2 x i64> %a0) {
898*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_test_all_ones:
899*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
900*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpeqd %xmm1, %xmm1
901*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ptest %xmm1, %xmm0
902*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sbbl %eax, %eax
903*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $1, %eax
904*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
905*9880d681SAndroid Build Coastguard Worker;
906*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_test_all_ones:
907*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
908*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpeqd %xmm1, %xmm1
909*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ptest %xmm1, %xmm0
910*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sbbl %eax, %eax
911*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $1, %eax
912*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
913*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse41.ptestc(<2 x i64> %a0, <2 x i64> <i64 -1, i64 -1>)
914*9880d681SAndroid Build Coastguard Worker  ret i32 %res
915*9880d681SAndroid Build Coastguard Worker}
916*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse41.ptestc(<2 x i64>, <2 x i64>) nounwind readnone
917*9880d681SAndroid Build Coastguard Worker
918*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_test_all_zeros(<2 x i64> %a0, <2 x i64> %a1) {
919*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_test_all_zeros:
920*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
921*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
922*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ptest %xmm1, %xmm0
923*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sete %al
924*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
925*9880d681SAndroid Build Coastguard Worker;
926*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_test_all_zeros:
927*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
928*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
929*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ptest %xmm1, %xmm0
930*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sete %al
931*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
932*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse41.ptestz(<2 x i64> %a0, <2 x i64> %a1)
933*9880d681SAndroid Build Coastguard Worker  ret i32 %res
934*9880d681SAndroid Build Coastguard Worker}
935*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse41.ptestz(<2 x i64>, <2 x i64>) nounwind readnone
936*9880d681SAndroid Build Coastguard Worker
937*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_test_mix_ones_zeros(<2 x i64> %a0, <2 x i64> %a1) {
938*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_test_mix_ones_zeros:
939*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
940*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
941*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ptest %xmm1, %xmm0
942*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seta %al
943*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
944*9880d681SAndroid Build Coastguard Worker;
945*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_test_mix_ones_zeros:
946*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
947*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
948*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ptest %xmm1, %xmm0
949*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seta %al
950*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
951*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse41.ptestnzc(<2 x i64> %a0, <2 x i64> %a1)
952*9880d681SAndroid Build Coastguard Worker  ret i32 %res
953*9880d681SAndroid Build Coastguard Worker}
954*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse41.ptestnzc(<2 x i64>, <2 x i64>) nounwind readnone
955*9880d681SAndroid Build Coastguard Worker
956*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_testc_si128(<2 x i64> %a0, <2 x i64> %a1) {
957*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_testc_si128:
958*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
959*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ptest %xmm1, %xmm0
960*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sbbl %eax, %eax
961*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $1, %eax
962*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
963*9880d681SAndroid Build Coastguard Worker;
964*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_testc_si128:
965*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
966*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ptest %xmm1, %xmm0
967*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sbbl %eax, %eax
968*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $1, %eax
969*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
970*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse41.ptestc(<2 x i64> %a0, <2 x i64> %a1)
971*9880d681SAndroid Build Coastguard Worker  ret i32 %res
972*9880d681SAndroid Build Coastguard Worker}
973*9880d681SAndroid Build Coastguard Worker
974*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_testnzc_si128(<2 x i64> %a0, <2 x i64> %a1) {
975*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_testnzc_si128:
976*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
977*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
978*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ptest %xmm1, %xmm0
979*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seta %al
980*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
981*9880d681SAndroid Build Coastguard Worker;
982*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_testnzc_si128:
983*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
984*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
985*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ptest %xmm1, %xmm0
986*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seta %al
987*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
988*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse41.ptestnzc(<2 x i64> %a0, <2 x i64> %a1)
989*9880d681SAndroid Build Coastguard Worker  ret i32 %res
990*9880d681SAndroid Build Coastguard Worker}
991*9880d681SAndroid Build Coastguard Worker
992*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_testz_si128(<2 x i64> %a0, <2 x i64> %a1) {
993*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_testz_si128:
994*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
995*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
996*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ptest %xmm1, %xmm0
997*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sete %al
998*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
999*9880d681SAndroid Build Coastguard Worker;
1000*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_testz_si128:
1001*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1002*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
1003*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ptest %xmm1, %xmm0
1004*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sete %al
1005*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1006*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse41.ptestz(<2 x i64> %a0, <2 x i64> %a1)
1007*9880d681SAndroid Build Coastguard Worker  ret i32 %res
1008*9880d681SAndroid Build Coastguard Worker}
1009