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=CHECK --check-prefix=VLX
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=CHECK --check-prefix=NoVLX
5 define <4 x i64> @test256_1(<4 x i64> %x, <4 x i64> %y) nounwind {
6 ; VLX-LABEL: test256_1:
8 ; VLX-NEXT: vpcmpeqq %ymm1, %ymm0, %k1
9 ; VLX-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
12 ; NoVLX-LABEL: test256_1:
14 ; NoVLX-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm2
15 ; NoVLX-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
17 %mask = icmp eq <4 x i64> %x, %y
18 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %y
22 define <4 x i64> @test256_2(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind {
23 ; VLX-LABEL: test256_2:
25 ; VLX-NEXT: vpcmpgtq %ymm1, %ymm0, %k1
26 ; VLX-NEXT: vpblendmq %ymm2, %ymm1, %ymm0 {%k1}
29 ; NoVLX-LABEL: test256_2:
31 ; NoVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0
32 ; NoVLX-NEXT: vblendvpd %ymm0, %ymm2, %ymm1, %ymm0
34 %mask = icmp sgt <4 x i64> %x, %y
35 %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y
39 define <8 x i32> @test256_3(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1) nounwind {
40 ; VLX-LABEL: test256_3:
42 ; VLX-NEXT: vpcmpled %ymm0, %ymm1, %k1
43 ; VLX-NEXT: vpblendmd %ymm2, %ymm1, %ymm0 {%k1}
46 ; NoVLX-LABEL: test256_3:
48 ; NoVLX-NEXT: # kill: %ymm2<def> %ymm2<kill> %zmm2<def>
49 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
50 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
51 ; NoVLX-NEXT: vpcmpled %zmm0, %zmm1, %k1
52 ; NoVLX-NEXT: vpblendmd %zmm2, %zmm1, %zmm0 {%k1}
53 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
55 %mask = icmp sge <8 x i32> %x, %y
56 %max = select <8 x i1> %mask, <8 x i32> %x1, <8 x i32> %y
60 define <4 x i64> @test256_4(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind {
61 ; VLX-LABEL: test256_4:
63 ; VLX-NEXT: vpcmpnleuq %ymm1, %ymm0, %k1
64 ; VLX-NEXT: vpblendmq %ymm2, %ymm1, %ymm0 {%k1}
67 ; NoVLX-LABEL: test256_4:
69 ; NoVLX-NEXT: vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
70 ; NoVLX-NEXT: vpxor %ymm3, %ymm1, %ymm4
71 ; NoVLX-NEXT: vpxor %ymm3, %ymm0, %ymm0
72 ; NoVLX-NEXT: vpcmpgtq %ymm4, %ymm0, %ymm0
73 ; NoVLX-NEXT: vblendvpd %ymm0, %ymm2, %ymm1, %ymm0
75 %mask = icmp ugt <4 x i64> %x, %y
76 %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y
80 define <8 x i32> @test256_5(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
81 ; VLX-LABEL: test256_5:
83 ; VLX-NEXT: vpcmpeqd (%rdi), %ymm0, %k1
84 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
87 ; NoVLX-LABEL: test256_5:
89 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
90 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
91 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
92 ; NoVLX-NEXT: vpcmpeqd %zmm2, %zmm0, %k1
93 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
94 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
96 %y = load <8 x i32>, <8 x i32>* %yp, align 4
97 %mask = icmp eq <8 x i32> %x, %y
98 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
102 define <8 x i32> @test256_5b(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
103 ; VLX-LABEL: test256_5b:
105 ; VLX-NEXT: vpcmpeqd (%rdi), %ymm0, %k1
106 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
109 ; NoVLX-LABEL: test256_5b:
111 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
112 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
113 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
114 ; NoVLX-NEXT: vpcmpeqd %zmm0, %zmm2, %k1
115 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
116 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
118 %y = load <8 x i32>, <8 x i32>* %yp, align 4
119 %mask = icmp eq <8 x i32> %y, %x
120 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
124 define <8 x i32> @test256_6(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
125 ; VLX-LABEL: test256_6:
127 ; VLX-NEXT: vpcmpgtd (%rdi), %ymm0, %k1
128 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
131 ; NoVLX-LABEL: test256_6:
133 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
134 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
135 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
136 ; NoVLX-NEXT: vpcmpgtd %zmm2, %zmm0, %k1
137 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
138 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
140 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
141 %mask = icmp sgt <8 x i32> %x, %y
142 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
146 define <8 x i32> @test256_6b(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
147 ; VLX-LABEL: test256_6b:
149 ; VLX-NEXT: vpcmpgtd (%rdi), %ymm0, %k1
150 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
153 ; NoVLX-LABEL: test256_6b:
155 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
156 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
157 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
158 ; NoVLX-NEXT: vpcmpgtd %zmm2, %zmm0, %k1
159 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
160 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
162 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
163 %mask = icmp slt <8 x i32> %y, %x
164 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
168 define <8 x i32> @test256_7(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
169 ; VLX-LABEL: test256_7:
171 ; VLX-NEXT: vpcmpled (%rdi), %ymm0, %k1
172 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
175 ; NoVLX-LABEL: test256_7:
177 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
178 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
179 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
180 ; NoVLX-NEXT: vpcmpled %zmm2, %zmm0, %k1
181 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
182 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
184 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
185 %mask = icmp sle <8 x i32> %x, %y
186 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
190 define <8 x i32> @test256_7b(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
191 ; VLX-LABEL: test256_7b:
193 ; VLX-NEXT: vpcmpled (%rdi), %ymm0, %k1
194 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
197 ; NoVLX-LABEL: test256_7b:
199 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
200 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
201 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
202 ; NoVLX-NEXT: vpcmpled %zmm2, %zmm0, %k1
203 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
204 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
206 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
207 %mask = icmp sge <8 x i32> %y, %x
208 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
212 define <8 x i32> @test256_8(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
213 ; VLX-LABEL: test256_8:
215 ; VLX-NEXT: vpcmpleud (%rdi), %ymm0, %k1
216 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
219 ; NoVLX-LABEL: test256_8:
221 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
222 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
223 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
224 ; NoVLX-NEXT: vpcmpleud %zmm2, %zmm0, %k1
225 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
226 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
228 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
229 %mask = icmp ule <8 x i32> %x, %y
230 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
234 define <8 x i32> @test256_8b(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
235 ; VLX-LABEL: test256_8b:
237 ; VLX-NEXT: vpcmpleud (%rdi), %ymm0, %k1
238 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
241 ; NoVLX-LABEL: test256_8b:
243 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
244 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
245 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
246 ; NoVLX-NEXT: vpcmpnltud %zmm0, %zmm2, %k1
247 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
248 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
250 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
251 %mask = icmp uge <8 x i32> %y, %x
252 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
256 define <8 x i32> @test256_9(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1, <8 x i32> %y1) nounwind {
257 ; VLX-LABEL: test256_9:
259 ; VLX-NEXT: vpcmpeqd %ymm1, %ymm0, %k1
260 ; VLX-NEXT: vpcmpeqd %ymm3, %ymm2, %k1 {%k1}
261 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
264 ; NoVLX-LABEL: test256_9:
266 ; NoVLX-NEXT: # kill: %ymm3<def> %ymm3<kill> %zmm3<def>
267 ; NoVLX-NEXT: # kill: %ymm2<def> %ymm2<kill> %zmm2<def>
268 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
269 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
270 ; NoVLX-NEXT: vpcmpeqd %zmm1, %zmm0, %k1
271 ; NoVLX-NEXT: vpcmpeqd %zmm3, %zmm2, %k1 {%k1}
272 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
273 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
275 %mask1 = icmp eq <8 x i32> %x1, %y1
276 %mask0 = icmp eq <8 x i32> %x, %y
277 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
278 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y
282 define <4 x i64> @test256_10(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1, <4 x i64> %y1) nounwind {
283 ; VLX-LABEL: test256_10:
285 ; VLX-NEXT: vpcmpleq %ymm1, %ymm0, %k1
286 ; VLX-NEXT: vpcmpleq %ymm2, %ymm3, %k1 {%k1}
287 ; VLX-NEXT: vpblendmq %ymm0, %ymm2, %ymm0 {%k1}
290 ; NoVLX-LABEL: test256_10:
292 ; NoVLX-NEXT: vpcmpgtq %ymm2, %ymm3, %ymm3
293 ; NoVLX-NEXT: vpcmpeqd %ymm4, %ymm4, %ymm4
294 ; NoVLX-NEXT: vpxor %ymm4, %ymm3, %ymm3
295 ; NoVLX-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm1
296 ; NoVLX-NEXT: vpandn %ymm3, %ymm1, %ymm1
297 ; NoVLX-NEXT: vblendvpd %ymm1, %ymm0, %ymm2, %ymm0
299 %mask1 = icmp sge <4 x i64> %x1, %y1
300 %mask0 = icmp sle <4 x i64> %x, %y
301 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
302 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
306 define <4 x i64> @test256_11(<4 x i64> %x, <4 x i64>* %y.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind {
307 ; VLX-LABEL: test256_11:
309 ; VLX-NEXT: vpcmpgtq %ymm2, %ymm1, %k1
310 ; VLX-NEXT: vpcmpgtq (%rdi), %ymm0, %k1 {%k1}
311 ; VLX-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
314 ; NoVLX-LABEL: test256_11:
316 ; NoVLX-NEXT: vpcmpgtq (%rdi), %ymm0, %ymm3
317 ; NoVLX-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm2
318 ; NoVLX-NEXT: vpand %ymm2, %ymm3, %ymm2
319 ; NoVLX-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
321 %mask1 = icmp sgt <4 x i64> %x1, %y1
322 %y = load <4 x i64>, <4 x i64>* %y.ptr, align 4
323 %mask0 = icmp sgt <4 x i64> %x, %y
324 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
325 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
329 define <8 x i32> @test256_12(<8 x i32> %x, <8 x i32>* %y.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind {
330 ; VLX-LABEL: test256_12:
332 ; VLX-NEXT: vpcmpled %ymm1, %ymm2, %k1
333 ; VLX-NEXT: vpcmpleud (%rdi), %ymm0, %k1 {%k1}
334 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
337 ; NoVLX-LABEL: test256_12:
339 ; NoVLX-NEXT: # kill: %ymm2<def> %ymm2<kill> %zmm2<def>
340 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
341 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
342 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm3
343 ; NoVLX-NEXT: vpcmpleud %zmm3, %zmm0, %k1
344 ; NoVLX-NEXT: vpcmpled %zmm1, %zmm2, %k1 {%k1}
345 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
346 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
348 %mask1 = icmp sge <8 x i32> %x1, %y1
349 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
350 %mask0 = icmp ule <8 x i32> %x, %y
351 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
352 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
356 define <4 x i64> @test256_13(<4 x i64> %x, <4 x i64> %x1, i64* %yb.ptr) nounwind {
357 ; VLX-LABEL: test256_13:
359 ; VLX-NEXT: vpcmpeqq (%rdi){1to4}, %ymm0, %k1
360 ; VLX-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
363 ; NoVLX-LABEL: test256_13:
365 ; NoVLX-NEXT: vpbroadcastq (%rdi), %ymm2
366 ; NoVLX-NEXT: vpcmpeqq %ymm2, %ymm0, %ymm2
367 ; NoVLX-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
369 %yb = load i64, i64* %yb.ptr, align 4
370 %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0
371 %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer
372 %mask = icmp eq <4 x i64> %x, %y
373 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
377 define <8 x i32> @test256_14(<8 x i32> %x, i32* %yb.ptr, <8 x i32> %x1) nounwind {
378 ; VLX-LABEL: test256_14:
380 ; VLX-NEXT: vpcmpled (%rdi){1to8}, %ymm0, %k1
381 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
384 ; NoVLX-LABEL: test256_14:
386 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
387 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
388 ; NoVLX-NEXT: vpbroadcastd (%rdi), %ymm2
389 ; NoVLX-NEXT: vpcmpled %zmm2, %zmm0, %k1
390 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
391 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
393 %yb = load i32, i32* %yb.ptr, align 4
394 %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0
395 %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer
396 %mask = icmp sle <8 x i32> %x, %y
397 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
401 define <8 x i32> @test256_15(<8 x i32> %x, i32* %yb.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind {
402 ; VLX-LABEL: test256_15:
404 ; VLX-NEXT: vpcmpled %ymm1, %ymm2, %k1
405 ; VLX-NEXT: vpcmpgtd (%rdi){1to8}, %ymm0, %k1 {%k1}
406 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
409 ; NoVLX-LABEL: test256_15:
411 ; NoVLX-NEXT: # kill: %ymm2<def> %ymm2<kill> %zmm2<def>
412 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
413 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
414 ; NoVLX-NEXT: vpbroadcastd (%rdi), %ymm3
415 ; NoVLX-NEXT: vpcmpgtd %zmm3, %zmm0, %k1
416 ; NoVLX-NEXT: vpcmpled %zmm1, %zmm2, %k1 {%k1}
417 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
418 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
420 %mask1 = icmp sge <8 x i32> %x1, %y1
421 %yb = load i32, i32* %yb.ptr, align 4
422 %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0
423 %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer
424 %mask0 = icmp sgt <8 x i32> %x, %y
425 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
426 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
430 define <4 x i64> @test256_16(<4 x i64> %x, i64* %yb.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind {
431 ; VLX-LABEL: test256_16:
433 ; VLX-NEXT: vpcmpleq %ymm1, %ymm2, %k1
434 ; VLX-NEXT: vpcmpgtq (%rdi){1to4}, %ymm0, %k1 {%k1}
435 ; VLX-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
438 ; NoVLX-LABEL: test256_16:
440 ; NoVLX-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm2
441 ; NoVLX-NEXT: vpbroadcastq (%rdi), %ymm3
442 ; NoVLX-NEXT: vpcmpgtq %ymm3, %ymm0, %ymm3
443 ; NoVLX-NEXT: vpandn %ymm3, %ymm2, %ymm2
444 ; NoVLX-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
446 %mask1 = icmp sge <4 x i64> %x1, %y1
447 %yb = load i64, i64* %yb.ptr, align 4
448 %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0
449 %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer
450 %mask0 = icmp sgt <4 x i64> %x, %y
451 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
452 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
456 define <8 x i32> @test256_17(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
457 ; VLX-LABEL: test256_17:
459 ; VLX-NEXT: vpcmpneqd (%rdi), %ymm0, %k1
460 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
463 ; NoVLX-LABEL: test256_17:
465 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
466 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
467 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
468 ; NoVLX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
469 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
470 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
472 %y = load <8 x i32>, <8 x i32>* %yp, align 4
473 %mask = icmp ne <8 x i32> %x, %y
474 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
478 define <8 x i32> @test256_18(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
479 ; VLX-LABEL: test256_18:
481 ; VLX-NEXT: vpcmpneqd (%rdi), %ymm0, %k1
482 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
485 ; NoVLX-LABEL: test256_18:
487 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
488 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
489 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
490 ; NoVLX-NEXT: vpcmpneqd %zmm0, %zmm2, %k1
491 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
492 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
494 %y = load <8 x i32>, <8 x i32>* %yp, align 4
495 %mask = icmp ne <8 x i32> %y, %x
496 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
500 define <8 x i32> @test256_19(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
501 ; VLX-LABEL: test256_19:
503 ; VLX-NEXT: vpcmpnltud (%rdi), %ymm0, %k1
504 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
507 ; NoVLX-LABEL: test256_19:
509 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
510 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
511 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
512 ; NoVLX-NEXT: vpcmpnltud %zmm2, %zmm0, %k1
513 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
514 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
516 %y = load <8 x i32>, <8 x i32>* %yp, align 4
517 %mask = icmp uge <8 x i32> %x, %y
518 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
522 define <8 x i32> @test256_20(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
523 ; VLX-LABEL: test256_20:
525 ; VLX-NEXT: vpcmpleud (%rdi), %ymm0, %k1
526 ; VLX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
529 ; NoVLX-LABEL: test256_20:
531 ; NoVLX-NEXT: # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
532 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
533 ; NoVLX-NEXT: vmovdqu (%rdi), %ymm2
534 ; NoVLX-NEXT: vpcmpnltud %zmm0, %zmm2, %k1
535 ; NoVLX-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
536 ; NoVLX-NEXT: # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
538 %y = load <8 x i32>, <8 x i32>* %yp, align 4
539 %mask = icmp uge <8 x i32> %y, %x
540 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
544 define <2 x i64> @test128_1(<2 x i64> %x, <2 x i64> %y) nounwind {
545 ; VLX-LABEL: test128_1:
547 ; VLX-NEXT: vpcmpeqq %xmm1, %xmm0, %k1
548 ; VLX-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
551 ; NoVLX-LABEL: test128_1:
553 ; NoVLX-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm2
554 ; NoVLX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
556 %mask = icmp eq <2 x i64> %x, %y
557 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %y
561 define <2 x i64> @test128_2(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind {
562 ; VLX-LABEL: test128_2:
564 ; VLX-NEXT: vpcmpgtq %xmm1, %xmm0, %k1
565 ; VLX-NEXT: vpblendmq %xmm2, %xmm1, %xmm0 {%k1}
568 ; NoVLX-LABEL: test128_2:
570 ; NoVLX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
571 ; NoVLX-NEXT: vblendvpd %xmm0, %xmm2, %xmm1, %xmm0
573 %mask = icmp sgt <2 x i64> %x, %y
574 %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y
578 define <4 x i32> @test128_3(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1) nounwind {
579 ; VLX-LABEL: test128_3:
581 ; VLX-NEXT: vpcmpled %xmm0, %xmm1, %k1
582 ; VLX-NEXT: vpblendmd %xmm2, %xmm1, %xmm0 {%k1}
585 ; NoVLX-LABEL: test128_3:
587 ; NoVLX-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0
588 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
589 ; NoVLX-NEXT: vpxor %xmm3, %xmm0, %xmm0
590 ; NoVLX-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm0
592 %mask = icmp sge <4 x i32> %x, %y
593 %max = select <4 x i1> %mask, <4 x i32> %x1, <4 x i32> %y
597 define <2 x i64> @test128_4(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind {
598 ; VLX-LABEL: test128_4:
600 ; VLX-NEXT: vpcmpnleuq %xmm1, %xmm0, %k1
601 ; VLX-NEXT: vpblendmq %xmm2, %xmm1, %xmm0 {%k1}
604 ; NoVLX-LABEL: test128_4:
606 ; NoVLX-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
607 ; NoVLX-NEXT: vpxor %xmm3, %xmm1, %xmm4
608 ; NoVLX-NEXT: vpxor %xmm3, %xmm0, %xmm0
609 ; NoVLX-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm0
610 ; NoVLX-NEXT: vblendvpd %xmm0, %xmm2, %xmm1, %xmm0
612 %mask = icmp ugt <2 x i64> %x, %y
613 %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y
617 define <4 x i32> @test128_5(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %yp) nounwind {
618 ; VLX-LABEL: test128_5:
620 ; VLX-NEXT: vpcmpeqd (%rdi), %xmm0, %k1
621 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
624 ; NoVLX-LABEL: test128_5:
626 ; NoVLX-NEXT: vpcmpeqd (%rdi), %xmm0, %xmm2
627 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
629 %y = load <4 x i32>, <4 x i32>* %yp, align 4
630 %mask = icmp eq <4 x i32> %x, %y
631 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
635 define <4 x i32> @test128_5b(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %yp) nounwind {
636 ; VLX-LABEL: test128_5b:
638 ; VLX-NEXT: vpcmpeqd (%rdi), %xmm0, %k1
639 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
642 ; NoVLX-LABEL: test128_5b:
644 ; NoVLX-NEXT: vpcmpeqd (%rdi), %xmm0, %xmm2
645 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
647 %y = load <4 x i32>, <4 x i32>* %yp, align 4
648 %mask = icmp eq <4 x i32> %y, %x
649 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
653 define <4 x i32> @test128_6(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
654 ; VLX-LABEL: test128_6:
656 ; VLX-NEXT: vpcmpgtd (%rdi), %xmm0, %k1
657 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
660 ; NoVLX-LABEL: test128_6:
662 ; NoVLX-NEXT: vpcmpgtd (%rdi), %xmm0, %xmm2
663 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
665 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
666 %mask = icmp sgt <4 x i32> %x, %y
667 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
671 define <4 x i32> @test128_6b(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
672 ; VLX-LABEL: test128_6b:
674 ; VLX-NEXT: vpcmpgtd (%rdi), %xmm0, %k1
675 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
678 ; NoVLX-LABEL: test128_6b:
680 ; NoVLX-NEXT: vpcmpgtd (%rdi), %xmm0, %xmm2
681 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
683 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
684 %mask = icmp slt <4 x i32> %y, %x
685 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
689 define <4 x i32> @test128_7(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
690 ; VLX-LABEL: test128_7:
692 ; VLX-NEXT: vpcmpled (%rdi), %xmm0, %k1
693 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
696 ; NoVLX-LABEL: test128_7:
698 ; NoVLX-NEXT: vpcmpgtd (%rdi), %xmm0, %xmm2
699 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
700 ; NoVLX-NEXT: vpxor %xmm3, %xmm2, %xmm2
701 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
703 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
704 %mask = icmp sle <4 x i32> %x, %y
705 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
709 define <4 x i32> @test128_7b(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
710 ; VLX-LABEL: test128_7b:
712 ; VLX-NEXT: vpcmpled (%rdi), %xmm0, %k1
713 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
716 ; NoVLX-LABEL: test128_7b:
718 ; NoVLX-NEXT: vpcmpgtd (%rdi), %xmm0, %xmm2
719 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
720 ; NoVLX-NEXT: vpxor %xmm3, %xmm2, %xmm2
721 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
723 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
724 %mask = icmp sge <4 x i32> %y, %x
725 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
729 define <4 x i32> @test128_8(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
730 ; VLX-LABEL: test128_8:
732 ; VLX-NEXT: vpcmpleud (%rdi), %xmm0, %k1
733 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
736 ; NoVLX-LABEL: test128_8:
738 ; NoVLX-NEXT: vpminud (%rdi), %xmm0, %xmm2
739 ; NoVLX-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm2
740 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
742 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
743 %mask = icmp ule <4 x i32> %x, %y
744 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
748 define <4 x i32> @test128_8b(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
749 ; VLX-LABEL: test128_8b:
751 ; VLX-NEXT: vpcmpleud (%rdi), %xmm0, %k1
752 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
755 ; NoVLX-LABEL: test128_8b:
757 ; NoVLX-NEXT: vmovdqu (%rdi), %xmm2
758 ; NoVLX-NEXT: vpmaxud %xmm0, %xmm2, %xmm3
759 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm2
760 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
762 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
763 %mask = icmp uge <4 x i32> %y, %x
764 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
768 define <4 x i32> @test128_9(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1, <4 x i32> %y1) nounwind {
769 ; VLX-LABEL: test128_9:
771 ; VLX-NEXT: vpcmpeqd %xmm1, %xmm0, %k1
772 ; VLX-NEXT: vpcmpeqd %xmm3, %xmm2, %k1 {%k1}
773 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
776 ; NoVLX-LABEL: test128_9:
778 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm2
779 ; NoVLX-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm3
780 ; NoVLX-NEXT: vpand %xmm2, %xmm3, %xmm2
781 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
783 %mask1 = icmp eq <4 x i32> %x1, %y1
784 %mask0 = icmp eq <4 x i32> %x, %y
785 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
786 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %y
790 define <2 x i64> @test128_10(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1, <2 x i64> %y1) nounwind {
791 ; VLX-LABEL: test128_10:
793 ; VLX-NEXT: vpcmpleq %xmm1, %xmm0, %k1
794 ; VLX-NEXT: vpcmpleq %xmm2, %xmm3, %k1 {%k1}
795 ; VLX-NEXT: vpblendmq %xmm0, %xmm2, %xmm0 {%k1}
798 ; NoVLX-LABEL: test128_10:
800 ; NoVLX-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm3
801 ; NoVLX-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
802 ; NoVLX-NEXT: vpxor %xmm4, %xmm3, %xmm3
803 ; NoVLX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm1
804 ; NoVLX-NEXT: vpandn %xmm3, %xmm1, %xmm1
805 ; NoVLX-NEXT: vblendvpd %xmm1, %xmm0, %xmm2, %xmm0
807 %mask1 = icmp sge <2 x i64> %x1, %y1
808 %mask0 = icmp sle <2 x i64> %x, %y
809 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer
810 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
814 define <2 x i64> @test128_11(<2 x i64> %x, <2 x i64>* %y.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind {
815 ; VLX-LABEL: test128_11:
817 ; VLX-NEXT: vpcmpgtq %xmm2, %xmm1, %k1
818 ; VLX-NEXT: vpcmpgtq (%rdi), %xmm0, %k1 {%k1}
819 ; VLX-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
822 ; NoVLX-LABEL: test128_11:
824 ; NoVLX-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm3
825 ; NoVLX-NEXT: vpcmpgtq %xmm2, %xmm1, %xmm2
826 ; NoVLX-NEXT: vpand %xmm2, %xmm3, %xmm2
827 ; NoVLX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
829 %mask1 = icmp sgt <2 x i64> %x1, %y1
830 %y = load <2 x i64>, <2 x i64>* %y.ptr, align 4
831 %mask0 = icmp sgt <2 x i64> %x, %y
832 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer
833 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
837 define <4 x i32> @test128_12(<4 x i32> %x, <4 x i32>* %y.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind {
838 ; VLX-LABEL: test128_12:
840 ; VLX-NEXT: vpcmpled %xmm1, %xmm2, %k1
841 ; VLX-NEXT: vpcmpleud (%rdi), %xmm0, %k1 {%k1}
842 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
845 ; NoVLX-LABEL: test128_12:
847 ; NoVLX-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm2
848 ; NoVLX-NEXT: vpminud (%rdi), %xmm0, %xmm3
849 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm3
850 ; NoVLX-NEXT: vpandn %xmm3, %xmm2, %xmm2
851 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
853 %mask1 = icmp sge <4 x i32> %x1, %y1
854 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
855 %mask0 = icmp ule <4 x i32> %x, %y
856 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
857 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
861 define <2 x i64> @test128_13(<2 x i64> %x, <2 x i64> %x1, i64* %yb.ptr) nounwind {
862 ; VLX-LABEL: test128_13:
864 ; VLX-NEXT: vpcmpeqq (%rdi){1to2}, %xmm0, %k1
865 ; VLX-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
868 ; NoVLX-LABEL: test128_13:
870 ; NoVLX-NEXT: vpbroadcastq (%rdi), %xmm2
871 ; NoVLX-NEXT: vpcmpeqq %xmm2, %xmm0, %xmm2
872 ; NoVLX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
874 %yb = load i64, i64* %yb.ptr, align 4
875 %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 0
876 %y = insertelement <2 x i64> %y.0, i64 %yb, i32 1
877 %mask = icmp eq <2 x i64> %x, %y
878 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
882 define <4 x i32> @test128_14(<4 x i32> %x, i32* %yb.ptr, <4 x i32> %x1) nounwind {
883 ; VLX-LABEL: test128_14:
885 ; VLX-NEXT: vpcmpled (%rdi){1to4}, %xmm0, %k1
886 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
889 ; NoVLX-LABEL: test128_14:
891 ; NoVLX-NEXT: vpbroadcastd (%rdi), %xmm2
892 ; NoVLX-NEXT: vpcmpgtd %xmm2, %xmm0, %xmm2
893 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
894 ; NoVLX-NEXT: vpxor %xmm3, %xmm2, %xmm2
895 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
897 %yb = load i32, i32* %yb.ptr, align 4
898 %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0
899 %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer
900 %mask = icmp sle <4 x i32> %x, %y
901 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
905 define <4 x i32> @test128_15(<4 x i32> %x, i32* %yb.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind {
906 ; VLX-LABEL: test128_15:
908 ; VLX-NEXT: vpcmpled %xmm1, %xmm2, %k1
909 ; VLX-NEXT: vpcmpgtd (%rdi){1to4}, %xmm0, %k1 {%k1}
910 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
913 ; NoVLX-LABEL: test128_15:
915 ; NoVLX-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm2
916 ; NoVLX-NEXT: vpbroadcastd (%rdi), %xmm3
917 ; NoVLX-NEXT: vpcmpgtd %xmm3, %xmm0, %xmm3
918 ; NoVLX-NEXT: vpandn %xmm3, %xmm2, %xmm2
919 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
921 %mask1 = icmp sge <4 x i32> %x1, %y1
922 %yb = load i32, i32* %yb.ptr, align 4
923 %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0
924 %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer
925 %mask0 = icmp sgt <4 x i32> %x, %y
926 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
927 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
931 define <2 x i64> @test128_16(<2 x i64> %x, i64* %yb.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind {
932 ; VLX-LABEL: test128_16:
934 ; VLX-NEXT: vpcmpleq %xmm1, %xmm2, %k1
935 ; VLX-NEXT: vpcmpgtq (%rdi){1to2}, %xmm0, %k1 {%k1}
936 ; VLX-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
939 ; NoVLX-LABEL: test128_16:
941 ; NoVLX-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm2
942 ; NoVLX-NEXT: vpbroadcastq (%rdi), %xmm3
943 ; NoVLX-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm3
944 ; NoVLX-NEXT: vpandn %xmm3, %xmm2, %xmm2
945 ; NoVLX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
947 %mask1 = icmp sge <2 x i64> %x1, %y1
948 %yb = load i64, i64* %yb.ptr, align 4
949 %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 0
950 %y = insertelement <2 x i64> %y.0, i64 %yb, i32 1
951 %mask0 = icmp sgt <2 x i64> %x, %y
952 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer
953 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
957 define <4 x i32> @test128_17(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
958 ; VLX-LABEL: test128_17:
960 ; VLX-NEXT: vpcmpneqd (%rdi), %xmm0, %k1
961 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
964 ; NoVLX-LABEL: test128_17:
966 ; NoVLX-NEXT: vpcmpeqd (%rdi), %xmm0, %xmm2
967 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
968 ; NoVLX-NEXT: vpxor %xmm3, %xmm2, %xmm2
969 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
971 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
972 %mask = icmp ne <4 x i32> %x, %y
973 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
977 define <4 x i32> @test128_18(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
978 ; VLX-LABEL: test128_18:
980 ; VLX-NEXT: vpcmpneqd (%rdi), %xmm0, %k1
981 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
984 ; NoVLX-LABEL: test128_18:
986 ; NoVLX-NEXT: vpcmpeqd (%rdi), %xmm0, %xmm2
987 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
988 ; NoVLX-NEXT: vpxor %xmm3, %xmm2, %xmm2
989 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
991 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
992 %mask = icmp ne <4 x i32> %y, %x
993 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
997 define <4 x i32> @test128_19(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
998 ; VLX-LABEL: test128_19:
1000 ; VLX-NEXT: vpcmpnltud (%rdi), %xmm0, %k1
1001 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1004 ; NoVLX-LABEL: test128_19:
1006 ; NoVLX-NEXT: vpmaxud (%rdi), %xmm0, %xmm2
1007 ; NoVLX-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm2
1008 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1010 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
1011 %mask = icmp uge <4 x i32> %x, %y
1012 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
1016 define <4 x i32> @test128_20(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
1017 ; VLX-LABEL: test128_20:
1019 ; VLX-NEXT: vpcmpleud (%rdi), %xmm0, %k1
1020 ; VLX-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
1023 ; NoVLX-LABEL: test128_20:
1025 ; NoVLX-NEXT: vmovdqu (%rdi), %xmm2
1026 ; NoVLX-NEXT: vpmaxud %xmm0, %xmm2, %xmm3
1027 ; NoVLX-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm2
1028 ; NoVLX-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0
1030 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
1031 %mask = icmp uge <4 x i32> %y, %x
1032 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1