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