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-apple-darwin -mcpu=knl -mattr=+avx512dq | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512DQ 3*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 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; 6*9880d681SAndroid Build Coastguard Worker; Variable Shifts 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @var_shift_v8i64(<8 x i64> %a, <8 x i64> %b) nounwind { 10*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: var_shift_v8i64: 11*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 12*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsllvq %zmm1, %zmm0, %zmm0 13*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 14*9880d681SAndroid Build Coastguard Worker %shift = shl <8 x i64> %a, %b 15*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %shift 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @var_shift_v16i32(<16 x i32> %a, <16 x i32> %b) nounwind { 19*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: var_shift_v16i32: 20*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 21*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsllvd %zmm1, %zmm0, %zmm0 22*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 23*9880d681SAndroid Build Coastguard Worker %shift = shl <16 x i32> %a, %b 24*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %shift 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @var_shift_v32i16(<32 x i16> %a, <32 x i16> %b) nounwind { 28*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: var_shift_v32i16: 29*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 30*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpxor %ymm4, %ymm4, %ymm4 31*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhwd {{.*#+}} ymm5 = ymm2[4],ymm4[4],ymm2[5],ymm4[5],ymm2[6],ymm4[6],ymm2[7],ymm4[7],ymm2[12],ymm4[12],ymm2[13],ymm4[13],ymm2[14],ymm4[14],ymm2[15],ymm4[15] 32*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhwd {{.*#+}} ymm6 = ymm4[4],ymm0[4],ymm4[5],ymm0[5],ymm4[6],ymm0[6],ymm4[7],ymm0[7],ymm4[12],ymm0[12],ymm4[13],ymm0[13],ymm4[14],ymm0[14],ymm4[15],ymm0[15] 33*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllvd %ymm5, %ymm6, %ymm5 34*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm5, %ymm5 35*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklwd {{.*#+}} ymm2 = ymm2[0],ymm4[0],ymm2[1],ymm4[1],ymm2[2],ymm4[2],ymm2[3],ymm4[3],ymm2[8],ymm4[8],ymm2[9],ymm4[9],ymm2[10],ymm4[10],ymm2[11],ymm4[11] 36*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm4[0],ymm0[0],ymm4[1],ymm0[1],ymm4[2],ymm0[2],ymm4[3],ymm0[3],ymm4[8],ymm0[8],ymm4[9],ymm0[9],ymm4[10],ymm0[10],ymm4[11],ymm0[11] 37*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllvd %ymm2, %ymm0, %ymm0 38*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm0, %ymm0 39*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackusdw %ymm5, %ymm0, %ymm0 40*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhwd {{.*#+}} ymm2 = ymm3[4],ymm4[4],ymm3[5],ymm4[5],ymm3[6],ymm4[6],ymm3[7],ymm4[7],ymm3[12],ymm4[12],ymm3[13],ymm4[13],ymm3[14],ymm4[14],ymm3[15],ymm4[15] 41*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhwd {{.*#+}} ymm5 = ymm4[4],ymm1[4],ymm4[5],ymm1[5],ymm4[6],ymm1[6],ymm4[7],ymm1[7],ymm4[12],ymm1[12],ymm4[13],ymm1[13],ymm4[14],ymm1[14],ymm4[15],ymm1[15] 42*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllvd %ymm2, %ymm5, %ymm2 43*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm2, %ymm2 44*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklwd {{.*#+}} ymm3 = ymm3[0],ymm4[0],ymm3[1],ymm4[1],ymm3[2],ymm4[2],ymm3[3],ymm4[3],ymm3[8],ymm4[8],ymm3[9],ymm4[9],ymm3[10],ymm4[10],ymm3[11],ymm4[11] 45*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklwd {{.*#+}} ymm1 = ymm4[0],ymm1[0],ymm4[1],ymm1[1],ymm4[2],ymm1[2],ymm4[3],ymm1[3],ymm4[8],ymm1[8],ymm4[9],ymm1[9],ymm4[10],ymm1[10],ymm4[11],ymm1[11] 46*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllvd %ymm3, %ymm1, %ymm1 47*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm1, %ymm1 48*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackusdw %ymm2, %ymm1, %ymm1 49*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 50*9880d681SAndroid Build Coastguard Worker; 51*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: var_shift_v32i16: 52*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 53*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllvw %zmm1, %zmm0, %zmm0 54*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 55*9880d681SAndroid Build Coastguard Worker %shift = shl <32 x i16> %a, %b 56*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %shift 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @var_shift_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind { 60*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: var_shift_v64i8: 61*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 62*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $4, %ymm0, %ymm4 63*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm5 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240] 64*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm5, %ymm4, %ymm4 65*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $5, %ymm2, %ymm2 66*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm4, %ymm0, %ymm0 67*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $2, %ymm0, %ymm4 68*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm6 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252] 69*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm6, %ymm4, %ymm4 70*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm2, %ymm2, %ymm2 71*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm4, %ymm0, %ymm0 72*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm0, %ymm0, %ymm4 73*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm2, %ymm2, %ymm2 74*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm4, %ymm0, %ymm0 75*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $4, %ymm1, %ymm2 76*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm5, %ymm2, %ymm2 77*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $5, %ymm3, %ymm3 78*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm1 79*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $2, %ymm1, %ymm2 80*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm6, %ymm2, %ymm2 81*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm3, %ymm3, %ymm3 82*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm1 83*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm1, %ymm1, %ymm2 84*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm3, %ymm3, %ymm3 85*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm1 86*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 87*9880d681SAndroid Build Coastguard Worker %shift = shl <64 x i8> %a, %b 88*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %shift 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker; 92*9880d681SAndroid Build Coastguard Worker; Uniform Variable Shifts 93*9880d681SAndroid Build Coastguard Worker; 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @splatvar_shift_v8i64(<8 x i64> %a, <8 x i64> %b) nounwind { 96*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splatvar_shift_v8i64: 97*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 98*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsllq %xmm1, %zmm0, %zmm0 99*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 100*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <8 x i64> %b, <8 x i64> undef, <8 x i32> zeroinitializer 101*9880d681SAndroid Build Coastguard Worker %shift = shl <8 x i64> %a, %splat 102*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %shift 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @splatvar_shift_v16i32(<16 x i32> %a, <16 x i32> %b) nounwind { 106*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splatvar_shift_v16i32: 107*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 108*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vxorps %xmm2, %xmm2, %xmm2 109*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovss {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3] 110*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpslld %xmm1, %zmm0, %zmm0 111*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 112*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <16 x i32> %b, <16 x i32> undef, <16 x i32> zeroinitializer 113*9880d681SAndroid Build Coastguard Worker %shift = shl <16 x i32> %a, %splat 114*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %shift 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @splatvar_shift_v32i16(<32 x i16> %a, <32 x i16> %b) nounwind { 118*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: splatvar_shift_v32i16: 119*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 120*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovd %xmm2, %eax 121*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: movzwl %ax, %eax 122*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovd %eax, %xmm2 123*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw %xmm2, %ymm0, %ymm0 124*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw %xmm2, %ymm1, %ymm1 125*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 126*9880d681SAndroid Build Coastguard Worker; 127*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: splatvar_shift_v32i16: 128*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 129*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovd %xmm1, %eax 130*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: movzwl %ax, %eax 131*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovd %eax, %xmm1 132*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllw %xmm1, %zmm0, %zmm0 133*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 134*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <32 x i16> %b, <32 x i16> undef, <32 x i32> zeroinitializer 135*9880d681SAndroid Build Coastguard Worker %shift = shl <32 x i16> %a, %splat 136*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %shift 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @splatvar_shift_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind { 140*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: splatvar_shift_v64i8: 141*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 142*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpbroadcastb %xmm2, %ymm2 143*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $4, %ymm0, %ymm3 144*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm4 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240] 145*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm4, %ymm3, %ymm3 146*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $5, %ymm2, %ymm2 147*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm3, %ymm0, %ymm0 148*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $2, %ymm0, %ymm3 149*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm5 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252] 150*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm5, %ymm3, %ymm3 151*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm2, %ymm2, %ymm6 152*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm6, %ymm3, %ymm0, %ymm0 153*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm0, %ymm0, %ymm3 154*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm6, %ymm6, %ymm7 155*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm7, %ymm3, %ymm0, %ymm0 156*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $4, %ymm1, %ymm3 157*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm4, %ymm3, %ymm3 158*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm3, %ymm1, %ymm1 159*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $2, %ymm1, %ymm2 160*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm5, %ymm2, %ymm2 161*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm6, %ymm2, %ymm1, %ymm1 162*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm1, %ymm1, %ymm2 163*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm7, %ymm2, %ymm1, %ymm1 164*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <64 x i8> %b, <64 x i8> undef, <64 x i32> zeroinitializer 167*9880d681SAndroid Build Coastguard Worker %shift = shl <64 x i8> %a, %splat 168*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %shift 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker; 172*9880d681SAndroid Build Coastguard Worker; Constant Shifts 173*9880d681SAndroid Build Coastguard Worker; 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @constant_shift_v8i64(<8 x i64> %a) nounwind { 176*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: constant_shift_v8i64: 177*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 178*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsllvq {{.*}}(%rip), %zmm0, %zmm0 179*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 180*9880d681SAndroid Build Coastguard Worker %shift = shl <8 x i64> %a, <i64 1, i64 7, i64 31, i64 62, i64 1, i64 7, i64 31, i64 62> 181*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %shift 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @constant_shift_v16i32(<16 x i32> %a) nounwind { 185*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: constant_shift_v16i32: 186*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 187*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsllvd {{.*}}(%rip), %zmm0, %zmm0 188*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 189*9880d681SAndroid Build Coastguard Worker %shift = shl <16 x i32> %a, <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 7, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 7> 190*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %shift 191*9880d681SAndroid Build Coastguard Worker} 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @constant_shift_v32i16(<32 x i16> %a) nounwind { 194*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: constant_shift_v32i16: 195*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 196*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm2 = [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768] 197*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpmullw %ymm2, %ymm0, %ymm0 198*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpmullw %ymm2, %ymm1, %ymm1 199*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 200*9880d681SAndroid Build Coastguard Worker; 201*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: constant_shift_v32i16: 202*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 203*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllvw {{.*}}(%rip), %zmm0, %zmm0 204*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 205*9880d681SAndroid Build Coastguard Worker %shift = shl <32 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, 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> 206*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %shift 207*9880d681SAndroid Build Coastguard Worker} 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @constant_shift_v64i8(<64 x i8> %a) nounwind { 210*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: constant_shift_v64i8: 211*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 212*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $4, %ymm0, %ymm2 213*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm3 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240] 214*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm3, %ymm2, %ymm2 215*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm4 = [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] 216*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $5, %ymm4, %ymm4 217*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm4, %ymm2, %ymm0, %ymm0 218*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $2, %ymm0, %ymm2 219*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm5 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252] 220*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm5, %ymm2, %ymm2 221*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm4, %ymm4, %ymm6 222*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm6, %ymm2, %ymm0, %ymm0 223*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm0, %ymm0, %ymm2 224*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm6, %ymm6, %ymm7 225*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm7, %ymm2, %ymm0, %ymm0 226*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $4, %ymm1, %ymm2 227*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm3, %ymm2, %ymm2 228*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm4, %ymm2, %ymm1, %ymm1 229*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $2, %ymm1, %ymm2 230*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm5, %ymm2, %ymm2 231*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm6, %ymm2, %ymm1, %ymm1 232*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddb %ymm1, %ymm1, %ymm2 233*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm7, %ymm2, %ymm1, %ymm1 234*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 235*9880d681SAndroid Build Coastguard Worker %shift = shl <64 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, 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> 236*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %shift 237*9880d681SAndroid Build Coastguard Worker} 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Worker; 240*9880d681SAndroid Build Coastguard Worker; Uniform Constant Shifts 241*9880d681SAndroid Build Coastguard Worker; 242*9880d681SAndroid Build Coastguard Worker 243*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @splatconstant_shift_v8i64(<8 x i64> %a) nounwind { 244*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splatconstant_shift_v8i64: 245*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 246*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsllq $7, %zmm0, %zmm0 247*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 248*9880d681SAndroid Build Coastguard Worker %shift = shl <8 x i64> %a, <i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7> 249*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %shift 250*9880d681SAndroid Build Coastguard Worker} 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @splatconstant_shift_v16i32(<16 x i32> %a) nounwind { 253*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splatconstant_shift_v16i32: 254*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 255*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpslld $5, %zmm0, %zmm0 256*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 257*9880d681SAndroid Build Coastguard Worker %shift = shl <16 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> 258*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %shift 259*9880d681SAndroid Build Coastguard Worker} 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @splatconstant_shift_v32i16(<32 x i16> %a) nounwind { 262*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: splatconstant_shift_v32i16: 263*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 264*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $3, %ymm0, %ymm0 265*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $3, %ymm1, %ymm1 266*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 267*9880d681SAndroid Build Coastguard Worker; 268*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: splatconstant_shift_v32i16: 269*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 270*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllw $3, %zmm0, %zmm0 271*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 272*9880d681SAndroid Build Coastguard Worker %shift = shl <32 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, 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> 273*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %shift 274*9880d681SAndroid Build Coastguard Worker} 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @splatconstant_shift_v64i8(<64 x i8> %a) nounwind { 277*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: splatconstant_shift_v64i8: 278*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 279*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $3, %ymm0, %ymm0 280*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm2 = [248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248] 281*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm2, %ymm0, %ymm0 282*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $3, %ymm1, %ymm1 283*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm2, %ymm1, %ymm1 284*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 285*9880d681SAndroid Build Coastguard Worker; 286*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: splatconstant_shift_v64i8: 287*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 288*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsllw $3, %zmm0, %zmm0 289*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0 290*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 291*9880d681SAndroid Build Coastguard Worker %shift = shl <64 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, 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> 292*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %shift 293*9880d681SAndroid Build Coastguard Worker} 294