xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-bitreverse.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | 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=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
4*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
5*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
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX  --check-prefix=AVX512  --check-prefix=AVX512F
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX  --check-prefix=AVX512  --check-prefix=AVX512BW
8*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX1
9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX2
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine i8 @test_bitreverse_i8(i8 %a) nounwind {
12*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_bitreverse_i8:
13*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
14*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %eax
15*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlb $7, %al
16*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
17*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlb $5, %cl
18*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andb $64, %cl
19*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
20*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlb $3, %dl
21*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andb $32, %dl
22*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orb %cl, %dl
23*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
24*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addb %cl, %cl
25*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andb $16, %cl
26*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orb %dl, %cl
27*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
28*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrb %dl
29*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andb $8, %dl
30*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orb %cl, %dl
31*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
32*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrb $3, %cl
33*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andb $4, %cl
34*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orb %dl, %cl
35*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
36*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrb $5, %dl
37*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andb $2, %dl
38*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orb %cl, %dl
39*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrb $7, %dil
40*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orb %dl, %dil
41*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orb %al, %dil
42*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %eax
43*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
44*9880d681SAndroid Build Coastguard Worker;
45*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_bitreverse_i8:
46*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
47*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %eax
48*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlb $7, %al
49*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
50*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlb $5, %cl
51*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andb $64, %cl
52*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
53*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlb $3, %dl
54*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andb $32, %dl
55*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orb %cl, %dl
56*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
57*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    addb %cl, %cl
58*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andb $16, %cl
59*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orb %dl, %cl
60*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
61*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrb %dl
62*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andb $8, %dl
63*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orb %cl, %dl
64*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
65*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrb $3, %cl
66*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andb $4, %cl
67*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orb %dl, %cl
68*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
69*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrb $5, %dl
70*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andb $2, %dl
71*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orb %cl, %dl
72*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrb $7, %dil
73*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orb %dl, %dil
74*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orb %al, %dil
75*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %eax
76*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
77*9880d681SAndroid Build Coastguard Worker;
78*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: test_bitreverse_i8:
79*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
80*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vmovd %edi, %xmm0
81*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0
82*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpextrb $0, %xmm0, %eax
83*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    # kill: %AL<def> %AL<kill> %EAX<kill>
84*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
85*9880d681SAndroid Build Coastguard Worker  %b = call i8 @llvm.bitreverse.i8(i8 %a)
86*9880d681SAndroid Build Coastguard Worker  ret i8 %b
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerdefine i16 @test_bitreverse_i16(i16 %a) nounwind {
90*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_bitreverse_i16:
91*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
92*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
93*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
94*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $32768, %ecx # imm = 0x8000
95*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %eax
96*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $15, %eax
97*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
98*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $2, %edx
99*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $13, %edx
100*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    leal (%rdx,%rax), %eax
101*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
102*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $4, %edx
103*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $11, %edx
104*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %eax
105*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
106*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $8, %edx
107*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $9, %edx
108*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %eax
109*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
110*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $16, %edx
111*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $7, %edx
112*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %eax
113*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
114*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $32, %edx
115*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $5, %edx
116*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %eax
117*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
118*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $64, %edx
119*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $3, %edx
120*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    leal (%rdi,%rdi), %esi
121*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $256, %esi # imm = 0x100
122*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %esi
123*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
124*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl %edx
125*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $128, %edx
126*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %esi, %edx
127*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %esi
128*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $3, %esi
129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $64, %esi
130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %esi
131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
132*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $5, %edx
133*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $32, %edx
134*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %esi, %edx
135*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %esi
136*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $7, %esi
137*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $16, %esi
138*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %esi
139*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
140*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $9, %edx
141*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $8, %edx
142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %esi, %edx
143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %esi
144*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $11, %esi
145*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $4, %esi
146*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %esi
147*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $13, %edi
148*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $2, %edi
149*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %esi, %edi
150*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $15, %ecx
151*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edi, %ecx
152*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %eax
153*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    # kill: %AX<def> %AX<kill> %EAX<kill>
154*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
155*9880d681SAndroid Build Coastguard Worker;
156*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_bitreverse_i16:
157*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
158*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
159*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
160*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $32768, %ecx # imm = 0x8000
161*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %eax
162*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $15, %eax
163*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
164*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $2, %edx
165*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $13, %edx
166*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    leal (%rdx,%rax), %eax
167*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
168*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $4, %edx
169*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $11, %edx
170*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %eax
171*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
172*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $8, %edx
173*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $9, %edx
174*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %eax
175*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
176*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $16, %edx
177*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $7, %edx
178*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %eax
179*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
180*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $32, %edx
181*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $5, %edx
182*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %eax
183*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
184*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $64, %edx
185*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $3, %edx
186*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    leal (%rdi,%rdi), %esi
187*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $256, %esi # imm = 0x100
188*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %esi
189*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
190*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl %edx
191*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $128, %edx
192*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %esi, %edx
193*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %esi
194*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $3, %esi
195*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $64, %esi
196*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %esi
197*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
198*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $5, %edx
199*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $32, %edx
200*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %esi, %edx
201*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %esi
202*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $7, %esi
203*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $16, %esi
204*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %esi
205*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
206*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $9, %edx
207*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $8, %edx
208*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %esi, %edx
209*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %esi
210*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $11, %esi
211*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $4, %esi
212*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %esi
213*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $13, %edi
214*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $2, %edi
215*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %esi, %edi
216*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $15, %ecx
217*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edi, %ecx
218*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %eax
219*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %AX<def> %AX<kill> %EAX<kill>
220*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
221*9880d681SAndroid Build Coastguard Worker;
222*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: test_bitreverse_i16:
223*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
224*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vmovd %edi, %xmm0
225*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0
226*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vmovd %xmm0, %eax
227*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    # kill: %AX<def> %AX<kill> %EAX<kill>
228*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
229*9880d681SAndroid Build Coastguard Worker  %b = call i16 @llvm.bitreverse.i16(i16 %a)
230*9880d681SAndroid Build Coastguard Worker  ret i16 %b
231*9880d681SAndroid Build Coastguard Worker}
232*9880d681SAndroid Build Coastguard Worker
233*9880d681SAndroid Build Coastguard Workerdefine i32 @test_bitreverse_i32(i32 %a) nounwind {
234*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_bitreverse_i32:
235*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
236*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
237*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %eax
238*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $31, %eax
239*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
240*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $2, %ecx
241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $29, %ecx
242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    leal (%rcx,%rax), %eax
243*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
244*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $4, %ecx
245*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $27, %ecx
246*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %eax
247*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
248*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $8, %ecx
249*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $25, %ecx
250*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %eax
251*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
252*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $16, %ecx
253*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $23, %ecx
254*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %eax
255*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
256*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $32, %ecx
257*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $21, %ecx
258*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %eax
259*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
260*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $64, %ecx
261*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $19, %ecx
262*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
263*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $17, %edx
264*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $16777216, %edx # imm = 0x1000000
265*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
266*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
267*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $15, %ecx
268*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $8388608, %ecx # imm = 0x800000
269*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
270*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
271*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $13, %edx
272*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $4194304, %edx # imm = 0x400000
273*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
274*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
275*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $11, %ecx
276*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $2097152, %ecx # imm = 0x200000
277*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
278*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
279*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $9, %edx
280*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $1048576, %edx # imm = 0x100000
281*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
282*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
283*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $7, %ecx
284*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $524288, %ecx # imm = 0x80000
285*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
286*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
287*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shll $5, %edx
288*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $262144, %edx # imm = 0x40000
289*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
290*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    leal (,%rdi,8), %ecx
291*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $131072, %ecx # imm = 0x20000
292*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
293*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    leal (%rdi,%rdi), %edx
294*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $65536, %edx # imm = 0x10000
295*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
296*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
297*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl %ecx
298*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $32768, %ecx # imm = 0x8000
299*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
300*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
301*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $3, %edx
302*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $16384, %edx # imm = 0x4000
303*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
304*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
305*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $5, %ecx
306*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $8192, %ecx # imm = 0x2000
307*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
308*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
309*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $7, %edx
310*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $4096, %edx # imm = 0x1000
311*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
312*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
313*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $9, %ecx
314*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $2048, %ecx # imm = 0x800
315*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
316*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
317*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $11, %edx
318*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $1024, %edx # imm = 0x400
319*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
320*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
321*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $13, %ecx
322*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $512, %ecx # imm = 0x200
323*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
324*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
325*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $15, %edx
326*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $256, %edx # imm = 0x100
327*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
328*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
329*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $17, %ecx
330*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $128, %ecx
331*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
332*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
333*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $19, %edx
334*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $64, %edx
335*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
336*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
337*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $21, %ecx
338*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $32, %ecx
339*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
340*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
341*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $23, %edx
342*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $16, %edx
343*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
344*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
345*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $25, %ecx
346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $8, %ecx
347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %edx
349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $27, %edx
350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $4, %edx
351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edx
352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl %edi, %ecx
353*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $29, %ecx
354*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $2, %ecx
355*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edx, %ecx
356*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrl $31, %edi
357*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %ecx, %edi
358*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orl %edi, %eax
359*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
360*9880d681SAndroid Build Coastguard Worker;
361*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_bitreverse_i32:
362*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
363*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
364*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %eax
365*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $31, %eax
366*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
367*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $2, %ecx
368*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $29, %ecx
369*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    leal (%rcx,%rax), %eax
370*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
371*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $4, %ecx
372*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $27, %ecx
373*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %eax
374*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
375*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $8, %ecx
376*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $25, %ecx
377*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %eax
378*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
379*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $16, %ecx
380*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $23, %ecx
381*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %eax
382*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
383*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $32, %ecx
384*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $21, %ecx
385*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %eax
386*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
387*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $64, %ecx
388*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $19, %ecx
389*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
390*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $17, %edx
391*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $16777216, %edx # imm = 0x1000000
392*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
393*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
394*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $15, %ecx
395*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $8388608, %ecx # imm = 0x800000
396*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
397*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
398*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $13, %edx
399*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $4194304, %edx # imm = 0x400000
400*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
401*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
402*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $11, %ecx
403*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $2097152, %ecx # imm = 0x200000
404*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
405*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
406*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $9, %edx
407*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $1048576, %edx # imm = 0x100000
408*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
409*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
410*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $7, %ecx
411*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $524288, %ecx # imm = 0x80000
412*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
413*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
414*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shll $5, %edx
415*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $262144, %edx # imm = 0x40000
416*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
417*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    leal (,%rdi,8), %ecx
418*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $131072, %ecx # imm = 0x20000
419*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
420*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    leal (%rdi,%rdi), %edx
421*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $65536, %edx # imm = 0x10000
422*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
423*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
424*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl %ecx
425*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $32768, %ecx # imm = 0x8000
426*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
427*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
428*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $3, %edx
429*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $16384, %edx # imm = 0x4000
430*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
431*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
432*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $5, %ecx
433*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $8192, %ecx # imm = 0x2000
434*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
435*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
436*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $7, %edx
437*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $4096, %edx # imm = 0x1000
438*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
439*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
440*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $9, %ecx
441*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $2048, %ecx # imm = 0x800
442*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
443*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
444*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $11, %edx
445*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $1024, %edx # imm = 0x400
446*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
447*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
448*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $13, %ecx
449*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $512, %ecx # imm = 0x200
450*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
451*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
452*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $15, %edx
453*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $256, %edx # imm = 0x100
454*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
455*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
456*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $17, %ecx
457*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $128, %ecx
458*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
459*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
460*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $19, %edx
461*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $64, %edx
462*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
463*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
464*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $21, %ecx
465*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $32, %ecx
466*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
467*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
468*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $23, %edx
469*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $16, %edx
470*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
471*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
472*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $25, %ecx
473*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $8, %ecx
474*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
475*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %edx
476*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $27, %edx
477*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $4, %edx
478*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edx
479*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movl %edi, %ecx
480*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $29, %ecx
481*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $2, %ecx
482*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edx, %ecx
483*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrl $31, %edi
484*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %ecx, %edi
485*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orl %edi, %eax
486*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
487*9880d681SAndroid Build Coastguard Worker;
488*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: test_bitreverse_i32:
489*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
490*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vmovd %edi, %xmm0
491*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0
492*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vmovd %xmm0, %eax
493*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
494*9880d681SAndroid Build Coastguard Worker  %b = call i32 @llvm.bitreverse.i32(i32 %a)
495*9880d681SAndroid Build Coastguard Worker  ret i32 %b
496*9880d681SAndroid Build Coastguard Worker}
497*9880d681SAndroid Build Coastguard Worker
498*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitreverse_i64(i64 %a) nounwind {
499*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_bitreverse_i64:
500*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
501*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    leaq (%rdi,%rdi), %rax
502*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movabsq $4294967296, %rcx # imm = 0x100000000
503*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq %rax, %rcx
504*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rax
505*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $63, %rax
506*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
507*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $2, %rdx
508*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $61, %rdx
509*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    leaq (%rdx,%rax), %rax
510*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
511*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $4, %rdx
512*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $59, %rdx
513*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rax
514*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
515*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $8, %rdx
516*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $57, %rdx
517*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rax
518*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
519*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $16, %rdx
520*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $55, %rdx
521*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rax
522*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
523*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $32, %rdx
524*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $53, %rdx
525*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rax
526*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
527*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $64, %rdx
528*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $51, %rdx
529*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
530*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $128, %rsi
531*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $49, %rsi
532*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
533*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
534*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $256, %rdx # imm = 0x100
535*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $47, %rdx
536*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
537*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
538*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $512, %rsi # imm = 0x200
539*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $45, %rsi
540*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
541*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
542*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $1024, %rdx # imm = 0x400
543*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $43, %rdx
544*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
545*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
546*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $2048, %rsi # imm = 0x800
547*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $41, %rsi
548*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
549*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
550*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $4096, %rdx # imm = 0x1000
551*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $39, %rdx
552*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
553*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
554*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $8192, %rsi # imm = 0x2000
555*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $37, %rsi
556*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
557*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
558*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $16384, %rdx # imm = 0x4000
559*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $35, %rdx
560*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
561*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
562*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $32768, %rsi # imm = 0x8000
563*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $33, %rsi
564*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
565*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
566*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $65536, %rdx # imm = 0x10000
567*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $31, %rdx
568*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
569*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
570*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $131072, %rsi # imm = 0x20000
571*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $29, %rsi
572*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
573*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
574*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $262144, %rdx # imm = 0x40000
575*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $27, %rdx
576*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
577*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
578*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $524288, %rsi # imm = 0x80000
579*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $25, %rsi
580*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
581*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
582*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $1048576, %rdx # imm = 0x100000
583*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $23, %rdx
584*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
586*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $2097152, %rsi # imm = 0x200000
587*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $21, %rsi
588*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
589*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
590*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $4194304, %rdx # imm = 0x400000
591*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $19, %rdx
592*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
593*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
594*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $8388608, %rsi # imm = 0x800000
595*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $17, %rsi
596*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
597*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
598*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $16777216, %rdx # imm = 0x1000000
599*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $15, %rdx
600*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
601*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
602*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $33554432, %rsi # imm = 0x2000000
603*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $13, %rsi
604*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
605*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
606*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $67108864, %rdx # imm = 0x4000000
607*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $11, %rdx
608*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
609*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
610*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $134217728, %rsi # imm = 0x8000000
611*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $9, %rsi
612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $268435456, %rdx # imm = 0x10000000
615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $7, %rdx
616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rsi
618*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $536870912, %rsi # imm = 0x20000000
619*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $5, %rsi
620*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rsi
621*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
622*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andq $1073741824, %rdx # imm = 0x40000000
623*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shlq $3, %rdx
624*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rsi, %rdx
625*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
626*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
627*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq %rcx
628*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $-2147483648, %ecx # imm = 0x80000000
629*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
630*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
631*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $3, %rdx
632*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $1073741824, %edx # imm = 0x40000000
633*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
634*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
635*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $5, %rcx
636*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $536870912, %ecx # imm = 0x20000000
637*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
638*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
639*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $7, %rdx
640*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $268435456, %edx # imm = 0x10000000
641*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
642*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
643*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $9, %rcx
644*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $134217728, %ecx # imm = 0x8000000
645*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
646*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
647*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $11, %rdx
648*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $67108864, %edx # imm = 0x4000000
649*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
650*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
651*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $13, %rcx
652*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $33554432, %ecx # imm = 0x2000000
653*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
654*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
655*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $15, %rdx
656*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $16777216, %edx # imm = 0x1000000
657*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
658*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
659*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $17, %rcx
660*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $8388608, %ecx # imm = 0x800000
661*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
662*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
663*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $19, %rdx
664*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $4194304, %edx # imm = 0x400000
665*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
666*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
667*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $21, %rcx
668*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $2097152, %ecx # imm = 0x200000
669*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
670*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
671*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $23, %rdx
672*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $1048576, %edx # imm = 0x100000
673*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
674*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
675*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $25, %rcx
676*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $524288, %ecx # imm = 0x80000
677*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
678*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
679*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $27, %rdx
680*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $262144, %edx # imm = 0x40000
681*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
682*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
683*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $29, %rcx
684*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $131072, %ecx # imm = 0x20000
685*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
686*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
687*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $31, %rdx
688*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $65536, %edx # imm = 0x10000
689*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
690*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
691*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $33, %rcx
692*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $32768, %ecx # imm = 0x8000
693*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
694*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
695*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $35, %rdx
696*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $16384, %edx # imm = 0x4000
697*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
698*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
699*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $37, %rcx
700*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $8192, %ecx # imm = 0x2000
701*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
702*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
703*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $39, %rdx
704*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $4096, %edx # imm = 0x1000
705*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
706*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
707*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $41, %rcx
708*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $2048, %ecx # imm = 0x800
709*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
710*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
711*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $43, %rdx
712*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $1024, %edx # imm = 0x400
713*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
714*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
715*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $45, %rcx
716*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $512, %ecx # imm = 0x200
717*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
718*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
719*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $47, %rdx
720*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $256, %edx # imm = 0x100
721*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
722*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
723*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $49, %rcx
724*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $128, %ecx
725*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
726*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
727*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $51, %rdx
728*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $64, %edx
729*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
730*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
731*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $53, %rcx
732*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $32, %ecx
733*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
734*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
735*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $55, %rdx
736*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $16, %edx
737*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
738*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
739*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $57, %rcx
740*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $8, %ecx
741*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
742*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rdx
743*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $59, %rdx
744*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $4, %edx
745*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdx
746*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq %rdi, %rcx
747*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $61, %rcx
748*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    andl $2, %ecx
749*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdx, %rcx
750*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shrq $63, %rdi
751*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rcx, %rdi
752*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    orq %rdi, %rax
753*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
754*9880d681SAndroid Build Coastguard Worker;
755*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_bitreverse_i64:
756*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
757*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    leaq (%rdi,%rdi), %rax
758*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movabsq $4294967296, %rcx # imm = 0x100000000
759*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq %rax, %rcx
760*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rax
761*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $63, %rax
762*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
763*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $2, %rdx
764*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $61, %rdx
765*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    leaq (%rdx,%rax), %rax
766*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
767*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $4, %rdx
768*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $59, %rdx
769*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rax
770*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
771*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $8, %rdx
772*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $57, %rdx
773*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rax
774*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
775*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $16, %rdx
776*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $55, %rdx
777*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rax
778*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
779*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $32, %rdx
780*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $53, %rdx
781*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rax
782*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
783*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $64, %rdx
784*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $51, %rdx
785*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
786*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $128, %rsi
787*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $49, %rsi
788*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
789*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
790*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $256, %rdx # imm = 0x100
791*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $47, %rdx
792*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
793*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
794*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $512, %rsi # imm = 0x200
795*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $45, %rsi
796*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
797*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
798*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $1024, %rdx # imm = 0x400
799*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $43, %rdx
800*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
801*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
802*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $2048, %rsi # imm = 0x800
803*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $41, %rsi
804*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
805*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
806*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $4096, %rdx # imm = 0x1000
807*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $39, %rdx
808*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
809*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
810*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $8192, %rsi # imm = 0x2000
811*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $37, %rsi
812*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
813*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
814*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $16384, %rdx # imm = 0x4000
815*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $35, %rdx
816*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
817*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
818*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $32768, %rsi # imm = 0x8000
819*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $33, %rsi
820*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
821*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
822*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $65536, %rdx # imm = 0x10000
823*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $31, %rdx
824*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
825*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
826*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $131072, %rsi # imm = 0x20000
827*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $29, %rsi
828*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
829*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
830*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $262144, %rdx # imm = 0x40000
831*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $27, %rdx
832*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
833*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
834*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $524288, %rsi # imm = 0x80000
835*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $25, %rsi
836*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
837*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
838*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $1048576, %rdx # imm = 0x100000
839*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $23, %rdx
840*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
841*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
842*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $2097152, %rsi # imm = 0x200000
843*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $21, %rsi
844*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
845*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
846*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $4194304, %rdx # imm = 0x400000
847*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $19, %rdx
848*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
849*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
850*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $8388608, %rsi # imm = 0x800000
851*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $17, %rsi
852*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
853*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
854*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $16777216, %rdx # imm = 0x1000000
855*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $15, %rdx
856*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
857*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
858*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $33554432, %rsi # imm = 0x2000000
859*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $13, %rsi
860*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
861*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
862*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $67108864, %rdx # imm = 0x4000000
863*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $11, %rdx
864*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
865*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
866*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $134217728, %rsi # imm = 0x8000000
867*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $9, %rsi
868*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
869*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
870*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $268435456, %rdx # imm = 0x10000000
871*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $7, %rdx
872*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
873*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rsi
874*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $536870912, %rsi # imm = 0x20000000
875*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $5, %rsi
876*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rsi
877*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
878*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andq $1073741824, %rdx # imm = 0x40000000
879*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shlq $3, %rdx
880*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rsi, %rdx
881*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
882*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
883*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq %rcx
884*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $-2147483648, %ecx # imm = 0x80000000
885*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
886*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
887*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $3, %rdx
888*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $1073741824, %edx # imm = 0x40000000
889*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
890*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
891*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $5, %rcx
892*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $536870912, %ecx # imm = 0x20000000
893*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
894*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
895*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $7, %rdx
896*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $268435456, %edx # imm = 0x10000000
897*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
898*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
899*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $9, %rcx
900*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $134217728, %ecx # imm = 0x8000000
901*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
902*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
903*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $11, %rdx
904*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $67108864, %edx # imm = 0x4000000
905*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
906*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
907*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $13, %rcx
908*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $33554432, %ecx # imm = 0x2000000
909*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
910*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
911*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $15, %rdx
912*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $16777216, %edx # imm = 0x1000000
913*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
914*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
915*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $17, %rcx
916*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $8388608, %ecx # imm = 0x800000
917*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
918*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
919*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $19, %rdx
920*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $4194304, %edx # imm = 0x400000
921*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
922*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
923*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $21, %rcx
924*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $2097152, %ecx # imm = 0x200000
925*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
926*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
927*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $23, %rdx
928*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $1048576, %edx # imm = 0x100000
929*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
930*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
931*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $25, %rcx
932*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $524288, %ecx # imm = 0x80000
933*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
934*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
935*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $27, %rdx
936*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $262144, %edx # imm = 0x40000
937*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
938*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
939*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $29, %rcx
940*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $131072, %ecx # imm = 0x20000
941*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
942*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
943*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $31, %rdx
944*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $65536, %edx # imm = 0x10000
945*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
946*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
947*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $33, %rcx
948*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $32768, %ecx # imm = 0x8000
949*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
950*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
951*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $35, %rdx
952*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $16384, %edx # imm = 0x4000
953*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
954*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
955*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $37, %rcx
956*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $8192, %ecx # imm = 0x2000
957*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
958*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
959*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $39, %rdx
960*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $4096, %edx # imm = 0x1000
961*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
962*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
963*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $41, %rcx
964*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $2048, %ecx # imm = 0x800
965*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
966*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
967*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $43, %rdx
968*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $1024, %edx # imm = 0x400
969*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
970*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
971*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $45, %rcx
972*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $512, %ecx # imm = 0x200
973*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
974*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
975*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $47, %rdx
976*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $256, %edx # imm = 0x100
977*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
978*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
979*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $49, %rcx
980*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $128, %ecx
981*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
982*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
983*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $51, %rdx
984*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $64, %edx
985*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
986*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
987*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $53, %rcx
988*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $32, %ecx
989*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
990*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
991*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $55, %rdx
992*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $16, %edx
993*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
994*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
995*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $57, %rcx
996*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $8, %ecx
997*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
998*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rdx
999*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $59, %rdx
1000*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $4, %edx
1001*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdx
1002*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movq %rdi, %rcx
1003*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $61, %rcx
1004*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    andl $2, %ecx
1005*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdx, %rcx
1006*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    shrq $63, %rdi
1007*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rcx, %rdi
1008*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    orq %rdi, %rax
1009*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1010*9880d681SAndroid Build Coastguard Worker;
1011*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: test_bitreverse_i64:
1012*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1013*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vmovq %rdi, %xmm0
1014*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0
1015*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vmovq %xmm0, %rax
1016*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1017*9880d681SAndroid Build Coastguard Worker  %b = call i64 @llvm.bitreverse.i64(i64 %a)
1018*9880d681SAndroid Build Coastguard Worker  ret i64 %b
1019*9880d681SAndroid Build Coastguard Worker}
1020*9880d681SAndroid Build Coastguard Worker
1021*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_bitreverse_v16i8(<16 x i8> %a) nounwind {
1022*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v16i8:
1023*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1024*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1025*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm2
1026*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
1027*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm1
1028*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm1
1029*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1030*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm2
1031*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
1032*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm3
1033*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm2
1034*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
1035*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm3
1036*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1037*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1038*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
1039*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm4
1040*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm4
1041*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm4
1042*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm4
1043*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
1044*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm3, %xmm3
1045*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1046*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm3
1047*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
1048*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm4
1049*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm4
1050*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm4
1051*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm4
1052*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
1053*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm3
1054*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1055*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1056*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm3
1057*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm0
1058*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1059*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1060*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1061*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm1, %xmm0
1062*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
1063*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1064*9880d681SAndroid Build Coastguard Worker;
1065*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v16i8:
1066*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1067*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1068*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1069*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm2
1070*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1071*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm3
1072*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
1073*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm0
1074*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1075*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm1
1076*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm3, %xmm1
1077*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1078*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1079*9880d681SAndroid Build Coastguard Worker;
1080*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_bitreverse_v16i8:
1081*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1082*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1083*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
1084*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1085*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1086*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
1087*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
1088*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1089*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm1, %xmm0
1090*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpor %xmm0, %xmm2, %xmm0
1091*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1092*9880d681SAndroid Build Coastguard Worker;
1093*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: test_bitreverse_v16i8:
1094*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1095*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0
1096*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1097*9880d681SAndroid Build Coastguard Worker  %b = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a)
1098*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %b
1099*9880d681SAndroid Build Coastguard Worker}
1100*9880d681SAndroid Build Coastguard Worker
1101*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_bitreverse_v8i16(<8 x i16> %a) nounwind {
1102*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v8i16:
1103*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1104*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm1
1105*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1106*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]
1107*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,0,3,2,4,5,6,7]
1108*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,5,4,7,6]
1109*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]
1110*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
1111*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,5,4,7,6]
1112*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm2, %xmm1
1113*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1114*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm0
1115*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
1116*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm2
1117*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm0, %xmm2
1118*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1119*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm0
1120*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1121*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1122*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1123*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm3
1124*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1125*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1126*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm0, %xmm3
1127*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1128*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm0, %xmm0
1129*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1130*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1131*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1132*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm3
1133*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1134*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1135*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm0, %xmm3
1136*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1137*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm0
1138*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1139*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1140*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1141*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1142*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm3
1143*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1144*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1145*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm0, %xmm3
1146*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
1147*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
1148*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm0, %xmm0
1149*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
1150*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1151*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
1152*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1153*9880d681SAndroid Build Coastguard Worker;
1154*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v8i16:
1155*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1156*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
1157*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1158*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1159*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm2
1160*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1161*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm3
1162*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
1163*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm0
1164*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1165*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm1
1166*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm3, %xmm1
1167*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1168*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1169*9880d681SAndroid Build Coastguard Worker;
1170*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_bitreverse_v8i16:
1171*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1172*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
1173*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1174*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
1175*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1176*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1177*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
1178*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
1179*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1180*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm1, %xmm0
1181*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpor %xmm0, %xmm2, %xmm0
1182*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1183*9880d681SAndroid Build Coastguard Worker;
1184*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: test_bitreverse_v8i16:
1185*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1186*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0
1187*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1188*9880d681SAndroid Build Coastguard Worker  %b = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a)
1189*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %b
1190*9880d681SAndroid Build Coastguard Worker}
1191*9880d681SAndroid Build Coastguard Worker
1192*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_bitreverse_v4i32(<4 x i32> %a) nounwind {
1193*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v4i32:
1194*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1195*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm1
1196*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1197*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]
1198*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
1199*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
1200*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]
1201*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
1202*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,6,5,4]
1203*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm2, %xmm1
1204*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1205*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm0
1206*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
1207*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm2
1208*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm0, %xmm2
1209*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1210*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm0
1211*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1212*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1213*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1214*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm3
1215*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1216*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1217*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm0, %xmm3
1218*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1219*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm0, %xmm0
1220*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1221*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1222*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1223*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm3
1224*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1225*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1226*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm0, %xmm3
1227*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm0
1229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1230*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1231*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1232*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1233*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm3
1234*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1235*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1236*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm0, %xmm3
1237*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
1238*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
1239*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm0, %xmm0
1240*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
1241*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1242*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
1243*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1244*9880d681SAndroid Build Coastguard Worker;
1245*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v4i32:
1246*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1247*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
1248*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1249*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1250*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm2
1251*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1252*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm3
1253*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
1254*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm0
1255*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1256*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm1
1257*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm3, %xmm1
1258*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1259*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1260*9880d681SAndroid Build Coastguard Worker;
1261*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_bitreverse_v4i32:
1262*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1263*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
1264*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1265*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
1266*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1267*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1268*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
1269*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
1270*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1271*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm1, %xmm0
1272*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpor %xmm0, %xmm2, %xmm0
1273*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1274*9880d681SAndroid Build Coastguard Worker;
1275*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: test_bitreverse_v4i32:
1276*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1277*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0
1278*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1279*9880d681SAndroid Build Coastguard Worker  %b = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a)
1280*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %b
1281*9880d681SAndroid Build Coastguard Worker}
1282*9880d681SAndroid Build Coastguard Worker
1283*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_bitreverse_v2i64(<2 x i64> %a) nounwind {
1284*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v2i64:
1285*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1286*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm1
1287*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1288*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]
1289*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]
1290*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
1291*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
1292*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]
1293*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
1294*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
1295*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,6,5,4]
1296*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm2, %xmm1
1297*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1298*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm0
1299*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
1300*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm2
1301*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm0, %xmm2
1302*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1303*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm0
1304*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1305*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1306*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1307*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm3
1308*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1309*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1310*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm0, %xmm3
1311*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1312*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm0, %xmm0
1313*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1314*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1315*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1316*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm3
1317*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1318*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1319*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm0, %xmm3
1320*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1321*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm0
1322*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1323*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
1324*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1325*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1326*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm3
1327*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1328*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
1329*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm0, %xmm3
1330*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
1331*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
1332*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm0, %xmm0
1333*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
1334*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1335*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
1336*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1337*9880d681SAndroid Build Coastguard Worker;
1338*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v2i64:
1339*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1340*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
1341*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1342*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1343*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm2
1344*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1345*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm3
1346*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
1347*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm1, %xmm0
1348*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1349*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm1
1350*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm3, %xmm1
1351*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1352*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1353*9880d681SAndroid Build Coastguard Worker;
1354*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_bitreverse_v2i64:
1355*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1356*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
1357*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1358*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
1359*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1360*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1361*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
1362*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
1363*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1364*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb %xmm0, %xmm1, %xmm0
1365*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpor %xmm0, %xmm2, %xmm0
1366*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1367*9880d681SAndroid Build Coastguard Worker;
1368*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: test_bitreverse_v2i64:
1369*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1370*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0
1371*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1372*9880d681SAndroid Build Coastguard Worker  %b = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a)
1373*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %b
1374*9880d681SAndroid Build Coastguard Worker}
1375*9880d681SAndroid Build Coastguard Worker
1376*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_bitreverse_v32i8(<32 x i8> %a) nounwind {
1377*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v32i8:
1378*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1379*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1380*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm2
1381*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
1382*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm9
1383*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm9, %xmm2
1384*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
1385*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm5
1386*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
1387*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm10
1388*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
1389*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
1390*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm3
1391*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
1392*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm11
1393*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm3
1394*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm3
1395*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1396*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm2
1397*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
1398*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm2
1399*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm2
1400*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
1401*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm3
1402*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
1403*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm12
1404*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm3
1405*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm3
1406*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
1407*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm4
1408*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
1409*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm6
1410*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm4
1411*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm4
1412*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm7
1413*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm7
1414*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1415*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm2
1416*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm7
1417*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm7
1418*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm0
1419*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
1420*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm3
1421*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm0
1422*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm0
1423*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
1424*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
1425*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm4
1426*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm9, %xmm4
1427*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
1428*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm5
1429*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
1430*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm7
1431*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm7
1432*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm7
1433*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm7
1434*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
1435*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm4, %xmm4
1436*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm4
1437*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm4
1438*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm7
1439*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm7
1440*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm7
1441*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm7
1442*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
1443*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm4
1444*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm4
1445*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm4
1446*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
1447*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
1448*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm6
1449*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm6
1450*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
1451*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm1
1452*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
1453*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm1
1454*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1455*9880d681SAndroid Build Coastguard Worker;
1456*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v32i8:
1457*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1458*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1459*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1460*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm4, %xmm2
1461*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1462*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm5, %xmm6
1463*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm6
1464*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
1465*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm4, %xmm0
1466*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1467*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm3
1468*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm3
1469*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm3
1470*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1471*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm4, %xmm0
1472*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm5
1473*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
1474*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm4, %xmm1
1475*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm2
1476*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm5, %xmm2
1477*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm0
1478*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1479*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1480*9880d681SAndroid Build Coastguard Worker;
1481*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_bitreverse_v32i8:
1482*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm2, %xmm1, %xmm3
1486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm4, %xmm3
1488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
1489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm2, %xmm1, %xmm1
1490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm5, %xmm1
1492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm1, %xmm3, %xmm1
1493*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm2, %xmm0, %xmm3
1494*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm4, %xmm3
1495*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1496*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
1497*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm5, %xmm0
1498*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm0, %xmm3, %xmm0
1499*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1500*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1501*9880d681SAndroid Build Coastguard Worker;
1502*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_bitreverse_v32i8:
1503*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1504*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1505*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1506*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1507*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1508*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1509*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1510*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1511*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm1, %ymm0
1512*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm0, %ymm2, %ymm0
1513*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1514*9880d681SAndroid Build Coastguard Worker;
1515*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test_bitreverse_v32i8:
1516*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1517*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1518*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand %ymm1, %ymm0, %ymm2
1519*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1520*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1521*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $4, %ymm0, %ymm0
1522*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand %ymm1, %ymm0, %ymm0
1523*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1524*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb %ymm0, %ymm1, %ymm0
1525*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpor %ymm0, %ymm2, %ymm0
1526*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1527*9880d681SAndroid Build Coastguard Worker;
1528*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: test_bitreverse_v32i8:
1529*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
1530*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1531*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95]
1532*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm1
1533*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm2, %xmm0, %xmm0, %xmm0
1534*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1535*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
1536*9880d681SAndroid Build Coastguard Worker;
1537*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: test_bitreverse_v32i8:
1538*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
1539*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1540*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95]
1541*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm1
1542*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm2, %xmm0, %xmm0, %xmm0
1543*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1544*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
1545*9880d681SAndroid Build Coastguard Worker  %b = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a)
1546*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %b
1547*9880d681SAndroid Build Coastguard Worker}
1548*9880d681SAndroid Build Coastguard Worker
1549*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_bitreverse_v16i16(<16 x i16> %a) nounwind {
1550*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v16i16:
1551*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1552*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm9, %xmm9
1553*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1554*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm9[8],xmm2[9],xmm9[9],xmm2[10],xmm9[10],xmm2[11],xmm9[11],xmm2[12],xmm9[12],xmm2[13],xmm9[13],xmm2[14],xmm9[14],xmm2[15],xmm9[15]
1555*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,0,3,2,4,5,6,7]
1556*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,5,4,7,6]
1557*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm9[0],xmm0[1],xmm9[1],xmm0[2],xmm9[2],xmm0[3],xmm9[3],xmm0[4],xmm9[4],xmm0[5],xmm9[5],xmm0[6],xmm9[6],xmm0[7],xmm9[7]
1558*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
1559*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
1560*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm2, %xmm0
1561*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1562*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm2
1563*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
1564*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm10
1565*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm2
1566*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
1567*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm3
1568*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
1569*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm11
1570*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm3
1571*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
1572*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm4
1573*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
1574*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm12
1575*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm4
1576*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm4
1577*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1578*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm2
1579*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
1580*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm2
1581*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm2
1582*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
1583*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm4
1584*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm13 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
1585*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm13
1586*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm4
1587*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm4
1588*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
1589*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
1590*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
1591*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm6
1592*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm5
1593*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
1594*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm7
1595*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm7
1596*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1597*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm2
1598*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm7
1599*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm7
1600*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm0
1601*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
1602*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm4
1603*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm0
1604*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm0
1605*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1606*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1607*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm9[8],xmm3[9],xmm9[9],xmm3[10],xmm9[10],xmm3[11],xmm9[11],xmm3[12],xmm9[12],xmm3[13],xmm9[13],xmm3[14],xmm9[14],xmm3[15],xmm9[15]
1608*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,0,3,2,4,5,6,7]
1609*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,4,7,6]
1610*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm9[0],xmm1[1],xmm9[1],xmm1[2],xmm9[2],xmm1[3],xmm9[3],xmm1[4],xmm9[4],xmm1[5],xmm9[5],xmm1[6],xmm9[6],xmm1[7],xmm9[7]
1611*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,0,3,2,4,5,6,7]
1612*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,4,7,6]
1613*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm3, %xmm1
1614*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
1615*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
1616*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
1617*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1618*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm3
1619*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm3
1620*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm7
1621*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm7
1622*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm7
1623*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm7
1624*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
1625*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
1626*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
1627*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm5
1628*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm7
1629*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm7
1630*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm7
1631*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm7
1632*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
1633*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
1634*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm5
1635*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm5
1636*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
1637*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
1638*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm6
1639*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
1640*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
1641*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm1
1642*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
1643*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm1
1644*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1645*9880d681SAndroid Build Coastguard Worker;
1646*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v16i16:
1647*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1648*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
1649*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm4, %xmm0
1650*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1651*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1652*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm2
1653*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1654*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm6, %xmm7
1655*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm7
1656*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
1657*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm0
1658*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1659*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm3
1660*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm3
1661*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm7, %xmm3
1662*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm4, %xmm1
1663*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1664*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm0
1665*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm6
1666*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
1667*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm1
1668*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm2
1669*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm2
1670*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm0
1671*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1672*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1673*9880d681SAndroid Build Coastguard Worker;
1674*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_bitreverse_v16i16:
1675*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1676*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1677*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
1678*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1679*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1680*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm4
1681*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1682*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
1683*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
1684*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
1685*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1686*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm6, %xmm1
1687*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm1, %xmm4, %xmm1
1688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1689*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm2
1690*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm5, %xmm2
1691*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1692*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
1693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0
1694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm0, %xmm2, %xmm0
1695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1697*9880d681SAndroid Build Coastguard Worker;
1698*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_bitreverse_v16i16:
1699*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1700*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,17,16,19,18,21,20,23,22,25,24,27,26,29,28,31,30]
1701*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1702*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1703*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1704*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1705*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1706*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1707*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1708*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm1, %ymm0
1709*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm0, %ymm2, %ymm0
1710*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1711*9880d681SAndroid Build Coastguard Worker;
1712*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test_bitreverse_v16i16:
1713*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1714*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,17,16,19,18,21,20,23,22,25,24,27,26,29,28,31,30]
1715*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1716*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand %ymm1, %ymm0, %ymm2
1717*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1718*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1719*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $4, %ymm0, %ymm0
1720*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand %ymm1, %ymm0, %ymm0
1721*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1722*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb %ymm0, %ymm1, %ymm0
1723*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpor %ymm0, %ymm2, %ymm0
1724*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1725*9880d681SAndroid Build Coastguard Worker;
1726*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: test_bitreverse_v16i16:
1727*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
1728*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1729*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [81,80,83,82,85,84,87,86,89,88,91,90,93,92,95,94]
1730*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm1
1731*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm2, %xmm0, %xmm0, %xmm0
1732*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1733*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
1734*9880d681SAndroid Build Coastguard Worker;
1735*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: test_bitreverse_v16i16:
1736*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
1737*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1738*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [81,80,83,82,85,84,87,86,89,88,91,90,93,92,95,94]
1739*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm1
1740*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm2, %xmm0, %xmm0, %xmm0
1741*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1742*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
1743*9880d681SAndroid Build Coastguard Worker  %b = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a)
1744*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %b
1745*9880d681SAndroid Build Coastguard Worker}
1746*9880d681SAndroid Build Coastguard Worker
1747*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_bitreverse_v8i32(<8 x i32> %a) nounwind {
1748*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v8i32:
1749*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1750*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm9, %xmm9
1751*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1752*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm9[8],xmm2[9],xmm9[9],xmm2[10],xmm9[10],xmm2[11],xmm9[11],xmm2[12],xmm9[12],xmm2[13],xmm9[13],xmm2[14],xmm9[14],xmm2[15],xmm9[15]
1753*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
1754*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
1755*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm9[0],xmm0[1],xmm9[1],xmm0[2],xmm9[2],xmm0[3],xmm9[3],xmm0[4],xmm9[4],xmm0[5],xmm9[5],xmm0[6],xmm9[6],xmm0[7],xmm9[7]
1756*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
1757*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
1758*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm2, %xmm0
1759*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1760*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm2
1761*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
1762*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm10
1763*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm2
1764*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
1765*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm3
1766*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
1767*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm11
1768*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm3
1769*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
1770*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm4
1771*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
1772*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm12
1773*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm4
1774*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm4
1775*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1776*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm2
1777*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
1778*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm2
1779*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm2
1780*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
1781*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm4
1782*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm13 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
1783*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm13
1784*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm4
1785*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm4
1786*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
1787*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
1788*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
1789*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm6
1790*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm5
1791*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
1792*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm7
1793*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm7
1794*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1795*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm2
1796*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm7
1797*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm7
1798*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm0
1799*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
1800*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm4
1801*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm0
1802*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm0
1803*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1804*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1805*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm9[8],xmm3[9],xmm9[9],xmm3[10],xmm9[10],xmm3[11],xmm9[11],xmm3[12],xmm9[12],xmm3[13],xmm9[13],xmm3[14],xmm9[14],xmm3[15],xmm9[15]
1806*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]
1807*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]
1808*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm9[0],xmm1[1],xmm9[1],xmm1[2],xmm9[2],xmm1[3],xmm9[3],xmm1[4],xmm9[4],xmm1[5],xmm9[5],xmm1[6],xmm9[6],xmm1[7],xmm9[7]
1809*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
1810*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
1811*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm3, %xmm1
1812*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
1813*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
1814*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
1815*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm3
1816*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm3
1817*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm3
1818*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm7
1819*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm7
1820*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm7
1821*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm7
1822*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
1823*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
1824*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
1825*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm5
1826*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm7
1827*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm7
1828*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm7
1829*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm7
1830*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
1831*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
1832*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm5
1833*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm5
1834*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
1835*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
1836*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm6
1837*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
1838*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
1839*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm1
1840*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
1841*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm1
1842*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1843*9880d681SAndroid Build Coastguard Worker;
1844*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v8i32:
1845*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1846*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
1847*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm4, %xmm0
1848*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1849*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1850*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm2
1851*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1852*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm6, %xmm7
1853*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm7
1854*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
1855*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm0
1856*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1857*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm3
1858*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm3
1859*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm7, %xmm3
1860*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm4, %xmm1
1861*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1862*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm0
1863*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm6
1864*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
1865*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm1
1866*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm2
1867*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm2
1868*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm0
1869*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1870*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1871*9880d681SAndroid Build Coastguard Worker;
1872*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_bitreverse_v8i32:
1873*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1874*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1875*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
1876*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1877*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1878*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm4
1879*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1880*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
1881*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
1882*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
1883*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1884*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm6, %xmm1
1885*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm1, %xmm4, %xmm1
1886*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1887*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm2
1888*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm5, %xmm2
1889*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1890*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
1891*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0
1892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm0, %xmm2, %xmm0
1893*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1894*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1895*9880d681SAndroid Build Coastguard Worker;
1896*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_bitreverse_v8i32:
1897*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1898*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12,19,18,17,16,23,22,21,20,27,26,25,24,31,30,29,28]
1899*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1900*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
1901*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1902*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1903*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
1904*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
1905*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1906*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm1, %ymm0
1907*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm0, %ymm2, %ymm0
1908*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1909*9880d681SAndroid Build Coastguard Worker;
1910*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test_bitreverse_v8i32:
1911*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1912*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12,19,18,17,16,23,22,21,20,27,26,25,24,31,30,29,28]
1913*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1914*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand %ymm1, %ymm0, %ymm2
1915*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
1916*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
1917*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $4, %ymm0, %ymm0
1918*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand %ymm1, %ymm0, %ymm0
1919*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
1920*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb %ymm0, %ymm1, %ymm0
1921*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpor %ymm0, %ymm2, %ymm0
1922*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1923*9880d681SAndroid Build Coastguard Worker;
1924*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: test_bitreverse_v8i32:
1925*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
1926*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1927*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [83,82,81,80,87,86,85,84,91,90,89,88,95,94,93,92]
1928*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm1
1929*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm2, %xmm0, %xmm0, %xmm0
1930*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1931*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
1932*9880d681SAndroid Build Coastguard Worker;
1933*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: test_bitreverse_v8i32:
1934*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
1935*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1936*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [83,82,81,80,87,86,85,84,91,90,89,88,95,94,93,92]
1937*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm1
1938*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm2, %xmm0, %xmm0, %xmm0
1939*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1940*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
1941*9880d681SAndroid Build Coastguard Worker  %b = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a)
1942*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %b
1943*9880d681SAndroid Build Coastguard Worker}
1944*9880d681SAndroid Build Coastguard Worker
1945*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_bitreverse_v4i64(<4 x i64> %a) nounwind {
1946*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v4i64:
1947*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1948*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm9, %xmm9
1949*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1950*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm9[8],xmm2[9],xmm9[9],xmm2[10],xmm9[10],xmm2[11],xmm9[11],xmm2[12],xmm9[12],xmm2[13],xmm9[13],xmm2[14],xmm9[14],xmm2[15],xmm9[15]
1951*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]
1952*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
1953*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
1954*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm9[0],xmm0[1],xmm9[1],xmm0[2],xmm9[2],xmm0[3],xmm9[3],xmm0[4],xmm9[4],xmm0[5],xmm9[5],xmm0[6],xmm9[6],xmm0[7],xmm9[7]
1955*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
1956*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
1957*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
1958*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm2, %xmm0
1959*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1960*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm2
1961*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
1962*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm10
1963*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm2
1964*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
1965*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
1966*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
1967*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm11
1968*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
1969*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
1970*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm3
1971*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
1972*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm12
1973*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm3
1974*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm3
1975*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1976*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm2
1977*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
1978*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm2
1979*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm2
1980*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
1981*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm3
1982*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm13 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
1983*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm13
1984*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm3
1985*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm3
1986*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
1987*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
1988*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
1989*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm6
1990*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm5
1991*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm5
1992*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm7
1993*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm7
1994*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1995*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm2
1996*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm7
1997*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm7
1998*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm0
1999*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
2000*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm3
2001*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm0
2002*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm0
2003*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
2004*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
2005*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
2006*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,0,1]
2007*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,2,1,0,4,5,6,7]
2008*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
2009*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm9[0],xmm1[1],xmm9[1],xmm1[2],xmm9[2],xmm1[3],xmm9[3],xmm1[4],xmm9[4],xmm1[5],xmm9[5],xmm1[6],xmm9[6],xmm1[7],xmm9[7]
2010*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
2011*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
2012*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
2013*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm1
2014*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2015*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
2016*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
2017*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
2018*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
2019*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
2020*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm7
2021*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm7
2022*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm7
2023*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm7
2024*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2025*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
2026*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
2027*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm5
2028*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm7
2029*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm7
2030*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm7
2031*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm7
2032*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2033*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
2034*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm5
2035*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm5
2036*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
2037*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
2038*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm6
2039*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2040*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
2041*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm1
2042*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
2043*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm1
2044*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
2045*9880d681SAndroid Build Coastguard Worker;
2046*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v4i64:
2047*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
2048*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
2049*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm4, %xmm0
2050*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2051*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm2
2052*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm2
2053*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2054*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm6, %xmm7
2055*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm7
2056*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm0
2057*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm0
2058*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2059*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm3
2060*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm3
2061*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm7, %xmm3
2062*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm4, %xmm1
2063*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
2064*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm0
2065*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm6
2066*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
2067*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm5, %xmm1
2068*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm2
2069*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm2
2070*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm0
2071*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm1
2072*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
2073*9880d681SAndroid Build Coastguard Worker;
2074*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_bitreverse_v4i64:
2075*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2076*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
2077*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
2078*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
2079*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2080*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm4
2081*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2082*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
2083*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
2084*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
2085*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2086*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm6, %xmm1
2087*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm1, %xmm4, %xmm1
2088*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
2089*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm2
2090*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm5, %xmm2
2091*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2092*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
2093*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0
2094*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm0, %xmm2, %xmm0
2095*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
2096*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2097*9880d681SAndroid Build Coastguard Worker;
2098*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_bitreverse_v4i64:
2099*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2100*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24]
2101*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2102*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
2103*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2104*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2105*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2106*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
2107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm1, %ymm0
2109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm0, %ymm2, %ymm0
2110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2111*9880d681SAndroid Build Coastguard Worker;
2112*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test_bitreverse_v4i64:
2113*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2114*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24]
2115*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2116*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand %ymm1, %ymm0, %ymm2
2117*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2118*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
2119*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $4, %ymm0, %ymm0
2120*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand %ymm1, %ymm0, %ymm0
2121*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2122*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpshufb %ymm0, %ymm1, %ymm0
2123*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpor %ymm0, %ymm2, %ymm0
2124*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2125*9880d681SAndroid Build Coastguard Worker;
2126*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: test_bitreverse_v4i64:
2127*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
2128*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
2129*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [87,86,85,84,83,82,81,80,95,94,93,92,91,90,89,88]
2130*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm1
2131*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm2, %xmm0, %xmm0, %xmm0
2132*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
2133*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
2134*9880d681SAndroid Build Coastguard Worker;
2135*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: test_bitreverse_v4i64:
2136*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
2137*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2138*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [87,86,85,84,83,82,81,80,95,94,93,92,91,90,89,88]
2139*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm2, %xmm1, %xmm0, %xmm1
2140*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm2, %xmm0, %xmm0, %xmm0
2141*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2142*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
2143*9880d681SAndroid Build Coastguard Worker  %b = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a)
2144*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %b
2145*9880d681SAndroid Build Coastguard Worker}
2146*9880d681SAndroid Build Coastguard Worker
2147*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @test_bitreverse_v64i8(<64 x i8> %a) nounwind {
2148*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v64i8:
2149*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
2150*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
2151*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm4
2152*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
2153*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm9
2154*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm9, %xmm4
2155*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm7
2156*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm7
2157*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
2158*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm10
2159*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm7
2160*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
2161*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm5
2162*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
2163*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm11
2164*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm5
2165*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2166*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
2167*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm4, %xmm4
2168*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
2169*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm4
2170*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm4
2171*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
2172*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm5
2173*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
2174*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm12
2175*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm5
2176*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2177*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm6
2178*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm6
2179*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm13 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
2180*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm13
2181*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
2182*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2183*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
2184*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm4
2185*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
2186*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm14
2187*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm4
2188*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm4
2189*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm0
2190*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
2191*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm6
2192*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm0
2193*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
2194*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm0
2195*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
2196*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm4
2197*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm9, %xmm4
2198*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm7
2199*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm7
2200*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm7
2201*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2202*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm5
2203*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm5
2204*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2205*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
2206*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm4, %xmm4
2207*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm4
2208*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm4
2209*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2210*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm5
2211*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm5
2212*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2213*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
2214*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm4
2215*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm4
2216*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm4
2217*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2218*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm5
2219*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
2220*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2221*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
2222*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm1
2223*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm1
2224*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm1
2225*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
2226*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm4
2227*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm9, %xmm4
2228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm7
2229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm7
2230*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm7
2231*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
2232*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm5
2233*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm5
2234*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2235*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
2236*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm4, %xmm4
2237*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm4
2238*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm4
2239*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
2240*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm5
2241*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm5
2242*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2243*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
2244*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm4
2245*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm4
2246*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm4
2247*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
2248*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm5
2249*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
2250*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2251*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm2
2252*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm2
2253*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm2
2254*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm2
2255*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
2256*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm4
2257*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm9, %xmm4
2258*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm7
2259*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm7
2260*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm7
2261*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
2262*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm5
2263*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm5
2264*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2265*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
2266*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm4, %xmm4
2267*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm4
2268*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm4
2269*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
2270*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm5
2271*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm5
2272*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2273*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
2274*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm4
2275*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm4
2276*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm4
2277*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
2278*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm5
2279*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
2280*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm5
2281*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm3
2282*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm6, %xmm3
2283*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm3
2284*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm3
2285*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
2286*9880d681SAndroid Build Coastguard Worker;
2287*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v64i8:
2288*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
2289*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm5
2290*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2291*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm8, %xmm0
2292*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2293*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm9, %xmm6
2294*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm6
2295*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm5
2296*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm8, %xmm5
2297*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2298*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm0
2299*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm5, %xmm0
2300*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm0
2301*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm5
2302*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm8, %xmm5
2303*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm9, %xmm6
2304*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm5, %xmm6
2305*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
2306*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm8, %xmm1
2307*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm5
2308*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm5
2309*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm5
2310*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm1
2311*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm8, %xmm1
2312*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm9, %xmm7
2313*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm7
2314*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm2
2315*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm8, %xmm2
2316*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm6
2317*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm6
2318*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm7, %xmm6
2319*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm1
2320*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm8, %xmm1
2321*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm9
2322*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm3
2323*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm8, %xmm3
2324*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm4
2325*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm9, %xmm4
2326*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm5, %xmm1
2327*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm6, %xmm2
2328*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm3
2329*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
2330*9880d681SAndroid Build Coastguard Worker;
2331*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_bitreverse_v64i8:
2332*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2333*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
2334*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2335*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm4
2336*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2337*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
2338*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
2339*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2
2340*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2341*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm6, %xmm2
2342*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm4, %xmm2
2343*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm0, %xmm4
2344*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
2345*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2346*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
2347*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0
2348*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm0, %xmm4, %xmm0
2349*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2350*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2351*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm4
2352*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
2353*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
2354*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2
2355*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm6, %xmm2
2356*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm4, %xmm2
2357*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm1, %xmm4
2358*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
2359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
2360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
2361*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm6, %xmm1
2362*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm1, %xmm4, %xmm1
2363*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
2364*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2365*9880d681SAndroid Build Coastguard Worker;
2366*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_bitreverse_v64i8:
2367*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm3
2370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
2372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
2374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm5 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2375*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm5, %ymm0
2376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm0, %ymm3, %ymm0
2377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm3
2378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
2379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm1, %ymm1
2380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1
2381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm1, %ymm5, %ymm1
2382*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm1, %ymm3, %ymm1
2383*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2384*9880d681SAndroid Build Coastguard Worker;
2385*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_bitreverse_v64i8:
2386*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
2387*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2388*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm3
2389*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2390*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
2391*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm0, %ymm0
2392*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm0, %ymm0
2393*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm5 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2394*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm0, %ymm5, %ymm0
2395*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpor %ymm0, %ymm3, %ymm0
2396*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm3
2397*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
2398*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm1
2399*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm2, %ymm1, %ymm1
2400*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm1, %ymm5, %ymm1
2401*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpor %ymm1, %ymm3, %ymm1
2402*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
2403*9880d681SAndroid Build Coastguard Worker;
2404*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_bitreverse_v64i8:
2405*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
2406*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2407*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm2
2408*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2409*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2
2410*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0
2411*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0
2412*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2413*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm0, %zmm1, %zmm0
2414*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vporq %zmm0, %zmm2, %zmm0
2415*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
2416*9880d681SAndroid Build Coastguard Worker;
2417*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: test_bitreverse_v64i8:
2418*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
2419*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
2420*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95]
2421*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
2422*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm0, %xmm0, %xmm0
2423*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2424*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2425*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
2426*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm1, %xmm0, %xmm1
2427*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
2428*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
2429*9880d681SAndroid Build Coastguard Worker;
2430*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: test_bitreverse_v64i8:
2431*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
2432*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
2433*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95]
2434*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
2435*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm0, %xmm0, %xmm0
2436*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
2437*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
2438*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
2439*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm1, %xmm0, %xmm1
2440*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
2441*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
2442*9880d681SAndroid Build Coastguard Worker  %b = call <64 x i8> @llvm.bitreverse.v64i8(<64 x i8> %a)
2443*9880d681SAndroid Build Coastguard Worker  ret <64 x i8> %b
2444*9880d681SAndroid Build Coastguard Worker}
2445*9880d681SAndroid Build Coastguard Worker
2446*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @test_bitreverse_v32i16(<32 x i16> %a) nounwind {
2447*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v32i16:
2448*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
2449*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm9, %xmm9
2450*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
2451*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
2452*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[1,0,3,2,4,5,6,7]
2453*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,5,4,7,6]
2454*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm9[0],xmm0[1],xmm9[1],xmm0[2],xmm9[2],xmm0[3],xmm9[3],xmm0[4],xmm9[4],xmm0[5],xmm9[5],xmm0[6],xmm9[6],xmm0[7],xmm9[7]
2455*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
2456*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
2457*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm0
2458*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
2459*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
2460*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
2461*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm10
2462*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
2463*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
2464*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
2465*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
2466*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm11
2467*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
2468*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm6
2469*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
2470*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
2471*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm12
2472*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
2473*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2474*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
2475*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
2476*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
2477*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
2478*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2479*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm6
2480*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
2481*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm13 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
2482*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm13
2483*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
2484*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2485*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm7
2486*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm7
2487*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
2488*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm14
2489*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm7
2490*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm7
2491*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
2492*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm5
2493*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm15 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
2494*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm15
2495*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm5
2496*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm5
2497*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm0
2498*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
2499*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm7
2500*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm0
2501*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
2502*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
2503*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
2504*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
2505*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[1,0,3,2,4,5,6,7]
2506*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,5,4,7,6]
2507*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm9[0],xmm1[1],xmm9[1],xmm1[2],xmm9[2],xmm1[3],xmm9[3],xmm1[4],xmm9[4],xmm1[5],xmm9[5],xmm1[6],xmm9[6],xmm1[7],xmm9[7]
2508*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,0,3,2,4,5,6,7]
2509*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,4,7,6]
2510*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm1
2511*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2512*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
2513*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
2514*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
2515*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
2516*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
2517*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
2518*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
2519*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
2520*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2521*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2522*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
2523*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
2524*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2525*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
2526*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
2527*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
2528*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2529*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2530*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
2531*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
2532*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2533*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
2534*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
2535*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm6
2536*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2537*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
2538*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm1
2539*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
2540*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm1
2541*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
2542*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
2543*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[1,0,3,2,4,5,6,7]
2544*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,5,4,7,6]
2545*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm9[0],xmm2[1],xmm9[1],xmm2[2],xmm9[2],xmm2[3],xmm9[3],xmm2[4],xmm9[4],xmm2[5],xmm9[5],xmm2[6],xmm9[6],xmm2[7],xmm9[7]
2546*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,0,3,2,4,5,6,7]
2547*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,5,4,7,6]
2548*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm2
2549*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
2550*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
2551*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
2552*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
2553*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
2554*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
2555*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm6
2556*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
2557*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
2558*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2559*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
2560*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
2561*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
2562*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2563*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm6
2564*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
2565*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
2566*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2567*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
2568*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
2569*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
2570*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2571*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm6
2572*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
2573*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm6
2574*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2575*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm2
2576*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm2
2577*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm2
2578*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm2
2579*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
2580*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
2581*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[1,0,3,2,4,5,6,7]
2582*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,5,4,7,6]
2583*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm9[0],xmm3[1],xmm9[1],xmm3[2],xmm9[2],xmm3[3],xmm9[3],xmm3[4],xmm9[4],xmm3[5],xmm9[5],xmm3[6],xmm9[6],xmm3[7],xmm9[7]
2584*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,0,3,2,4,5,6,7]
2585*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,4,7,6]
2586*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm3
2587*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
2588*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
2589*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
2590*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
2591*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
2592*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
2593*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm6
2594*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
2595*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
2596*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2597*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
2598*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
2599*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
2600*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2601*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm6
2602*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
2603*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
2604*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2605*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
2606*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
2607*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
2608*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2609*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm6
2610*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
2611*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm6
2612*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2613*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm3
2614*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm3
2615*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm3
2616*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm3
2617*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
2618*9880d681SAndroid Build Coastguard Worker;
2619*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v32i16:
2620*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
2621*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm5
2622*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm1
2623*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
2624*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm1
2625*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2626*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
2627*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm0
2628*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm7 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2629*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm7, %xmm6
2630*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm6
2631*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
2632*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm1
2633*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2634*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm0
2635*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm0
2636*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm0
2637*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm5
2638*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm5, %xmm1
2639*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm1
2640*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm7, %xmm6
2641*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm6
2642*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm5
2643*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm5
2644*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm1
2645*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm5, %xmm1
2646*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm1
2647*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm2
2648*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm5
2649*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm5
2650*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm7, %xmm6
2651*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm5, %xmm6
2652*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm2
2653*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm2
2654*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm5
2655*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm5
2656*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm5
2657*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm3
2658*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm2
2659*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm2
2660*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm7
2661*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm3
2662*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm3
2663*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm4
2664*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm7, %xmm4
2665*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm5, %xmm2
2666*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm3
2667*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
2668*9880d681SAndroid Build Coastguard Worker;
2669*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_bitreverse_v32i16:
2670*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2671*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
2672*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
2673*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
2674*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2675*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5
2676*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2677*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
2678*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
2679*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
2680*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm7 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2681*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm7, %xmm2
2682*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm5, %xmm2
2683*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
2684*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm5
2685*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
2686*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2687*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
2688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm7, %xmm0
2689*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm0, %xmm5, %xmm0
2690*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2691*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2692*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
2693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5
2694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
2695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
2696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
2697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm7, %xmm2
2698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm5, %xmm2
2699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
2700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm3
2701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm6, %xmm3
2702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
2703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
2704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm7, %xmm1
2705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm1, %xmm3, %xmm1
2706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
2707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2708*9880d681SAndroid Build Coastguard Worker;
2709*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_bitreverse_v32i16:
2710*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2711*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
2712*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
2713*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2714*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm0, %ymm4
2715*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2716*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm4, %ymm5, %ymm4
2717*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
2718*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm0, %ymm0
2719*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm6 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2720*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm6, %ymm0
2721*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm0, %ymm4, %ymm0
2722*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
2723*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm2
2724*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm5, %ymm2
2725*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm1, %ymm1
2726*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
2727*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm1, %ymm6, %ymm1
2728*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm1, %ymm2, %ymm1
2729*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2730*9880d681SAndroid Build Coastguard Worker;
2731*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_bitreverse_v32i16:
2732*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
2733*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm2 = [1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
2734*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
2735*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2736*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm3, %ymm0, %ymm4
2737*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2738*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm4, %ymm5, %ymm4
2739*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm0, %ymm0
2740*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm3, %ymm0, %ymm0
2741*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm6 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2742*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm0, %ymm6, %ymm0
2743*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpor %ymm0, %ymm4, %ymm0
2744*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
2745*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm3, %ymm1, %ymm2
2746*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm2, %ymm5, %ymm2
2747*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlw $4, %ymm1, %ymm1
2748*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpand %ymm3, %ymm1, %ymm1
2749*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpshufb %ymm1, %ymm6, %ymm1
2750*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpor %ymm1, %ymm2, %ymm1
2751*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
2752*9880d681SAndroid Build Coastguard Worker;
2753*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_bitreverse_v32i16:
2754*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
2755*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,17,16,19,18,21,20,23,22,25,24,27,26,29,28,31,30,33,32,35,34,37,36,39,38,41,40,43,42,45,44,47,46,49,48,51,50,53,52,55,54,57,56,59,58,61,60,63,62]
2756*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2757*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm2
2758*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2759*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2
2760*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0
2761*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0
2762*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2763*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm0, %zmm1, %zmm0
2764*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vporq %zmm0, %zmm2, %zmm0
2765*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
2766*9880d681SAndroid Build Coastguard Worker;
2767*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: test_bitreverse_v32i16:
2768*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
2769*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
2770*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [81,80,83,82,85,84,87,86,89,88,91,90,93,92,95,94]
2771*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
2772*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm0, %xmm0, %xmm0
2773*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2774*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2775*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
2776*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm1, %xmm0, %xmm1
2777*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
2778*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
2779*9880d681SAndroid Build Coastguard Worker;
2780*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: test_bitreverse_v32i16:
2781*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
2782*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
2783*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [81,80,83,82,85,84,87,86,89,88,91,90,93,92,95,94]
2784*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
2785*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm0, %xmm0, %xmm0
2786*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
2787*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
2788*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
2789*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm1, %xmm0, %xmm1
2790*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
2791*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
2792*9880d681SAndroid Build Coastguard Worker  %b = call <32 x i16> @llvm.bitreverse.v32i16(<32 x i16> %a)
2793*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %b
2794*9880d681SAndroid Build Coastguard Worker}
2795*9880d681SAndroid Build Coastguard Worker
2796*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_bitreverse_v16i32(<16 x i32> %a) nounwind {
2797*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v16i32:
2798*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
2799*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm9, %xmm9
2800*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
2801*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
2802*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,2,1,0,4,5,6,7]
2803*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
2804*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm9[0],xmm0[1],xmm9[1],xmm0[2],xmm9[2],xmm0[3],xmm9[3],xmm0[4],xmm9[4],xmm0[5],xmm9[5],xmm0[6],xmm9[6],xmm0[7],xmm9[7]
2805*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
2806*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
2807*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm0
2808*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
2809*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
2810*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
2811*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm10
2812*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
2813*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
2814*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
2815*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
2816*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm11
2817*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
2818*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm6
2819*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
2820*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
2821*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm12
2822*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
2823*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2824*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
2825*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
2826*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
2827*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
2828*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2829*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm6
2830*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
2831*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm13 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
2832*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm13
2833*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
2834*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2835*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm7
2836*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm7
2837*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
2838*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm14
2839*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm7
2840*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm7
2841*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
2842*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm5
2843*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm15 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
2844*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm15
2845*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm5
2846*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm5
2847*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm0
2848*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
2849*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm7
2850*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm0
2851*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
2852*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
2853*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
2854*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
2855*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,2,1,0,4,5,6,7]
2856*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
2857*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm9[0],xmm1[1],xmm9[1],xmm1[2],xmm9[2],xmm1[3],xmm9[3],xmm1[4],xmm9[4],xmm1[5],xmm9[5],xmm1[6],xmm9[6],xmm1[7],xmm9[7]
2858*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
2859*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
2860*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm1
2861*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2862*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
2863*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
2864*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
2865*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
2866*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
2867*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
2868*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
2869*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
2870*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2871*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2872*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
2873*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
2874*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2875*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
2876*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
2877*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
2878*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2879*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
2880*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
2881*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
2882*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2883*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
2884*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
2885*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm6
2886*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2887*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
2888*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm1
2889*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
2890*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm1
2891*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
2892*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
2893*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,2,1,0,4,5,6,7]
2894*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
2895*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm9[0],xmm2[1],xmm9[1],xmm2[2],xmm9[2],xmm2[3],xmm9[3],xmm2[4],xmm9[4],xmm2[5],xmm9[5],xmm2[6],xmm9[6],xmm2[7],xmm9[7]
2896*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
2897*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
2898*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm2
2899*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
2900*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
2901*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
2902*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
2903*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
2904*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
2905*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm6
2906*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
2907*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
2908*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2909*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
2910*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
2911*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
2912*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2913*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm6
2914*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
2915*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
2916*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2917*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
2918*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
2919*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
2920*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2921*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm6
2922*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
2923*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm6
2924*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2925*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm2
2926*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm2
2927*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm2
2928*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm2
2929*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
2930*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
2931*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,2,1,0,4,5,6,7]
2932*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
2933*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm9[0],xmm3[1],xmm9[1],xmm3[2],xmm9[2],xmm3[3],xmm9[3],xmm3[4],xmm9[4],xmm3[5],xmm9[5],xmm3[6],xmm9[6],xmm3[7],xmm9[7]
2934*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]
2935*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]
2936*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm3
2937*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
2938*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
2939*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
2940*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
2941*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
2942*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
2943*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm6
2944*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
2945*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
2946*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2947*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
2948*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
2949*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
2950*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2951*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm6
2952*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
2953*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
2954*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2955*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
2956*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
2957*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
2958*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
2959*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm6
2960*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
2961*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm6
2962*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
2963*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm3
2964*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm3
2965*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm3
2966*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm3
2967*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
2968*9880d681SAndroid Build Coastguard Worker;
2969*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v16i32:
2970*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
2971*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm5
2972*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm1
2973*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
2974*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm1
2975*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2976*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
2977*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm0
2978*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm7 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
2979*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm7, %xmm6
2980*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm6
2981*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
2982*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm1
2983*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
2984*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm0
2985*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm0
2986*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm0
2987*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm5
2988*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm5, %xmm1
2989*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm1
2990*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm7, %xmm6
2991*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm6
2992*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm5
2993*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm5
2994*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm1
2995*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm5, %xmm1
2996*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm1
2997*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm2
2998*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm5
2999*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm5
3000*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm7, %xmm6
3001*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm5, %xmm6
3002*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm2
3003*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm2
3004*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm5
3005*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm5
3006*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm5
3007*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm3
3008*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm2
3009*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm2
3010*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm7
3011*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm3
3012*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm3
3013*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm4
3014*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm7, %xmm4
3015*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm5, %xmm2
3016*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm3
3017*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
3018*9880d681SAndroid Build Coastguard Worker;
3019*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_bitreverse_v16i32:
3020*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3021*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3022*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
3023*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
3024*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3025*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5
3026*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
3027*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
3028*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
3029*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
3030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm7 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
3031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm7, %xmm2
3032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm5, %xmm2
3033*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
3034*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm5
3035*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
3036*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3037*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
3038*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm7, %xmm0
3039*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm0, %xmm5, %xmm0
3040*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3041*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3042*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
3043*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5
3044*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
3045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
3046*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
3047*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm7, %xmm2
3048*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm5, %xmm2
3049*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
3050*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm3
3051*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm6, %xmm3
3052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
3053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
3054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm7, %xmm1
3055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm1, %xmm3, %xmm1
3056*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3057*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3058*9880d681SAndroid Build Coastguard Worker;
3059*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_bitreverse_v16i32:
3060*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12,3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
3062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
3063*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3064*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm0, %ymm4
3065*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
3066*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm4, %ymm5, %ymm4
3067*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3068*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm0, %ymm0
3069*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm6 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
3070*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm6, %ymm0
3071*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm0, %ymm4, %ymm0
3072*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
3073*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm2
3074*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm5, %ymm2
3075*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm1, %ymm1
3076*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
3077*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm1, %ymm6, %ymm1
3078*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm1, %ymm2, %ymm1
3079*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3080*9880d681SAndroid Build Coastguard Worker;
3081*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_bitreverse_v16i32:
3082*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
3083*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $29, %zmm0, %zmm1
3084*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm1, %zmm1
3085*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $31, %zmm0, %zmm2
3086*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3087*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm1, %zmm2, %zmm1
3088*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $27, %zmm0, %zmm2
3089*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3090*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3091*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $25, %zmm0, %zmm2
3092*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3093*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3094*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $23, %zmm0, %zmm2
3095*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3096*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3097*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $21, %zmm0, %zmm2
3098*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3099*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3100*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $19, %zmm0, %zmm2
3101*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3102*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3103*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $17, %zmm0, %zmm2
3104*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3105*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3106*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $15, %zmm0, %zmm2
3107*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3108*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3109*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $13, %zmm0, %zmm2
3110*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3111*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3112*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $11, %zmm0, %zmm2
3113*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3114*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3115*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $9, %zmm0, %zmm2
3116*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3117*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3118*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $7, %zmm0, %zmm2
3119*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3120*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3121*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $5, %zmm0, %zmm2
3122*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3123*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3124*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $3, %zmm0, %zmm2
3125*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3126*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3127*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpslld $1, %zmm0, %zmm2
3128*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3129*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3130*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $1, %zmm0, %zmm2
3131*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3132*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3133*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $3, %zmm0, %zmm2
3134*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3135*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3136*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $5, %zmm0, %zmm2
3137*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3138*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3139*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $7, %zmm0, %zmm2
3140*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3141*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3142*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $9, %zmm0, %zmm2
3143*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3144*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3145*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $11, %zmm0, %zmm2
3146*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3147*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3148*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $13, %zmm0, %zmm2
3149*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3150*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3151*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $15, %zmm0, %zmm2
3152*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3153*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3154*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $17, %zmm0, %zmm2
3155*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3156*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3157*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $19, %zmm0, %zmm2
3158*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3159*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3160*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $21, %zmm0, %zmm2
3161*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3162*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3163*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $23, %zmm0, %zmm2
3164*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3165*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3166*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $25, %zmm0, %zmm2
3167*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3168*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3169*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $27, %zmm0, %zmm2
3170*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3171*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3172*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $29, %zmm0, %zmm2
3173*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm2, %zmm2
3174*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm2, %zmm1, %zmm1
3175*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrld $31, %zmm0, %zmm0
3176*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandd {{.*}}(%rip){1to16}, %zmm0, %zmm0
3177*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpord %zmm0, %zmm1, %zmm0
3178*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
3179*9880d681SAndroid Build Coastguard Worker;
3180*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_bitreverse_v16i32:
3181*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
3182*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12,19,18,17,16,23,22,21,20,27,26,25,24,31,30,29,28,35,34,33,32,39,38,37,36,43,42,41,40,47,46,45,44,51,50,49,48,55,54,53,52,59,58,57,56,63,62,61,60]
3183*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3184*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm2
3185*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
3186*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2
3187*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0
3188*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0
3189*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
3190*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm0, %zmm1, %zmm0
3191*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vporq %zmm0, %zmm2, %zmm0
3192*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
3193*9880d681SAndroid Build Coastguard Worker;
3194*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: test_bitreverse_v16i32:
3195*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
3196*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3197*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [83,82,81,80,87,86,85,84,91,90,89,88,95,94,93,92]
3198*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
3199*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm0, %xmm0, %xmm0
3200*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3201*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3202*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
3203*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm1, %xmm0, %xmm1
3204*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3205*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
3206*9880d681SAndroid Build Coastguard Worker;
3207*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: test_bitreverse_v16i32:
3208*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
3209*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
3210*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [83,82,81,80,87,86,85,84,91,90,89,88,95,94,93,92]
3211*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
3212*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm0, %xmm0, %xmm0
3213*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
3214*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
3215*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
3216*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm1, %xmm0, %xmm1
3217*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3218*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
3219*9880d681SAndroid Build Coastguard Worker  %b = call <16 x i32> @llvm.bitreverse.v16i32(<16 x i32> %a)
3220*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %b
3221*9880d681SAndroid Build Coastguard Worker}
3222*9880d681SAndroid Build Coastguard Worker
3223*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_bitreverse_v8i64(<8 x i64> %a) nounwind {
3224*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_bitreverse_v8i64:
3225*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
3226*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm9, %xmm9
3227*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
3228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
3229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,0,1]
3230*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,2,1,0,4,5,6,7]
3231*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
3232*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm9[0],xmm0[1],xmm9[1],xmm0[2],xmm9[2],xmm0[3],xmm9[3],xmm0[4],xmm9[4],xmm0[5],xmm9[5],xmm0[6],xmm9[6],xmm0[7],xmm9[7]
3233*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
3234*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
3235*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
3236*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm0
3237*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
3238*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
3239*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
3240*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm10
3241*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
3242*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
3243*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
3244*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
3245*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm11
3246*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
3247*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm6
3248*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
3249*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
3250*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm12
3251*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
3252*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3253*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
3254*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
3255*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
3256*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
3257*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
3258*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm6
3259*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
3260*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm13 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
3261*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm13
3262*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
3263*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3264*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm7
3265*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm7
3266*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
3267*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm14
3268*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm7
3269*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm7
3270*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
3271*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm5
3272*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm15 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
3273*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm15
3274*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm5
3275*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm7, %xmm5
3276*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm0
3277*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
3278*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm7
3279*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm0
3280*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
3281*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
3282*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
3283*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
3284*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,0,1]
3285*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,2,1,0,4,5,6,7]
3286*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
3287*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm9[0],xmm1[1],xmm9[1],xmm1[2],xmm9[2],xmm1[3],xmm9[3],xmm1[4],xmm9[4],xmm1[5],xmm9[5],xmm1[6],xmm9[6],xmm1[7],xmm9[7]
3288*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
3289*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
3290*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
3291*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm1
3292*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
3293*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
3294*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
3295*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
3296*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
3297*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
3298*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
3299*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
3300*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
3301*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3302*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
3303*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
3304*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
3305*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
3306*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
3307*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
3308*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
3309*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3310*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm5
3311*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
3312*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
3313*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
3314*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm6
3315*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
3316*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm6
3317*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3318*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm1
3319*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm1
3320*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
3321*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm1
3322*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
3323*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
3324*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,0,1]
3325*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,2,1,0,4,5,6,7]
3326*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
3327*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm9[0],xmm2[1],xmm9[1],xmm2[2],xmm9[2],xmm2[3],xmm9[3],xmm2[4],xmm9[4],xmm2[5],xmm9[5],xmm2[6],xmm9[6],xmm2[7],xmm9[7]
3328*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]
3329*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
3330*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
3331*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm2
3332*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
3333*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
3334*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
3335*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
3336*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
3337*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
3338*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm6
3339*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
3340*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
3341*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3342*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
3343*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
3344*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
3345*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
3346*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm6
3347*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
3348*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
3349*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3350*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm5
3351*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
3352*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
3353*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
3354*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm6
3355*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
3356*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm6
3357*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3358*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm2
3359*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm2
3360*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm2
3361*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm2
3362*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
3363*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm9[8],xmm4[9],xmm9[9],xmm4[10],xmm9[10],xmm4[11],xmm9[11],xmm4[12],xmm9[12],xmm4[13],xmm9[13],xmm4[14],xmm9[14],xmm4[15],xmm9[15]
3364*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,0,1]
3365*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,2,1,0,4,5,6,7]
3366*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
3367*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm9[0],xmm3[1],xmm9[1],xmm3[2],xmm9[2],xmm3[3],xmm9[3],xmm3[4],xmm9[4],xmm3[5],xmm9[5],xmm3[6],xmm9[6],xmm3[7],xmm9[7]
3368*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]
3369*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]
3370*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]
3371*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm4, %xmm3
3372*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
3373*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm5
3374*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm10, %xmm5
3375*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
3376*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $7, %xmm4
3377*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm11, %xmm4
3378*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm6
3379*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $3, %xmm6
3380*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm12, %xmm6
3381*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3382*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
3383*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm5, %xmm5
3384*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm8, %xmm5
3385*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
3386*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm6
3387*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $1, %xmm6
3388*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm13, %xmm6
3389*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3390*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm5
3391*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $3, %xmm5
3392*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm14, %xmm5
3393*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm5
3394*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm6
3395*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $5, %xmm6
3396*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm15, %xmm6
3397*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm6
3398*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $7, %xmm3
3399*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm7, %xmm3
3400*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm3
3401*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm3
3402*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
3403*9880d681SAndroid Build Coastguard Worker;
3404*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test_bitreverse_v8i64:
3405*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
3406*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm5
3407*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm0, %xmm1
3408*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
3409*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm1
3410*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3411*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm0
3412*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm0
3413*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm7 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
3414*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm7, %xmm6
3415*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm0, %xmm6
3416*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm1
3417*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm1
3418*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
3419*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm0
3420*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm0
3421*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm0
3422*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm5
3423*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm5, %xmm1
3424*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm1
3425*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm7, %xmm6
3426*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm1, %xmm6
3427*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm5
3428*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm5
3429*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm1
3430*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm5, %xmm1
3431*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm1
3432*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm2
3433*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm5
3434*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm5
3435*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm7, %xmm6
3436*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm5, %xmm6
3437*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm2
3438*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm2
3439*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm5
3440*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm5
3441*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm6, %xmm5
3442*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm8, %xmm3
3443*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm3, %xmm2
3444*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm2
3445*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm2, %xmm7
3446*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    psrlw $4, %xmm3
3447*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pand %xmm9, %xmm3
3448*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm4
3449*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm7, %xmm4
3450*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm5, %xmm2
3451*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm4, %xmm3
3452*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
3453*9880d681SAndroid Build Coastguard Worker;
3454*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_bitreverse_v8i64:
3455*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3456*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3457*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
3458*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
3459*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3460*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5
3461*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
3462*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
3463*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
3464*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
3465*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm7 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
3466*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm7, %xmm2
3467*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm5, %xmm2
3468*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
3469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm5
3470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
3471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
3473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm7, %xmm0
3474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm0, %xmm5, %xmm0
3475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
3478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5
3479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
3480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
3481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
3482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm7, %xmm2
3483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm5, %xmm2
3484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
3485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm3
3486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm6, %xmm3
3487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
3488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
3489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm7, %xmm1
3490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm1, %xmm3, %xmm1
3491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3493*9880d681SAndroid Build Coastguard Worker;
3494*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_bitreverse_v8i64:
3495*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3496*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
3497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
3498*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3499*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm0, %ymm4
3500*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
3501*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm4, %ymm5, %ymm4
3502*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
3503*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm0, %ymm0
3504*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm6 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
3505*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm6, %ymm0
3506*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm0, %ymm4, %ymm0
3507*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
3508*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm2
3509*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm5, %ymm2
3510*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm1, %ymm1
3511*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
3512*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm1, %ymm6, %ymm1
3513*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm1, %ymm2, %ymm1
3514*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3515*9880d681SAndroid Build Coastguard Worker;
3516*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: test_bitreverse_v8i64:
3517*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
3518*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $61, %zmm0, %zmm1
3519*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm1, %zmm1
3520*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm2
3521*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3522*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm1, %zmm2, %zmm1
3523*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $59, %zmm0, %zmm2
3524*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3525*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3526*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $57, %zmm0, %zmm2
3527*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3528*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3529*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $55, %zmm0, %zmm2
3530*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3531*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3532*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $53, %zmm0, %zmm2
3533*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3534*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3535*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $51, %zmm0, %zmm2
3536*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3537*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3538*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $49, %zmm0, %zmm2
3539*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3540*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3541*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $47, %zmm0, %zmm2
3542*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3543*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3544*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $45, %zmm0, %zmm2
3545*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3546*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3547*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $43, %zmm0, %zmm2
3548*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3549*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3550*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $41, %zmm0, %zmm2
3551*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3552*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3553*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $39, %zmm0, %zmm2
3554*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3555*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3556*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $37, %zmm0, %zmm2
3557*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3558*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3559*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $35, %zmm0, %zmm2
3560*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3561*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3562*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $33, %zmm0, %zmm2
3563*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3564*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3565*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $31, %zmm0, %zmm2
3566*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3567*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3568*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $29, %zmm0, %zmm2
3569*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3570*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3571*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $27, %zmm0, %zmm2
3572*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3573*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3574*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $25, %zmm0, %zmm2
3575*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3576*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3577*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $23, %zmm0, %zmm2
3578*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3579*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3580*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $21, %zmm0, %zmm2
3581*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3582*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3583*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $19, %zmm0, %zmm2
3584*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3585*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3586*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $17, %zmm0, %zmm2
3587*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3588*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3589*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $15, %zmm0, %zmm2
3590*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3591*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3592*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $13, %zmm0, %zmm2
3593*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3594*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3595*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $11, %zmm0, %zmm2
3596*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3597*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3598*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $9, %zmm0, %zmm2
3599*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3600*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3601*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $7, %zmm0, %zmm2
3602*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3603*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3604*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $5, %zmm0, %zmm2
3605*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3606*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3607*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $3, %zmm0, %zmm2
3608*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3609*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3610*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsllq $1, %zmm0, %zmm2
3611*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3612*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3613*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $1, %zmm0, %zmm2
3614*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3615*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3616*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $3, %zmm0, %zmm2
3617*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3618*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3619*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $5, %zmm0, %zmm2
3620*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3621*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3622*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $7, %zmm0, %zmm2
3623*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3624*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3625*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $9, %zmm0, %zmm2
3626*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3627*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3628*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $11, %zmm0, %zmm2
3629*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3630*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3631*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $13, %zmm0, %zmm2
3632*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3633*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3634*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $15, %zmm0, %zmm2
3635*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3636*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3637*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $17, %zmm0, %zmm2
3638*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3639*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3640*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $19, %zmm0, %zmm2
3641*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3642*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3643*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $21, %zmm0, %zmm2
3644*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3645*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3646*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $23, %zmm0, %zmm2
3647*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3648*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3649*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $25, %zmm0, %zmm2
3650*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3651*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3652*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $27, %zmm0, %zmm2
3653*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3654*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3655*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $29, %zmm0, %zmm2
3656*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3657*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3658*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $31, %zmm0, %zmm2
3659*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3660*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3661*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $33, %zmm0, %zmm2
3662*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3663*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3664*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $35, %zmm0, %zmm2
3665*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3666*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3667*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $37, %zmm0, %zmm2
3668*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3669*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3670*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $39, %zmm0, %zmm2
3671*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3672*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3673*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $41, %zmm0, %zmm2
3674*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3675*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3676*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $43, %zmm0, %zmm2
3677*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3678*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3679*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $45, %zmm0, %zmm2
3680*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3681*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3682*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $47, %zmm0, %zmm2
3683*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3684*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3685*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $49, %zmm0, %zmm2
3686*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3687*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3688*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $51, %zmm0, %zmm2
3689*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3690*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3691*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $53, %zmm0, %zmm2
3692*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3693*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3694*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $55, %zmm0, %zmm2
3695*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3696*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3697*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $57, %zmm0, %zmm2
3698*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3699*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3700*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $59, %zmm0, %zmm2
3701*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3702*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3703*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $61, %zmm0, %zmm2
3704*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm2, %zmm2
3705*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm2, %zmm1, %zmm1
3706*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsrlq $63, %zmm0, %zmm0
3707*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpandq {{.*}}(%rip){1to8}, %zmm0, %zmm0
3708*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vporq %zmm0, %zmm1, %zmm0
3709*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
3710*9880d681SAndroid Build Coastguard Worker;
3711*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: test_bitreverse_v8i64:
3712*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
3713*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm0 = zmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24,39,38,37,36,35,34,33,32,47,46,45,44,43,42,41,40,55,54,53,52,51,50,49,48,63,62,61,60,59,58,57,56]
3714*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3715*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm2
3716*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
3717*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2
3718*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0
3719*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0
3720*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vmovdqu8 {{.*#+}} zmm1 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15,0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
3721*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpshufb %zmm0, %zmm1, %zmm0
3722*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vporq %zmm0, %zmm2, %zmm0
3723*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
3724*9880d681SAndroid Build Coastguard Worker;
3725*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: test_bitreverse_v8i64:
3726*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
3727*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3728*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [87,86,85,84,83,82,81,80,95,94,93,92,91,90,89,88]
3729*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
3730*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm0, %xmm0, %xmm0
3731*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3732*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3733*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
3734*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpperm %xmm3, %xmm1, %xmm0, %xmm1
3735*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3736*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
3737*9880d681SAndroid Build Coastguard Worker;
3738*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: test_bitreverse_v8i64:
3739*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
3740*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
3741*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [87,86,85,84,83,82,81,80,95,94,93,92,91,90,89,88]
3742*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
3743*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm0, %xmm0, %xmm0
3744*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
3745*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
3746*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm2, %xmm0, %xmm2
3747*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpperm %xmm3, %xmm1, %xmm0, %xmm1
3748*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3749*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
3750*9880d681SAndroid Build Coastguard Worker  %b = call <8 x i64> @llvm.bitreverse.v8i64(<8 x i64> %a)
3751*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %b
3752*9880d681SAndroid Build Coastguard Worker}
3753*9880d681SAndroid Build Coastguard Worker
3754*9880d681SAndroid Build Coastguard Workerdeclare i8 @llvm.bitreverse.i8(i8) readnone
3755*9880d681SAndroid Build Coastguard Workerdeclare i16 @llvm.bitreverse.i16(i16) readnone
3756*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.bitreverse.i32(i32) readnone
3757*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.bitreverse.i64(i64) readnone
3758*9880d681SAndroid Build Coastguard Worker
3759*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.bitreverse.v16i8(<16 x i8>) readnone
3760*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.bitreverse.v8i16(<8 x i16>) readnone
3761*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.bitreverse.v4i32(<4 x i32>) readnone
3762*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.bitreverse.v2i64(<2 x i64>) readnone
3763*9880d681SAndroid Build Coastguard Worker
3764*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8>  @llvm.bitreverse.v32i8(<32 x i8>) readnone
3765*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.bitreverse.v16i16(<16 x i16>) readnone
3766*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32>  @llvm.bitreverse.v8i32(<8 x i32>) readnone
3767*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64>  @llvm.bitreverse.v4i64(<4 x i64>) readnone
3768*9880d681SAndroid Build Coastguard Worker
3769*9880d681SAndroid Build Coastguard Workerdeclare <64 x i8>  @llvm.bitreverse.v64i8(<64 x i8>) readnone
3770*9880d681SAndroid Build Coastguard Workerdeclare <32 x i16> @llvm.bitreverse.v32i16(<32 x i16>) readnone
3771*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32>  @llvm.bitreverse.v16i32(<16 x i32>) readnone
3772*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64>  @llvm.bitreverse.v8i64(<8 x i64>) readnone
3773