[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / avx512-logic.ll
blobac35c5639cc8522873e80567bcad4960df3dee57
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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0
122 ; KNL-NEXT:    retq
124 ; SKX-LABEL: orq_broadcast:
125 ; SKX:       ## %bb.0:
126 ; SKX-NEXT:    vorpd {{\.?LCPI[0-9]+_[0-9]+}}(%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:    vpandq %zmm1, %zmm0, %zmm0
170 ; KNL-NEXT:    retq
172 ; SKX-LABEL: and_v64i8:
173 ; SKX:       ## %bb.0:
174 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm0
175 ; SKX-NEXT:    retq
176   %res = and <64 x i8> %a, %b
177   ret <64 x i8> %res
180 define <64 x i8> @andn_v64i8(<64 x i8> %a, <64 x i8> %b) {
181 ; KNL-LABEL: andn_v64i8:
182 ; KNL:       ## %bb.0:
183 ; KNL-NEXT:    vpandnq %zmm0, %zmm1, %zmm0
184 ; KNL-NEXT:    retq
186 ; SKX-LABEL: andn_v64i8:
187 ; SKX:       ## %bb.0:
188 ; SKX-NEXT:    vandnps %zmm0, %zmm1, %zmm0
189 ; SKX-NEXT:    retq
190   %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,
191                            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,
192                            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   %res = and <64 x i8> %a, %b2
195   ret <64 x i8> %res
198 define <64 x i8> @or_v64i8(<64 x i8> %a, <64 x i8> %b) {
199 ; KNL-LABEL: or_v64i8:
200 ; KNL:       ## %bb.0:
201 ; KNL-NEXT:    vporq %zmm1, %zmm0, %zmm0
202 ; KNL-NEXT:    retq
204 ; SKX-LABEL: or_v64i8:
205 ; SKX:       ## %bb.0:
206 ; SKX-NEXT:    vorps %zmm1, %zmm0, %zmm0
207 ; SKX-NEXT:    retq
208   %res = or <64 x i8> %a, %b
209   ret <64 x i8> %res
212 define <64 x i8> @xor_v64i8(<64 x i8> %a, <64 x i8> %b) {
213 ; KNL-LABEL: xor_v64i8:
214 ; KNL:       ## %bb.0:
215 ; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0
216 ; KNL-NEXT:    retq
218 ; SKX-LABEL: xor_v64i8:
219 ; SKX:       ## %bb.0:
220 ; SKX-NEXT:    vxorps %zmm1, %zmm0, %zmm0
221 ; SKX-NEXT:    retq
222   %res = xor <64 x i8> %a, %b
223   ret <64 x i8> %res
226 define <32 x i16> @and_v32i16(<32 x i16> %a, <32 x i16> %b) {
227 ; KNL-LABEL: and_v32i16:
228 ; KNL:       ## %bb.0:
229 ; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm0
230 ; KNL-NEXT:    retq
232 ; SKX-LABEL: and_v32i16:
233 ; SKX:       ## %bb.0:
234 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm0
235 ; SKX-NEXT:    retq
236   %res = and <32 x i16> %a, %b
237   ret <32 x i16> %res
240 define <32 x i16> @andn_v32i16(<32 x i16> %a, <32 x i16> %b) {
241 ; KNL-LABEL: andn_v32i16:
242 ; KNL:       ## %bb.0:
243 ; KNL-NEXT:    vpandnq %zmm0, %zmm1, %zmm0
244 ; KNL-NEXT:    retq
246 ; SKX-LABEL: andn_v32i16:
247 ; SKX:       ## %bb.0:
248 ; SKX-NEXT:    vandnps %zmm0, %zmm1, %zmm0
249 ; SKX-NEXT:    retq
250   %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,
251                             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>
252   %res = and <32 x i16> %a, %b2
253   ret <32 x i16> %res
256 define <32 x i16> @or_v32i16(<32 x i16> %a, <32 x i16> %b) {
257 ; KNL-LABEL: or_v32i16:
258 ; KNL:       ## %bb.0:
259 ; KNL-NEXT:    vporq %zmm1, %zmm0, %zmm0
260 ; KNL-NEXT:    retq
262 ; SKX-LABEL: or_v32i16:
263 ; SKX:       ## %bb.0:
264 ; SKX-NEXT:    vorps %zmm1, %zmm0, %zmm0
265 ; SKX-NEXT:    retq
266   %res = or <32 x i16> %a, %b
267   ret <32 x i16> %res
270 define <32 x i16> @xor_v32i16(<32 x i16> %a, <32 x i16> %b) {
271 ; KNL-LABEL: xor_v32i16:
272 ; KNL:       ## %bb.0:
273 ; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0
274 ; KNL-NEXT:    retq
276 ; SKX-LABEL: xor_v32i16:
277 ; SKX:       ## %bb.0:
278 ; SKX-NEXT:    vxorps %zmm1, %zmm0, %zmm0
279 ; SKX-NEXT:    retq
280   %res = xor <32 x i16> %a, %b
281   ret <32 x i16> %res
284 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) {
285 ; KNL-LABEL: masked_and_v16f32:
286 ; KNL:       ## %bb.0:
287 ; KNL-NEXT:    kmovw %edi, %k1
288 ; KNL-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}
289 ; KNL-NEXT:    vaddps %zmm2, %zmm3, %zmm0
290 ; KNL-NEXT:    retq
292 ; SKX-LABEL: masked_and_v16f32:
293 ; SKX:       ## %bb.0:
294 ; SKX-NEXT:    kmovd %edi, %k1
295 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm2 {%k1}
296 ; SKX-NEXT:    vaddps %zmm2, %zmm3, %zmm0
297 ; SKX-NEXT:    retq
298   %a1 = bitcast <16 x float> %a to <16 x i32>
299   %b1 = bitcast <16 x float> %b to <16 x i32>
300   %passThru1 = bitcast <16 x float> %passThru to <16 x i32>
301   %mask1 = bitcast i16 %mask to <16 x i1>
302   %op = and <16 x i32> %a1, %b1
303   %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1
304   %cast = bitcast <16 x i32> %select to <16 x float>
305   %add = fadd <16 x float> %c, %cast
306   ret <16 x float> %add
309 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) {
310 ; KNL-LABEL: masked_or_v16f32:
311 ; KNL:       ## %bb.0:
312 ; KNL-NEXT:    kmovw %edi, %k1
313 ; KNL-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}
314 ; KNL-NEXT:    vaddps %zmm2, %zmm3, %zmm0
315 ; KNL-NEXT:    retq
317 ; SKX-LABEL: masked_or_v16f32:
318 ; SKX:       ## %bb.0:
319 ; SKX-NEXT:    kmovd %edi, %k1
320 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm2 {%k1}
321 ; SKX-NEXT:    vaddps %zmm2, %zmm3, %zmm0
322 ; SKX-NEXT:    retq
323   %a1 = bitcast <16 x float> %a to <16 x i32>
324   %b1 = bitcast <16 x float> %b to <16 x i32>
325   %passThru1 = bitcast <16 x float> %passThru to <16 x i32>
326   %mask1 = bitcast i16 %mask to <16 x i1>
327   %op = and <16 x i32> %a1, %b1
328   %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1
329   %cast = bitcast <16 x i32> %select to <16 x float>
330   %add = fadd <16 x float> %c, %cast
331   ret <16 x float> %add
334 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) {
335 ; KNL-LABEL: masked_xor_v16f32:
336 ; KNL:       ## %bb.0:
337 ; KNL-NEXT:    kmovw %edi, %k1
338 ; KNL-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}
339 ; KNL-NEXT:    vaddps %zmm2, %zmm3, %zmm0
340 ; KNL-NEXT:    retq
342 ; SKX-LABEL: masked_xor_v16f32:
343 ; SKX:       ## %bb.0:
344 ; SKX-NEXT:    kmovd %edi, %k1
345 ; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm2 {%k1}
346 ; SKX-NEXT:    vaddps %zmm2, %zmm3, %zmm0
347 ; SKX-NEXT:    retq
348   %a1 = bitcast <16 x float> %a to <16 x i32>
349   %b1 = bitcast <16 x float> %b to <16 x i32>
350   %passThru1 = bitcast <16 x float> %passThru to <16 x i32>
351   %mask1 = bitcast i16 %mask to <16 x i1>
352   %op = and <16 x i32> %a1, %b1
353   %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1
354   %cast = bitcast <16 x i32> %select to <16 x float>
355   %add = fadd <16 x float> %c, %cast
356   ret <16 x float> %add
359 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) {
360 ; KNL-LABEL: masked_and_v8f64:
361 ; KNL:       ## %bb.0:
362 ; KNL-NEXT:    kmovw %edi, %k1
363 ; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}
364 ; KNL-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
365 ; KNL-NEXT:    retq
367 ; SKX-LABEL: masked_and_v8f64:
368 ; SKX:       ## %bb.0:
369 ; SKX-NEXT:    kmovd %edi, %k1
370 ; SKX-NEXT:    vandpd %zmm1, %zmm0, %zmm2 {%k1}
371 ; SKX-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
372 ; SKX-NEXT:    retq
373   %a1 = bitcast <8 x double> %a to <8 x i64>
374   %b1 = bitcast <8 x double> %b to <8 x i64>
375   %passThru1 = bitcast <8 x double> %passThru to <8 x i64>
376   %mask1 = bitcast i8 %mask to <8 x i1>
377   %op = and <8 x i64> %a1, %b1
378   %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1
379   %cast = bitcast <8 x i64> %select to <8 x double>
380   %add = fadd <8 x double> %c, %cast
381   ret <8 x double> %add
384 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) {
385 ; KNL-LABEL: masked_or_v8f64:
386 ; KNL:       ## %bb.0:
387 ; KNL-NEXT:    kmovw %edi, %k1
388 ; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}
389 ; KNL-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
390 ; KNL-NEXT:    retq
392 ; SKX-LABEL: masked_or_v8f64:
393 ; SKX:       ## %bb.0:
394 ; SKX-NEXT:    kmovd %edi, %k1
395 ; SKX-NEXT:    vandpd %zmm1, %zmm0, %zmm2 {%k1}
396 ; SKX-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
397 ; SKX-NEXT:    retq
398   %a1 = bitcast <8 x double> %a to <8 x i64>
399   %b1 = bitcast <8 x double> %b to <8 x i64>
400   %passThru1 = bitcast <8 x double> %passThru to <8 x i64>
401   %mask1 = bitcast i8 %mask to <8 x i1>
402   %op = and <8 x i64> %a1, %b1
403   %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1
404   %cast = bitcast <8 x i64> %select to <8 x double>
405   %add = fadd <8 x double> %c, %cast
406   ret <8 x double> %add
409 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) {
410 ; KNL-LABEL: masked_xor_v8f64:
411 ; KNL:       ## %bb.0:
412 ; KNL-NEXT:    kmovw %edi, %k1
413 ; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}
414 ; KNL-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
415 ; KNL-NEXT:    retq
417 ; SKX-LABEL: masked_xor_v8f64:
418 ; SKX:       ## %bb.0:
419 ; SKX-NEXT:    kmovd %edi, %k1
420 ; SKX-NEXT:    vandpd %zmm1, %zmm0, %zmm2 {%k1}
421 ; SKX-NEXT:    vaddpd %zmm2, %zmm3, %zmm0
422 ; SKX-NEXT:    retq
423   %a1 = bitcast <8 x double> %a to <8 x i64>
424   %b1 = bitcast <8 x double> %b to <8 x i64>
425   %passThru1 = bitcast <8 x double> %passThru to <8 x i64>
426   %mask1 = bitcast i8 %mask to <8 x i1>
427   %op = and <8 x i64> %a1, %b1
428   %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1
429   %cast = bitcast <8 x i64> %select to <8 x double>
430   %add = fadd <8 x double> %c, %cast
431   ret <8 x double> %add
434 define <8 x i64> @test_mm512_mask_and_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) {
435 ; KNL-LABEL: test_mm512_mask_and_epi32:
436 ; KNL:       ## %bb.0: ## %entry
437 ; KNL-NEXT:    kmovw %edi, %k1
438 ; KNL-NEXT:    vpandd %zmm2, %zmm1, %zmm0 {%k1}
439 ; KNL-NEXT:    retq
441 ; SKX-LABEL: test_mm512_mask_and_epi32:
442 ; SKX:       ## %bb.0: ## %entry
443 ; SKX-NEXT:    kmovd %edi, %k1
444 ; SKX-NEXT:    vandps %zmm2, %zmm1, %zmm0 {%k1}
445 ; SKX-NEXT:    retq
446 entry:
447   %and1.i.i = and <8 x i64> %__a, %__b
448   %0 = bitcast <8 x i64> %and1.i.i to <16 x i32>
449   %1 = bitcast <8 x i64> %__src to <16 x i32>
450   %2 = bitcast i16 %__k to <16 x i1>
451   %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1
452   %4 = bitcast <16 x i32> %3 to <8 x i64>
453   ret <8 x i64> %4
456 define <8 x i64> @test_mm512_mask_or_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) {
457 ; KNL-LABEL: test_mm512_mask_or_epi32:
458 ; KNL:       ## %bb.0: ## %entry
459 ; KNL-NEXT:    kmovw %edi, %k1
460 ; KNL-NEXT:    vpord %zmm2, %zmm1, %zmm0 {%k1}
461 ; KNL-NEXT:    retq
463 ; SKX-LABEL: test_mm512_mask_or_epi32:
464 ; SKX:       ## %bb.0: ## %entry
465 ; SKX-NEXT:    kmovd %edi, %k1
466 ; SKX-NEXT:    vorps %zmm2, %zmm1, %zmm0 {%k1}
467 ; SKX-NEXT:    retq
468 entry:
469   %or1.i.i = or <8 x i64> %__a, %__b
470   %0 = bitcast <8 x i64> %or1.i.i to <16 x i32>
471   %1 = bitcast <8 x i64> %__src to <16 x i32>
472   %2 = bitcast i16 %__k to <16 x i1>
473   %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1
474   %4 = bitcast <16 x i32> %3 to <8 x i64>
475   ret <8 x i64> %4
478 define <8 x i64> @test_mm512_mask_xor_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) {
479 ; KNL-LABEL: test_mm512_mask_xor_epi32:
480 ; KNL:       ## %bb.0: ## %entry
481 ; KNL-NEXT:    kmovw %edi, %k1
482 ; KNL-NEXT:    vpxord %zmm2, %zmm1, %zmm0 {%k1}
483 ; KNL-NEXT:    retq
485 ; SKX-LABEL: test_mm512_mask_xor_epi32:
486 ; SKX:       ## %bb.0: ## %entry
487 ; SKX-NEXT:    kmovd %edi, %k1
488 ; SKX-NEXT:    vxorps %zmm2, %zmm1, %zmm0 {%k1}
489 ; SKX-NEXT:    retq
490 entry:
491   %xor1.i.i = xor <8 x i64> %__a, %__b
492   %0 = bitcast <8 x i64> %xor1.i.i to <16 x i32>
493   %1 = bitcast <8 x i64> %__src to <16 x i32>
494   %2 = bitcast i16 %__k to <16 x i1>
495   %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1
496   %4 = bitcast <16 x i32> %3 to <8 x i64>
497   ret <8 x i64> %4
500 define <8 x double> @test_mm512_mask_xor_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
501 ; KNL-LABEL: test_mm512_mask_xor_pd:
502 ; KNL:       ## %bb.0: ## %entry
503 ; KNL-NEXT:    kmovw %edi, %k1
504 ; KNL-NEXT:    vpxorq %zmm2, %zmm1, %zmm0 {%k1}
505 ; KNL-NEXT:    retq
507 ; SKX-LABEL: test_mm512_mask_xor_pd:
508 ; SKX:       ## %bb.0: ## %entry
509 ; SKX-NEXT:    kmovd %edi, %k1
510 ; SKX-NEXT:    vxorpd %zmm2, %zmm1, %zmm0 {%k1}
511 ; SKX-NEXT:    retq
512 entry:
513   %0 = bitcast <8 x double> %__A to <8 x i64>
514   %1 = bitcast <8 x double> %__B to <8 x i64>
515   %xor.i.i = xor <8 x i64> %0, %1
516   %2 = bitcast <8 x i64> %xor.i.i to <8 x double>
517   %3 = bitcast i8 %__U to <8 x i1>
518   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W
519   ret <8 x double> %4
522 define <8 x double> @test_mm512_maskz_xor_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
523 ; KNL-LABEL: test_mm512_maskz_xor_pd:
524 ; KNL:       ## %bb.0: ## %entry
525 ; KNL-NEXT:    kmovw %edi, %k1
526 ; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0 {%k1} {z}
527 ; KNL-NEXT:    retq
529 ; SKX-LABEL: test_mm512_maskz_xor_pd:
530 ; SKX:       ## %bb.0: ## %entry
531 ; SKX-NEXT:    kmovd %edi, %k1
532 ; SKX-NEXT:    vxorpd %zmm1, %zmm0, %zmm0 {%k1} {z}
533 ; SKX-NEXT:    retq
534 entry:
535   %0 = bitcast <8 x double> %__A to <8 x i64>
536   %1 = bitcast <8 x double> %__B to <8 x i64>
537   %xor.i.i = xor <8 x i64> %0, %1
538   %2 = bitcast <8 x i64> %xor.i.i to <8 x double>
539   %3 = bitcast i8 %__U to <8 x i1>
540   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer
541   ret <8 x double> %4
544 define <16 x float> @test_mm512_mask_xor_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
545 ; KNL-LABEL: test_mm512_mask_xor_ps:
546 ; KNL:       ## %bb.0: ## %entry
547 ; KNL-NEXT:    kmovw %edi, %k1
548 ; KNL-NEXT:    vpxord %zmm2, %zmm1, %zmm0 {%k1}
549 ; KNL-NEXT:    retq
551 ; SKX-LABEL: test_mm512_mask_xor_ps:
552 ; SKX:       ## %bb.0: ## %entry
553 ; SKX-NEXT:    kmovd %edi, %k1
554 ; SKX-NEXT:    vxorps %zmm2, %zmm1, %zmm0 {%k1}
555 ; SKX-NEXT:    retq
556 entry:
557   %0 = bitcast <16 x float> %__A to <16 x i32>
558   %1 = bitcast <16 x float> %__B to <16 x i32>
559   %xor.i.i = xor <16 x i32> %0, %1
560   %2 = bitcast <16 x i32> %xor.i.i to <16 x float>
561   %3 = bitcast i16 %__U to <16 x i1>
562   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W
563   ret <16 x float> %4
566 define <16 x float> @test_mm512_maskz_xor_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
567 ; KNL-LABEL: test_mm512_maskz_xor_ps:
568 ; KNL:       ## %bb.0: ## %entry
569 ; KNL-NEXT:    kmovw %edi, %k1
570 ; KNL-NEXT:    vpxord %zmm1, %zmm0, %zmm0 {%k1} {z}
571 ; KNL-NEXT:    retq
573 ; SKX-LABEL: test_mm512_maskz_xor_ps:
574 ; SKX:       ## %bb.0: ## %entry
575 ; SKX-NEXT:    kmovd %edi, %k1
576 ; SKX-NEXT:    vxorps %zmm1, %zmm0, %zmm0 {%k1} {z}
577 ; SKX-NEXT:    retq
578 entry:
579   %0 = bitcast <16 x float> %__A to <16 x i32>
580   %1 = bitcast <16 x float> %__B to <16 x i32>
581   %xor.i.i = xor <16 x i32> %0, %1
582   %2 = bitcast <16 x i32> %xor.i.i to <16 x float>
583   %3 = bitcast i16 %__U to <16 x i1>
584   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer
585   ret <16 x float> %4
588 define <8 x double> @test_mm512_mask_or_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
589 ; KNL-LABEL: test_mm512_mask_or_pd:
590 ; KNL:       ## %bb.0: ## %entry
591 ; KNL-NEXT:    kmovw %edi, %k1
592 ; KNL-NEXT:    vporq %zmm1, %zmm2, %zmm0 {%k1}
593 ; KNL-NEXT:    retq
595 ; SKX-LABEL: test_mm512_mask_or_pd:
596 ; SKX:       ## %bb.0: ## %entry
597 ; SKX-NEXT:    kmovd %edi, %k1
598 ; SKX-NEXT:    vorpd %zmm1, %zmm2, %zmm0 {%k1}
599 ; SKX-NEXT:    retq
600 entry:
601   %0 = bitcast <8 x double> %__A to <8 x i64>
602   %1 = bitcast <8 x double> %__B to <8 x i64>
603   %or.i.i = or <8 x i64> %1, %0
604   %2 = bitcast <8 x i64> %or.i.i to <8 x double>
605   %3 = bitcast i8 %__U to <8 x i1>
606   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W
607   ret <8 x double> %4
610 define <8 x double> @test_mm512_maskz_or_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
611 ; KNL-LABEL: test_mm512_maskz_or_pd:
612 ; KNL:       ## %bb.0: ## %entry
613 ; KNL-NEXT:    kmovw %edi, %k1
614 ; KNL-NEXT:    vporq %zmm0, %zmm1, %zmm0 {%k1} {z}
615 ; KNL-NEXT:    retq
617 ; SKX-LABEL: test_mm512_maskz_or_pd:
618 ; SKX:       ## %bb.0: ## %entry
619 ; SKX-NEXT:    kmovd %edi, %k1
620 ; SKX-NEXT:    vorpd %zmm0, %zmm1, %zmm0 {%k1} {z}
621 ; SKX-NEXT:    retq
622 entry:
623   %0 = bitcast <8 x double> %__A to <8 x i64>
624   %1 = bitcast <8 x double> %__B to <8 x i64>
625   %or.i.i = or <8 x i64> %1, %0
626   %2 = bitcast <8 x i64> %or.i.i to <8 x double>
627   %3 = bitcast i8 %__U to <8 x i1>
628   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer
629   ret <8 x double> %4
632 define <16 x float> @test_mm512_mask_or_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
633 ; KNL-LABEL: test_mm512_mask_or_ps:
634 ; KNL:       ## %bb.0: ## %entry
635 ; KNL-NEXT:    kmovw %edi, %k1
636 ; KNL-NEXT:    vpord %zmm1, %zmm2, %zmm0 {%k1}
637 ; KNL-NEXT:    retq
639 ; SKX-LABEL: test_mm512_mask_or_ps:
640 ; SKX:       ## %bb.0: ## %entry
641 ; SKX-NEXT:    kmovd %edi, %k1
642 ; SKX-NEXT:    vorps %zmm1, %zmm2, %zmm0 {%k1}
643 ; SKX-NEXT:    retq
644 entry:
645   %0 = bitcast <16 x float> %__A to <16 x i32>
646   %1 = bitcast <16 x float> %__B to <16 x i32>
647   %or.i.i = or <16 x i32> %1, %0
648   %2 = bitcast <16 x i32> %or.i.i to <16 x float>
649   %3 = bitcast i16 %__U to <16 x i1>
650   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W
651   ret <16 x float> %4
654 define <16 x float> @test_mm512_maskz_or_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
655 ; KNL-LABEL: test_mm512_maskz_or_ps:
656 ; KNL:       ## %bb.0: ## %entry
657 ; KNL-NEXT:    kmovw %edi, %k1
658 ; KNL-NEXT:    vpord %zmm0, %zmm1, %zmm0 {%k1} {z}
659 ; KNL-NEXT:    retq
661 ; SKX-LABEL: test_mm512_maskz_or_ps:
662 ; SKX:       ## %bb.0: ## %entry
663 ; SKX-NEXT:    kmovd %edi, %k1
664 ; SKX-NEXT:    vorps %zmm0, %zmm1, %zmm0 {%k1} {z}
665 ; SKX-NEXT:    retq
666 entry:
667   %0 = bitcast <16 x float> %__A to <16 x i32>
668   %1 = bitcast <16 x float> %__B to <16 x i32>
669   %or.i.i = or <16 x i32> %1, %0
670   %2 = bitcast <16 x i32> %or.i.i to <16 x float>
671   %3 = bitcast i16 %__U to <16 x i1>
672   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer
673   ret <16 x float> %4
676 define <8 x double> @test_mm512_mask_and_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
677 ; KNL-LABEL: test_mm512_mask_and_pd:
678 ; KNL:       ## %bb.0: ## %entry
679 ; KNL-NEXT:    kmovw %edi, %k1
680 ; KNL-NEXT:    vpandq %zmm1, %zmm2, %zmm0 {%k1}
681 ; KNL-NEXT:    retq
683 ; SKX-LABEL: test_mm512_mask_and_pd:
684 ; SKX:       ## %bb.0: ## %entry
685 ; SKX-NEXT:    kmovd %edi, %k1
686 ; SKX-NEXT:    vandpd %zmm1, %zmm2, %zmm0 {%k1}
687 ; SKX-NEXT:    retq
688 entry:
689   %0 = bitcast <8 x double> %__A to <8 x i64>
690   %1 = bitcast <8 x double> %__B to <8 x i64>
691   %and.i.i = and <8 x i64> %1, %0
692   %2 = bitcast <8 x i64> %and.i.i to <8 x double>
693   %3 = bitcast i8 %__U to <8 x i1>
694   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W
695   ret <8 x double> %4
698 define <8 x double> @test_mm512_maskz_and_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
699 ; KNL-LABEL: test_mm512_maskz_and_pd:
700 ; KNL:       ## %bb.0: ## %entry
701 ; KNL-NEXT:    kmovw %edi, %k1
702 ; KNL-NEXT:    vpandq %zmm0, %zmm1, %zmm0 {%k1} {z}
703 ; KNL-NEXT:    retq
705 ; SKX-LABEL: test_mm512_maskz_and_pd:
706 ; SKX:       ## %bb.0: ## %entry
707 ; SKX-NEXT:    kmovd %edi, %k1
708 ; SKX-NEXT:    vandpd %zmm0, %zmm1, %zmm0 {%k1} {z}
709 ; SKX-NEXT:    retq
710 entry:
711   %0 = bitcast <8 x double> %__A to <8 x i64>
712   %1 = bitcast <8 x double> %__B to <8 x i64>
713   %and.i.i = and <8 x i64> %1, %0
714   %2 = bitcast <8 x i64> %and.i.i to <8 x double>
715   %3 = bitcast i8 %__U to <8 x i1>
716   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer
717   ret <8 x double> %4
720 define <16 x float> @test_mm512_mask_and_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
721 ; KNL-LABEL: test_mm512_mask_and_ps:
722 ; KNL:       ## %bb.0: ## %entry
723 ; KNL-NEXT:    kmovw %edi, %k1
724 ; KNL-NEXT:    vpandd %zmm1, %zmm2, %zmm0 {%k1}
725 ; KNL-NEXT:    retq
727 ; SKX-LABEL: test_mm512_mask_and_ps:
728 ; SKX:       ## %bb.0: ## %entry
729 ; SKX-NEXT:    kmovd %edi, %k1
730 ; SKX-NEXT:    vandps %zmm1, %zmm2, %zmm0 {%k1}
731 ; SKX-NEXT:    retq
732 entry:
733   %0 = bitcast <16 x float> %__A to <16 x i32>
734   %1 = bitcast <16 x float> %__B to <16 x i32>
735   %and.i.i = and <16 x i32> %1, %0
736   %2 = bitcast <16 x i32> %and.i.i to <16 x float>
737   %3 = bitcast i16 %__U to <16 x i1>
738   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W
739   ret <16 x float> %4
742 define <16 x float> @test_mm512_maskz_and_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
743 ; KNL-LABEL: test_mm512_maskz_and_ps:
744 ; KNL:       ## %bb.0: ## %entry
745 ; KNL-NEXT:    kmovw %edi, %k1
746 ; KNL-NEXT:    vpandd %zmm0, %zmm1, %zmm0 {%k1} {z}
747 ; KNL-NEXT:    retq
749 ; SKX-LABEL: test_mm512_maskz_and_ps:
750 ; SKX:       ## %bb.0: ## %entry
751 ; SKX-NEXT:    kmovd %edi, %k1
752 ; SKX-NEXT:    vandps %zmm0, %zmm1, %zmm0 {%k1} {z}
753 ; SKX-NEXT:    retq
754 entry:
755   %0 = bitcast <16 x float> %__A to <16 x i32>
756   %1 = bitcast <16 x float> %__B to <16 x i32>
757   %and.i.i = and <16 x i32> %1, %0
758   %2 = bitcast <16 x i32> %and.i.i to <16 x float>
759   %3 = bitcast i16 %__U to <16 x i1>
760   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer
761   ret <16 x float> %4
764 define <8 x double> @test_mm512_mask_andnot_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
765 ; KNL-LABEL: test_mm512_mask_andnot_pd:
766 ; KNL:       ## %bb.0: ## %entry
767 ; KNL-NEXT:    kmovw %edi, %k1
768 ; KNL-NEXT:    vpandnq %zmm2, %zmm1, %zmm0 {%k1}
769 ; KNL-NEXT:    retq
771 ; SKX-LABEL: test_mm512_mask_andnot_pd:
772 ; SKX:       ## %bb.0: ## %entry
773 ; SKX-NEXT:    kmovd %edi, %k1
774 ; SKX-NEXT:    vandnpd %zmm2, %zmm1, %zmm0 {%k1}
775 ; SKX-NEXT:    retq
776 entry:
777   %0 = bitcast <8 x double> %__A to <8 x i64>
778   %neg.i.i = xor <8 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
779   %1 = bitcast <8 x double> %__B to <8 x i64>
780   %and.i.i = and <8 x i64> %1, %neg.i.i
781   %2 = bitcast <8 x i64> %and.i.i to <8 x double>
782   %3 = bitcast i8 %__U to <8 x i1>
783   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W
784   ret <8 x double> %4
787 define <8 x double> @test_mm512_maskz_andnot_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {
788 ; KNL-LABEL: test_mm512_maskz_andnot_pd:
789 ; KNL:       ## %bb.0: ## %entry
790 ; KNL-NEXT:    kmovw %edi, %k1
791 ; KNL-NEXT:    vpandnq %zmm1, %zmm0, %zmm0 {%k1} {z}
792 ; KNL-NEXT:    retq
794 ; SKX-LABEL: test_mm512_maskz_andnot_pd:
795 ; SKX:       ## %bb.0: ## %entry
796 ; SKX-NEXT:    kmovd %edi, %k1
797 ; SKX-NEXT:    vandnpd %zmm1, %zmm0, %zmm0 {%k1} {z}
798 ; SKX-NEXT:    retq
799 entry:
800   %0 = bitcast <8 x double> %__A to <8 x i64>
801   %neg.i.i = xor <8 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
802   %1 = bitcast <8 x double> %__B to <8 x i64>
803   %and.i.i = and <8 x i64> %1, %neg.i.i
804   %2 = bitcast <8 x i64> %and.i.i to <8 x double>
805   %3 = bitcast i8 %__U to <8 x i1>
806   %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer
807   ret <8 x double> %4
810 define <16 x float> @test_mm512_mask_andnot_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
811 ; KNL-LABEL: test_mm512_mask_andnot_ps:
812 ; KNL:       ## %bb.0: ## %entry
813 ; KNL-NEXT:    kmovw %edi, %k1
814 ; KNL-NEXT:    vpandnd %zmm2, %zmm1, %zmm0 {%k1}
815 ; KNL-NEXT:    retq
817 ; SKX-LABEL: test_mm512_mask_andnot_ps:
818 ; SKX:       ## %bb.0: ## %entry
819 ; SKX-NEXT:    kmovd %edi, %k1
820 ; SKX-NEXT:    vandnps %zmm2, %zmm1, %zmm0 {%k1}
821 ; SKX-NEXT:    retq
822 entry:
823   %0 = bitcast <16 x float> %__A to <16 x i32>
824   %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>
825   %1 = bitcast <16 x float> %__B to <16 x i32>
826   %and.i.i = and <16 x i32> %1, %neg.i.i
827   %2 = bitcast <16 x i32> %and.i.i to <16 x float>
828   %3 = bitcast i16 %__U to <16 x i1>
829   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W
830   ret <16 x float> %4
833 define <16 x float> @test_mm512_maskz_andnot_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {
834 ; KNL-LABEL: test_mm512_maskz_andnot_ps:
835 ; KNL:       ## %bb.0: ## %entry
836 ; KNL-NEXT:    kmovw %edi, %k1
837 ; KNL-NEXT:    vpandnd %zmm1, %zmm0, %zmm0 {%k1} {z}
838 ; KNL-NEXT:    retq
840 ; SKX-LABEL: test_mm512_maskz_andnot_ps:
841 ; SKX:       ## %bb.0: ## %entry
842 ; SKX-NEXT:    kmovd %edi, %k1
843 ; SKX-NEXT:    vandnps %zmm1, %zmm0, %zmm0 {%k1} {z}
844 ; SKX-NEXT:    retq
845 entry:
846   %0 = bitcast <16 x float> %__A to <16 x i32>
847   %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>
848   %1 = bitcast <16 x float> %__B to <16 x i32>
849   %and.i.i = and <16 x i32> %1, %neg.i.i
850   %2 = bitcast <16 x i32> %and.i.i to <16 x float>
851   %3 = bitcast i16 %__U to <16 x i1>
852   %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer
853   ret <16 x float> %4
856 define <16 x i32> @ternlog_and_andn(<16 x i32> %x, <16 x i32> %y, <16 x i32> %z) {
857 ; ALL-LABEL: ternlog_and_andn:
858 ; ALL:       ## %bb.0:
859 ; ALL-NEXT:    vpternlogd $8, %zmm1, %zmm2, %zmm0
860 ; ALL-NEXT:    retq
861   %a = xor <16 x i32> %x, <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>
862   %b = and <16 x i32> %y, %a
863   %c = and <16 x i32> %b, %z
864   ret <16 x i32> %c
867 define <16 x i32> @ternlog_or_andn(<16 x i32> %x, <16 x i32> %y, <16 x i32> %z) {
868 ; ALL-LABEL: ternlog_or_andn:
869 ; ALL:       ## %bb.0:
870 ; ALL-NEXT:    vpternlogd $206, %zmm1, %zmm2, %zmm0
871 ; ALL-NEXT:    retq
872   %a = xor <16 x i32> %x, <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>
873   %b = and <16 x i32> %y, %a
874   %c = or <16 x i32> %b, %z
875   ret <16 x i32> %c
878 define <16 x i32> @ternlog_xor_andn(<16 x i32> %x, <16 x i32> %y, <16 x i32> %z) {
879 ; ALL-LABEL: ternlog_xor_andn:
880 ; ALL:       ## %bb.0:
881 ; ALL-NEXT:    vpternlogd $198, %zmm1, %zmm2, %zmm0
882 ; ALL-NEXT:    retq
883   %a = xor <16 x i32> %x, <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>
884   %b = and <16 x i32> %y, %a
885   %c = xor <16 x i32> %b, %z
886   ret <16 x i32> %c
889 define <16 x i32> @ternlog_or_and_mask(<16 x i32> %x, <16 x i32> %y) {
890 ; ALL-LABEL: ternlog_or_and_mask:
891 ; ALL:       ## %bb.0:
892 ; ALL-NEXT:    vpternlogd $236, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm0
893 ; ALL-NEXT:    retq
894   %a = and <16 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
895   %b = or <16 x i32> %a, %y
896   ret <16 x i32> %b
899 define <8 x i64> @ternlog_xor_and_mask(<8 x i64> %x, <8 x i64> %y) {
900 ; ALL-LABEL: ternlog_xor_and_mask:
901 ; ALL:       ## %bb.0:
902 ; ALL-NEXT:    vpternlogq $108, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm0
903 ; ALL-NEXT:    retq
904   %a = and <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
905   %b = xor <8 x i64> %a, %y
906   ret <8 x i64> %b
909 define <16 x i32> @ternlog_maskz_or_and_mask(<16 x i32> %x, <16 x i32> %y, <16 x i32> %mask) {
910 ; KNL-LABEL: ternlog_maskz_or_and_mask:
911 ; KNL:       ## %bb.0:
912 ; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3
913 ; KNL-NEXT:    vpcmpgtd %zmm2, %zmm3, %k1
914 ; KNL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
915 ; KNL-NEXT:    vpord %zmm1, %zmm0, %zmm0 {%k1} {z}
916 ; KNL-NEXT:    retq
918 ; SKX-LABEL: ternlog_maskz_or_and_mask:
919 ; SKX:       ## %bb.0:
920 ; SKX-NEXT:    vpmovd2m %zmm2, %k1
921 ; SKX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
922 ; SKX-NEXT:    vorps %zmm1, %zmm0, %zmm0 {%k1} {z}
923 ; SKX-NEXT:    retq
924   %m = icmp slt <16 x i32> %mask, zeroinitializer
925   %a = and <16 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
926   %b = or <16 x i32> %a, %y
927   %c = select <16 x i1> %m, <16 x i32> %b, <16 x i32> zeroinitializer
928   ret <16 x i32> %c
931 define <8 x i64> @ternlog_maskz_xor_and_mask(<8 x i64> %x, <8 x i64> %y, <8 x i64> %mask) {
932 ; KNL-LABEL: ternlog_maskz_xor_and_mask:
933 ; KNL:       ## %bb.0:
934 ; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3
935 ; KNL-NEXT:    vpcmpgtq %zmm2, %zmm3, %k1
936 ; KNL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
937 ; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0 {%k1} {z}
938 ; KNL-NEXT:    retq
940 ; SKX-LABEL: ternlog_maskz_xor_and_mask:
941 ; SKX:       ## %bb.0:
942 ; SKX-NEXT:    vpmovq2m %zmm2, %k1
943 ; SKX-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
944 ; SKX-NEXT:    vxorpd %zmm1, %zmm0, %zmm0 {%k1} {z}
945 ; SKX-NEXT:    retq
946   %m = icmp slt <8 x i64> %mask, zeroinitializer
947   %a = and <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
948   %b = xor <8 x i64> %a, %y
949   %c = select <8 x i1> %m, <8 x i64> %b, <8 x i64> zeroinitializer
950   ret <8 x i64> %c
953 define <16 x i32> @ternlog_maskx_or_and_mask(<16 x i32> %x, <16 x i32> %y, <16 x i32> %mask) {
954 ; KNL-LABEL: ternlog_maskx_or_and_mask:
955 ; KNL:       ## %bb.0:
956 ; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3
957 ; KNL-NEXT:    vpcmpgtd %zmm2, %zmm3, %k1
958 ; KNL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm2
959 ; KNL-NEXT:    vpord %zmm1, %zmm2, %zmm0 {%k1}
960 ; KNL-NEXT:    retq
962 ; SKX-LABEL: ternlog_maskx_or_and_mask:
963 ; SKX:       ## %bb.0:
964 ; SKX-NEXT:    vpmovd2m %zmm2, %k1
965 ; SKX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm2
966 ; SKX-NEXT:    vorps %zmm1, %zmm2, %zmm0 {%k1}
967 ; SKX-NEXT:    retq
968   %m = icmp slt <16 x i32> %mask, zeroinitializer
969   %a = and <16 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
970   %b = or <16 x i32> %a, %y
971   %c = select <16 x i1> %m, <16 x i32> %b, <16 x i32> %x
972   ret <16 x i32> %c
975 define <16 x i32> @ternlog_masky_or_and_mask(<16 x i32> %x, <16 x i32> %y, <16 x i32> %mask) {
976 ; KNL-LABEL: ternlog_masky_or_and_mask:
977 ; KNL:       ## %bb.0:
978 ; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3
979 ; KNL-NEXT:    vpcmpgtd %zmm2, %zmm3, %k1
980 ; KNL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
981 ; KNL-NEXT:    vpord %zmm1, %zmm0, %zmm1 {%k1}
982 ; KNL-NEXT:    vmovdqa64 %zmm1, %zmm0
983 ; KNL-NEXT:    retq
985 ; SKX-LABEL: ternlog_masky_or_and_mask:
986 ; SKX:       ## %bb.0:
987 ; SKX-NEXT:    vpmovd2m %zmm2, %k1
988 ; SKX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
989 ; SKX-NEXT:    vorps %zmm1, %zmm0, %zmm1 {%k1}
990 ; SKX-NEXT:    vmovaps %zmm1, %zmm0
991 ; SKX-NEXT:    retq
992   %m = icmp slt <16 x i32> %mask, zeroinitializer
993   %a = and <16 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
994   %b = or <16 x i32> %a, %y
995   %c = select <16 x i1> %m, <16 x i32> %b, <16 x i32> %y
996   ret <16 x i32> %c
999 define <8 x i64> @ternlog_maskx_xor_and_mask(<8 x i64> %x, <8 x i64> %y, <8 x i64> %mask) {
1000 ; KNL-LABEL: ternlog_maskx_xor_and_mask:
1001 ; KNL:       ## %bb.0:
1002 ; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1003 ; KNL-NEXT:    vpcmpgtq %zmm2, %zmm3, %k1
1004 ; KNL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm2
1005 ; KNL-NEXT:    vpxorq %zmm1, %zmm2, %zmm0 {%k1}
1006 ; KNL-NEXT:    retq
1008 ; SKX-LABEL: ternlog_maskx_xor_and_mask:
1009 ; SKX:       ## %bb.0:
1010 ; SKX-NEXT:    vpmovq2m %zmm2, %k1
1011 ; SKX-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm2
1012 ; SKX-NEXT:    vxorpd %zmm1, %zmm2, %zmm0 {%k1}
1013 ; SKX-NEXT:    retq
1014   %m = icmp slt <8 x i64> %mask, zeroinitializer
1015   %a = and <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
1016   %b = xor <8 x i64> %a, %y
1017   %c = select <8 x i1> %m, <8 x i64> %b, <8 x i64> %x
1018   ret <8 x i64> %c
1021 define <8 x i64> @ternlog_masky_xor_and_mask(<8 x i64> %x, <8 x i64> %y, <8 x i64> %mask) {
1022 ; KNL-LABEL: ternlog_masky_xor_and_mask:
1023 ; KNL:       ## %bb.0:
1024 ; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1025 ; KNL-NEXT:    vpcmpgtq %zmm2, %zmm3, %k1
1026 ; KNL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1027 ; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm1 {%k1}
1028 ; KNL-NEXT:    vmovdqa64 %zmm1, %zmm0
1029 ; KNL-NEXT:    retq
1031 ; SKX-LABEL: ternlog_masky_xor_and_mask:
1032 ; SKX:       ## %bb.0:
1033 ; SKX-NEXT:    vpmovq2m %zmm2, %k1
1034 ; SKX-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1035 ; SKX-NEXT:    vxorpd %zmm1, %zmm0, %zmm1 {%k1}
1036 ; SKX-NEXT:    vmovapd %zmm1, %zmm0
1037 ; SKX-NEXT:    retq
1038   %m = icmp slt <8 x i64> %mask, zeroinitializer
1039   %a = and <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
1040   %b = xor <8 x i64> %a, %y
1041   %c = select <8 x i1> %m, <8 x i64> %b, <8 x i64> %y
1042   ret <8 x i64> %c