]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/X86/avx512vl-logic.ll
Vendor import of llvm trunk r321017:
[FreeBSD/FreeBSD.git] / test / CodeGen / X86 / avx512vl-logic.ll
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512vl | FileCheck %s --check-prefix=CHECK --check-prefix=KNL
3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx -mattr=+avx512vl | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
4
5 ; 256-bit
6
7 define <8 x i32> @vpandd256(<8 x i32> %a, <8 x i32> %b) nounwind uwtable readnone ssp {
8 ; CHECK-LABEL: vpandd256:
9 ; CHECK:       ## %bb.0: ## %entry
10 ; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to8}, %ymm0, %ymm0
11 ; CHECK-NEXT:    vpand %ymm1, %ymm0, %ymm0
12 ; CHECK-NEXT:    retq
13 entry:
14   ; Force the execution domain with an add.
15   %a2 = add <8 x i32> %a, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
16   %x = and <8 x i32> %a2, %b
17   ret <8 x i32> %x
18 }
19
20 define <8 x i32> @vpandnd256(<8 x i32> %a, <8 x i32> %b) nounwind uwtable readnone ssp {
21 ; CHECK-LABEL: vpandnd256:
22 ; CHECK:       ## %bb.0: ## %entry
23 ; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to8}, %ymm0, %ymm1
24 ; CHECK-NEXT:    vpandn %ymm1, %ymm0, %ymm0
25 ; CHECK-NEXT:    retq
26 entry:
27   ; Force the execution domain with an add.
28   %a2 = add <8 x i32> %a, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
29   %b2 = xor <8 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
30   %x = and <8 x i32> %a2, %b2
31   ret <8 x i32> %x
32 }
33
34 define <8 x i32> @vpord256(<8 x i32> %a, <8 x i32> %b) nounwind uwtable readnone ssp {
35 ; CHECK-LABEL: vpord256:
36 ; CHECK:       ## %bb.0: ## %entry
37 ; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to8}, %ymm0, %ymm0
38 ; CHECK-NEXT:    vpor %ymm1, %ymm0, %ymm0
39 ; CHECK-NEXT:    retq
40 entry:
41   ; Force the execution domain with an add.
42   %a2 = add <8 x i32> %a, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
43   %x = or <8 x i32> %a2, %b
44   ret <8 x i32> %x
45 }
46
47 define <8 x i32> @vpxord256(<8 x i32> %a, <8 x i32> %b) nounwind uwtable readnone ssp {
48 ; CHECK-LABEL: vpxord256:
49 ; CHECK:       ## %bb.0: ## %entry
50 ; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to8}, %ymm0, %ymm0
51 ; CHECK-NEXT:    vpxor %ymm1, %ymm0, %ymm0
52 ; CHECK-NEXT:    retq
53 entry:
54   ; Force the execution domain with an add.
55   %a2 = add <8 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
56   %x = xor <8 x i32> %a2, %b
57   ret <8 x i32> %x
58 }
59
60 define <4 x i64> @vpandq256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp {
61 ; CHECK-LABEL: vpandq256:
62 ; CHECK:       ## %bb.0: ## %entry
63 ; CHECK-NEXT:    vpaddq {{.*}}(%rip){1to4}, %ymm0, %ymm0
64 ; CHECK-NEXT:    vpand %ymm1, %ymm0, %ymm0
65 ; CHECK-NEXT:    retq
66 entry:
67   ; Force the execution domain with an add.
68   %a2 = add <4 x i64> %a, <i64 6, i64 6, i64 6, i64 6>
69   %x = and <4 x i64> %a2, %b
70   ret <4 x i64> %x
71 }
72
73 define <4 x i64> @vpandnq256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp {
74 ; CHECK-LABEL: vpandnq256:
75 ; CHECK:       ## %bb.0: ## %entry
76 ; CHECK-NEXT:    vpaddq {{.*}}(%rip){1to4}, %ymm0, %ymm0
77 ; CHECK-NEXT:    vpandn %ymm0, %ymm1, %ymm0
78 ; CHECK-NEXT:    retq
79 entry:
80   ; Force the execution domain with an add.
81   %a2 = add <4 x i64> %a, <i64 7, i64 7, i64 7, i64 7>
82   %b2 = xor <4 x i64> %b, <i64 -1, i64 -1, i64 -1, i64 -1>
83   %x = and <4 x i64> %a2, %b2
84   ret <4 x i64> %x
85 }
86
87 define <4 x i64> @vporq256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp {
88 ; CHECK-LABEL: vporq256:
89 ; CHECK:       ## %bb.0: ## %entry
90 ; CHECK-NEXT:    vpaddq {{.*}}(%rip){1to4}, %ymm0, %ymm0
91 ; CHECK-NEXT:    vpor %ymm1, %ymm0, %ymm0
92 ; CHECK-NEXT:    retq
93 entry:
94   ; Force the execution domain with an add.
95   %a2 = add <4 x i64> %a, <i64 21, i64 21, i64 21, i64 21>
96   %x = or <4 x i64> %a2, %b
97   ret <4 x i64> %x
98 }
99
100 define <4 x i64> @vpxorq256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp {
101 ; CHECK-LABEL: vpxorq256:
102 ; CHECK:       ## %bb.0: ## %entry
103 ; CHECK-NEXT:    vpaddq {{.*}}(%rip){1to4}, %ymm0, %ymm0
104 ; CHECK-NEXT:    vpxor %ymm1, %ymm0, %ymm0
105 ; CHECK-NEXT:    retq
106 entry:
107   ; Force the execution domain with an add.
108   %a2 = add <4 x i64> %a, <i64 22, i64 22, i64 22, i64 22>
109   %x = xor <4 x i64> %a2, %b
110   ret <4 x i64> %x
111 }
112
113 ; 128-bit
114
115 define <4 x i32> @vpandd128(<4 x i32> %a, <4 x i32> %b) nounwind uwtable readnone ssp {
116 ; CHECK-LABEL: vpandd128:
117 ; CHECK:       ## %bb.0: ## %entry
118 ; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to4}, %xmm0, %xmm0
119 ; CHECK-NEXT:    vpand %xmm1, %xmm0, %xmm0
120 ; CHECK-NEXT:    retq
121 entry:
122   ; Force the execution domain with an add.
123   %a2 = add <4 x i32> %a, <i32 8, i32 8, i32 8, i32 8>
124   %x = and <4 x i32> %a2, %b
125   ret <4 x i32> %x
126 }
127
128 define <4 x i32> @vpandnd128(<4 x i32> %a, <4 x i32> %b) nounwind uwtable readnone ssp {
129 ; CHECK-LABEL: vpandnd128:
130 ; CHECK:       ## %bb.0: ## %entry
131 ; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to4}, %xmm0, %xmm0
132 ; CHECK-NEXT:    vpandn %xmm0, %xmm1, %xmm0
133 ; CHECK-NEXT:    retq
134 entry:
135   ; Force the execution domain with an add.
136   %a2 = add <4 x i32> %a, <i32 9, i32 9, i32 9, i32 9>
137   %b2 = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
138   %x = and <4 x i32> %a2, %b2
139   ret <4 x i32> %x
140 }
141
142 define <4 x i32> @vpord128(<4 x i32> %a, <4 x i32> %b) nounwind uwtable readnone ssp {
143 ; CHECK-LABEL: vpord128:
144 ; CHECK:       ## %bb.0: ## %entry
145 ; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to4}, %xmm0, %xmm0
146 ; CHECK-NEXT:    vpor %xmm1, %xmm0, %xmm0
147 ; CHECK-NEXT:    retq
148 entry:
149   ; Force the execution domain with an add.
150   %a2 = add <4 x i32> %a, <i32 10, i32 10, i32 10, i32 10>
151   %x = or <4 x i32> %a2, %b
152   ret <4 x i32> %x
153 }
154
155 define <4 x i32> @vpxord128(<4 x i32> %a, <4 x i32> %b) nounwind uwtable readnone ssp {
156 ; CHECK-LABEL: vpxord128:
157 ; CHECK:       ## %bb.0: ## %entry
158 ; CHECK-NEXT:    vpaddd {{.*}}(%rip){1to4}, %xmm0, %xmm0
159 ; CHECK-NEXT:    vpxor %xmm1, %xmm0, %xmm0
160 ; CHECK-NEXT:    retq
161 entry:
162   ; Force the execution domain with an add.
163   %a2 = add <4 x i32> %a, <i32 11, i32 11, i32 11, i32 11>
164   %x = xor <4 x i32> %a2, %b
165   ret <4 x i32> %x
166 }
167
168 define <2 x i64> @vpandq128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
169 ; CHECK-LABEL: vpandq128:
170 ; CHECK:       ## %bb.0: ## %entry
171 ; CHECK-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm0
172 ; CHECK-NEXT:    vpand %xmm1, %xmm0, %xmm0
173 ; CHECK-NEXT:    retq
174 entry:
175   ; Force the execution domain with an add.
176   %a2 = add <2 x i64> %a, <i64 12, i64 12>
177   %x = and <2 x i64> %a2, %b
178   ret <2 x i64> %x
179 }
180
181 define <2 x i64> @vpandnq128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
182 ; CHECK-LABEL: vpandnq128:
183 ; CHECK:       ## %bb.0: ## %entry
184 ; CHECK-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm0
185 ; CHECK-NEXT:    vpandn %xmm0, %xmm1, %xmm0
186 ; CHECK-NEXT:    retq
187 entry:
188   ; Force the execution domain with an add.
189   %a2 = add <2 x i64> %a, <i64 13, i64 13>
190   %b2 = xor <2 x i64> %b, <i64 -1, i64 -1>
191   %x = and <2 x i64> %a2, %b2
192   ret <2 x i64> %x
193 }
194
195 define <2 x i64> @vporq128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
196 ; CHECK-LABEL: vporq128:
197 ; CHECK:       ## %bb.0: ## %entry
198 ; CHECK-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm0
199 ; CHECK-NEXT:    vpor %xmm1, %xmm0, %xmm0
200 ; CHECK-NEXT:    retq
201 entry:
202   ; Force the execution domain with an add.
203   %a2 = add <2 x i64> %a, <i64 14, i64 14>
204   %x = or <2 x i64> %a2, %b
205   ret <2 x i64> %x
206 }
207
208 define <2 x i64> @vpxorq128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
209 ; CHECK-LABEL: vpxorq128:
210 ; CHECK:       ## %bb.0: ## %entry
211 ; CHECK-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm0
212 ; CHECK-NEXT:    vpxor %xmm1, %xmm0, %xmm0
213 ; CHECK-NEXT:    retq
214 entry:
215   ; Force the execution domain with an add.
216   %a2 = add <2 x i64> %a, <i64 15, i64 15>
217   %x = xor <2 x i64> %a2, %b
218   ret <2 x i64> %x
219 }
220
221
222 define <4 x double> @test_mm256_mask_andnot_pd(<4 x double> %__W, i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {
223 ; KNL-LABEL: test_mm256_mask_andnot_pd:
224 ; KNL:       ## %bb.0: ## %entry
225 ; KNL-NEXT:    kmovw %edi, %k1
226 ; KNL-NEXT:    vpandnq %ymm2, %ymm1, %ymm0 {%k1}
227 ; KNL-NEXT:    retq
228 ;
229 ; SKX-LABEL: test_mm256_mask_andnot_pd:
230 ; SKX:       ## %bb.0: ## %entry
231 ; SKX-NEXT:    kmovd %edi, %k1
232 ; SKX-NEXT:    vandnpd %ymm2, %ymm1, %ymm0 {%k1}
233 ; SKX-NEXT:    retq
234 entry:
235   %0 = bitcast <4 x double> %__A to <4 x i64>
236   %neg.i.i = xor <4 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1>
237   %1 = bitcast <4 x double> %__B to <4 x i64>
238   %and.i.i = and <4 x i64> %1, %neg.i.i
239   %2 = bitcast <4 x i64> %and.i.i to <4 x double>
240   %3 = bitcast i8 %__U to <8 x i1>
241   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
242   %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> %__W
243   ret <4 x double> %4
244 }
245
246 define <4 x double> @test_mm256_maskz_andnot_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {
247 ; KNL-LABEL: test_mm256_maskz_andnot_pd:
248 ; KNL:       ## %bb.0: ## %entry
249 ; KNL-NEXT:    kmovw %edi, %k1
250 ; KNL-NEXT:    vpandnq %ymm1, %ymm0, %ymm0 {%k1} {z}
251 ; KNL-NEXT:    retq
252 ;
253 ; SKX-LABEL: test_mm256_maskz_andnot_pd:
254 ; SKX:       ## %bb.0: ## %entry
255 ; SKX-NEXT:    kmovd %edi, %k1
256 ; SKX-NEXT:    vandnpd %ymm1, %ymm0, %ymm0 {%k1} {z}
257 ; SKX-NEXT:    retq
258 entry:
259   %0 = bitcast <4 x double> %__A to <4 x i64>
260   %neg.i.i = xor <4 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1>
261   %1 = bitcast <4 x double> %__B to <4 x i64>
262   %and.i.i = and <4 x i64> %1, %neg.i.i
263   %2 = bitcast <4 x i64> %and.i.i to <4 x double>
264   %3 = bitcast i8 %__U to <8 x i1>
265   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
266   %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> zeroinitializer
267   ret <4 x double> %4
268 }
269
270 define <2 x double> @test_mm_mask_andnot_pd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {
271 ; KNL-LABEL: test_mm_mask_andnot_pd:
272 ; KNL:       ## %bb.0: ## %entry
273 ; KNL-NEXT:    kmovw %edi, %k1
274 ; KNL-NEXT:    vpandnq %xmm2, %xmm1, %xmm0 {%k1}
275 ; KNL-NEXT:    retq
276 ;
277 ; SKX-LABEL: test_mm_mask_andnot_pd:
278 ; SKX:       ## %bb.0: ## %entry
279 ; SKX-NEXT:    kmovd %edi, %k1
280 ; SKX-NEXT:    vandnpd %xmm2, %xmm1, %xmm0 {%k1}
281 ; SKX-NEXT:    retq
282 entry:
283   %0 = bitcast <2 x double> %__A to <2 x i64>
284   %neg.i.i = xor <2 x i64> %0, <i64 -1, i64 -1>
285   %1 = bitcast <2 x double> %__B to <2 x i64>
286   %and.i.i = and <2 x i64> %1, %neg.i.i
287   %2 = bitcast <2 x i64> %and.i.i to <2 x double>
288   %3 = bitcast i8 %__U to <8 x i1>
289   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
290   %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> %__W
291   ret <2 x double> %4
292 }
293
294 define <2 x double> @test_mm_maskz_andnot_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {
295 ; KNL-LABEL: test_mm_maskz_andnot_pd:
296 ; KNL:       ## %bb.0: ## %entry
297 ; KNL-NEXT:    kmovw %edi, %k1
298 ; KNL-NEXT:    vpandnq %xmm1, %xmm0, %xmm0 {%k1} {z}
299 ; KNL-NEXT:    retq
300 ;
301 ; SKX-LABEL: test_mm_maskz_andnot_pd:
302 ; SKX:       ## %bb.0: ## %entry
303 ; SKX-NEXT:    kmovd %edi, %k1
304 ; SKX-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 {%k1} {z}
305 ; SKX-NEXT:    retq
306 entry:
307   %0 = bitcast <2 x double> %__A to <2 x i64>
308   %neg.i.i = xor <2 x i64> %0, <i64 -1, i64 -1>
309   %1 = bitcast <2 x double> %__B to <2 x i64>
310   %and.i.i = and <2 x i64> %1, %neg.i.i
311   %2 = bitcast <2 x i64> %and.i.i to <2 x double>
312   %3 = bitcast i8 %__U to <8 x i1>
313   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
314   %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> zeroinitializer
315   ret <2 x double> %4
316 }
317
318 define <8 x float> @test_mm256_mask_andnot_ps(<8 x float> %__W, i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {
319 ; KNL-LABEL: test_mm256_mask_andnot_ps:
320 ; KNL:       ## %bb.0: ## %entry
321 ; KNL-NEXT:    kmovw %edi, %k1
322 ; KNL-NEXT:    vpandnd %ymm2, %ymm1, %ymm0 {%k1}
323 ; KNL-NEXT:    retq
324 ;
325 ; SKX-LABEL: test_mm256_mask_andnot_ps:
326 ; SKX:       ## %bb.0: ## %entry
327 ; SKX-NEXT:    kmovd %edi, %k1
328 ; SKX-NEXT:    vandnps %ymm2, %ymm1, %ymm0 {%k1}
329 ; SKX-NEXT:    retq
330 entry:
331   %0 = bitcast <8 x float> %__A to <8 x i32>
332   %neg.i.i = xor <8 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
333   %1 = bitcast <8 x float> %__B to <8 x i32>
334   %and.i.i = and <8 x i32> %1, %neg.i.i
335   %2 = bitcast <8 x i32> %and.i.i to <8 x float>
336   %3 = bitcast i8 %__U to <8 x i1>
337   %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> %__W
338   ret <8 x float> %4
339 }
340
341 define <8 x float> @test_mm256_maskz_andnot_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {
342 ; KNL-LABEL: test_mm256_maskz_andnot_ps:
343 ; KNL:       ## %bb.0: ## %entry
344 ; KNL-NEXT:    kmovw %edi, %k1
345 ; KNL-NEXT:    vpandnd %ymm1, %ymm0, %ymm0 {%k1} {z}
346 ; KNL-NEXT:    retq
347 ;
348 ; SKX-LABEL: test_mm256_maskz_andnot_ps:
349 ; SKX:       ## %bb.0: ## %entry
350 ; SKX-NEXT:    kmovd %edi, %k1
351 ; SKX-NEXT:    vandnps %ymm1, %ymm0, %ymm0 {%k1} {z}
352 ; SKX-NEXT:    retq
353 entry:
354   %0 = bitcast <8 x float> %__A to <8 x i32>
355   %neg.i.i = xor <8 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
356   %1 = bitcast <8 x float> %__B to <8 x i32>
357   %and.i.i = and <8 x i32> %1, %neg.i.i
358   %2 = bitcast <8 x i32> %and.i.i to <8 x float>
359   %3 = bitcast i8 %__U to <8 x i1>
360   %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> zeroinitializer
361   ret <8 x float> %4
362 }
363
364 define <4 x float> @test_mm_mask_andnot_ps(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {
365 ; KNL-LABEL: test_mm_mask_andnot_ps:
366 ; KNL:       ## %bb.0: ## %entry
367 ; KNL-NEXT:    kmovw %edi, %k1
368 ; KNL-NEXT:    vpandnd %xmm2, %xmm1, %xmm0 {%k1}
369 ; KNL-NEXT:    retq
370 ;
371 ; SKX-LABEL: test_mm_mask_andnot_ps:
372 ; SKX:       ## %bb.0: ## %entry
373 ; SKX-NEXT:    kmovd %edi, %k1
374 ; SKX-NEXT:    vandnps %xmm2, %xmm1, %xmm0 {%k1}
375 ; SKX-NEXT:    retq
376 entry:
377   %0 = bitcast <4 x float> %__A to <4 x i32>
378   %neg.i.i = xor <4 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1>
379   %1 = bitcast <4 x float> %__B to <4 x i32>
380   %and.i.i = and <4 x i32> %1, %neg.i.i
381   %2 = bitcast <4 x i32> %and.i.i to <4 x float>
382   %3 = bitcast i8 %__U to <8 x i1>
383   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
384   %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> %__W
385   ret <4 x float> %4
386 }
387
388 define <4 x float> @test_mm_maskz_andnot_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {
389 ; KNL-LABEL: test_mm_maskz_andnot_ps:
390 ; KNL:       ## %bb.0: ## %entry
391 ; KNL-NEXT:    kmovw %edi, %k1
392 ; KNL-NEXT:    vpandnd %xmm1, %xmm0, %xmm0 {%k1} {z}
393 ; KNL-NEXT:    retq
394 ;
395 ; SKX-LABEL: test_mm_maskz_andnot_ps:
396 ; SKX:       ## %bb.0: ## %entry
397 ; SKX-NEXT:    kmovd %edi, %k1
398 ; SKX-NEXT:    vandnps %xmm1, %xmm0, %xmm0 {%k1} {z}
399 ; SKX-NEXT:    retq
400 entry:
401   %0 = bitcast <4 x float> %__A to <4 x i32>
402   %neg.i.i = xor <4 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1>
403   %1 = bitcast <4 x float> %__B to <4 x i32>
404   %and.i.i = and <4 x i32> %1, %neg.i.i
405   %2 = bitcast <4 x i32> %and.i.i to <4 x float>
406   %3 = bitcast i8 %__U to <8 x i1>
407   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
408   %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> zeroinitializer
409   ret <4 x float> %4
410 }
411
412 define <4 x double> @test_mm256_mask_and_pd(<4 x double> %__W, i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {
413 ; KNL-LABEL: test_mm256_mask_and_pd:
414 ; KNL:       ## %bb.0: ## %entry
415 ; KNL-NEXT:    kmovw %edi, %k1
416 ; KNL-NEXT:    vpandq %ymm1, %ymm2, %ymm0 {%k1}
417 ; KNL-NEXT:    retq
418 ;
419 ; SKX-LABEL: test_mm256_mask_and_pd:
420 ; SKX:       ## %bb.0: ## %entry
421 ; SKX-NEXT:    kmovd %edi, %k1
422 ; SKX-NEXT:    vandpd %ymm1, %ymm2, %ymm0 {%k1}
423 ; SKX-NEXT:    retq
424 entry:
425   %0 = bitcast <4 x double> %__A to <4 x i64>
426   %1 = bitcast <4 x double> %__B to <4 x i64>
427   %and.i.i = and <4 x i64> %1, %0
428   %2 = bitcast <4 x i64> %and.i.i to <4 x double>
429   %3 = bitcast i8 %__U to <8 x i1>
430   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
431   %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> %__W
432   ret <4 x double> %4
433 }
434
435 define <4 x double> @test_mm256_maskz_and_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {
436 ; KNL-LABEL: test_mm256_maskz_and_pd:
437 ; KNL:       ## %bb.0: ## %entry
438 ; KNL-NEXT:    kmovw %edi, %k1
439 ; KNL-NEXT:    vpandq %ymm0, %ymm1, %ymm0 {%k1} {z}
440 ; KNL-NEXT:    retq
441 ;
442 ; SKX-LABEL: test_mm256_maskz_and_pd:
443 ; SKX:       ## %bb.0: ## %entry
444 ; SKX-NEXT:    kmovd %edi, %k1
445 ; SKX-NEXT:    vandpd %ymm0, %ymm1, %ymm0 {%k1} {z}
446 ; SKX-NEXT:    retq
447 entry:
448   %0 = bitcast <4 x double> %__A to <4 x i64>
449   %1 = bitcast <4 x double> %__B to <4 x i64>
450   %and.i.i = and <4 x i64> %1, %0
451   %2 = bitcast <4 x i64> %and.i.i to <4 x double>
452   %3 = bitcast i8 %__U to <8 x i1>
453   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
454   %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> zeroinitializer
455   ret <4 x double> %4
456 }
457
458 define <2 x double> @test_mm_mask_and_pd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {
459 ; KNL-LABEL: test_mm_mask_and_pd:
460 ; KNL:       ## %bb.0: ## %entry
461 ; KNL-NEXT:    kmovw %edi, %k1
462 ; KNL-NEXT:    vpandq %xmm1, %xmm2, %xmm0 {%k1}
463 ; KNL-NEXT:    retq
464 ;
465 ; SKX-LABEL: test_mm_mask_and_pd:
466 ; SKX:       ## %bb.0: ## %entry
467 ; SKX-NEXT:    kmovd %edi, %k1
468 ; SKX-NEXT:    vandpd %xmm1, %xmm2, %xmm0 {%k1}
469 ; SKX-NEXT:    retq
470 entry:
471   %0 = bitcast <2 x double> %__A to <2 x i64>
472   %1 = bitcast <2 x double> %__B to <2 x i64>
473   %and.i.i = and <2 x i64> %1, %0
474   %2 = bitcast <2 x i64> %and.i.i to <2 x double>
475   %3 = bitcast i8 %__U to <8 x i1>
476   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
477   %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> %__W
478   ret <2 x double> %4
479 }
480
481 define <2 x double> @test_mm_maskz_and_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {
482 ; KNL-LABEL: test_mm_maskz_and_pd:
483 ; KNL:       ## %bb.0: ## %entry
484 ; KNL-NEXT:    kmovw %edi, %k1
485 ; KNL-NEXT:    vpandq %xmm0, %xmm1, %xmm0 {%k1} {z}
486 ; KNL-NEXT:    retq
487 ;
488 ; SKX-LABEL: test_mm_maskz_and_pd:
489 ; SKX:       ## %bb.0: ## %entry
490 ; SKX-NEXT:    kmovd %edi, %k1
491 ; SKX-NEXT:    vandpd %xmm0, %xmm1, %xmm0 {%k1} {z}
492 ; SKX-NEXT:    retq
493 entry:
494   %0 = bitcast <2 x double> %__A to <2 x i64>
495   %1 = bitcast <2 x double> %__B to <2 x i64>
496   %and.i.i = and <2 x i64> %1, %0
497   %2 = bitcast <2 x i64> %and.i.i to <2 x double>
498   %3 = bitcast i8 %__U to <8 x i1>
499   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
500   %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> zeroinitializer
501   ret <2 x double> %4
502 }
503
504 define <8 x float> @test_mm256_mask_and_ps(<8 x float> %__W, i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {
505 ; KNL-LABEL: test_mm256_mask_and_ps:
506 ; KNL:       ## %bb.0: ## %entry
507 ; KNL-NEXT:    kmovw %edi, %k1
508 ; KNL-NEXT:    vpandd %ymm1, %ymm2, %ymm0 {%k1}
509 ; KNL-NEXT:    retq
510 ;
511 ; SKX-LABEL: test_mm256_mask_and_ps:
512 ; SKX:       ## %bb.0: ## %entry
513 ; SKX-NEXT:    kmovd %edi, %k1
514 ; SKX-NEXT:    vandps %ymm1, %ymm2, %ymm0 {%k1}
515 ; SKX-NEXT:    retq
516 entry:
517   %0 = bitcast <8 x float> %__A to <8 x i32>
518   %1 = bitcast <8 x float> %__B to <8 x i32>
519   %and.i.i = and <8 x i32> %1, %0
520   %2 = bitcast <8 x i32> %and.i.i to <8 x float>
521   %3 = bitcast i8 %__U to <8 x i1>
522   %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> %__W
523   ret <8 x float> %4
524 }
525
526 define <8 x float> @test_mm256_maskz_and_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {
527 ; KNL-LABEL: test_mm256_maskz_and_ps:
528 ; KNL:       ## %bb.0: ## %entry
529 ; KNL-NEXT:    kmovw %edi, %k1
530 ; KNL-NEXT:    vpandd %ymm0, %ymm1, %ymm0 {%k1} {z}
531 ; KNL-NEXT:    retq
532 ;
533 ; SKX-LABEL: test_mm256_maskz_and_ps:
534 ; SKX:       ## %bb.0: ## %entry
535 ; SKX-NEXT:    kmovd %edi, %k1
536 ; SKX-NEXT:    vandps %ymm0, %ymm1, %ymm0 {%k1} {z}
537 ; SKX-NEXT:    retq
538 entry:
539   %0 = bitcast <8 x float> %__A to <8 x i32>
540   %1 = bitcast <8 x float> %__B to <8 x i32>
541   %and.i.i = and <8 x i32> %1, %0
542   %2 = bitcast <8 x i32> %and.i.i to <8 x float>
543   %3 = bitcast i8 %__U to <8 x i1>
544   %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> zeroinitializer
545   ret <8 x float> %4
546 }
547
548 define <4 x float> @test_mm_mask_and_ps(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {
549 ; KNL-LABEL: test_mm_mask_and_ps:
550 ; KNL:       ## %bb.0: ## %entry
551 ; KNL-NEXT:    kmovw %edi, %k1
552 ; KNL-NEXT:    vpandd %xmm1, %xmm2, %xmm0 {%k1}
553 ; KNL-NEXT:    retq
554 ;
555 ; SKX-LABEL: test_mm_mask_and_ps:
556 ; SKX:       ## %bb.0: ## %entry
557 ; SKX-NEXT:    kmovd %edi, %k1
558 ; SKX-NEXT:    vandps %xmm1, %xmm2, %xmm0 {%k1}
559 ; SKX-NEXT:    retq
560 entry:
561   %0 = bitcast <4 x float> %__A to <4 x i32>
562   %1 = bitcast <4 x float> %__B to <4 x i32>
563   %and.i.i = and <4 x i32> %1, %0
564   %2 = bitcast <4 x i32> %and.i.i to <4 x float>
565   %3 = bitcast i8 %__U to <8 x i1>
566   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
567   %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> %__W
568   ret <4 x float> %4
569 }
570
571 define <4 x float> @test_mm_maskz_and_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {
572 ; KNL-LABEL: test_mm_maskz_and_ps:
573 ; KNL:       ## %bb.0: ## %entry
574 ; KNL-NEXT:    kmovw %edi, %k1
575 ; KNL-NEXT:    vpandd %xmm0, %xmm1, %xmm0 {%k1} {z}
576 ; KNL-NEXT:    retq
577 ;
578 ; SKX-LABEL: test_mm_maskz_and_ps:
579 ; SKX:       ## %bb.0: ## %entry
580 ; SKX-NEXT:    kmovd %edi, %k1
581 ; SKX-NEXT:    vandps %xmm0, %xmm1, %xmm0 {%k1} {z}
582 ; SKX-NEXT:    retq
583 entry:
584   %0 = bitcast <4 x float> %__A to <4 x i32>
585   %1 = bitcast <4 x float> %__B to <4 x i32>
586   %and.i.i = and <4 x i32> %1, %0
587   %2 = bitcast <4 x i32> %and.i.i to <4 x float>
588   %3 = bitcast i8 %__U to <8 x i1>
589   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
590   %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> zeroinitializer
591   ret <4 x float> %4
592 }
593
594 define <4 x double> @test_mm256_mask_xor_pd(<4 x double> %__W, i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {
595 ; KNL-LABEL: test_mm256_mask_xor_pd:
596 ; KNL:       ## %bb.0: ## %entry
597 ; KNL-NEXT:    kmovw %edi, %k1
598 ; KNL-NEXT:    vpxorq %ymm2, %ymm1, %ymm0 {%k1}
599 ; KNL-NEXT:    retq
600 ;
601 ; SKX-LABEL: test_mm256_mask_xor_pd:
602 ; SKX:       ## %bb.0: ## %entry
603 ; SKX-NEXT:    kmovd %edi, %k1
604 ; SKX-NEXT:    vxorpd %ymm2, %ymm1, %ymm0 {%k1}
605 ; SKX-NEXT:    retq
606 entry:
607   %0 = bitcast <4 x double> %__A to <4 x i64>
608   %1 = bitcast <4 x double> %__B to <4 x i64>
609   %xor.i.i = xor <4 x i64> %0, %1
610   %2 = bitcast <4 x i64> %xor.i.i to <4 x double>
611   %3 = bitcast i8 %__U to <8 x i1>
612   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
613   %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> %__W
614   ret <4 x double> %4
615 }
616
617 define <4 x double> @test_mm256_maskz_xor_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {
618 ; KNL-LABEL: test_mm256_maskz_xor_pd:
619 ; KNL:       ## %bb.0: ## %entry
620 ; KNL-NEXT:    kmovw %edi, %k1
621 ; KNL-NEXT:    vpxorq %ymm1, %ymm0, %ymm0 {%k1} {z}
622 ; KNL-NEXT:    retq
623 ;
624 ; SKX-LABEL: test_mm256_maskz_xor_pd:
625 ; SKX:       ## %bb.0: ## %entry
626 ; SKX-NEXT:    kmovd %edi, %k1
627 ; SKX-NEXT:    vxorpd %ymm1, %ymm0, %ymm0 {%k1} {z}
628 ; SKX-NEXT:    retq
629 entry:
630   %0 = bitcast <4 x double> %__A to <4 x i64>
631   %1 = bitcast <4 x double> %__B to <4 x i64>
632   %xor.i.i = xor <4 x i64> %0, %1
633   %2 = bitcast <4 x i64> %xor.i.i to <4 x double>
634   %3 = bitcast i8 %__U to <8 x i1>
635   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
636   %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> zeroinitializer
637   ret <4 x double> %4
638 }
639
640 define <2 x double> @test_mm_mask_xor_pd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {
641 ; KNL-LABEL: test_mm_mask_xor_pd:
642 ; KNL:       ## %bb.0: ## %entry
643 ; KNL-NEXT:    kmovw %edi, %k1
644 ; KNL-NEXT:    vpxorq %xmm2, %xmm1, %xmm0 {%k1}
645 ; KNL-NEXT:    retq
646 ;
647 ; SKX-LABEL: test_mm_mask_xor_pd:
648 ; SKX:       ## %bb.0: ## %entry
649 ; SKX-NEXT:    kmovd %edi, %k1
650 ; SKX-NEXT:    vxorpd %xmm2, %xmm1, %xmm0 {%k1}
651 ; SKX-NEXT:    retq
652 entry:
653   %0 = bitcast <2 x double> %__A to <2 x i64>
654   %1 = bitcast <2 x double> %__B to <2 x i64>
655   %xor.i.i = xor <2 x i64> %0, %1
656   %2 = bitcast <2 x i64> %xor.i.i to <2 x double>
657   %3 = bitcast i8 %__U to <8 x i1>
658   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
659   %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> %__W
660   ret <2 x double> %4
661 }
662
663 define <2 x double> @test_mm_maskz_xor_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {
664 ; KNL-LABEL: test_mm_maskz_xor_pd:
665 ; KNL:       ## %bb.0: ## %entry
666 ; KNL-NEXT:    kmovw %edi, %k1
667 ; KNL-NEXT:    vpxorq %xmm1, %xmm0, %xmm0 {%k1} {z}
668 ; KNL-NEXT:    retq
669 ;
670 ; SKX-LABEL: test_mm_maskz_xor_pd:
671 ; SKX:       ## %bb.0: ## %entry
672 ; SKX-NEXT:    kmovd %edi, %k1
673 ; SKX-NEXT:    vxorpd %xmm1, %xmm0, %xmm0 {%k1} {z}
674 ; SKX-NEXT:    retq
675 entry:
676   %0 = bitcast <2 x double> %__A to <2 x i64>
677   %1 = bitcast <2 x double> %__B to <2 x i64>
678   %xor.i.i = xor <2 x i64> %0, %1
679   %2 = bitcast <2 x i64> %xor.i.i to <2 x double>
680   %3 = bitcast i8 %__U to <8 x i1>
681   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
682   %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> zeroinitializer
683   ret <2 x double> %4
684 }
685
686 define <8 x float> @test_mm256_mask_xor_ps(<8 x float> %__W, i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {
687 ; KNL-LABEL: test_mm256_mask_xor_ps:
688 ; KNL:       ## %bb.0: ## %entry
689 ; KNL-NEXT:    kmovw %edi, %k1
690 ; KNL-NEXT:    vpxord %ymm2, %ymm1, %ymm0 {%k1}
691 ; KNL-NEXT:    retq
692 ;
693 ; SKX-LABEL: test_mm256_mask_xor_ps:
694 ; SKX:       ## %bb.0: ## %entry
695 ; SKX-NEXT:    kmovd %edi, %k1
696 ; SKX-NEXT:    vxorps %ymm2, %ymm1, %ymm0 {%k1}
697 ; SKX-NEXT:    retq
698 entry:
699   %0 = bitcast <8 x float> %__A to <8 x i32>
700   %1 = bitcast <8 x float> %__B to <8 x i32>
701   %xor.i.i = xor <8 x i32> %0, %1
702   %2 = bitcast <8 x i32> %xor.i.i to <8 x float>
703   %3 = bitcast i8 %__U to <8 x i1>
704   %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> %__W
705   ret <8 x float> %4
706 }
707
708 define <8 x float> @test_mm256_maskz_xor_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {
709 ; KNL-LABEL: test_mm256_maskz_xor_ps:
710 ; KNL:       ## %bb.0: ## %entry
711 ; KNL-NEXT:    kmovw %edi, %k1
712 ; KNL-NEXT:    vpxord %ymm1, %ymm0, %ymm0 {%k1} {z}
713 ; KNL-NEXT:    retq
714 ;
715 ; SKX-LABEL: test_mm256_maskz_xor_ps:
716 ; SKX:       ## %bb.0: ## %entry
717 ; SKX-NEXT:    kmovd %edi, %k1
718 ; SKX-NEXT:    vxorps %ymm1, %ymm0, %ymm0 {%k1} {z}
719 ; SKX-NEXT:    retq
720 entry:
721   %0 = bitcast <8 x float> %__A to <8 x i32>
722   %1 = bitcast <8 x float> %__B to <8 x i32>
723   %xor.i.i = xor <8 x i32> %0, %1
724   %2 = bitcast <8 x i32> %xor.i.i to <8 x float>
725   %3 = bitcast i8 %__U to <8 x i1>
726   %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> zeroinitializer
727   ret <8 x float> %4
728 }
729
730 define <4 x float> @test_mm_mask_xor_ps(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {
731 ; KNL-LABEL: test_mm_mask_xor_ps:
732 ; KNL:       ## %bb.0: ## %entry
733 ; KNL-NEXT:    kmovw %edi, %k1
734 ; KNL-NEXT:    vpxord %xmm2, %xmm1, %xmm0 {%k1}
735 ; KNL-NEXT:    retq
736 ;
737 ; SKX-LABEL: test_mm_mask_xor_ps:
738 ; SKX:       ## %bb.0: ## %entry
739 ; SKX-NEXT:    kmovd %edi, %k1
740 ; SKX-NEXT:    vxorps %xmm2, %xmm1, %xmm0 {%k1}
741 ; SKX-NEXT:    retq
742 entry:
743   %0 = bitcast <4 x float> %__A to <4 x i32>
744   %1 = bitcast <4 x float> %__B to <4 x i32>
745   %xor.i.i = xor <4 x i32> %0, %1
746   %2 = bitcast <4 x i32> %xor.i.i to <4 x float>
747   %3 = bitcast i8 %__U to <8 x i1>
748   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
749   %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> %__W
750   ret <4 x float> %4
751 }
752
753 define <4 x float> @test_mm_maskz_xor_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {
754 ; KNL-LABEL: test_mm_maskz_xor_ps:
755 ; KNL:       ## %bb.0: ## %entry
756 ; KNL-NEXT:    kmovw %edi, %k1
757 ; KNL-NEXT:    vpxord %xmm1, %xmm0, %xmm0 {%k1} {z}
758 ; KNL-NEXT:    retq
759 ;
760 ; SKX-LABEL: test_mm_maskz_xor_ps:
761 ; SKX:       ## %bb.0: ## %entry
762 ; SKX-NEXT:    kmovd %edi, %k1
763 ; SKX-NEXT:    vxorps %xmm1, %xmm0, %xmm0 {%k1} {z}
764 ; SKX-NEXT:    retq
765 entry:
766   %0 = bitcast <4 x float> %__A to <4 x i32>
767   %1 = bitcast <4 x float> %__B to <4 x i32>
768   %xor.i.i = xor <4 x i32> %0, %1
769   %2 = bitcast <4 x i32> %xor.i.i to <4 x float>
770   %3 = bitcast i8 %__U to <8 x i1>
771   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
772   %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> zeroinitializer
773   ret <4 x float> %4
774 }
775
776 define <4 x double> @test_mm256_mask_or_pd(<4 x double> %__W, i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {
777 ; KNL-LABEL: test_mm256_mask_or_pd:
778 ; KNL:       ## %bb.0: ## %entry
779 ; KNL-NEXT:    kmovw %edi, %k1
780 ; KNL-NEXT:    vporq %ymm1, %ymm2, %ymm0 {%k1}
781 ; KNL-NEXT:    retq
782 ;
783 ; SKX-LABEL: test_mm256_mask_or_pd:
784 ; SKX:       ## %bb.0: ## %entry
785 ; SKX-NEXT:    kmovd %edi, %k1
786 ; SKX-NEXT:    vorpd %ymm1, %ymm2, %ymm0 {%k1}
787 ; SKX-NEXT:    retq
788 entry:
789   %0 = bitcast <4 x double> %__A to <4 x i64>
790   %1 = bitcast <4 x double> %__B to <4 x i64>
791   %or.i.i = or <4 x i64> %1, %0
792   %2 = bitcast <4 x i64> %or.i.i to <4 x double>
793   %3 = bitcast i8 %__U to <8 x i1>
794   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
795   %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> %__W
796   ret <4 x double> %4
797 }
798
799 define <4 x double> @test_mm256_maskz_or_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {
800 ; KNL-LABEL: test_mm256_maskz_or_pd:
801 ; KNL:       ## %bb.0: ## %entry
802 ; KNL-NEXT:    kmovw %edi, %k1
803 ; KNL-NEXT:    vporq %ymm0, %ymm1, %ymm0 {%k1} {z}
804 ; KNL-NEXT:    retq
805 ;
806 ; SKX-LABEL: test_mm256_maskz_or_pd:
807 ; SKX:       ## %bb.0: ## %entry
808 ; SKX-NEXT:    kmovd %edi, %k1
809 ; SKX-NEXT:    vorpd %ymm0, %ymm1, %ymm0 {%k1} {z}
810 ; SKX-NEXT:    retq
811 entry:
812   %0 = bitcast <4 x double> %__A to <4 x i64>
813   %1 = bitcast <4 x double> %__B to <4 x i64>
814   %or.i.i = or <4 x i64> %1, %0
815   %2 = bitcast <4 x i64> %or.i.i to <4 x double>
816   %3 = bitcast i8 %__U to <8 x i1>
817   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
818   %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> zeroinitializer
819   ret <4 x double> %4
820 }
821
822 define <2 x double> @test_mm_mask_or_pd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {
823 ; KNL-LABEL: test_mm_mask_or_pd:
824 ; KNL:       ## %bb.0: ## %entry
825 ; KNL-NEXT:    kmovw %edi, %k1
826 ; KNL-NEXT:    vporq %xmm1, %xmm2, %xmm0 {%k1}
827 ; KNL-NEXT:    retq
828 ;
829 ; SKX-LABEL: test_mm_mask_or_pd:
830 ; SKX:       ## %bb.0: ## %entry
831 ; SKX-NEXT:    kmovd %edi, %k1
832 ; SKX-NEXT:    vorpd %xmm1, %xmm2, %xmm0 {%k1}
833 ; SKX-NEXT:    retq
834 entry:
835   %0 = bitcast <2 x double> %__A to <2 x i64>
836   %1 = bitcast <2 x double> %__B to <2 x i64>
837   %or.i.i = or <2 x i64> %1, %0
838   %2 = bitcast <2 x i64> %or.i.i to <2 x double>
839   %3 = bitcast i8 %__U to <8 x i1>
840   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
841   %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> %__W
842   ret <2 x double> %4
843 }
844
845 define <2 x double> @test_mm_maskz_or_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {
846 ; KNL-LABEL: test_mm_maskz_or_pd:
847 ; KNL:       ## %bb.0: ## %entry
848 ; KNL-NEXT:    kmovw %edi, %k1
849 ; KNL-NEXT:    vporq %xmm0, %xmm1, %xmm0 {%k1} {z}
850 ; KNL-NEXT:    retq
851 ;
852 ; SKX-LABEL: test_mm_maskz_or_pd:
853 ; SKX:       ## %bb.0: ## %entry
854 ; SKX-NEXT:    kmovd %edi, %k1
855 ; SKX-NEXT:    vorpd %xmm0, %xmm1, %xmm0 {%k1} {z}
856 ; SKX-NEXT:    retq
857 entry:
858   %0 = bitcast <2 x double> %__A to <2 x i64>
859   %1 = bitcast <2 x double> %__B to <2 x i64>
860   %or.i.i = or <2 x i64> %1, %0
861   %2 = bitcast <2 x i64> %or.i.i to <2 x double>
862   %3 = bitcast i8 %__U to <8 x i1>
863   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
864   %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> zeroinitializer
865   ret <2 x double> %4
866 }
867
868 define <8 x float> @test_mm256_mask_or_ps(<8 x float> %__W, i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {
869 ; KNL-LABEL: test_mm256_mask_or_ps:
870 ; KNL:       ## %bb.0: ## %entry
871 ; KNL-NEXT:    kmovw %edi, %k1
872 ; KNL-NEXT:    vpord %ymm1, %ymm2, %ymm0 {%k1}
873 ; KNL-NEXT:    retq
874 ;
875 ; SKX-LABEL: test_mm256_mask_or_ps:
876 ; SKX:       ## %bb.0: ## %entry
877 ; SKX-NEXT:    kmovd %edi, %k1
878 ; SKX-NEXT:    vorps %ymm1, %ymm2, %ymm0 {%k1}
879 ; SKX-NEXT:    retq
880 entry:
881   %0 = bitcast <8 x float> %__A to <8 x i32>
882   %1 = bitcast <8 x float> %__B to <8 x i32>
883   %or.i.i = or <8 x i32> %1, %0
884   %2 = bitcast <8 x i32> %or.i.i to <8 x float>
885   %3 = bitcast i8 %__U to <8 x i1>
886   %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> %__W
887   ret <8 x float> %4
888 }
889
890 define <8 x float> @test_mm256_maskz_or_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {
891 ; KNL-LABEL: test_mm256_maskz_or_ps:
892 ; KNL:       ## %bb.0: ## %entry
893 ; KNL-NEXT:    kmovw %edi, %k1
894 ; KNL-NEXT:    vpord %ymm0, %ymm1, %ymm0 {%k1} {z}
895 ; KNL-NEXT:    retq
896 ;
897 ; SKX-LABEL: test_mm256_maskz_or_ps:
898 ; SKX:       ## %bb.0: ## %entry
899 ; SKX-NEXT:    kmovd %edi, %k1
900 ; SKX-NEXT:    vorps %ymm0, %ymm1, %ymm0 {%k1} {z}
901 ; SKX-NEXT:    retq
902 entry:
903   %0 = bitcast <8 x float> %__A to <8 x i32>
904   %1 = bitcast <8 x float> %__B to <8 x i32>
905   %or.i.i = or <8 x i32> %1, %0
906   %2 = bitcast <8 x i32> %or.i.i to <8 x float>
907   %3 = bitcast i8 %__U to <8 x i1>
908   %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> zeroinitializer
909   ret <8 x float> %4
910 }
911
912 define <4 x float> @test_mm_mask_or_ps(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {
913 ; KNL-LABEL: test_mm_mask_or_ps:
914 ; KNL:       ## %bb.0: ## %entry
915 ; KNL-NEXT:    kmovw %edi, %k1
916 ; KNL-NEXT:    vpord %xmm1, %xmm2, %xmm0 {%k1}
917 ; KNL-NEXT:    retq
918 ;
919 ; SKX-LABEL: test_mm_mask_or_ps:
920 ; SKX:       ## %bb.0: ## %entry
921 ; SKX-NEXT:    kmovd %edi, %k1
922 ; SKX-NEXT:    vorps %xmm1, %xmm2, %xmm0 {%k1}
923 ; SKX-NEXT:    retq
924 entry:
925   %0 = bitcast <4 x float> %__A to <4 x i32>
926   %1 = bitcast <4 x float> %__B to <4 x i32>
927   %or.i.i = or <4 x i32> %1, %0
928   %2 = bitcast <4 x i32> %or.i.i to <4 x float>
929   %3 = bitcast i8 %__U to <8 x i1>
930   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
931   %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> %__W
932   ret <4 x float> %4
933 }
934
935 define <4 x float> @test_mm_maskz_or_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {
936 ; KNL-LABEL: test_mm_maskz_or_ps:
937 ; KNL:       ## %bb.0: ## %entry
938 ; KNL-NEXT:    kmovw %edi, %k1
939 ; KNL-NEXT:    vpord %xmm0, %xmm1, %xmm0 {%k1} {z}
940 ; KNL-NEXT:    retq
941 ;
942 ; SKX-LABEL: test_mm_maskz_or_ps:
943 ; SKX:       ## %bb.0: ## %entry
944 ; SKX-NEXT:    kmovd %edi, %k1
945 ; SKX-NEXT:    vorps %xmm0, %xmm1, %xmm0 {%k1} {z}
946 ; SKX-NEXT:    retq
947 entry:
948   %0 = bitcast <4 x float> %__A to <4 x i32>
949   %1 = bitcast <4 x float> %__B to <4 x i32>
950   %or.i.i = or <4 x i32> %1, %0
951   %2 = bitcast <4 x i32> %or.i.i to <4 x float>
952   %3 = bitcast i8 %__U to <8 x i1>
953   %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
954   %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> zeroinitializer
955   ret <4 x float> %4
956 }