xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shift-ashr-512.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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