[PowerPC] Recommit r314244 with refactoring and off by default
[llvm-core.git] / test / CodeGen / X86 / avx512bw-intrinsics-upgrade.ll
blobc12dc8075bc1c260cb05a97517f4915bb7f847e9
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512BW
3 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F-32
5 declare <64 x i8> @llvm.x86.avx512.mask.pbroadcast.b.gpr.512(i8, <64 x i8>, i64)
7   define <64 x i8>@test_int_x86_avx512_mask_pbroadcast_b_gpr_512(i8 %x0, <64 x i8> %x1, i64 %mask) {
8 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pbroadcast_b_gpr_512:
9 ; AVX512BW:       ## BB#0:
10 ; AVX512BW-NEXT:    vpbroadcastb %edi, %zmm1
11 ; AVX512BW-NEXT:    kmovq %rsi, %k1
12 ; AVX512BW-NEXT:    vpbroadcastb %edi, %zmm0 {%k1}
13 ; AVX512BW-NEXT:    vpbroadcastb %edi, %zmm2 {%k1} {z}
14 ; AVX512BW-NEXT:    vpaddb %zmm2, %zmm0, %zmm0
15 ; AVX512BW-NEXT:    vpaddb %zmm0, %zmm1, %zmm0
16 ; AVX512BW-NEXT:    retq
18 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pbroadcast_b_gpr_512:
19 ; AVX512F-32:       # BB#0:
20 ; AVX512F-32-NEXT:    movb {{[0-9]+}}(%esp), %al
21 ; AVX512F-32-NEXT:    vpbroadcastb %eax, %zmm1
22 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
23 ; AVX512F-32-NEXT:    vpbroadcastb %eax, %zmm0 {%k1}
24 ; AVX512F-32-NEXT:    vpbroadcastb %eax, %zmm2 {%k1} {z}
25 ; AVX512F-32-NEXT:    vpaddb %zmm2, %zmm0, %zmm0
26 ; AVX512F-32-NEXT:    vpaddb %zmm0, %zmm1, %zmm0
27 ; AVX512F-32-NEXT:    retl
28     %res = call <64 x i8> @llvm.x86.avx512.mask.pbroadcast.b.gpr.512(i8 %x0, <64 x i8> %x1, i64 -1)
29     %res1 = call <64 x i8> @llvm.x86.avx512.mask.pbroadcast.b.gpr.512(i8 %x0, <64 x i8> %x1, i64 %mask)
30     %res2 = call <64 x i8> @llvm.x86.avx512.mask.pbroadcast.b.gpr.512(i8 %x0, <64 x i8> zeroinitializer, i64 %mask)
31     %res3 = add <64 x i8> %res, %res1
32     %res4 = add <64 x i8> %res2, %res3
33     ret <64 x i8> %res4
34   }
36 declare <32 x i16> @llvm.x86.avx512.mask.pbroadcast.w.gpr.512(i16, <32 x i16>, i32)
37   define <32 x i16>@test_int_x86_avx512_mask_pbroadcast_w_gpr_512(i16 %x0, <32 x i16> %x1, i32 %mask) {
38 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pbroadcast_w_gpr_512:
39 ; AVX512BW:       ## BB#0:
40 ; AVX512BW-NEXT:    vpbroadcastw %edi, %zmm1
41 ; AVX512BW-NEXT:    kmovd %esi, %k1
42 ; AVX512BW-NEXT:    vpbroadcastw %edi, %zmm0 {%k1}
43 ; AVX512BW-NEXT:    vpbroadcastw %edi, %zmm2 {%k1} {z}
44 ; AVX512BW-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
45 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
46 ; AVX512BW-NEXT:    retq
48 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pbroadcast_w_gpr_512:
49 ; AVX512F-32:       # BB#0:
50 ; AVX512F-32-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
51 ; AVX512F-32-NEXT:    vpbroadcastw %eax, %zmm1
52 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
53 ; AVX512F-32-NEXT:    vpbroadcastw %eax, %zmm0 {%k1}
54 ; AVX512F-32-NEXT:    vpbroadcastw %eax, %zmm2 {%k1} {z}
55 ; AVX512F-32-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
56 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
57 ; AVX512F-32-NEXT:    retl
58     %res = call <32 x i16> @llvm.x86.avx512.mask.pbroadcast.w.gpr.512(i16 %x0, <32 x i16> %x1, i32 -1)
59     %res1 = call <32 x i16> @llvm.x86.avx512.mask.pbroadcast.w.gpr.512(i16 %x0, <32 x i16> %x1, i32 %mask)
60    %res2 = call <32 x i16> @llvm.x86.avx512.mask.pbroadcast.w.gpr.512(i16 %x0, <32 x i16> zeroinitializer, i32 %mask)
61     %res3 = add <32 x i16> %res, %res1
62    %res4 = add <32 x i16> %res2, %res3
63     ret <32 x i16> %res4
64  }
66 declare void @llvm.x86.avx512.mask.storeu.b.512(i8*, <64 x i8>, i64)
68 define void@test_int_x86_avx512_mask_storeu_b_512(i8* %ptr1, i8* %ptr2, <64 x i8> %x1, i64 %x2) {
69 ; AVX512BW-LABEL: test_int_x86_avx512_mask_storeu_b_512:
70 ; AVX512BW:       ## BB#0:
71 ; AVX512BW-NEXT:    kmovq %rdx, %k1
72 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
73 ; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rsi)
74 ; AVX512BW-NEXT:    vzeroupper
75 ; AVX512BW-NEXT:    retq
77 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_storeu_b_512:
78 ; AVX512F-32:       # BB#0:
79 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
80 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
81 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
82 ; AVX512F-32-NEXT:    vmovdqu8 %zmm0, (%ecx) {%k1}
83 ; AVX512F-32-NEXT:    vmovdqu32 %zmm0, (%eax)
84 ; AVX512F-32-NEXT:    vzeroupper
85 ; AVX512F-32-NEXT:    retl
86   call void @llvm.x86.avx512.mask.storeu.b.512(i8* %ptr1, <64 x i8> %x1, i64 %x2)
87   call void @llvm.x86.avx512.mask.storeu.b.512(i8* %ptr2, <64 x i8> %x1, i64 -1)
88   ret void
91 declare void @llvm.x86.avx512.mask.storeu.w.512(i8*, <32 x i16>, i32)
93 define void@test_int_x86_avx512_mask_storeu_w_512(i8* %ptr1, i8* %ptr2, <32 x i16> %x1, i32 %x2) {
94 ; AVX512BW-LABEL: test_int_x86_avx512_mask_storeu_w_512:
95 ; AVX512BW:       ## BB#0:
96 ; AVX512BW-NEXT:    kmovd %edx, %k1
97 ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
98 ; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rsi)
99 ; AVX512BW-NEXT:    vzeroupper
100 ; AVX512BW-NEXT:    retq
102 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_storeu_w_512:
103 ; AVX512F-32:       # BB#0:
104 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
105 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
106 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
107 ; AVX512F-32-NEXT:    vmovdqu16 %zmm0, (%ecx) {%k1}
108 ; AVX512F-32-NEXT:    vmovdqu32 %zmm0, (%eax)
109 ; AVX512F-32-NEXT:    vzeroupper
110 ; AVX512F-32-NEXT:    retl
111   call void @llvm.x86.avx512.mask.storeu.w.512(i8* %ptr1, <32 x i16> %x1, i32 %x2)
112   call void @llvm.x86.avx512.mask.storeu.w.512(i8* %ptr2, <32 x i16> %x1, i32 -1)
113   ret void
116 declare <32 x i16> @llvm.x86.avx512.mask.loadu.w.512(i8*, <32 x i16>, i32)
118 define <32 x i16>@test_int_x86_avx512_mask_loadu_w_512(i8* %ptr, i8* %ptr2, <32 x i16> %x1, i32 %mask) {
119 ; AVX512BW-LABEL: test_int_x86_avx512_mask_loadu_w_512:
120 ; AVX512BW:       ## BB#0:
121 ; AVX512BW-NEXT:    vmovdqu64 (%rdi), %zmm0
122 ; AVX512BW-NEXT:    kmovd %edx, %k1
123 ; AVX512BW-NEXT:    vmovdqu16 (%rsi), %zmm0 {%k1}
124 ; AVX512BW-NEXT:    vmovdqu16 (%rdi), %zmm1 {%k1} {z}
125 ; AVX512BW-NEXT:    vpaddw %zmm1, %zmm0, %zmm0
126 ; AVX512BW-NEXT:    retq
128 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_loadu_w_512:
129 ; AVX512F-32:       # BB#0:
130 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
131 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
132 ; AVX512F-32-NEXT:    vmovdqu64 (%ecx), %zmm0
133 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
134 ; AVX512F-32-NEXT:    vmovdqu16 (%eax), %zmm0 {%k1}
135 ; AVX512F-32-NEXT:    vmovdqu16 (%ecx), %zmm1 {%k1} {z}
136 ; AVX512F-32-NEXT:    vpaddw %zmm1, %zmm0, %zmm0
137 ; AVX512F-32-NEXT:    retl
138   %res0 = call <32 x i16> @llvm.x86.avx512.mask.loadu.w.512(i8* %ptr, <32 x i16> %x1, i32 -1)
139   %res = call <32 x i16> @llvm.x86.avx512.mask.loadu.w.512(i8* %ptr2, <32 x i16> %res0, i32 %mask)
140   %res1 = call <32 x i16> @llvm.x86.avx512.mask.loadu.w.512(i8* %ptr, <32 x i16> zeroinitializer, i32 %mask)
141   %res2 = add <32 x i16> %res, %res1
142   ret <32 x i16> %res2
145 declare <64 x i8> @llvm.x86.avx512.mask.loadu.b.512(i8*, <64 x i8>, i64)
147 define <64 x i8>@test_int_x86_avx512_mask_loadu_b_512(i8* %ptr, i8* %ptr2, <64 x i8> %x1, i64 %mask) {
148 ; AVX512BW-LABEL: test_int_x86_avx512_mask_loadu_b_512:
149 ; AVX512BW:       ## BB#0:
150 ; AVX512BW-NEXT:    vmovdqu64 (%rdi), %zmm0
151 ; AVX512BW-NEXT:    kmovq %rdx, %k1
152 ; AVX512BW-NEXT:    vmovdqu8 (%rsi), %zmm0 {%k1}
153 ; AVX512BW-NEXT:    vmovdqu8 (%rdi), %zmm1 {%k1} {z}
154 ; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0
155 ; AVX512BW-NEXT:    retq
157 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_loadu_b_512:
158 ; AVX512F-32:       # BB#0:
159 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
160 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
161 ; AVX512F-32-NEXT:    vmovdqu64 (%ecx), %zmm0
162 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
163 ; AVX512F-32-NEXT:    vmovdqu8 (%eax), %zmm0 {%k1}
164 ; AVX512F-32-NEXT:    vmovdqu8 (%ecx), %zmm1 {%k1} {z}
165 ; AVX512F-32-NEXT:    vpaddb %zmm1, %zmm0, %zmm0
166 ; AVX512F-32-NEXT:    retl
167   %res0 = call <64 x i8> @llvm.x86.avx512.mask.loadu.b.512(i8* %ptr, <64 x i8> %x1, i64 -1)
168   %res = call <64 x i8> @llvm.x86.avx512.mask.loadu.b.512(i8* %ptr2, <64 x i8> %res0, i64 %mask)
169   %res1 = call <64 x i8> @llvm.x86.avx512.mask.loadu.b.512(i8* %ptr, <64 x i8> zeroinitializer, i64 %mask)
170   %res2 = add <64 x i8> %res, %res1
171   ret <64 x i8> %res2
174 declare <8 x i64> @llvm.x86.avx512.psll.dq.512(<8 x i64>, i32)
176 define <8 x i64>@test_int_x86_avx512_psll_dq_512(<8 x i64> %x0) {
177 ; AVX512BW-LABEL: test_int_x86_avx512_psll_dq_512:
178 ; AVX512BW:       ## BB#0:
179 ; AVX512BW-NEXT:    vpslldq {{.*#+}} zmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zmm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[16,17,18,19,20,21,22,23],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[32,33,34,35,36,37,38,39],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[48,49,50,51,52,53,54,55]
180 ; AVX512BW-NEXT:    vpslldq {{.*#+}} zmm0 = zero,zero,zero,zero,zmm0[0,1,2,3,4,5,6,7,8,9,10,11],zero,zero,zero,zero,zmm0[16,17,18,19,20,21,22,23,24,25,26,27],zero,zero,zero,zero,zmm0[32,33,34,35,36,37,38,39,40,41,42,43],zero,zero,zero,zero,zmm0[48,49,50,51,52,53,54,55,56,57,58,59]
181 ; AVX512BW-NEXT:    vpaddq %zmm0, %zmm1, %zmm0
182 ; AVX512BW-NEXT:    retq
184 ; AVX512F-32-LABEL: test_int_x86_avx512_psll_dq_512:
185 ; AVX512F-32:       # BB#0:
186 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} zmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zmm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[16,17,18,19,20,21,22,23],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[32,33,34,35,36,37,38,39],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[48,49,50,51,52,53,54,55]
187 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} zmm0 = zero,zero,zero,zero,zmm0[0,1,2,3,4,5,6,7,8,9,10,11],zero,zero,zero,zero,zmm0[16,17,18,19,20,21,22,23,24,25,26,27],zero,zero,zero,zero,zmm0[32,33,34,35,36,37,38,39,40,41,42,43],zero,zero,zero,zero,zmm0[48,49,50,51,52,53,54,55,56,57,58,59]
188 ; AVX512F-32-NEXT:    vpaddq %zmm0, %zmm1, %zmm0
189 ; AVX512F-32-NEXT:    retl
190   %res = call <8 x i64> @llvm.x86.avx512.psll.dq.512(<8 x i64> %x0, i32 8)
191   %res1 = call <8 x i64> @llvm.x86.avx512.psll.dq.512(<8 x i64> %x0, i32 4)
192   %res2 = add <8 x i64> %res, %res1
193   ret <8 x i64> %res2
196 define <8 x i64>@test_int_x86_avx512_psll_load_dq_512(<8 x i64>* %p0) {
197 ; AVX512BW-LABEL: test_int_x86_avx512_psll_load_dq_512:
198 ; AVX512BW:       ## BB#0:
199 ; AVX512BW-NEXT:    vpslldq {{.*#+}} zmm0 = zero,zero,zero,zero,mem[0,1,2,3,4,5,6,7,8,9,10,11],zero,zero,zero,zero,mem[16,17,18,19,20,21,22,23,24,25,26,27],zero,zero,zero,zero,mem[32,33,34,35,36,37,38,39,40,41,42,43],zero,zero,zero,zero,mem[48,49,50,51,52,53,54,55,56,57,58,59]
200 ; AVX512BW-NEXT:    retq
202 ; AVX512F-32-LABEL: test_int_x86_avx512_psll_load_dq_512:
203 ; AVX512F-32:       # BB#0:
204 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
205 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} zmm0 = zero,zero,zero,zero,mem[0,1,2,3,4,5,6,7,8,9,10,11],zero,zero,zero,zero,mem[16,17,18,19,20,21,22,23,24,25,26,27],zero,zero,zero,zero,mem[32,33,34,35,36,37,38,39,40,41,42,43],zero,zero,zero,zero,mem[48,49,50,51,52,53,54,55,56,57,58,59]
206 ; AVX512F-32-NEXT:    retl
207   %x0 = load <8 x i64>, <8 x i64> *%p0
208   %res = call <8 x i64> @llvm.x86.avx512.psll.dq.512(<8 x i64> %x0, i32 4)
209   ret <8 x i64> %res
212 declare <8 x i64> @llvm.x86.avx512.psrl.dq.512(<8 x i64>, i32)
214 define <8 x i64>@test_int_x86_avx512_psrl_dq_512(<8 x i64> %x0) {
215 ; AVX512BW-LABEL: test_int_x86_avx512_psrl_dq_512:
216 ; AVX512BW:       ## BB#0:
217 ; AVX512BW-NEXT:    vpsrldq {{.*#+}} zmm1 = zmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[40,41,42,43,44,45,46,47],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[56,57,58,59,60,61,62,63],zero,zero,zero,zero,zero,zero,zero,zero
218 ; AVX512BW-NEXT:    vpsrldq {{.*#+}} zmm0 = zmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zmm0[20,21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,zmm0[36,37,38,39,40,41,42,43,44,45,46,47],zero,zero,zero,zero,zmm0[52,53,54,55,56,57,58,59,60,61,62,63],zero,zero,zero,zero
219 ; AVX512BW-NEXT:    vpaddq %zmm0, %zmm1, %zmm0
220 ; AVX512BW-NEXT:    retq
222 ; AVX512F-32-LABEL: test_int_x86_avx512_psrl_dq_512:
223 ; AVX512F-32:       # BB#0:
224 ; AVX512F-32-NEXT:    vpsrldq {{.*#+}} zmm1 = zmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[40,41,42,43,44,45,46,47],zero,zero,zero,zero,zero,zero,zero,zero,zmm0[56,57,58,59,60,61,62,63],zero,zero,zero,zero,zero,zero,zero,zero
225 ; AVX512F-32-NEXT:    vpsrldq {{.*#+}} zmm0 = zmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zmm0[20,21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,zmm0[36,37,38,39,40,41,42,43,44,45,46,47],zero,zero,zero,zero,zmm0[52,53,54,55,56,57,58,59,60,61,62,63],zero,zero,zero,zero
226 ; AVX512F-32-NEXT:    vpaddq %zmm0, %zmm1, %zmm0
227 ; AVX512F-32-NEXT:    retl
228   %res = call <8 x i64> @llvm.x86.avx512.psrl.dq.512(<8 x i64> %x0, i32 8)
229   %res1 = call <8 x i64> @llvm.x86.avx512.psrl.dq.512(<8 x i64> %x0, i32 4)
230   %res2 = add <8 x i64> %res, %res1
231   ret <8 x i64> %res2
234 define <8 x i64>@test_int_x86_avx512_psrl_load_dq_512(<8 x i64>* %p0) {
235 ; AVX512BW-LABEL: test_int_x86_avx512_psrl_load_dq_512:
236 ; AVX512BW:       ## BB#0:
237 ; AVX512BW-NEXT:    vpsrldq {{.*#+}} zmm0 = mem[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,mem[20,21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,mem[36,37,38,39,40,41,42,43,44,45,46,47],zero,zero,zero,zero,mem[52,53,54,55,56,57,58,59,60,61,62,63],zero,zero,zero,zero
238 ; AVX512BW-NEXT:    retq
240 ; AVX512F-32-LABEL: test_int_x86_avx512_psrl_load_dq_512:
241 ; AVX512F-32:       # BB#0:
242 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
243 ; AVX512F-32-NEXT:    vpsrldq {{.*#+}} zmm0 = mem[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,mem[20,21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,mem[36,37,38,39,40,41,42,43,44,45,46,47],zero,zero,zero,zero,mem[52,53,54,55,56,57,58,59,60,61,62,63],zero,zero,zero,zero
244 ; AVX512F-32-NEXT:    retl
245   %x0 = load <8 x i64>, <8 x i64> *%p0
246   %res = call <8 x i64> @llvm.x86.avx512.psrl.dq.512(<8 x i64> %x0, i32 4)
247   ret <8 x i64> %res
250 declare <64 x i8> @llvm.x86.avx512.mask.palignr.512(<64 x i8>, <64 x i8>, i32, <64 x i8>, i64)
252 define <64 x i8>@test_int_x86_avx512_mask_palignr_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x3, i64 %x4) {
253 ; AVX512BW-LABEL: test_int_x86_avx512_mask_palignr_512:
254 ; AVX512BW:       ## BB#0:
255 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm3 = zmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm0[0,1],zmm1[18,19,20,21,22,23,24,25,26,27,28,29,30,31],zmm0[16,17],zmm1[34,35,36,37,38,39,40,41,42,43,44,45,46,47],zmm0[32,33],zmm1[50,51,52,53,54,55,56,57,58,59,60,61,62,63],zmm0[48,49]
256 ; AVX512BW-NEXT:    kmovq %rdi, %k1
257 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm2 {%k1} = zmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm0[0,1],zmm1[18,19,20,21,22,23,24,25,26,27,28,29,30,31],zmm0[16,17],zmm1[34,35,36,37,38,39,40,41,42,43,44,45,46,47],zmm0[32,33],zmm1[50,51,52,53,54,55,56,57,58,59,60,61,62,63],zmm0[48,49]
258 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm0 {%k1} {z} = zmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm0[0,1],zmm1[18,19,20,21,22,23,24,25,26,27,28,29,30,31],zmm0[16,17],zmm1[34,35,36,37,38,39,40,41,42,43,44,45,46,47],zmm0[32,33],zmm1[50,51,52,53,54,55,56,57,58,59,60,61,62,63],zmm0[48,49]
259 ; AVX512BW-NEXT:    vpaddb %zmm3, %zmm0, %zmm0
260 ; AVX512BW-NEXT:    vpaddb %zmm0, %zmm2, %zmm0
261 ; AVX512BW-NEXT:    retq
263 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_palignr_512:
264 ; AVX512F-32:       # BB#0:
265 ; AVX512F-32-NEXT:    vpalignr {{.*#+}} zmm3 = zmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm0[0,1],zmm1[18,19,20,21,22,23,24,25,26,27,28,29,30,31],zmm0[16,17],zmm1[34,35,36,37,38,39,40,41,42,43,44,45,46,47],zmm0[32,33],zmm1[50,51,52,53,54,55,56,57,58,59,60,61,62,63],zmm0[48,49]
266 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
267 ; AVX512F-32-NEXT:    vpalignr {{.*#+}} zmm2 {%k1} = zmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm0[0,1],zmm1[18,19,20,21,22,23,24,25,26,27,28,29,30,31],zmm0[16,17],zmm1[34,35,36,37,38,39,40,41,42,43,44,45,46,47],zmm0[32,33],zmm1[50,51,52,53,54,55,56,57,58,59,60,61,62,63],zmm0[48,49]
268 ; AVX512F-32-NEXT:    vpalignr {{.*#+}} zmm0 {%k1} {z} = zmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zmm0[0,1],zmm1[18,19,20,21,22,23,24,25,26,27,28,29,30,31],zmm0[16,17],zmm1[34,35,36,37,38,39,40,41,42,43,44,45,46,47],zmm0[32,33],zmm1[50,51,52,53,54,55,56,57,58,59,60,61,62,63],zmm0[48,49]
269 ; AVX512F-32-NEXT:    vpaddb %zmm3, %zmm0, %zmm0
270 ; AVX512F-32-NEXT:    vpaddb %zmm0, %zmm2, %zmm0
271 ; AVX512F-32-NEXT:    retl
272   %res = call <64 x i8> @llvm.x86.avx512.mask.palignr.512(<64 x i8> %x0, <64 x i8> %x1, i32 2, <64 x i8> %x3, i64 %x4)
273   %res1 = call <64 x i8> @llvm.x86.avx512.mask.palignr.512(<64 x i8> %x0, <64 x i8> %x1, i32 2, <64 x i8> zeroinitializer, i64 %x4)
274   %res2 = call <64 x i8> @llvm.x86.avx512.mask.palignr.512(<64 x i8> %x0, <64 x i8> %x1, i32 2, <64 x i8> %x3, i64 -1)
275   %res3 = add <64 x i8> %res, %res1
276   %res4 = add <64 x i8> %res3, %res2
277   ret <64 x i8> %res4
280 declare <32 x i16> @llvm.x86.avx512.mask.pshufh.w.512(<32 x i16>, i32, <32 x i16>, i32)
282 define <32 x i16>@test_int_x86_avx512_mask_pshufh_w_512(<32 x i16> %x0, i32 %x1, <32 x i16> %x2, i32 %x3) {
283 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pshufh_w_512:
284 ; AVX512BW:       ## BB#0:
285 ; AVX512BW-NEXT:    vpshufhw {{.*#+}} zmm2 = zmm0[0,1,2,3,7,4,4,4,8,9,10,11,15,12,12,12,16,17,18,19,23,20,20,20,24,25,26,27,31,28,28,28]
286 ; AVX512BW-NEXT:    kmovd %esi, %k1
287 ; AVX512BW-NEXT:    vpshufhw {{.*#+}} zmm1 {%k1} = zmm0[0,1,2,3,7,4,4,4,8,9,10,11,15,12,12,12,16,17,18,19,23,20,20,20,24,25,26,27,31,28,28,28]
288 ; AVX512BW-NEXT:    vpshufhw {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,2,3,7,4,4,4,8,9,10,11,15,12,12,12,16,17,18,19,23,20,20,20,24,25,26,27,31,28,28,28]
289 ; AVX512BW-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
290 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
291 ; AVX512BW-NEXT:    retq
293 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pshufh_w_512:
294 ; AVX512F-32:       # BB#0:
295 ; AVX512F-32-NEXT:    vpshufhw {{.*#+}} zmm2 = zmm0[0,1,2,3,7,4,4,4,8,9,10,11,15,12,12,12,16,17,18,19,23,20,20,20,24,25,26,27,31,28,28,28]
296 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
297 ; AVX512F-32-NEXT:    vpshufhw {{.*#+}} zmm1 {%k1} = zmm0[0,1,2,3,7,4,4,4,8,9,10,11,15,12,12,12,16,17,18,19,23,20,20,20,24,25,26,27,31,28,28,28]
298 ; AVX512F-32-NEXT:    vpshufhw {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,2,3,7,4,4,4,8,9,10,11,15,12,12,12,16,17,18,19,23,20,20,20,24,25,26,27,31,28,28,28]
299 ; AVX512F-32-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
300 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
301 ; AVX512F-32-NEXT:    retl
302   %res = call <32 x i16> @llvm.x86.avx512.mask.pshufh.w.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 %x3)
303   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pshufh.w.512(<32 x i16> %x0, i32 3, <32 x i16> zeroinitializer, i32 %x3)
304   %res2 = call <32 x i16> @llvm.x86.avx512.mask.pshufh.w.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 -1)
305   %res3 = add <32 x i16> %res, %res1
306   %res4 = add <32 x i16> %res3, %res2
307   ret <32 x i16> %res4
310 declare <32 x i16> @llvm.x86.avx512.mask.pshufl.w.512(<32 x i16>, i32, <32 x i16>, i32)
312 define <32 x i16>@test_int_x86_avx512_mask_pshufl_w_512(<32 x i16> %x0, i32 %x1, <32 x i16> %x2, i32 %x3) {
313 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pshufl_w_512:
314 ; AVX512BW:       ## BB#0:
315 ; AVX512BW-NEXT:    vpshuflw {{.*#+}} zmm2 = zmm0[3,0,0,0,4,5,6,7,11,8,8,8,12,13,14,15,19,16,16,16,20,21,22,23,27,24,24,24,28,29,30,31]
316 ; AVX512BW-NEXT:    kmovd %esi, %k1
317 ; AVX512BW-NEXT:    vpshuflw {{.*#+}} zmm1 {%k1} = zmm0[3,0,0,0,4,5,6,7,11,8,8,8,12,13,14,15,19,16,16,16,20,21,22,23,27,24,24,24,28,29,30,31]
318 ; AVX512BW-NEXT:    vpshuflw {{.*#+}} zmm0 {%k1} {z} = zmm0[3,0,0,0,4,5,6,7,11,8,8,8,12,13,14,15,19,16,16,16,20,21,22,23,27,24,24,24,28,29,30,31]
319 ; AVX512BW-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
320 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
321 ; AVX512BW-NEXT:    retq
323 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pshufl_w_512:
324 ; AVX512F-32:       # BB#0:
325 ; AVX512F-32-NEXT:    vpshuflw {{.*#+}} zmm2 = zmm0[3,0,0,0,4,5,6,7,11,8,8,8,12,13,14,15,19,16,16,16,20,21,22,23,27,24,24,24,28,29,30,31]
326 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
327 ; AVX512F-32-NEXT:    vpshuflw {{.*#+}} zmm1 {%k1} = zmm0[3,0,0,0,4,5,6,7,11,8,8,8,12,13,14,15,19,16,16,16,20,21,22,23,27,24,24,24,28,29,30,31]
328 ; AVX512F-32-NEXT:    vpshuflw {{.*#+}} zmm0 {%k1} {z} = zmm0[3,0,0,0,4,5,6,7,11,8,8,8,12,13,14,15,19,16,16,16,20,21,22,23,27,24,24,24,28,29,30,31]
329 ; AVX512F-32-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
330 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
331 ; AVX512F-32-NEXT:    retl
332   %res = call <32 x i16> @llvm.x86.avx512.mask.pshufl.w.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 %x3)
333   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pshufl.w.512(<32 x i16> %x0, i32 3, <32 x i16> zeroinitializer, i32 %x3)
334   %res2 = call <32 x i16> @llvm.x86.avx512.mask.pshufl.w.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 -1)
335   %res3 = add <32 x i16> %res, %res1
336   %res4 = add <32 x i16> %res3, %res2
337   ret <32 x i16> %res4
340 define i64 @test_pcmpeq_b(<64 x i8> %a, <64 x i8> %b) {
341 ; AVX512BW-LABEL: test_pcmpeq_b:
342 ; AVX512BW:       ## BB#0:
343 ; AVX512BW-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0
344 ; AVX512BW-NEXT:    kmovq %k0, %rax
345 ; AVX512BW-NEXT:    vzeroupper
346 ; AVX512BW-NEXT:    retq
348 ; AVX512F-32-LABEL: test_pcmpeq_b:
349 ; AVX512F-32:       # BB#0:
350 ; AVX512F-32-NEXT:    subl $12, %esp
351 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 16
352 ; AVX512F-32-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0
353 ; AVX512F-32-NEXT:    kmovq %k0, (%esp)
354 ; AVX512F-32-NEXT:    movl (%esp), %eax
355 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
356 ; AVX512F-32-NEXT:    addl $12, %esp
357 ; AVX512F-32-NEXT:    vzeroupper
358 ; AVX512F-32-NEXT:    retl
359   %res = call i64 @llvm.x86.avx512.mask.pcmpeq.b.512(<64 x i8> %a, <64 x i8> %b, i64 -1)
360   ret i64 %res
363 define i64 @test_mask_pcmpeq_b(<64 x i8> %a, <64 x i8> %b, i64 %mask) {
364 ; AVX512BW-LABEL: test_mask_pcmpeq_b:
365 ; AVX512BW:       ## BB#0:
366 ; AVX512BW-NEXT:    kmovq %rdi, %k1
367 ; AVX512BW-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0 {%k1}
368 ; AVX512BW-NEXT:    kmovq %k0, %rax
369 ; AVX512BW-NEXT:    vzeroupper
370 ; AVX512BW-NEXT:    retq
372 ; AVX512F-32-LABEL: test_mask_pcmpeq_b:
373 ; AVX512F-32:       # BB#0:
374 ; AVX512F-32-NEXT:    subl $12, %esp
375 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 16
376 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
377 ; AVX512F-32-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0 {%k1}
378 ; AVX512F-32-NEXT:    kmovq %k0, (%esp)
379 ; AVX512F-32-NEXT:    movl (%esp), %eax
380 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
381 ; AVX512F-32-NEXT:    addl $12, %esp
382 ; AVX512F-32-NEXT:    vzeroupper
383 ; AVX512F-32-NEXT:    retl
384   %res = call i64 @llvm.x86.avx512.mask.pcmpeq.b.512(<64 x i8> %a, <64 x i8> %b, i64 %mask)
385   ret i64 %res
388 declare i64 @llvm.x86.avx512.mask.pcmpeq.b.512(<64 x i8>, <64 x i8>, i64)
390 define i32 @test_pcmpeq_w(<32 x i16> %a, <32 x i16> %b) {
391 ; AVX512BW-LABEL: test_pcmpeq_w:
392 ; AVX512BW:       ## BB#0:
393 ; AVX512BW-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0
394 ; AVX512BW-NEXT:    kmovd %k0, %eax
395 ; AVX512BW-NEXT:    vzeroupper
396 ; AVX512BW-NEXT:    retq
398 ; AVX512F-32-LABEL: test_pcmpeq_w:
399 ; AVX512F-32:       # BB#0:
400 ; AVX512F-32-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0
401 ; AVX512F-32-NEXT:    kmovd %k0, %eax
402 ; AVX512F-32-NEXT:    vzeroupper
403 ; AVX512F-32-NEXT:    retl
404   %res = call i32 @llvm.x86.avx512.mask.pcmpeq.w.512(<32 x i16> %a, <32 x i16> %b, i32 -1)
405   ret i32 %res
408 define i32 @test_mask_pcmpeq_w(<32 x i16> %a, <32 x i16> %b, i32 %mask) {
409 ; AVX512BW-LABEL: test_mask_pcmpeq_w:
410 ; AVX512BW:       ## BB#0:
411 ; AVX512BW-NEXT:    kmovd %edi, %k1
412 ; AVX512BW-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0 {%k1}
413 ; AVX512BW-NEXT:    kmovd %k0, %eax
414 ; AVX512BW-NEXT:    vzeroupper
415 ; AVX512BW-NEXT:    retq
417 ; AVX512F-32-LABEL: test_mask_pcmpeq_w:
418 ; AVX512F-32:       # BB#0:
419 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
420 ; AVX512F-32-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0 {%k1}
421 ; AVX512F-32-NEXT:    kmovd %k0, %eax
422 ; AVX512F-32-NEXT:    vzeroupper
423 ; AVX512F-32-NEXT:    retl
424   %res = call i32 @llvm.x86.avx512.mask.pcmpeq.w.512(<32 x i16> %a, <32 x i16> %b, i32 %mask)
425   ret i32 %res
428 declare i32 @llvm.x86.avx512.mask.pcmpeq.w.512(<32 x i16>, <32 x i16>, i32)
430 define i64 @test_pcmpgt_b(<64 x i8> %a, <64 x i8> %b) {
431 ; AVX512BW-LABEL: test_pcmpgt_b:
432 ; AVX512BW:       ## BB#0:
433 ; AVX512BW-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0
434 ; AVX512BW-NEXT:    kmovq %k0, %rax
435 ; AVX512BW-NEXT:    vzeroupper
436 ; AVX512BW-NEXT:    retq
438 ; AVX512F-32-LABEL: test_pcmpgt_b:
439 ; AVX512F-32:       # BB#0:
440 ; AVX512F-32-NEXT:    subl $12, %esp
441 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 16
442 ; AVX512F-32-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0
443 ; AVX512F-32-NEXT:    kmovq %k0, (%esp)
444 ; AVX512F-32-NEXT:    movl (%esp), %eax
445 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
446 ; AVX512F-32-NEXT:    addl $12, %esp
447 ; AVX512F-32-NEXT:    vzeroupper
448 ; AVX512F-32-NEXT:    retl
449   %res = call i64 @llvm.x86.avx512.mask.pcmpgt.b.512(<64 x i8> %a, <64 x i8> %b, i64 -1)
450   ret i64 %res
453 define i64 @test_mask_pcmpgt_b(<64 x i8> %a, <64 x i8> %b, i64 %mask) {
454 ; AVX512BW-LABEL: test_mask_pcmpgt_b:
455 ; AVX512BW:       ## BB#0:
456 ; AVX512BW-NEXT:    kmovq %rdi, %k1
457 ; AVX512BW-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0 {%k1}
458 ; AVX512BW-NEXT:    kmovq %k0, %rax
459 ; AVX512BW-NEXT:    vzeroupper
460 ; AVX512BW-NEXT:    retq
462 ; AVX512F-32-LABEL: test_mask_pcmpgt_b:
463 ; AVX512F-32:       # BB#0:
464 ; AVX512F-32-NEXT:    subl $12, %esp
465 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 16
466 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
467 ; AVX512F-32-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0 {%k1}
468 ; AVX512F-32-NEXT:    kmovq %k0, (%esp)
469 ; AVX512F-32-NEXT:    movl (%esp), %eax
470 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
471 ; AVX512F-32-NEXT:    addl $12, %esp
472 ; AVX512F-32-NEXT:    vzeroupper
473 ; AVX512F-32-NEXT:    retl
474   %res = call i64 @llvm.x86.avx512.mask.pcmpgt.b.512(<64 x i8> %a, <64 x i8> %b, i64 %mask)
475   ret i64 %res
478 declare i64 @llvm.x86.avx512.mask.pcmpgt.b.512(<64 x i8>, <64 x i8>, i64)
480 define i32 @test_pcmpgt_w(<32 x i16> %a, <32 x i16> %b) {
481 ; AVX512BW-LABEL: test_pcmpgt_w:
482 ; AVX512BW:       ## BB#0:
483 ; AVX512BW-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0
484 ; AVX512BW-NEXT:    kmovd %k0, %eax
485 ; AVX512BW-NEXT:    vzeroupper
486 ; AVX512BW-NEXT:    retq
488 ; AVX512F-32-LABEL: test_pcmpgt_w:
489 ; AVX512F-32:       # BB#0:
490 ; AVX512F-32-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0
491 ; AVX512F-32-NEXT:    kmovd %k0, %eax
492 ; AVX512F-32-NEXT:    vzeroupper
493 ; AVX512F-32-NEXT:    retl
494   %res = call i32 @llvm.x86.avx512.mask.pcmpgt.w.512(<32 x i16> %a, <32 x i16> %b, i32 -1)
495   ret i32 %res
498 define i32 @test_mask_pcmpgt_w(<32 x i16> %a, <32 x i16> %b, i32 %mask) {
499 ; AVX512BW-LABEL: test_mask_pcmpgt_w:
500 ; AVX512BW:       ## BB#0:
501 ; AVX512BW-NEXT:    kmovd %edi, %k1
502 ; AVX512BW-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0 {%k1}
503 ; AVX512BW-NEXT:    kmovd %k0, %eax
504 ; AVX512BW-NEXT:    vzeroupper
505 ; AVX512BW-NEXT:    retq
507 ; AVX512F-32-LABEL: test_mask_pcmpgt_w:
508 ; AVX512F-32:       # BB#0:
509 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
510 ; AVX512F-32-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0 {%k1}
511 ; AVX512F-32-NEXT:    kmovd %k0, %eax
512 ; AVX512F-32-NEXT:    vzeroupper
513 ; AVX512F-32-NEXT:    retl
514   %res = call i32 @llvm.x86.avx512.mask.pcmpgt.w.512(<32 x i16> %a, <32 x i16> %b, i32 %mask)
515   ret i32 %res
518 declare i32 @llvm.x86.avx512.mask.pcmpgt.w.512(<32 x i16>, <32 x i16>, i32)
520 declare <64 x i8> @llvm.x86.avx512.mask.punpckhb.w.512(<64 x i8>, <64 x i8>, <64 x i8>, i64)
522 define <64 x i8>@test_int_x86_avx512_mask_punpckhb_w_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) {
523 ; AVX512BW-LABEL: test_int_x86_avx512_mask_punpckhb_w_512:
524 ; AVX512BW:       ## BB#0:
525 ; AVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31],zmm0[40],zmm1[40],zmm0[41],zmm1[41],zmm0[42],zmm1[42],zmm0[43],zmm1[43],zmm0[44],zmm1[44],zmm0[45],zmm1[45],zmm0[46],zmm1[46],zmm0[47],zmm1[47],zmm0[56],zmm1[56],zmm0[57],zmm1[57],zmm0[58],zmm1[58],zmm0[59],zmm1[59],zmm0[60],zmm1[60],zmm0[61],zmm1[61],zmm0[62],zmm1[62],zmm0[63],zmm1[63]
526 ; AVX512BW-NEXT:    kmovq %rdi, %k1
527 ; AVX512BW-NEXT:    vpunpckhbw {{.*#+}} zmm2 {%k1} = zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31],zmm0[40],zmm1[40],zmm0[41],zmm1[41],zmm0[42],zmm1[42],zmm0[43],zmm1[43],zmm0[44],zmm1[44],zmm0[45],zmm1[45],zmm0[46],zmm1[46],zmm0[47],zmm1[47],zmm0[56],zmm1[56],zmm0[57],zmm1[57],zmm0[58],zmm1[58],zmm0[59],zmm1[59],zmm0[60],zmm1[60],zmm0[61],zmm1[61],zmm0[62],zmm1[62],zmm0[63],zmm1[63]
528 ; AVX512BW-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
529 ; AVX512BW-NEXT:    retq
531 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_punpckhb_w_512:
532 ; AVX512F-32:       # BB#0:
533 ; AVX512F-32-NEXT:    vpunpckhbw {{.*#+}} zmm3 = zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31],zmm0[40],zmm1[40],zmm0[41],zmm1[41],zmm0[42],zmm1[42],zmm0[43],zmm1[43],zmm0[44],zmm1[44],zmm0[45],zmm1[45],zmm0[46],zmm1[46],zmm0[47],zmm1[47],zmm0[56],zmm1[56],zmm0[57],zmm1[57],zmm0[58],zmm1[58],zmm0[59],zmm1[59],zmm0[60],zmm1[60],zmm0[61],zmm1[61],zmm0[62],zmm1[62],zmm0[63],zmm1[63]
534 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
535 ; AVX512F-32-NEXT:    vpunpckhbw {{.*#+}} zmm2 {%k1} = zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31],zmm0[40],zmm1[40],zmm0[41],zmm1[41],zmm0[42],zmm1[42],zmm0[43],zmm1[43],zmm0[44],zmm1[44],zmm0[45],zmm1[45],zmm0[46],zmm1[46],zmm0[47],zmm1[47],zmm0[56],zmm1[56],zmm0[57],zmm1[57],zmm0[58],zmm1[58],zmm0[59],zmm1[59],zmm0[60],zmm1[60],zmm0[61],zmm1[61],zmm0[62],zmm1[62],zmm0[63],zmm1[63]
536 ; AVX512F-32-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
537 ; AVX512F-32-NEXT:    retl
538   %res = call <64 x i8> @llvm.x86.avx512.mask.punpckhb.w.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3)
539   %res1 = call <64 x i8> @llvm.x86.avx512.mask.punpckhb.w.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1)
540   %res2 = add <64 x i8> %res, %res1
541   ret <64 x i8> %res2
544 declare <64 x i8> @llvm.x86.avx512.mask.punpcklb.w.512(<64 x i8>, <64 x i8>, <64 x i8>, i64)
546 define <64 x i8>@test_int_x86_avx512_mask_punpcklb_w_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) {
547 ; AVX512BW-LABEL: test_int_x86_avx512_mask_punpcklb_w_512:
548 ; AVX512BW:       ## BB#0:
549 ; AVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm3 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[32],zmm1[32],zmm0[33],zmm1[33],zmm0[34],zmm1[34],zmm0[35],zmm1[35],zmm0[36],zmm1[36],zmm0[37],zmm1[37],zmm0[38],zmm1[38],zmm0[39],zmm1[39],zmm0[48],zmm1[48],zmm0[49],zmm1[49],zmm0[50],zmm1[50],zmm0[51],zmm1[51],zmm0[52],zmm1[52],zmm0[53],zmm1[53],zmm0[54],zmm1[54],zmm0[55],zmm1[55]
550 ; AVX512BW-NEXT:    kmovq %rdi, %k1
551 ; AVX512BW-NEXT:    vpunpcklbw {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[32],zmm1[32],zmm0[33],zmm1[33],zmm0[34],zmm1[34],zmm0[35],zmm1[35],zmm0[36],zmm1[36],zmm0[37],zmm1[37],zmm0[38],zmm1[38],zmm0[39],zmm1[39],zmm0[48],zmm1[48],zmm0[49],zmm1[49],zmm0[50],zmm1[50],zmm0[51],zmm1[51],zmm0[52],zmm1[52],zmm0[53],zmm1[53],zmm0[54],zmm1[54],zmm0[55],zmm1[55]
552 ; AVX512BW-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
553 ; AVX512BW-NEXT:    retq
555 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_punpcklb_w_512:
556 ; AVX512F-32:       # BB#0:
557 ; AVX512F-32-NEXT:    vpunpcklbw {{.*#+}} zmm3 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[32],zmm1[32],zmm0[33],zmm1[33],zmm0[34],zmm1[34],zmm0[35],zmm1[35],zmm0[36],zmm1[36],zmm0[37],zmm1[37],zmm0[38],zmm1[38],zmm0[39],zmm1[39],zmm0[48],zmm1[48],zmm0[49],zmm1[49],zmm0[50],zmm1[50],zmm0[51],zmm1[51],zmm0[52],zmm1[52],zmm0[53],zmm1[53],zmm0[54],zmm1[54],zmm0[55],zmm1[55]
558 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
559 ; AVX512F-32-NEXT:    vpunpcklbw {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[32],zmm1[32],zmm0[33],zmm1[33],zmm0[34],zmm1[34],zmm0[35],zmm1[35],zmm0[36],zmm1[36],zmm0[37],zmm1[37],zmm0[38],zmm1[38],zmm0[39],zmm1[39],zmm0[48],zmm1[48],zmm0[49],zmm1[49],zmm0[50],zmm1[50],zmm0[51],zmm1[51],zmm0[52],zmm1[52],zmm0[53],zmm1[53],zmm0[54],zmm1[54],zmm0[55],zmm1[55]
560 ; AVX512F-32-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
561 ; AVX512F-32-NEXT:    retl
562   %res = call <64 x i8> @llvm.x86.avx512.mask.punpcklb.w.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3)
563   %res1 = call <64 x i8> @llvm.x86.avx512.mask.punpcklb.w.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1)
564   %res2 = add <64 x i8> %res, %res1
565   ret <64 x i8> %res2
568 declare <32 x i16> @llvm.x86.avx512.mask.punpckhw.d.512(<32 x i16>, <32 x i16>, <32 x i16>, i32)
570 define <32 x i16>@test_int_x86_avx512_mask_punpckhw_d_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {
571 ; AVX512BW-LABEL: test_int_x86_avx512_mask_punpckhw_d_512:
572 ; AVX512BW:       ## BB#0:
573 ; AVX512BW-NEXT:    vpunpckhwd {{.*#+}} zmm3 = zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31]
574 ; AVX512BW-NEXT:    kmovd %edi, %k1
575 ; AVX512BW-NEXT:    vpunpckhwd {{.*#+}} zmm2 {%k1} = zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31]
576 ; AVX512BW-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
577 ; AVX512BW-NEXT:    retq
579 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_punpckhw_d_512:
580 ; AVX512F-32:       # BB#0:
581 ; AVX512F-32-NEXT:    vpunpckhwd {{.*#+}} zmm3 = zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31]
582 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
583 ; AVX512F-32-NEXT:    vpunpckhwd {{.*#+}} zmm2 {%k1} = zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31]
584 ; AVX512F-32-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
585 ; AVX512F-32-NEXT:    retl
586   %res = call <32 x i16> @llvm.x86.avx512.mask.punpckhw.d.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)
587   %res1 = call <32 x i16> @llvm.x86.avx512.mask.punpckhw.d.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)
588   %res2 = add <32 x i16> %res, %res1
589   ret <32 x i16> %res2
592 declare <32 x i16> @llvm.x86.avx512.mask.punpcklw.d.512(<32 x i16>, <32 x i16>, <32 x i16>, i32)
594 define <32 x i16>@test_int_x86_avx512_mask_punpcklw_d_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {
595 ; AVX512BW-LABEL: test_int_x86_avx512_mask_punpcklw_d_512:
596 ; AVX512BW:       ## BB#0:
597 ; AVX512BW-NEXT:    vpunpcklwd {{.*#+}} zmm3 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27]
598 ; AVX512BW-NEXT:    kmovd %edi, %k1
599 ; AVX512BW-NEXT:    vpunpcklwd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27]
600 ; AVX512BW-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
601 ; AVX512BW-NEXT:    retq
603 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_punpcklw_d_512:
604 ; AVX512F-32:       # BB#0:
605 ; AVX512F-32-NEXT:    vpunpcklwd {{.*#+}} zmm3 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27]
606 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
607 ; AVX512F-32-NEXT:    vpunpcklwd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27]
608 ; AVX512F-32-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
609 ; AVX512F-32-NEXT:    retl
610   %res = call <32 x i16> @llvm.x86.avx512.mask.punpcklw.d.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)
611   %res1 = call <32 x i16> @llvm.x86.avx512.mask.punpcklw.d.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)
612   %res2 = add <32 x i16> %res, %res1
613   ret <32 x i16> %res2
616 declare <64 x i8> @llvm.x86.avx512.mask.pmaxs.b.512(<64 x i8>, <64 x i8>, <64 x i8>, i64)
618 define <64 x i8>@test_int_x86_avx512_mask_pmaxs_b_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) {
619 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmaxs_b_512:
620 ; AVX512BW:       ## BB#0:
621 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm3
622 ; AVX512BW-NEXT:    kmovq %rdi, %k1
623 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm2 {%k1}
624 ; AVX512BW-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
625 ; AVX512BW-NEXT:    retq
627 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmaxs_b_512:
628 ; AVX512F-32:       # BB#0:
629 ; AVX512F-32-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm3
630 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
631 ; AVX512F-32-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm2 {%k1}
632 ; AVX512F-32-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
633 ; AVX512F-32-NEXT:    retl
634   %res = call <64 x i8> @llvm.x86.avx512.mask.pmaxs.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3)
635   %res1 = call <64 x i8> @llvm.x86.avx512.mask.pmaxs.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1)
636   %res2 = add <64 x i8> %res, %res1
637   ret <64 x i8> %res2
640 declare <32 x i16> @llvm.x86.avx512.mask.pmaxs.w.512(<32 x i16>, <32 x i16>, <32 x i16>, i32)
642 define <32 x i16>@test_int_x86_avx512_mask_pmaxs_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {
643 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmaxs_w_512:
644 ; AVX512BW:       ## BB#0:
645 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm3
646 ; AVX512BW-NEXT:    kmovd %edi, %k1
647 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm2 {%k1}
648 ; AVX512BW-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
649 ; AVX512BW-NEXT:    retq
651 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmaxs_w_512:
652 ; AVX512F-32:       # BB#0:
653 ; AVX512F-32-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm3
654 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
655 ; AVX512F-32-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm2 {%k1}
656 ; AVX512F-32-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
657 ; AVX512F-32-NEXT:    retl
658   %res = call <32 x i16> @llvm.x86.avx512.mask.pmaxs.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)
659   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pmaxs.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)
660   %res2 = add <32 x i16> %res, %res1
661   ret <32 x i16> %res2
664 declare <64 x i8> @llvm.x86.avx512.mask.pmaxu.b.512(<64 x i8>, <64 x i8>, <64 x i8>, i64)
666 define <64 x i8>@test_int_x86_avx512_mask_pmaxu_b_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) {
667 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmaxu_b_512:
668 ; AVX512BW:       ## BB#0:
669 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm3
670 ; AVX512BW-NEXT:    kmovq %rdi, %k1
671 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm2 {%k1}
672 ; AVX512BW-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
673 ; AVX512BW-NEXT:    retq
675 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmaxu_b_512:
676 ; AVX512F-32:       # BB#0:
677 ; AVX512F-32-NEXT:    vpmaxub %zmm1, %zmm0, %zmm3
678 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
679 ; AVX512F-32-NEXT:    vpmaxub %zmm1, %zmm0, %zmm2 {%k1}
680 ; AVX512F-32-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
681 ; AVX512F-32-NEXT:    retl
682   %res = call <64 x i8> @llvm.x86.avx512.mask.pmaxu.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3)
683   %res1 = call <64 x i8> @llvm.x86.avx512.mask.pmaxu.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1)
684   %res2 = add <64 x i8> %res, %res1
685   ret <64 x i8> %res2
688 declare <32 x i16> @llvm.x86.avx512.mask.pmaxu.w.512(<32 x i16>, <32 x i16>, <32 x i16>, i32)
690 define <32 x i16>@test_int_x86_avx512_mask_pmaxu_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {
691 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmaxu_w_512:
692 ; AVX512BW:       ## BB#0:
693 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm3
694 ; AVX512BW-NEXT:    kmovd %edi, %k1
695 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm2 {%k1}
696 ; AVX512BW-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
697 ; AVX512BW-NEXT:    retq
699 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmaxu_w_512:
700 ; AVX512F-32:       # BB#0:
701 ; AVX512F-32-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm3
702 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
703 ; AVX512F-32-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm2 {%k1}
704 ; AVX512F-32-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
705 ; AVX512F-32-NEXT:    retl
706   %res = call <32 x i16> @llvm.x86.avx512.mask.pmaxu.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)
707   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pmaxu.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)
708   %res2 = add <32 x i16> %res, %res1
709   ret <32 x i16> %res2
712 declare <64 x i8> @llvm.x86.avx512.mask.pmins.b.512(<64 x i8>, <64 x i8>, <64 x i8>, i64)
714 define <64 x i8>@test_int_x86_avx512_mask_pmins_b_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) {
715 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmins_b_512:
716 ; AVX512BW:       ## BB#0:
717 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm3
718 ; AVX512BW-NEXT:    kmovq %rdi, %k1
719 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm2 {%k1}
720 ; AVX512BW-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
721 ; AVX512BW-NEXT:    retq
723 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmins_b_512:
724 ; AVX512F-32:       # BB#0:
725 ; AVX512F-32-NEXT:    vpminsb %zmm1, %zmm0, %zmm3
726 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
727 ; AVX512F-32-NEXT:    vpminsb %zmm1, %zmm0, %zmm2 {%k1}
728 ; AVX512F-32-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
729 ; AVX512F-32-NEXT:    retl
730   %res = call <64 x i8> @llvm.x86.avx512.mask.pmins.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3)
731   %res1 = call <64 x i8> @llvm.x86.avx512.mask.pmins.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1)
732   %res2 = add <64 x i8> %res, %res1
733   ret <64 x i8> %res2
736 declare <32 x i16> @llvm.x86.avx512.mask.pmins.w.512(<32 x i16>, <32 x i16>, <32 x i16>, i32)
738 define <32 x i16>@test_int_x86_avx512_mask_pmins_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {
739 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmins_w_512:
740 ; AVX512BW:       ## BB#0:
741 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm3
742 ; AVX512BW-NEXT:    kmovd %edi, %k1
743 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm2 {%k1}
744 ; AVX512BW-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
745 ; AVX512BW-NEXT:    retq
747 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmins_w_512:
748 ; AVX512F-32:       # BB#0:
749 ; AVX512F-32-NEXT:    vpminsw %zmm1, %zmm0, %zmm3
750 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
751 ; AVX512F-32-NEXT:    vpminsw %zmm1, %zmm0, %zmm2 {%k1}
752 ; AVX512F-32-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
753 ; AVX512F-32-NEXT:    retl
754   %res = call <32 x i16> @llvm.x86.avx512.mask.pmins.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)
755   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pmins.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)
756   %res2 = add <32 x i16> %res, %res1
757   ret <32 x i16> %res2
760 declare <64 x i8> @llvm.x86.avx512.mask.pminu.b.512(<64 x i8>, <64 x i8>, <64 x i8>, i64)
762 define <64 x i8>@test_int_x86_avx512_mask_pminu_b_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) {
763 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pminu_b_512:
764 ; AVX512BW:       ## BB#0:
765 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm3
766 ; AVX512BW-NEXT:    kmovq %rdi, %k1
767 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm2 {%k1}
768 ; AVX512BW-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
769 ; AVX512BW-NEXT:    retq
771 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pminu_b_512:
772 ; AVX512F-32:       # BB#0:
773 ; AVX512F-32-NEXT:    vpminub %zmm1, %zmm0, %zmm3
774 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
775 ; AVX512F-32-NEXT:    vpminub %zmm1, %zmm0, %zmm2 {%k1}
776 ; AVX512F-32-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
777 ; AVX512F-32-NEXT:    retl
778   %res = call <64 x i8> @llvm.x86.avx512.mask.pminu.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3)
779   %res1 = call <64 x i8> @llvm.x86.avx512.mask.pminu.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1)
780   %res2 = add <64 x i8> %res, %res1
781   ret <64 x i8> %res2
784 declare <32 x i16> @llvm.x86.avx512.mask.pminu.w.512(<32 x i16>, <32 x i16>, <32 x i16>, i32)
786 define <32 x i16>@test_int_x86_avx512_mask_pminu_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {
787 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pminu_w_512:
788 ; AVX512BW:       ## BB#0:
789 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm3
790 ; AVX512BW-NEXT:    kmovd %edi, %k1
791 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm2 {%k1}
792 ; AVX512BW-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
793 ; AVX512BW-NEXT:    retq
795 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pminu_w_512:
796 ; AVX512F-32:       # BB#0:
797 ; AVX512F-32-NEXT:    vpminuw %zmm1, %zmm0, %zmm3
798 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
799 ; AVX512F-32-NEXT:    vpminuw %zmm1, %zmm0, %zmm2 {%k1}
800 ; AVX512F-32-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
801 ; AVX512F-32-NEXT:    retl
802   %res = call <32 x i16> @llvm.x86.avx512.mask.pminu.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)
803   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pminu.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)
804   %res2 = add <32 x i16> %res, %res1
805   ret <32 x i16> %res2
808 declare <32 x i16> @llvm.x86.avx512.mask.pmovzxb.w.512(<32 x i8>, <32 x i16>, i32)
810 define <32 x i16>@test_int_x86_avx512_mask_pmovzxb_w_512(<32 x i8> %x0, <32 x i16> %x1, i32 %x2) {
811 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmovzxb_w_512:
812 ; AVX512BW:       ## BB#0:
813 ; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm2 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero
814 ; AVX512BW-NEXT:    kmovd %edi, %k1
815 ; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm1 {%k1} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero
816 ; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero
817 ; AVX512BW-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
818 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
819 ; AVX512BW-NEXT:    retq
821 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmovzxb_w_512:
822 ; AVX512F-32:       # BB#0:
823 ; AVX512F-32-NEXT:    vpmovzxbw {{.*#+}} zmm2 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero
824 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
825 ; AVX512F-32-NEXT:    vpmovzxbw {{.*#+}} zmm1 {%k1} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero
826 ; AVX512F-32-NEXT:    vpmovzxbw {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero
827 ; AVX512F-32-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
828 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
829 ; AVX512F-32-NEXT:    retl
830   %res = call <32 x i16> @llvm.x86.avx512.mask.pmovzxb.w.512(<32 x i8> %x0, <32 x i16> %x1, i32 %x2)
831   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pmovzxb.w.512(<32 x i8> %x0, <32 x i16> zeroinitializer, i32 %x2)
832   %res2 = call <32 x i16> @llvm.x86.avx512.mask.pmovzxb.w.512(<32 x i8> %x0, <32 x i16> %x1, i32 -1)
833   %res3 = add <32 x i16> %res, %res1
834   %res4 = add <32 x i16> %res3, %res2
835   ret <32 x i16> %res4
838 declare <32 x i16> @llvm.x86.avx512.mask.pmovsxb.w.512(<32 x i8>, <32 x i16>, i32)
840 define <32 x i16>@test_int_x86_avx512_mask_pmovsxb_w_512(<32 x i8> %x0, <32 x i16> %x1, i32 %x2) {
841 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmovsxb_w_512:
842 ; AVX512BW:       ## BB#0:
843 ; AVX512BW-NEXT:    vpmovsxbw %ymm0, %zmm2
844 ; AVX512BW-NEXT:    kmovd %edi, %k1
845 ; AVX512BW-NEXT:    vpmovsxbw %ymm0, %zmm1 {%k1}
846 ; AVX512BW-NEXT:    vpmovsxbw %ymm0, %zmm0 {%k1} {z}
847 ; AVX512BW-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
848 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
849 ; AVX512BW-NEXT:    retq
851 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmovsxb_w_512:
852 ; AVX512F-32:       # BB#0:
853 ; AVX512F-32-NEXT:    vpmovsxbw %ymm0, %zmm2
854 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
855 ; AVX512F-32-NEXT:    vpmovsxbw %ymm0, %zmm1 {%k1}
856 ; AVX512F-32-NEXT:    vpmovsxbw %ymm0, %zmm0 {%k1} {z}
857 ; AVX512F-32-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
858 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
859 ; AVX512F-32-NEXT:    retl
860   %res = call <32 x i16> @llvm.x86.avx512.mask.pmovsxb.w.512(<32 x i8> %x0, <32 x i16> %x1, i32 %x2)
861   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pmovsxb.w.512(<32 x i8> %x0, <32 x i16> zeroinitializer, i32 %x2)
862   %res2 = call <32 x i16> @llvm.x86.avx512.mask.pmovsxb.w.512(<32 x i8> %x0, <32 x i16> %x1, i32 -1)
863   %res3 = add <32 x i16> %res, %res1
864   %res4 = add <32 x i16> %res3, %res2
865   ret <32 x i16> %res4
868 declare <32 x i16> @llvm.x86.avx512.mask.psrl.w.512(<32 x i16>, <8 x i16>, <32 x i16>, i32)
870 define <32 x i16>@test_int_x86_avx512_mask_psrl_w_512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 %x3) {
871 ; AVX512BW-LABEL: test_int_x86_avx512_mask_psrl_w_512:
872 ; AVX512BW:       ## BB#0:
873 ; AVX512BW-NEXT:    vpsrlw %xmm1, %zmm0, %zmm3
874 ; AVX512BW-NEXT:    kmovd %edi, %k1
875 ; AVX512BW-NEXT:    vpsrlw %xmm1, %zmm0, %zmm2 {%k1}
876 ; AVX512BW-NEXT:    vpsrlw %xmm1, %zmm0, %zmm0 {%k1} {z}
877 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm3, %zmm0
878 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm2, %zmm0
879 ; AVX512BW-NEXT:    retq
881 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_psrl_w_512:
882 ; AVX512F-32:       # BB#0:
883 ; AVX512F-32-NEXT:    vpsrlw %xmm1, %zmm0, %zmm3
884 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
885 ; AVX512F-32-NEXT:    vpsrlw %xmm1, %zmm0, %zmm2 {%k1}
886 ; AVX512F-32-NEXT:    vpsrlw %xmm1, %zmm0, %zmm0 {%k1} {z}
887 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm3, %zmm0
888 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm2, %zmm0
889 ; AVX512F-32-NEXT:    retl
890   %res = call <32 x i16> @llvm.x86.avx512.mask.psrl.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 %x3)
891   %res1 = call <32 x i16> @llvm.x86.avx512.mask.psrl.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 -1)
892   %res2 = call <32 x i16> @llvm.x86.avx512.mask.psrl.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)
893   %res3 = add <32 x i16> %res, %res1
894   %res4 = add <32 x i16> %res3, %res2
895   ret <32 x i16> %res4
898 declare <32 x i16> @llvm.x86.avx512.mask.psrl.wi.512(<32 x i16>, i32, <32 x i16>, i32)
900 define <32 x i16>@test_int_x86_avx512_mask_psrl_wi_512(<32 x i16> %x0, i32 %x1, <32 x i16> %x2, i32 %x3) {
901 ; AVX512BW-LABEL: test_int_x86_avx512_mask_psrl_wi_512:
902 ; AVX512BW:       ## BB#0:
903 ; AVX512BW-NEXT:    vpsrlw $3, %zmm0, %zmm2
904 ; AVX512BW-NEXT:    kmovd %esi, %k1
905 ; AVX512BW-NEXT:    vpsrlw $3, %zmm0, %zmm1 {%k1}
906 ; AVX512BW-NEXT:    vpsrlw $3, %zmm0, %zmm0 {%k1} {z}
907 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm2, %zmm0
908 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
909 ; AVX512BW-NEXT:    retq
911 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_psrl_wi_512:
912 ; AVX512F-32:       # BB#0:
913 ; AVX512F-32-NEXT:    vpsrlw $3, %zmm0, %zmm2
914 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
915 ; AVX512F-32-NEXT:    vpsrlw $3, %zmm0, %zmm1 {%k1}
916 ; AVX512F-32-NEXT:    vpsrlw $3, %zmm0, %zmm0 {%k1} {z}
917 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm2, %zmm0
918 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
919 ; AVX512F-32-NEXT:    retl
920   %res = call <32 x i16> @llvm.x86.avx512.mask.psrl.wi.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 %x3)
921   %res1 = call <32 x i16> @llvm.x86.avx512.mask.psrl.wi.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 -1)
922   %res2 = call <32 x i16> @llvm.x86.avx512.mask.psrl.wi.512(<32 x i16> %x0, i32 3, <32 x i16> zeroinitializer, i32 %x3)
923   %res3 = add <32 x i16> %res, %res1
924   %res4 = add <32 x i16> %res3, %res2
925   ret <32 x i16> %res4
928 declare <32 x i16> @llvm.x86.avx512.mask.psra.w.512(<32 x i16>, <8 x i16>, <32 x i16>, i32)
930 define <32 x i16>@test_int_x86_avx512_mask_psra_w_512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 %x3) {
931 ; AVX512BW-LABEL: test_int_x86_avx512_mask_psra_w_512:
932 ; AVX512BW:       ## BB#0:
933 ; AVX512BW-NEXT:    vpsraw %xmm1, %zmm0, %zmm3
934 ; AVX512BW-NEXT:    kmovd %edi, %k1
935 ; AVX512BW-NEXT:    vpsraw %xmm1, %zmm0, %zmm2 {%k1}
936 ; AVX512BW-NEXT:    vpsraw %xmm1, %zmm0, %zmm0 {%k1} {z}
937 ; AVX512BW-NEXT:    vpaddw %zmm3, %zmm0, %zmm0
938 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm2, %zmm0
939 ; AVX512BW-NEXT:    retq
941 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_psra_w_512:
942 ; AVX512F-32:       # BB#0:
943 ; AVX512F-32-NEXT:    vpsraw %xmm1, %zmm0, %zmm3
944 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
945 ; AVX512F-32-NEXT:    vpsraw %xmm1, %zmm0, %zmm2 {%k1}
946 ; AVX512F-32-NEXT:    vpsraw %xmm1, %zmm0, %zmm0 {%k1} {z}
947 ; AVX512F-32-NEXT:    vpaddw %zmm3, %zmm0, %zmm0
948 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm2, %zmm0
949 ; AVX512F-32-NEXT:    retl
950   %res = call <32 x i16> @llvm.x86.avx512.mask.psra.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 %x3)
951   %res1 = call <32 x i16> @llvm.x86.avx512.mask.psra.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)
952   %res2 = call <32 x i16> @llvm.x86.avx512.mask.psra.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 -1)
953   %res3 = add <32 x i16> %res, %res1
954   %res4 = add <32 x i16> %res3, %res2
955   ret <32 x i16> %res4
958 declare <32 x i16> @llvm.x86.avx512.mask.psra.wi.512(<32 x i16>, i32, <32 x i16>, i32)
960 define <32 x i16>@test_int_x86_avx512_mask_psra_wi_512(<32 x i16> %x0, i32 %x1, <32 x i16> %x2, i32 %x3) {
961 ; AVX512BW-LABEL: test_int_x86_avx512_mask_psra_wi_512:
962 ; AVX512BW:       ## BB#0:
963 ; AVX512BW-NEXT:    vpsraw $3, %zmm0, %zmm2
964 ; AVX512BW-NEXT:    kmovd %esi, %k1
965 ; AVX512BW-NEXT:    vpsraw $3, %zmm0, %zmm1 {%k1}
966 ; AVX512BW-NEXT:    vpsraw $3, %zmm0, %zmm0 {%k1} {z}
967 ; AVX512BW-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
968 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
969 ; AVX512BW-NEXT:    retq
971 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_psra_wi_512:
972 ; AVX512F-32:       # BB#0:
973 ; AVX512F-32-NEXT:    vpsraw $3, %zmm0, %zmm2
974 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
975 ; AVX512F-32-NEXT:    vpsraw $3, %zmm0, %zmm1 {%k1}
976 ; AVX512F-32-NEXT:    vpsraw $3, %zmm0, %zmm0 {%k1} {z}
977 ; AVX512F-32-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
978 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
979 ; AVX512F-32-NEXT:    retl
980   %res = call <32 x i16> @llvm.x86.avx512.mask.psra.wi.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 %x3)
981   %res1 = call <32 x i16> @llvm.x86.avx512.mask.psra.wi.512(<32 x i16> %x0, i32 3, <32 x i16> zeroinitializer, i32 %x3)
982   %res2 = call <32 x i16> @llvm.x86.avx512.mask.psra.wi.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 -1)
983   %res3 = add <32 x i16> %res, %res1
984   %res4 = add <32 x i16> %res3, %res2
985   ret <32 x i16> %res4
988 declare <32 x i16> @llvm.x86.avx512.mask.psll.w.512(<32 x i16>, <8 x i16>, <32 x i16>, i32)
990 define <32 x i16>@test_int_x86_avx512_mask_psll_w_512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 %x3) {
991 ; AVX512BW-LABEL: test_int_x86_avx512_mask_psll_w_512:
992 ; AVX512BW:       ## BB#0:
993 ; AVX512BW-NEXT:    vpsllw %xmm1, %zmm0, %zmm3
994 ; AVX512BW-NEXT:    kmovd %edi, %k1
995 ; AVX512BW-NEXT:    vpsllw %xmm1, %zmm0, %zmm2 {%k1}
996 ; AVX512BW-NEXT:    vpsllw %xmm1, %zmm0, %zmm0 {%k1} {z}
997 ; AVX512BW-NEXT:    vpaddw %zmm3, %zmm0, %zmm0
998 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm2, %zmm0
999 ; AVX512BW-NEXT:    retq
1001 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_psll_w_512:
1002 ; AVX512F-32:       # BB#0:
1003 ; AVX512F-32-NEXT:    vpsllw %xmm1, %zmm0, %zmm3
1004 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1005 ; AVX512F-32-NEXT:    vpsllw %xmm1, %zmm0, %zmm2 {%k1}
1006 ; AVX512F-32-NEXT:    vpsllw %xmm1, %zmm0, %zmm0 {%k1} {z}
1007 ; AVX512F-32-NEXT:    vpaddw %zmm3, %zmm0, %zmm0
1008 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm2, %zmm0
1009 ; AVX512F-32-NEXT:    retl
1010   %res = call <32 x i16> @llvm.x86.avx512.mask.psll.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 %x3)
1011   %res1 = call <32 x i16> @llvm.x86.avx512.mask.psll.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)
1012   %res2 = call <32 x i16> @llvm.x86.avx512.mask.psll.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 -1)
1013   %res3 = add <32 x i16> %res, %res1
1014   %res4 = add <32 x i16> %res3, %res2
1015   ret <32 x i16> %res4
1018 declare <32 x i16> @llvm.x86.avx512.mask.psll.wi.512(<32 x i16>, i32, <32 x i16>, i32)
1020 define <32 x i16>@test_int_x86_avx512_mask_psll_wi_512(<32 x i16> %x0, i32 %x1, <32 x i16> %x2, i32 %x3) {
1021 ; AVX512BW-LABEL: test_int_x86_avx512_mask_psll_wi_512:
1022 ; AVX512BW:       ## BB#0:
1023 ; AVX512BW-NEXT:    vpsllw $3, %zmm0, %zmm2
1024 ; AVX512BW-NEXT:    kmovd %esi, %k1
1025 ; AVX512BW-NEXT:    vpsllw $3, %zmm0, %zmm1 {%k1}
1026 ; AVX512BW-NEXT:    vpsllw $3, %zmm0, %zmm0 {%k1} {z}
1027 ; AVX512BW-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
1028 ; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
1029 ; AVX512BW-NEXT:    retq
1031 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_psll_wi_512:
1032 ; AVX512F-32:       # BB#0:
1033 ; AVX512F-32-NEXT:    vpsllw $3, %zmm0, %zmm2
1034 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1035 ; AVX512F-32-NEXT:    vpsllw $3, %zmm0, %zmm1 {%k1}
1036 ; AVX512F-32-NEXT:    vpsllw $3, %zmm0, %zmm0 {%k1} {z}
1037 ; AVX512F-32-NEXT:    vpaddw %zmm2, %zmm0, %zmm0
1038 ; AVX512F-32-NEXT:    vpaddw %zmm0, %zmm1, %zmm0
1039 ; AVX512F-32-NEXT:    retl
1040   %res = call <32 x i16> @llvm.x86.avx512.mask.psll.wi.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 %x3)
1041   %res1 = call <32 x i16> @llvm.x86.avx512.mask.psll.wi.512(<32 x i16> %x0, i32 3, <32 x i16> zeroinitializer, i32 %x3)
1042   %res2 = call <32 x i16> @llvm.x86.avx512.mask.psll.wi.512(<32 x i16> %x0, i32 3, <32 x i16> %x2, i32 -1)
1043   %res3 = add <32 x i16> %res, %res1
1044   %res4 = add <32 x i16> %res3, %res2
1045   ret <32 x i16> %res4
1048 declare <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8>, <64 x i8>, <64 x i8>, i64)
1050 define <64 x i8>@test_int_x86_avx512_mask_pshuf_b_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) {
1051 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pshuf_b_512:
1052 ; AVX512BW:       ## BB#0:
1053 ; AVX512BW-NEXT:    vpshufb %zmm1, %zmm0, %zmm3
1054 ; AVX512BW-NEXT:    kmovq %rdi, %k1
1055 ; AVX512BW-NEXT:    vpshufb %zmm1, %zmm0, %zmm2 {%k1}
1056 ; AVX512BW-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
1057 ; AVX512BW-NEXT:    retq
1059 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pshuf_b_512:
1060 ; AVX512F-32:       # BB#0:
1061 ; AVX512F-32-NEXT:    vpshufb %zmm1, %zmm0, %zmm3
1062 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
1063 ; AVX512F-32-NEXT:    vpshufb %zmm1, %zmm0, %zmm2 {%k1}
1064 ; AVX512F-32-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
1065 ; AVX512F-32-NEXT:    retl
1066   %res = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3)
1067   %res1 = call <64 x i8> @llvm.x86.avx512.mask.pshuf.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1)
1068   %res2 = add <64 x i8> %res, %res1
1069   ret <64 x i8> %res2
1073 declare <64 x i8> @llvm.x86.avx512.cvtmask2b.512(i64)
1075 define <64 x i8>@test_int_x86_avx512_cvtmask2b_512(i64 %x0) {
1076 ; AVX512BW-LABEL: test_int_x86_avx512_cvtmask2b_512:
1077 ; AVX512BW:       ## BB#0:
1078 ; AVX512BW-NEXT:    kmovq %rdi, %k0
1079 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
1080 ; AVX512BW-NEXT:    retq
1082 ; AVX512F-32-LABEL: test_int_x86_avx512_cvtmask2b_512:
1083 ; AVX512F-32:       # BB#0:
1084 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k0
1085 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
1086 ; AVX512F-32-NEXT:    retl
1087   %res = call <64 x i8> @llvm.x86.avx512.cvtmask2b.512(i64 %x0)
1088   ret <64 x i8> %res
1091 declare <32 x i16> @llvm.x86.avx512.cvtmask2w.512(i32)
1093 define <32 x i16>@test_int_x86_avx512_cvtmask2w_512(i32 %x0) {
1094 ; AVX512BW-LABEL: test_int_x86_avx512_cvtmask2w_512:
1095 ; AVX512BW:       ## BB#0:
1096 ; AVX512BW-NEXT:    kmovd %edi, %k0
1097 ; AVX512BW-NEXT:    vpmovm2w %k0, %zmm0
1098 ; AVX512BW-NEXT:    retq
1100 ; AVX512F-32-LABEL: test_int_x86_avx512_cvtmask2w_512:
1101 ; AVX512F-32:       # BB#0:
1102 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k0
1103 ; AVX512F-32-NEXT:    vpmovm2w %k0, %zmm0
1104 ; AVX512F-32-NEXT:    retl
1105   %res = call <32 x i16> @llvm.x86.avx512.cvtmask2w.512(i32 %x0)
1106   ret <32 x i16> %res
1108 define <32 x i16> @test_mask_packs_epi32_rr_512(<16 x i32> %a, <16 x i32> %b) {
1109 ; AVX512BW-LABEL: test_mask_packs_epi32_rr_512:
1110 ; AVX512BW:       ## BB#0:
1111 ; AVX512BW-NEXT:    vpackssdw %zmm1, %zmm0, %zmm0
1112 ; AVX512BW-NEXT:    retq
1114 ; AVX512F-32-LABEL: test_mask_packs_epi32_rr_512:
1115 ; AVX512F-32:       # BB#0:
1116 ; AVX512F-32-NEXT:    vpackssdw %zmm1, %zmm0, %zmm0
1117 ; AVX512F-32-NEXT:    retl
1118   %res = call <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 -1)
1119   ret <32 x i16> %res
1122 define <32 x i16> @test_mask_packs_epi32_rrk_512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask) {
1123 ; AVX512BW-LABEL: test_mask_packs_epi32_rrk_512:
1124 ; AVX512BW:       ## BB#0:
1125 ; AVX512BW-NEXT:    kmovd %edi, %k1
1126 ; AVX512BW-NEXT:    vpackssdw %zmm1, %zmm0, %zmm2 {%k1}
1127 ; AVX512BW-NEXT:    vmovdqa64 %zmm2, %zmm0
1128 ; AVX512BW-NEXT:    retq
1130 ; AVX512F-32-LABEL: test_mask_packs_epi32_rrk_512:
1131 ; AVX512F-32:       # BB#0:
1132 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1133 ; AVX512F-32-NEXT:    vpackssdw %zmm1, %zmm0, %zmm2 {%k1}
1134 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1135 ; AVX512F-32-NEXT:    retl
1136   %res = call <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask)
1137   ret <32 x i16> %res
1140 define <32 x i16> @test_mask_packs_epi32_rrkz_512(<16 x i32> %a, <16 x i32> %b, i32 %mask) {
1141 ; AVX512BW-LABEL: test_mask_packs_epi32_rrkz_512:
1142 ; AVX512BW:       ## BB#0:
1143 ; AVX512BW-NEXT:    kmovd %edi, %k1
1144 ; AVX512BW-NEXT:    vpackssdw %zmm1, %zmm0, %zmm0 {%k1} {z}
1145 ; AVX512BW-NEXT:    retq
1147 ; AVX512F-32-LABEL: test_mask_packs_epi32_rrkz_512:
1148 ; AVX512F-32:       # BB#0:
1149 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1150 ; AVX512F-32-NEXT:    vpackssdw %zmm1, %zmm0, %zmm0 {%k1} {z}
1151 ; AVX512F-32-NEXT:    retl
1152   %res = call <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 %mask)
1153   ret <32 x i16> %res
1156 define <32 x i16> @test_mask_packs_epi32_rm_512(<16 x i32> %a, <16 x i32>* %ptr_b) {
1157 ; AVX512BW-LABEL: test_mask_packs_epi32_rm_512:
1158 ; AVX512BW:       ## BB#0:
1159 ; AVX512BW-NEXT:    vpackssdw (%rdi), %zmm0, %zmm0
1160 ; AVX512BW-NEXT:    retq
1162 ; AVX512F-32-LABEL: test_mask_packs_epi32_rm_512:
1163 ; AVX512F-32:       # BB#0:
1164 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1165 ; AVX512F-32-NEXT:    vpackssdw (%eax), %zmm0, %zmm0
1166 ; AVX512F-32-NEXT:    retl
1167   %b = load <16 x i32>, <16 x i32>* %ptr_b
1168   %res = call <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 -1)
1169   ret <32 x i16> %res
1172 define <32 x i16> @test_mask_packs_epi32_rmk_512(<16 x i32> %a, <16 x i32>* %ptr_b, <32 x i16> %passThru, i32 %mask) {
1173 ; AVX512BW-LABEL: test_mask_packs_epi32_rmk_512:
1174 ; AVX512BW:       ## BB#0:
1175 ; AVX512BW-NEXT:    kmovd %esi, %k1
1176 ; AVX512BW-NEXT:    vpackssdw (%rdi), %zmm0, %zmm1 {%k1}
1177 ; AVX512BW-NEXT:    vmovdqa64 %zmm1, %zmm0
1178 ; AVX512BW-NEXT:    retq
1180 ; AVX512F-32-LABEL: test_mask_packs_epi32_rmk_512:
1181 ; AVX512F-32:       # BB#0:
1182 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1183 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1184 ; AVX512F-32-NEXT:    vpackssdw (%eax), %zmm0, %zmm1 {%k1}
1185 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm0
1186 ; AVX512F-32-NEXT:    retl
1187   %b = load <16 x i32>, <16 x i32>* %ptr_b
1188   %res = call <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask)
1189   ret <32 x i16> %res
1192 define <32 x i16> @test_mask_packs_epi32_rmkz_512(<16 x i32> %a, <16 x i32>* %ptr_b, i32 %mask) {
1193 ; AVX512BW-LABEL: test_mask_packs_epi32_rmkz_512:
1194 ; AVX512BW:       ## BB#0:
1195 ; AVX512BW-NEXT:    kmovd %esi, %k1
1196 ; AVX512BW-NEXT:    vpackssdw (%rdi), %zmm0, %zmm0 {%k1} {z}
1197 ; AVX512BW-NEXT:    retq
1199 ; AVX512F-32-LABEL: test_mask_packs_epi32_rmkz_512:
1200 ; AVX512F-32:       # BB#0:
1201 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1202 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1203 ; AVX512F-32-NEXT:    vpackssdw (%eax), %zmm0, %zmm0 {%k1} {z}
1204 ; AVX512F-32-NEXT:    retl
1205   %b = load <16 x i32>, <16 x i32>* %ptr_b
1206   %res = call <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 %mask)
1207   ret <32 x i16> %res
1210 define <32 x i16> @test_mask_packs_epi32_rmb_512(<16 x i32> %a, i32* %ptr_b) {
1211 ; AVX512BW-LABEL: test_mask_packs_epi32_rmb_512:
1212 ; AVX512BW:       ## BB#0:
1213 ; AVX512BW-NEXT:    vpackssdw (%rdi){1to16}, %zmm0, %zmm0
1214 ; AVX512BW-NEXT:    retq
1216 ; AVX512F-32-LABEL: test_mask_packs_epi32_rmb_512:
1217 ; AVX512F-32:       # BB#0:
1218 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1219 ; AVX512F-32-NEXT:    vpackssdw (%eax){1to16}, %zmm0, %zmm0
1220 ; AVX512F-32-NEXT:    retl
1221   %q = load i32, i32* %ptr_b
1222   %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0
1223   %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer
1224   %res = call <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 -1)
1225   ret <32 x i16> %res
1228 define <32 x i16> @test_mask_packs_epi32_rmbk_512(<16 x i32> %a, i32* %ptr_b, <32 x i16> %passThru, i32 %mask) {
1229 ; AVX512BW-LABEL: test_mask_packs_epi32_rmbk_512:
1230 ; AVX512BW:       ## BB#0:
1231 ; AVX512BW-NEXT:    kmovd %esi, %k1
1232 ; AVX512BW-NEXT:    vpackssdw (%rdi){1to16}, %zmm0, %zmm1 {%k1}
1233 ; AVX512BW-NEXT:    vmovdqa64 %zmm1, %zmm0
1234 ; AVX512BW-NEXT:    retq
1236 ; AVX512F-32-LABEL: test_mask_packs_epi32_rmbk_512:
1237 ; AVX512F-32:       # BB#0:
1238 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1239 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1240 ; AVX512F-32-NEXT:    vpackssdw (%eax){1to16}, %zmm0, %zmm1 {%k1}
1241 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm0
1242 ; AVX512F-32-NEXT:    retl
1243   %q = load i32, i32* %ptr_b
1244   %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0
1245   %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer
1246   %res = call <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask)
1247   ret <32 x i16> %res
1250 define <32 x i16> @test_mask_packs_epi32_rmbkz_512(<16 x i32> %a, i32* %ptr_b, i32 %mask) {
1251 ; AVX512BW-LABEL: test_mask_packs_epi32_rmbkz_512:
1252 ; AVX512BW:       ## BB#0:
1253 ; AVX512BW-NEXT:    kmovd %esi, %k1
1254 ; AVX512BW-NEXT:    vpackssdw (%rdi){1to16}, %zmm0, %zmm0 {%k1} {z}
1255 ; AVX512BW-NEXT:    retq
1257 ; AVX512F-32-LABEL: test_mask_packs_epi32_rmbkz_512:
1258 ; AVX512F-32:       # BB#0:
1259 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1260 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1261 ; AVX512F-32-NEXT:    vpackssdw (%eax){1to16}, %zmm0, %zmm0 {%k1} {z}
1262 ; AVX512F-32-NEXT:    retl
1263   %q = load i32, i32* %ptr_b
1264   %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0
1265   %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer
1266   %res = call <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 %mask)
1267   ret <32 x i16> %res
1270 declare <32 x i16> @llvm.x86.avx512.mask.packssdw.512(<16 x i32>, <16 x i32>, <32 x i16>, i32)
1272 define <64 x i8> @test_mask_packs_epi16_rr_512(<32 x i16> %a, <32 x i16> %b) {
1273 ; AVX512BW-LABEL: test_mask_packs_epi16_rr_512:
1274 ; AVX512BW:       ## BB#0:
1275 ; AVX512BW-NEXT:    vpacksswb %zmm1, %zmm0, %zmm0
1276 ; AVX512BW-NEXT:    retq
1278 ; AVX512F-32-LABEL: test_mask_packs_epi16_rr_512:
1279 ; AVX512F-32:       # BB#0:
1280 ; AVX512F-32-NEXT:    vpacksswb %zmm1, %zmm0, %zmm0
1281 ; AVX512F-32-NEXT:    retl
1282   %res = call <64 x i8> @llvm.x86.avx512.mask.packsswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> zeroinitializer, i64 -1)
1283   ret <64 x i8> %res
1286 define <64 x i8> @test_mask_packs_epi16_rrk_512(<32 x i16> %a, <32 x i16> %b, <64 x i8> %passThru, i64 %mask) {
1287 ; AVX512BW-LABEL: test_mask_packs_epi16_rrk_512:
1288 ; AVX512BW:       ## BB#0:
1289 ; AVX512BW-NEXT:    kmovq %rdi, %k1
1290 ; AVX512BW-NEXT:    vpacksswb %zmm1, %zmm0, %zmm2 {%k1}
1291 ; AVX512BW-NEXT:    vmovdqa64 %zmm2, %zmm0
1292 ; AVX512BW-NEXT:    retq
1294 ; AVX512F-32-LABEL: test_mask_packs_epi16_rrk_512:
1295 ; AVX512F-32:       # BB#0:
1296 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
1297 ; AVX512F-32-NEXT:    vpacksswb %zmm1, %zmm0, %zmm2 {%k1}
1298 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1299 ; AVX512F-32-NEXT:    retl
1300   %res = call <64 x i8> @llvm.x86.avx512.mask.packsswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> %passThru, i64 %mask)
1301   ret <64 x i8> %res
1304 define <64 x i8> @test_mask_packs_epi16_rrkz_512(<32 x i16> %a, <32 x i16> %b, i64 %mask) {
1305 ; AVX512BW-LABEL: test_mask_packs_epi16_rrkz_512:
1306 ; AVX512BW:       ## BB#0:
1307 ; AVX512BW-NEXT:    kmovq %rdi, %k1
1308 ; AVX512BW-NEXT:    vpacksswb %zmm1, %zmm0, %zmm0 {%k1} {z}
1309 ; AVX512BW-NEXT:    retq
1311 ; AVX512F-32-LABEL: test_mask_packs_epi16_rrkz_512:
1312 ; AVX512F-32:       # BB#0:
1313 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
1314 ; AVX512F-32-NEXT:    vpacksswb %zmm1, %zmm0, %zmm0 {%k1} {z}
1315 ; AVX512F-32-NEXT:    retl
1316   %res = call <64 x i8> @llvm.x86.avx512.mask.packsswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> zeroinitializer, i64 %mask)
1317   ret <64 x i8> %res
1320 define <64 x i8> @test_mask_packs_epi16_rm_512(<32 x i16> %a, <32 x i16>* %ptr_b) {
1321 ; AVX512BW-LABEL: test_mask_packs_epi16_rm_512:
1322 ; AVX512BW:       ## BB#0:
1323 ; AVX512BW-NEXT:    vpacksswb (%rdi), %zmm0, %zmm0
1324 ; AVX512BW-NEXT:    retq
1326 ; AVX512F-32-LABEL: test_mask_packs_epi16_rm_512:
1327 ; AVX512F-32:       # BB#0:
1328 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1329 ; AVX512F-32-NEXT:    vpacksswb (%eax), %zmm0, %zmm0
1330 ; AVX512F-32-NEXT:    retl
1331   %b = load <32 x i16>, <32 x i16>* %ptr_b
1332   %res = call <64 x i8> @llvm.x86.avx512.mask.packsswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> zeroinitializer, i64 -1)
1333   ret <64 x i8> %res
1336 define <64 x i8> @test_mask_packs_epi16_rmk_512(<32 x i16> %a, <32 x i16>* %ptr_b, <64 x i8> %passThru, i64 %mask) {
1337 ; AVX512BW-LABEL: test_mask_packs_epi16_rmk_512:
1338 ; AVX512BW:       ## BB#0:
1339 ; AVX512BW-NEXT:    kmovq %rsi, %k1
1340 ; AVX512BW-NEXT:    vpacksswb (%rdi), %zmm0, %zmm1 {%k1}
1341 ; AVX512BW-NEXT:    vmovdqa64 %zmm1, %zmm0
1342 ; AVX512BW-NEXT:    retq
1344 ; AVX512F-32-LABEL: test_mask_packs_epi16_rmk_512:
1345 ; AVX512F-32:       # BB#0:
1346 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1347 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
1348 ; AVX512F-32-NEXT:    vpacksswb (%eax), %zmm0, %zmm1 {%k1}
1349 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm0
1350 ; AVX512F-32-NEXT:    retl
1351   %b = load <32 x i16>, <32 x i16>* %ptr_b
1352   %res = call <64 x i8> @llvm.x86.avx512.mask.packsswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> %passThru, i64 %mask)
1353   ret <64 x i8> %res
1356 define <64 x i8> @test_mask_packs_epi16_rmkz_512(<32 x i16> %a, <32 x i16>* %ptr_b, i64 %mask) {
1357 ; AVX512BW-LABEL: test_mask_packs_epi16_rmkz_512:
1358 ; AVX512BW:       ## BB#0:
1359 ; AVX512BW-NEXT:    kmovq %rsi, %k1
1360 ; AVX512BW-NEXT:    vpacksswb (%rdi), %zmm0, %zmm0 {%k1} {z}
1361 ; AVX512BW-NEXT:    retq
1363 ; AVX512F-32-LABEL: test_mask_packs_epi16_rmkz_512:
1364 ; AVX512F-32:       # BB#0:
1365 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1366 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
1367 ; AVX512F-32-NEXT:    vpacksswb (%eax), %zmm0, %zmm0 {%k1} {z}
1368 ; AVX512F-32-NEXT:    retl
1369   %b = load <32 x i16>, <32 x i16>* %ptr_b
1370   %res = call <64 x i8> @llvm.x86.avx512.mask.packsswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> zeroinitializer, i64 %mask)
1371   ret <64 x i8> %res
1374 declare <64 x i8> @llvm.x86.avx512.mask.packsswb.512(<32 x i16>, <32 x i16>, <64 x i8>, i64)
1377 define <32 x i16> @test_mask_packus_epi32_rr_512(<16 x i32> %a, <16 x i32> %b) {
1378 ; AVX512BW-LABEL: test_mask_packus_epi32_rr_512:
1379 ; AVX512BW:       ## BB#0:
1380 ; AVX512BW-NEXT:    vpackusdw %zmm1, %zmm0, %zmm0
1381 ; AVX512BW-NEXT:    retq
1383 ; AVX512F-32-LABEL: test_mask_packus_epi32_rr_512:
1384 ; AVX512F-32:       # BB#0:
1385 ; AVX512F-32-NEXT:    vpackusdw %zmm1, %zmm0, %zmm0
1386 ; AVX512F-32-NEXT:    retl
1387   %res = call <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 -1)
1388   ret <32 x i16> %res
1391 define <32 x i16> @test_mask_packus_epi32_rrk_512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask) {
1392 ; AVX512BW-LABEL: test_mask_packus_epi32_rrk_512:
1393 ; AVX512BW:       ## BB#0:
1394 ; AVX512BW-NEXT:    kmovd %edi, %k1
1395 ; AVX512BW-NEXT:    vpackusdw %zmm1, %zmm0, %zmm2 {%k1}
1396 ; AVX512BW-NEXT:    vmovdqa64 %zmm2, %zmm0
1397 ; AVX512BW-NEXT:    retq
1399 ; AVX512F-32-LABEL: test_mask_packus_epi32_rrk_512:
1400 ; AVX512F-32:       # BB#0:
1401 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1402 ; AVX512F-32-NEXT:    vpackusdw %zmm1, %zmm0, %zmm2 {%k1}
1403 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1404 ; AVX512F-32-NEXT:    retl
1405   %res = call <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask)
1406   ret <32 x i16> %res
1409 define <32 x i16> @test_mask_packus_epi32_rrkz_512(<16 x i32> %a, <16 x i32> %b, i32 %mask) {
1410 ; AVX512BW-LABEL: test_mask_packus_epi32_rrkz_512:
1411 ; AVX512BW:       ## BB#0:
1412 ; AVX512BW-NEXT:    kmovd %edi, %k1
1413 ; AVX512BW-NEXT:    vpackusdw %zmm1, %zmm0, %zmm0 {%k1} {z}
1414 ; AVX512BW-NEXT:    retq
1416 ; AVX512F-32-LABEL: test_mask_packus_epi32_rrkz_512:
1417 ; AVX512F-32:       # BB#0:
1418 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1419 ; AVX512F-32-NEXT:    vpackusdw %zmm1, %zmm0, %zmm0 {%k1} {z}
1420 ; AVX512F-32-NEXT:    retl
1421   %res = call <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 %mask)
1422   ret <32 x i16> %res
1425 define <32 x i16> @test_mask_packus_epi32_rm_512(<16 x i32> %a, <16 x i32>* %ptr_b) {
1426 ; AVX512BW-LABEL: test_mask_packus_epi32_rm_512:
1427 ; AVX512BW:       ## BB#0:
1428 ; AVX512BW-NEXT:    vpackusdw (%rdi), %zmm0, %zmm0
1429 ; AVX512BW-NEXT:    retq
1431 ; AVX512F-32-LABEL: test_mask_packus_epi32_rm_512:
1432 ; AVX512F-32:       # BB#0:
1433 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1434 ; AVX512F-32-NEXT:    vpackusdw (%eax), %zmm0, %zmm0
1435 ; AVX512F-32-NEXT:    retl
1436   %b = load <16 x i32>, <16 x i32>* %ptr_b
1437   %res = call <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 -1)
1438   ret <32 x i16> %res
1441 define <32 x i16> @test_mask_packus_epi32_rmk_512(<16 x i32> %a, <16 x i32>* %ptr_b, <32 x i16> %passThru, i32 %mask) {
1442 ; AVX512BW-LABEL: test_mask_packus_epi32_rmk_512:
1443 ; AVX512BW:       ## BB#0:
1444 ; AVX512BW-NEXT:    kmovd %esi, %k1
1445 ; AVX512BW-NEXT:    vpackusdw (%rdi), %zmm0, %zmm1 {%k1}
1446 ; AVX512BW-NEXT:    vmovdqa64 %zmm1, %zmm0
1447 ; AVX512BW-NEXT:    retq
1449 ; AVX512F-32-LABEL: test_mask_packus_epi32_rmk_512:
1450 ; AVX512F-32:       # BB#0:
1451 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1452 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1453 ; AVX512F-32-NEXT:    vpackusdw (%eax), %zmm0, %zmm1 {%k1}
1454 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm0
1455 ; AVX512F-32-NEXT:    retl
1456   %b = load <16 x i32>, <16 x i32>* %ptr_b
1457   %res = call <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask)
1458   ret <32 x i16> %res
1461 define <32 x i16> @test_mask_packus_epi32_rmkz_512(<16 x i32> %a, <16 x i32>* %ptr_b, i32 %mask) {
1462 ; AVX512BW-LABEL: test_mask_packus_epi32_rmkz_512:
1463 ; AVX512BW:       ## BB#0:
1464 ; AVX512BW-NEXT:    kmovd %esi, %k1
1465 ; AVX512BW-NEXT:    vpackusdw (%rdi), %zmm0, %zmm0 {%k1} {z}
1466 ; AVX512BW-NEXT:    retq
1468 ; AVX512F-32-LABEL: test_mask_packus_epi32_rmkz_512:
1469 ; AVX512F-32:       # BB#0:
1470 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1471 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1472 ; AVX512F-32-NEXT:    vpackusdw (%eax), %zmm0, %zmm0 {%k1} {z}
1473 ; AVX512F-32-NEXT:    retl
1474   %b = load <16 x i32>, <16 x i32>* %ptr_b
1475   %res = call <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 %mask)
1476   ret <32 x i16> %res
1479 define <32 x i16> @test_mask_packus_epi32_rmb_512(<16 x i32> %a, i32* %ptr_b) {
1480 ; AVX512BW-LABEL: test_mask_packus_epi32_rmb_512:
1481 ; AVX512BW:       ## BB#0:
1482 ; AVX512BW-NEXT:    vpackusdw (%rdi){1to16}, %zmm0, %zmm0
1483 ; AVX512BW-NEXT:    retq
1485 ; AVX512F-32-LABEL: test_mask_packus_epi32_rmb_512:
1486 ; AVX512F-32:       # BB#0:
1487 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1488 ; AVX512F-32-NEXT:    vpackusdw (%eax){1to16}, %zmm0, %zmm0
1489 ; AVX512F-32-NEXT:    retl
1490   %q = load i32, i32* %ptr_b
1491   %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0
1492   %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer
1493   %res = call <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 -1)
1494   ret <32 x i16> %res
1497 define <32 x i16> @test_mask_packus_epi32_rmbk_512(<16 x i32> %a, i32* %ptr_b, <32 x i16> %passThru, i32 %mask) {
1498 ; AVX512BW-LABEL: test_mask_packus_epi32_rmbk_512:
1499 ; AVX512BW:       ## BB#0:
1500 ; AVX512BW-NEXT:    kmovd %esi, %k1
1501 ; AVX512BW-NEXT:    vpackusdw (%rdi){1to16}, %zmm0, %zmm1 {%k1}
1502 ; AVX512BW-NEXT:    vmovdqa64 %zmm1, %zmm0
1503 ; AVX512BW-NEXT:    retq
1505 ; AVX512F-32-LABEL: test_mask_packus_epi32_rmbk_512:
1506 ; AVX512F-32:       # BB#0:
1507 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1508 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1509 ; AVX512F-32-NEXT:    vpackusdw (%eax){1to16}, %zmm0, %zmm1 {%k1}
1510 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm0
1511 ; AVX512F-32-NEXT:    retl
1512   %q = load i32, i32* %ptr_b
1513   %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0
1514   %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer
1515   %res = call <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask)
1516   ret <32 x i16> %res
1519 define <32 x i16> @test_mask_packus_epi32_rmbkz_512(<16 x i32> %a, i32* %ptr_b, i32 %mask) {
1520 ; AVX512BW-LABEL: test_mask_packus_epi32_rmbkz_512:
1521 ; AVX512BW:       ## BB#0:
1522 ; AVX512BW-NEXT:    kmovd %esi, %k1
1523 ; AVX512BW-NEXT:    vpackusdw (%rdi){1to16}, %zmm0, %zmm0 {%k1} {z}
1524 ; AVX512BW-NEXT:    retq
1526 ; AVX512F-32-LABEL: test_mask_packus_epi32_rmbkz_512:
1527 ; AVX512F-32:       # BB#0:
1528 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1529 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
1530 ; AVX512F-32-NEXT:    vpackusdw (%eax){1to16}, %zmm0, %zmm0 {%k1} {z}
1531 ; AVX512F-32-NEXT:    retl
1532   %q = load i32, i32* %ptr_b
1533   %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0
1534   %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer
1535   %res = call <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32> %a, <16 x i32> %b, <32 x i16> zeroinitializer, i32 %mask)
1536   ret <32 x i16> %res
1539 declare <32 x i16> @llvm.x86.avx512.mask.packusdw.512(<16 x i32>, <16 x i32>, <32 x i16>, i32)
1541 define <64 x i8> @test_mask_packus_epi16_rr_512(<32 x i16> %a, <32 x i16> %b) {
1542 ; AVX512BW-LABEL: test_mask_packus_epi16_rr_512:
1543 ; AVX512BW:       ## BB#0:
1544 ; AVX512BW-NEXT:    vpackuswb %zmm1, %zmm0, %zmm0
1545 ; AVX512BW-NEXT:    retq
1547 ; AVX512F-32-LABEL: test_mask_packus_epi16_rr_512:
1548 ; AVX512F-32:       # BB#0:
1549 ; AVX512F-32-NEXT:    vpackuswb %zmm1, %zmm0, %zmm0
1550 ; AVX512F-32-NEXT:    retl
1551   %res = call <64 x i8> @llvm.x86.avx512.mask.packuswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> zeroinitializer, i64 -1)
1552   ret <64 x i8> %res
1555 define <64 x i8> @test_mask_packus_epi16_rrk_512(<32 x i16> %a, <32 x i16> %b, <64 x i8> %passThru, i64 %mask) {
1556 ; AVX512BW-LABEL: test_mask_packus_epi16_rrk_512:
1557 ; AVX512BW:       ## BB#0:
1558 ; AVX512BW-NEXT:    kmovq %rdi, %k1
1559 ; AVX512BW-NEXT:    vpackuswb %zmm1, %zmm0, %zmm2 {%k1}
1560 ; AVX512BW-NEXT:    vmovdqa64 %zmm2, %zmm0
1561 ; AVX512BW-NEXT:    retq
1563 ; AVX512F-32-LABEL: test_mask_packus_epi16_rrk_512:
1564 ; AVX512F-32:       # BB#0:
1565 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
1566 ; AVX512F-32-NEXT:    vpackuswb %zmm1, %zmm0, %zmm2 {%k1}
1567 ; AVX512F-32-NEXT:    vmovdqa64 %zmm2, %zmm0
1568 ; AVX512F-32-NEXT:    retl
1569   %res = call <64 x i8> @llvm.x86.avx512.mask.packuswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> %passThru, i64 %mask)
1570   ret <64 x i8> %res
1573 define <64 x i8> @test_mask_packus_epi16_rrkz_512(<32 x i16> %a, <32 x i16> %b, i64 %mask) {
1574 ; AVX512BW-LABEL: test_mask_packus_epi16_rrkz_512:
1575 ; AVX512BW:       ## BB#0:
1576 ; AVX512BW-NEXT:    kmovq %rdi, %k1
1577 ; AVX512BW-NEXT:    vpackuswb %zmm1, %zmm0, %zmm0 {%k1} {z}
1578 ; AVX512BW-NEXT:    retq
1580 ; AVX512F-32-LABEL: test_mask_packus_epi16_rrkz_512:
1581 ; AVX512F-32:       # BB#0:
1582 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
1583 ; AVX512F-32-NEXT:    vpackuswb %zmm1, %zmm0, %zmm0 {%k1} {z}
1584 ; AVX512F-32-NEXT:    retl
1585   %res = call <64 x i8> @llvm.x86.avx512.mask.packuswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> zeroinitializer, i64 %mask)
1586   ret <64 x i8> %res
1589 define <64 x i8> @test_mask_packus_epi16_rm_512(<32 x i16> %a, <32 x i16>* %ptr_b) {
1590 ; AVX512BW-LABEL: test_mask_packus_epi16_rm_512:
1591 ; AVX512BW:       ## BB#0:
1592 ; AVX512BW-NEXT:    vpackuswb (%rdi), %zmm0, %zmm0
1593 ; AVX512BW-NEXT:    retq
1595 ; AVX512F-32-LABEL: test_mask_packus_epi16_rm_512:
1596 ; AVX512F-32:       # BB#0:
1597 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1598 ; AVX512F-32-NEXT:    vpackuswb (%eax), %zmm0, %zmm0
1599 ; AVX512F-32-NEXT:    retl
1600   %b = load <32 x i16>, <32 x i16>* %ptr_b
1601   %res = call <64 x i8> @llvm.x86.avx512.mask.packuswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> zeroinitializer, i64 -1)
1602   ret <64 x i8> %res
1605 define <64 x i8> @test_mask_packus_epi16_rmk_512(<32 x i16> %a, <32 x i16>* %ptr_b, <64 x i8> %passThru, i64 %mask) {
1606 ; AVX512BW-LABEL: test_mask_packus_epi16_rmk_512:
1607 ; AVX512BW:       ## BB#0:
1608 ; AVX512BW-NEXT:    kmovq %rsi, %k1
1609 ; AVX512BW-NEXT:    vpackuswb (%rdi), %zmm0, %zmm1 {%k1}
1610 ; AVX512BW-NEXT:    vmovdqa64 %zmm1, %zmm0
1611 ; AVX512BW-NEXT:    retq
1613 ; AVX512F-32-LABEL: test_mask_packus_epi16_rmk_512:
1614 ; AVX512F-32:       # BB#0:
1615 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1616 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
1617 ; AVX512F-32-NEXT:    vpackuswb (%eax), %zmm0, %zmm1 {%k1}
1618 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm0
1619 ; AVX512F-32-NEXT:    retl
1620   %b = load <32 x i16>, <32 x i16>* %ptr_b
1621   %res = call <64 x i8> @llvm.x86.avx512.mask.packuswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> %passThru, i64 %mask)
1622   ret <64 x i8> %res
1625 define <64 x i8> @test_mask_packus_epi16_rmkz_512(<32 x i16> %a, <32 x i16>* %ptr_b, i64 %mask) {
1626 ; AVX512BW-LABEL: test_mask_packus_epi16_rmkz_512:
1627 ; AVX512BW:       ## BB#0:
1628 ; AVX512BW-NEXT:    kmovq %rsi, %k1
1629 ; AVX512BW-NEXT:    vpackuswb (%rdi), %zmm0, %zmm0 {%k1} {z}
1630 ; AVX512BW-NEXT:    retq
1632 ; AVX512F-32-LABEL: test_mask_packus_epi16_rmkz_512:
1633 ; AVX512F-32:       # BB#0:
1634 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1635 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
1636 ; AVX512F-32-NEXT:    vpackuswb (%eax), %zmm0, %zmm0 {%k1} {z}
1637 ; AVX512F-32-NEXT:    retl
1638   %b = load <32 x i16>, <32 x i16>* %ptr_b
1639   %res = call <64 x i8> @llvm.x86.avx512.mask.packuswb.512(<32 x i16> %a, <32 x i16> %b, <64 x i8> zeroinitializer, i64 %mask)
1640   ret <64 x i8> %res
1643 declare <64 x i8> @llvm.x86.avx512.mask.packuswb.512(<32 x i16>, <32 x i16>, <64 x i8>, i64)
1645 define i64 @test_cmp_b_512(<64 x i8> %a0, <64 x i8> %a1) {
1646 ; AVX512BW-LABEL: test_cmp_b_512:
1647 ; AVX512BW:       ## BB#0:
1648 ; AVX512BW-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0
1649 ; AVX512BW-NEXT:    kmovq %k0, %rax
1650 ; AVX512BW-NEXT:    vpcmpgtb %zmm0, %zmm1, %k0
1651 ; AVX512BW-NEXT:    kmovq %k0, %rcx
1652 ; AVX512BW-NEXT:    addq %rax, %rcx
1653 ; AVX512BW-NEXT:    vpcmpleb %zmm1, %zmm0, %k0
1654 ; AVX512BW-NEXT:    kmovq %k0, %rax
1655 ; AVX512BW-NEXT:    addq %rcx, %rax
1656 ; AVX512BW-NEXT:    vpcmpneqb %zmm1, %zmm0, %k0
1657 ; AVX512BW-NEXT:    kmovq %k0, %rcx
1658 ; AVX512BW-NEXT:    addq %rax, %rcx
1659 ; AVX512BW-NEXT:    vpcmpleb %zmm0, %zmm1, %k0
1660 ; AVX512BW-NEXT:    kmovq %k0, %rax
1661 ; AVX512BW-NEXT:    addq %rcx, %rax
1662 ; AVX512BW-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0
1663 ; AVX512BW-NEXT:    kmovq %k0, %rcx
1664 ; AVX512BW-NEXT:    addq %rax, %rcx
1665 ; AVX512BW-NEXT:    kxnorq %k0, %k0, %k0
1666 ; AVX512BW-NEXT:    kmovq %k0, %rax
1667 ; AVX512BW-NEXT:    addq %rcx, %rax
1668 ; AVX512BW-NEXT:    vzeroupper
1669 ; AVX512BW-NEXT:    retq
1671 ; AVX512F-32-LABEL: test_cmp_b_512:
1672 ; AVX512F-32:       # BB#0:
1673 ; AVX512F-32-NEXT:    subl $60, %esp
1674 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 64
1675 ; AVX512F-32-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0
1676 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
1677 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1678 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
1679 ; AVX512F-32-NEXT:    vpcmpgtb %zmm0, %zmm1, %k0
1680 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
1681 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
1682 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
1683 ; AVX512F-32-NEXT:    vpcmpleb %zmm1, %zmm0, %k0
1684 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
1685 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
1686 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
1687 ; AVX512F-32-NEXT:    vpcmpneqb %zmm1, %zmm0, %k0
1688 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
1689 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
1690 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
1691 ; AVX512F-32-NEXT:    vpcmpleb %zmm0, %zmm1, %k0
1692 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
1693 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
1694 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
1695 ; AVX512F-32-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0
1696 ; AVX512F-32-NEXT:    kmovq %k0, (%esp)
1697 ; AVX512F-32-NEXT:    addl (%esp), %eax
1698 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
1699 ; AVX512F-32-NEXT:    kxnorq %k0, %k0, %k0
1700 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
1701 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
1702 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
1703 ; AVX512F-32-NEXT:    addl $60, %esp
1704 ; AVX512F-32-NEXT:    vzeroupper
1705 ; AVX512F-32-NEXT:    retl
1706   %res0 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 0, i64 -1)
1707   %res1 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 1, i64 -1)
1708   %ret1 = add i64 %res0, %res1
1709   %res2 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 2, i64 -1)
1710   %ret2 = add i64 %ret1, %res2
1711   %res3 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 3, i64 -1)
1712   %ret3 = add i64 %ret2, %res3
1713   %res4 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 4, i64 -1)
1714   %ret4 = add i64 %ret3, %res4
1715   %res5 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 5, i64 -1)
1716   %ret5 = add i64 %ret4, %res5
1717   %res6 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 6, i64 -1)
1718   %ret6 = add i64 %ret5, %res6
1719   %res7 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 7, i64 -1)
1720   %ret7 = add i64 %ret6, %res7
1721   ret i64 %ret7
1724 define i64 @test_mask_cmp_b_512(<64 x i8> %a0, <64 x i8> %a1, i64 %mask) {
1725 ; AVX512BW-LABEL: test_mask_cmp_b_512:
1726 ; AVX512BW:       ## BB#0:
1727 ; AVX512BW-NEXT:    kmovq %rdi, %k1
1728 ; AVX512BW-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0 {%k1}
1729 ; AVX512BW-NEXT:    kmovq %k0, %rax
1730 ; AVX512BW-NEXT:    vpcmpgtb %zmm0, %zmm1, %k0 {%k1}
1731 ; AVX512BW-NEXT:    kmovq %k0, %rcx
1732 ; AVX512BW-NEXT:    addq %rax, %rcx
1733 ; AVX512BW-NEXT:    vpcmpleb %zmm1, %zmm0, %k0 {%k1}
1734 ; AVX512BW-NEXT:    kmovq %k0, %rax
1735 ; AVX512BW-NEXT:    addq %rcx, %rax
1736 ; AVX512BW-NEXT:    kxorq %k0, %k0, %k0
1737 ; AVX512BW-NEXT:    kmovq %k0, %rcx
1738 ; AVX512BW-NEXT:    orq %rax, %rcx
1739 ; AVX512BW-NEXT:    vpcmpneqb %zmm1, %zmm0, %k0 {%k1}
1740 ; AVX512BW-NEXT:    kmovq %k0, %rax
1741 ; AVX512BW-NEXT:    addq %rcx, %rax
1742 ; AVX512BW-NEXT:    vpcmpleb %zmm0, %zmm1, %k0 {%k1}
1743 ; AVX512BW-NEXT:    kmovq %k0, %rcx
1744 ; AVX512BW-NEXT:    addq %rax, %rcx
1745 ; AVX512BW-NEXT:    vpcmpgtb %zmm1, %zmm0, %k0 {%k1}
1746 ; AVX512BW-NEXT:    kmovq %k0, %rax
1747 ; AVX512BW-NEXT:    addq %rcx, %rax
1748 ; AVX512BW-NEXT:    addq %rdi, %rax
1749 ; AVX512BW-NEXT:    vzeroupper
1750 ; AVX512BW-NEXT:    retq
1752 ; AVX512F-32-LABEL: test_mask_cmp_b_512:
1753 ; AVX512F-32:       # BB#0:
1754 ; AVX512F-32-NEXT:    pushl %ebx
1755 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 8
1756 ; AVX512F-32-NEXT:    pushl %esi
1757 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 12
1758 ; AVX512F-32-NEXT:    subl $60, %esp
1759 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 72
1760 ; AVX512F-32-NEXT:    .cfi_offset %esi, -12
1761 ; AVX512F-32-NEXT:    .cfi_offset %ebx, -8
1762 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm6
1763 ; AVX512F-32-NEXT:    vmovdqa64 %zmm0, %zmm5
1764 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1765 ; AVX512F-32-NEXT:    movl %ecx, %eax
1766 ; AVX512F-32-NEXT:    shrb $5, %al
1767 ; AVX512F-32-NEXT:    andb $1, %al
1768 ; AVX512F-32-NEXT:    movl %ecx, %ebx
1769 ; AVX512F-32-NEXT:    andb $15, %bl
1770 ; AVX512F-32-NEXT:    movl %ecx, %edx
1771 ; AVX512F-32-NEXT:    andb $2, %dl
1772 ; AVX512F-32-NEXT:    shrb %dl
1773 ; AVX512F-32-NEXT:    kmovd %edx, %k0
1774 ; AVX512F-32-NEXT:    movl %ebx, %edx
1775 ; AVX512F-32-NEXT:    shrb $2, %bl
1776 ; AVX512F-32-NEXT:    kmovd %ebx, %k1
1777 ; AVX512F-32-NEXT:    movl %ecx, %ebx
1778 ; AVX512F-32-NEXT:    shrb $4, %bl
1779 ; AVX512F-32-NEXT:    shrb $3, %dl
1780 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
1781 ; AVX512F-32-NEXT:    vpsllw $8, %xmm2, %xmm2
1782 ; AVX512F-32-NEXT:    kmovd %ecx, %k0
1783 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1784 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1785 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1786 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1787 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1788 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
1789 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm3
1790 ; AVX512F-32-NEXT:    vpbroadcastw %xmm3, %xmm3
1791 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1792 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm2, %ymm3, %ymm3
1793 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm3[0,1,2,3],zmm2[4,5,6,7]
1794 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1795 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
1796 ; AVX512F-32-NEXT:    kmovd %edx, %k0
1797 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1798 ; AVX512F-32-NEXT:    vpslld $24, %xmm3, %xmm3
1799 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1800 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm2, %ymm3, %ymm3
1801 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm3[0,1,2,3],zmm2[4,5,6,7]
1802 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1803 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
1804 ; AVX512F-32-NEXT:    kmovd %ebx, %k0
1805 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1806 ; AVX512F-32-NEXT:    vpbroadcastd %xmm3, %xmm3
1807 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1808 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm2, %ymm3, %ymm3
1809 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm3[0,1,2,3],zmm2[4,5,6,7]
1810 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1811 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
1812 ; AVX512F-32-NEXT:    kmovd %eax, %k0
1813 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1814 ; AVX512F-32-NEXT:    vpsllq $40, %xmm3, %xmm3
1815 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1816 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm2, %ymm3, %ymm3
1817 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm3[0,1,2,3],zmm2[4,5,6,7]
1818 ; AVX512F-32-NEXT:    movl %ecx, %eax
1819 ; AVX512F-32-NEXT:    shrb $6, %al
1820 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1821 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1822 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1823 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
1824 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1825 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1826 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1827 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1828 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1829 ; AVX512F-32-NEXT:    movl %ecx, %eax
1830 ; AVX512F-32-NEXT:    shrb $7, %al
1831 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1832 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1833 ; AVX512F-32-NEXT:    vpsllq $56, %xmm2, %xmm2
1834 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1835 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1836 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1837 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1838 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1839 ; AVX512F-32-NEXT:    movb %ch, %al
1840 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1841 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1842 ; AVX512F-32-NEXT:    vpbroadcastq %xmm2, %xmm2
1843 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1844 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1845 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1846 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1847 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1848 ; AVX512F-32-NEXT:    andb $2, %al
1849 ; AVX512F-32-NEXT:    shrb %al
1850 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1851 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1852 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6]
1853 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1854 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1855 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1856 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1857 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1858 ; AVX512F-32-NEXT:    movb %ch, %dl
1859 ; AVX512F-32-NEXT:    andb $15, %dl
1860 ; AVX512F-32-NEXT:    movl %edx, %eax
1861 ; AVX512F-32-NEXT:    shrb $2, %dl
1862 ; AVX512F-32-NEXT:    kmovd %edx, %k1
1863 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1864 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
1865 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1866 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1867 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1868 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1869 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1870 ; AVX512F-32-NEXT:    shrb $3, %al
1871 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1872 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1873 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4]
1874 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1875 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1876 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1877 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1878 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1879 ; AVX512F-32-NEXT:    movl %ecx, %eax
1880 ; AVX512F-32-NEXT:    shrl $12, %eax
1881 ; AVX512F-32-NEXT:    andl $15, %eax
1882 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1883 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1884 ; AVX512F-32-NEXT:    vpbroadcastd %xmm2, %xmm2
1885 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1886 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1887 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1888 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1889 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1890 ; AVX512F-32-NEXT:    movl %ecx, %eax
1891 ; AVX512F-32-NEXT:    shrl $13, %eax
1892 ; AVX512F-32-NEXT:    andb $1, %al
1893 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1894 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1895 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2]
1896 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1897 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1898 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1899 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1900 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1901 ; AVX512F-32-NEXT:    movl %ecx, %eax
1902 ; AVX512F-32-NEXT:    shrl $14, %eax
1903 ; AVX512F-32-NEXT:    andl $3, %eax
1904 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1905 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1906 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
1907 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1908 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1909 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1910 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1911 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1912 ; AVX512F-32-NEXT:    movl %ecx, %eax
1913 ; AVX512F-32-NEXT:    shrl $15, %eax
1914 ; AVX512F-32-NEXT:    andl $1, %eax
1915 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1916 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1917 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0]
1918 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1919 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1920 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1921 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1922 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1923 ; AVX512F-32-NEXT:    movl %ecx, %eax
1924 ; AVX512F-32-NEXT:    shrl $16, %eax
1925 ; AVX512F-32-NEXT:    kmovd %eax, %k1
1926 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1927 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
1928 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1929 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1930 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1931 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1932 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1933 ; AVX512F-32-NEXT:    movl %eax, %edx
1934 ; AVX512F-32-NEXT:    andb $2, %dl
1935 ; AVX512F-32-NEXT:    shrb %dl
1936 ; AVX512F-32-NEXT:    kmovd %edx, %k1
1937 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1938 ; AVX512F-32-NEXT:    vpsllw $8, %xmm2, %xmm2
1939 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
1940 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1941 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
1942 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1943 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1944 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1945 ; AVX512F-32-NEXT:    movl %eax, %ebx
1946 ; AVX512F-32-NEXT:    andb $15, %bl
1947 ; AVX512F-32-NEXT:    movl %ebx, %edx
1948 ; AVX512F-32-NEXT:    shrb $2, %bl
1949 ; AVX512F-32-NEXT:    kmovd %ebx, %k1
1950 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1951 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
1952 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
1953 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1954 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]
1955 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1956 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1957 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1958 ; AVX512F-32-NEXT:    shrb $3, %dl
1959 ; AVX512F-32-NEXT:    kmovd %edx, %k1
1960 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1961 ; AVX512F-32-NEXT:    vpslld $24, %xmm2, %xmm2
1962 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
1963 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1964 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]
1965 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1966 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1967 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1968 ; AVX512F-32-NEXT:    movl %eax, %edx
1969 ; AVX512F-32-NEXT:    shrb $4, %dl
1970 ; AVX512F-32-NEXT:    kmovd %edx, %k1
1971 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1972 ; AVX512F-32-NEXT:    vpbroadcastd %xmm2, %xmm2
1973 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
1974 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1975 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]
1976 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1977 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1978 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1979 ; AVX512F-32-NEXT:    movl %eax, %edx
1980 ; AVX512F-32-NEXT:    shrb $5, %dl
1981 ; AVX512F-32-NEXT:    andb $1, %dl
1982 ; AVX512F-32-NEXT:    kmovd %edx, %k1
1983 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1984 ; AVX512F-32-NEXT:    vpsllq $40, %xmm2, %xmm2
1985 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
1986 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1987 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]
1988 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
1989 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
1990 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
1991 ; AVX512F-32-NEXT:    movl %eax, %edx
1992 ; AVX512F-32-NEXT:    shrb $6, %dl
1993 ; AVX512F-32-NEXT:    kmovd %edx, %k1
1994 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
1995 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
1996 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
1997 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
1998 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]
1999 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2000 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2001 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2002 ; AVX512F-32-NEXT:    # kill: %al<def> %al<kill> %eax<kill> %eax<def>
2003 ; AVX512F-32-NEXT:    shrb $7, %al
2004 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2005 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2006 ; AVX512F-32-NEXT:    vpsllq $56, %xmm2, %xmm2
2007 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2008 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2009 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
2010 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2011 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2012 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2013 ; AVX512F-32-NEXT:    movl %ecx, %eax
2014 ; AVX512F-32-NEXT:    shrl $24, %eax
2015 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2016 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2017 ; AVX512F-32-NEXT:    vpbroadcastq %xmm2, %ymm2
2018 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2019 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]
2020 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2021 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2022 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2023 ; AVX512F-32-NEXT:    movl %eax, %edx
2024 ; AVX512F-32-NEXT:    andb $2, %dl
2025 ; AVX512F-32-NEXT:    shrb %dl
2026 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2027 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2028 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6]
2029 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2030 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2031 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]
2032 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2033 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2034 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2035 ; AVX512F-32-NEXT:    movl %eax, %edx
2036 ; AVX512F-32-NEXT:    andb $15, %dl
2037 ; AVX512F-32-NEXT:    movl %edx, %eax
2038 ; AVX512F-32-NEXT:    shrb $2, %dl
2039 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2040 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2041 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
2042 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2043 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2044 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]
2045 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2046 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2047 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2048 ; AVX512F-32-NEXT:    shrb $3, %al
2049 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2050 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2051 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4]
2052 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2053 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm4
2054 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255]
2055 ; AVX512F-32-NEXT:    vpblendvb %ymm3, %ymm4, %ymm2, %ymm2
2056 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm4[4,5,6,7]
2057 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2058 ; AVX512F-32-NEXT:    movl %ecx, %eax
2059 ; AVX512F-32-NEXT:    shrl $28, %eax
2060 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2061 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2062 ; AVX512F-32-NEXT:    vpbroadcastd %xmm2, %xmm2
2063 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2064 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm4
2065 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]
2066 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm4, %ymm2, %ymm2
2067 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm4[4,5,6,7]
2068 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2069 ; AVX512F-32-NEXT:    movl %ecx, %eax
2070 ; AVX512F-32-NEXT:    movl %ecx, %esi
2071 ; AVX512F-32-NEXT:    shrl $29, %eax
2072 ; AVX512F-32-NEXT:    andb $1, %al
2073 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2074 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2075 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2]
2076 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2077 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2078 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]
2079 ; AVX512F-32-NEXT:    vpblendvb %ymm1, %ymm0, %ymm2, %ymm2
2080 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm2[0,1,2,3],zmm0[4,5,6,7]
2081 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2082 ; AVX512F-32-NEXT:    movl %esi, %eax
2083 ; AVX512F-32-NEXT:    shrl $30, %eax
2084 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2085 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2086 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
2087 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm1
2088 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2089 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]
2090 ; AVX512F-32-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm1
2091 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm1[0,1,2,3],zmm0[4,5,6,7]
2092 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2093 ; AVX512F-32-NEXT:    movl %esi, %eax
2094 ; AVX512F-32-NEXT:    shrl $31, %eax
2095 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2096 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2097 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]
2098 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2099 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2100 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]
2101 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm1, %ymm0, %ymm0
2102 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[4,5,6,7]
2103 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2104 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2105 ; AVX512F-32-NEXT:    kmovd %ecx, %k1
2106 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2107 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
2108 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm7
2109 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2110 ; AVX512F-32-NEXT:    vpblendvb %ymm4, %ymm1, %ymm7, %ymm1
2111 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2112 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2113 ; AVX512F-32-NEXT:    movl %ecx, %eax
2114 ; AVX512F-32-NEXT:    andb $2, %al
2115 ; AVX512F-32-NEXT:    shrb %al
2116 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2117 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2118 ; AVX512F-32-NEXT:    vpsllw $8, %xmm0, %xmm0
2119 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2120 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2121 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2122 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2123 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2124 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2125 ; AVX512F-32-NEXT:    movl %ecx, %edx
2126 ; AVX512F-32-NEXT:    andb $15, %dl
2127 ; AVX512F-32-NEXT:    movl %edx, %eax
2128 ; AVX512F-32-NEXT:    shrb $2, %dl
2129 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2130 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2131 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
2132 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2133 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2134 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2135 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2136 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2137 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2138 ; AVX512F-32-NEXT:    shrb $3, %al
2139 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2140 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2141 ; AVX512F-32-NEXT:    vpslld $24, %xmm0, %xmm0
2142 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2143 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2144 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2145 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2146 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2147 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2148 ; AVX512F-32-NEXT:    movl %ecx, %eax
2149 ; AVX512F-32-NEXT:    shrb $4, %al
2150 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2151 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2152 ; AVX512F-32-NEXT:    vpbroadcastd %xmm0, %xmm0
2153 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2154 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2155 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2156 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2157 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2158 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2159 ; AVX512F-32-NEXT:    movl %ecx, %eax
2160 ; AVX512F-32-NEXT:    shrb $5, %al
2161 ; AVX512F-32-NEXT:    andb $1, %al
2162 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2163 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2164 ; AVX512F-32-NEXT:    vpsllq $40, %xmm0, %xmm0
2165 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2166 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2167 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2168 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2169 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2170 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2171 ; AVX512F-32-NEXT:    movl %ecx, %eax
2172 ; AVX512F-32-NEXT:    shrb $6, %al
2173 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2174 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2175 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
2176 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2177 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2178 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2179 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2180 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2181 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2182 ; AVX512F-32-NEXT:    movl %ecx, %eax
2183 ; AVX512F-32-NEXT:    shrb $7, %al
2184 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2185 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2186 ; AVX512F-32-NEXT:    vpsllq $56, %xmm0, %xmm0
2187 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2188 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2189 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2190 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2191 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2192 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2193 ; AVX512F-32-NEXT:    movb %ch, %al
2194 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2195 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2196 ; AVX512F-32-NEXT:    vpbroadcastq %xmm0, %xmm0
2197 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2198 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2199 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2200 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2201 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2202 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2203 ; AVX512F-32-NEXT:    andb $2, %al
2204 ; AVX512F-32-NEXT:    shrb %al
2205 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2206 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2207 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6]
2208 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2209 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2210 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2211 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2212 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2213 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2214 ; AVX512F-32-NEXT:    movb %ch, %dl
2215 ; AVX512F-32-NEXT:    andb $15, %dl
2216 ; AVX512F-32-NEXT:    movl %edx, %eax
2217 ; AVX512F-32-NEXT:    shrb $2, %dl
2218 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2219 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2220 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
2221 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2222 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2223 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2224 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2225 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2226 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2227 ; AVX512F-32-NEXT:    shrb $3, %al
2228 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2229 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2230 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4]
2231 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2232 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2233 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2234 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2235 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2236 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2237 ; AVX512F-32-NEXT:    movl %ecx, %eax
2238 ; AVX512F-32-NEXT:    shrl $12, %eax
2239 ; AVX512F-32-NEXT:    andl $15, %eax
2240 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2241 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2242 ; AVX512F-32-NEXT:    vpbroadcastd %xmm0, %xmm0
2243 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2244 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2245 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2246 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2247 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2248 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2249 ; AVX512F-32-NEXT:    movl %ecx, %eax
2250 ; AVX512F-32-NEXT:    shrl $13, %eax
2251 ; AVX512F-32-NEXT:    andb $1, %al
2252 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2253 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2254 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2]
2255 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2256 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2257 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2258 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2259 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2260 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2261 ; AVX512F-32-NEXT:    movl %ecx, %eax
2262 ; AVX512F-32-NEXT:    shrl $14, %eax
2263 ; AVX512F-32-NEXT:    andl $3, %eax
2264 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2265 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2266 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
2267 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2268 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2269 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2270 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2271 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2272 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2273 ; AVX512F-32-NEXT:    movl %ecx, %eax
2274 ; AVX512F-32-NEXT:    shrl $15, %eax
2275 ; AVX512F-32-NEXT:    andl $1, %eax
2276 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2277 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2278 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]
2279 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2280 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2281 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2282 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2283 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2284 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2285 ; AVX512F-32-NEXT:    movl %ecx, %ebx
2286 ; AVX512F-32-NEXT:    shrl $16, %ebx
2287 ; AVX512F-32-NEXT:    kmovd %ebx, %k1
2288 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2289 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2290 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2291 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2292 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2293 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2294 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2295 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2296 ; AVX512F-32-NEXT:    movl %ebx, %edx
2297 ; AVX512F-32-NEXT:    andb $2, %dl
2298 ; AVX512F-32-NEXT:    shrb %dl
2299 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2300 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2301 ; AVX512F-32-NEXT:    vpsllw $8, %xmm0, %xmm0
2302 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2303 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2304 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2305 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2306 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2307 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2308 ; AVX512F-32-NEXT:    movl %ebx, %eax
2309 ; AVX512F-32-NEXT:    andb $15, %al
2310 ; AVX512F-32-NEXT:    movl %eax, %edx
2311 ; AVX512F-32-NEXT:    shrb $2, %al
2312 ; AVX512F-32-NEXT:    kmovd %eax, %k0
2313 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k1
2314 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2315 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
2316 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2317 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm1
2318 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2319 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]
2320 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2321 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2322 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2323 ; AVX512F-32-NEXT:    shrb $3, %dl
2324 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2325 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2326 ; AVX512F-32-NEXT:    vpslld $24, %xmm0, %xmm0
2327 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2328 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2329 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2330 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]
2331 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2332 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2333 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2334 ; AVX512F-32-NEXT:    movl %ebx, %eax
2335 ; AVX512F-32-NEXT:    shrb $4, %al
2336 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2337 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2338 ; AVX512F-32-NEXT:    vpbroadcastd %xmm0, %xmm0
2339 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2340 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2341 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2342 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]
2343 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2344 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2345 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2346 ; AVX512F-32-NEXT:    movl %ebx, %eax
2347 ; AVX512F-32-NEXT:    shrb $5, %al
2348 ; AVX512F-32-NEXT:    andb $1, %al
2349 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2350 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2351 ; AVX512F-32-NEXT:    vpsllq $40, %xmm0, %xmm0
2352 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2353 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2354 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2355 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]
2356 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2357 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2358 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2359 ; AVX512F-32-NEXT:    movl %ebx, %eax
2360 ; AVX512F-32-NEXT:    shrb $6, %al
2361 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2362 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2363 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
2364 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2365 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2366 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2367 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]
2368 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2369 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2370 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2371 ; AVX512F-32-NEXT:    # kill: %bl<def> %bl<kill> %ebx<kill> %ebx<def>
2372 ; AVX512F-32-NEXT:    shrb $7, %bl
2373 ; AVX512F-32-NEXT:    kmovd %ebx, %k1
2374 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2375 ; AVX512F-32-NEXT:    vpsllq $56, %xmm0, %xmm0
2376 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2377 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2378 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2379 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
2380 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2381 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2382 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2383 ; AVX512F-32-NEXT:    movl %ecx, %eax
2384 ; AVX512F-32-NEXT:    shrl $24, %eax
2385 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2386 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2387 ; AVX512F-32-NEXT:    vpbroadcastq %xmm0, %ymm0
2388 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2389 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2390 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]
2391 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2392 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2393 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2394 ; AVX512F-32-NEXT:    movl %eax, %edx
2395 ; AVX512F-32-NEXT:    andb $2, %dl
2396 ; AVX512F-32-NEXT:    shrb %dl
2397 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2398 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2399 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6]
2400 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2401 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2402 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2403 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]
2404 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2405 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2406 ; AVX512F-32-NEXT:    movl %eax, %edx
2407 ; AVX512F-32-NEXT:    andb $15, %dl
2408 ; AVX512F-32-NEXT:    movl %edx, %eax
2409 ; AVX512F-32-NEXT:    shrb $2, %dl
2410 ; AVX512F-32-NEXT:    kmovd %edx, %k0
2411 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k1
2412 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2413 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
2414 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2415 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm1
2416 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
2417 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]
2418 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
2419 ; AVX512F-32-NEXT:    shrb $3, %al
2420 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
2421 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2422 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2423 ; AVX512F-32-NEXT:    kmovd %eax, %k0
2424 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2425 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4]
2426 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
2427 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm4
2428 ; AVX512F-32-NEXT:    vpblendvb %ymm3, %ymm4, %ymm1, %ymm1
2429 ; AVX512F-32-NEXT:    movl %ecx, %eax
2430 ; AVX512F-32-NEXT:    shrl $29, %eax
2431 ; AVX512F-32-NEXT:    andb $1, %al
2432 ; AVX512F-32-NEXT:    kmovd %eax, %k0
2433 ; AVX512F-32-NEXT:    movl %ecx, %eax
2434 ; AVX512F-32-NEXT:    shrl $28, %eax
2435 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2436 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k1
2437 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2438 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
2439 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2440 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm3
2441 ; AVX512F-32-NEXT:    vpbroadcastd %xmm3, %xmm3
2442 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm3
2443 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]
2444 ; AVX512F-32-NEXT:    vpblendvb %ymm4, %ymm1, %ymm3, %ymm1
2445 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2446 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k1
2447 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2448 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
2449 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2450 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2]
2451 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm3
2452 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]
2453 ; AVX512F-32-NEXT:    vpblendvb %ymm4, %ymm1, %ymm3, %ymm1
2454 ; AVX512F-32-NEXT:    movl %ecx, %eax
2455 ; AVX512F-32-NEXT:    shrl $30, %eax
2456 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2457 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2458 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2459 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
2460 ; AVX512F-32-NEXT:    kmovd %eax, %k0
2461 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2462 ; AVX512F-32-NEXT:    vpbroadcastw %xmm3, %xmm3
2463 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm3
2464 ; AVX512F-32-NEXT:    vpblendvb %ymm2, %ymm1, %ymm3, %ymm1
2465 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2466 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2467 ; AVX512F-32-NEXT:    movl %ecx, %eax
2468 ; AVX512F-32-NEXT:    shrl $31, %eax
2469 ; AVX512F-32-NEXT:    kshiftlq $1, %k0, %k0
2470 ; AVX512F-32-NEXT:    kshiftrq $1, %k0, %k0
2471 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2472 ; AVX512F-32-NEXT:    kshiftlq $63, %k1, %k1
2473 ; AVX512F-32-NEXT:    korq %k1, %k0, %k1
2474 ; AVX512F-32-NEXT:    vpcmpeqb %zmm6, %zmm5, %k0 {%k1}
2475 ; AVX512F-32-NEXT:    vpcmpgtb %zmm5, %zmm6, %k2 {%k1}
2476 ; AVX512F-32-NEXT:    vpcmpleb %zmm6, %zmm5, %k3 {%k1}
2477 ; AVX512F-32-NEXT:    vpcmpneqb %zmm6, %zmm5, %k4 {%k1}
2478 ; AVX512F-32-NEXT:    vpcmpleb %zmm5, %zmm6, %k5 {%k1}
2479 ; AVX512F-32-NEXT:    vpcmpgtb %zmm6, %zmm5, %k1 {%k1}
2480 ; AVX512F-32-NEXT:    kmovq %k0, (%esp)
2481 ; AVX512F-32-NEXT:    movl (%esp), %eax
2482 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
2483 ; AVX512F-32-NEXT:    kmovq %k2, {{[0-9]+}}(%esp)
2484 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2485 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2486 ; AVX512F-32-NEXT:    kmovq %k3, {{[0-9]+}}(%esp)
2487 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2488 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2489 ; AVX512F-32-NEXT:    kxorq %k0, %k0, %k0
2490 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
2491 ; AVX512F-32-NEXT:    orl {{[0-9]+}}(%esp), %edx
2492 ; AVX512F-32-NEXT:    orl {{[0-9]+}}(%esp), %eax
2493 ; AVX512F-32-NEXT:    kmovq %k4, {{[0-9]+}}(%esp)
2494 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2495 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2496 ; AVX512F-32-NEXT:    kmovq %k5, {{[0-9]+}}(%esp)
2497 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2498 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2499 ; AVX512F-32-NEXT:    kmovq %k1, {{[0-9]+}}(%esp)
2500 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2501 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2502 ; AVX512F-32-NEXT:    addl %esi, %eax
2503 ; AVX512F-32-NEXT:    adcl %ecx, %edx
2504 ; AVX512F-32-NEXT:    addl $60, %esp
2505 ; AVX512F-32-NEXT:    popl %esi
2506 ; AVX512F-32-NEXT:    popl %ebx
2507 ; AVX512F-32-NEXT:    vzeroupper
2508 ; AVX512F-32-NEXT:    retl
2509   %res0 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 0, i64 %mask)
2510   %res1 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 1, i64 %mask)
2511   %ret1 = add i64 %res0, %res1
2512   %res2 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 2, i64 %mask)
2513   %ret2 = add i64 %ret1, %res2
2514   %res3 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 3, i64 %mask)
2515   %ret3 = add i64 %ret2, %res3
2516   %res4 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 4, i64 %mask)
2517   %ret4 = add i64 %ret3, %res4
2518   %res5 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 5, i64 %mask)
2519   %ret5 = add i64 %ret4, %res5
2520   %res6 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 6, i64 %mask)
2521   %ret6 = add i64 %ret5, %res6
2522   %res7 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 7, i64 %mask)
2523   %ret7 = add i64 %ret6, %res7
2524   ret i64 %ret7
2527 declare i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8>, <64 x i8>, i32, i64) nounwind readnone
2529 define i64 @test_ucmp_b_512(<64 x i8> %a0, <64 x i8> %a1) {
2530 ; AVX512BW-LABEL: test_ucmp_b_512:
2531 ; AVX512BW:       ## BB#0:
2532 ; AVX512BW-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0
2533 ; AVX512BW-NEXT:    kmovq %k0, %rax
2534 ; AVX512BW-NEXT:    vpcmpltub %zmm1, %zmm0, %k0
2535 ; AVX512BW-NEXT:    kmovq %k0, %rcx
2536 ; AVX512BW-NEXT:    addq %rax, %rcx
2537 ; AVX512BW-NEXT:    vpcmpleub %zmm1, %zmm0, %k0
2538 ; AVX512BW-NEXT:    kmovq %k0, %rax
2539 ; AVX512BW-NEXT:    addq %rcx, %rax
2540 ; AVX512BW-NEXT:    vpcmpneqb %zmm1, %zmm0, %k0
2541 ; AVX512BW-NEXT:    kmovq %k0, %rcx
2542 ; AVX512BW-NEXT:    addq %rax, %rcx
2543 ; AVX512BW-NEXT:    vpcmpnltub %zmm1, %zmm0, %k0
2544 ; AVX512BW-NEXT:    kmovq %k0, %rax
2545 ; AVX512BW-NEXT:    addq %rcx, %rax
2546 ; AVX512BW-NEXT:    vpcmpnleub %zmm1, %zmm0, %k0
2547 ; AVX512BW-NEXT:    kmovq %k0, %rcx
2548 ; AVX512BW-NEXT:    addq %rax, %rcx
2549 ; AVX512BW-NEXT:    kxnorq %k0, %k0, %k0
2550 ; AVX512BW-NEXT:    kmovq %k0, %rax
2551 ; AVX512BW-NEXT:    addq %rcx, %rax
2552 ; AVX512BW-NEXT:    vzeroupper
2553 ; AVX512BW-NEXT:    retq
2555 ; AVX512F-32-LABEL: test_ucmp_b_512:
2556 ; AVX512F-32:       # BB#0:
2557 ; AVX512F-32-NEXT:    subl $60, %esp
2558 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 64
2559 ; AVX512F-32-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0
2560 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
2561 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %eax
2562 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
2563 ; AVX512F-32-NEXT:    vpcmpltub %zmm1, %zmm0, %k0
2564 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
2565 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2566 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2567 ; AVX512F-32-NEXT:    vpcmpleub %zmm1, %zmm0, %k0
2568 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
2569 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2570 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2571 ; AVX512F-32-NEXT:    vpcmpneqb %zmm1, %zmm0, %k0
2572 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
2573 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2574 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2575 ; AVX512F-32-NEXT:    vpcmpnltub %zmm1, %zmm0, %k0
2576 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
2577 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2578 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2579 ; AVX512F-32-NEXT:    vpcmpnleub %zmm1, %zmm0, %k0
2580 ; AVX512F-32-NEXT:    kmovq %k0, (%esp)
2581 ; AVX512F-32-NEXT:    addl (%esp), %eax
2582 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2583 ; AVX512F-32-NEXT:    kxnorq %k0, %k0, %k0
2584 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
2585 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
2586 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
2587 ; AVX512F-32-NEXT:    addl $60, %esp
2588 ; AVX512F-32-NEXT:    vzeroupper
2589 ; AVX512F-32-NEXT:    retl
2590   %res0 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 0, i64 -1)
2591   %res1 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 1, i64 -1)
2592   %ret1 = add i64 %res0, %res1
2593   %res2 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 2, i64 -1)
2594   %ret2 = add i64 %ret1, %res2
2595   %res3 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 3, i64 -1)
2596   %ret3 = add i64 %ret2, %res3
2597   %res4 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 4, i64 -1)
2598   %ret4 = add i64 %ret3, %res4
2599   %res5 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 5, i64 -1)
2600   %ret5 = add i64 %ret4, %res5
2601   %res6 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 6, i64 -1)
2602   %ret6 = add i64 %ret5, %res6
2603   %res7 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 7, i64 -1)
2604   %ret7 = add i64 %ret6, %res7
2605   ret i64 %ret7
2608 define i64 @test_mask_x86_avx512_ucmp_b_512(<64 x i8> %a0, <64 x i8> %a1, i64 %mask) {
2609 ; AVX512BW-LABEL: test_mask_x86_avx512_ucmp_b_512:
2610 ; AVX512BW:       ## BB#0:
2611 ; AVX512BW-NEXT:    kmovq %rdi, %k1
2612 ; AVX512BW-NEXT:    vpcmpeqb %zmm1, %zmm0, %k0 {%k1}
2613 ; AVX512BW-NEXT:    kmovq %k0, %rax
2614 ; AVX512BW-NEXT:    vpcmpltub %zmm1, %zmm0, %k0 {%k1}
2615 ; AVX512BW-NEXT:    kmovq %k0, %rcx
2616 ; AVX512BW-NEXT:    addq %rax, %rcx
2617 ; AVX512BW-NEXT:    vpcmpleub %zmm1, %zmm0, %k0 {%k1}
2618 ; AVX512BW-NEXT:    kmovq %k0, %rax
2619 ; AVX512BW-NEXT:    addq %rcx, %rax
2620 ; AVX512BW-NEXT:    kxorq %k0, %k0, %k0
2621 ; AVX512BW-NEXT:    kmovq %k0, %rcx
2622 ; AVX512BW-NEXT:    orq %rax, %rcx
2623 ; AVX512BW-NEXT:    vpcmpneqb %zmm1, %zmm0, %k0 {%k1}
2624 ; AVX512BW-NEXT:    kmovq %k0, %rax
2625 ; AVX512BW-NEXT:    addq %rcx, %rax
2626 ; AVX512BW-NEXT:    vpcmpnltub %zmm1, %zmm0, %k0 {%k1}
2627 ; AVX512BW-NEXT:    kmovq %k0, %rcx
2628 ; AVX512BW-NEXT:    addq %rax, %rcx
2629 ; AVX512BW-NEXT:    vpcmpnleub %zmm1, %zmm0, %k0 {%k1}
2630 ; AVX512BW-NEXT:    kmovq %k0, %rax
2631 ; AVX512BW-NEXT:    addq %rcx, %rax
2632 ; AVX512BW-NEXT:    addq %rdi, %rax
2633 ; AVX512BW-NEXT:    vzeroupper
2634 ; AVX512BW-NEXT:    retq
2636 ; AVX512F-32-LABEL: test_mask_x86_avx512_ucmp_b_512:
2637 ; AVX512F-32:       # BB#0:
2638 ; AVX512F-32-NEXT:    pushl %ebx
2639 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 8
2640 ; AVX512F-32-NEXT:    pushl %esi
2641 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 12
2642 ; AVX512F-32-NEXT:    subl $60, %esp
2643 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 72
2644 ; AVX512F-32-NEXT:    .cfi_offset %esi, -12
2645 ; AVX512F-32-NEXT:    .cfi_offset %ebx, -8
2646 ; AVX512F-32-NEXT:    vmovdqa64 %zmm1, %zmm6
2647 ; AVX512F-32-NEXT:    vmovdqa64 %zmm0, %zmm5
2648 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2649 ; AVX512F-32-NEXT:    movl %ecx, %eax
2650 ; AVX512F-32-NEXT:    shrb $5, %al
2651 ; AVX512F-32-NEXT:    andb $1, %al
2652 ; AVX512F-32-NEXT:    movl %ecx, %ebx
2653 ; AVX512F-32-NEXT:    andb $15, %bl
2654 ; AVX512F-32-NEXT:    movl %ecx, %edx
2655 ; AVX512F-32-NEXT:    andb $2, %dl
2656 ; AVX512F-32-NEXT:    shrb %dl
2657 ; AVX512F-32-NEXT:    kmovd %edx, %k0
2658 ; AVX512F-32-NEXT:    movl %ebx, %edx
2659 ; AVX512F-32-NEXT:    shrb $2, %bl
2660 ; AVX512F-32-NEXT:    kmovd %ebx, %k1
2661 ; AVX512F-32-NEXT:    movl %ecx, %ebx
2662 ; AVX512F-32-NEXT:    shrb $4, %bl
2663 ; AVX512F-32-NEXT:    shrb $3, %dl
2664 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
2665 ; AVX512F-32-NEXT:    vpsllw $8, %xmm2, %xmm2
2666 ; AVX512F-32-NEXT:    kmovd %ecx, %k0
2667 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2668 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2669 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2670 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2671 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2672 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
2673 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm3
2674 ; AVX512F-32-NEXT:    vpbroadcastw %xmm3, %xmm3
2675 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2676 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm2, %ymm3, %ymm3
2677 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm3[0,1,2,3],zmm2[4,5,6,7]
2678 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2679 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
2680 ; AVX512F-32-NEXT:    kmovd %edx, %k0
2681 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2682 ; AVX512F-32-NEXT:    vpslld $24, %xmm3, %xmm3
2683 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2684 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm2, %ymm3, %ymm3
2685 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm3[0,1,2,3],zmm2[4,5,6,7]
2686 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2687 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
2688 ; AVX512F-32-NEXT:    kmovd %ebx, %k0
2689 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2690 ; AVX512F-32-NEXT:    vpbroadcastd %xmm3, %xmm3
2691 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2692 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm2, %ymm3, %ymm3
2693 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm3[0,1,2,3],zmm2[4,5,6,7]
2694 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2695 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm2
2696 ; AVX512F-32-NEXT:    kmovd %eax, %k0
2697 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2698 ; AVX512F-32-NEXT:    vpsllq $40, %xmm3, %xmm3
2699 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2700 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm2, %ymm3, %ymm3
2701 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm3[0,1,2,3],zmm2[4,5,6,7]
2702 ; AVX512F-32-NEXT:    movl %ecx, %eax
2703 ; AVX512F-32-NEXT:    shrb $6, %al
2704 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2705 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2706 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2707 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
2708 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2709 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2710 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2711 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2712 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2713 ; AVX512F-32-NEXT:    movl %ecx, %eax
2714 ; AVX512F-32-NEXT:    shrb $7, %al
2715 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2716 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2717 ; AVX512F-32-NEXT:    vpsllq $56, %xmm2, %xmm2
2718 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2719 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2720 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2721 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2722 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2723 ; AVX512F-32-NEXT:    movb %ch, %al
2724 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2725 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2726 ; AVX512F-32-NEXT:    vpbroadcastq %xmm2, %xmm2
2727 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2728 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2729 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2730 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2731 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2732 ; AVX512F-32-NEXT:    andb $2, %al
2733 ; AVX512F-32-NEXT:    shrb %al
2734 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2735 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2736 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6]
2737 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2738 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2739 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2740 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2741 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2742 ; AVX512F-32-NEXT:    movb %ch, %dl
2743 ; AVX512F-32-NEXT:    andb $15, %dl
2744 ; AVX512F-32-NEXT:    movl %edx, %eax
2745 ; AVX512F-32-NEXT:    shrb $2, %dl
2746 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2747 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2748 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
2749 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2750 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2751 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2752 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2753 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2754 ; AVX512F-32-NEXT:    shrb $3, %al
2755 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2756 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2757 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4]
2758 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2759 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2760 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2761 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2762 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2763 ; AVX512F-32-NEXT:    movl %ecx, %eax
2764 ; AVX512F-32-NEXT:    shrl $12, %eax
2765 ; AVX512F-32-NEXT:    andl $15, %eax
2766 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2767 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2768 ; AVX512F-32-NEXT:    vpbroadcastd %xmm2, %xmm2
2769 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2770 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2771 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2772 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2773 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2774 ; AVX512F-32-NEXT:    movl %ecx, %eax
2775 ; AVX512F-32-NEXT:    shrl $13, %eax
2776 ; AVX512F-32-NEXT:    andb $1, %al
2777 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2778 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2779 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2]
2780 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2781 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2782 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2783 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2784 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2785 ; AVX512F-32-NEXT:    movl %ecx, %eax
2786 ; AVX512F-32-NEXT:    shrl $14, %eax
2787 ; AVX512F-32-NEXT:    andl $3, %eax
2788 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2789 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2790 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
2791 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2792 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2793 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2794 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2795 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2796 ; AVX512F-32-NEXT:    movl %ecx, %eax
2797 ; AVX512F-32-NEXT:    shrl $15, %eax
2798 ; AVX512F-32-NEXT:    andl $1, %eax
2799 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2800 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2801 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0]
2802 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2803 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2804 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2805 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2806 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2807 ; AVX512F-32-NEXT:    movl %ecx, %eax
2808 ; AVX512F-32-NEXT:    shrl $16, %eax
2809 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2810 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2811 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2812 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2813 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2814 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2815 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2816 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2817 ; AVX512F-32-NEXT:    movl %eax, %edx
2818 ; AVX512F-32-NEXT:    andb $2, %dl
2819 ; AVX512F-32-NEXT:    shrb %dl
2820 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2821 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2822 ; AVX512F-32-NEXT:    vpsllw $8, %xmm2, %xmm2
2823 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2824 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2825 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2826 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2827 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2828 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2829 ; AVX512F-32-NEXT:    movl %eax, %ebx
2830 ; AVX512F-32-NEXT:    andb $15, %bl
2831 ; AVX512F-32-NEXT:    movl %ebx, %edx
2832 ; AVX512F-32-NEXT:    shrb $2, %bl
2833 ; AVX512F-32-NEXT:    kmovd %ebx, %k1
2834 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2835 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
2836 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2837 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2838 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]
2839 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2840 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2841 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2842 ; AVX512F-32-NEXT:    shrb $3, %dl
2843 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2844 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2845 ; AVX512F-32-NEXT:    vpslld $24, %xmm2, %xmm2
2846 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2847 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2848 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]
2849 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2850 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2851 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2852 ; AVX512F-32-NEXT:    movl %eax, %edx
2853 ; AVX512F-32-NEXT:    shrb $4, %dl
2854 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2855 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2856 ; AVX512F-32-NEXT:    vpbroadcastd %xmm2, %xmm2
2857 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2858 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2859 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]
2860 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2861 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2862 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2863 ; AVX512F-32-NEXT:    movl %eax, %edx
2864 ; AVX512F-32-NEXT:    shrb $5, %dl
2865 ; AVX512F-32-NEXT:    andb $1, %dl
2866 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2867 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2868 ; AVX512F-32-NEXT:    vpsllq $40, %xmm2, %xmm2
2869 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2870 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2871 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]
2872 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2873 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2874 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2875 ; AVX512F-32-NEXT:    movl %eax, %edx
2876 ; AVX512F-32-NEXT:    shrb $6, %dl
2877 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2878 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2879 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
2880 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2881 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2882 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]
2883 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2884 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2885 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2886 ; AVX512F-32-NEXT:    # kill: %al<def> %al<kill> %eax<kill> %eax<def>
2887 ; AVX512F-32-NEXT:    shrb $7, %al
2888 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2889 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2890 ; AVX512F-32-NEXT:    vpsllq $56, %xmm2, %xmm2
2891 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2892 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2893 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
2894 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2895 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2896 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2897 ; AVX512F-32-NEXT:    movl %ecx, %eax
2898 ; AVX512F-32-NEXT:    shrl $24, %eax
2899 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2900 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2901 ; AVX512F-32-NEXT:    vpbroadcastq %xmm2, %ymm2
2902 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2903 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]
2904 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2905 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2906 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2907 ; AVX512F-32-NEXT:    movl %eax, %edx
2908 ; AVX512F-32-NEXT:    andb $2, %dl
2909 ; AVX512F-32-NEXT:    shrb %dl
2910 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2911 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2912 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6]
2913 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2914 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2915 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]
2916 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2917 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2918 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2919 ; AVX512F-32-NEXT:    movl %eax, %edx
2920 ; AVX512F-32-NEXT:    andb $15, %dl
2921 ; AVX512F-32-NEXT:    movl %edx, %eax
2922 ; AVX512F-32-NEXT:    shrb $2, %dl
2923 ; AVX512F-32-NEXT:    kmovd %edx, %k1
2924 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2925 ; AVX512F-32-NEXT:    vpbroadcastw %xmm2, %xmm2
2926 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2927 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
2928 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]
2929 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm3, %ymm2, %ymm2
2930 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm3[4,5,6,7]
2931 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2932 ; AVX512F-32-NEXT:    shrb $3, %al
2933 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2934 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2935 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4]
2936 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2937 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm4
2938 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255]
2939 ; AVX512F-32-NEXT:    vpblendvb %ymm3, %ymm4, %ymm2, %ymm2
2940 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm4[4,5,6,7]
2941 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2942 ; AVX512F-32-NEXT:    movl %ecx, %eax
2943 ; AVX512F-32-NEXT:    shrl $28, %eax
2944 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2945 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2946 ; AVX512F-32-NEXT:    vpbroadcastd %xmm2, %xmm2
2947 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2948 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm4
2949 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]
2950 ; AVX512F-32-NEXT:    vpblendvb %ymm0, %ymm4, %ymm2, %ymm2
2951 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm2 = zmm2[0,1,2,3],zmm4[4,5,6,7]
2952 ; AVX512F-32-NEXT:    vpmovb2m %zmm2, %k0
2953 ; AVX512F-32-NEXT:    movl %ecx, %eax
2954 ; AVX512F-32-NEXT:    movl %ecx, %esi
2955 ; AVX512F-32-NEXT:    shrl $29, %eax
2956 ; AVX512F-32-NEXT:    andb $1, %al
2957 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2958 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm2
2959 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2]
2960 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm2
2961 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2962 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]
2963 ; AVX512F-32-NEXT:    vpblendvb %ymm1, %ymm0, %ymm2, %ymm2
2964 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm2[0,1,2,3],zmm0[4,5,6,7]
2965 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2966 ; AVX512F-32-NEXT:    movl %esi, %eax
2967 ; AVX512F-32-NEXT:    shrl $30, %eax
2968 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2969 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2970 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
2971 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm1
2972 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2973 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]
2974 ; AVX512F-32-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm1
2975 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm1[0,1,2,3],zmm0[4,5,6,7]
2976 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2977 ; AVX512F-32-NEXT:    movl %esi, %eax
2978 ; AVX512F-32-NEXT:    shrl $31, %eax
2979 ; AVX512F-32-NEXT:    kmovd %eax, %k1
2980 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
2981 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]
2982 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
2983 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
2984 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]
2985 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm1, %ymm0, %ymm0
2986 ; AVX512F-32-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[4,5,6,7]
2987 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2988 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2989 ; AVX512F-32-NEXT:    kmovd %ecx, %k1
2990 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
2991 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
2992 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm7
2993 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
2994 ; AVX512F-32-NEXT:    vpblendvb %ymm4, %ymm1, %ymm7, %ymm1
2995 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2996 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
2997 ; AVX512F-32-NEXT:    movl %ecx, %eax
2998 ; AVX512F-32-NEXT:    andb $2, %al
2999 ; AVX512F-32-NEXT:    shrb %al
3000 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3001 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3002 ; AVX512F-32-NEXT:    vpsllw $8, %xmm0, %xmm0
3003 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3004 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3005 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3006 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3007 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3008 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3009 ; AVX512F-32-NEXT:    movl %ecx, %edx
3010 ; AVX512F-32-NEXT:    andb $15, %dl
3011 ; AVX512F-32-NEXT:    movl %edx, %eax
3012 ; AVX512F-32-NEXT:    shrb $2, %dl
3013 ; AVX512F-32-NEXT:    kmovd %edx, %k1
3014 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3015 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
3016 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3017 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3018 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3019 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3020 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3021 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3022 ; AVX512F-32-NEXT:    shrb $3, %al
3023 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3024 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3025 ; AVX512F-32-NEXT:    vpslld $24, %xmm0, %xmm0
3026 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3027 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3028 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3029 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3030 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3031 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3032 ; AVX512F-32-NEXT:    movl %ecx, %eax
3033 ; AVX512F-32-NEXT:    shrb $4, %al
3034 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3035 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3036 ; AVX512F-32-NEXT:    vpbroadcastd %xmm0, %xmm0
3037 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3038 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3039 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3040 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3041 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3042 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3043 ; AVX512F-32-NEXT:    movl %ecx, %eax
3044 ; AVX512F-32-NEXT:    shrb $5, %al
3045 ; AVX512F-32-NEXT:    andb $1, %al
3046 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3047 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3048 ; AVX512F-32-NEXT:    vpsllq $40, %xmm0, %xmm0
3049 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3050 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3051 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3052 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3053 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3054 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3055 ; AVX512F-32-NEXT:    movl %ecx, %eax
3056 ; AVX512F-32-NEXT:    shrb $6, %al
3057 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3058 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3059 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
3060 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3061 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3062 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3063 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3064 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3065 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3066 ; AVX512F-32-NEXT:    movl %ecx, %eax
3067 ; AVX512F-32-NEXT:    shrb $7, %al
3068 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3069 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3070 ; AVX512F-32-NEXT:    vpsllq $56, %xmm0, %xmm0
3071 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3072 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3073 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3074 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3075 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3076 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3077 ; AVX512F-32-NEXT:    movb %ch, %al
3078 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3079 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3080 ; AVX512F-32-NEXT:    vpbroadcastq %xmm0, %xmm0
3081 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3082 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3083 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3084 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3085 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3086 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3087 ; AVX512F-32-NEXT:    andb $2, %al
3088 ; AVX512F-32-NEXT:    shrb %al
3089 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3090 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3091 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6]
3092 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3093 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3094 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3095 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3096 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3097 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3098 ; AVX512F-32-NEXT:    movb %ch, %dl
3099 ; AVX512F-32-NEXT:    andb $15, %dl
3100 ; AVX512F-32-NEXT:    movl %edx, %eax
3101 ; AVX512F-32-NEXT:    shrb $2, %dl
3102 ; AVX512F-32-NEXT:    kmovd %edx, %k1
3103 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3104 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
3105 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3106 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3107 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3108 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3109 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3110 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3111 ; AVX512F-32-NEXT:    shrb $3, %al
3112 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3113 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3114 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4]
3115 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3116 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3117 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3118 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3119 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3120 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3121 ; AVX512F-32-NEXT:    movl %ecx, %eax
3122 ; AVX512F-32-NEXT:    shrl $12, %eax
3123 ; AVX512F-32-NEXT:    andl $15, %eax
3124 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3125 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3126 ; AVX512F-32-NEXT:    vpbroadcastd %xmm0, %xmm0
3127 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3128 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3129 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3130 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3131 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3132 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3133 ; AVX512F-32-NEXT:    movl %ecx, %eax
3134 ; AVX512F-32-NEXT:    shrl $13, %eax
3135 ; AVX512F-32-NEXT:    andb $1, %al
3136 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3137 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3138 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2]
3139 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3140 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3141 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3142 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3143 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3144 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3145 ; AVX512F-32-NEXT:    movl %ecx, %eax
3146 ; AVX512F-32-NEXT:    shrl $14, %eax
3147 ; AVX512F-32-NEXT:    andl $3, %eax
3148 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3149 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3150 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
3151 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3152 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3153 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3154 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3155 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3156 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3157 ; AVX512F-32-NEXT:    movl %ecx, %eax
3158 ; AVX512F-32-NEXT:    shrl $15, %eax
3159 ; AVX512F-32-NEXT:    andl $1, %eax
3160 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3161 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3162 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]
3163 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3164 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3165 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3166 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3167 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3168 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3169 ; AVX512F-32-NEXT:    movl %ecx, %ebx
3170 ; AVX512F-32-NEXT:    shrl $16, %ebx
3171 ; AVX512F-32-NEXT:    kmovd %ebx, %k1
3172 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3173 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3174 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3175 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3176 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3177 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3178 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3179 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3180 ; AVX512F-32-NEXT:    movl %ebx, %edx
3181 ; AVX512F-32-NEXT:    andb $2, %dl
3182 ; AVX512F-32-NEXT:    shrb %dl
3183 ; AVX512F-32-NEXT:    kmovd %edx, %k1
3184 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3185 ; AVX512F-32-NEXT:    vpsllw $8, %xmm0, %xmm0
3186 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3187 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3188 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3189 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3190 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3191 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3192 ; AVX512F-32-NEXT:    movl %ebx, %eax
3193 ; AVX512F-32-NEXT:    andb $15, %al
3194 ; AVX512F-32-NEXT:    movl %eax, %edx
3195 ; AVX512F-32-NEXT:    shrb $2, %al
3196 ; AVX512F-32-NEXT:    kmovd %eax, %k0
3197 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k1
3198 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
3199 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
3200 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3201 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm1
3202 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3203 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]
3204 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3205 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3206 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3207 ; AVX512F-32-NEXT:    shrb $3, %dl
3208 ; AVX512F-32-NEXT:    kmovd %edx, %k1
3209 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3210 ; AVX512F-32-NEXT:    vpslld $24, %xmm0, %xmm0
3211 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3212 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3213 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3214 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]
3215 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3216 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3217 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3218 ; AVX512F-32-NEXT:    movl %ebx, %eax
3219 ; AVX512F-32-NEXT:    shrb $4, %al
3220 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3221 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3222 ; AVX512F-32-NEXT:    vpbroadcastd %xmm0, %xmm0
3223 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3224 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3225 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3226 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]
3227 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3228 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3229 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3230 ; AVX512F-32-NEXT:    movl %ebx, %eax
3231 ; AVX512F-32-NEXT:    shrb $5, %al
3232 ; AVX512F-32-NEXT:    andb $1, %al
3233 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3234 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3235 ; AVX512F-32-NEXT:    vpsllq $40, %xmm0, %xmm0
3236 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3237 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3238 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3239 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]
3240 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3241 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3242 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3243 ; AVX512F-32-NEXT:    movl %ebx, %eax
3244 ; AVX512F-32-NEXT:    shrb $6, %al
3245 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3246 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3247 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
3248 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3249 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3250 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3251 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]
3252 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3253 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3254 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3255 ; AVX512F-32-NEXT:    # kill: %bl<def> %bl<kill> %ebx<kill> %ebx<def>
3256 ; AVX512F-32-NEXT:    shrb $7, %bl
3257 ; AVX512F-32-NEXT:    kmovd %ebx, %k1
3258 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3259 ; AVX512F-32-NEXT:    vpsllq $56, %xmm0, %xmm0
3260 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3261 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3262 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3263 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
3264 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3265 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3266 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3267 ; AVX512F-32-NEXT:    movl %ecx, %eax
3268 ; AVX512F-32-NEXT:    shrl $24, %eax
3269 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3270 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3271 ; AVX512F-32-NEXT:    vpbroadcastq %xmm0, %ymm0
3272 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3273 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3274 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]
3275 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3276 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3277 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3278 ; AVX512F-32-NEXT:    movl %eax, %edx
3279 ; AVX512F-32-NEXT:    andb $2, %dl
3280 ; AVX512F-32-NEXT:    shrb %dl
3281 ; AVX512F-32-NEXT:    kmovd %edx, %k1
3282 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3283 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6]
3284 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3285 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3286 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3287 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]
3288 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3289 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3290 ; AVX512F-32-NEXT:    movl %eax, %edx
3291 ; AVX512F-32-NEXT:    andb $15, %dl
3292 ; AVX512F-32-NEXT:    movl %edx, %eax
3293 ; AVX512F-32-NEXT:    shrb $2, %dl
3294 ; AVX512F-32-NEXT:    kmovd %edx, %k0
3295 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k1
3296 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
3297 ; AVX512F-32-NEXT:    vpbroadcastw %xmm0, %xmm0
3298 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
3299 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm1
3300 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm1, %ymm4
3301 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]
3302 ; AVX512F-32-NEXT:    vpblendvb %ymm7, %ymm4, %ymm0, %ymm0
3303 ; AVX512F-32-NEXT:    shrb $3, %al
3304 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
3305 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3306 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
3307 ; AVX512F-32-NEXT:    kmovd %eax, %k0
3308 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm1
3309 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4]
3310 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm1
3311 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm4
3312 ; AVX512F-32-NEXT:    vpblendvb %ymm3, %ymm4, %ymm1, %ymm1
3313 ; AVX512F-32-NEXT:    movl %ecx, %eax
3314 ; AVX512F-32-NEXT:    shrl $29, %eax
3315 ; AVX512F-32-NEXT:    andb $1, %al
3316 ; AVX512F-32-NEXT:    kmovd %eax, %k0
3317 ; AVX512F-32-NEXT:    movl %ecx, %eax
3318 ; AVX512F-32-NEXT:    shrl $28, %eax
3319 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3320 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k1
3321 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3322 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
3323 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3324 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm3
3325 ; AVX512F-32-NEXT:    vpbroadcastd %xmm3, %xmm3
3326 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm3
3327 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]
3328 ; AVX512F-32-NEXT:    vpblendvb %ymm4, %ymm1, %ymm3, %ymm1
3329 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3330 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k1
3331 ; AVX512F-32-NEXT:    vpmovm2b %k1, %zmm0
3332 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
3333 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
3334 ; AVX512F-32-NEXT:    vpslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2]
3335 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm3
3336 ; AVX512F-32-NEXT:    vmovdqa {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]
3337 ; AVX512F-32-NEXT:    vpblendvb %ymm4, %ymm1, %ymm3, %ymm1
3338 ; AVX512F-32-NEXT:    movl %ecx, %eax
3339 ; AVX512F-32-NEXT:    shrl $30, %eax
3340 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3341 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3342 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm0
3343 ; AVX512F-32-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
3344 ; AVX512F-32-NEXT:    kmovd %eax, %k0
3345 ; AVX512F-32-NEXT:    vpmovm2b %k0, %zmm3
3346 ; AVX512F-32-NEXT:    vpbroadcastw %xmm3, %xmm3
3347 ; AVX512F-32-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm3
3348 ; AVX512F-32-NEXT:    vpblendvb %ymm2, %ymm1, %ymm3, %ymm1
3349 ; AVX512F-32-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3350 ; AVX512F-32-NEXT:    vpmovb2m %zmm0, %k0
3351 ; AVX512F-32-NEXT:    movl %ecx, %eax
3352 ; AVX512F-32-NEXT:    shrl $31, %eax
3353 ; AVX512F-32-NEXT:    kshiftlq $1, %k0, %k0
3354 ; AVX512F-32-NEXT:    kshiftrq $1, %k0, %k0
3355 ; AVX512F-32-NEXT:    kmovd %eax, %k1
3356 ; AVX512F-32-NEXT:    kshiftlq $63, %k1, %k1
3357 ; AVX512F-32-NEXT:    korq %k1, %k0, %k1
3358 ; AVX512F-32-NEXT:    vpcmpeqb %zmm6, %zmm5, %k0 {%k1}
3359 ; AVX512F-32-NEXT:    vpcmpltub %zmm6, %zmm5, %k2 {%k1}
3360 ; AVX512F-32-NEXT:    vpcmpleub %zmm6, %zmm5, %k3 {%k1}
3361 ; AVX512F-32-NEXT:    vpcmpneqb %zmm6, %zmm5, %k4 {%k1}
3362 ; AVX512F-32-NEXT:    vpcmpnltub %zmm6, %zmm5, %k5 {%k1}
3363 ; AVX512F-32-NEXT:    vpcmpnleub %zmm6, %zmm5, %k1 {%k1}
3364 ; AVX512F-32-NEXT:    kmovq %k0, (%esp)
3365 ; AVX512F-32-NEXT:    movl (%esp), %eax
3366 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
3367 ; AVX512F-32-NEXT:    kmovq %k2, {{[0-9]+}}(%esp)
3368 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
3369 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
3370 ; AVX512F-32-NEXT:    kmovq %k3, {{[0-9]+}}(%esp)
3371 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
3372 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
3373 ; AVX512F-32-NEXT:    kxorq %k0, %k0, %k0
3374 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
3375 ; AVX512F-32-NEXT:    orl {{[0-9]+}}(%esp), %edx
3376 ; AVX512F-32-NEXT:    orl {{[0-9]+}}(%esp), %eax
3377 ; AVX512F-32-NEXT:    kmovq %k4, {{[0-9]+}}(%esp)
3378 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
3379 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
3380 ; AVX512F-32-NEXT:    kmovq %k5, {{[0-9]+}}(%esp)
3381 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
3382 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
3383 ; AVX512F-32-NEXT:    kmovq %k1, {{[0-9]+}}(%esp)
3384 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
3385 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
3386 ; AVX512F-32-NEXT:    addl %esi, %eax
3387 ; AVX512F-32-NEXT:    adcl %ecx, %edx
3388 ; AVX512F-32-NEXT:    addl $60, %esp
3389 ; AVX512F-32-NEXT:    popl %esi
3390 ; AVX512F-32-NEXT:    popl %ebx
3391 ; AVX512F-32-NEXT:    vzeroupper
3392 ; AVX512F-32-NEXT:    retl
3393   %res0 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 0, i64 %mask)
3394   %res1 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 1, i64 %mask)
3395   %ret1 = add i64 %res0, %res1
3396   %res2 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 2, i64 %mask)
3397   %ret2 = add i64 %ret1, %res2
3398   %res3 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 3, i64 %mask)
3399   %ret3 = add i64 %ret2, %res3
3400   %res4 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 4, i64 %mask)
3401   %ret4 = add i64 %ret3, %res4
3402   %res5 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 5, i64 %mask)
3403   %ret5 = add i64 %ret4, %res5
3404   %res6 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 6, i64 %mask)
3405   %ret6 = add i64 %ret5, %res6
3406   %res7 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 7, i64 %mask)
3407   %ret7 = add i64 %ret6, %res7
3408   ret i64 %ret7
3411 declare i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8>, <64 x i8>, i32, i64) nounwind readnone
3413 define i32 @test_cmp_w_512(<32 x i16> %a0, <32 x i16> %a1) {
3414 ; AVX512BW-LABEL: test_cmp_w_512:
3415 ; AVX512BW:       ## BB#0:
3416 ; AVX512BW-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0
3417 ; AVX512BW-NEXT:    kmovd %k0, %eax
3418 ; AVX512BW-NEXT:    vpcmpgtw %zmm0, %zmm1, %k0
3419 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3420 ; AVX512BW-NEXT:    addl %eax, %ecx
3421 ; AVX512BW-NEXT:    vpcmplew %zmm1, %zmm0, %k0
3422 ; AVX512BW-NEXT:    kmovd %k0, %eax
3423 ; AVX512BW-NEXT:    addl %ecx, %eax
3424 ; AVX512BW-NEXT:    vpcmpneqw %zmm1, %zmm0, %k0
3425 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3426 ; AVX512BW-NEXT:    addl %eax, %ecx
3427 ; AVX512BW-NEXT:    vpcmplew %zmm0, %zmm1, %k0
3428 ; AVX512BW-NEXT:    kmovd %k0, %eax
3429 ; AVX512BW-NEXT:    addl %ecx, %eax
3430 ; AVX512BW-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0
3431 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3432 ; AVX512BW-NEXT:    addl %eax, %ecx
3433 ; AVX512BW-NEXT:    kxnord %k0, %k0, %k0
3434 ; AVX512BW-NEXT:    kmovd %k0, %eax
3435 ; AVX512BW-NEXT:    addl %ecx, %eax
3436 ; AVX512BW-NEXT:    vzeroupper
3437 ; AVX512BW-NEXT:    retq
3439 ; AVX512F-32-LABEL: test_cmp_w_512:
3440 ; AVX512F-32:       # BB#0:
3441 ; AVX512F-32-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0
3442 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3443 ; AVX512F-32-NEXT:    vpcmpgtw %zmm0, %zmm1, %k0
3444 ; AVX512F-32-NEXT:    kmovd %k0, %ecx
3445 ; AVX512F-32-NEXT:    addl %eax, %ecx
3446 ; AVX512F-32-NEXT:    vpcmplew %zmm1, %zmm0, %k0
3447 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3448 ; AVX512F-32-NEXT:    addl %ecx, %eax
3449 ; AVX512F-32-NEXT:    vpcmpneqw %zmm1, %zmm0, %k0
3450 ; AVX512F-32-NEXT:    kmovd %k0, %ecx
3451 ; AVX512F-32-NEXT:    addl %eax, %ecx
3452 ; AVX512F-32-NEXT:    vpcmplew %zmm0, %zmm1, %k0
3453 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3454 ; AVX512F-32-NEXT:    addl %ecx, %eax
3455 ; AVX512F-32-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0
3456 ; AVX512F-32-NEXT:    kmovd %k0, %ecx
3457 ; AVX512F-32-NEXT:    addl %eax, %ecx
3458 ; AVX512F-32-NEXT:    kxnord %k0, %k0, %k0
3459 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3460 ; AVX512F-32-NEXT:    addl %ecx, %eax
3461 ; AVX512F-32-NEXT:    vzeroupper
3462 ; AVX512F-32-NEXT:    retl
3463   %res0 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 0, i32 -1)
3464   %res1 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 1, i32 -1)
3465   %ret1 = add i32 %res0, %res1
3466   %res2 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 2, i32 -1)
3467   %ret2 = add i32 %ret1, %res2
3468   %res3 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 3, i32 -1)
3469   %ret3 = add i32 %ret2, %res3
3470   %res4 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 4, i32 -1)
3471   %ret4 = add i32 %ret3, %res4
3472   %res5 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 5, i32 -1)
3473   %ret5 = add i32 %ret4, %res5
3474   %res6 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 6, i32 -1)
3475   %ret6 = add i32 %ret5, %res6
3476   %res7 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 7, i32 -1)
3477   %ret7 = add i32 %ret6, %res7
3478   ret i32 %ret7
3481 define i32 @test_mask_cmp_w_512(<32 x i16> %a0, <32 x i16> %a1, i32 %mask) {
3482 ; AVX512BW-LABEL: test_mask_cmp_w_512:
3483 ; AVX512BW:       ## BB#0:
3484 ; AVX512BW-NEXT:    kmovd %edi, %k1
3485 ; AVX512BW-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0 {%k1}
3486 ; AVX512BW-NEXT:    kmovd %k0, %eax
3487 ; AVX512BW-NEXT:    vpcmpgtw %zmm0, %zmm1, %k0 {%k1}
3488 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3489 ; AVX512BW-NEXT:    addl %eax, %ecx
3490 ; AVX512BW-NEXT:    vpcmplew %zmm1, %zmm0, %k0 {%k1}
3491 ; AVX512BW-NEXT:    kmovd %k0, %eax
3492 ; AVX512BW-NEXT:    addl %ecx, %eax
3493 ; AVX512BW-NEXT:    kxord %k0, %k0, %k0
3494 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3495 ; AVX512BW-NEXT:    orl %eax, %ecx
3496 ; AVX512BW-NEXT:    vpcmpneqw %zmm1, %zmm0, %k0 {%k1}
3497 ; AVX512BW-NEXT:    kmovd %k0, %eax
3498 ; AVX512BW-NEXT:    addl %ecx, %eax
3499 ; AVX512BW-NEXT:    vpcmplew %zmm0, %zmm1, %k0 {%k1}
3500 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3501 ; AVX512BW-NEXT:    addl %eax, %ecx
3502 ; AVX512BW-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0 {%k1}
3503 ; AVX512BW-NEXT:    kmovd %k0, %eax
3504 ; AVX512BW-NEXT:    addl %ecx, %eax
3505 ; AVX512BW-NEXT:    addl %edi, %eax
3506 ; AVX512BW-NEXT:    vzeroupper
3507 ; AVX512BW-NEXT:    retq
3509 ; AVX512F-32-LABEL: test_mask_cmp_w_512:
3510 ; AVX512F-32:       # BB#0:
3511 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3512 ; AVX512F-32-NEXT:    kmovd %ecx, %k1
3513 ; AVX512F-32-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0 {%k1}
3514 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3515 ; AVX512F-32-NEXT:    vpcmpgtw %zmm0, %zmm1, %k0 {%k1}
3516 ; AVX512F-32-NEXT:    kmovd %k0, %edx
3517 ; AVX512F-32-NEXT:    addl %eax, %edx
3518 ; AVX512F-32-NEXT:    vpcmplew %zmm1, %zmm0, %k0 {%k1}
3519 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3520 ; AVX512F-32-NEXT:    addl %edx, %eax
3521 ; AVX512F-32-NEXT:    kxord %k0, %k0, %k0
3522 ; AVX512F-32-NEXT:    kmovd %k0, %edx
3523 ; AVX512F-32-NEXT:    orl %eax, %edx
3524 ; AVX512F-32-NEXT:    vpcmpneqw %zmm1, %zmm0, %k0 {%k1}
3525 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3526 ; AVX512F-32-NEXT:    addl %edx, %eax
3527 ; AVX512F-32-NEXT:    vpcmplew %zmm0, %zmm1, %k0 {%k1}
3528 ; AVX512F-32-NEXT:    kmovd %k0, %edx
3529 ; AVX512F-32-NEXT:    addl %eax, %edx
3530 ; AVX512F-32-NEXT:    vpcmpgtw %zmm1, %zmm0, %k0 {%k1}
3531 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3532 ; AVX512F-32-NEXT:    addl %edx, %eax
3533 ; AVX512F-32-NEXT:    addl %ecx, %eax
3534 ; AVX512F-32-NEXT:    vzeroupper
3535 ; AVX512F-32-NEXT:    retl
3536   %res0 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 0, i32 %mask)
3537   %res1 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 1, i32 %mask)
3538   %ret1 = add i32 %res0, %res1
3539   %res2 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 2, i32 %mask)
3540   %ret2 = add i32 %ret1, %res2
3541   %res3 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 3, i32 %mask)
3542   %ret3 = add i32 %ret2, %res3
3543   %res4 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 4, i32 %mask)
3544   %ret4 = add i32 %ret3, %res4
3545   %res5 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 5, i32 %mask)
3546   %ret5 = add i32 %ret4, %res5
3547   %res6 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 6, i32 %mask)
3548   %ret6 = add i32 %ret5, %res6
3549   %res7 = call i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 7, i32 %mask)
3550   %ret7 = add i32 %ret6, %res7
3551   ret i32 %ret7
3554 declare i32 @llvm.x86.avx512.mask.cmp.w.512(<32 x i16>, <32 x i16>, i32, i32) nounwind readnone
3556 define i32 @test_ucmp_w_512(<32 x i16> %a0, <32 x i16> %a1) {
3557 ; AVX512BW-LABEL: test_ucmp_w_512:
3558 ; AVX512BW:       ## BB#0:
3559 ; AVX512BW-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0
3560 ; AVX512BW-NEXT:    kmovd %k0, %eax
3561 ; AVX512BW-NEXT:    vpcmpltuw %zmm1, %zmm0, %k0
3562 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3563 ; AVX512BW-NEXT:    addl %eax, %ecx
3564 ; AVX512BW-NEXT:    vpcmpleuw %zmm1, %zmm0, %k0
3565 ; AVX512BW-NEXT:    kmovd %k0, %eax
3566 ; AVX512BW-NEXT:    addl %ecx, %eax
3567 ; AVX512BW-NEXT:    vpcmpneqw %zmm1, %zmm0, %k0
3568 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3569 ; AVX512BW-NEXT:    addl %eax, %ecx
3570 ; AVX512BW-NEXT:    vpcmpnltuw %zmm1, %zmm0, %k0
3571 ; AVX512BW-NEXT:    kmovd %k0, %eax
3572 ; AVX512BW-NEXT:    addl %ecx, %eax
3573 ; AVX512BW-NEXT:    vpcmpnleuw %zmm1, %zmm0, %k0
3574 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3575 ; AVX512BW-NEXT:    addl %eax, %ecx
3576 ; AVX512BW-NEXT:    kxnord %k0, %k0, %k0
3577 ; AVX512BW-NEXT:    kmovd %k0, %eax
3578 ; AVX512BW-NEXT:    addl %ecx, %eax
3579 ; AVX512BW-NEXT:    vzeroupper
3580 ; AVX512BW-NEXT:    retq
3582 ; AVX512F-32-LABEL: test_ucmp_w_512:
3583 ; AVX512F-32:       # BB#0:
3584 ; AVX512F-32-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0
3585 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3586 ; AVX512F-32-NEXT:    vpcmpltuw %zmm1, %zmm0, %k0
3587 ; AVX512F-32-NEXT:    kmovd %k0, %ecx
3588 ; AVX512F-32-NEXT:    addl %eax, %ecx
3589 ; AVX512F-32-NEXT:    vpcmpleuw %zmm1, %zmm0, %k0
3590 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3591 ; AVX512F-32-NEXT:    addl %ecx, %eax
3592 ; AVX512F-32-NEXT:    vpcmpneqw %zmm1, %zmm0, %k0
3593 ; AVX512F-32-NEXT:    kmovd %k0, %ecx
3594 ; AVX512F-32-NEXT:    addl %eax, %ecx
3595 ; AVX512F-32-NEXT:    vpcmpnltuw %zmm1, %zmm0, %k0
3596 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3597 ; AVX512F-32-NEXT:    addl %ecx, %eax
3598 ; AVX512F-32-NEXT:    vpcmpnleuw %zmm1, %zmm0, %k0
3599 ; AVX512F-32-NEXT:    kmovd %k0, %ecx
3600 ; AVX512F-32-NEXT:    addl %eax, %ecx
3601 ; AVX512F-32-NEXT:    kxnord %k0, %k0, %k0
3602 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3603 ; AVX512F-32-NEXT:    addl %ecx, %eax
3604 ; AVX512F-32-NEXT:    vzeroupper
3605 ; AVX512F-32-NEXT:    retl
3606   %res0 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 0, i32 -1)
3607   %res1 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 1, i32 -1)
3608   %ret1 = add i32 %res0, %res1
3609   %res2 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 2, i32 -1)
3610   %ret2 = add i32 %ret1, %res2
3611   %res3 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 3, i32 -1)
3612   %ret3 = add i32 %ret2, %res3
3613   %res4 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 4, i32 -1)
3614   %ret4 = add i32 %ret3, %res4
3615   %res5 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 5, i32 -1)
3616   %ret5 = add i32 %ret4, %res5
3617   %res6 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 6, i32 -1)
3618   %ret6 = add i32 %ret5, %res6
3619   %res7 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 7, i32 -1)
3620   %ret7 = add i32 %ret6, %res7
3621   ret i32 %ret7
3624 define i32 @test_mask_ucmp_w_512(<32 x i16> %a0, <32 x i16> %a1, i32 %mask) {
3625 ; AVX512BW-LABEL: test_mask_ucmp_w_512:
3626 ; AVX512BW:       ## BB#0:
3627 ; AVX512BW-NEXT:    kmovd %edi, %k1
3628 ; AVX512BW-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0 {%k1}
3629 ; AVX512BW-NEXT:    kmovd %k0, %eax
3630 ; AVX512BW-NEXT:    vpcmpltuw %zmm1, %zmm0, %k0 {%k1}
3631 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3632 ; AVX512BW-NEXT:    addl %eax, %ecx
3633 ; AVX512BW-NEXT:    vpcmpleuw %zmm1, %zmm0, %k0 {%k1}
3634 ; AVX512BW-NEXT:    kmovd %k0, %eax
3635 ; AVX512BW-NEXT:    addl %ecx, %eax
3636 ; AVX512BW-NEXT:    kxord %k0, %k0, %k0
3637 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3638 ; AVX512BW-NEXT:    orl %eax, %ecx
3639 ; AVX512BW-NEXT:    vpcmpneqw %zmm1, %zmm0, %k0 {%k1}
3640 ; AVX512BW-NEXT:    kmovd %k0, %eax
3641 ; AVX512BW-NEXT:    addl %ecx, %eax
3642 ; AVX512BW-NEXT:    vpcmpnltuw %zmm1, %zmm0, %k0 {%k1}
3643 ; AVX512BW-NEXT:    kmovd %k0, %ecx
3644 ; AVX512BW-NEXT:    addl %eax, %ecx
3645 ; AVX512BW-NEXT:    vpcmpnleuw %zmm1, %zmm0, %k0 {%k1}
3646 ; AVX512BW-NEXT:    kmovd %k0, %eax
3647 ; AVX512BW-NEXT:    addl %ecx, %eax
3648 ; AVX512BW-NEXT:    addl %edi, %eax
3649 ; AVX512BW-NEXT:    vzeroupper
3650 ; AVX512BW-NEXT:    retq
3652 ; AVX512F-32-LABEL: test_mask_ucmp_w_512:
3653 ; AVX512F-32:       # BB#0:
3654 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3655 ; AVX512F-32-NEXT:    kmovd %ecx, %k1
3656 ; AVX512F-32-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0 {%k1}
3657 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3658 ; AVX512F-32-NEXT:    vpcmpltuw %zmm1, %zmm0, %k0 {%k1}
3659 ; AVX512F-32-NEXT:    kmovd %k0, %edx
3660 ; AVX512F-32-NEXT:    addl %eax, %edx
3661 ; AVX512F-32-NEXT:    vpcmpleuw %zmm1, %zmm0, %k0 {%k1}
3662 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3663 ; AVX512F-32-NEXT:    addl %edx, %eax
3664 ; AVX512F-32-NEXT:    kxord %k0, %k0, %k0
3665 ; AVX512F-32-NEXT:    kmovd %k0, %edx
3666 ; AVX512F-32-NEXT:    orl %eax, %edx
3667 ; AVX512F-32-NEXT:    vpcmpneqw %zmm1, %zmm0, %k0 {%k1}
3668 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3669 ; AVX512F-32-NEXT:    addl %edx, %eax
3670 ; AVX512F-32-NEXT:    vpcmpnltuw %zmm1, %zmm0, %k0 {%k1}
3671 ; AVX512F-32-NEXT:    kmovd %k0, %edx
3672 ; AVX512F-32-NEXT:    addl %eax, %edx
3673 ; AVX512F-32-NEXT:    vpcmpnleuw %zmm1, %zmm0, %k0 {%k1}
3674 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3675 ; AVX512F-32-NEXT:    addl %edx, %eax
3676 ; AVX512F-32-NEXT:    addl %ecx, %eax
3677 ; AVX512F-32-NEXT:    vzeroupper
3678 ; AVX512F-32-NEXT:    retl
3679   %res0 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 0, i32 %mask)
3680   %res1 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 1, i32 %mask)
3681   %ret1 = add i32 %res0, %res1
3682   %res2 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 2, i32 %mask)
3683   %ret2 = add i32 %ret1, %res2
3684   %res3 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 3, i32 %mask)
3685   %ret3 = add i32 %ret2, %res3
3686   %res4 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 4, i32 %mask)
3687   %ret4 = add i32 %ret3, %res4
3688   %res5 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 5, i32 %mask)
3689   %ret5 = add i32 %ret4, %res5
3690   %res6 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 6, i32 %mask)
3691   %ret6 = add i32 %ret5, %res6
3692   %res7 = call i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16> %a0, <32 x i16> %a1, i32 7, i32 %mask)
3693   %ret7 = add i32 %ret6, %res7
3694   ret i32 %ret7
3697 declare i32 @llvm.x86.avx512.mask.ucmp.w.512(<32 x i16>, <32 x i16>, i32, i32) nounwind readnone
3700 declare <64 x i8> @llvm.x86.avx512.mask.pavg.b.512(<64 x i8>, <64 x i8>, <64 x i8>, i64)
3702 define <64 x i8>@mm512_avg_epu8(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) {
3703 ; AVX512BW-LABEL: mm512_avg_epu8:
3704 ; AVX512BW:       ## BB#0:
3705 ; AVX512BW-NEXT:    vpavgb %zmm1, %zmm0, %zmm3
3706 ; AVX512BW-NEXT:    kmovq %rdi, %k1
3707 ; AVX512BW-NEXT:    vpavgb %zmm1, %zmm0, %zmm2 {%k1}
3708 ; AVX512BW-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
3709 ; AVX512BW-NEXT:    retq
3711 ; AVX512F-32-LABEL: mm512_avg_epu8:
3712 ; AVX512F-32:       # BB#0:
3713 ; AVX512F-32-NEXT:    vpavgb %zmm1, %zmm0, %zmm3
3714 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
3715 ; AVX512F-32-NEXT:    vpavgb %zmm1, %zmm0, %zmm2 {%k1}
3716 ; AVX512F-32-NEXT:    vpaddb %zmm3, %zmm2, %zmm0
3717 ; AVX512F-32-NEXT:    retl
3718   %res = call <64 x i8> @llvm.x86.avx512.mask.pavg.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3)
3719   %res1 = call <64 x i8> @llvm.x86.avx512.mask.pavg.b.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1)
3720   %res2 = add <64 x i8> %res, %res1
3721   ret <64 x i8> %res2
3725 declare <32 x i16> @llvm.x86.avx512.mask.pavg.w.512(<32 x i16>, <32 x i16>, <32 x i16>, i32)
3727 define <32 x i16>@mm512_avg_epu16(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {
3728 ; AVX512BW-LABEL: mm512_avg_epu16:
3729 ; AVX512BW:       ## BB#0:
3730 ; AVX512BW-NEXT:    vpavgw %zmm1, %zmm0, %zmm3
3731 ; AVX512BW-NEXT:    kmovd %edi, %k1
3732 ; AVX512BW-NEXT:    vpavgw %zmm1, %zmm0, %zmm2 {%k1}
3733 ; AVX512BW-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
3734 ; AVX512BW-NEXT:    retq
3736 ; AVX512F-32-LABEL: mm512_avg_epu16:
3737 ; AVX512F-32:       # BB#0:
3738 ; AVX512F-32-NEXT:    vpavgw %zmm1, %zmm0, %zmm3
3739 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
3740 ; AVX512F-32-NEXT:    vpavgw %zmm1, %zmm0, %zmm2 {%k1}
3741 ; AVX512F-32-NEXT:    vpaddw %zmm3, %zmm2, %zmm0
3742 ; AVX512F-32-NEXT:    retl
3743   %res = call <32 x i16> @llvm.x86.avx512.mask.pavg.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)
3744   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pavg.w.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)
3745   %res2 = add <32 x i16> %res, %res1
3746   ret <32 x i16> %res2
3749 declare <32 x i16> @llvm.x86.avx512.mask.pabs.w.512(<32 x i16>, <32 x i16>, i32)
3751 define <32 x i16>@test_int_x86_avx512_mask_pabs_w_512(<32 x i16> %x0, <32 x i16> %x1, i32 %x2) {
3752 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pabs_w_512:
3753 ; AVX512BW:       ## BB#0:
3754 ; AVX512BW-NEXT:    vpabsw %zmm0, %zmm2
3755 ; AVX512BW-NEXT:    kmovd %edi, %k1
3756 ; AVX512BW-NEXT:    vpabsw %zmm0, %zmm1 {%k1}
3757 ; AVX512BW-NEXT:    vpaddw %zmm2, %zmm1, %zmm0
3758 ; AVX512BW-NEXT:    retq
3760 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pabs_w_512:
3761 ; AVX512F-32:       # BB#0:
3762 ; AVX512F-32-NEXT:    vpabsw %zmm0, %zmm2
3763 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
3764 ; AVX512F-32-NEXT:    vpabsw %zmm0, %zmm1 {%k1}
3765 ; AVX512F-32-NEXT:    vpaddw %zmm2, %zmm1, %zmm0
3766 ; AVX512F-32-NEXT:    retl
3767   %res = call <32 x i16> @llvm.x86.avx512.mask.pabs.w.512(<32 x i16> %x0, <32 x i16> %x1, i32 %x2)
3768   %res1 = call <32 x i16> @llvm.x86.avx512.mask.pabs.w.512(<32 x i16> %x0, <32 x i16> %x1, i32 -1)
3769   %res2 = add <32 x i16> %res, %res1
3770   ret <32 x i16> %res2
3773 declare <64 x i8> @llvm.x86.avx512.mask.pabs.b.512(<64 x i8>, <64 x i8>, i64)
3775 define <64 x i8>@test_int_x86_avx512_mask_pabs_b_512(<64 x i8> %x0, <64 x i8> %x1, i64 %x2) {
3776 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pabs_b_512:
3777 ; AVX512BW:       ## BB#0:
3778 ; AVX512BW-NEXT:    vpabsb %zmm0, %zmm2
3779 ; AVX512BW-NEXT:    kmovq %rdi, %k1
3780 ; AVX512BW-NEXT:    vpabsb %zmm0, %zmm1 {%k1}
3781 ; AVX512BW-NEXT:    vpaddb %zmm2, %zmm1, %zmm0
3782 ; AVX512BW-NEXT:    retq
3784 ; AVX512F-32-LABEL: test_int_x86_avx512_mask_pabs_b_512:
3785 ; AVX512F-32:       # BB#0:
3786 ; AVX512F-32-NEXT:    vpabsb %zmm0, %zmm2
3787 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
3788 ; AVX512F-32-NEXT:    vpabsb %zmm0, %zmm1 {%k1}
3789 ; AVX512F-32-NEXT:    vpaddb %zmm2, %zmm1, %zmm0
3790 ; AVX512F-32-NEXT:    retl
3791   %res = call <64 x i8> @llvm.x86.avx512.mask.pabs.b.512(<64 x i8> %x0, <64 x i8> %x1, i64 %x2)
3792   %res1 = call <64 x i8> @llvm.x86.avx512.mask.pabs.b.512(<64 x i8> %x0, <64 x i8> %x1, i64 -1)
3793   %res2 = add <64 x i8> %res, %res1
3794   ret <64 x i8> %res2
3797 declare i64 @llvm.x86.avx512.ptestm.b.512(<64 x i8>, <64 x i8>, i64)
3799 define i64@test_int_x86_avx512_ptestm_b_512(<64 x i8> %x0, <64 x i8> %x1, i64 %x2) {
3800 ; AVX512BW-LABEL: test_int_x86_avx512_ptestm_b_512:
3801 ; AVX512BW:       ## BB#0:
3802 ; AVX512BW-NEXT:    vptestmb %zmm1, %zmm0, %k0
3803 ; AVX512BW-NEXT:    kmovq %rdi, %k1
3804 ; AVX512BW-NEXT:    vptestmb %zmm1, %zmm0, %k1 {%k1}
3805 ; AVX512BW-NEXT:    kmovq %k1, %rcx
3806 ; AVX512BW-NEXT:    kmovq %k0, %rax
3807 ; AVX512BW-NEXT:    addq %rcx, %rax
3808 ; AVX512BW-NEXT:    vzeroupper
3809 ; AVX512BW-NEXT:    retq
3811 ; AVX512F-32-LABEL: test_int_x86_avx512_ptestm_b_512:
3812 ; AVX512F-32:       # BB#0:
3813 ; AVX512F-32-NEXT:    subl $20, %esp
3814 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 24
3815 ; AVX512F-32-NEXT:    vptestmb %zmm1, %zmm0, %k0
3816 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
3817 ; AVX512F-32-NEXT:    vptestmb %zmm1, %zmm0, %k1 {%k1}
3818 ; AVX512F-32-NEXT:    kmovq %k1, (%esp)
3819 ; AVX512F-32-NEXT:    movl (%esp), %eax
3820 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
3821 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
3822 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
3823 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
3824 ; AVX512F-32-NEXT:    addl $20, %esp
3825 ; AVX512F-32-NEXT:    vzeroupper
3826 ; AVX512F-32-NEXT:    retl
3827   %res = call i64 @llvm.x86.avx512.ptestm.b.512(<64 x i8> %x0, <64 x i8> %x1, i64 %x2)
3828   %res1 = call i64 @llvm.x86.avx512.ptestm.b.512(<64 x i8> %x0, <64 x i8> %x1, i64-1)
3829   %res2 = add i64 %res, %res1
3830   ret i64 %res2
3833 declare i32 @llvm.x86.avx512.ptestm.w.512(<32 x i16>, <32 x i16>, i32)
3835 define i32@test_int_x86_avx512_ptestm_w_512(<32 x i16> %x0, <32 x i16> %x1, i32 %x2) {
3836 ; AVX512BW-LABEL: test_int_x86_avx512_ptestm_w_512:
3837 ; AVX512BW:       ## BB#0:
3838 ; AVX512BW-NEXT:    vptestmw %zmm1, %zmm0, %k0
3839 ; AVX512BW-NEXT:    kmovd %edi, %k1
3840 ; AVX512BW-NEXT:    vptestmw %zmm1, %zmm0, %k1 {%k1}
3841 ; AVX512BW-NEXT:    kmovd %k1, %ecx
3842 ; AVX512BW-NEXT:    kmovd %k0, %eax
3843 ; AVX512BW-NEXT:    addl %ecx, %eax
3844 ; AVX512BW-NEXT:    vzeroupper
3845 ; AVX512BW-NEXT:    retq
3847 ; AVX512F-32-LABEL: test_int_x86_avx512_ptestm_w_512:
3848 ; AVX512F-32:       # BB#0:
3849 ; AVX512F-32-NEXT:    vptestmw %zmm1, %zmm0, %k0
3850 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
3851 ; AVX512F-32-NEXT:    vptestmw %zmm1, %zmm0, %k1 {%k1}
3852 ; AVX512F-32-NEXT:    kmovd %k1, %ecx
3853 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3854 ; AVX512F-32-NEXT:    addl %ecx, %eax
3855 ; AVX512F-32-NEXT:    vzeroupper
3856 ; AVX512F-32-NEXT:    retl
3857   %res = call i32 @llvm.x86.avx512.ptestm.w.512(<32 x i16> %x0, <32 x i16> %x1, i32 %x2)
3858   %res1 = call i32 @llvm.x86.avx512.ptestm.w.512(<32 x i16> %x0, <32 x i16> %x1, i32-1)
3859   %res2 = add i32 %res, %res1
3860   ret i32 %res2
3863 declare i64 @llvm.x86.avx512.ptestnm.b.512(<64 x i8>, <64 x i8>, i64 %x2)
3865 define i64@test_int_x86_avx512_ptestnm_b_512(<64 x i8> %x0, <64 x i8> %x1, i64 %x2) {
3866 ; AVX512BW-LABEL: test_int_x86_avx512_ptestnm_b_512:
3867 ; AVX512BW:       ## BB#0:
3868 ; AVX512BW-NEXT:    vptestnmb %zmm1, %zmm0, %k0
3869 ; AVX512BW-NEXT:    kmovq %rdi, %k1
3870 ; AVX512BW-NEXT:    vptestnmb %zmm1, %zmm0, %k1 {%k1}
3871 ; AVX512BW-NEXT:    kmovq %k1, %rcx
3872 ; AVX512BW-NEXT:    kmovq %k0, %rax
3873 ; AVX512BW-NEXT:    addq %rcx, %rax
3874 ; AVX512BW-NEXT:    vzeroupper
3875 ; AVX512BW-NEXT:    retq
3877 ; AVX512F-32-LABEL: test_int_x86_avx512_ptestnm_b_512:
3878 ; AVX512F-32:       # BB#0:
3879 ; AVX512F-32-NEXT:    subl $20, %esp
3880 ; AVX512F-32-NEXT:    .cfi_def_cfa_offset 24
3881 ; AVX512F-32-NEXT:    vptestnmb %zmm1, %zmm0, %k0
3882 ; AVX512F-32-NEXT:    kmovq {{[0-9]+}}(%esp), %k1
3883 ; AVX512F-32-NEXT:    vptestnmb %zmm1, %zmm0, %k1 {%k1}
3884 ; AVX512F-32-NEXT:    kmovq %k1, (%esp)
3885 ; AVX512F-32-NEXT:    movl (%esp), %eax
3886 ; AVX512F-32-NEXT:    movl {{[0-9]+}}(%esp), %edx
3887 ; AVX512F-32-NEXT:    kmovq %k0, {{[0-9]+}}(%esp)
3888 ; AVX512F-32-NEXT:    addl {{[0-9]+}}(%esp), %eax
3889 ; AVX512F-32-NEXT:    adcl {{[0-9]+}}(%esp), %edx
3890 ; AVX512F-32-NEXT:    addl $20, %esp
3891 ; AVX512F-32-NEXT:    vzeroupper
3892 ; AVX512F-32-NEXT:    retl
3893   %res = call i64 @llvm.x86.avx512.ptestnm.b.512(<64 x i8> %x0, <64 x i8> %x1, i64 %x2)
3894   %res1 = call i64 @llvm.x86.avx512.ptestnm.b.512(<64 x i8> %x0, <64 x i8> %x1, i64-1)
3895   %res2 = add i64 %res, %res1
3896   ret i64 %res2
3899 declare i32 @llvm.x86.avx512.ptestnm.w.512(<32 x i16>, <32 x i16>, i32 %x2)
3901 define i32@test_int_x86_avx512_ptestnm_w_512(<32 x i16> %x0, <32 x i16> %x1, i32 %x2) {
3902 ; AVX512BW-LABEL: test_int_x86_avx512_ptestnm_w_512:
3903 ; AVX512BW:       ## BB#0:
3904 ; AVX512BW-NEXT:    vptestnmw %zmm1, %zmm0, %k0
3905 ; AVX512BW-NEXT:    kmovd %edi, %k1
3906 ; AVX512BW-NEXT:    vptestnmw %zmm1, %zmm0, %k1 {%k1}
3907 ; AVX512BW-NEXT:    kmovd %k1, %ecx
3908 ; AVX512BW-NEXT:    kmovd %k0, %eax
3909 ; AVX512BW-NEXT:    addl %ecx, %eax
3910 ; AVX512BW-NEXT:    vzeroupper
3911 ; AVX512BW-NEXT:    retq
3913 ; AVX512F-32-LABEL: test_int_x86_avx512_ptestnm_w_512:
3914 ; AVX512F-32:       # BB#0:
3915 ; AVX512F-32-NEXT:    vptestnmw %zmm1, %zmm0, %k0
3916 ; AVX512F-32-NEXT:    kmovd {{[0-9]+}}(%esp), %k1
3917 ; AVX512F-32-NEXT:    vptestnmw %zmm1, %zmm0, %k1 {%k1}
3918 ; AVX512F-32-NEXT:    kmovd %k1, %ecx
3919 ; AVX512F-32-NEXT:    kmovd %k0, %eax
3920 ; AVX512F-32-NEXT:    addl %ecx, %eax
3921 ; AVX512F-32-NEXT:    vzeroupper
3922 ; AVX512F-32-NEXT:    retl
3923   %res = call i32 @llvm.x86.avx512.ptestnm.w.512(<32 x i16> %x0, <32 x i16> %x1, i32 %x2)
3924   %res1 = call i32 @llvm.x86.avx512.ptestnm.w.512(<32 x i16> %x0, <32 x i16> %x1, i32-1)
3925   %res2 = add i32 %res, %res1
3926   ret i32 %res2