[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / avx512-logic.ll
blob65d9d67b2caa166461d93f1e71cde0a6e027f1c6
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=ALL --check-prefix=KNL
3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=ALL --check-prefix=SKX
6 define <16 x i32> @vpandd(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {
7 ; ALL-LABEL: vpandd:
8 ; ALL:       ## %bb.0: ## %entry
9 ; ALL-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0
10 ; ALL-NEXT:    vpandd %zmm1, %zmm0, %zmm0
11 ; ALL-NEXT:    retq
12 entry:
13   ; Force the execution domain with an add.
14   %a2 = add <16 x i32> %a, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2,
15                             i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
16   %x = and <16 x i32> %a2, %b
17   ret <16 x i32> %x
20 define <16 x i32> @vpandnd(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {
21 ; ALL-LABEL: vpandnd:
22 ; ALL:       ## %bb.0: ## %entry
23 ; ALL-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0
24 ; ALL-NEXT:    vpandnd %zmm0, %zmm1, %zmm0
25 ; ALL-NEXT:    retq
26 entry:
27   ; Force the execution domain with an add.
28   %a2 = add <16 x i32> %a, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3,
29                             i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
30   %b2 = xor <16 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1,
31                             i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
32   %x = and <16 x i32> %a2, %b2
33   ret <16 x i32> %x
36 define <16 x i32> @vpord(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {
37 ; ALL-LABEL: vpord:
38 ; ALL:       ## %bb.0: ## %entry
39 ; ALL-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0
40 ; ALL-NEXT:    vpord %zmm1, %zmm0, %zmm0
41 ; ALL-NEXT:    retq
42 entry:
43   ; Force the execution domain with an add.
44   %a2 = add <16 x i32> %a, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4,
45                             i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
46   %x = or <16 x i32> %a2, %b
47   ret <16 x i32> %x
50 define <16 x i32> @vpxord(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {
51 ; ALL-LABEL: vpxord:
52 ; ALL:       ## %bb.0: ## %entry
53 ; ALL-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0
54 ; ALL-NEXT:    vpxord %zmm1, %zmm0, %zmm0
55 ; ALL-NEXT:    retq
56 entry:
57   ; Force the execution domain with an add.
58   %a2 = add <16 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5,
59                             i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
60   %x = xor <16 x i32> %a2, %b
61   ret <16 x i32> %x
64 define <8 x i64> @vpandq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {
65 ; ALL-LABEL: vpandq:
66 ; ALL:       ## %bb.0: ## %entry
67 ; ALL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
68 ; ALL-NEXT:    vpandq %zmm1, %zmm0, %zmm0
69 ; ALL-NEXT:    retq
70 entry:
71   ; Force the execution domain with an add.
72   %a2 = add <8 x i64> %a, <i64 6, i64 6, i64 6, i64 6, i64 6, i64 6, i64 6, i64 6>
73   %x = and <8 x i64> %a2, %b
74   ret <8 x i64> %x
77 define <8 x i64> @vpandnq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {
78 ; ALL-LABEL: vpandnq:
79 ; ALL:       ## %bb.0: ## %entry
80 ; ALL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
81 ; ALL-NEXT:    vpandnq %zmm0, %zmm1, %zmm0
82 ; ALL-NEXT:    retq
83 entry:
84   ; Force the execution domain with an add.
85   %a2 = add <8 x i64> %a, <i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7>
86   %b2 = xor <8 x i64> %b, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
87   %x = and <8 x i64> %a2, %b2
88   ret <8 x i64> %x
91 define <8 x i64> @vporq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {
92 ; ALL-LABEL: vporq:
93 ; ALL:       ## %bb.0: ## %entry
94 ; ALL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
95 ; ALL-NEXT:    vporq %zmm1, %zmm0, %zmm0
96 ; ALL-NEXT:    retq
97 entry:
98   ; Force the execution domain with an add.
99   %a2 = add <8 x i64> %a, <i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8>
100   %x = or <8 x i64> %a2, %b
101   ret <8 x i64> %x
104 define <8 x i64> @vpxorq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {
105 ; ALL-LABEL: vpxorq:
106 ; ALL:       ## %bb.0: ## %entry
107 ; ALL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
108 ; ALL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0
109 ; ALL-NEXT:    retq
110 entry:
111   ; Force the execution domain with an add.
112   %a2 = add <8 x i64> %a, <i64 9, i64 9, i64 9, i64 9, i64 9, i64 9, i64 9, i64 9>
113   %x = xor <8 x i64> %a2, %b
114   ret <8 x i64> %x
118 define <8 x i64> @orq_broadcast(<8 x i64> %a) nounwind {
119 ; KNL-LABEL: orq_broadcast:
120 ; KNL:       ## %bb.0:
121 ; KNL-NEXT:    vporq {{.*}}(%rip){1to8}, %zmm0, %zmm0
122 ; KNL-NEXT:    retq
124 ; SKX-LABEL: orq_broadcast:
125 ; SKX:       ## %bb.0:
126 ; SKX-NEXT:    vorpd {{.*}}(%rip){1to8}, %zmm0, %zmm0
127 ; SKX-NEXT:    retq
128   %b = or <8 x i64> %a, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
129   ret <8 x i64> %b
132 define <16 x i32> @andd512fold(<16 x i32> %y, <16 x i32>* %x) {
133 ; KNL-LABEL: andd512fold:
134 ; KNL:       ## %bb.0: ## %entry
135 ; KNL-NEXT:    vpandd (%rdi), %zmm0, %zmm0
136 ; KNL-NEXT:    retq
138 ; SKX-LABEL: andd512fold:
139 ; SKX:       ## %bb.0: ## %entry
140 ; SKX-NEXT:    vandps (%rdi), %zmm0, %zmm0
141 ; SKX-NEXT:    retq
142 entry:
143   %a = load <16 x i32>, <16 x i32>* %x, align 4
144   %b = and <16 x i32> %y, %a
145   ret <16 x i32> %b
148 define <8 x i64> @andqbrst(<8 x i64> %p1, i64* %ap) {
149 ; KNL-LABEL: andqbrst:
150 ; KNL:       ## %bb.0: ## %entry
151 ; KNL-NEXT:    vpandq (%rdi){1to8}, %zmm0, %zmm0
152 ; KNL-NEXT:    retq
154 ; SKX-LABEL: andqbrst:
155 ; SKX:       ## %bb.0: ## %entry
156 ; SKX-NEXT:    vandpd (%rdi){1to8}, %zmm0, %zmm0
157 ; SKX-NEXT:    retq
158 entry:
159   %a = load i64, i64* %ap, align 8
160   %b = insertelement <8 x i64> undef, i64 %a, i32 0
161   %c = shufflevector <8 x i64> %b, <8 x i64> undef, <8 x i32> zeroinitializer
162   %d = and <8 x i64> %p1, %c
163   ret <8 x i64>%d
166 define <64 x i8> @and_v64i8(<64 x i8> %a, <64 x i8> %b) {
167 ; KNL-LABEL: and_v64i8:
168 ; KNL:       ## %bb.0:
169 ; KNL-NEXT:    vandps %ymm2, %ymm0, %ymm0
170 ; KNL-NEXT:    vandps %ymm3, %ymm1, %ymm1
171 ; KNL-NEXT:    retq
173 ; SKX-LABEL: and_v64i8:
174 ; SKX:       ## %bb.0:
175 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm0
176 ; SKX-NEXT:    retq
177   %res = and <64 x i8> %a, %b
178   ret <64 x i8> %res
181 define <64 x i8> @andn_v64i8(<64 x i8> %a, <64 x i8> %b) {
182 ; KNL-LABEL: andn_v64i8:
183 ; KNL:       ## %bb.0:
184 ; KNL-NEXT:    vandnps %ymm0, %ymm2, %ymm0
185 ; KNL-NEXT:    vandnps %ymm1, %ymm3, %ymm1
186 ; KNL-NEXT:    retq
188 ; SKX-LABEL: andn_v64i8:
189 ; SKX:       ## %bb.0:
190 ; SKX-NEXT:    vandnps %zmm0, %zmm1, %zmm0
191 ; SKX-NEXT:    retq
192   %b2 = xor <64 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
193                            i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
194                            i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
195                            i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
196   %res = and <64 x i8> %a, %b2
197   ret <64 x i8> %res
200 define <64 x i8> @or_v64i8(<64 x i8> %a, <64 x i8> %b) {
201 ; KNL-LABEL: or_v64i8:
202 ; KNL:       ## %bb.0:
203 ; KNL-NEXT:    vorps %ymm2, %ymm0, %ymm0
204 ; KNL-NEXT:    vorps %ymm3, %ymm1, %ymm1
205 ; KNL-NEXT:    retq
207 ; SKX-LABEL: or_v64i8:
208 ; SKX:       ## %bb.0:
209 ; SKX-NEXT:    vorps %zmm1, %zmm0, %zmm0
210 ; SKX-NEXT:    retq
211   %res = or <64 x i8> %a, %b
212   ret <64 x i8> %res
215 define <64 x i8> @xor_v64i8(<64 x i8> %a, <64 x i8> %b) {
216 ; KNL-LABEL: xor_v64i8:
217 ; KNL:       ## %bb.0:
218 ; KNL-NEXT:    vxorps %ymm2, %ymm0, %ymm0
219 ; KNL-NEXT:    vxorps %ymm3, %ymm1, %ymm1
220 ; KNL-NEXT:    retq
222 ; SKX-LABEL: xor_v64i8:
223 ; SKX:       ## %bb.0:
224 ; SKX-NEXT:    vxorps %zmm1, %zmm0, %zmm0
225 ; SKX-NEXT:    retq
226   %res = xor <64 x i8> %a, %b
227   ret <64 x i8> %res
230 define <32 x i16> @and_v32i16(<32 x i16> %a, <32 x i16> %b) {
231 ; KNL-LABEL: and_v32i16:
232 ; KNL:       ## %bb.0:
233 ; KNL-NEXT:    vandps %ymm2, %ymm0, %ymm0
234 ; KNL-NEXT:    vandps %ymm3, %ymm1, %ymm1
235 ; KNL-NEXT:    retq
237 ; SKX-LABEL: and_v32i16:
238 ; SKX:       ## %bb.0:
239 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm0
240 ; SKX-NEXT:    retq
241   %res = and <32 x i16> %a, %b
242   ret <32 x i16> %res
245 define <32 x i16> @andn_v32i16(<32 x i16> %a, <32 x i16> %b) {
246 ; KNL-LABEL: andn_v32i16:
247 ; KNL:       ## %bb.0:
248 ; KNL-NEXT:    vandnps %ymm0, %ymm2, %ymm0
249 ; KNL-NEXT:    vandnps %ymm1, %ymm3, %ymm1
250 ; KNL-NEXT:    retq
252 ; SKX-LABEL: andn_v32i16:
253 ; SKX:       ## %bb.0:
254 ; SKX-NEXT:    vandnps %zmm0, %zmm1, %zmm0
255 ; SKX-NEXT:    retq
256   %b2 = xor <32 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1,
257                             i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
258   %res = and <32 x i16> %a, %b2
259   ret <32 x i16> %res
262 define <32 x i16> @or_v32i16(<32 x i16> %a, <32 x i16> %b) {
263 ; KNL-LABEL: or_v32i16:
264 ; KNL:       ## %bb.0:
265 ; KNL-NEXT:    vorps %ymm2, %ymm0, %ymm0
266 ; KNL-NEXT:    vorps %ymm3, %ymm1, %ymm1
267 ; KNL-NEXT:    retq
269 ; SKX-LABEL: or_v32i16:
270 ; SKX:       ## %bb.0:
271 ; SKX-NEXT:    vorps %zmm1, %zmm0, %zmm0
272 ; SKX-NEXT:    retq
273   %res = or <32 x i16> %a, %b
274   ret <32 x i16> %res
277 define <32 x i16> @xor_v32i16(<32 x i16> %a, <32 x i16> %b) {
278 ; KNL-LABEL: xor_v32i16:
279 ; KNL:       ## %bb.0:
280 ; KNL-NEXT:    vxorps %ymm2, %ymm0, %ymm0
281 ; KNL-NEXT:    vxorps %ymm3, %ymm1, %ymm1
282 ; KNL-NEXT:    retq
284 ; SKX-LABEL: xor_v32i16:
285 ; SKX:       ## %bb.0:
286 ; SKX-NEXT:    vxorps %zmm1, %zmm0, %zmm0
287 ; SKX-NEXT:    retq
288   %res = xor <32 x i16> %a, %b
289   ret <32 x i16> %res
292 define <16 x float> @masked_and_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %passThru, i16 %mask, <16 x float> %c) {
293 ; KNL-LABEL: masked_and_v16f32:
294 ; KNL:       ## %bb.0:
295 ; KNL-NEXT:    kmovw %edi, %k1
296 ; KNL-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}
297 ; KNL-NEXT:    vaddps %zmm2, %zmm3, %zmm0
298 ; KNL-NEXT:    retq
300 ; SKX-LABEL: masked_and_v16f32:
301 ; SKX:       ## %bb.0:
302 ; SKX-NEXT:    kmovd %edi, %k1
303 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm2 {%k1}
304 ; SKX-NEXT:    vaddps %zmm2, %zmm3, %zmm0
305 ; SKX-NEXT:    retq
306   %a1 = bitcast <16 x float> %a to <16 x i32>
307   %b1 = bitcast <16 x float> %b to <16 x i32>
308   %passThru1 = bitcast <16 x float> %passThru to <16 x i32>
309   %mask1 = bitcast i16 %mask to <16 x i1>
310   %op = and <16 x i32> %a1, %b1
311   %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1
312   %cast = bitcast <16 x i32> %select to <16 x float>
313   %add = fadd <16 x float> %c, %cast
314   ret <16 x float> %add
317 define <16 x float> @masked_or_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %passThru, i16 %mask, <16 x float> %c) {
318 ; KNL-LABEL: masked_or_v16f32:
319 ; KNL:       ## %bb.0:
320 ; KNL-NEXT:    kmovw %edi, %k1
321 ; KNL-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}
322 ; KNL-NEXT:    vaddps %zmm2, %zmm3, %zmm0
323 ; KNL-NEXT:    retq
325 ; SKX-LABEL: masked_or_v16f32:
326 ; SKX:       ## %bb.0:
327 ; SKX-NEXT:    kmovd %edi, %k1
328 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm2 {%k1}
329 ; SKX-NEXT:    vaddps %zmm2, %zmm3, %zmm0
330 ; SKX-NEXT:    retq
331   %a1 = bitcast <16 x float> %a to <16 x i32>
332   %b1 = bitcast <16 x float> %b to <16 x i32>
333   %passThru1 = bitcast <16 x float> %passThru to <16 x i32>
334   %mask1 = bitcast i16 %mask to <16 x i1>
335   %op = and <16 x i32> %a1, %b1
336   %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1
337   %cast = bitcast <16 x i32> %select to <16 x float>
338   %add = fadd <16 x float> %c, %cast
339   ret <16 x float> %add
342 define <16 x float> @masked_xor_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %passThru, i16 %mask, <16 x float> %c) {
343 ; KNL-LABEL: masked_xor_v16f32:
344 ; KNL:       ## %bb.0:
345 ; KNL-NEXT:    kmovw %edi, %k1
346 ; KNL-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}
347 ; KNL-NEXT:    vaddps %zmm2, %zmm3, %zmm0
348 ; KNL-NEXT:    retq
350 ; SKX-LABEL: masked_xor_v16f32:
351 ; SKX:       ## %bb.0:
352 ; SKX-NEXT:    kmovd %edi, %k1
353 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm2 {%k1}
354 ; SKX-NEXT:    vaddps %zmm2, %zmm3, %zmm0
355 ; SKX-NEXT:    retq
356   %a1 = bitcast <16 x float> %a to <16 x i32>
357   %b1 = bitcast <16 x float> %b to <16 x i32>
358   %passThru1 = bitcast <16 x float> %passThru to <16 x i32>
359   %mask1 = bitcast i16 %mask to <16 x i1>
360   %op = and <16 x i32> %a1, %b1
361   %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1
362   %cast = bitcast <16 x i32> %select to <16 x float>
363   %add = fadd <16 x float> %c, %cast
364   ret <16 x float> %add
367 define <8 x double> @masked_and_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %passThru, i8 %mask, <8 x double> %c) {
368 ; KNL-LABEL: masked_and_v8f64:
369 ; KNL:       ## %bb.0:
370 ; KNL-NEXT:    kmovw %edi, %k1
371 ; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}
372 ; KNL-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
373 ; KNL-NEXT:    retq
375 ; SKX-LABEL: masked_and_v8f64:
376 ; SKX:       ## %bb.0:
377 ; SKX-NEXT:    kmovd %edi, %k1
378 ; SKX-NEXT:    vandpd %zmm1, %zmm0, %zmm2 {%k1}
379 ; SKX-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
380 ; SKX-NEXT:    retq
381   %a1 = bitcast <8 x double> %a to <8 x i64>
382   %b1 = bitcast <8 x double> %b to <8 x i64>
383   %passThru1 = bitcast <8 x double> %passThru to <8 x i64>
384   %mask1 = bitcast i8 %mask to <8 x i1>
385   %op = and <8 x i64> %a1, %b1
386   %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1
387   %cast = bitcast <8 x i64> %select to <8 x double>
388   %add = fadd <8 x double> %c, %cast
389   ret <8 x double> %add
392 define <8 x double> @masked_or_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %passThru, i8 %mask, <8 x double> %c) {
393 ; KNL-LABEL: masked_or_v8f64:
394 ; KNL:       ## %bb.0:
395 ; KNL-NEXT:    kmovw %edi, %k1
396 ; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}
397 ; KNL-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
398 ; KNL-NEXT:    retq
400 ; SKX-LABEL: masked_or_v8f64:
401 ; SKX:       ## %bb.0:
402 ; SKX-NEXT:    kmovd %edi, %k1
403 ; SKX-NEXT:    vandpd %zmm1, %zmm0, %zmm2 {%k1}
404 ; SKX-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
405 ; SKX-NEXT:    retq
406   %a1 = bitcast <8 x double> %a to <8 x i64>
407   %b1 = bitcast <8 x double> %b to <8 x i64>
408   %passThru1 = bitcast <8 x double> %passThru to <8 x i64>
409   %mask1 = bitcast i8 %mask to <8 x i1>
410   %op = and <8 x i64> %a1, %b1
411   %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1
412   %cast = bitcast <8 x i64> %select to <8 x double>
413   %add = fadd <8 x double> %c, %cast
414   ret <8 x double> %add
417 define <8 x double> @masked_xor_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %passThru, i8 %mask, <8 x double> %c) {
418 ; KNL-LABEL: masked_xor_v8f64:
419 ; KNL:       ## %bb.0:
420 ; KNL-NEXT:    kmovw %edi, %k1
421 ; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}
422 ; KNL-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
423 ; KNL-NEXT:    retq
425 ; SKX-LABEL: masked_xor_v8f64:
426 ; SKX:       ## %bb.0:
427 ; SKX-NEXT:    kmovd %edi, %k1
428 ; SKX-NEXT:    vandpd %zmm1, %zmm0, %zmm2 {%k1}
429 ; SKX-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
430 ; SKX-NEXT:    retq
431   %a1 = bitcast <8 x double> %a to <8 x i64>
432   %b1 = bitcast <8 x double> %b to <8 x i64>
433   %passThru1 = bitcast <8 x double> %passThru to <8 x i64>
434   %mask1 = bitcast i8 %mask to <8 x i1>
435   %op = and <8 x i64> %a1, %b1
436   %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1
437   %cast = bitcast <8 x i64> %select to <8 x double>
438   %add = fadd <8 x double> %c, %cast
439   ret <8 x double> %add
442 define <8 x i64> @test_mm512_mask_and_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) {
443 ; KNL-LABEL: test_mm512_mask_and_epi32:
444 ; KNL:       ## %bb.0: ## %entry
445 ; KNL-NEXT:    kmovw %edi, %k1
446 ; KNL-NEXT:    vpandd %zmm2, %zmm1, %zmm0 {%k1}
447 ; KNL-NEXT:    retq
449 ; SKX-LABEL: test_mm512_mask_and_epi32:
450 ; SKX:       ## %bb.0: ## %entry
451 ; SKX-NEXT:    kmovd %edi, %k1
452 ; SKX-NEXT:    vandps %zmm2, %zmm1, %zmm0 {%k1}
453 ; SKX-NEXT:    retq
454 entry:
455   %and1.i.i = and <8 x i64> %__a, %__b
456   %0 = bitcast <8 x i64> %and1.i.i to <16 x i32>
457   %1 = bitcast <8 x i64> %__src to <16 x i32>
458   %2 = bitcast i16 %__k to <16 x i1>
459   %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1
460   %4 = bitcast <16 x i32> %3 to <8 x i64>
461   ret <8 x i64> %4
464 define <8 x i64> @test_mm512_mask_or_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) {
465 ; KNL-LABEL: test_mm512_mask_or_epi32:
466 ; KNL:       ## %bb.0: ## %entry
467 ; KNL-NEXT:    kmovw %edi, %k1
468 ; KNL-NEXT:    vpord %zmm2, %zmm1, %zmm0 {%k1}
469 ; KNL-NEXT:    retq
471 ; SKX-LABEL: test_mm512_mask_or_epi32:
472 ; SKX:       ## %bb.0: ## %entry
473 ; SKX-NEXT:    kmovd %edi, %k1
474 ; SKX-NEXT:    vorps %zmm2, %zmm1, %zmm0 {%k1}
475 ; SKX-NEXT:    retq
476 entry:
477   %or1.i.i = or <8 x i64> %__a, %__b
478   %0 = bitcast <8 x i64> %or1.i.i to <16 x i32>
479   %1 = bitcast <8 x i64> %__src to <16 x i32>
480   %2 = bitcast i16 %__k to <16 x i1>
481   %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1
482   %4 = bitcast <16 x i32> %3 to <8 x i64>
483   ret <8 x i64> %4
486 define <8 x i64> @test_mm512_mask_xor_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) {
487 ; KNL-LABEL: test_mm512_mask_xor_epi32:
488 ; KNL:       ## %bb.0: ## %entry
489 ; KNL-NEXT:    kmovw %edi, %k1
490 ; KNL-NEXT:    vpxord %zmm2, %zmm1, %zmm0 {%k1}
491 ; KNL-NEXT:    retq
493 ; SKX-LABEL: test_mm512_mask_xor_epi32:
494 ; SKX:       ## %bb.0: ## %entry
495 ; SKX-NEXT:    kmovd %edi, %k1
496 ; SKX-NEXT:    vxorps %zmm2, %zmm1, %zmm0 {%k1}
497 ; SKX-NEXT:    retq
498 entry:
499   %xor1.i.i = xor <8 x i64> %__a, %__b
500   %0 = bitcast <8 x i64> %xor1.i.i to <16 x i32>
501   %1 = bitcast <8 x i64> %__src to <16 x i32>
502   %2 = bitcast i16 %__k to <16 x i1>
503   %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1
504   %4 = bitcast <16 x i32> %3 to <8 x i64>
505   ret <8 x i64> %4
508 define <8 x double> @test_mm512_mask_xor_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
509 ; KNL-LABEL: test_mm512_mask_xor_pd:
510 ; KNL:       ## %bb.0: ## %entry
511 ; KNL-NEXT:    kmovw %edi, %k1
512 ; KNL-NEXT:    vpxorq %zmm2, %zmm1, %zmm0 {%k1}
513 ; KNL-NEXT:    retq
515 ; SKX-LABEL: test_mm512_mask_xor_pd:
516 ; SKX:       ## %bb.0: ## %entry
517 ; SKX-NEXT:    kmovd %edi, %k1
518 ; SKX-NEXT:    vxorpd %zmm2, %zmm1, %zmm0 {%k1}
519 ; SKX-NEXT:    retq
520 entry:
521   %0 = bitcast <8 x double> %__A to <8 x i64>
522   %1 = bitcast <8 x double> %__B to <8 x i64>
523   %xor.i.i = xor <8 x i64> %0, %1
524   %2 = bitcast <8 x i64> %xor.i.i to <8 x double>
525   %3 = bitcast i8 %__U to <8 x i1>
526   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W
527   ret <8 x double> %4
530 define <8 x double> @test_mm512_maskz_xor_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
531 ; KNL-LABEL: test_mm512_maskz_xor_pd:
532 ; KNL:       ## %bb.0: ## %entry
533 ; KNL-NEXT:    kmovw %edi, %k1
534 ; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0 {%k1} {z}
535 ; KNL-NEXT:    retq
537 ; SKX-LABEL: test_mm512_maskz_xor_pd:
538 ; SKX:       ## %bb.0: ## %entry
539 ; SKX-NEXT:    kmovd %edi, %k1
540 ; SKX-NEXT:    vxorpd %zmm1, %zmm0, %zmm0 {%k1} {z}
541 ; SKX-NEXT:    retq
542 entry:
543   %0 = bitcast <8 x double> %__A to <8 x i64>
544   %1 = bitcast <8 x double> %__B to <8 x i64>
545   %xor.i.i = xor <8 x i64> %0, %1
546   %2 = bitcast <8 x i64> %xor.i.i to <8 x double>
547   %3 = bitcast i8 %__U to <8 x i1>
548   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer
549   ret <8 x double> %4
552 define <16 x float> @test_mm512_mask_xor_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
553 ; KNL-LABEL: test_mm512_mask_xor_ps:
554 ; KNL:       ## %bb.0: ## %entry
555 ; KNL-NEXT:    kmovw %edi, %k1
556 ; KNL-NEXT:    vpxord %zmm2, %zmm1, %zmm0 {%k1}
557 ; KNL-NEXT:    retq
559 ; SKX-LABEL: test_mm512_mask_xor_ps:
560 ; SKX:       ## %bb.0: ## %entry
561 ; SKX-NEXT:    kmovd %edi, %k1
562 ; SKX-NEXT:    vxorps %zmm2, %zmm1, %zmm0 {%k1}
563 ; SKX-NEXT:    retq
564 entry:
565   %0 = bitcast <16 x float> %__A to <16 x i32>
566   %1 = bitcast <16 x float> %__B to <16 x i32>
567   %xor.i.i = xor <16 x i32> %0, %1
568   %2 = bitcast <16 x i32> %xor.i.i to <16 x float>
569   %3 = bitcast i16 %__U to <16 x i1>
570   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W
571   ret <16 x float> %4
574 define <16 x float> @test_mm512_maskz_xor_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
575 ; KNL-LABEL: test_mm512_maskz_xor_ps:
576 ; KNL:       ## %bb.0: ## %entry
577 ; KNL-NEXT:    kmovw %edi, %k1
578 ; KNL-NEXT:    vpxord %zmm1, %zmm0, %zmm0 {%k1} {z}
579 ; KNL-NEXT:    retq
581 ; SKX-LABEL: test_mm512_maskz_xor_ps:
582 ; SKX:       ## %bb.0: ## %entry
583 ; SKX-NEXT:    kmovd %edi, %k1
584 ; SKX-NEXT:    vxorps %zmm1, %zmm0, %zmm0 {%k1} {z}
585 ; SKX-NEXT:    retq
586 entry:
587   %0 = bitcast <16 x float> %__A to <16 x i32>
588   %1 = bitcast <16 x float> %__B to <16 x i32>
589   %xor.i.i = xor <16 x i32> %0, %1
590   %2 = bitcast <16 x i32> %xor.i.i to <16 x float>
591   %3 = bitcast i16 %__U to <16 x i1>
592   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer
593   ret <16 x float> %4
596 define <8 x double> @test_mm512_mask_or_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
597 ; KNL-LABEL: test_mm512_mask_or_pd:
598 ; KNL:       ## %bb.0: ## %entry
599 ; KNL-NEXT:    kmovw %edi, %k1
600 ; KNL-NEXT:    vporq %zmm1, %zmm2, %zmm0 {%k1}
601 ; KNL-NEXT:    retq
603 ; SKX-LABEL: test_mm512_mask_or_pd:
604 ; SKX:       ## %bb.0: ## %entry
605 ; SKX-NEXT:    kmovd %edi, %k1
606 ; SKX-NEXT:    vorpd %zmm1, %zmm2, %zmm0 {%k1}
607 ; SKX-NEXT:    retq
608 entry:
609   %0 = bitcast <8 x double> %__A to <8 x i64>
610   %1 = bitcast <8 x double> %__B to <8 x i64>
611   %or.i.i = or <8 x i64> %1, %0
612   %2 = bitcast <8 x i64> %or.i.i to <8 x double>
613   %3 = bitcast i8 %__U to <8 x i1>
614   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W
615   ret <8 x double> %4
618 define <8 x double> @test_mm512_maskz_or_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
619 ; KNL-LABEL: test_mm512_maskz_or_pd:
620 ; KNL:       ## %bb.0: ## %entry
621 ; KNL-NEXT:    kmovw %edi, %k1
622 ; KNL-NEXT:    vporq %zmm0, %zmm1, %zmm0 {%k1} {z}
623 ; KNL-NEXT:    retq
625 ; SKX-LABEL: test_mm512_maskz_or_pd:
626 ; SKX:       ## %bb.0: ## %entry
627 ; SKX-NEXT:    kmovd %edi, %k1
628 ; SKX-NEXT:    vorpd %zmm0, %zmm1, %zmm0 {%k1} {z}
629 ; SKX-NEXT:    retq
630 entry:
631   %0 = bitcast <8 x double> %__A to <8 x i64>
632   %1 = bitcast <8 x double> %__B to <8 x i64>
633   %or.i.i = or <8 x i64> %1, %0
634   %2 = bitcast <8 x i64> %or.i.i to <8 x double>
635   %3 = bitcast i8 %__U to <8 x i1>
636   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer
637   ret <8 x double> %4
640 define <16 x float> @test_mm512_mask_or_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
641 ; KNL-LABEL: test_mm512_mask_or_ps:
642 ; KNL:       ## %bb.0: ## %entry
643 ; KNL-NEXT:    kmovw %edi, %k1
644 ; KNL-NEXT:    vpord %zmm1, %zmm2, %zmm0 {%k1}
645 ; KNL-NEXT:    retq
647 ; SKX-LABEL: test_mm512_mask_or_ps:
648 ; SKX:       ## %bb.0: ## %entry
649 ; SKX-NEXT:    kmovd %edi, %k1
650 ; SKX-NEXT:    vorps %zmm1, %zmm2, %zmm0 {%k1}
651 ; SKX-NEXT:    retq
652 entry:
653   %0 = bitcast <16 x float> %__A to <16 x i32>
654   %1 = bitcast <16 x float> %__B to <16 x i32>
655   %or.i.i = or <16 x i32> %1, %0
656   %2 = bitcast <16 x i32> %or.i.i to <16 x float>
657   %3 = bitcast i16 %__U to <16 x i1>
658   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W
659   ret <16 x float> %4
662 define <16 x float> @test_mm512_maskz_or_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
663 ; KNL-LABEL: test_mm512_maskz_or_ps:
664 ; KNL:       ## %bb.0: ## %entry
665 ; KNL-NEXT:    kmovw %edi, %k1
666 ; KNL-NEXT:    vpord %zmm0, %zmm1, %zmm0 {%k1} {z}
667 ; KNL-NEXT:    retq
669 ; SKX-LABEL: test_mm512_maskz_or_ps:
670 ; SKX:       ## %bb.0: ## %entry
671 ; SKX-NEXT:    kmovd %edi, %k1
672 ; SKX-NEXT:    vorps %zmm0, %zmm1, %zmm0 {%k1} {z}
673 ; SKX-NEXT:    retq
674 entry:
675   %0 = bitcast <16 x float> %__A to <16 x i32>
676   %1 = bitcast <16 x float> %__B to <16 x i32>
677   %or.i.i = or <16 x i32> %1, %0
678   %2 = bitcast <16 x i32> %or.i.i to <16 x float>
679   %3 = bitcast i16 %__U to <16 x i1>
680   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer
681   ret <16 x float> %4
684 define <8 x double> @test_mm512_mask_and_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
685 ; KNL-LABEL: test_mm512_mask_and_pd:
686 ; KNL:       ## %bb.0: ## %entry
687 ; KNL-NEXT:    kmovw %edi, %k1
688 ; KNL-NEXT:    vpandq %zmm1, %zmm2, %zmm0 {%k1}
689 ; KNL-NEXT:    retq
691 ; SKX-LABEL: test_mm512_mask_and_pd:
692 ; SKX:       ## %bb.0: ## %entry
693 ; SKX-NEXT:    kmovd %edi, %k1
694 ; SKX-NEXT:    vandpd %zmm1, %zmm2, %zmm0 {%k1}
695 ; SKX-NEXT:    retq
696 entry:
697   %0 = bitcast <8 x double> %__A to <8 x i64>
698   %1 = bitcast <8 x double> %__B to <8 x i64>
699   %and.i.i = and <8 x i64> %1, %0
700   %2 = bitcast <8 x i64> %and.i.i to <8 x double>
701   %3 = bitcast i8 %__U to <8 x i1>
702   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W
703   ret <8 x double> %4
706 define <8 x double> @test_mm512_maskz_and_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
707 ; KNL-LABEL: test_mm512_maskz_and_pd:
708 ; KNL:       ## %bb.0: ## %entry
709 ; KNL-NEXT:    kmovw %edi, %k1
710 ; KNL-NEXT:    vpandq %zmm0, %zmm1, %zmm0 {%k1} {z}
711 ; KNL-NEXT:    retq
713 ; SKX-LABEL: test_mm512_maskz_and_pd:
714 ; SKX:       ## %bb.0: ## %entry
715 ; SKX-NEXT:    kmovd %edi, %k1
716 ; SKX-NEXT:    vandpd %zmm0, %zmm1, %zmm0 {%k1} {z}
717 ; SKX-NEXT:    retq
718 entry:
719   %0 = bitcast <8 x double> %__A to <8 x i64>
720   %1 = bitcast <8 x double> %__B to <8 x i64>
721   %and.i.i = and <8 x i64> %1, %0
722   %2 = bitcast <8 x i64> %and.i.i to <8 x double>
723   %3 = bitcast i8 %__U to <8 x i1>
724   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer
725   ret <8 x double> %4
728 define <16 x float> @test_mm512_mask_and_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
729 ; KNL-LABEL: test_mm512_mask_and_ps:
730 ; KNL:       ## %bb.0: ## %entry
731 ; KNL-NEXT:    kmovw %edi, %k1
732 ; KNL-NEXT:    vpandd %zmm1, %zmm2, %zmm0 {%k1}
733 ; KNL-NEXT:    retq
735 ; SKX-LABEL: test_mm512_mask_and_ps:
736 ; SKX:       ## %bb.0: ## %entry
737 ; SKX-NEXT:    kmovd %edi, %k1
738 ; SKX-NEXT:    vandps %zmm1, %zmm2, %zmm0 {%k1}
739 ; SKX-NEXT:    retq
740 entry:
741   %0 = bitcast <16 x float> %__A to <16 x i32>
742   %1 = bitcast <16 x float> %__B to <16 x i32>
743   %and.i.i = and <16 x i32> %1, %0
744   %2 = bitcast <16 x i32> %and.i.i to <16 x float>
745   %3 = bitcast i16 %__U to <16 x i1>
746   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W
747   ret <16 x float> %4
750 define <16 x float> @test_mm512_maskz_and_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
751 ; KNL-LABEL: test_mm512_maskz_and_ps:
752 ; KNL:       ## %bb.0: ## %entry
753 ; KNL-NEXT:    kmovw %edi, %k1
754 ; KNL-NEXT:    vpandd %zmm0, %zmm1, %zmm0 {%k1} {z}
755 ; KNL-NEXT:    retq
757 ; SKX-LABEL: test_mm512_maskz_and_ps:
758 ; SKX:       ## %bb.0: ## %entry
759 ; SKX-NEXT:    kmovd %edi, %k1
760 ; SKX-NEXT:    vandps %zmm0, %zmm1, %zmm0 {%k1} {z}
761 ; SKX-NEXT:    retq
762 entry:
763   %0 = bitcast <16 x float> %__A to <16 x i32>
764   %1 = bitcast <16 x float> %__B to <16 x i32>
765   %and.i.i = and <16 x i32> %1, %0
766   %2 = bitcast <16 x i32> %and.i.i to <16 x float>
767   %3 = bitcast i16 %__U to <16 x i1>
768   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer
769   ret <16 x float> %4
772 define <8 x double> @test_mm512_mask_andnot_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
773 ; KNL-LABEL: test_mm512_mask_andnot_pd:
774 ; KNL:       ## %bb.0: ## %entry
775 ; KNL-NEXT:    kmovw %edi, %k1
776 ; KNL-NEXT:    vpandnq %zmm2, %zmm1, %zmm0 {%k1}
777 ; KNL-NEXT:    retq
779 ; SKX-LABEL: test_mm512_mask_andnot_pd:
780 ; SKX:       ## %bb.0: ## %entry
781 ; SKX-NEXT:    kmovd %edi, %k1
782 ; SKX-NEXT:    vandnpd %zmm2, %zmm1, %zmm0 {%k1}
783 ; SKX-NEXT:    retq
784 entry:
785   %0 = bitcast <8 x double> %__A to <8 x i64>
786   %neg.i.i = xor <8 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
787   %1 = bitcast <8 x double> %__B to <8 x i64>
788   %and.i.i = and <8 x i64> %1, %neg.i.i
789   %2 = bitcast <8 x i64> %and.i.i to <8 x double>
790   %3 = bitcast i8 %__U to <8 x i1>
791   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W
792   ret <8 x double> %4
795 define <8 x double> @test_mm512_maskz_andnot_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
796 ; KNL-LABEL: test_mm512_maskz_andnot_pd:
797 ; KNL:       ## %bb.0: ## %entry
798 ; KNL-NEXT:    kmovw %edi, %k1
799 ; KNL-NEXT:    vpandnq %zmm1, %zmm0, %zmm0 {%k1} {z}
800 ; KNL-NEXT:    retq
802 ; SKX-LABEL: test_mm512_maskz_andnot_pd:
803 ; SKX:       ## %bb.0: ## %entry
804 ; SKX-NEXT:    kmovd %edi, %k1
805 ; SKX-NEXT:    vandnpd %zmm1, %zmm0, %zmm0 {%k1} {z}
806 ; SKX-NEXT:    retq
807 entry:
808   %0 = bitcast <8 x double> %__A to <8 x i64>
809   %neg.i.i = xor <8 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
810   %1 = bitcast <8 x double> %__B to <8 x i64>
811   %and.i.i = and <8 x i64> %1, %neg.i.i
812   %2 = bitcast <8 x i64> %and.i.i to <8 x double>
813   %3 = bitcast i8 %__U to <8 x i1>
814   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer
815   ret <8 x double> %4
818 define <16 x float> @test_mm512_mask_andnot_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
819 ; KNL-LABEL: test_mm512_mask_andnot_ps:
820 ; KNL:       ## %bb.0: ## %entry
821 ; KNL-NEXT:    kmovw %edi, %k1
822 ; KNL-NEXT:    vpandnd %zmm2, %zmm1, %zmm0 {%k1}
823 ; KNL-NEXT:    retq
825 ; SKX-LABEL: test_mm512_mask_andnot_ps:
826 ; SKX:       ## %bb.0: ## %entry
827 ; SKX-NEXT:    kmovd %edi, %k1
828 ; SKX-NEXT:    vandnps %zmm2, %zmm1, %zmm0 {%k1}
829 ; SKX-NEXT:    retq
830 entry:
831   %0 = bitcast <16 x float> %__A to <16 x i32>
832   %neg.i.i = xor <16 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
833   %1 = bitcast <16 x float> %__B to <16 x i32>
834   %and.i.i = and <16 x i32> %1, %neg.i.i
835   %2 = bitcast <16 x i32> %and.i.i to <16 x float>
836   %3 = bitcast i16 %__U to <16 x i1>
837   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W
838   ret <16 x float> %4
841 define <16 x float> @test_mm512_maskz_andnot_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
842 ; KNL-LABEL: test_mm512_maskz_andnot_ps:
843 ; KNL:       ## %bb.0: ## %entry
844 ; KNL-NEXT:    kmovw %edi, %k1
845 ; KNL-NEXT:    vpandnd %zmm1, %zmm0, %zmm0 {%k1} {z}
846 ; KNL-NEXT:    retq
848 ; SKX-LABEL: test_mm512_maskz_andnot_ps:
849 ; SKX:       ## %bb.0: ## %entry
850 ; SKX-NEXT:    kmovd %edi, %k1
851 ; SKX-NEXT:    vandnps %zmm1, %zmm0, %zmm0 {%k1} {z}
852 ; SKX-NEXT:    retq
853 entry:
854   %0 = bitcast <16 x float> %__A to <16 x i32>
855   %neg.i.i = xor <16 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
856   %1 = bitcast <16 x float> %__B to <16 x i32>
857   %and.i.i = and <16 x i32> %1, %neg.i.i
858   %2 = bitcast <16 x i32> %and.i.i to <16 x float>
859   %3 = bitcast i16 %__U to <16 x i1>
860   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer
861   ret <16 x float> %4