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=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1 3*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 4*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 5*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 6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker; Variable Shifts 9*9880d681SAndroid Build Coastguard Worker; 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @var_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind { 12*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v4i64: 13*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 14*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 15*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 16*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm2, %xmm3, %xmm4 17*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm5 = xmm2[2,3,0,1] 18*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm5, %xmm3, %xmm6 19*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm4 = xmm4[0,1,2,3],xmm6[4,5,6,7] 20*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 21*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm2, %xmm6, %xmm2 22*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm5, %xmm6, %xmm5 23*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm5[4,5,6,7] 24*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 25*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm4, %xmm2, %xmm2 26*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm1, %xmm3, %xmm4 27*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm5 = xmm1[2,3,0,1] 28*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm5, %xmm3, %xmm3 29*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7] 30*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm1, %xmm0, %xmm1 31*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm5, %xmm0, %xmm0 32*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7] 33*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm0 34*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm3, %xmm0, %xmm0 35*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 36*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 37*9880d681SAndroid Build Coastguard Worker; 38*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v4i64: 39*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 40*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 41*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvq %ymm1, %ymm2, %ymm3 42*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0 43*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvq %ymm1, %ymm0, %ymm0 44*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm3, %ymm0, %ymm0 45*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 46*9880d681SAndroid Build Coastguard Worker; 47*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v4i64: 48*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 49*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 50*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 51*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubq %xmm2, %xmm3, %xmm2 52*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 53*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaq %xmm2, %xmm4, %xmm2 54*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubq %xmm1, %xmm3, %xmm1 55*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaq %xmm1, %xmm0, %xmm0 56*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 57*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 58*9880d681SAndroid Build Coastguard Worker; 59*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v4i64: 60*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 61*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 62*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrlvq %ymm1, %ymm2, %ymm3 63*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0 64*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrlvq %ymm1, %ymm0, %ymm0 65*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubq %ymm3, %ymm0, %ymm0 66*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 67*9880d681SAndroid Build Coastguard Worker; 68*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v4i64: 69*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 70*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 71*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlvq %ymm1, %ymm2, %ymm3 72*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm0 73*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlvq %ymm1, %ymm0, %ymm0 74*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %ymm3, %ymm0, %ymm0 75*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 76*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i64> %a, %b 77*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @var_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind { 81*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v8i32: 82*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 83*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 84*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 85*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrldq {{.*#+}} xmm4 = xmm3[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 86*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm4, %xmm2, %xmm4 87*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm5 88*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm5, %xmm2, %xmm5 89*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm4 = xmm5[0,1,2,3],xmm4[4,5,6,7] 90*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5 91*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm6 = xmm3[2],xmm5[2],xmm3[3],xmm5[3] 92*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm6, %xmm2, %xmm6 93*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero 94*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm3, %xmm2, %xmm2 95*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm6[4,5,6,7] 96*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3],xmm2[4,5],xmm4[6,7] 97*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrldq {{.*#+}} xmm3 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 98*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm3, %xmm0, %xmm3 99*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm4 100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm4, %xmm0, %xmm4 101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7] 102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm4 = xmm1[2],xmm5[2],xmm1[3],xmm5[3] 103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm4, %xmm0, %xmm4 104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero 105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm1, %xmm0, %xmm0 106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm4[4,5,6,7] 107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,3],xmm0[4,5],xmm3[6,7] 108*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 109*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 110*9880d681SAndroid Build Coastguard Worker; 111*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v8i32: 112*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 113*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd %ymm1, %ymm0, %ymm0 114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 115*9880d681SAndroid Build Coastguard Worker; 116*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v8i32: 117*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 118*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 119*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 120*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubd %xmm2, %xmm3, %xmm2 121*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 122*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshad %xmm2, %xmm4, %xmm2 123*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubd %xmm1, %xmm3, %xmm1 124*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshad %xmm1, %xmm0, %xmm0 125*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 126*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 127*9880d681SAndroid Build Coastguard Worker; 128*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v8i32: 129*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 130*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsravd %ymm1, %ymm0, %ymm0 131*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 132*9880d681SAndroid Build Coastguard Worker; 133*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v8i32: 134*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 135*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsravd %ymm1, %ymm0, %ymm0 136*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 137*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i32> %a, %b 138*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @var_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind { 142*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v16i16: 143*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 144*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 145*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $12, %xmm2, %xmm3 146*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm2, %xmm2 147*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2 148*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm3 149*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 150*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $8, %xmm4, %xmm5 151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm4, %xmm2 152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm2, %xmm4 153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm2, %xmm2 154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm2, %xmm4 155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3 156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm2, %xmm2 157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm2, %xmm4 158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3 159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm2, %xmm2 160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $12, %xmm1, %xmm3 161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm1, %xmm1 162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpor %xmm3, %xmm1, %xmm1 163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm3 164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $8, %xmm0, %xmm4 165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm4, %xmm0, %xmm0 166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm0, %xmm1 167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm1, %xmm0, %xmm0 168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm0, %xmm1 169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3 170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm1, %xmm0, %xmm0 171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm0, %xmm1 172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3 173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm1, %xmm0, %xmm0 174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 176*9880d681SAndroid Build Coastguard Worker; 177*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v16i16: 178*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 179*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 180*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] 181*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] 182*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd %ymm3, %ymm4, %ymm3 183*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm3, %ymm3 184*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11] 185*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11] 186*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd %ymm1, %ymm0, %ymm0 187*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm0, %ymm0 188*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackusdw %ymm3, %ymm0, %ymm0 189*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 190*9880d681SAndroid Build Coastguard Worker; 191*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v16i16: 192*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 193*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 194*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 195*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubw %xmm2, %xmm3, %xmm2 196*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 197*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaw %xmm2, %xmm4, %xmm2 198*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubw %xmm1, %xmm3, %xmm1 199*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaw %xmm1, %xmm0, %xmm0 200*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 201*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 202*9880d681SAndroid Build Coastguard Worker; 203*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v16i16: 204*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 205*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 206*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3 207*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubw %xmm2, %xmm3, %xmm2 208*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm4 209*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshaw %xmm2, %xmm4, %xmm2 210*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubw %xmm1, %xmm3, %xmm1 211*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshaw %xmm1, %xmm0, %xmm0 212*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 213*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 214*9880d681SAndroid Build Coastguard Worker; 215*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v16i16: 216*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 217*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 218*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 219*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsravw %zmm1, %zmm0, %zmm0 220*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 221*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 222*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i16> %a, %b 223*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 224*9880d681SAndroid Build Coastguard Worker} 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @var_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind { 227*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v32i8: 228*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 229*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 230*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm2, %xmm2 231*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15] 232*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 233*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15] 234*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm5, %xmm6 235*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm6, %xmm5, %xmm5 236*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm5, %xmm6 237*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3 238*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm6, %xmm5, %xmm5 239*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm5, %xmm6 240*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3 241*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm6, %xmm5, %xmm3 242*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm3, %xmm3 243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7] 244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm4 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7] 245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm4, %xmm5 246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm4, %xmm4 247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm4, %xmm5 248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm2 249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm4, %xmm4 250*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm4, %xmm5 251*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm2 252*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm4, %xmm2 253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1 256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm4, %xmm5 259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm5, %xmm4, %xmm4 260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm4, %xmm5 261*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3 262*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm5, %xmm4, %xmm4 263*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm4, %xmm5 264*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3 265*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm5, %xmm4, %xmm3 266*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm3, %xmm3 267*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm1 = 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] 268*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 269*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm0, %xmm4 270*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm4, %xmm0, %xmm0 271*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm0, %xmm4 272*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm1 273*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm4, %xmm0, %xmm0 274*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm0, %xmm4 275*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm1 276*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm4, %xmm0, %xmm0 277*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 278*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 279*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 280*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 281*9880d681SAndroid Build Coastguard Worker; 282*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v32i8: 283*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 284*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $5, %ymm1, %ymm1 285*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 286*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 287*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $4, %ymm3, %ymm4 288*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 289*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $2, %ymm3, %ymm4 290*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm2, %ymm2, %ymm2 291*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 292*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $1, %ymm3, %ymm4 293*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm2, %ymm2, %ymm2 294*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm2 295*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm2, %ymm2 296*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 297*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 298*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $4, %ymm0, %ymm3 299*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 300*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $2, %ymm0, %ymm3 301*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm1, %ymm1, %ymm1 302*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 303*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $1, %ymm0, %ymm3 304*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm1, %ymm1, %ymm1 305*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 306*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 307*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 308*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 309*9880d681SAndroid Build Coastguard Worker; 310*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v32i8: 311*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 312*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 313*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 314*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubb %xmm2, %xmm3, %xmm2 315*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 316*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshab %xmm2, %xmm4, %xmm2 317*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubb %xmm1, %xmm3, %xmm1 318*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshab %xmm1, %xmm0, %xmm0 319*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 320*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 321*9880d681SAndroid Build Coastguard Worker; 322*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v32i8: 323*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 324*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 325*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3 326*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubb %xmm2, %xmm3, %xmm2 327*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm4 328*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshab %xmm2, %xmm4, %xmm2 329*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubb %xmm1, %xmm3, %xmm1 330*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshab %xmm1, %xmm0, %xmm0 331*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 332*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 333*9880d681SAndroid Build Coastguard Worker; 334*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v32i8: 335*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 336*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllw $5, %ymm1, %ymm1 337*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 338*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 339*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %ymm3, %ymm4 340*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 341*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %ymm3, %ymm4 342*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm2, %ymm2, %ymm2 343*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 344*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %ymm3, %ymm4 345*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm2, %ymm2, %ymm2 346*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm2 347*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %ymm2, %ymm2 348*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 349*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 350*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %ymm0, %ymm3 351*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 352*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %ymm0, %ymm3 353*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm1, %ymm1, %ymm1 354*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 355*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %ymm0, %ymm3 356*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm1, %ymm1, %ymm1 357*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 358*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %ymm0, %ymm0 359*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 360*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 361*9880d681SAndroid Build Coastguard Worker %shift = ashr <32 x i8> %a, %b 362*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %shift 363*9880d681SAndroid Build Coastguard Worker} 364*9880d681SAndroid Build Coastguard Worker 365*9880d681SAndroid Build Coastguard Worker; 366*9880d681SAndroid Build Coastguard Worker; Uniform Variable Shifts 367*9880d681SAndroid Build Coastguard Worker; 368*9880d681SAndroid Build Coastguard Worker 369*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splatvar_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind { 370*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v4i64: 371*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 373*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm1, %xmm2, %xmm2 374*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 375*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm1, %xmm3, %xmm3 376*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm3, %xmm3 377*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm2, %xmm3, %xmm3 378*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm1, %xmm0, %xmm0 379*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0 380*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm2, %xmm0, %xmm0 381*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm0 382*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 383*9880d681SAndroid Build Coastguard Worker; 384*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v4i64: 385*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq %xmm1, %ymm2, %ymm2 388*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq %xmm1, %ymm0, %ymm0 389*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0 390*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm2, %ymm0, %ymm0 391*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 392*9880d681SAndroid Build Coastguard Worker; 393*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v4i64: 394*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 395*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vmovddup {{.*#+}} xmm1 = xmm1[0,0] 396*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 397*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubq %xmm1, %xmm2, %xmm1 398*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 399*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaq %xmm1, %xmm2, %xmm2 400*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaq %xmm1, %xmm0, %xmm0 401*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 402*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 403*9880d681SAndroid Build Coastguard Worker; 404*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v4i64: 405*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 406*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 407*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrlq %xmm1, %ymm2, %ymm2 408*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrlq %xmm1, %ymm0, %ymm0 409*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0 410*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubq %ymm2, %ymm0, %ymm0 411*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 412*9880d681SAndroid Build Coastguard Worker; 413*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v4i64: 414*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 415*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 416*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq %xmm1, %ymm2, %ymm2 417*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq %xmm1, %ymm0, %ymm0 418*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm0 419*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %ymm2, %ymm0, %ymm0 420*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 421*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> zeroinitializer 422*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i64> %a, %splat 423*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 424*9880d681SAndroid Build Coastguard Worker} 425*9880d681SAndroid Build Coastguard Worker 426*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @splatvar_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind { 427*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v8i32: 428*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 429*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 430*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7] 431*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 432*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm1, %xmm2, %xmm2 433*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm1, %xmm0, %xmm0 434*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 435*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 436*9880d681SAndroid Build Coastguard Worker; 437*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v8i32: 438*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 439*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 440*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7] 441*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrad %xmm1, %ymm0, %ymm0 442*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 443*9880d681SAndroid Build Coastguard Worker; 444*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v8i32: 445*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 446*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 447*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7] 448*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 449*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsrad %xmm1, %xmm2, %xmm2 450*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsrad %xmm1, %xmm0, %xmm0 451*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 452*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 453*9880d681SAndroid Build Coastguard Worker; 454*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v8i32: 455*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 456*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 457*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7] 458*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrad %xmm1, %ymm0, %ymm0 459*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 460*9880d681SAndroid Build Coastguard Worker; 461*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v8i32: 462*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 463*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vxorps %xmm2, %xmm2, %xmm2 464*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovss {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3] 465*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrad %xmm1, %ymm0, %ymm0 466*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 467*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <8 x i32> %b, <8 x i32> undef, <8 x i32> zeroinitializer 468*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i32> %a, %splat 469*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 470*9880d681SAndroid Build Coastguard Worker} 471*9880d681SAndroid Build Coastguard Worker 472*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @splatvar_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind { 473*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v16i16: 474*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %xmm1, %eax 477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movzwl %ax, %eax 478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovd %eax, %xmm1 479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw %xmm1, %xmm2, %xmm2 480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw %xmm1, %xmm0, %xmm0 481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 483*9880d681SAndroid Build Coastguard Worker; 484*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v16i16: 485*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 486*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm1, %eax 487*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: movzwl %ax, %eax 488*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %eax, %xmm1 489*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw %xmm1, %ymm0, %ymm0 490*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 491*9880d681SAndroid Build Coastguard Worker; 492*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v16i16: 493*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 494*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 495*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vmovd %xmm1, %eax 496*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: movzwl %ax, %eax 497*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vmovd %eax, %xmm1 498*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsraw %xmm1, %xmm2, %xmm2 499*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsraw %xmm1, %xmm0, %xmm0 500*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 501*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 502*9880d681SAndroid Build Coastguard Worker; 503*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v16i16: 504*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 505*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vmovd %xmm1, %eax 506*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: movzwl %ax, %eax 507*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vmovd %eax, %xmm1 508*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsraw %xmm1, %ymm0, %ymm0 509*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 510*9880d681SAndroid Build Coastguard Worker; 511*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v16i16: 512*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %xmm1, %eax 514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: movzwl %ax, %eax 515*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovd %eax, %xmm1 516*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw %xmm1, %ymm0, %ymm0 517*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 518*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <16 x i16> %b, <16 x i16> undef, <16 x i32> zeroinitializer 519*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i16> %a, %splat 520*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 521*9880d681SAndroid Build Coastguard Worker} 522*9880d681SAndroid Build Coastguard Worker 523*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @splatvar_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind { 524*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v32i8: 525*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 526*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 527*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 528*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1 529*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 530*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 531*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15] 532*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm4, %xmm5 533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm4, %xmm4 534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm4, %xmm5 535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm6 536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm5, %xmm4, %xmm4 537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm4, %xmm5 538*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm6, %xmm6, %xmm9 539*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm9, %xmm5, %xmm4, %xmm4 540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm4, %xmm8 541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm1 = 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] 542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm3 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7] 543*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm3, %xmm5 544*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm5, %xmm3, %xmm3 545*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm3, %xmm5 546*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm4 547*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm5, %xmm3, %xmm3 548*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm3, %xmm5 549*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm4, %xmm4, %xmm7 550*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm7, %xmm5, %xmm3, %xmm3 551*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm3, %xmm3 552*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm8, %xmm3, %xmm8 553*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 554*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm5, %xmm3 555*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm3, %xmm5, %xmm2 556*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm2, %xmm3 557*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm3, %xmm2, %xmm2 558*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm2, %xmm3 559*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm9, %xmm3, %xmm2, %xmm2 560*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 561*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 562*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm0, %xmm3 563*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 564*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm0, %xmm1 565*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm1, %xmm0, %xmm0 566*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm0, %xmm1 567*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm7, %xmm1, %xmm0, %xmm0 568*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 569*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 570*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm8, %ymm0, %ymm0 571*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 572*9880d681SAndroid Build Coastguard Worker; 573*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v32i8: 574*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 575*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastb %xmm1, %ymm1 576*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $5, %ymm1, %ymm1 577*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 578*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 579*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $4, %ymm3, %ymm4 580*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 581*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $2, %ymm3, %ymm4 582*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm2, %ymm2, %ymm2 583*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 584*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $1, %ymm3, %ymm4 585*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm2, %ymm2, %ymm2 586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm2 587*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm2, %ymm2 588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $4, %ymm0, %ymm3 591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 592*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $2, %ymm0, %ymm3 593*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm1, %ymm1, %ymm1 594*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 595*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $1, %ymm0, %ymm3 596*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm1, %ymm1, %ymm1 597*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 598*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 599*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 600*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 601*9880d681SAndroid Build Coastguard Worker; 602*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v32i8: 603*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 604*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 605*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 606*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1 607*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 608*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshab %xmm1, %xmm2, %xmm2 609*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshab %xmm1, %xmm0, %xmm0 610*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 611*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 612*9880d681SAndroid Build Coastguard Worker; 613*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v32i8: 614*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 615*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpbroadcastb %xmm1, %ymm1 616*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 617*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3 618*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubb %xmm2, %xmm3, %xmm2 619*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm4 620*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshab %xmm2, %xmm4, %xmm2 621*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubb %xmm1, %xmm3, %xmm1 622*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshab %xmm1, %xmm0, %xmm0 623*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 624*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 625*9880d681SAndroid Build Coastguard Worker; 626*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v32i8: 627*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 628*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpbroadcastb %xmm1, %ymm1 629*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllw $5, %ymm1, %ymm1 630*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 631*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 632*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %ymm3, %ymm4 633*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 634*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %ymm3, %ymm4 635*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm2, %ymm2, %ymm2 636*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 637*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %ymm3, %ymm4 638*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm2, %ymm2, %ymm2 639*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm2 640*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %ymm2, %ymm2 641*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 642*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 643*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %ymm0, %ymm3 644*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 645*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %ymm0, %ymm3 646*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm1, %ymm1, %ymm1 647*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 648*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %ymm0, %ymm3 649*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm1, %ymm1, %ymm1 650*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 651*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %ymm0, %ymm0 652*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 653*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 654*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <32 x i8> %b, <32 x i8> undef, <32 x i32> zeroinitializer 655*9880d681SAndroid Build Coastguard Worker %shift = ashr <32 x i8> %a, %splat 656*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %shift 657*9880d681SAndroid Build Coastguard Worker} 658*9880d681SAndroid Build Coastguard Worker 659*9880d681SAndroid Build Coastguard Worker; 660*9880d681SAndroid Build Coastguard Worker; Constant Shifts 661*9880d681SAndroid Build Coastguard Worker; 662*9880d681SAndroid Build Coastguard Worker 663*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @constant_shift_v4i64(<4 x i64> %a) nounwind { 664*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v4i64: 665*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 666*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 667*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $62, %xmm1, %xmm2 668*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $31, %xmm1, %xmm1 669*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7] 670*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [4294967296,2] 671*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1 672*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm2, %xmm1, %xmm1 673*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $7, %xmm0, %xmm2 674*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $1, %xmm0, %xmm0 675*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7] 676*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [4611686018427387904,72057594037927936] 677*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0 678*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm2, %xmm0, %xmm0 679*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 680*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 681*9880d681SAndroid Build Coastguard Worker; 682*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v4i64: 683*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 684*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvq {{.*}}(%rip), %ymm0, %ymm0 685*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [4611686018427387904,72057594037927936,4294967296,2] 686*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 687*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm1, %ymm0, %ymm0 688*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 689*9880d681SAndroid Build Coastguard Worker; 690*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v4i64: 691*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 692*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 693*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubq {{.*}}(%rip), %xmm1, %xmm2 694*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 695*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaq %xmm2, %xmm3, %xmm2 696*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubq {{.*}}(%rip), %xmm1, %xmm1 697*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaq %xmm1, %xmm0, %xmm0 698*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 699*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 700*9880d681SAndroid Build Coastguard Worker; 701*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v4i64: 702*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 703*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrlvq {{.*}}(%rip), %ymm0, %ymm0 704*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [4611686018427387904,72057594037927936,4294967296,2] 705*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 706*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubq %ymm1, %ymm0, %ymm0 707*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 708*9880d681SAndroid Build Coastguard Worker; 709*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v4i64: 710*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 711*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlvq {{.*}}(%rip), %ymm0, %ymm0 712*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} ymm1 = [4611686018427387904,72057594037927936,4294967296,2] 713*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxor %ymm1, %ymm0, %ymm0 714*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %ymm1, %ymm0, %ymm0 715*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 716*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i64> %a, <i64 1, i64 7, i64 31, i64 62> 717*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 718*9880d681SAndroid Build Coastguard Worker} 719*9880d681SAndroid Build Coastguard Worker 720*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @constant_shift_v8i32(<8 x i32> %a) nounwind { 721*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v8i32: 722*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $7, %xmm0, %xmm1 724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $5, %xmm0, %xmm2 725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7] 726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $6, %xmm0, %xmm2 727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $4, %xmm0, %xmm3 728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7] 729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7] 730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $7, %xmm0, %xmm2 732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $9, %xmm0, %xmm3 733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7] 734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $8, %xmm0, %xmm0 735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7] 736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 737*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 738*9880d681SAndroid Build Coastguard Worker; 739*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v8i32: 740*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd {{.*}}(%rip), %ymm0, %ymm0 742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 743*9880d681SAndroid Build Coastguard Worker; 744*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v8i32: 745*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 746*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshad {{.*}}(%rip), %xmm0, %xmm1 747*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 748*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshad {{.*}}(%rip), %xmm0, %xmm0 749*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 750*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 751*9880d681SAndroid Build Coastguard Worker; 752*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v8i32: 753*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 754*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsravd {{.*}}(%rip), %ymm0, %ymm0 755*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 756*9880d681SAndroid Build Coastguard Worker; 757*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v8i32: 758*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 759*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsravd {{.*}}(%rip), %ymm0, %ymm0 760*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 761*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i32> %a, <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 7> 762*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 763*9880d681SAndroid Build Coastguard Worker} 764*9880d681SAndroid Build Coastguard Worker 765*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @constant_shift_v16i16(<16 x i16> %a) nounwind { 766*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v16i16: 767*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 768*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 769*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $8, %xmm1, %xmm1 770*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm1, %xmm2 771*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7] 772*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm1, %xmm2 773*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7] 774*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm1, %xmm2 775*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7] 776*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm0, %xmm2 777*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7] 778*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm0, %xmm2 779*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7] 780*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm0, %xmm2 781*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7] 782*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 783*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 784*9880d681SAndroid Build Coastguard Worker; 785*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v16i16: 786*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm2[4],ymm1[4],ymm2[5],ymm1[5],ymm2[6],ymm1[6],ymm2[7],ymm1[7],ymm2[12],ymm1[12],ymm2[13],ymm1[13],ymm2[14],ymm1[14],ymm2[15],ymm1[15] 790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15] 791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd %ymm3, %ymm4, %ymm3 792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm3, %ymm3 793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm2 = ymm2[0],ymm1[0],ymm2[1],ymm1[1],ymm2[2],ymm1[2],ymm2[3],ymm1[3],ymm2[8],ymm1[8],ymm2[9],ymm1[9],ymm2[10],ymm1[10],ymm2[11],ymm1[11] 794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11] 795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd %ymm2, %ymm0, %ymm0 796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm0, %ymm0 797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackusdw %ymm3, %ymm0, %ymm0 798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 799*9880d681SAndroid Build Coastguard Worker; 800*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v16i16: 801*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 802*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 803*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubw {{.*}}(%rip), %xmm1, %xmm2 804*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 805*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaw %xmm2, %xmm3, %xmm2 806*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubw {{.*}}(%rip), %xmm1, %xmm1 807*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaw %xmm1, %xmm0, %xmm0 808*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 809*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 810*9880d681SAndroid Build Coastguard Worker; 811*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v16i16: 812*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 813*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 814*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubw {{.*}}(%rip), %xmm1, %xmm2 815*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm3 816*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshaw %xmm2, %xmm3, %xmm2 817*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubw {{.*}}(%rip), %xmm1, %xmm1 818*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshaw %xmm1, %xmm0, %xmm0 819*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 820*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 821*9880d681SAndroid Build Coastguard Worker; 822*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v16i16: 823*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 824*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 825*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 826*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsravw %zmm1, %zmm0, %zmm0 827*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 828*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 829*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i16> %a, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15> 830*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 831*9880d681SAndroid Build Coastguard Worker} 832*9880d681SAndroid Build Coastguard Worker 833*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @constant_shift_v32i8(<32 x i8> %a) nounwind { 834*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v32i8: 835*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 836*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0] 837*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1 838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 840*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15] 841*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm4, %xmm5 842*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm4, %xmm4 843*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm4, %xmm5 844*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm6 845*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm5, %xmm4, %xmm4 846*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm4, %xmm5 847*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm6, %xmm6, %xmm9 848*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm9, %xmm5, %xmm4, %xmm4 849*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm4, %xmm8 850*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm1 = 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] 851*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm3 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7] 852*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm3, %xmm5 853*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm5, %xmm3, %xmm3 854*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm3, %xmm5 855*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm4 856*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm5, %xmm3, %xmm3 857*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm3, %xmm5 858*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm4, %xmm4, %xmm7 859*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm7, %xmm5, %xmm3, %xmm3 860*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm3, %xmm3 861*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm8, %xmm3, %xmm8 862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm5, %xmm3 864*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm3, %xmm5, %xmm2 865*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm2, %xmm3 866*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm3, %xmm2, %xmm2 867*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm2, %xmm3 868*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm9, %xmm3, %xmm2, %xmm2 869*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm0, %xmm3 872*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 873*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm0, %xmm1 874*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm1, %xmm0, %xmm0 875*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm0, %xmm1 876*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm7, %xmm1, %xmm0, %xmm0 877*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 878*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 879*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm8, %ymm0, %ymm0 880*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 881*9880d681SAndroid Build Coastguard Worker; 882*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v32i8: 883*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 884*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0] 885*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $5, %ymm1, %ymm1 886*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 887*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 888*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $4, %ymm3, %ymm4 889*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 890*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $2, %ymm3, %ymm4 891*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm2, %ymm2, %ymm2 892*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 893*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $1, %ymm3, %ymm4 894*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm2, %ymm2, %ymm2 895*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm2 896*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm2, %ymm2 897*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 898*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 899*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $4, %ymm0, %ymm3 900*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 901*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $2, %ymm0, %ymm3 902*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm1, %ymm1, %ymm1 903*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 904*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $1, %ymm0, %ymm3 905*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm1, %ymm1, %ymm1 906*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 907*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 908*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 909*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 910*9880d681SAndroid Build Coastguard Worker; 911*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v32i8: 912*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 913*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 914*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubb {{.*}}(%rip), %xmm1, %xmm1 915*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 916*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshab %xmm1, %xmm2, %xmm2 917*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshab %xmm1, %xmm0, %xmm0 918*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 919*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 920*9880d681SAndroid Build Coastguard Worker; 921*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v32i8: 922*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 923*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 924*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubb {{.*}}(%rip), %xmm1, %xmm1 925*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm2 926*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshab %xmm1, %xmm2, %xmm2 927*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshab %xmm1, %xmm0, %xmm0 928*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 929*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 930*9880d681SAndroid Build Coastguard Worker; 931*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v32i8: 932*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 933*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0] 934*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllw $5, %ymm1, %ymm1 935*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 936*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 937*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %ymm3, %ymm4 938*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 939*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %ymm3, %ymm4 940*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm2, %ymm2, %ymm2 941*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 942*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %ymm3, %ymm4 943*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm2, %ymm2, %ymm2 944*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm2 945*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %ymm2, %ymm2 946*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 947*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 948*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %ymm0, %ymm3 949*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 950*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %ymm0, %ymm3 951*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm1, %ymm1, %ymm1 952*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 953*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %ymm0, %ymm3 954*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %ymm1, %ymm1, %ymm1 955*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 956*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %ymm0, %ymm0 957*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 958*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 959*9880d681SAndroid Build Coastguard Worker %shift = ashr <32 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0> 960*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %shift 961*9880d681SAndroid Build Coastguard Worker} 962*9880d681SAndroid Build Coastguard Worker 963*9880d681SAndroid Build Coastguard Worker; 964*9880d681SAndroid Build Coastguard Worker; Uniform Constant Shifts 965*9880d681SAndroid Build Coastguard Worker; 966*9880d681SAndroid Build Coastguard Worker 967*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splatconstant_shift_v4i64(<4 x i64> %a) nounwind { 968*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v4i64: 969*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 970*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 971*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $7, %xmm1, %xmm2 972*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $7, %xmm1, %xmm1 973*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7] 974*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $7, %xmm0, %xmm2 975*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $7, %xmm0, %xmm0 976*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7] 977*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 978*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 979*9880d681SAndroid Build Coastguard Worker; 980*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v4i64: 981*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 982*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrad $7, %ymm0, %ymm1 983*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $7, %ymm0, %ymm0 984*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] 985*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 986*9880d681SAndroid Build Coastguard Worker; 987*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_shift_v4i64: 988*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 989*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 990*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubq {{.*}}(%rip), %xmm1, %xmm1 991*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 992*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaq %xmm1, %xmm2, %xmm2 993*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaq %xmm1, %xmm0, %xmm0 994*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 995*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 996*9880d681SAndroid Build Coastguard Worker; 997*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_shift_v4i64: 998*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 999*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrlq $7, %ymm0, %ymm0 1000*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm1 1001*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 1002*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubq %ymm1, %ymm0, %ymm0 1003*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 1004*9880d681SAndroid Build Coastguard Worker; 1005*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v4i64: 1006*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1007*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrad $7, %ymm0, %ymm1 1008*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $7, %ymm0, %ymm0 1009*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] 1010*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1011*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i64> %a, <i64 7, i64 7, i64 7, i64 7> 1012*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 1013*9880d681SAndroid Build Coastguard Worker} 1014*9880d681SAndroid Build Coastguard Worker 1015*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @splatconstant_shift_v8i32(<8 x i32> %a) nounwind { 1016*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v8i32: 1017*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1018*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $5, %xmm0, %xmm1 1019*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1020*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $5, %xmm0, %xmm0 1021*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1022*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1023*9880d681SAndroid Build Coastguard Worker; 1024*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v8i32: 1025*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1026*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrad $5, %ymm0, %ymm0 1027*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1028*9880d681SAndroid Build Coastguard Worker; 1029*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_shift_v8i32: 1030*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 1031*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsrad $5, %xmm0, %xmm1 1032*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1033*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsrad $5, %xmm0, %xmm0 1034*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1035*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 1036*9880d681SAndroid Build Coastguard Worker; 1037*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_shift_v8i32: 1038*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 1039*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrad $5, %ymm0, %ymm0 1040*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 1041*9880d681SAndroid Build Coastguard Worker; 1042*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v8i32: 1043*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1044*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrad $5, %ymm0, %ymm0 1045*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1046*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> 1047*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 1048*9880d681SAndroid Build Coastguard Worker} 1049*9880d681SAndroid Build Coastguard Worker 1050*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @splatconstant_shift_v16i16(<16 x i16> %a) nounwind { 1051*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v16i16: 1052*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $3, %xmm0, %xmm1 1054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $3, %xmm0, %xmm0 1056*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1057*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1058*9880d681SAndroid Build Coastguard Worker; 1059*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v16i16: 1060*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $3, %ymm0, %ymm0 1062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1063*9880d681SAndroid Build Coastguard Worker; 1064*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_shift_v16i16: 1065*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 1066*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsraw $3, %xmm0, %xmm1 1067*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1068*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsraw $3, %xmm0, %xmm0 1069*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1070*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 1071*9880d681SAndroid Build Coastguard Worker; 1072*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_shift_v16i16: 1073*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 1074*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsraw $3, %ymm0, %ymm0 1075*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 1076*9880d681SAndroid Build Coastguard Worker; 1077*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v16i16: 1078*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1079*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $3, %ymm0, %ymm0 1080*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1081*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 1082*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 1083*9880d681SAndroid Build Coastguard Worker} 1084*9880d681SAndroid Build Coastguard Worker 1085*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @splatconstant_shift_v32i8(<32 x i8> %a) nounwind { 1086*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v32i8: 1087*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1088*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 1089*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $3, %xmm1, %xmm1 1090*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31] 1091*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm1 1092*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 1093*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm1 1094*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm3, %xmm1, %xmm1 1095*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $3, %xmm0, %xmm0 1096*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0 1097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm0 1098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm3, %xmm0, %xmm0 1099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1101*9880d681SAndroid Build Coastguard Worker; 1102*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v32i8: 1103*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1104*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $3, %ymm0, %ymm0 1105*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 1106*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 1107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 1108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm0 1109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1110*9880d681SAndroid Build Coastguard Worker; 1111*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_shift_v32i8: 1112*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 1113*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 1114*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubb {{.*}}(%rip), %xmm1, %xmm1 1115*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1116*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshab %xmm1, %xmm2, %xmm2 1117*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshab %xmm1, %xmm0, %xmm0 1118*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1119*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 1120*9880d681SAndroid Build Coastguard Worker; 1121*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_shift_v32i8: 1122*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 1123*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrlw $3, %ymm0, %ymm0 1124*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 1125*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 1126*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 1127*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm0 1128*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 1129*9880d681SAndroid Build Coastguard Worker; 1130*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v32i8: 1131*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1132*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $3, %ymm0, %ymm0 1133*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 1134*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 1135*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxor %ymm1, %ymm0, %ymm0 1136*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubb %ymm1, %ymm0, %ymm0 1137*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1138*9880d681SAndroid Build Coastguard Worker %shift = ashr <32 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 1139*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %shift 1140*9880d681SAndroid Build Coastguard Worker} 1141