Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / X86 / gfni-rotates.ll
blob8b94a3f84cb96021455bda15596b85201bdb12d2
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2,+gfni | FileCheck %s --check-prefixes=GFNISSE
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+gfni | FileCheck %s --check-prefixes=GFNIAVX1OR2,GFNIAVX1
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+gfni | FileCheck %s --check-prefixes=GFNIAVX1OR2,GFNIAVX2
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+gfni | FileCheck %s --check-prefixes=GFNIAVX512
8 ; 128 Bit Vector Rotates
11 define <16 x i8> @splatconstant_rotl_v16i8(<16 x i8> %a) nounwind {
12 ; GFNISSE-LABEL: splatconstant_rotl_v16i8:
13 ; GFNISSE:       # %bb.0:
14 ; GFNISSE-NEXT:    movdqa %xmm0, %xmm1
15 ; GFNISSE-NEXT:    psrlw $5, %xmm1
16 ; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17 ; GFNISSE-NEXT:    psllw $3, %xmm0
18 ; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19 ; GFNISSE-NEXT:    por %xmm1, %xmm0
20 ; GFNISSE-NEXT:    retq
22 ; GFNIAVX1OR2-LABEL: splatconstant_rotl_v16i8:
23 ; GFNIAVX1OR2:       # %bb.0:
24 ; GFNIAVX1OR2-NEXT:    vpsrlw $5, %xmm0, %xmm1
25 ; GFNIAVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
26 ; GFNIAVX1OR2-NEXT:    vpsllw $3, %xmm0, %xmm0
27 ; GFNIAVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28 ; GFNIAVX1OR2-NEXT:    vpor %xmm1, %xmm0, %xmm0
29 ; GFNIAVX1OR2-NEXT:    retq
31 ; GFNIAVX512-LABEL: splatconstant_rotl_v16i8:
32 ; GFNIAVX512:       # %bb.0:
33 ; GFNIAVX512-NEXT:    vpsllw $3, %xmm0, %xmm1
34 ; GFNIAVX512-NEXT:    vpsrlw $5, %xmm0, %xmm0
35 ; GFNIAVX512-NEXT:    vpternlogd $216, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm0
36 ; GFNIAVX512-NEXT:    retq
37   %res = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %a, <16 x i8> %a, <16 x i8> <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>)
38   ret <16 x i8> %res
40 declare <16 x i8> @llvm.fshl.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)
42 define <16 x i8> @splatconstant_rotr_v16i8(<16 x i8> %a) nounwind {
43 ; GFNISSE-LABEL: splatconstant_rotr_v16i8:
44 ; GFNISSE:       # %bb.0:
45 ; GFNISSE-NEXT:    movdqa %xmm0, %xmm1
46 ; GFNISSE-NEXT:    psrlw $7, %xmm1
47 ; GFNISSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
48 ; GFNISSE-NEXT:    paddb %xmm0, %xmm0
49 ; GFNISSE-NEXT:    por %xmm1, %xmm0
50 ; GFNISSE-NEXT:    retq
52 ; GFNIAVX1OR2-LABEL: splatconstant_rotr_v16i8:
53 ; GFNIAVX1OR2:       # %bb.0:
54 ; GFNIAVX1OR2-NEXT:    vpsrlw $7, %xmm0, %xmm1
55 ; GFNIAVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
56 ; GFNIAVX1OR2-NEXT:    vpaddb %xmm0, %xmm0, %xmm0
57 ; GFNIAVX1OR2-NEXT:    vpor %xmm1, %xmm0, %xmm0
58 ; GFNIAVX1OR2-NEXT:    retq
60 ; GFNIAVX512-LABEL: splatconstant_rotr_v16i8:
61 ; GFNIAVX512:       # %bb.0:
62 ; GFNIAVX512-NEXT:    vpsrlw $7, %xmm0, %xmm1
63 ; GFNIAVX512-NEXT:    vpaddb %xmm0, %xmm0, %xmm0
64 ; GFNIAVX512-NEXT:    vpternlogd $248, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm0
65 ; GFNIAVX512-NEXT:    retq
66   %res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %a, <16 x i8> %a, <16 x i8> <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>)
67   ret <16 x i8> %res
69 declare <16 x i8> @llvm.fshr.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)
72 ; 256 Bit Vector Rotates
75 define <32 x i8> @splatconstant_rotl_v32i8(<32 x i8> %a) nounwind {
76 ; GFNISSE-LABEL: splatconstant_rotl_v32i8:
77 ; GFNISSE:       # %bb.0:
78 ; GFNISSE-NEXT:    movdqa %xmm0, %xmm2
79 ; GFNISSE-NEXT:    psrlw $4, %xmm2
80 ; GFNISSE-NEXT:    movdqa {{.*#+}} xmm3 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]
81 ; GFNISSE-NEXT:    movdqa %xmm3, %xmm4
82 ; GFNISSE-NEXT:    pandn %xmm2, %xmm4
83 ; GFNISSE-NEXT:    psllw $4, %xmm0
84 ; GFNISSE-NEXT:    pand %xmm3, %xmm0
85 ; GFNISSE-NEXT:    por %xmm4, %xmm0
86 ; GFNISSE-NEXT:    movdqa %xmm1, %xmm2
87 ; GFNISSE-NEXT:    psrlw $4, %xmm2
88 ; GFNISSE-NEXT:    psllw $4, %xmm1
89 ; GFNISSE-NEXT:    pand %xmm3, %xmm1
90 ; GFNISSE-NEXT:    pandn %xmm2, %xmm3
91 ; GFNISSE-NEXT:    por %xmm3, %xmm1
92 ; GFNISSE-NEXT:    retq
94 ; GFNIAVX1-LABEL: splatconstant_rotl_v32i8:
95 ; GFNIAVX1:       # %bb.0:
96 ; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
97 ; GFNIAVX1-NEXT:    vpsrlw $4, %xmm1, %xmm2
98 ; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]
99 ; GFNIAVX1-NEXT:    vpandn %xmm2, %xmm3, %xmm2
100 ; GFNIAVX1-NEXT:    vpsllw $4, %xmm1, %xmm1
101 ; GFNIAVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
102 ; GFNIAVX1-NEXT:    vpor %xmm2, %xmm1, %xmm1
103 ; GFNIAVX1-NEXT:    vpsrlw $4, %xmm0, %xmm2
104 ; GFNIAVX1-NEXT:    vpandn %xmm2, %xmm3, %xmm2
105 ; GFNIAVX1-NEXT:    vpsllw $4, %xmm0, %xmm0
106 ; GFNIAVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
107 ; GFNIAVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
108 ; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
109 ; GFNIAVX1-NEXT:    retq
111 ; GFNIAVX2-LABEL: splatconstant_rotl_v32i8:
112 ; GFNIAVX2:       # %bb.0:
113 ; GFNIAVX2-NEXT:    vpsrlw $4, %ymm0, %ymm1
114 ; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
115 ; GFNIAVX2-NEXT:    vpsllw $4, %ymm0, %ymm0
116 ; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
117 ; GFNIAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0
118 ; GFNIAVX2-NEXT:    retq
120 ; GFNIAVX512-LABEL: splatconstant_rotl_v32i8:
121 ; GFNIAVX512:       # %bb.0:
122 ; GFNIAVX512-NEXT:    vpsllw $4, %ymm0, %ymm1
123 ; GFNIAVX512-NEXT:    vpsrlw $4, %ymm0, %ymm0
124 ; GFNIAVX512-NEXT:    vpternlogd $216, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm1, %ymm0
125 ; GFNIAVX512-NEXT:    retq
126   %res = call <32 x i8> @llvm.fshl.v32i8(<32 x i8> %a, <32 x i8> %a, <32 x i8> <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>)
127   ret <32 x i8> %res
129 declare <32 x i8> @llvm.fshl.v32i8(<32 x i8>, <32 x i8>, <32 x i8>)
131 define <32 x i8> @splatconstant_rotr_v32i8(<32 x i8> %a) nounwind {
132 ; GFNISSE-LABEL: splatconstant_rotr_v32i8:
133 ; GFNISSE:       # %bb.0:
134 ; GFNISSE-NEXT:    movdqa %xmm0, %xmm2
135 ; GFNISSE-NEXT:    psrlw $6, %xmm2
136 ; GFNISSE-NEXT:    movdqa {{.*#+}} xmm3 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
137 ; GFNISSE-NEXT:    movdqa %xmm3, %xmm4
138 ; GFNISSE-NEXT:    pandn %xmm2, %xmm4
139 ; GFNISSE-NEXT:    psllw $2, %xmm0
140 ; GFNISSE-NEXT:    pand %xmm3, %xmm0
141 ; GFNISSE-NEXT:    por %xmm4, %xmm0
142 ; GFNISSE-NEXT:    movdqa %xmm1, %xmm2
143 ; GFNISSE-NEXT:    psrlw $6, %xmm2
144 ; GFNISSE-NEXT:    psllw $2, %xmm1
145 ; GFNISSE-NEXT:    pand %xmm3, %xmm1
146 ; GFNISSE-NEXT:    pandn %xmm2, %xmm3
147 ; GFNISSE-NEXT:    por %xmm3, %xmm1
148 ; GFNISSE-NEXT:    retq
150 ; GFNIAVX1-LABEL: splatconstant_rotr_v32i8:
151 ; GFNIAVX1:       # %bb.0:
152 ; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
153 ; GFNIAVX1-NEXT:    vpsrlw $6, %xmm1, %xmm2
154 ; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
155 ; GFNIAVX1-NEXT:    vpandn %xmm2, %xmm3, %xmm2
156 ; GFNIAVX1-NEXT:    vpsllw $2, %xmm1, %xmm1
157 ; GFNIAVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
158 ; GFNIAVX1-NEXT:    vpor %xmm2, %xmm1, %xmm1
159 ; GFNIAVX1-NEXT:    vpsrlw $6, %xmm0, %xmm2
160 ; GFNIAVX1-NEXT:    vpandn %xmm2, %xmm3, %xmm2
161 ; GFNIAVX1-NEXT:    vpsllw $2, %xmm0, %xmm0
162 ; GFNIAVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
163 ; GFNIAVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
164 ; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
165 ; GFNIAVX1-NEXT:    retq
167 ; GFNIAVX2-LABEL: splatconstant_rotr_v32i8:
168 ; GFNIAVX2:       # %bb.0:
169 ; GFNIAVX2-NEXT:    vpsrlw $6, %ymm0, %ymm1
170 ; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
171 ; GFNIAVX2-NEXT:    vpsllw $2, %ymm0, %ymm0
172 ; GFNIAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
173 ; GFNIAVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0
174 ; GFNIAVX2-NEXT:    retq
176 ; GFNIAVX512-LABEL: splatconstant_rotr_v32i8:
177 ; GFNIAVX512:       # %bb.0:
178 ; GFNIAVX512-NEXT:    vpsllw $2, %ymm0, %ymm1
179 ; GFNIAVX512-NEXT:    vpsrlw $6, %ymm0, %ymm0
180 ; GFNIAVX512-NEXT:    vpternlogd $216, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm1, %ymm0
181 ; GFNIAVX512-NEXT:    retq
182   %res = call <32 x i8> @llvm.fshr.v32i8(<32 x i8> %a, <32 x i8> %a, <32 x i8> <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>)
183   ret <32 x i8> %res
185 declare <32 x i8> @llvm.fshr.v32i8(<32 x i8>, <32 x i8>, <32 x i8>)
188 ; 512 Bit Vector Rotates
191 define <64 x i8> @splatconstant_rotl_v64i8(<64 x i8> %a) nounwind {
192 ; GFNISSE-LABEL: splatconstant_rotl_v64i8:
193 ; GFNISSE:       # %bb.0:
194 ; GFNISSE-NEXT:    movdqa %xmm0, %xmm4
195 ; GFNISSE-NEXT:    psrlw $7, %xmm4
196 ; GFNISSE-NEXT:    movdqa {{.*#+}} xmm5 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
197 ; GFNISSE-NEXT:    pand %xmm5, %xmm4
198 ; GFNISSE-NEXT:    paddb %xmm0, %xmm0
199 ; GFNISSE-NEXT:    por %xmm4, %xmm0
200 ; GFNISSE-NEXT:    movdqa %xmm1, %xmm4
201 ; GFNISSE-NEXT:    psrlw $7, %xmm4
202 ; GFNISSE-NEXT:    pand %xmm5, %xmm4
203 ; GFNISSE-NEXT:    paddb %xmm1, %xmm1
204 ; GFNISSE-NEXT:    por %xmm4, %xmm1
205 ; GFNISSE-NEXT:    movdqa %xmm2, %xmm4
206 ; GFNISSE-NEXT:    psrlw $7, %xmm4
207 ; GFNISSE-NEXT:    pand %xmm5, %xmm4
208 ; GFNISSE-NEXT:    paddb %xmm2, %xmm2
209 ; GFNISSE-NEXT:    por %xmm4, %xmm2
210 ; GFNISSE-NEXT:    movdqa %xmm3, %xmm4
211 ; GFNISSE-NEXT:    psrlw $7, %xmm4
212 ; GFNISSE-NEXT:    pand %xmm5, %xmm4
213 ; GFNISSE-NEXT:    paddb %xmm3, %xmm3
214 ; GFNISSE-NEXT:    por %xmm4, %xmm3
215 ; GFNISSE-NEXT:    retq
217 ; GFNIAVX1-LABEL: splatconstant_rotl_v64i8:
218 ; GFNIAVX1:       # %bb.0:
219 ; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
220 ; GFNIAVX1-NEXT:    vpsrlw $7, %xmm2, %xmm3
221 ; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
222 ; GFNIAVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
223 ; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm2
224 ; GFNIAVX1-NEXT:    vpor %xmm3, %xmm2, %xmm2
225 ; GFNIAVX1-NEXT:    vpsrlw $7, %xmm0, %xmm3
226 ; GFNIAVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
227 ; GFNIAVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm0
228 ; GFNIAVX1-NEXT:    vpor %xmm3, %xmm0, %xmm0
229 ; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
230 ; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
231 ; GFNIAVX1-NEXT:    vpsrlw $7, %xmm2, %xmm3
232 ; GFNIAVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
233 ; GFNIAVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm2
234 ; GFNIAVX1-NEXT:    vpor %xmm3, %xmm2, %xmm2
235 ; GFNIAVX1-NEXT:    vpsrlw $7, %xmm1, %xmm3
236 ; GFNIAVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
237 ; GFNIAVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
238 ; GFNIAVX1-NEXT:    vpor %xmm3, %xmm1, %xmm1
239 ; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
240 ; GFNIAVX1-NEXT:    retq
242 ; GFNIAVX2-LABEL: splatconstant_rotl_v64i8:
243 ; GFNIAVX2:       # %bb.0:
244 ; GFNIAVX2-NEXT:    vpsrlw $7, %ymm0, %ymm2
245 ; GFNIAVX2-NEXT:    vpbroadcastb {{.*#+}} ymm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
246 ; GFNIAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm2
247 ; GFNIAVX2-NEXT:    vpaddb %ymm0, %ymm0, %ymm0
248 ; GFNIAVX2-NEXT:    vpor %ymm2, %ymm0, %ymm0
249 ; GFNIAVX2-NEXT:    vpsrlw $7, %ymm1, %ymm2
250 ; GFNIAVX2-NEXT:    vpand %ymm3, %ymm2, %ymm2
251 ; GFNIAVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
252 ; GFNIAVX2-NEXT:    vpor %ymm2, %ymm1, %ymm1
253 ; GFNIAVX2-NEXT:    retq
255 ; GFNIAVX512-LABEL: splatconstant_rotl_v64i8:
256 ; GFNIAVX512:       # %bb.0:
257 ; GFNIAVX512-NEXT:    vpsrlw $7, %zmm0, %zmm1
258 ; GFNIAVX512-NEXT:    vpaddb %zmm0, %zmm0, %zmm0
259 ; GFNIAVX512-NEXT:    vpternlogd $248, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm0
260 ; GFNIAVX512-NEXT:    retq
261   %res = call <64 x i8> @llvm.fshl.v64i8(<64 x i8> %a, <64 x i8> %a, <64 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
262   ret <64 x i8> %res
264 declare <64 x i8> @llvm.fshl.v64i8(<64 x i8>, <64 x i8>, <64 x i8>)
266 define <64 x i8> @splatconstant_rotr_v64i8(<64 x i8> %a) nounwind {
267 ; GFNISSE-LABEL: splatconstant_rotr_v64i8:
268 ; GFNISSE:       # %bb.0:
269 ; GFNISSE-NEXT:    movdqa %xmm0, %xmm5
270 ; GFNISSE-NEXT:    psrlw $2, %xmm5
271 ; GFNISSE-NEXT:    movdqa {{.*#+}} xmm4 = [192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192]
272 ; GFNISSE-NEXT:    movdqa %xmm4, %xmm6
273 ; GFNISSE-NEXT:    pandn %xmm5, %xmm6
274 ; GFNISSE-NEXT:    psllw $6, %xmm0
275 ; GFNISSE-NEXT:    pand %xmm4, %xmm0
276 ; GFNISSE-NEXT:    por %xmm6, %xmm0
277 ; GFNISSE-NEXT:    movdqa %xmm1, %xmm5
278 ; GFNISSE-NEXT:    psrlw $2, %xmm5
279 ; GFNISSE-NEXT:    movdqa %xmm4, %xmm6
280 ; GFNISSE-NEXT:    pandn %xmm5, %xmm6
281 ; GFNISSE-NEXT:    psllw $6, %xmm1
282 ; GFNISSE-NEXT:    pand %xmm4, %xmm1
283 ; GFNISSE-NEXT:    por %xmm6, %xmm1
284 ; GFNISSE-NEXT:    movdqa %xmm2, %xmm5
285 ; GFNISSE-NEXT:    psrlw $2, %xmm5
286 ; GFNISSE-NEXT:    movdqa %xmm4, %xmm6
287 ; GFNISSE-NEXT:    pandn %xmm5, %xmm6
288 ; GFNISSE-NEXT:    psllw $6, %xmm2
289 ; GFNISSE-NEXT:    pand %xmm4, %xmm2
290 ; GFNISSE-NEXT:    por %xmm6, %xmm2
291 ; GFNISSE-NEXT:    movdqa %xmm3, %xmm5
292 ; GFNISSE-NEXT:    psrlw $2, %xmm5
293 ; GFNISSE-NEXT:    psllw $6, %xmm3
294 ; GFNISSE-NEXT:    pand %xmm4, %xmm3
295 ; GFNISSE-NEXT:    pandn %xmm5, %xmm4
296 ; GFNISSE-NEXT:    por %xmm4, %xmm3
297 ; GFNISSE-NEXT:    retq
299 ; GFNIAVX1-LABEL: splatconstant_rotr_v64i8:
300 ; GFNIAVX1:       # %bb.0:
301 ; GFNIAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
302 ; GFNIAVX1-NEXT:    vpsrlw $2, %xmm2, %xmm3
303 ; GFNIAVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192]
304 ; GFNIAVX1-NEXT:    vpandn %xmm3, %xmm4, %xmm3
305 ; GFNIAVX1-NEXT:    vpsllw $6, %xmm2, %xmm2
306 ; GFNIAVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
307 ; GFNIAVX1-NEXT:    vpor %xmm3, %xmm2, %xmm2
308 ; GFNIAVX1-NEXT:    vpsrlw $2, %xmm0, %xmm3
309 ; GFNIAVX1-NEXT:    vpandn %xmm3, %xmm4, %xmm3
310 ; GFNIAVX1-NEXT:    vpsllw $6, %xmm0, %xmm0
311 ; GFNIAVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
312 ; GFNIAVX1-NEXT:    vpor %xmm3, %xmm0, %xmm0
313 ; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
314 ; GFNIAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
315 ; GFNIAVX1-NEXT:    vpsrlw $2, %xmm2, %xmm3
316 ; GFNIAVX1-NEXT:    vpandn %xmm3, %xmm4, %xmm3
317 ; GFNIAVX1-NEXT:    vpsllw $6, %xmm2, %xmm2
318 ; GFNIAVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
319 ; GFNIAVX1-NEXT:    vpor %xmm3, %xmm2, %xmm2
320 ; GFNIAVX1-NEXT:    vpsrlw $2, %xmm1, %xmm3
321 ; GFNIAVX1-NEXT:    vpandn %xmm3, %xmm4, %xmm3
322 ; GFNIAVX1-NEXT:    vpsllw $6, %xmm1, %xmm1
323 ; GFNIAVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
324 ; GFNIAVX1-NEXT:    vpor %xmm3, %xmm1, %xmm1
325 ; GFNIAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
326 ; GFNIAVX1-NEXT:    retq
328 ; GFNIAVX2-LABEL: splatconstant_rotr_v64i8:
329 ; GFNIAVX2:       # %bb.0:
330 ; GFNIAVX2-NEXT:    vpsrlw $2, %ymm0, %ymm2
331 ; GFNIAVX2-NEXT:    vpbroadcastb {{.*#+}} ymm3 = [192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192]
332 ; GFNIAVX2-NEXT:    vpandn %ymm2, %ymm3, %ymm2
333 ; GFNIAVX2-NEXT:    vpsllw $6, %ymm0, %ymm0
334 ; GFNIAVX2-NEXT:    vpand %ymm3, %ymm0, %ymm0
335 ; GFNIAVX2-NEXT:    vpor %ymm2, %ymm0, %ymm0
336 ; GFNIAVX2-NEXT:    vpsrlw $2, %ymm1, %ymm2
337 ; GFNIAVX2-NEXT:    vpandn %ymm2, %ymm3, %ymm2
338 ; GFNIAVX2-NEXT:    vpsllw $6, %ymm1, %ymm1
339 ; GFNIAVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
340 ; GFNIAVX2-NEXT:    vpor %ymm2, %ymm1, %ymm1
341 ; GFNIAVX2-NEXT:    retq
343 ; GFNIAVX512-LABEL: splatconstant_rotr_v64i8:
344 ; GFNIAVX512:       # %bb.0:
345 ; GFNIAVX512-NEXT:    vpsllw $6, %zmm0, %zmm1
346 ; GFNIAVX512-NEXT:    vpsrlw $2, %zmm0, %zmm0
347 ; GFNIAVX512-NEXT:    vpternlogd $216, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm0
348 ; GFNIAVX512-NEXT:    retq
349   %res = call <64 x i8> @llvm.fshr.v64i8(<64 x i8> %a, <64 x i8> %a, <64 x i8> <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>)
350   ret <64 x i8> %res
352 declare <64 x i8> @llvm.fshr.v64i8(<64 x i8>, <64 x i8>, <64 x i8>)