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