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