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; Variable Shifts 6*9880d681SAndroid Build Coastguard Worker; 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @var_shift_v8i64(<8 x i64> %a, <8 x i64> %b) nounwind { 9*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: var_shift_v8i64: 10*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 11*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsravq %zmm1, %zmm0, %zmm0 12*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 13*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i64> %a, %b 14*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %shift 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @var_shift_v16i32(<16 x i32> %a, <16 x i32> %b) nounwind { 18*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: var_shift_v16i32: 19*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 20*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsravd %zmm1, %zmm0, %zmm0 21*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 22*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i32> %a, %b 23*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %shift 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @var_shift_v32i16(<32 x i16> %a, <32 x i16> %b) nounwind { 27*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: var_shift_v32i16: 28*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 29*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpxor %ymm4, %ymm4, %ymm4 30*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] 31*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] 32*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsravd %ymm5, %ymm6, %ymm5 33*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm5, %ymm5 34*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] 35*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] 36*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsravd %ymm2, %ymm0, %ymm0 37*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm0, %ymm0 38*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackusdw %ymm5, %ymm0, %ymm0 39*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] 40*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] 41*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsravd %ymm2, %ymm5, %ymm2 42*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm2, %ymm2 43*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] 44*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] 45*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsravd %ymm3, %ymm1, %ymm1 46*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm1, %ymm1 47*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackusdw %ymm2, %ymm1, %ymm1 48*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 49*9880d681SAndroid Build Coastguard Worker; 50*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: var_shift_v32i16: 51*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 52*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsravw %zmm1, %zmm0, %zmm0 53*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 54*9880d681SAndroid Build Coastguard Worker %shift = ashr <32 x i16> %a, %b 55*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %shift 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @var_shift_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind { 59*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: var_shift_v64i8: 60*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 61*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $5, %ymm2, %ymm2 62*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm4 = ymm0[8],ymm2[8],ymm0[9],ymm2[9],ymm0[10],ymm2[10],ymm0[11],ymm2[11],ymm0[12],ymm2[12],ymm0[13],ymm2[13],ymm0[14],ymm2[14],ymm0[15],ymm2[15],ymm0[24],ymm2[24],ymm0[25],ymm2[25],ymm0[26],ymm2[26],ymm0[27],ymm2[27],ymm0[28],ymm2[28],ymm0[29],ymm2[29],ymm0[30],ymm2[30],ymm0[31],ymm2[31] 63*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm5 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 64*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm5, %ymm6 65*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm4, %ymm6, %ymm5, %ymm5 66*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm5, %ymm6 67*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm4, %ymm4, %ymm4 68*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm4, %ymm6, %ymm5, %ymm5 69*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm5, %ymm6 70*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm4, %ymm4, %ymm4 71*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm4, %ymm6, %ymm5, %ymm4 72*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm4, %ymm4 73*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm2 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[4],ymm2[4],ymm0[5],ymm2[5],ymm0[6],ymm2[6],ymm0[7],ymm2[7],ymm0[16],ymm2[16],ymm0[17],ymm2[17],ymm0[18],ymm2[18],ymm0[19],ymm2[19],ymm0[20],ymm2[20],ymm0[21],ymm2[21],ymm0[22],ymm2[22],ymm0[23],ymm2[23] 74*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 75*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm0, %ymm5 76*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm5, %ymm0, %ymm0 77*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm0, %ymm5 78*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm2, %ymm2, %ymm2 79*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm5, %ymm0, %ymm0 80*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm0, %ymm5 81*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm2, %ymm2, %ymm2 82*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm5, %ymm0, %ymm0 83*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm0, %ymm0 84*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackuswb %ymm4, %ymm0, %ymm0 85*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $5, %ymm3, %ymm2 86*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8],ymm2[8],ymm0[9],ymm2[9],ymm0[10],ymm2[10],ymm0[11],ymm2[11],ymm0[12],ymm2[12],ymm0[13],ymm2[13],ymm0[14],ymm2[14],ymm0[15],ymm2[15],ymm0[24],ymm2[24],ymm0[25],ymm2[25],ymm0[26],ymm2[26],ymm0[27],ymm2[27],ymm0[28],ymm2[28],ymm0[29],ymm2[29],ymm0[30],ymm2[30],ymm0[31],ymm2[31] 87*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm4 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 88*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm4, %ymm5 89*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm4 90*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm4, %ymm5 91*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm3, %ymm3, %ymm3 92*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm4 93*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm4, %ymm5 94*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm3, %ymm3, %ymm3 95*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm3 96*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm3, %ymm3 97*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm2 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[4],ymm2[4],ymm0[5],ymm2[5],ymm0[6],ymm2[6],ymm0[7],ymm2[7],ymm0[16],ymm2[16],ymm0[17],ymm2[17],ymm0[18],ymm2[18],ymm0[19],ymm2[19],ymm0[20],ymm2[20],ymm0[21],ymm2[21],ymm0[22],ymm2[22],ymm0[23],ymm2[23] 98*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 99*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm1, %ymm4 100*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm4, %ymm1, %ymm1 101*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm1, %ymm4 102*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm2, %ymm2, %ymm2 103*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm4, %ymm1, %ymm1 104*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm1, %ymm4 105*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm2, %ymm2, %ymm2 106*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm4, %ymm1, %ymm1 107*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm1, %ymm1 108*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackuswb %ymm3, %ymm1, %ymm1 109*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 110*9880d681SAndroid Build Coastguard Worker %shift = ashr <64 x i8> %a, %b 111*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %shift 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker; 115*9880d681SAndroid Build Coastguard Worker; Uniform Variable Shifts 116*9880d681SAndroid Build Coastguard Worker; 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @splatvar_shift_v8i64(<8 x i64> %a, <8 x i64> %b) nounwind { 119*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splatvar_shift_v8i64: 120*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 121*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsraq %xmm1, %zmm0, %zmm0 122*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 123*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <8 x i64> %b, <8 x i64> undef, <8 x i32> zeroinitializer 124*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i64> %a, %splat 125*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %shift 126*9880d681SAndroid Build Coastguard Worker} 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @splatvar_shift_v16i32(<16 x i32> %a, <16 x i32> %b) nounwind { 129*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splatvar_shift_v16i32: 130*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 131*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vxorps %xmm2, %xmm2, %xmm2 132*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovss {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3] 133*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsrad %xmm1, %zmm0, %zmm0 134*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 135*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <16 x i32> %b, <16 x i32> undef, <16 x i32> zeroinitializer 136*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i32> %a, %splat 137*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %shift 138*9880d681SAndroid Build Coastguard Worker} 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @splatvar_shift_v32i16(<32 x i16> %a, <32 x i16> %b) nounwind { 141*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: splatvar_shift_v32i16: 142*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 143*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovd %xmm2, %eax 144*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: movzwl %ax, %eax 145*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovd %eax, %xmm2 146*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw %xmm2, %ymm0, %ymm0 147*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw %xmm2, %ymm1, %ymm1 148*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 149*9880d681SAndroid Build Coastguard Worker; 150*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: splatvar_shift_v32i16: 151*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 152*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovd %xmm1, %eax 153*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: movzwl %ax, %eax 154*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovd %eax, %xmm1 155*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsraw %xmm1, %zmm0, %zmm0 156*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 157*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <32 x i16> %b, <32 x i16> undef, <32 x i32> zeroinitializer 158*9880d681SAndroid Build Coastguard Worker %shift = ashr <32 x i16> %a, %splat 159*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %shift 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @splatvar_shift_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind { 163*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: splatvar_shift_v64i8: 164*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 165*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpbroadcastb %xmm2, %ymm2 166*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $5, %ymm2, %ymm2 167*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8],ymm2[8],ymm0[9],ymm2[9],ymm0[10],ymm2[10],ymm0[11],ymm2[11],ymm0[12],ymm2[12],ymm0[13],ymm2[13],ymm0[14],ymm2[14],ymm0[15],ymm2[15],ymm0[24],ymm2[24],ymm0[25],ymm2[25],ymm0[26],ymm2[26],ymm0[27],ymm2[27],ymm0[28],ymm2[28],ymm0[29],ymm2[29],ymm0[30],ymm2[30],ymm0[31],ymm2[31] 168*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm4 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 169*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm4, %ymm5 170*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm4 171*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm4, %ymm5 172*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm3, %ymm3, %ymm6 173*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm6, %ymm5, %ymm4, %ymm4 174*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm4, %ymm5 175*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm6, %ymm6, %ymm7 176*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm7, %ymm5, %ymm4, %ymm4 177*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm4, %ymm4 178*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm2 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[4],ymm2[4],ymm0[5],ymm2[5],ymm0[6],ymm2[6],ymm0[7],ymm2[7],ymm0[16],ymm2[16],ymm0[17],ymm2[17],ymm0[18],ymm2[18],ymm0[19],ymm2[19],ymm0[20],ymm2[20],ymm0[21],ymm2[21],ymm0[22],ymm2[22],ymm0[23],ymm2[23] 179*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 180*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm0, %ymm5 181*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm5, %ymm0, %ymm0 182*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm0, %ymm5 183*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm2, %ymm2, %ymm8 184*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm8, %ymm5, %ymm0, %ymm0 185*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm0, %ymm5 186*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm8, %ymm8, %ymm9 187*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm9, %ymm5, %ymm0, %ymm0 188*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm0, %ymm0 189*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackuswb %ymm4, %ymm0, %ymm0 190*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm4 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 191*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm4, %ymm5 192*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm3 193*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm3, %ymm4 194*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm6, %ymm4, %ymm3, %ymm3 195*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm3, %ymm4 196*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm7, %ymm4, %ymm3, %ymm3 197*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm3, %ymm3 198*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 199*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm1, %ymm4 200*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm4, %ymm1, %ymm1 201*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm1, %ymm2 202*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm8, %ymm2, %ymm1, %ymm1 203*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm1, %ymm2 204*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm9, %ymm2, %ymm1, %ymm1 205*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm1, %ymm1 206*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackuswb %ymm3, %ymm1, %ymm1 207*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 208*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <64 x i8> %b, <64 x i8> undef, <64 x i32> zeroinitializer 209*9880d681SAndroid Build Coastguard Worker %shift = ashr <64 x i8> %a, %splat 210*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %shift 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Worker; 214*9880d681SAndroid Build Coastguard Worker; Constant Shifts 215*9880d681SAndroid Build Coastguard Worker; 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @constant_shift_v8i64(<8 x i64> %a) nounwind { 218*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: constant_shift_v8i64: 219*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 220*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsravq {{.*}}(%rip), %zmm0, %zmm0 221*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 222*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i64> %a, <i64 1, i64 7, i64 31, i64 62, i64 1, i64 7, i64 31, i64 62> 223*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %shift 224*9880d681SAndroid Build Coastguard Worker} 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @constant_shift_v16i32(<16 x i32> %a) nounwind { 227*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: constant_shift_v16i32: 228*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 229*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsravd {{.*}}(%rip), %zmm0, %zmm0 230*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 231*9880d681SAndroid Build Coastguard Worker %shift = ashr <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> 232*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %shift 233*9880d681SAndroid Build Coastguard Worker} 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @constant_shift_v32i16(<32 x i16> %a) nounwind { 236*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: constant_shift_v32i16: 237*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 238*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpxor %ymm2, %ymm2, %ymm2 239*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 240*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm3[4],ymm2[4],ymm3[5],ymm2[5],ymm3[6],ymm2[6],ymm3[7],ymm2[7],ymm3[12],ymm2[12],ymm3[13],ymm2[13],ymm3[14],ymm2[14],ymm3[15],ymm2[15] 241*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhwd {{.*#+}} ymm5 = 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] 242*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsravd %ymm4, %ymm5, %ymm5 243*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm5, %ymm5 244*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklwd {{.*#+}} ymm3 = ymm3[0],ymm2[0],ymm3[1],ymm2[1],ymm3[2],ymm2[2],ymm3[3],ymm2[3],ymm3[8],ymm2[8],ymm3[9],ymm2[9],ymm3[10],ymm2[10],ymm3[11],ymm2[11] 245*9880d681SAndroid Build Coastguard Worker; AVX512DQ-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] 246*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsravd %ymm3, %ymm0, %ymm0 247*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm0, %ymm0 248*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackusdw %ymm5, %ymm0, %ymm0 249*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhwd {{.*#+}} ymm5 = ymm2[4],ymm1[4],ymm2[5],ymm1[5],ymm2[6],ymm1[6],ymm2[7],ymm1[7],ymm2[12],ymm1[12],ymm2[13],ymm1[13],ymm2[14],ymm1[14],ymm2[15],ymm1[15] 250*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsravd %ymm4, %ymm5, %ymm4 251*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm4, %ymm4 252*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklwd {{.*#+}} ymm1 = ymm2[0],ymm1[0],ymm2[1],ymm1[1],ymm2[2],ymm1[2],ymm2[3],ymm1[3],ymm2[8],ymm1[8],ymm2[9],ymm1[9],ymm2[10],ymm1[10],ymm2[11],ymm1[11] 253*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsravd %ymm3, %ymm1, %ymm1 254*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrld $16, %ymm1, %ymm1 255*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackusdw %ymm4, %ymm1, %ymm1 256*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 257*9880d681SAndroid Build Coastguard Worker; 258*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: constant_shift_v32i16: 259*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 260*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsravw {{.*}}(%rip), %zmm0, %zmm0 261*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 262*9880d681SAndroid Build Coastguard Worker %shift = ashr <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> 263*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %shift 264*9880d681SAndroid Build Coastguard Worker} 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @constant_shift_v64i8(<64 x i8> %a) nounwind { 267*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: constant_shift_v64i8: 268*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 269*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm2 = [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] 270*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsllw $5, %ymm2, %ymm2 271*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8],ymm2[8],ymm0[9],ymm2[9],ymm0[10],ymm2[10],ymm0[11],ymm2[11],ymm0[12],ymm2[12],ymm0[13],ymm2[13],ymm0[14],ymm2[14],ymm0[15],ymm2[15],ymm0[24],ymm2[24],ymm0[25],ymm2[25],ymm0[26],ymm2[26],ymm0[27],ymm2[27],ymm0[28],ymm2[28],ymm0[29],ymm2[29],ymm0[30],ymm2[30],ymm0[31],ymm2[31] 272*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm4 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 273*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm4, %ymm5 274*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm4 275*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm4, %ymm5 276*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm3, %ymm3, %ymm6 277*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm6, %ymm5, %ymm4, %ymm4 278*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm4, %ymm5 279*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm6, %ymm6, %ymm7 280*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm7, %ymm5, %ymm4, %ymm4 281*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm4, %ymm4 282*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm2 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[4],ymm2[4],ymm0[5],ymm2[5],ymm0[6],ymm2[6],ymm0[7],ymm2[7],ymm0[16],ymm2[16],ymm0[17],ymm2[17],ymm0[18],ymm2[18],ymm0[19],ymm2[19],ymm0[20],ymm2[20],ymm0[21],ymm2[21],ymm0[22],ymm2[22],ymm0[23],ymm2[23] 283*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 284*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm0, %ymm5 285*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm5, %ymm0, %ymm0 286*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm0, %ymm5 287*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm2, %ymm2, %ymm8 288*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm8, %ymm5, %ymm0, %ymm0 289*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm0, %ymm5 290*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpaddw %ymm8, %ymm8, %ymm9 291*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm9, %ymm5, %ymm0, %ymm0 292*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm0, %ymm0 293*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackuswb %ymm4, %ymm0, %ymm0 294*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpckhbw {{.*#+}} ymm4 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 295*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm4, %ymm5 296*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm3, %ymm5, %ymm4, %ymm3 297*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm3, %ymm4 298*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm6, %ymm4, %ymm3, %ymm3 299*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm3, %ymm4 300*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm7, %ymm4, %ymm3, %ymm3 301*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm3, %ymm3 302*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 303*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $4, %ymm1, %ymm4 304*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm2, %ymm4, %ymm1, %ymm1 305*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $2, %ymm1, %ymm2 306*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm8, %ymm2, %ymm1, %ymm1 307*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $1, %ymm1, %ymm2 308*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpblendvb %ymm9, %ymm2, %ymm1, %ymm1 309*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $8, %ymm1, %ymm1 310*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpackuswb %ymm3, %ymm1, %ymm1 311*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 312*9880d681SAndroid Build Coastguard Worker %shift = ashr <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> 313*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %shift 314*9880d681SAndroid Build Coastguard Worker} 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Worker; 317*9880d681SAndroid Build Coastguard Worker; Uniform Constant Shifts 318*9880d681SAndroid Build Coastguard Worker; 319*9880d681SAndroid Build Coastguard Worker 320*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @splatconstant_shift_v8i64(<8 x i64> %a) nounwind { 321*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splatconstant_shift_v8i64: 322*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 323*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsraq $7, %zmm0, %zmm0 324*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 325*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i64> %a, <i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7> 326*9880d681SAndroid Build Coastguard Worker ret <8 x i64> %shift 327*9880d681SAndroid Build Coastguard Worker} 328*9880d681SAndroid Build Coastguard Worker 329*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @splatconstant_shift_v16i32(<16 x i32> %a) nounwind { 330*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splatconstant_shift_v16i32: 331*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 332*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsrad $5, %zmm0, %zmm0 333*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 334*9880d681SAndroid Build Coastguard Worker %shift = ashr <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> 335*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %shift 336*9880d681SAndroid Build Coastguard Worker} 337*9880d681SAndroid Build Coastguard Worker 338*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @splatconstant_shift_v32i16(<32 x i16> %a) nounwind { 339*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: splatconstant_shift_v32i16: 340*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 341*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $3, %ymm0, %ymm0 342*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsraw $3, %ymm1, %ymm1 343*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 344*9880d681SAndroid Build Coastguard Worker; 345*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: splatconstant_shift_v32i16: 346*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 347*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsraw $3, %zmm0, %zmm0 348*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 349*9880d681SAndroid Build Coastguard Worker %shift = ashr <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> 350*9880d681SAndroid Build Coastguard Worker ret <32 x i16> %shift 351*9880d681SAndroid Build Coastguard Worker} 352*9880d681SAndroid Build Coastguard Worker 353*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @splatconstant_shift_v64i8(<64 x i8> %a) nounwind { 354*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: splatconstant_shift_v64i8: 355*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 356*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $3, %ymm0, %ymm0 357*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm2 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31] 358*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm2, %ymm0, %ymm0 359*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vmovdqa {{.*#+}} ymm3 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 360*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpxor %ymm3, %ymm0, %ymm0 361*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsubb %ymm3, %ymm0, %ymm0 362*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsrlw $3, %ymm1, %ymm1 363*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpand %ymm2, %ymm1, %ymm1 364*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpxor %ymm3, %ymm1, %ymm1 365*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpsubb %ymm3, %ymm1, %ymm1 366*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 367*9880d681SAndroid Build Coastguard Worker; 368*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: splatconstant_shift_v64i8: 369*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 370*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsrlw $3, %zmm0, %zmm0 371*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0 372*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovdqu8 {{.*#+}} zmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 373*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpxorq %zmm1, %zmm0, %zmm0 374*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsubb %zmm1, %zmm0, %zmm0 375*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 376*9880d681SAndroid Build Coastguard Worker %shift = ashr <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> 377*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %shift 378*9880d681SAndroid Build Coastguard Worker} 379*9880d681SAndroid Build Coastguard Worker 380*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @ashr_const7_v64i8(<64 x i8> %a) { 381*9880d681SAndroid Build Coastguard Worker; AVX512DQ-LABEL: ashr_const7_v64i8: 382*9880d681SAndroid Build Coastguard Worker; AVX512DQ: ## BB#0: 383*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpxor %ymm2, %ymm2, %ymm2 384*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpcmpgtb %ymm0, %ymm2, %ymm0 385*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: vpcmpgtb %ymm1, %ymm2, %ymm1 386*9880d681SAndroid Build Coastguard Worker; AVX512DQ-NEXT: retq 387*9880d681SAndroid Build Coastguard Worker; 388*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: ashr_const7_v64i8: 389*9880d681SAndroid Build Coastguard Worker; AVX512BW: ## BB#0: 390*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpxord %zmm1, %zmm1, %zmm1 391*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpcmpgtb %zmm0, %zmm1, %k0 392*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovm2b %k0, %zmm0 393*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 394*9880d681SAndroid Build Coastguard Worker %res = ashr <64 x i8> %a, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7> 395*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res 396*9880d681SAndroid Build Coastguard Worker} 397