[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / vector-shuffle-v192.ll
blob7159edc2bbdf4cd86873fe8e4c5fe5dabaf1ed7c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx2 | FileCheck %s --check-prefix=AVX2
3 ; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefix=AVX512F
4 ; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx512f,+avx512vl,+avx512bw | FileCheck %s --check-prefix=AVX512BW
5 ; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx512f,+avx512vl,+avx512vbmi | FileCheck %s --check-prefix=AVX512VBMI
7 define <64 x i8> @f1(ptr %p0) {
8 ; AVX2-LABEL: f1:
9 ; AVX2:       # %bb.0:
10 ; AVX2-NEXT:    vmovdqa 128(%rdi), %ymm1
11 ; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm0
12 ; AVX2-NEXT:    vmovdqa (%rdi), %xmm2
13 ; AVX2-NEXT:    vmovdqa 16(%rdi), %xmm3
14 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <128,128,128,128,128,128,3,5,9,11,15,u,u,u,u,u>
15 ; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
16 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <1,3,7,9,13,15,128,128,128,128,128,u,u,u,u,u>
17 ; AVX2-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
18 ; AVX2-NEXT:    vpor %xmm3, %xmm2, %xmm2
19 ; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,3,7,9,13,15,0,0,0,0,0,1,5,7,11,13,1,3,7,9,13,15,0,0,0,0,0,1,5,7,11,13]
20 ; AVX2-NEXT:    # ymm3 = mem[0,1,0,1]
21 ; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
22 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0]
23 ; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm0, %ymm0
24 ; AVX2-NEXT:    vmovdqa 80(%rdi), %xmm2
25 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = <u,u,u,u,u,u,128,128,128,128,128,1,5,7,11,13>
26 ; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2
27 ; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm8
28 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm9 = <u,u,u,u,u,u,3,5,9,11,15,128,128,128,128,128>
29 ; AVX2-NEXT:    vpshufb %xmm9, %xmm8, %xmm8
30 ; AVX2-NEXT:    vpor %xmm2, %xmm8, %xmm2
31 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
32 ; AVX2-NEXT:    vpblendw {{.*#+}} ymm2 = ymm0[0,1,2],ymm2[3,4,5,6,7],ymm0[8,9,10],ymm2[11,12,13,14,15]
33 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
34 ; AVX2-NEXT:    vmovdqa 112(%rdi), %xmm2
35 ; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
36 ; AVX2-NEXT:    vmovdqa 96(%rdi), %xmm4
37 ; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
38 ; AVX2-NEXT:    vpor %xmm2, %xmm4, %xmm2
39 ; AVX2-NEXT:    vpshufb %ymm3, %ymm1, %ymm1
40 ; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm1, %ymm1
41 ; AVX2-NEXT:    vmovdqa 176(%rdi), %xmm2
42 ; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2
43 ; AVX2-NEXT:    vmovdqa 160(%rdi), %xmm3
44 ; AVX2-NEXT:    vpshufb %xmm9, %xmm3, %xmm3
45 ; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2
46 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
47 ; AVX2-NEXT:    vpblendw {{.*#+}} ymm2 = ymm1[0,1,2],ymm2[3,4,5,6,7],ymm1[8,9,10],ymm2[11,12,13,14,15]
48 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]
49 ; AVX2-NEXT:    retq
51 ; AVX512F-LABEL: f1:
52 ; AVX512F:       # %bb.0:
53 ; AVX512F-NEXT:    vmovdqa 112(%rdi), %xmm0
54 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = <128,128,128,128,128,128,3,5,9,11,15,u,u,u,u,u>
55 ; AVX512F-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
56 ; AVX512F-NEXT:    vmovdqa 96(%rdi), %xmm2
57 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = <1,3,7,9,13,15,128,128,128,128,128,u,u,u,u,u>
58 ; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
59 ; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm0
60 ; AVX512F-NEXT:    vmovdqa 176(%rdi), %xmm2
61 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm4 = <u,u,u,u,u,u,128,128,128,128,128,1,5,7,11,13>
62 ; AVX512F-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
63 ; AVX512F-NEXT:    vmovdqa 160(%rdi), %xmm5
64 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm6 = <u,u,u,u,u,u,3,5,9,11,15,128,128,128,128,128>
65 ; AVX512F-NEXT:    vpshufb %xmm6, %xmm5, %xmm5
66 ; AVX512F-NEXT:    vpor %xmm2, %xmm5, %xmm2
67 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
68 ; AVX512F-NEXT:    vmovdqa 128(%rdi), %ymm5
69 ; AVX512F-NEXT:    vpshufb {{.*#+}} ymm5 = ymm5[u,u,u,u,u,u,u,u,u,u,u,1,5,7,11,13,17,19,23,25,29,31,u,u,u,u,u,u,u,u,u,u]
70 ; AVX512F-NEXT:    vpblendw {{.*#+}} ymm2 = ymm5[0,1,2],ymm2[3,4,5,6,7],ymm5[8,9,10],ymm2[11,12,13,14,15]
71 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]
72 ; AVX512F-NEXT:    vpternlogq $228, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
73 ; AVX512F-NEXT:    vmovdqa 80(%rdi), %xmm0
74 ; AVX512F-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
75 ; AVX512F-NEXT:    vmovdqa 64(%rdi), %xmm4
76 ; AVX512F-NEXT:    vpshufb %xmm6, %xmm4, %xmm4
77 ; AVX512F-NEXT:    vpor %xmm0, %xmm4, %xmm0
78 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
79 ; AVX512F-NEXT:    vmovdqa (%rdi), %xmm4
80 ; AVX512F-NEXT:    vmovdqa 16(%rdi), %xmm5
81 ; AVX512F-NEXT:    vpshufb %xmm1, %xmm5, %xmm1
82 ; AVX512F-NEXT:    vpshufb %xmm3, %xmm4, %xmm3
83 ; AVX512F-NEXT:    vpor %xmm1, %xmm3, %xmm1
84 ; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm3
85 ; AVX512F-NEXT:    vpshufb {{.*#+}} ymm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm3[1,5,7,11,13,17,19,23,25,29,31],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
86 ; AVX512F-NEXT:    vpternlogq $248, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm3
87 ; AVX512F-NEXT:    vpblendw {{.*#+}} ymm0 = ymm3[0,1,2],ymm0[3,4,5,6,7],ymm3[8,9,10],ymm0[11,12,13,14,15]
88 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]
89 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
90 ; AVX512F-NEXT:    retq
92 ; AVX512BW-LABEL: f1:
93 ; AVX512BW:       # %bb.0:
94 ; AVX512BW-NEXT:    vmovdqa 112(%rdi), %xmm0
95 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = <128,128,128,128,128,128,3,5,9,11,15,u,u,u,u,u>
96 ; AVX512BW-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
97 ; AVX512BW-NEXT:    vmovdqa 96(%rdi), %xmm2
98 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm3 = <1,3,7,9,13,15,128,128,128,128,128,u,u,u,u,u>
99 ; AVX512BW-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
100 ; AVX512BW-NEXT:    vpor %xmm0, %xmm2, %xmm0
101 ; AVX512BW-NEXT:    vmovdqa 176(%rdi), %xmm2
102 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm4 = <u,u,u,u,u,u,128,128,128,128,128,1,5,7,11,13>
103 ; AVX512BW-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
104 ; AVX512BW-NEXT:    vmovdqa 160(%rdi), %xmm5
105 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm6 = <u,u,u,u,u,u,3,5,9,11,15,128,128,128,128,128>
106 ; AVX512BW-NEXT:    vpshufb %xmm6, %xmm5, %xmm5
107 ; AVX512BW-NEXT:    vpor %xmm2, %xmm5, %xmm2
108 ; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
109 ; AVX512BW-NEXT:    vmovdqa 128(%rdi), %ymm5
110 ; AVX512BW-NEXT:    vbroadcasti128 {{.*#+}} ymm7 = [1,3,7,9,13,15,0,0,0,0,0,1,5,7,11,13,1,3,7,9,13,15,0,0,0,0,0,1,5,7,11,13]
111 ; AVX512BW-NEXT:    # ymm7 = mem[0,1,0,1]
112 ; AVX512BW-NEXT:    vpshufb %ymm7, %ymm5, %ymm5
113 ; AVX512BW-NEXT:    vpblendw {{.*#+}} ymm2 = ymm5[0,1,2],ymm2[3,4,5,6,7],ymm5[8,9,10],ymm2[11,12,13,14,15]
114 ; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]
115 ; AVX512BW-NEXT:    movl $2047, %eax # imm = 0x7FF
116 ; AVX512BW-NEXT:    kmovd %eax, %k1
117 ; AVX512BW-NEXT:    vmovdqu8 %ymm0, %ymm2 {%k1}
118 ; AVX512BW-NEXT:    vmovdqa (%rdi), %xmm0
119 ; AVX512BW-NEXT:    vmovdqa 16(%rdi), %xmm5
120 ; AVX512BW-NEXT:    vpshufb %xmm1, %xmm5, %xmm1
121 ; AVX512BW-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
122 ; AVX512BW-NEXT:    vpor %xmm1, %xmm0, %xmm0
123 ; AVX512BW-NEXT:    vmovdqa 32(%rdi), %ymm1
124 ; AVX512BW-NEXT:    movl $4192256, %eax # imm = 0x3FF800
125 ; AVX512BW-NEXT:    kmovd %eax, %k1
126 ; AVX512BW-NEXT:    vpshufb %ymm7, %ymm1, %ymm0 {%k1}
127 ; AVX512BW-NEXT:    vmovdqa 80(%rdi), %xmm1
128 ; AVX512BW-NEXT:    vpshufb %xmm4, %xmm1, %xmm1
129 ; AVX512BW-NEXT:    vmovdqa 64(%rdi), %xmm3
130 ; AVX512BW-NEXT:    vpshufb %xmm6, %xmm3, %xmm3
131 ; AVX512BW-NEXT:    vpor %xmm1, %xmm3, %xmm1
132 ; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
133 ; AVX512BW-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2],ymm1[3,4,5,6,7],ymm0[8,9,10],ymm1[11,12,13,14,15]
134 ; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
135 ; AVX512BW-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
136 ; AVX512BW-NEXT:    retq
138 ; AVX512VBMI-LABEL: f1:
139 ; AVX512VBMI:       # %bb.0:
140 ; AVX512VBMI-NEXT:    vmovdqa64 (%rdi), %zmm0
141 ; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm1 = <1,3,7,9,13,15,19,21,25,27,31,33,37,39,43,45,49,51,55,57,61,63,67,69,73,75,79,81,85,87,91,93,97,99,103,105,109,111,115,117,121,123,127,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
142 ; AVX512VBMI-NEXT:    vpermi2b 64(%rdi), %zmm0, %zmm1
143 ; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,65,69,71,75,77,81,83,87,89,93,95,99,101,105,107,111,113,117,119,123,125]
144 ; AVX512VBMI-NEXT:    vpermi2b 128(%rdi), %zmm1, %zmm0
145 ; AVX512VBMI-NEXT:    retq
146   %a0 = load <192 x i8>, ptr %p0
147   %r = shufflevector <192 x i8> %a0, <192 x i8> poison, <64 x i32> <i32 1, i32 3, i32 7, i32 9, i32 13, i32 15, i32 19, i32 21, i32 25, i32 27, i32 31, i32 33, i32 37, i32 39, i32 43, i32 45, i32 49, i32 51, i32 55, i32 57, i32 61, i32 63, i32 67, i32 69, i32 73, i32 75, i32 79, i32 81, i32 85, i32 87, i32 91, i32 93, i32 97, i32 99, i32 103, i32 105, i32 109, i32 111, i32 115, i32 117, i32 121, i32 123, i32 127, i32 129, i32 133, i32 135, i32 139, i32 141, i32 145, i32 147, i32 151, i32 153, i32 157, i32 159, i32 163, i32 165, i32 169, i32 171, i32 175, i32 177, i32 181, i32 183, i32 187, i32 189>
148   ret <64 x i8> %r
151 define <64 x i8> @f2(ptr %p0) {
152 ; AVX2-LABEL: f2:
153 ; AVX2:       # %bb.0:
154 ; AVX2-NEXT:    vmovdqa 128(%rdi), %ymm1
155 ; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm0
156 ; AVX2-NEXT:    vmovdqa (%rdi), %xmm2
157 ; AVX2-NEXT:    vmovdqa 16(%rdi), %xmm3
158 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <1,5,7,11,13,128,128,128,128,128,128,u,u,u,u,u>
159 ; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
160 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <128,128,128,128,128,1,3,7,9,13,15,u,u,u,u,u>
161 ; AVX2-NEXT:    vpshufb %xmm5, %xmm3, %xmm3
162 ; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2
163 ; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [1,5,7,11,13,0,0,0,0,0,0,3,5,9,11,15,1,5,7,11,13,0,0,0,0,0,0,3,5,9,11,15]
164 ; AVX2-NEXT:    # ymm3 = mem[0,1,0,1]
165 ; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
166 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0]
167 ; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm0, %ymm0
168 ; AVX2-NEXT:    vmovdqa 80(%rdi), %xmm2
169 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = <u,u,u,u,u,128,128,128,128,128,128,3,5,9,11,15>
170 ; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2
171 ; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm8
172 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm9 = <u,u,u,u,u,1,3,7,9,13,15,128,128,128,128,128>
173 ; AVX2-NEXT:    vpshufb %xmm9, %xmm8, %xmm8
174 ; AVX2-NEXT:    vpor %xmm2, %xmm8, %xmm2
175 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
176 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm8 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0]
177 ; AVX2-NEXT:    vpblendvb %ymm8, %ymm0, %ymm2, %ymm0
178 ; AVX2-NEXT:    vmovdqa 96(%rdi), %xmm2
179 ; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
180 ; AVX2-NEXT:    vmovdqa 112(%rdi), %xmm4
181 ; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
182 ; AVX2-NEXT:    vpor %xmm2, %xmm4, %xmm2
183 ; AVX2-NEXT:    vpshufb %ymm3, %ymm1, %ymm1
184 ; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm1, %ymm1
185 ; AVX2-NEXT:    vmovdqa 176(%rdi), %xmm2
186 ; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2
187 ; AVX2-NEXT:    vmovdqa 160(%rdi), %xmm3
188 ; AVX2-NEXT:    vpshufb %xmm9, %xmm3, %xmm3
189 ; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2
190 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
191 ; AVX2-NEXT:    vpblendvb %ymm8, %ymm1, %ymm2, %ymm1
192 ; AVX2-NEXT:    retq
194 ; AVX512F-LABEL: f2:
195 ; AVX512F:       # %bb.0:
196 ; AVX512F-NEXT:    vmovdqa 176(%rdi), %xmm0
197 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = <u,u,u,u,u,128,128,128,128,128,128,3,5,9,11,15>
198 ; AVX512F-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
199 ; AVX512F-NEXT:    vmovdqa 160(%rdi), %xmm2
200 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = <u,u,u,u,u,1,3,7,9,13,15,128,128,128,128,128>
201 ; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
202 ; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm0
203 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
204 ; AVX512F-NEXT:    vmovdqa (%rdi), %xmm2
205 ; AVX512F-NEXT:    vmovdqa 16(%rdi), %xmm4
206 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm5 = <1,5,7,11,13,128,128,128,128,128,128,u,u,u,u,u>
207 ; AVX512F-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
208 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm6 = <128,128,128,128,128,1,3,7,9,13,15,u,u,u,u,u>
209 ; AVX512F-NEXT:    vpshufb %xmm6, %xmm4, %xmm4
210 ; AVX512F-NEXT:    vpor %xmm2, %xmm4, %xmm2
211 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
212 ; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm2
213 ; AVX512F-NEXT:    vpshufb {{.*#+}} ymm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm2[3,5,9,11,15,17,21,23,27,29,u,u,u,u,u,u,u,u,u,u,u]
214 ; AVX512F-NEXT:    vmovdqa 128(%rdi), %ymm4
215 ; AVX512F-NEXT:    vpshufb {{.*#+}} ymm4 = ymm4[u,u,u,u,u,u,u,u,u,u,u,3,5,9,11,15,17,21,23,27,29],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
216 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm2, %zmm2
217 ; AVX512F-NEXT:    vbroadcasti64x4 {{.*#+}} zmm4 = [255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255]
218 ; AVX512F-NEXT:    # zmm4 = mem[0,1,2,3,0,1,2,3]
219 ; AVX512F-NEXT:    vpternlogq $234, %zmm2, %zmm0, %zmm4
220 ; AVX512F-NEXT:    vmovdqa 96(%rdi), %xmm0
221 ; AVX512F-NEXT:    vpshufb %xmm5, %xmm0, %xmm0
222 ; AVX512F-NEXT:    vmovdqa 112(%rdi), %xmm2
223 ; AVX512F-NEXT:    vpshufb %xmm6, %xmm2, %xmm2
224 ; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm0
225 ; AVX512F-NEXT:    vinserti32x4 $2, %xmm0, %zmm0, %zmm0
226 ; AVX512F-NEXT:    vmovdqa 80(%rdi), %xmm2
227 ; AVX512F-NEXT:    vpshufb %xmm1, %xmm2, %xmm1
228 ; AVX512F-NEXT:    vmovdqa 64(%rdi), %xmm2
229 ; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
230 ; AVX512F-NEXT:    vpor %xmm1, %xmm2, %xmm1
231 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
232 ; AVX512F-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm1[0,1,2,3],zmm0[4,5,6,7]
233 ; AVX512F-NEXT:    vpternlogq $216, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm4, %zmm0
234 ; AVX512F-NEXT:    retq
236 ; AVX512BW-LABEL: f2:
237 ; AVX512BW:       # %bb.0:
238 ; AVX512BW-NEXT:    vmovdqa 176(%rdi), %xmm0
239 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = <u,u,u,u,u,128,128,128,128,128,128,3,5,9,11,15>
240 ; AVX512BW-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
241 ; AVX512BW-NEXT:    vmovdqa 160(%rdi), %xmm2
242 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm3 = <u,u,u,u,u,1,3,7,9,13,15,128,128,128,128,128>
243 ; AVX512BW-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
244 ; AVX512BW-NEXT:    vpor %xmm0, %xmm2, %xmm0
245 ; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
246 ; AVX512BW-NEXT:    vmovdqa (%rdi), %xmm2
247 ; AVX512BW-NEXT:    vmovdqa 16(%rdi), %xmm4
248 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm5 = <1,5,7,11,13,128,128,128,128,128,128,u,u,u,u,u>
249 ; AVX512BW-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
250 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm6 = <128,128,128,128,128,1,3,7,9,13,15,u,u,u,u,u>
251 ; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4
252 ; AVX512BW-NEXT:    vpor %xmm2, %xmm4, %xmm2
253 ; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
254 ; AVX512BW-NEXT:    vmovdqa 32(%rdi), %ymm2
255 ; AVX512BW-NEXT:    vinserti64x4 $1, 128(%rdi), %zmm2, %zmm2
256 ; AVX512BW-NEXT:    vbroadcasti64x4 {{.*#+}} zmm4 = <u,u,u,u,u,u,u,u,u,u,u,3,5,9,11,15,1,5,7,11,13,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,3,5,9,11,15,1,5,7,11,13,u,u,u,u,u,u,u,u,u,u,u>
257 ; AVX512BW-NEXT:    # zmm4 = mem[0,1,2,3,0,1,2,3]
258 ; AVX512BW-NEXT:    movabsq $8998403163813888, %rax # imm = 0x1FF800001FF800
259 ; AVX512BW-NEXT:    kmovq %rax, %k1
260 ; AVX512BW-NEXT:    vpshufb %zmm4, %zmm2, %zmm0 {%k1}
261 ; AVX512BW-NEXT:    vmovdqa 96(%rdi), %xmm2
262 ; AVX512BW-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
263 ; AVX512BW-NEXT:    vmovdqa 112(%rdi), %xmm4
264 ; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4
265 ; AVX512BW-NEXT:    vpor %xmm2, %xmm4, %xmm2
266 ; AVX512BW-NEXT:    vinserti32x4 $2, %xmm2, %zmm0, %zmm2
267 ; AVX512BW-NEXT:    vmovdqa 80(%rdi), %xmm4
268 ; AVX512BW-NEXT:    vpshufb %xmm1, %xmm4, %xmm1
269 ; AVX512BW-NEXT:    vmovdqa 64(%rdi), %xmm4
270 ; AVX512BW-NEXT:    vpshufb %xmm3, %xmm4, %xmm3
271 ; AVX512BW-NEXT:    vpor %xmm1, %xmm3, %xmm1
272 ; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
273 ; AVX512BW-NEXT:    vshufi64x2 {{.*#+}} zmm1 = zmm1[0,1,2,3],zmm2[4,5,6,7]
274 ; AVX512BW-NEXT:    movabsq $8796090925056, %rax # imm = 0x7FFFFE00000
275 ; AVX512BW-NEXT:    kmovq %rax, %k1
276 ; AVX512BW-NEXT:    vmovdqu8 %zmm1, %zmm0 {%k1}
277 ; AVX512BW-NEXT:    retq
279 ; AVX512VBMI-LABEL: f2:
280 ; AVX512VBMI:       # %bb.0:
281 ; AVX512VBMI-NEXT:    vmovdqa64 64(%rdi), %zmm0
282 ; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm1 = <65,69,71,75,77,81,83,87,89,93,95,99,101,105,107,111,113,117,119,123,125,1,3,7,9,13,15,19,21,25,27,31,33,37,39,43,45,49,51,55,57,61,63,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
283 ; AVX512VBMI-NEXT:    vpermi2b (%rdi), %zmm0, %zmm1
284 ; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,67,69,73,75,79,81,85,87,91,93,97,99,103,105,109,111,115,117,121,123,127]
285 ; AVX512VBMI-NEXT:    vpermi2b 128(%rdi), %zmm1, %zmm0
286 ; AVX512VBMI-NEXT:    retq
287   %a0 = load <192 x i8>, ptr %p0
288   %r = shufflevector <192 x i8> %a0, <192 x i8> poison, <64 x i32> <i32 1, i32 5, i32 7, i32 11, i32 13, i32 17, i32 19, i32 23, i32 25, i32 29, i32 31, i32 35, i32 37, i32 41, i32 43, i32 47, i32 49, i32 53, i32 55, i32 59, i32 61, i32 65, i32 67, i32 71, i32 73, i32 77, i32 79, i32 83, i32 85, i32 89, i32 91, i32 95, i32 97, i32 101, i32 103, i32 107, i32 109, i32 113, i32 115, i32 119, i32 121, i32 125, i32 127, i32 131, i32 133, i32 137, i32 139, i32 143, i32 145, i32 149, i32 151, i32 155, i32 157, i32 161, i32 163, i32 167, i32 169, i32 173, i32 175, i32 179, i32 181, i32 185, i32 187, i32 191>
289   ret <64 x i8> %r
292 define <64 x i8> @f3(ptr %p0) {
293 ; AVX2-LABEL: f3:
294 ; AVX2:       # %bb.0:
295 ; AVX2-NEXT:    vmovdqa 128(%rdi), %ymm1
296 ; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm0
297 ; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm2
298 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <u,u,u,u,u,0,4,6,10,12,128,128,128,128,128,128>
299 ; AVX2-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
300 ; AVX2-NEXT:    vmovdqa 80(%rdi), %xmm4
301 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <u,u,u,u,u,128,128,128,128,128,0,2,6,8,12,14>
302 ; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
303 ; AVX2-NEXT:    vpor %xmm2, %xmm4, %xmm2
304 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
305 ; AVX2-NEXT:    vmovdqa (%rdi), %xmm4
306 ; AVX2-NEXT:    vmovdqa 16(%rdi), %xmm6
307 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = <128,128,128,128,128,0,4,6,10,12,u,u,u,u,u,u>
308 ; AVX2-NEXT:    vpshufb %xmm7, %xmm6, %xmm6
309 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm8 = <2,4,8,10,14,128,128,128,128,128,u,u,u,u,u,u>
310 ; AVX2-NEXT:    vpshufb %xmm8, %xmm4, %xmm4
311 ; AVX2-NEXT:    vpor %xmm6, %xmm4, %xmm4
312 ; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm6 = [2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14,2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14]
313 ; AVX2-NEXT:    # ymm6 = mem[0,1,0,1]
314 ; AVX2-NEXT:    vpshufb %ymm6, %ymm0, %ymm0
315 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm4 = xmm4[0,1,2,3,4],xmm0[5,6,7]
316 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm4[0,1,2,3],ymm0[4,5,6,7]
317 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0]
318 ; AVX2-NEXT:    vpblendvb %ymm4, %ymm0, %ymm2, %ymm0
319 ; AVX2-NEXT:    vmovdqa 160(%rdi), %xmm2
320 ; AVX2-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
321 ; AVX2-NEXT:    vmovdqa 176(%rdi), %xmm3
322 ; AVX2-NEXT:    vpshufb %xmm5, %xmm3, %xmm3
323 ; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2
324 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
325 ; AVX2-NEXT:    vmovdqa 112(%rdi), %xmm3
326 ; AVX2-NEXT:    vpshufb %xmm7, %xmm3, %xmm3
327 ; AVX2-NEXT:    vmovdqa 96(%rdi), %xmm5
328 ; AVX2-NEXT:    vpshufb %xmm8, %xmm5, %xmm5
329 ; AVX2-NEXT:    vpor %xmm3, %xmm5, %xmm3
330 ; AVX2-NEXT:    vpshufb %ymm6, %ymm1, %ymm1
331 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0,1,2,3,4],xmm1[5,6,7]
332 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
333 ; AVX2-NEXT:    vpblendvb %ymm4, %ymm1, %ymm2, %ymm1
334 ; AVX2-NEXT:    retq
336 ; AVX512F-LABEL: f3:
337 ; AVX512F:       # %bb.0:
338 ; AVX512F-NEXT:    vmovdqa 160(%rdi), %xmm0
339 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = <u,u,u,u,u,0,4,6,10,12,128,128,128,128,128,128>
340 ; AVX512F-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
341 ; AVX512F-NEXT:    vmovdqa 176(%rdi), %xmm2
342 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = <u,u,u,u,u,128,128,128,128,128,0,2,6,8,12,14>
343 ; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
344 ; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm0
345 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
346 ; AVX512F-NEXT:    vmovdqa 128(%rdi), %ymm2
347 ; AVX512F-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14,2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14]
348 ; AVX512F-NEXT:    # ymm4 = mem[0,1,0,1]
349 ; AVX512F-NEXT:    vpshufb %ymm4, %ymm2, %ymm2
350 ; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm5 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0]
351 ; AVX512F-NEXT:    vpternlogq $216, %ymm5, %ymm2, %ymm0
352 ; AVX512F-NEXT:    vmovdqa 112(%rdi), %xmm6
353 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm7 = <128,128,128,128,128,0,4,6,10,12,u,u,u,u,u,u>
354 ; AVX512F-NEXT:    vpshufb %xmm7, %xmm6, %xmm6
355 ; AVX512F-NEXT:    vmovdqa 96(%rdi), %xmm8
356 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm9 = <2,4,8,10,14,128,128,128,128,128,u,u,u,u,u,u>
357 ; AVX512F-NEXT:    vpshufb %xmm9, %xmm8, %xmm8
358 ; AVX512F-NEXT:    vpor %xmm6, %xmm8, %xmm6
359 ; AVX512F-NEXT:    vpblendw {{.*#+}} xmm2 = xmm6[0,1,2,3,4],xmm2[5,6,7]
360 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
361 ; AVX512F-NEXT:    vmovdqa 64(%rdi), %xmm2
362 ; AVX512F-NEXT:    vpshufb %xmm1, %xmm2, %xmm1
363 ; AVX512F-NEXT:    vmovdqa 80(%rdi), %xmm2
364 ; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
365 ; AVX512F-NEXT:    vpor %xmm1, %xmm2, %xmm1
366 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
367 ; AVX512F-NEXT:    vmovdqa (%rdi), %xmm2
368 ; AVX512F-NEXT:    vmovdqa 16(%rdi), %xmm3
369 ; AVX512F-NEXT:    vpshufb %xmm7, %xmm3, %xmm3
370 ; AVX512F-NEXT:    vpshufb %xmm9, %xmm2, %xmm2
371 ; AVX512F-NEXT:    vpor %xmm3, %xmm2, %xmm2
372 ; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm3
373 ; AVX512F-NEXT:    vpshufb %ymm4, %ymm3, %ymm3
374 ; AVX512F-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3,4],xmm3[5,6,7]
375 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm3[4,5,6,7]
376 ; AVX512F-NEXT:    vpternlogq $226, %ymm1, %ymm5, %ymm2
377 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
378 ; AVX512F-NEXT:    retq
380 ; AVX512BW-LABEL: f3:
381 ; AVX512BW:       # %bb.0:
382 ; AVX512BW-NEXT:    vmovdqa 64(%rdi), %xmm0
383 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = <u,u,u,u,u,0,4,6,10,12,128,128,128,128,128,128>
384 ; AVX512BW-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
385 ; AVX512BW-NEXT:    vmovdqa 80(%rdi), %xmm2
386 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm3 = <u,u,u,u,u,128,128,128,128,128,0,2,6,8,12,14>
387 ; AVX512BW-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
388 ; AVX512BW-NEXT:    vpor %xmm0, %xmm2, %xmm0
389 ; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
390 ; AVX512BW-NEXT:    vmovdqa (%rdi), %xmm2
391 ; AVX512BW-NEXT:    vmovdqa 16(%rdi), %xmm4
392 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm5 = <128,128,128,128,128,0,4,6,10,12,u,u,u,u,u,u>
393 ; AVX512BW-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
394 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm6 = <2,4,8,10,14,128,128,128,128,128,u,u,u,u,u,u>
395 ; AVX512BW-NEXT:    vpshufb %xmm6, %xmm2, %xmm2
396 ; AVX512BW-NEXT:    vpor %xmm4, %xmm2, %xmm2
397 ; AVX512BW-NEXT:    vmovdqa 32(%rdi), %ymm4
398 ; AVX512BW-NEXT:    vbroadcasti128 {{.*#+}} ymm7 = [2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14,2,4,8,10,14,0,0,0,0,0,0,2,6,8,12,14]
399 ; AVX512BW-NEXT:    # ymm7 = mem[0,1,0,1]
400 ; AVX512BW-NEXT:    vpshufb %ymm7, %ymm4, %ymm4
401 ; AVX512BW-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3,4],xmm4[5,6,7]
402 ; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm4[4,5,6,7]
403 ; AVX512BW-NEXT:    movl $-2097152, %eax # imm = 0xFFE00000
404 ; AVX512BW-NEXT:    kmovd %eax, %k1
405 ; AVX512BW-NEXT:    vmovdqu8 %ymm0, %ymm2 {%k1}
406 ; AVX512BW-NEXT:    vmovdqa 112(%rdi), %xmm0
407 ; AVX512BW-NEXT:    vpshufb %xmm5, %xmm0, %xmm0
408 ; AVX512BW-NEXT:    vmovdqa 96(%rdi), %xmm4
409 ; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4
410 ; AVX512BW-NEXT:    vpor %xmm0, %xmm4, %xmm0
411 ; AVX512BW-NEXT:    vmovdqa 160(%rdi), %xmm4
412 ; AVX512BW-NEXT:    vpshufb %xmm1, %xmm4, %xmm1
413 ; AVX512BW-NEXT:    vmovdqa 176(%rdi), %xmm4
414 ; AVX512BW-NEXT:    vpshufb %xmm3, %xmm4, %xmm3
415 ; AVX512BW-NEXT:    vpor %xmm1, %xmm3, %xmm1
416 ; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
417 ; AVX512BW-NEXT:    vmovdqa 128(%rdi), %ymm3
418 ; AVX512BW-NEXT:    vpshufb %ymm7, %ymm3, %ymm3
419 ; AVX512BW-NEXT:    vmovdqu8 %ymm1, %ymm3 {%k1}
420 ; AVX512BW-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4],xmm3[5,6,7]
421 ; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm3[4,5,6,7]
422 ; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
423 ; AVX512BW-NEXT:    retq
425 ; AVX512VBMI-LABEL: f3:
426 ; AVX512VBMI:       # %bb.0:
427 ; AVX512VBMI-NEXT:    vmovdqa64 (%rdi), %zmm0
428 ; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm1 = <2,4,8,10,14,16,20,22,26,28,32,34,38,40,44,46,50,52,56,58,62,64,68,70,74,76,80,82,86,88,92,94,98,100,104,106,110,112,116,118,122,124,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
429 ; AVX512VBMI-NEXT:    vpermi2b 64(%rdi), %zmm0, %zmm1
430 ; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,64,66,70,72,76,78,82,84,88,90,94,96,100,102,106,108,112,114,118,120,124,126]
431 ; AVX512VBMI-NEXT:    vpermi2b 128(%rdi), %zmm1, %zmm0
432 ; AVX512VBMI-NEXT:    retq
433   %a0 = load <192 x i8>, ptr %p0
434   %r = shufflevector <192 x i8> %a0, <192 x i8> poison, <64 x i32> <i32 2, i32 4, i32 8, i32 10, i32 14, i32 16, i32 20, i32 22, i32 26, i32 28, i32 32, i32 34, i32 38, i32 40, i32 44, i32 46, i32 50, i32 52, i32 56, i32 58, i32 62, i32 64, i32 68, i32 70, i32 74, i32 76, i32 80, i32 82, i32 86, i32 88, i32 92, i32 94, i32 98, i32 100, i32 104, i32 106, i32 110, i32 112, i32 116, i32 118, i32 122, i32 124, i32 128, i32 130, i32 134, i32 136, i32 140, i32 142, i32 146, i32 148, i32 152, i32 154, i32 158, i32 160, i32 164, i32 166, i32 170, i32 172, i32 176, i32 178, i32 182, i32 184, i32 188, i32 190>
435   ret <64 x i8> %r
438 define <64 x i8> @f4(ptr %p0) {
439 ; AVX2-LABEL: f4:
440 ; AVX2:       # %bb.0:
441 ; AVX2-NEXT:    vmovdqa 128(%rdi), %ymm1
442 ; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm0
443 ; AVX2-NEXT:    vmovdqa (%rdi), %xmm2
444 ; AVX2-NEXT:    vmovdqa 16(%rdi), %xmm3
445 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,4,6,10,12,128,128,128,128,128,128,u,u,u,u,u>
446 ; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
447 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <128,128,128,128,128,0,2,6,8,12,14,u,u,u,u,u>
448 ; AVX2-NEXT:    vpshufb %xmm5, %xmm3, %xmm3
449 ; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2
450 ; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm3 = [0,4,6,10,12,0,0,0,0,0,0,2,4,8,10,14,0,4,6,10,12,0,0,0,0,0,0,2,4,8,10,14]
451 ; AVX2-NEXT:    # ymm3 = mem[0,1,0,1]
452 ; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
453 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0]
454 ; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm0, %ymm0
455 ; AVX2-NEXT:    vmovdqa 80(%rdi), %xmm2
456 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm7 = <u,u,u,u,u,128,128,128,128,128,128,2,4,8,10,14>
457 ; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2
458 ; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm8
459 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm9 = <u,u,u,u,u,0,2,6,8,12,14,128,128,128,128,128>
460 ; AVX2-NEXT:    vpshufb %xmm9, %xmm8, %xmm8
461 ; AVX2-NEXT:    vpor %xmm2, %xmm8, %xmm2
462 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
463 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm8 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0]
464 ; AVX2-NEXT:    vpblendvb %ymm8, %ymm0, %ymm2, %ymm0
465 ; AVX2-NEXT:    vmovdqa 96(%rdi), %xmm2
466 ; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
467 ; AVX2-NEXT:    vmovdqa 112(%rdi), %xmm4
468 ; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
469 ; AVX2-NEXT:    vpor %xmm2, %xmm4, %xmm2
470 ; AVX2-NEXT:    vpshufb %ymm3, %ymm1, %ymm1
471 ; AVX2-NEXT:    vpblendvb %ymm6, %ymm2, %ymm1, %ymm1
472 ; AVX2-NEXT:    vmovdqa 176(%rdi), %xmm2
473 ; AVX2-NEXT:    vpshufb %xmm7, %xmm2, %xmm2
474 ; AVX2-NEXT:    vmovdqa 160(%rdi), %xmm3
475 ; AVX2-NEXT:    vpshufb %xmm9, %xmm3, %xmm3
476 ; AVX2-NEXT:    vpor %xmm2, %xmm3, %xmm2
477 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
478 ; AVX2-NEXT:    vpblendvb %ymm8, %ymm1, %ymm2, %ymm1
479 ; AVX2-NEXT:    retq
481 ; AVX512F-LABEL: f4:
482 ; AVX512F:       # %bb.0:
483 ; AVX512F-NEXT:    vmovdqa 176(%rdi), %xmm0
484 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = <u,u,u,u,u,128,128,128,128,128,128,2,4,8,10,14>
485 ; AVX512F-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
486 ; AVX512F-NEXT:    vmovdqa 160(%rdi), %xmm2
487 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = <u,u,u,u,u,0,2,6,8,12,14,128,128,128,128,128>
488 ; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
489 ; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm0
490 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
491 ; AVX512F-NEXT:    vmovdqa (%rdi), %xmm2
492 ; AVX512F-NEXT:    vmovdqa 16(%rdi), %xmm4
493 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm5 = <0,4,6,10,12,128,128,128,128,128,128,u,u,u,u,u>
494 ; AVX512F-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
495 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm6 = <128,128,128,128,128,0,2,6,8,12,14,u,u,u,u,u>
496 ; AVX512F-NEXT:    vpshufb %xmm6, %xmm4, %xmm4
497 ; AVX512F-NEXT:    vpor %xmm2, %xmm4, %xmm2
498 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
499 ; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm2
500 ; AVX512F-NEXT:    vpshufb {{.*#+}} ymm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm2[2,4,8,10,14,16,20,22,26,28,u,u,u,u,u,u,u,u,u,u,u]
501 ; AVX512F-NEXT:    vmovdqa 128(%rdi), %ymm4
502 ; AVX512F-NEXT:    vpshufb {{.*#+}} ymm4 = ymm4[u,u,u,u,u,u,u,u,u,u,u,2,4,8,10,14,16,20,22,26,28],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
503 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm4, %zmm2, %zmm2
504 ; AVX512F-NEXT:    vbroadcasti64x4 {{.*#+}} zmm4 = [255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255]
505 ; AVX512F-NEXT:    # zmm4 = mem[0,1,2,3,0,1,2,3]
506 ; AVX512F-NEXT:    vpternlogq $234, %zmm2, %zmm0, %zmm4
507 ; AVX512F-NEXT:    vmovdqa 96(%rdi), %xmm0
508 ; AVX512F-NEXT:    vpshufb %xmm5, %xmm0, %xmm0
509 ; AVX512F-NEXT:    vmovdqa 112(%rdi), %xmm2
510 ; AVX512F-NEXT:    vpshufb %xmm6, %xmm2, %xmm2
511 ; AVX512F-NEXT:    vpor %xmm0, %xmm2, %xmm0
512 ; AVX512F-NEXT:    vinserti32x4 $2, %xmm0, %zmm0, %zmm0
513 ; AVX512F-NEXT:    vmovdqa 80(%rdi), %xmm2
514 ; AVX512F-NEXT:    vpshufb %xmm1, %xmm2, %xmm1
515 ; AVX512F-NEXT:    vmovdqa 64(%rdi), %xmm2
516 ; AVX512F-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
517 ; AVX512F-NEXT:    vpor %xmm1, %xmm2, %xmm1
518 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
519 ; AVX512F-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm1[0,1,2,3],zmm0[4,5,6,7]
520 ; AVX512F-NEXT:    vpternlogq $216, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm4, %zmm0
521 ; AVX512F-NEXT:    retq
523 ; AVX512BW-LABEL: f4:
524 ; AVX512BW:       # %bb.0:
525 ; AVX512BW-NEXT:    vmovdqa 176(%rdi), %xmm0
526 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = <u,u,u,u,u,128,128,128,128,128,128,2,4,8,10,14>
527 ; AVX512BW-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
528 ; AVX512BW-NEXT:    vmovdqa 160(%rdi), %xmm2
529 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm3 = <u,u,u,u,u,0,2,6,8,12,14,128,128,128,128,128>
530 ; AVX512BW-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
531 ; AVX512BW-NEXT:    vpor %xmm0, %xmm2, %xmm0
532 ; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
533 ; AVX512BW-NEXT:    vmovdqa (%rdi), %xmm2
534 ; AVX512BW-NEXT:    vmovdqa 16(%rdi), %xmm4
535 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm5 = <0,4,6,10,12,128,128,128,128,128,128,u,u,u,u,u>
536 ; AVX512BW-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
537 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm6 = <128,128,128,128,128,0,2,6,8,12,14,u,u,u,u,u>
538 ; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4
539 ; AVX512BW-NEXT:    vpor %xmm2, %xmm4, %xmm2
540 ; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
541 ; AVX512BW-NEXT:    vmovdqa 32(%rdi), %ymm2
542 ; AVX512BW-NEXT:    vinserti64x4 $1, 128(%rdi), %zmm2, %zmm2
543 ; AVX512BW-NEXT:    vbroadcasti64x4 {{.*#+}} zmm4 = <u,u,u,u,u,u,u,u,u,u,u,2,4,8,10,14,0,4,6,10,12,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,2,4,8,10,14,0,4,6,10,12,u,u,u,u,u,u,u,u,u,u,u>
544 ; AVX512BW-NEXT:    # zmm4 = mem[0,1,2,3,0,1,2,3]
545 ; AVX512BW-NEXT:    movabsq $8998403163813888, %rax # imm = 0x1FF800001FF800
546 ; AVX512BW-NEXT:    kmovq %rax, %k1
547 ; AVX512BW-NEXT:    vpshufb %zmm4, %zmm2, %zmm0 {%k1}
548 ; AVX512BW-NEXT:    vmovdqa 96(%rdi), %xmm2
549 ; AVX512BW-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
550 ; AVX512BW-NEXT:    vmovdqa 112(%rdi), %xmm4
551 ; AVX512BW-NEXT:    vpshufb %xmm6, %xmm4, %xmm4
552 ; AVX512BW-NEXT:    vpor %xmm2, %xmm4, %xmm2
553 ; AVX512BW-NEXT:    vinserti32x4 $2, %xmm2, %zmm0, %zmm2
554 ; AVX512BW-NEXT:    vmovdqa 80(%rdi), %xmm4
555 ; AVX512BW-NEXT:    vpshufb %xmm1, %xmm4, %xmm1
556 ; AVX512BW-NEXT:    vmovdqa 64(%rdi), %xmm4
557 ; AVX512BW-NEXT:    vpshufb %xmm3, %xmm4, %xmm3
558 ; AVX512BW-NEXT:    vpor %xmm1, %xmm3, %xmm1
559 ; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
560 ; AVX512BW-NEXT:    vshufi64x2 {{.*#+}} zmm1 = zmm1[0,1,2,3],zmm2[4,5,6,7]
561 ; AVX512BW-NEXT:    movabsq $8796090925056, %rax # imm = 0x7FFFFE00000
562 ; AVX512BW-NEXT:    kmovq %rax, %k1
563 ; AVX512BW-NEXT:    vmovdqu8 %zmm1, %zmm0 {%k1}
564 ; AVX512BW-NEXT:    retq
566 ; AVX512VBMI-LABEL: f4:
567 ; AVX512VBMI:       # %bb.0:
568 ; AVX512VBMI-NEXT:    vmovdqa64 64(%rdi), %zmm0
569 ; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm1 = <64,68,70,74,76,80,82,86,88,92,94,98,100,104,106,110,112,116,118,122,124,0,2,6,8,12,14,18,20,24,26,30,32,36,38,42,44,48,50,54,56,60,62,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
570 ; AVX512VBMI-NEXT:    vpermi2b (%rdi), %zmm0, %zmm1
571 ; AVX512VBMI-NEXT:    vmovdqa64 {{.*#+}} zmm0 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,66,68,72,74,78,80,84,86,90,92,96,98,102,104,108,110,114,116,120,122,126]
572 ; AVX512VBMI-NEXT:    vpermi2b 128(%rdi), %zmm1, %zmm0
573 ; AVX512VBMI-NEXT:    retq
574   %a0 = load <192 x i8>, ptr %p0
575   %r = shufflevector <192 x i8> %a0, <192 x i8> poison, <64 x i32> <i32 0, i32 4, i32 6, i32 10, i32 12, i32 16, i32 18, i32 22, i32 24, i32 28, i32 30, i32 34, i32 36, i32 40, i32 42, i32 46, i32 48, i32 52, i32 54, i32 58, i32 60, i32 64, i32 66, i32 70, i32 72, i32 76, i32 78, i32 82, i32 84, i32 88, i32 90, i32 94, i32 96, i32 100, i32 102, i32 106, i32 108, i32 112, i32 114, i32 118, i32 120, i32 124, i32 126, i32 130, i32 132, i32 136, i32 138, i32 142, i32 144, i32 148, i32 150, i32 154, i32 156, i32 160, i32 162, i32 166, i32 168, i32 172, i32 174, i32 178, i32 180, i32 184, i32 186, i32 190>
576   ret <64 x i8> %r