xref: /llvm-project/llvm/test/CodeGen/X86/avx512vl-vec-cmp.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=VLX
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=NoVLX
4
5define <4 x i64> @test256_1(<4 x i64> %x, <4 x i64> %y) nounwind {
6; VLX-LABEL: test256_1:
7; VLX:       # %bb.0:
8; VLX-NEXT:    vpcmpeqq %ymm1, %ymm0, %k1
9; VLX-NEXT:    vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
10; VLX-NEXT:    retq
11;
12; NoVLX-LABEL: test256_1:
13; NoVLX:       # %bb.0:
14; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
15; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
16; NoVLX-NEXT:    vpcmpeqq %zmm1, %zmm0, %k1
17; NoVLX-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
18; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
19; NoVLX-NEXT:    retq
20  %mask = icmp eq <4 x i64> %x, %y
21  %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %y
22  ret <4 x i64> %max
23}
24
25define <4 x i64> @test256_2(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind {
26; VLX-LABEL: test256_2:
27; VLX:       # %bb.0:
28; VLX-NEXT:    vpcmpgtq %ymm1, %ymm0, %k1
29; VLX-NEXT:    vpblendmq %ymm2, %ymm1, %ymm0 {%k1}
30; VLX-NEXT:    retq
31;
32; NoVLX-LABEL: test256_2:
33; NoVLX:       # %bb.0:
34; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
35; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
36; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
37; NoVLX-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1
38; NoVLX-NEXT:    vpblendmq %zmm2, %zmm1, %zmm0 {%k1}
39; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
40; NoVLX-NEXT:    retq
41  %mask = icmp sgt <4 x i64> %x, %y
42  %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y
43  ret <4 x i64> %max
44}
45
46define <8 x i32> @test256_3(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1) nounwind {
47; VLX-LABEL: test256_3:
48; VLX:       # %bb.0:
49; VLX-NEXT:    vpcmpnltd %ymm1, %ymm0, %k1
50; VLX-NEXT:    vpblendmd %ymm2, %ymm1, %ymm0 {%k1}
51; VLX-NEXT:    retq
52;
53; NoVLX-LABEL: test256_3:
54; NoVLX:       # %bb.0:
55; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
56; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
57; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
58; NoVLX-NEXT:    vpcmpnltd %zmm1, %zmm0, %k1
59; NoVLX-NEXT:    vpblendmd %zmm2, %zmm1, %zmm0 {%k1}
60; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
61; NoVLX-NEXT:    retq
62  %mask = icmp sge <8 x i32> %x, %y
63  %max = select <8 x i1> %mask, <8 x i32> %x1, <8 x i32> %y
64  ret <8 x i32> %max
65}
66
67define <4 x i64> @test256_4(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind {
68; VLX-LABEL: test256_4:
69; VLX:       # %bb.0:
70; VLX-NEXT:    vpcmpnleuq %ymm1, %ymm0, %k1
71; VLX-NEXT:    vpblendmq %ymm2, %ymm1, %ymm0 {%k1}
72; VLX-NEXT:    retq
73;
74; NoVLX-LABEL: test256_4:
75; NoVLX:       # %bb.0:
76; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
77; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
78; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
79; NoVLX-NEXT:    vpcmpnleuq %zmm1, %zmm0, %k1
80; NoVLX-NEXT:    vpblendmq %zmm2, %zmm1, %zmm0 {%k1}
81; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
82; NoVLX-NEXT:    retq
83  %mask = icmp ugt <4 x i64> %x, %y
84  %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y
85  ret <4 x i64> %max
86}
87
88define <8 x i32> @test256_5(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {
89; VLX-LABEL: test256_5:
90; VLX:       # %bb.0:
91; VLX-NEXT:    vpcmpeqd (%rdi), %ymm0, %k1
92; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
93; VLX-NEXT:    retq
94;
95; NoVLX-LABEL: test256_5:
96; NoVLX:       # %bb.0:
97; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
98; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
99; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
100; NoVLX-NEXT:    vpcmpeqd %zmm2, %zmm0, %k1
101; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
102; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
103; NoVLX-NEXT:    retq
104  %y = load <8 x i32>, ptr %yp, align 4
105  %mask = icmp eq <8 x i32> %x, %y
106  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
107  ret <8 x i32> %max
108}
109
110define <8 x i32> @test256_5b(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {
111; VLX-LABEL: test256_5b:
112; VLX:       # %bb.0:
113; VLX-NEXT:    vpcmpeqd (%rdi), %ymm0, %k1
114; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
115; VLX-NEXT:    retq
116;
117; NoVLX-LABEL: test256_5b:
118; NoVLX:       # %bb.0:
119; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
120; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
121; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
122; NoVLX-NEXT:    vpcmpeqd %zmm0, %zmm2, %k1
123; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
124; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
125; NoVLX-NEXT:    retq
126  %y = load <8 x i32>, ptr %yp, align 4
127  %mask = icmp eq <8 x i32> %y, %x
128  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
129  ret <8 x i32> %max
130}
131
132define <8 x i32> @test256_6(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {
133; VLX-LABEL: test256_6:
134; VLX:       # %bb.0:
135; VLX-NEXT:    vpcmpgtd (%rdi), %ymm0, %k1
136; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
137; VLX-NEXT:    retq
138;
139; NoVLX-LABEL: test256_6:
140; NoVLX:       # %bb.0:
141; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
142; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
143; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
144; NoVLX-NEXT:    vpcmpgtd %zmm2, %zmm0, %k1
145; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
146; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
147; NoVLX-NEXT:    retq
148  %y = load <8 x i32>, ptr %y.ptr, align 4
149  %mask = icmp sgt <8 x i32> %x, %y
150  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
151  ret <8 x i32> %max
152}
153
154define <8 x i32> @test256_6b(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {
155; VLX-LABEL: test256_6b:
156; VLX:       # %bb.0:
157; VLX-NEXT:    vpcmpgtd (%rdi), %ymm0, %k1
158; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
159; VLX-NEXT:    retq
160;
161; NoVLX-LABEL: test256_6b:
162; NoVLX:       # %bb.0:
163; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
164; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
165; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
166; NoVLX-NEXT:    vpcmpgtd %zmm2, %zmm0, %k1
167; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
168; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
169; NoVLX-NEXT:    retq
170  %y = load <8 x i32>, ptr %y.ptr, align 4
171  %mask = icmp slt <8 x i32> %y, %x
172  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
173  ret <8 x i32> %max
174}
175
176define <8 x i32> @test256_7(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {
177; VLX-LABEL: test256_7:
178; VLX:       # %bb.0:
179; VLX-NEXT:    vpcmpled (%rdi), %ymm0, %k1
180; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
181; VLX-NEXT:    retq
182;
183; NoVLX-LABEL: test256_7:
184; NoVLX:       # %bb.0:
185; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
186; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
187; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
188; NoVLX-NEXT:    vpcmpled %zmm2, %zmm0, %k1
189; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
190; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
191; NoVLX-NEXT:    retq
192  %y = load <8 x i32>, ptr %y.ptr, align 4
193  %mask = icmp sle <8 x i32> %x, %y
194  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
195  ret <8 x i32> %max
196}
197
198define <8 x i32> @test256_7b(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {
199; VLX-LABEL: test256_7b:
200; VLX:       # %bb.0:
201; VLX-NEXT:    vpcmpled (%rdi), %ymm0, %k1
202; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
203; VLX-NEXT:    retq
204;
205; NoVLX-LABEL: test256_7b:
206; NoVLX:       # %bb.0:
207; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
208; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
209; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
210; NoVLX-NEXT:    vpcmpnltd %zmm0, %zmm2, %k1
211; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
212; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
213; NoVLX-NEXT:    retq
214  %y = load <8 x i32>, ptr %y.ptr, align 4
215  %mask = icmp sge <8 x i32> %y, %x
216  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
217  ret <8 x i32> %max
218}
219
220define <8 x i32> @test256_8(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {
221; VLX-LABEL: test256_8:
222; VLX:       # %bb.0:
223; VLX-NEXT:    vpcmpleud (%rdi), %ymm0, %k1
224; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
225; VLX-NEXT:    retq
226;
227; NoVLX-LABEL: test256_8:
228; NoVLX:       # %bb.0:
229; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
230; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
231; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
232; NoVLX-NEXT:    vpcmpleud %zmm2, %zmm0, %k1
233; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
234; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
235; NoVLX-NEXT:    retq
236  %y = load <8 x i32>, ptr %y.ptr, align 4
237  %mask = icmp ule <8 x i32> %x, %y
238  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
239  ret <8 x i32> %max
240}
241
242define <8 x i32> @test256_8b(<8 x i32> %x, <8 x i32> %x1, ptr %y.ptr) nounwind {
243; VLX-LABEL: test256_8b:
244; VLX:       # %bb.0:
245; VLX-NEXT:    vpcmpleud (%rdi), %ymm0, %k1
246; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
247; VLX-NEXT:    retq
248;
249; NoVLX-LABEL: test256_8b:
250; NoVLX:       # %bb.0:
251; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
252; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
253; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
254; NoVLX-NEXT:    vpcmpnltud %zmm0, %zmm2, %k1
255; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
256; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
257; NoVLX-NEXT:    retq
258  %y = load <8 x i32>, ptr %y.ptr, align 4
259  %mask = icmp uge <8 x i32> %y, %x
260  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
261  ret <8 x i32> %max
262}
263
264define <8 x i32> @test256_9(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1, <8 x i32> %y1) nounwind {
265; VLX-LABEL: test256_9:
266; VLX:       # %bb.0:
267; VLX-NEXT:    vpcmpeqd %ymm1, %ymm0, %k1
268; VLX-NEXT:    vpcmpeqd %ymm3, %ymm2, %k1 {%k1}
269; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
270; VLX-NEXT:    retq
271;
272; NoVLX-LABEL: test256_9:
273; NoVLX:       # %bb.0:
274; NoVLX-NEXT:    # kill: def $ymm3 killed $ymm3 def $zmm3
275; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
276; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
277; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
278; NoVLX-NEXT:    vpcmpeqd %zmm1, %zmm0, %k1
279; NoVLX-NEXT:    vpcmpeqd %zmm3, %zmm2, %k1 {%k1}
280; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
281; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
282; NoVLX-NEXT:    retq
283  %mask1 = icmp eq <8 x i32> %x1, %y1
284  %mask0 = icmp eq <8 x i32> %x, %y
285  %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
286  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y
287  ret <8 x i32> %max
288}
289
290define <4 x i64> @test256_10(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1, <4 x i64> %y1) nounwind {
291; VLX-LABEL: test256_10:
292; VLX:       # %bb.0:
293; VLX-NEXT:    vpcmpleq %ymm1, %ymm0, %k1
294; VLX-NEXT:    vpcmpnltq %ymm3, %ymm2, %k1 {%k1}
295; VLX-NEXT:    vpblendmq %ymm0, %ymm2, %ymm0 {%k1}
296; VLX-NEXT:    retq
297;
298; NoVLX-LABEL: test256_10:
299; NoVLX:       # %bb.0:
300; NoVLX-NEXT:    # kill: def $ymm3 killed $ymm3 def $zmm3
301; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
302; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
303; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
304; NoVLX-NEXT:    vpcmpleq %zmm1, %zmm0, %k1
305; NoVLX-NEXT:    vpcmpnltq %zmm3, %zmm2, %k1 {%k1}
306; NoVLX-NEXT:    vpblendmq %zmm0, %zmm2, %zmm0 {%k1}
307; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
308; NoVLX-NEXT:    retq
309  %mask1 = icmp sge <4 x i64> %x1, %y1
310  %mask0 = icmp sle <4 x i64> %x, %y
311  %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
312  %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
313  ret <4 x i64> %max
314}
315
316define <4 x i64> @test256_11(<4 x i64> %x, ptr %y.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind {
317; VLX-LABEL: test256_11:
318; VLX:       # %bb.0:
319; VLX-NEXT:    vpcmpgtq %ymm2, %ymm1, %k1
320; VLX-NEXT:    vpcmpgtq (%rdi), %ymm0, %k1 {%k1}
321; VLX-NEXT:    vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
322; VLX-NEXT:    retq
323;
324; NoVLX-LABEL: test256_11:
325; NoVLX:       # %bb.0:
326; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
327; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
328; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
329; NoVLX-NEXT:    vmovdqu (%rdi), %ymm3
330; NoVLX-NEXT:    vpcmpgtq %zmm3, %zmm0, %k1
331; NoVLX-NEXT:    vpcmpgtq %zmm2, %zmm1, %k1 {%k1}
332; NoVLX-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
333; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
334; NoVLX-NEXT:    retq
335  %mask1 = icmp sgt <4 x i64> %x1, %y1
336  %y = load <4 x i64>, ptr %y.ptr, align 4
337  %mask0 = icmp sgt <4 x i64> %x, %y
338  %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
339  %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
340  ret <4 x i64> %max
341}
342
343define <8 x i32> @test256_12(<8 x i32> %x, ptr %y.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind {
344; VLX-LABEL: test256_12:
345; VLX:       # %bb.0:
346; VLX-NEXT:    vpcmpnltd %ymm2, %ymm1, %k1
347; VLX-NEXT:    vpcmpleud (%rdi), %ymm0, %k1 {%k1}
348; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
349; VLX-NEXT:    retq
350;
351; NoVLX-LABEL: test256_12:
352; NoVLX:       # %bb.0:
353; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
354; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
355; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
356; NoVLX-NEXT:    vmovdqu (%rdi), %ymm3
357; NoVLX-NEXT:    vpcmpleud %zmm3, %zmm0, %k1
358; NoVLX-NEXT:    vpcmpnltd %zmm2, %zmm1, %k1 {%k1}
359; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
360; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
361; NoVLX-NEXT:    retq
362  %mask1 = icmp sge <8 x i32> %x1, %y1
363  %y = load <8 x i32>, ptr %y.ptr, align 4
364  %mask0 = icmp ule <8 x i32> %x, %y
365  %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
366  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
367  ret <8 x i32> %max
368}
369
370define <4 x i64> @test256_13(<4 x i64> %x, <4 x i64> %x1, ptr %yb.ptr) nounwind {
371; VLX-LABEL: test256_13:
372; VLX:       # %bb.0:
373; VLX-NEXT:    vpcmpeqq (%rdi){1to4}, %ymm0, %k1
374; VLX-NEXT:    vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
375; VLX-NEXT:    retq
376;
377; NoVLX-LABEL: test256_13:
378; NoVLX:       # %bb.0:
379; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
380; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
381; NoVLX-NEXT:    vpcmpeqq (%rdi){1to8}, %zmm0, %k1
382; NoVLX-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
383; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
384; NoVLX-NEXT:    retq
385  %yb = load i64, ptr %yb.ptr, align 4
386  %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0
387  %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer
388  %mask = icmp eq <4 x i64> %x, %y
389  %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
390  ret <4 x i64> %max
391}
392
393define <8 x i32> @test256_14(<8 x i32> %x, ptr %yb.ptr, <8 x i32> %x1) nounwind {
394; VLX-LABEL: test256_14:
395; VLX:       # %bb.0:
396; VLX-NEXT:    vpcmpled (%rdi){1to8}, %ymm0, %k1
397; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
398; VLX-NEXT:    retq
399;
400; NoVLX-LABEL: test256_14:
401; NoVLX:       # %bb.0:
402; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
403; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
404; NoVLX-NEXT:    vpcmpled (%rdi){1to16}, %zmm0, %k1
405; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
406; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
407; NoVLX-NEXT:    retq
408  %yb = load i32, ptr %yb.ptr, align 4
409  %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0
410  %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer
411  %mask = icmp sle <8 x i32> %x, %y
412  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
413  ret <8 x i32> %max
414}
415
416define <8 x i32> @test256_15(<8 x i32> %x, ptr %yb.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind {
417; VLX-LABEL: test256_15:
418; VLX:       # %bb.0:
419; VLX-NEXT:    vpcmpnltd %ymm2, %ymm1, %k1
420; VLX-NEXT:    vpcmpgtd (%rdi){1to8}, %ymm0, %k1 {%k1}
421; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
422; VLX-NEXT:    retq
423;
424; NoVLX-LABEL: test256_15:
425; NoVLX:       # %bb.0:
426; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
427; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
428; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
429; NoVLX-NEXT:    vpcmpnltd %zmm2, %zmm1, %k1
430; NoVLX-NEXT:    vpcmpgtd (%rdi){1to16}, %zmm0, %k1 {%k1}
431; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
432; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
433; NoVLX-NEXT:    retq
434  %mask1 = icmp sge <8 x i32> %x1, %y1
435  %yb = load i32, ptr %yb.ptr, align 4
436  %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0
437  %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer
438  %mask0 = icmp sgt <8 x i32> %x, %y
439  %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
440  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
441  ret <8 x i32> %max
442}
443
444define <4 x i64> @test256_16(<4 x i64> %x, ptr %yb.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind {
445; VLX-LABEL: test256_16:
446; VLX:       # %bb.0:
447; VLX-NEXT:    vpcmpnltq %ymm2, %ymm1, %k1
448; VLX-NEXT:    vpcmpgtq (%rdi){1to4}, %ymm0, %k1 {%k1}
449; VLX-NEXT:    vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
450; VLX-NEXT:    retq
451;
452; NoVLX-LABEL: test256_16:
453; NoVLX:       # %bb.0:
454; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
455; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
456; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
457; NoVLX-NEXT:    vpcmpnltq %zmm2, %zmm1, %k1
458; NoVLX-NEXT:    vpcmpgtq (%rdi){1to8}, %zmm0, %k1 {%k1}
459; NoVLX-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
460; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
461; NoVLX-NEXT:    retq
462  %mask1 = icmp sge <4 x i64> %x1, %y1
463  %yb = load i64, ptr %yb.ptr, align 4
464  %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0
465  %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer
466  %mask0 = icmp sgt <4 x i64> %x, %y
467  %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
468  %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
469  ret <4 x i64> %max
470}
471
472define <8 x i32> @test256_17(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {
473; VLX-LABEL: test256_17:
474; VLX:       # %bb.0:
475; VLX-NEXT:    vpcmpneqd (%rdi), %ymm0, %k1
476; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
477; VLX-NEXT:    retq
478;
479; NoVLX-LABEL: test256_17:
480; NoVLX:       # %bb.0:
481; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
482; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
483; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
484; NoVLX-NEXT:    vpcmpneqd %zmm2, %zmm0, %k1
485; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
486; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
487; NoVLX-NEXT:    retq
488  %y = load <8 x i32>, ptr %yp, align 4
489  %mask = icmp ne <8 x i32> %x, %y
490  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
491  ret <8 x i32> %max
492}
493
494define <8 x i32> @test256_18(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {
495; VLX-LABEL: test256_18:
496; VLX:       # %bb.0:
497; VLX-NEXT:    vpcmpneqd (%rdi), %ymm0, %k1
498; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
499; VLX-NEXT:    retq
500;
501; NoVLX-LABEL: test256_18:
502; NoVLX:       # %bb.0:
503; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
504; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
505; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
506; NoVLX-NEXT:    vpcmpneqd %zmm0, %zmm2, %k1
507; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
508; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
509; NoVLX-NEXT:    retq
510  %y = load <8 x i32>, ptr %yp, align 4
511  %mask = icmp ne <8 x i32> %y, %x
512  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
513  ret <8 x i32> %max
514}
515
516define <8 x i32> @test256_19(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {
517; VLX-LABEL: test256_19:
518; VLX:       # %bb.0:
519; VLX-NEXT:    vpcmpnltud (%rdi), %ymm0, %k1
520; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
521; VLX-NEXT:    retq
522;
523; NoVLX-LABEL: test256_19:
524; NoVLX:       # %bb.0:
525; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
526; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
527; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
528; NoVLX-NEXT:    vpcmpnltud %zmm2, %zmm0, %k1
529; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
530; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
531; NoVLX-NEXT:    retq
532  %y = load <8 x i32>, ptr %yp, align 4
533  %mask = icmp uge <8 x i32> %x, %y
534  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
535  ret <8 x i32> %max
536}
537
538define <8 x i32> @test256_20(<8 x i32> %x, <8 x i32> %x1, ptr %yp) nounwind {
539; VLX-LABEL: test256_20:
540; VLX:       # %bb.0:
541; VLX-NEXT:    vpcmpleud (%rdi), %ymm0, %k1
542; VLX-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
543; VLX-NEXT:    retq
544;
545; NoVLX-LABEL: test256_20:
546; NoVLX:       # %bb.0:
547; NoVLX-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
548; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
549; NoVLX-NEXT:    vmovdqu (%rdi), %ymm2
550; NoVLX-NEXT:    vpcmpnltud %zmm0, %zmm2, %k1
551; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
552; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
553; NoVLX-NEXT:    retq
554  %y = load <8 x i32>, ptr %yp, align 4
555  %mask = icmp uge <8 x i32> %y, %x
556  %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
557  ret <8 x i32> %max
558}
559
560define <2 x i64> @test128_1(<2 x i64> %x, <2 x i64> %y) nounwind {
561; VLX-LABEL: test128_1:
562; VLX:       # %bb.0:
563; VLX-NEXT:    vpcmpeqq %xmm1, %xmm0, %k1
564; VLX-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
565; VLX-NEXT:    retq
566;
567; NoVLX-LABEL: test128_1:
568; NoVLX:       # %bb.0:
569; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
570; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
571; NoVLX-NEXT:    vpcmpeqq %zmm1, %zmm0, %k1
572; NoVLX-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
573; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
574; NoVLX-NEXT:    retq
575  %mask = icmp eq <2 x i64> %x, %y
576  %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %y
577  ret <2 x i64> %max
578}
579
580define <2 x i64> @test128_2(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind {
581; VLX-LABEL: test128_2:
582; VLX:       # %bb.0:
583; VLX-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1
584; VLX-NEXT:    vpblendmq %xmm2, %xmm1, %xmm0 {%k1}
585; VLX-NEXT:    retq
586;
587; NoVLX-LABEL: test128_2:
588; NoVLX:       # %bb.0:
589; NoVLX-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2
590; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
591; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
592; NoVLX-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1
593; NoVLX-NEXT:    vpblendmq %zmm2, %zmm1, %zmm0 {%k1}
594; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
595; NoVLX-NEXT:    retq
596  %mask = icmp sgt <2 x i64> %x, %y
597  %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y
598  ret <2 x i64> %max
599}
600
601define <4 x i32> @test128_3(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1) nounwind {
602; VLX-LABEL: test128_3:
603; VLX:       # %bb.0:
604; VLX-NEXT:    vpcmpnltd %xmm1, %xmm0, %k1
605; VLX-NEXT:    vpblendmd %xmm2, %xmm1, %xmm0 {%k1}
606; VLX-NEXT:    retq
607;
608; NoVLX-LABEL: test128_3:
609; NoVLX:       # %bb.0:
610; NoVLX-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2
611; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
612; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
613; NoVLX-NEXT:    vpcmpnltd %zmm1, %zmm0, %k1
614; NoVLX-NEXT:    vpblendmd %zmm2, %zmm1, %zmm0 {%k1}
615; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
616; NoVLX-NEXT:    retq
617  %mask = icmp sge <4 x i32> %x, %y
618  %max = select <4 x i1> %mask, <4 x i32> %x1, <4 x i32> %y
619  ret <4 x i32> %max
620}
621
622define <2 x i64> @test128_4(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind {
623; VLX-LABEL: test128_4:
624; VLX:       # %bb.0:
625; VLX-NEXT:    vpcmpnleuq %xmm1, %xmm0, %k1
626; VLX-NEXT:    vpblendmq %xmm2, %xmm1, %xmm0 {%k1}
627; VLX-NEXT:    retq
628;
629; NoVLX-LABEL: test128_4:
630; NoVLX:       # %bb.0:
631; NoVLX-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2
632; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
633; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
634; NoVLX-NEXT:    vpcmpnleuq %zmm1, %zmm0, %k1
635; NoVLX-NEXT:    vpblendmq %zmm2, %zmm1, %zmm0 {%k1}
636; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
637; NoVLX-NEXT:    retq
638  %mask = icmp ugt <2 x i64> %x, %y
639  %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y
640  ret <2 x i64> %max
641}
642
643define <4 x i32> @test128_5(<4 x i32> %x, <4 x i32> %x1, ptr %yp) nounwind {
644; VLX-LABEL: test128_5:
645; VLX:       # %bb.0:
646; VLX-NEXT:    vpcmpeqd (%rdi), %xmm0, %k1
647; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
648; VLX-NEXT:    retq
649;
650; NoVLX-LABEL: test128_5:
651; NoVLX:       # %bb.0:
652; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
653; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
654; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
655; NoVLX-NEXT:    vpcmpeqd %zmm2, %zmm0, %k1
656; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
657; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
658; NoVLX-NEXT:    retq
659  %y = load <4 x i32>, ptr %yp, align 4
660  %mask = icmp eq <4 x i32> %x, %y
661  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
662  ret <4 x i32> %max
663}
664
665define <4 x i32> @test128_5b(<4 x i32> %x, <4 x i32> %x1, ptr %yp) nounwind {
666; VLX-LABEL: test128_5b:
667; VLX:       # %bb.0:
668; VLX-NEXT:    vpcmpeqd (%rdi), %xmm0, %k1
669; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
670; VLX-NEXT:    retq
671;
672; NoVLX-LABEL: test128_5b:
673; NoVLX:       # %bb.0:
674; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
675; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
676; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
677; NoVLX-NEXT:    vpcmpeqd %zmm0, %zmm2, %k1
678; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
679; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
680; NoVLX-NEXT:    retq
681  %y = load <4 x i32>, ptr %yp, align 4
682  %mask = icmp eq <4 x i32> %y, %x
683  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
684  ret <4 x i32> %max
685}
686
687define <4 x i32> @test128_6(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
688; VLX-LABEL: test128_6:
689; VLX:       # %bb.0:
690; VLX-NEXT:    vpcmpgtd (%rdi), %xmm0, %k1
691; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
692; VLX-NEXT:    retq
693;
694; NoVLX-LABEL: test128_6:
695; NoVLX:       # %bb.0:
696; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
697; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
698; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
699; NoVLX-NEXT:    vpcmpgtd %zmm2, %zmm0, %k1
700; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
701; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
702; NoVLX-NEXT:    retq
703  %y = load <4 x i32>, ptr %y.ptr, align 4
704  %mask = icmp sgt <4 x i32> %x, %y
705  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
706  ret <4 x i32> %max
707}
708
709define <4 x i32> @test128_6b(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
710; VLX-LABEL: test128_6b:
711; VLX:       # %bb.0:
712; VLX-NEXT:    vpcmpgtd (%rdi), %xmm0, %k1
713; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
714; VLX-NEXT:    retq
715;
716; NoVLX-LABEL: test128_6b:
717; NoVLX:       # %bb.0:
718; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
719; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
720; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
721; NoVLX-NEXT:    vpcmpgtd %zmm2, %zmm0, %k1
722; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
723; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
724; NoVLX-NEXT:    retq
725  %y = load <4 x i32>, ptr %y.ptr, align 4
726  %mask = icmp slt <4 x i32> %y, %x
727  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
728  ret <4 x i32> %max
729}
730
731define <4 x i32> @test128_7(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
732; VLX-LABEL: test128_7:
733; VLX:       # %bb.0:
734; VLX-NEXT:    vpcmpled (%rdi), %xmm0, %k1
735; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
736; VLX-NEXT:    retq
737;
738; NoVLX-LABEL: test128_7:
739; NoVLX:       # %bb.0:
740; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
741; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
742; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
743; NoVLX-NEXT:    vpcmpled %zmm2, %zmm0, %k1
744; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
745; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
746; NoVLX-NEXT:    retq
747  %y = load <4 x i32>, ptr %y.ptr, align 4
748  %mask = icmp sle <4 x i32> %x, %y
749  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
750  ret <4 x i32> %max
751}
752
753define <4 x i32> @test128_7b(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
754; VLX-LABEL: test128_7b:
755; VLX:       # %bb.0:
756; VLX-NEXT:    vpcmpled (%rdi), %xmm0, %k1
757; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
758; VLX-NEXT:    retq
759;
760; NoVLX-LABEL: test128_7b:
761; NoVLX:       # %bb.0:
762; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
763; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
764; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
765; NoVLX-NEXT:    vpcmpnltd %zmm0, %zmm2, %k1
766; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
767; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
768; NoVLX-NEXT:    retq
769  %y = load <4 x i32>, ptr %y.ptr, align 4
770  %mask = icmp sge <4 x i32> %y, %x
771  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
772  ret <4 x i32> %max
773}
774
775define <4 x i32> @test128_8(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
776; VLX-LABEL: test128_8:
777; VLX:       # %bb.0:
778; VLX-NEXT:    vpcmpleud (%rdi), %xmm0, %k1
779; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
780; VLX-NEXT:    retq
781;
782; NoVLX-LABEL: test128_8:
783; NoVLX:       # %bb.0:
784; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
785; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
786; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
787; NoVLX-NEXT:    vpcmpleud %zmm2, %zmm0, %k1
788; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
789; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
790; NoVLX-NEXT:    retq
791  %y = load <4 x i32>, ptr %y.ptr, align 4
792  %mask = icmp ule <4 x i32> %x, %y
793  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
794  ret <4 x i32> %max
795}
796
797define <4 x i32> @test128_8b(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
798; VLX-LABEL: test128_8b:
799; VLX:       # %bb.0:
800; VLX-NEXT:    vpcmpleud (%rdi), %xmm0, %k1
801; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
802; VLX-NEXT:    retq
803;
804; NoVLX-LABEL: test128_8b:
805; NoVLX:       # %bb.0:
806; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
807; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
808; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
809; NoVLX-NEXT:    vpcmpnltud %zmm0, %zmm2, %k1
810; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
811; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
812; NoVLX-NEXT:    retq
813  %y = load <4 x i32>, ptr %y.ptr, align 4
814  %mask = icmp uge <4 x i32> %y, %x
815  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
816  ret <4 x i32> %max
817}
818
819define <4 x i32> @test128_9(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1, <4 x i32> %y1) nounwind {
820; VLX-LABEL: test128_9:
821; VLX:       # %bb.0:
822; VLX-NEXT:    vpcmpeqd %xmm1, %xmm0, %k1
823; VLX-NEXT:    vpcmpeqd %xmm3, %xmm2, %k1 {%k1}
824; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
825; VLX-NEXT:    retq
826;
827; NoVLX-LABEL: test128_9:
828; NoVLX:       # %bb.0:
829; NoVLX-NEXT:    # kill: def $xmm3 killed $xmm3 def $zmm3
830; NoVLX-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2
831; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
832; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
833; NoVLX-NEXT:    vpcmpeqd %zmm1, %zmm0, %k1
834; NoVLX-NEXT:    vpcmpeqd %zmm3, %zmm2, %k1 {%k1}
835; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
836; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
837; NoVLX-NEXT:    retq
838  %mask1 = icmp eq <4 x i32> %x1, %y1
839  %mask0 = icmp eq <4 x i32> %x, %y
840  %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
841  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %y
842  ret <4 x i32> %max
843}
844
845define <2 x i64> @test128_10(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1, <2 x i64> %y1) nounwind {
846; VLX-LABEL: test128_10:
847; VLX:       # %bb.0:
848; VLX-NEXT:    vpcmpleq %xmm1, %xmm0, %k1
849; VLX-NEXT:    vpcmpnltq %xmm3, %xmm2, %k1 {%k1}
850; VLX-NEXT:    vpblendmq %xmm0, %xmm2, %xmm0 {%k1}
851; VLX-NEXT:    retq
852;
853; NoVLX-LABEL: test128_10:
854; NoVLX:       # %bb.0:
855; NoVLX-NEXT:    # kill: def $xmm3 killed $xmm3 def $zmm3
856; NoVLX-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2
857; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
858; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
859; NoVLX-NEXT:    vpcmpleq %zmm1, %zmm0, %k1
860; NoVLX-NEXT:    vpcmpnltq %zmm3, %zmm2, %k1 {%k1}
861; NoVLX-NEXT:    vpblendmq %zmm0, %zmm2, %zmm0 {%k1}
862; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
863; NoVLX-NEXT:    retq
864  %mask1 = icmp sge <2 x i64> %x1, %y1
865  %mask0 = icmp sle <2 x i64> %x, %y
866  %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer
867  %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
868  ret <2 x i64> %max
869}
870
871define <2 x i64> @test128_11(<2 x i64> %x, ptr %y.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind {
872; VLX-LABEL: test128_11:
873; VLX:       # %bb.0:
874; VLX-NEXT:    vpcmpgtq %xmm2, %xmm1, %k1
875; VLX-NEXT:    vpcmpgtq (%rdi), %xmm0, %k1 {%k1}
876; VLX-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
877; VLX-NEXT:    retq
878;
879; NoVLX-LABEL: test128_11:
880; NoVLX:       # %bb.0:
881; NoVLX-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2
882; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
883; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
884; NoVLX-NEXT:    vmovdqu (%rdi), %xmm3
885; NoVLX-NEXT:    vpcmpgtq %zmm3, %zmm0, %k1
886; NoVLX-NEXT:    vpcmpgtq %zmm2, %zmm1, %k1 {%k1}
887; NoVLX-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
888; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
889; NoVLX-NEXT:    retq
890  %mask1 = icmp sgt <2 x i64> %x1, %y1
891  %y = load <2 x i64>, ptr %y.ptr, align 4
892  %mask0 = icmp sgt <2 x i64> %x, %y
893  %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer
894  %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
895  ret <2 x i64> %max
896}
897
898define <4 x i32> @test128_12(<4 x i32> %x, ptr %y.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind {
899; VLX-LABEL: test128_12:
900; VLX:       # %bb.0:
901; VLX-NEXT:    vpcmpnltd %xmm2, %xmm1, %k1
902; VLX-NEXT:    vpcmpleud (%rdi), %xmm0, %k1 {%k1}
903; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
904; VLX-NEXT:    retq
905;
906; NoVLX-LABEL: test128_12:
907; NoVLX:       # %bb.0:
908; NoVLX-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2
909; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
910; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
911; NoVLX-NEXT:    vmovdqu (%rdi), %xmm3
912; NoVLX-NEXT:    vpcmpleud %zmm3, %zmm0, %k1
913; NoVLX-NEXT:    vpcmpnltd %zmm2, %zmm1, %k1 {%k1}
914; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
915; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
916; NoVLX-NEXT:    retq
917  %mask1 = icmp sge <4 x i32> %x1, %y1
918  %y = load <4 x i32>, ptr %y.ptr, align 4
919  %mask0 = icmp ule <4 x i32> %x, %y
920  %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
921  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
922  ret <4 x i32> %max
923}
924
925define <2 x i64> @test128_13(<2 x i64> %x, <2 x i64> %x1, ptr %yb.ptr) nounwind {
926; VLX-LABEL: test128_13:
927; VLX:       # %bb.0:
928; VLX-NEXT:    vpcmpeqq (%rdi){1to2}, %xmm0, %k1
929; VLX-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
930; VLX-NEXT:    retq
931;
932; NoVLX-LABEL: test128_13:
933; NoVLX:       # %bb.0:
934; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
935; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
936; NoVLX-NEXT:    vpcmpeqq (%rdi){1to8}, %zmm0, %k1
937; NoVLX-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
938; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
939; NoVLX-NEXT:    retq
940  %yb = load i64, ptr %yb.ptr, align 4
941  %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 0
942  %y = insertelement <2 x i64> %y.0, i64 %yb, i32 1
943  %mask = icmp eq <2 x i64> %x, %y
944  %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
945  ret <2 x i64> %max
946}
947
948define <4 x i32> @test128_14(<4 x i32> %x, ptr %yb.ptr, <4 x i32> %x1) nounwind {
949; VLX-LABEL: test128_14:
950; VLX:       # %bb.0:
951; VLX-NEXT:    vpcmpled (%rdi){1to4}, %xmm0, %k1
952; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
953; VLX-NEXT:    retq
954;
955; NoVLX-LABEL: test128_14:
956; NoVLX:       # %bb.0:
957; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
958; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
959; NoVLX-NEXT:    vpcmpled (%rdi){1to16}, %zmm0, %k1
960; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
961; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
962; NoVLX-NEXT:    retq
963  %yb = load i32, ptr %yb.ptr, align 4
964  %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0
965  %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer
966  %mask = icmp sle <4 x i32> %x, %y
967  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
968  ret <4 x i32> %max
969}
970
971define <4 x i32> @test128_15(<4 x i32> %x, ptr %yb.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind {
972; VLX-LABEL: test128_15:
973; VLX:       # %bb.0:
974; VLX-NEXT:    vpcmpnltd %xmm2, %xmm1, %k1
975; VLX-NEXT:    vpcmpgtd (%rdi){1to4}, %xmm0, %k1 {%k1}
976; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
977; VLX-NEXT:    retq
978;
979; NoVLX-LABEL: test128_15:
980; NoVLX:       # %bb.0:
981; NoVLX-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2
982; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
983; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
984; NoVLX-NEXT:    vpcmpnltd %zmm2, %zmm1, %k1
985; NoVLX-NEXT:    vpcmpgtd (%rdi){1to16}, %zmm0, %k1 {%k1}
986; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
987; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
988; NoVLX-NEXT:    retq
989  %mask1 = icmp sge <4 x i32> %x1, %y1
990  %yb = load i32, ptr %yb.ptr, align 4
991  %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0
992  %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer
993  %mask0 = icmp sgt <4 x i32> %x, %y
994  %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
995  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
996  ret <4 x i32> %max
997}
998
999define <2 x i64> @test128_16(<2 x i64> %x, ptr %yb.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind {
1000; VLX-LABEL: test128_16:
1001; VLX:       # %bb.0:
1002; VLX-NEXT:    vpcmpnltq %xmm2, %xmm1, %k1
1003; VLX-NEXT:    vpcmpgtq (%rdi){1to2}, %xmm0, %k1 {%k1}
1004; VLX-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
1005; VLX-NEXT:    retq
1006;
1007; NoVLX-LABEL: test128_16:
1008; NoVLX:       # %bb.0:
1009; NoVLX-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2
1010; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1011; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1012; NoVLX-NEXT:    vpcmpnltq %zmm2, %zmm1, %k1
1013; NoVLX-NEXT:    vpcmpgtq (%rdi){1to8}, %zmm0, %k1 {%k1}
1014; NoVLX-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}
1015; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1016; NoVLX-NEXT:    retq
1017  %mask1 = icmp sge <2 x i64> %x1, %y1
1018  %yb = load i64, ptr %yb.ptr, align 4
1019  %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 0
1020  %y = insertelement <2 x i64> %y.0, i64 %yb, i32 1
1021  %mask0 = icmp sgt <2 x i64> %x, %y
1022  %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer
1023  %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
1024  ret <2 x i64> %max
1025}
1026
1027define <4 x i32> @test128_17(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
1028; VLX-LABEL: test128_17:
1029; VLX:       # %bb.0:
1030; VLX-NEXT:    vpcmpneqd (%rdi), %xmm0, %k1
1031; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1032; VLX-NEXT:    retq
1033;
1034; NoVLX-LABEL: test128_17:
1035; NoVLX:       # %bb.0:
1036; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1037; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1038; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
1039; NoVLX-NEXT:    vpcmpneqd %zmm2, %zmm0, %k1
1040; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1041; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1042; NoVLX-NEXT:    retq
1043  %y = load <4 x i32>, ptr %y.ptr, align 4
1044  %mask = icmp ne <4 x i32> %x, %y
1045  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
1046  ret <4 x i32> %max
1047}
1048
1049define <4 x i32> @test128_18(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
1050; VLX-LABEL: test128_18:
1051; VLX:       # %bb.0:
1052; VLX-NEXT:    vpcmpneqd (%rdi), %xmm0, %k1
1053; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1054; VLX-NEXT:    retq
1055;
1056; NoVLX-LABEL: test128_18:
1057; NoVLX:       # %bb.0:
1058; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1059; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1060; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
1061; NoVLX-NEXT:    vpcmpneqd %zmm0, %zmm2, %k1
1062; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1063; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1064; NoVLX-NEXT:    retq
1065  %y = load <4 x i32>, ptr %y.ptr, align 4
1066  %mask = icmp ne <4 x i32> %y, %x
1067  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
1068  ret <4 x i32> %max
1069}
1070
1071define <4 x i32> @test128_19(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
1072; VLX-LABEL: test128_19:
1073; VLX:       # %bb.0:
1074; VLX-NEXT:    vpcmpnltud (%rdi), %xmm0, %k1
1075; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1076; VLX-NEXT:    retq
1077;
1078; NoVLX-LABEL: test128_19:
1079; NoVLX:       # %bb.0:
1080; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1081; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1082; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
1083; NoVLX-NEXT:    vpcmpnltud %zmm2, %zmm0, %k1
1084; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1085; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1086; NoVLX-NEXT:    retq
1087  %y = load <4 x i32>, ptr %y.ptr, align 4
1088  %mask = icmp uge <4 x i32> %x, %y
1089  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
1090  ret <4 x i32> %max
1091}
1092
1093define <4 x i32> @test128_20(<4 x i32> %x, <4 x i32> %x1, ptr %y.ptr) nounwind {
1094; VLX-LABEL: test128_20:
1095; VLX:       # %bb.0:
1096; VLX-NEXT:    vpcmpleud (%rdi), %xmm0, %k1
1097; VLX-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1098; VLX-NEXT:    retq
1099;
1100; NoVLX-LABEL: test128_20:
1101; NoVLX:       # %bb.0:
1102; NoVLX-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1103; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1104; NoVLX-NEXT:    vmovdqu (%rdi), %xmm2
1105; NoVLX-NEXT:    vpcmpnltud %zmm0, %zmm2, %k1
1106; NoVLX-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
1107; NoVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1108; NoVLX-NEXT:    retq
1109  %y = load <4 x i32>, ptr %y.ptr, align 4
1110  %mask = icmp uge <4 x i32> %y, %x
1111  %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
1112  ret <4 x i32> %max
1113}
1114
1115define <8 x i32> @testnm_and(<8 x i32> %a, <8 x i32> %b, <8 x i32> %x, <8 x i32> %y) {
1116; VLX-LABEL: testnm_and:
1117; VLX:       # %bb.0:
1118; VLX-NEXT:    vpor %ymm1, %ymm0, %ymm0
1119; VLX-NEXT:    vptestnmd %ymm0, %ymm0, %k1
1120; VLX-NEXT:    vpblendmd %ymm2, %ymm3, %ymm0 {%k1}
1121; VLX-NEXT:    retq
1122;
1123; NoVLX-LABEL: testnm_and:
1124; NoVLX:       # %bb.0:
1125; NoVLX-NEXT:    # kill: def $ymm3 killed $ymm3 def $zmm3
1126; NoVLX-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2
1127; NoVLX-NEXT:    vpor %ymm1, %ymm0, %ymm0
1128; NoVLX-NEXT:    vptestnmd %zmm0, %zmm0, %k1
1129; NoVLX-NEXT:    vpblendmd %zmm2, %zmm3, %zmm0 {%k1}
1130; NoVLX-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
1131; NoVLX-NEXT:    retq
1132  %c = icmp eq <8 x i32> %a, zeroinitializer
1133  %d = icmp eq <8 x i32> %b, zeroinitializer
1134  %e = and <8 x i1> %c, %d
1135  %z = select <8 x i1> %e, <8 x i32> %x, <8 x i32> %y
1136  ret <8 x i32> %z
1137}
1138