xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-lzcnt-128.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE3
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
8*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512cd -mattr=+avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512VLCD
9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512cd | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512CD
10*9880d681SAndroid Build Coastguard Worker;
11*9880d681SAndroid Build Coastguard Worker; Just one 32-bit run to make sure we do reasonable things for i64 lzcnt.
12*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=X32-SSE --check-prefix=X32-SSE41
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @testv2i64(<2 x i64> %in) nounwind {
15*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv2i64:
16*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
17*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %rax
18*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrq %rax, %rax
19*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movl $127, %ecx
20*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmoveq %rcx, %rax
21*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorq $63, %rax
22*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %rax, %xmm1
23*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
24*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %rax
25*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrq %rax, %rax
26*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmoveq %rcx, %rax
27*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorq $63, %rax
28*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %rax, %xmm0
29*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
30*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
31*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
32*9880d681SAndroid Build Coastguard Worker;
33*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv2i64:
34*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
35*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %rax
36*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrq %rax, %rax
37*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movl $127, %ecx
38*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmoveq %rcx, %rax
39*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorq $63, %rax
40*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %rax, %xmm1
41*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
42*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %rax
43*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrq %rax, %rax
44*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmoveq %rcx, %rax
45*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorq $63, %rax
46*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %rax, %xmm0
47*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
48*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm1, %xmm0
49*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
50*9880d681SAndroid Build Coastguard Worker;
51*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv2i64:
52*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
53*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm0, %rax
54*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrq %rax, %rax
55*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movl $127, %ecx
56*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    cmoveq %rcx, %rax
57*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorq $63, %rax
58*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %rax, %xmm1
59*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
60*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm0, %rax
61*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrq %rax, %rax
62*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    cmoveq %rcx, %rax
63*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorq $63, %rax
64*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %rax, %xmm0
65*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
66*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
67*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
68*9880d681SAndroid Build Coastguard Worker;
69*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv2i64:
70*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
71*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pextrq $1, %xmm0, %rax
72*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrq %rax, %rax
73*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movl $127, %ecx
74*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    cmoveq %rcx, %rax
75*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorq $63, %rax
76*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %rax, %xmm1
77*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %xmm0, %rax
78*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrq %rax, %rax
79*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    cmoveq %rcx, %rax
80*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorq $63, %rax
81*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %rax, %xmm0
82*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
83*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
84*9880d681SAndroid Build Coastguard Worker;
85*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv2i64:
86*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
87*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpextrq $1, %xmm0, %rax
88*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrq %rax, %rax
89*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl $127, %ecx
90*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    cmoveq %rcx, %rax
91*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorq $63, %rax
92*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %rax, %xmm1
93*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %xmm0, %rax
94*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrq %rax, %rax
95*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    cmoveq %rcx, %rax
96*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorq $63, %rax
97*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %rax, %xmm0
98*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
99*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
100*9880d681SAndroid Build Coastguard Worker;
101*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: testv2i64:
102*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
103*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vplzcntq %xmm0, %xmm0
104*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
105*9880d681SAndroid Build Coastguard Worker;
106*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv2i64:
107*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
108*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def>
109*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vplzcntq %zmm0, %zmm0
110*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
111*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
112*9880d681SAndroid Build Coastguard Worker;
113*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: testv2i64:
114*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
115*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pushl %esi
116*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $2, %xmm0, %eax
117*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %eax
118*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movl $63, %ecx
119*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovel %ecx, %eax
120*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %eax
121*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    addl $32, %eax
122*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $3, %xmm0, %edx
123*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %edx, %esi
124*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %esi
125*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    testl %edx, %edx
126*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovel %eax, %esi
127*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %esi, %xmm1
128*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %xmm0, %eax
129*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %eax
130*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovel %ecx, %eax
131*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %eax
132*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    addl $32, %eax
133*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $1, %xmm0, %ecx
134*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %ecx, %edx
135*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %edx
136*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    testl %ecx, %ecx
137*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovel %eax, %edx
138*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %edx, %xmm0
139*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
140*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    popl %esi
141*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Worker  %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %in, i1 0)
144*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %out
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @testv2i64u(<2 x i64> %in) nounwind {
148*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv2i64u:
149*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
150*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %rax
151*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrq %rax, %rax
152*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorq $63, %rax
153*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %rax, %xmm1
154*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
155*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %rax
156*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrq %rax, %rax
157*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorq $63, %rax
158*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %rax, %xmm0
159*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
160*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
161*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
162*9880d681SAndroid Build Coastguard Worker;
163*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv2i64u:
164*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
165*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %rax
166*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrq %rax, %rax
167*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorq $63, %rax
168*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %rax, %xmm1
169*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
170*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %rax
171*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrq %rax, %rax
172*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorq $63, %rax
173*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %rax, %xmm0
174*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
175*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm1, %xmm0
176*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
177*9880d681SAndroid Build Coastguard Worker;
178*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv2i64u:
179*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
180*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm0, %rax
181*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrq %rax, %rax
182*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorq $63, %rax
183*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %rax, %xmm1
184*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
185*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm0, %rax
186*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrq %rax, %rax
187*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorq $63, %rax
188*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %rax, %xmm0
189*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
190*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
191*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
192*9880d681SAndroid Build Coastguard Worker;
193*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv2i64u:
194*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
195*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pextrq $1, %xmm0, %rax
196*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrq %rax, %rax
197*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorq $63, %rax
198*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %rax, %xmm1
199*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %xmm0, %rax
200*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrq %rax, %rax
201*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorq $63, %rax
202*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %rax, %xmm0
203*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
204*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
205*9880d681SAndroid Build Coastguard Worker;
206*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv2i64u:
207*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
208*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpextrq $1, %xmm0, %rax
209*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrq %rax, %rax
210*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorq $63, %rax
211*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %rax, %xmm1
212*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %xmm0, %rax
213*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrq %rax, %rax
214*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorq $63, %rax
215*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %rax, %xmm0
216*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
217*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
218*9880d681SAndroid Build Coastguard Worker;
219*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: testv2i64u:
220*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
221*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vplzcntq %xmm0, %xmm0
222*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
223*9880d681SAndroid Build Coastguard Worker;
224*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv2i64u:
225*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
226*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def>
227*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vplzcntq %zmm0, %zmm0
228*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
229*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
230*9880d681SAndroid Build Coastguard Worker;
231*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: testv2i64u:
232*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
233*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $3, %xmm0, %eax
234*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %ecx
235*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %ecx
236*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $2, %xmm0, %edx
237*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %edx, %edx
238*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %edx
239*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    addl $32, %edx
240*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    testl %eax, %eax
241*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovnel %ecx, %edx
242*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %edx, %xmm1
243*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $1, %xmm0, %eax
244*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %ecx
245*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %ecx
246*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %xmm0, %edx
247*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %edx, %edx
248*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %edx
249*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    addl $32, %edx
250*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    testl %eax, %eax
251*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovnel %ecx, %edx
252*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %edx, %xmm0
253*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
254*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Worker  %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %in, i1 -1)
257*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %out
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @testv4i32(<4 x i32> %in) nounwind {
261*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv4i32:
262*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
263*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
264*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm1, %eax
265*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
266*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movl $63, %ecx
267*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %ecx, %eax
268*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $31, %eax
269*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
270*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
271*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm2, %eax
272*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
273*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %ecx, %eax
274*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $31, %eax
275*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
276*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
277*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %eax
278*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
279*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %ecx, %eax
280*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $31, %eax
281*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
282*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
283*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %eax
284*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
285*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %ecx, %eax
286*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $31, %eax
287*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
288*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
289*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
290*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
291*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
292*9880d681SAndroid Build Coastguard Worker;
293*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv4i32:
294*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
295*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
296*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm1, %eax
297*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
298*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movl $63, %ecx
299*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %ecx, %eax
300*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $31, %eax
301*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm1
302*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
303*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm2, %eax
304*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
305*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %ecx, %eax
306*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $31, %eax
307*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm2
308*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
309*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %eax
310*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
311*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %ecx, %eax
312*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $31, %eax
313*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm1
314*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
315*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %eax
316*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
317*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %ecx, %eax
318*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $31, %eax
319*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm0
320*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
321*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
322*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm1, %xmm0
323*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
324*9880d681SAndroid Build Coastguard Worker;
325*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv4i32:
326*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
327*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
328*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm1, %eax
329*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrl %eax, %eax
330*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movl $63, %ecx
331*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    cmovel %ecx, %eax
332*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl $31, %eax
333*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm1
334*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
335*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm2, %eax
336*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrl %eax, %eax
337*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    cmovel %ecx, %eax
338*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl $31, %eax
339*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm2
340*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
341*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm0, %eax
342*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrl %eax, %eax
343*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    cmovel %ecx, %eax
344*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl $31, %eax
345*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm1
346*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
347*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm0, %eax
348*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrl %eax, %eax
349*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    cmovel %ecx, %eax
350*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl $31, %eax
351*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm0
352*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
353*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
354*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
355*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
356*9880d681SAndroid Build Coastguard Worker;
357*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv4i32:
358*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
359*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pextrd $1, %xmm0, %eax
360*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrl %eax, %eax
361*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movl $63, %ecx
362*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    cmovel %ecx, %eax
363*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl $31, %eax
364*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %xmm0, %edx
365*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrl %edx, %edx
366*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    cmovel %ecx, %edx
367*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl $31, %edx
368*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %edx, %xmm1
369*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $1, %eax, %xmm1
370*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pextrd $2, %xmm0, %eax
371*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrl %eax, %eax
372*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    cmovel %ecx, %eax
373*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl $31, %eax
374*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $2, %eax, %xmm1
375*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pextrd $3, %xmm0, %eax
376*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrl %eax, %eax
377*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    cmovel %ecx, %eax
378*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl $31, %eax
379*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $3, %eax, %xmm1
380*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
381*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
382*9880d681SAndroid Build Coastguard Worker;
383*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv4i32:
384*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
385*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpextrd $1, %xmm0, %eax
386*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrl %eax, %eax
387*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl $63, %ecx
388*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    cmovel %ecx, %eax
389*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorl $31, %eax
390*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovd %xmm0, %edx
391*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrl %edx, %edx
392*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    cmovel %ecx, %edx
393*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorl $31, %edx
394*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovd %edx, %xmm1
395*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $1, %eax, %xmm1, %xmm1
396*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpextrd $2, %xmm0, %eax
397*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrl %eax, %eax
398*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    cmovel %ecx, %eax
399*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorl $31, %eax
400*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $2, %eax, %xmm1, %xmm1
401*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpextrd $3, %xmm0, %eax
402*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrl %eax, %eax
403*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    cmovel %ecx, %eax
404*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorl $31, %eax
405*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $3, %eax, %xmm1, %xmm0
406*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
407*9880d681SAndroid Build Coastguard Worker;
408*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: testv4i32:
409*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
410*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vplzcntd %xmm0, %xmm0
411*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
412*9880d681SAndroid Build Coastguard Worker;
413*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv4i32:
414*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
415*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def>
416*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0
417*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
418*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
419*9880d681SAndroid Build Coastguard Worker;
420*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: testv4i32:
421*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
422*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $1, %xmm0, %eax
423*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %eax
424*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movl $63, %ecx
425*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovel %ecx, %eax
426*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %eax
427*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %xmm0, %edx
428*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %edx, %edx
429*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovel %ecx, %edx
430*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %edx
431*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %edx, %xmm1
432*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pinsrd $1, %eax, %xmm1
433*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $2, %xmm0, %eax
434*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %eax
435*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovel %ecx, %eax
436*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %eax
437*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pinsrd $2, %eax, %xmm1
438*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $3, %xmm0, %eax
439*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %eax
440*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cmovel %ecx, %eax
441*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %eax
442*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pinsrd $3, %eax, %xmm1
443*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm0
444*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
445*9880d681SAndroid Build Coastguard Worker
446*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %in, i1 0)
447*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %out
448*9880d681SAndroid Build Coastguard Worker}
449*9880d681SAndroid Build Coastguard Worker
450*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @testv4i32u(<4 x i32> %in) nounwind {
451*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv4i32u:
452*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
453*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
454*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm1, %eax
455*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
456*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $31, %eax
457*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
458*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
459*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm2, %eax
460*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
461*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $31, %eax
462*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
463*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
464*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %eax
465*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
466*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $31, %eax
467*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
468*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
469*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %eax
470*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
471*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $31, %eax
472*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
473*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
474*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
475*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
476*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
477*9880d681SAndroid Build Coastguard Worker;
478*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv4i32u:
479*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
480*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
481*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm1, %eax
482*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
483*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $31, %eax
484*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm1
485*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
486*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm2, %eax
487*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
488*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $31, %eax
489*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm2
490*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
491*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %eax
492*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
493*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $31, %eax
494*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm1
495*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
496*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %eax
497*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
498*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $31, %eax
499*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm0
500*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
501*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
502*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm1, %xmm0
503*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
504*9880d681SAndroid Build Coastguard Worker;
505*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv4i32u:
506*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
507*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
508*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm1, %eax
509*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrl %eax, %eax
510*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl $31, %eax
511*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm1
512*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
513*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm2, %eax
514*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrl %eax, %eax
515*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl $31, %eax
516*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm2
517*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
518*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm0, %eax
519*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrl %eax, %eax
520*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl $31, %eax
521*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm1
522*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
523*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %xmm0, %eax
524*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    bsrl %eax, %eax
525*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl $31, %eax
526*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm0
527*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
528*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
529*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
530*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
531*9880d681SAndroid Build Coastguard Worker;
532*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv4i32u:
533*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
534*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pextrd $1, %xmm0, %eax
535*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrl %eax, %eax
536*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl $31, %eax
537*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %xmm0, %ecx
538*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrl %ecx, %ecx
539*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl $31, %ecx
540*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %ecx, %xmm1
541*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $1, %eax, %xmm1
542*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pextrd $2, %xmm0, %eax
543*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrl %eax, %eax
544*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl $31, %eax
545*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $2, %eax, %xmm1
546*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pextrd $3, %xmm0, %eax
547*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    bsrl %eax, %eax
548*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl $31, %eax
549*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $3, %eax, %xmm1
550*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
551*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
552*9880d681SAndroid Build Coastguard Worker;
553*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv4i32u:
554*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
555*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpextrd $1, %xmm0, %eax
556*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrl %eax, %eax
557*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorl $31, %eax
558*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovd %xmm0, %ecx
559*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrl %ecx, %ecx
560*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorl $31, %ecx
561*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovd %ecx, %xmm1
562*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $1, %eax, %xmm1, %xmm1
563*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpextrd $2, %xmm0, %eax
564*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrl %eax, %eax
565*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorl $31, %eax
566*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $2, %eax, %xmm1, %xmm1
567*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpextrd $3, %xmm0, %eax
568*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    bsrl %eax, %eax
569*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorl $31, %eax
570*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $3, %eax, %xmm1, %xmm0
571*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
572*9880d681SAndroid Build Coastguard Worker;
573*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: testv4i32u:
574*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
575*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vplzcntd %xmm0, %xmm0
576*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
577*9880d681SAndroid Build Coastguard Worker;
578*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv4i32u:
579*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
580*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def>
581*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0
582*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
583*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
584*9880d681SAndroid Build Coastguard Worker;
585*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: testv4i32u:
586*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
587*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $1, %xmm0, %eax
588*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %eax
589*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %eax
590*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %xmm0, %ecx
591*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %ecx, %ecx
592*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %ecx
593*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %ecx, %xmm1
594*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pinsrd $1, %eax, %xmm1
595*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $2, %xmm0, %eax
596*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %eax
597*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %eax
598*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pinsrd $2, %eax, %xmm1
599*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pextrd $3, %xmm0, %eax
600*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    bsrl %eax, %eax
601*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorl $31, %eax
602*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pinsrd $3, %eax, %xmm1
603*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm0
604*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
605*9880d681SAndroid Build Coastguard Worker
606*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %in, i1 -1)
607*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %out
608*9880d681SAndroid Build Coastguard Worker}
609*9880d681SAndroid Build Coastguard Worker
610*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @testv8i16(<8 x i16> %in) nounwind {
611*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv8i16:
612*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
613*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $7, %xmm0, %eax
614*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %ax, %cx
615*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movw $31, %ax
616*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovew %ax, %cx
617*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %ecx
618*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm1
619*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
620*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %cx, %cx
621*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovew %ax, %cx
622*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %ecx
623*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm2
624*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
625*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
626*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %cx, %cx
627*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovew %ax, %cx
628*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %ecx
629*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm3
630*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
631*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %cx, %cx
632*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovew %ax, %cx
633*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %ecx
634*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm1
635*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
636*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
637*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
638*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %cx, %cx
639*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovew %ax, %cx
640*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %ecx
641*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm2
642*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
643*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %cx, %cx
644*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovew %ax, %cx
645*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %ecx
646*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm3
647*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
648*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
649*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %cx, %cx
650*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovew %ax, %cx
651*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %ecx
652*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm2
653*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %ecx
654*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %cx, %cx
655*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovew %ax, %cx
656*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %ecx
657*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm0
658*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
659*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
660*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
661*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
662*9880d681SAndroid Build Coastguard Worker;
663*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv8i16:
664*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
665*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $7, %xmm0, %eax
666*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %ax, %cx
667*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movw $31, %ax
668*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovew %ax, %cx
669*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %ecx
670*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm1
671*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $3, %xmm0, %ecx
672*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %cx, %cx
673*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovew %ax, %cx
674*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %ecx
675*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm2
676*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
677*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $5, %xmm0, %ecx
678*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %cx, %cx
679*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovew %ax, %cx
680*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %ecx
681*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm3
682*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $1, %xmm0, %ecx
683*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %cx, %cx
684*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovew %ax, %cx
685*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %ecx
686*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm1
687*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
688*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
689*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $6, %xmm0, %ecx
690*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %cx, %cx
691*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovew %ax, %cx
692*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %ecx
693*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm2
694*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $2, %xmm0, %ecx
695*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %cx, %cx
696*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovew %ax, %cx
697*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %ecx
698*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm3
699*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
700*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $4, %xmm0, %ecx
701*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %cx, %cx
702*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovew %ax, %cx
703*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %ecx
704*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm2
705*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %ecx
706*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %cx, %cx
707*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovew %ax, %cx
708*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %ecx
709*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm0
710*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
711*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
712*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
713*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
714*9880d681SAndroid Build Coastguard Worker;
715*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv8i16:
716*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
717*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
718*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm1
719*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm1
720*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
721*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm4
722*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm4
723*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm1
724*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
725*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm1
726*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pxor %xmm2, %xmm2
727*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm3
728*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pcmpeqb %xmm2, %xmm1
729*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm4, %xmm1
730*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddb %xmm3, %xmm1
731*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pcmpeqb %xmm2, %xmm0
732*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $8, %xmm0
733*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm0
734*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $8, %xmm1
735*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddw %xmm0, %xmm1
736*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
737*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
738*9880d681SAndroid Build Coastguard Worker;
739*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv8i16:
740*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
741*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
742*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
743*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm1
744*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
745*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
746*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm1, %xmm4
747*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
748*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $4, %xmm1
749*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm1
750*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
751*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm1, %xmm3
752*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pcmpeqb %xmm2, %xmm1
753*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm4, %xmm1
754*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm3, %xmm1
755*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pcmpeqb %xmm2, %xmm0
756*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm0
757*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm1, %xmm0
758*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm1
759*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm1
760*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
761*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
762*9880d681SAndroid Build Coastguard Worker;
763*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv8i16:
764*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
765*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
766*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
767*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
768*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
769*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm4
770*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm4, %xmm1
771*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm4, %xmm4, %xmm4
772*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpcmpeqb %xmm4, %xmm1, %xmm5
773*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm5, %xmm2, %xmm2
774*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm1, %xmm3, %xmm1
775*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm1, %xmm2, %xmm1
776*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm0
777*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm0
778*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm0, %xmm1, %xmm0
779*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $8, %xmm1, %xmm1
780*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm0, %xmm1, %xmm0
781*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
782*9880d681SAndroid Build Coastguard Worker;
783*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: testv8i16:
784*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
785*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
786*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vplzcntd %ymm0, %ymm0
787*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vpmovdw %ymm0, %xmm0
788*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vpsubw {{.*}}(%rip), %xmm0, %xmm0
789*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
790*9880d681SAndroid Build Coastguard Worker;
791*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv8i16:
792*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
793*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
794*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0
795*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpmovdw %zmm0, %ymm0
796*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubw {{.*}}(%rip), %xmm0, %xmm0
797*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
798*9880d681SAndroid Build Coastguard Worker;
799*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: testv8i16:
800*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
801*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
802*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
803*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm1
804*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
805*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm4
806*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufb %xmm1, %xmm4
807*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
808*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $4, %xmm1
809*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm1
810*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm2, %xmm2
811*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufb %xmm1, %xmm3
812*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpeqb %xmm2, %xmm1
813*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm1
814*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm3, %xmm1
815*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpeqb %xmm2, %xmm0
816*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm0
817*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm1, %xmm0
818*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm1
819*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm0, %xmm1
820*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm0
821*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
822*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %in, i1 0)
823*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %out
824*9880d681SAndroid Build Coastguard Worker}
825*9880d681SAndroid Build Coastguard Worker
826*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @testv8i16u(<8 x i16> %in) nounwind {
827*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv8i16u:
828*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
829*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $7, %xmm0, %eax
830*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %ax, %ax
831*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %eax
832*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
833*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $3, %xmm0, %eax
834*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %ax, %ax
835*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %eax
836*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
837*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
838*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $5, %xmm0, %eax
839*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %ax, %ax
840*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %eax
841*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm3
842*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $1, %xmm0, %eax
843*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %ax, %ax
844*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %eax
845*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
846*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
847*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
848*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $6, %xmm0, %eax
849*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %ax, %ax
850*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %eax
851*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
852*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $2, %xmm0, %eax
853*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %ax, %ax
854*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %eax
855*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm3
856*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
857*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pextrw $4, %xmm0, %eax
858*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %ax, %ax
859*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %eax
860*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
861*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm0, %eax
862*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrw %ax, %ax
863*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $15, %eax
864*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
865*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
866*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
867*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
868*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
869*9880d681SAndroid Build Coastguard Worker;
870*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv8i16u:
871*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
872*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $7, %xmm0, %eax
873*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %ax, %ax
874*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %eax
875*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm1
876*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $3, %xmm0, %eax
877*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %ax, %ax
878*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %eax
879*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm2
880*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
881*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $5, %xmm0, %eax
882*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %ax, %ax
883*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %eax
884*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm3
885*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $1, %xmm0, %eax
886*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %ax, %ax
887*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %eax
888*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm1
889*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
890*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
891*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $6, %xmm0, %eax
892*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %ax, %ax
893*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %eax
894*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm2
895*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $2, %xmm0, %eax
896*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %ax, %ax
897*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %eax
898*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm3
899*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
900*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pextrw $4, %xmm0, %eax
901*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %ax, %ax
902*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %eax
903*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm2
904*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %xmm0, %eax
905*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrw %ax, %ax
906*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $15, %eax
907*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm0
908*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
909*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
910*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
911*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
912*9880d681SAndroid Build Coastguard Worker;
913*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv8i16u:
914*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
915*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
916*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm1
917*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm1
918*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
919*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm4
920*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm4
921*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm1
922*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
923*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm1
924*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pxor %xmm2, %xmm2
925*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm3
926*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pcmpeqb %xmm2, %xmm1
927*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm4, %xmm1
928*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddb %xmm3, %xmm1
929*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pcmpeqb %xmm2, %xmm0
930*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $8, %xmm0
931*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm0
932*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $8, %xmm1
933*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddw %xmm0, %xmm1
934*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
935*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
936*9880d681SAndroid Build Coastguard Worker;
937*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv8i16u:
938*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
939*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
940*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
941*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm1
942*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
943*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
944*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm1, %xmm4
945*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
946*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $4, %xmm1
947*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm1
948*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
949*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm1, %xmm3
950*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pcmpeqb %xmm2, %xmm1
951*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm4, %xmm1
952*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm3, %xmm1
953*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pcmpeqb %xmm2, %xmm0
954*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm0
955*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm1, %xmm0
956*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm1
957*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm1
958*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
959*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
960*9880d681SAndroid Build Coastguard Worker;
961*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv8i16u:
962*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
963*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
964*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
965*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
966*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
967*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm4
968*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm4, %xmm1
969*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm4, %xmm4, %xmm4
970*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpcmpeqb %xmm4, %xmm1, %xmm5
971*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm5, %xmm2, %xmm2
972*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm1, %xmm3, %xmm1
973*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm1, %xmm2, %xmm1
974*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm0
975*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm0
976*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm0, %xmm1, %xmm0
977*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $8, %xmm1, %xmm1
978*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm0, %xmm1, %xmm0
979*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
980*9880d681SAndroid Build Coastguard Worker;
981*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: testv8i16u:
982*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
983*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
984*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vplzcntd %ymm0, %ymm0
985*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vpmovdw %ymm0, %xmm0
986*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vpsubw {{.*}}(%rip), %xmm0, %xmm0
987*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
988*9880d681SAndroid Build Coastguard Worker;
989*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv8i16u:
990*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
991*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
992*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0
993*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpmovdw %zmm0, %ymm0
994*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubw {{.*}}(%rip), %xmm0, %xmm0
995*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
996*9880d681SAndroid Build Coastguard Worker;
997*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: testv8i16u:
998*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
999*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1000*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
1001*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm1
1002*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1003*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm4
1004*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufb %xmm1, %xmm4
1005*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
1006*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $4, %xmm1
1007*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm1
1008*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm2, %xmm2
1009*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufb %xmm1, %xmm3
1010*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpeqb %xmm2, %xmm1
1011*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm1
1012*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm3, %xmm1
1013*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpeqb %xmm2, %xmm0
1014*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm0
1015*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm1, %xmm0
1016*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm1
1017*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm0, %xmm1
1018*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm0
1019*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1020*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %in, i1 -1)
1021*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %out
1022*9880d681SAndroid Build Coastguard Worker}
1023*9880d681SAndroid Build Coastguard Worker
1024*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @testv16i8(<16 x i8> %in) nounwind {
1025*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv16i8:
1026*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1027*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pushq %rbp
1028*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pushq %rbx
1029*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1030*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1031*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %ecx
1032*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movl $15, %eax
1033*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1034*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1035*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm0
1036*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx
1037*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edi
1038*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r9d
1039*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1040*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r11d
1041*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
1042*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r8d
1043*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1044*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %ecx, %ecx
1045*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1046*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1047*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm1
1048*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1049*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %edx, %ecx
1050*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1051*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1052*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm2
1053*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1054*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1055*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r10d
1056*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebp
1057*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %ebp, %ebp
1058*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ebp
1059*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ebp
1060*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ebp, %xmm0
1061*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1062*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1063*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %edi, %edi
1064*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %edi
1065*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %edi
1066*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %edi, %xmm1
1067*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %ecx, %ecx
1068*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1069*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1070*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm2
1071*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1072*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %esi, %ecx
1073*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1074*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1075*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm3
1076*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
1077*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1078*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %ecx, %ecx
1079*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1080*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1081*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm1
1082*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1083*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1084*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1085*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %ebx, %ecx
1086*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1087*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1088*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm0
1089*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %edx, %ecx
1090*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1091*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1092*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm3
1093*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1094*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %r11d, %ecx
1095*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1096*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1097*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm0
1098*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %esi, %ecx
1099*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1100*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1101*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm2
1102*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1103*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
1104*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %r9d, %ecx
1105*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1106*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1107*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm0
1108*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %r10d, %ecx
1109*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1110*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1111*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm3
1112*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1113*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %r8d, %ecx
1114*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1115*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1116*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm4
1117*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1118*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %ecx, %ecx
1119*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cmovel %eax, %ecx
1120*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1121*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm0
1122*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1123*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1124*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1125*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1126*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    popq %rbx
1127*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    popq %rbp
1128*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1129*9880d681SAndroid Build Coastguard Worker;
1130*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv16i8:
1131*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
1132*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pushq %rbp
1133*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pushq %rbx
1134*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1135*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1136*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %ecx
1137*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movl $15, %eax
1138*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1139*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1140*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm0
1141*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx
1142*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edi
1143*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r9d
1144*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1145*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r11d
1146*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
1147*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r8d
1148*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1149*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %ecx, %ecx
1150*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1151*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1152*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm1
1153*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1154*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %edx, %ecx
1155*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1156*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1157*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm2
1158*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1159*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1160*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r10d
1161*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebp
1162*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %ebp, %ebp
1163*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ebp
1164*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ebp
1165*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ebp, %xmm0
1166*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1167*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1168*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %edi, %edi
1169*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %edi
1170*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %edi
1171*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %edi, %xmm1
1172*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %ecx, %ecx
1173*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1174*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1175*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm2
1176*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1177*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %esi, %ecx
1178*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1179*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1180*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm3
1181*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
1182*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1183*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %ecx, %ecx
1184*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1185*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1186*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm1
1187*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1188*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1189*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1190*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %ebx, %ecx
1191*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1192*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1193*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm0
1194*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %edx, %ecx
1195*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1196*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1197*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm3
1198*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1199*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %r11d, %ecx
1200*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1201*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1202*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm0
1203*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %esi, %ecx
1204*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1205*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1206*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm2
1207*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1208*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
1209*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %r9d, %ecx
1210*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1211*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1212*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm0
1213*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %r10d, %ecx
1214*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1215*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1216*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm3
1217*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1218*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %r8d, %ecx
1219*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1220*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1221*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm4
1222*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1223*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %ecx, %ecx
1224*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    cmovel %eax, %ecx
1225*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1226*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm0
1227*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1228*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1229*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1230*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1231*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    popq %rbx
1232*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    popq %rbp
1233*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
1234*9880d681SAndroid Build Coastguard Worker;
1235*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv16i8:
1236*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1237*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1238*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm3
1239*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm3
1240*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1241*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm4
1242*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm4
1243*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
1244*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm0
1245*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pxor %xmm2, %xmm2
1246*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pcmpeqb %xmm0, %xmm2
1247*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm4, %xmm2
1248*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm1
1249*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddb %xmm2, %xmm1
1250*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1251*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1252*9880d681SAndroid Build Coastguard Worker;
1253*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv16i8:
1254*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1255*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1256*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm3
1257*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm3
1258*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1259*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm4
1260*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm3, %xmm4
1261*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $4, %xmm0
1262*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm0
1263*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
1264*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pcmpeqb %xmm0, %xmm2
1265*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm4, %xmm2
1266*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm0, %xmm1
1267*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm2, %xmm1
1268*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
1269*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1270*9880d681SAndroid Build Coastguard Worker;
1271*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv16i8:
1272*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1273*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1274*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
1275*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1276*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1277*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
1278*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
1279*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1280*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm1
1281*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm2, %xmm1
1282*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1283*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1284*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1285*9880d681SAndroid Build Coastguard Worker;
1286*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: testv16i8:
1287*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1288*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1289*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vplzcntd %zmm0, %zmm0
1290*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
1291*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubb {{.*}}(%rip), %xmm0, %xmm0
1292*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1293*9880d681SAndroid Build Coastguard Worker;
1294*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: testv16i8:
1295*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1296*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1297*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm3
1298*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm3
1299*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1300*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm4
1301*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufb %xmm3, %xmm4
1302*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $4, %xmm0
1303*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
1304*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm2, %xmm2
1305*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpeqb %xmm0, %xmm2
1306*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm2
1307*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufb %xmm0, %xmm1
1308*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm2, %xmm1
1309*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm0
1310*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1311*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %in, i1 0)
1312*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %out
1313*9880d681SAndroid Build Coastguard Worker}
1314*9880d681SAndroid Build Coastguard Worker
1315*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @testv16i8u(<16 x i8> %in) nounwind {
1316*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: testv16i8u:
1317*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1318*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pushq %rbx
1319*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1320*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1321*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
1322*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %eax
1323*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
1324*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edi
1325*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1326*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r9d
1327*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1328*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r10d
1329*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1330*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r8d
1331*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
1332*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %esi, %esi
1333*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %esi
1334*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %esi, %xmm1
1335*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1336*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
1337*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %eax
1338*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
1339*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1340*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
1341*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r11d
1342*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx
1343*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %ebx, %ebx
1344*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ebx
1345*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ebx, %xmm2
1346*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1347*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1348*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %edx, %edx
1349*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %edx
1350*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %edx, %xmm0
1351*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %esi, %edx
1352*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %edx
1353*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %edx, %xmm3
1354*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1355*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %ecx, %ecx
1356*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %ecx
1357*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm0
1358*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1359*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1360*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %edx, %edx
1361*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %edx
1362*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %edx, %xmm1
1363*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1364*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1365*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1366*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %edi, %edx
1367*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %edx
1368*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %edx, %xmm0
1369*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
1370*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %eax
1371*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
1372*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1373*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %r10d, %eax
1374*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %eax
1375*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
1376*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %ecx, %eax
1377*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %eax
1378*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm3
1379*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1380*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
1381*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %r9d, %eax
1382*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %eax
1383*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
1384*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %r11d, %eax
1385*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %eax
1386*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
1387*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1388*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %r8d, %eax
1389*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %eax
1390*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm4
1391*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1392*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    bsrl %eax, %eax
1393*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl $7, %eax
1394*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
1395*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1396*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1397*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1398*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1399*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    popq %rbx
1400*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1401*9880d681SAndroid Build Coastguard Worker;
1402*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: testv16i8u:
1403*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
1404*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pushq %rbx
1405*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1406*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1407*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
1408*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %eax
1409*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm0
1410*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edi
1411*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1412*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r9d
1413*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1414*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r10d
1415*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1416*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r8d
1417*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
1418*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %esi, %esi
1419*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %esi
1420*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %esi, %xmm1
1421*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1422*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
1423*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %eax
1424*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm0
1425*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1426*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi
1427*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r11d
1428*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx
1429*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %ebx, %ebx
1430*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ebx
1431*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ebx, %xmm2
1432*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1433*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1434*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %edx, %edx
1435*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %edx
1436*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %edx, %xmm0
1437*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %esi, %edx
1438*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %edx
1439*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %edx, %xmm3
1440*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1441*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %ecx, %ecx
1442*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %ecx
1443*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %ecx, %xmm0
1444*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
1445*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx
1446*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %edx, %edx
1447*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %edx
1448*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %edx, %xmm1
1449*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1450*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1451*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1452*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %edi, %edx
1453*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %edx
1454*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %edx, %xmm0
1455*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
1456*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %eax
1457*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm2
1458*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1459*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %r10d, %eax
1460*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %eax
1461*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm0
1462*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %ecx, %eax
1463*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %eax
1464*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm3
1465*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1466*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
1467*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %r9d, %eax
1468*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %eax
1469*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm0
1470*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %r11d, %eax
1471*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %eax
1472*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm2
1473*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1474*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %r8d, %eax
1475*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %eax
1476*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm4
1477*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
1478*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    bsrl %eax, %eax
1479*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl $7, %eax
1480*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm0
1481*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1482*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1483*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1484*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1485*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    popq %rbx
1486*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
1487*9880d681SAndroid Build Coastguard Worker;
1488*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: testv16i8u:
1489*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1490*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1491*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm3
1492*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm3
1493*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1494*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm4
1495*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm4
1496*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
1497*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm2, %xmm0
1498*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pxor %xmm2, %xmm2
1499*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pcmpeqb %xmm0, %xmm2
1500*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm4, %xmm2
1501*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm1
1502*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    paddb %xmm2, %xmm1
1503*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1504*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1505*9880d681SAndroid Build Coastguard Worker;
1506*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: testv16i8u:
1507*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1508*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1509*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm3
1510*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm3
1511*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1512*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm4
1513*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm3, %xmm4
1514*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $4, %xmm0
1515*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm2, %xmm0
1516*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
1517*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pcmpeqb %xmm0, %xmm2
1518*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand %xmm4, %xmm2
1519*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm0, %xmm1
1520*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm2, %xmm1
1521*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
1522*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1523*9880d681SAndroid Build Coastguard Worker;
1524*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: testv16i8u:
1525*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1526*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1527*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
1528*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1529*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1530*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
1531*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
1532*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1533*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm1
1534*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm2, %xmm1
1535*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1536*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1537*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1538*9880d681SAndroid Build Coastguard Worker;
1539*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: testv16i8u:
1540*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1541*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1542*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vplzcntd %zmm0, %zmm0
1543*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
1544*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubb {{.*}}(%rip), %xmm0, %xmm0
1545*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1546*9880d681SAndroid Build Coastguard Worker;
1547*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: testv16i8u:
1548*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1549*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1550*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm3
1551*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm3
1552*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1553*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm4
1554*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufb %xmm3, %xmm4
1555*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $4, %xmm0
1556*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
1557*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm2, %xmm2
1558*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpeqb %xmm0, %xmm2
1559*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm2
1560*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufb %xmm0, %xmm1
1561*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm2, %xmm1
1562*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm0
1563*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1564*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %in, i1 -1)
1565*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %out
1566*9880d681SAndroid Build Coastguard Worker}
1567*9880d681SAndroid Build Coastguard Worker
1568*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @foldv2i64() nounwind {
1569*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv2i64:
1570*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1571*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $55, %eax
1572*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm0
1573*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1574*9880d681SAndroid Build Coastguard Worker;
1575*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv2i64:
1576*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1577*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl $55, %eax
1578*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %rax, %xmm0
1579*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1580*9880d681SAndroid Build Coastguard Worker;
1581*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: foldv2i64:
1582*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1583*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl $55, %eax
1584*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rax, %xmm0
1585*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1586*9880d681SAndroid Build Coastguard Worker;
1587*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: foldv2i64:
1588*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1589*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movl $55, %eax
1590*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %eax, %xmm0
1591*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1592*9880d681SAndroid Build Coastguard Worker  %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> <i64 256, i64 -1>, i1 0)
1593*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %out
1594*9880d681SAndroid Build Coastguard Worker}
1595*9880d681SAndroid Build Coastguard Worker
1596*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @foldv2i64u() nounwind {
1597*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv2i64u:
1598*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1599*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $55, %eax
1600*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm0
1601*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1602*9880d681SAndroid Build Coastguard Worker;
1603*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv2i64u:
1604*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1605*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl $55, %eax
1606*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq %rax, %xmm0
1607*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1608*9880d681SAndroid Build Coastguard Worker;
1609*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: foldv2i64u:
1610*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1611*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movl $55, %eax
1612*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovq %rax, %xmm0
1613*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1614*9880d681SAndroid Build Coastguard Worker;
1615*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: foldv2i64u:
1616*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1617*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movl $55, %eax
1618*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %eax, %xmm0
1619*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1620*9880d681SAndroid Build Coastguard Worker  %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> <i64 256, i64 -1>, i1 -1)
1621*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %out
1622*9880d681SAndroid Build Coastguard Worker}
1623*9880d681SAndroid Build Coastguard Worker
1624*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @foldv4i32() nounwind {
1625*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv4i32:
1626*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1627*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [23,0,32,24]
1628*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1629*9880d681SAndroid Build Coastguard Worker;
1630*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv4i32:
1631*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1632*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [23,0,32,24]
1633*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1634*9880d681SAndroid Build Coastguard Worker;
1635*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: foldv4i32:
1636*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
1637*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vmovdqa32 {{.*#+}} xmm0 = [23,0,32,24]
1638*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
1639*9880d681SAndroid Build Coastguard Worker;
1640*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv4i32:
1641*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
1642*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} xmm0 = [23,0,32,24]
1643*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
1644*9880d681SAndroid Build Coastguard Worker;
1645*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: foldv4i32:
1646*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1647*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movaps {{.*#+}} xmm0 = [23,0,32,24]
1648*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1649*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> <i32 256, i32 -1, i32 0, i32 255>, i1 0)
1650*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %out
1651*9880d681SAndroid Build Coastguard Worker}
1652*9880d681SAndroid Build Coastguard Worker
1653*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @foldv4i32u() nounwind {
1654*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv4i32u:
1655*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1656*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [23,0,32,24]
1657*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1658*9880d681SAndroid Build Coastguard Worker;
1659*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv4i32u:
1660*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1661*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [23,0,32,24]
1662*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1663*9880d681SAndroid Build Coastguard Worker;
1664*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: foldv4i32u:
1665*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
1666*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vmovdqa32 {{.*#+}} xmm0 = [23,0,32,24]
1667*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
1668*9880d681SAndroid Build Coastguard Worker;
1669*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv4i32u:
1670*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
1671*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} xmm0 = [23,0,32,24]
1672*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
1673*9880d681SAndroid Build Coastguard Worker;
1674*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: foldv4i32u:
1675*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1676*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movaps {{.*#+}} xmm0 = [23,0,32,24]
1677*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1678*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> <i32 256, i32 -1, i32 0, i32 255>, i1 -1)
1679*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %out
1680*9880d681SAndroid Build Coastguard Worker}
1681*9880d681SAndroid Build Coastguard Worker
1682*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @foldv8i16() nounwind {
1683*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv8i16:
1684*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1685*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1686*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1687*9880d681SAndroid Build Coastguard Worker;
1688*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv8i16:
1689*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1690*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1691*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1692*9880d681SAndroid Build Coastguard Worker;
1693*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: foldv8i16:
1694*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
1695*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vmovdqa64 {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1696*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
1697*9880d681SAndroid Build Coastguard Worker;
1698*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv8i16:
1699*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
1700*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1701*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
1702*9880d681SAndroid Build Coastguard Worker;
1703*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: foldv8i16:
1704*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1705*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1706*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1707*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88>, i1 0)
1708*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %out
1709*9880d681SAndroid Build Coastguard Worker}
1710*9880d681SAndroid Build Coastguard Worker
1711*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @foldv8i16u() nounwind {
1712*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv8i16u:
1713*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1714*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1715*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1716*9880d681SAndroid Build Coastguard Worker;
1717*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv8i16u:
1718*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1719*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1720*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1721*9880d681SAndroid Build Coastguard Worker;
1722*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: foldv8i16u:
1723*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
1724*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vmovdqa64 {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1725*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
1726*9880d681SAndroid Build Coastguard Worker;
1727*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv8i16u:
1728*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
1729*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1730*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
1731*9880d681SAndroid Build Coastguard Worker;
1732*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: foldv8i16u:
1733*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1734*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]
1735*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1736*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88>, i1 -1)
1737*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %out
1738*9880d681SAndroid Build Coastguard Worker}
1739*9880d681SAndroid Build Coastguard Worker
1740*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @foldv16i8() nounwind {
1741*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv16i8:
1742*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1743*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1744*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1745*9880d681SAndroid Build Coastguard Worker;
1746*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv16i8:
1747*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1748*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1749*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1750*9880d681SAndroid Build Coastguard Worker;
1751*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: foldv16i8:
1752*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
1753*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vmovdqa64 {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1754*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
1755*9880d681SAndroid Build Coastguard Worker;
1756*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv16i8:
1757*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
1758*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1759*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
1760*9880d681SAndroid Build Coastguard Worker;
1761*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: foldv16i8:
1762*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1763*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1764*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1765*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32>, i1 0)
1766*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %out
1767*9880d681SAndroid Build Coastguard Worker}
1768*9880d681SAndroid Build Coastguard Worker
1769*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @foldv16i8u() nounwind {
1770*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: foldv16i8u:
1771*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1772*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1773*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1774*9880d681SAndroid Build Coastguard Worker;
1775*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: foldv16i8u:
1776*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1777*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1778*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1779*9880d681SAndroid Build Coastguard Worker;
1780*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-LABEL: foldv16i8u:
1781*9880d681SAndroid Build Coastguard Worker; AVX512VLCD:       ## BB#0:
1782*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    vmovdqa64 {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1783*9880d681SAndroid Build Coastguard Worker; AVX512VLCD-NEXT:    retq
1784*9880d681SAndroid Build Coastguard Worker;
1785*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv16i8u:
1786*9880d681SAndroid Build Coastguard Worker; AVX512CD:       ## BB#0:
1787*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1788*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
1789*9880d681SAndroid Build Coastguard Worker;
1790*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: foldv16i8u:
1791*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1792*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]
1793*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1794*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32>, i1 -1)
1795*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %out
1796*9880d681SAndroid Build Coastguard Worker}
1797*9880d681SAndroid Build Coastguard Worker
1798*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1)
1799*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1)
1800*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1)
1801*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1)
1802