1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s
4 define <4 x i64> @test256_1(<4 x i64> %x, <4 x i64> %y) nounwind {
5 ; CHECK-LABEL: test256_1:
7 ; CHECK-NEXT: vpcmpeqq %ymm1, %ymm0, %k1
8 ; CHECK-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
10 %mask = icmp eq <4 x i64> %x, %y
11 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %y
15 define <4 x i64> @test256_2(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind {
16 ; CHECK-LABEL: test256_2:
18 ; CHECK-NEXT: vpcmpgtq %ymm1, %ymm0, %k1
19 ; CHECK-NEXT: vpblendmq %ymm2, %ymm1, %ymm0 {%k1}
21 %mask = icmp sgt <4 x i64> %x, %y
22 %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y
26 define <8 x i32> @test256_3(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1) nounwind {
27 ; CHECK-LABEL: test256_3:
29 ; CHECK-NEXT: vpcmpled %ymm0, %ymm1, %k1
30 ; CHECK-NEXT: vpblendmd %ymm2, %ymm1, %ymm0 {%k1}
32 %mask = icmp sge <8 x i32> %x, %y
33 %max = select <8 x i1> %mask, <8 x i32> %x1, <8 x i32> %y
37 define <4 x i64> @test256_4(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1) nounwind {
38 ; CHECK-LABEL: test256_4:
40 ; CHECK-NEXT: vpcmpnleuq %ymm1, %ymm0, %k1
41 ; CHECK-NEXT: vpblendmq %ymm2, %ymm1, %ymm0 {%k1}
43 %mask = icmp ugt <4 x i64> %x, %y
44 %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y
48 define <8 x i32> @test256_5(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
49 ; CHECK-LABEL: test256_5:
51 ; CHECK-NEXT: vpcmpeqd (%rdi), %ymm0, %k1
52 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
54 %y = load <8 x i32>, <8 x i32>* %yp, align 4
55 %mask = icmp eq <8 x i32> %x, %y
56 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
60 define <8 x i32> @test256_5b(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
61 ; CHECK-LABEL: test256_5b:
63 ; CHECK-NEXT: vpcmpeqd (%rdi), %ymm0, %k1
64 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
66 %y = load <8 x i32>, <8 x i32>* %yp, align 4
67 %mask = icmp eq <8 x i32> %y, %x
68 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
72 define <8 x i32> @test256_6(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
73 ; CHECK-LABEL: test256_6:
75 ; CHECK-NEXT: vpcmpgtd (%rdi), %ymm0, %k1
76 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
78 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
79 %mask = icmp sgt <8 x i32> %x, %y
80 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
84 define <8 x i32> @test256_6b(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
85 ; CHECK-LABEL: test256_6b:
87 ; CHECK-NEXT: vpcmpgtd (%rdi), %ymm0, %k1
88 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
90 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
91 %mask = icmp slt <8 x i32> %y, %x
92 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
96 define <8 x i32> @test256_7(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
97 ; CHECK-LABEL: test256_7:
99 ; CHECK-NEXT: vpcmpled (%rdi), %ymm0, %k1
100 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
102 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
103 %mask = icmp sle <8 x i32> %x, %y
104 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
108 define <8 x i32> @test256_7b(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
109 ; CHECK-LABEL: test256_7b:
111 ; CHECK-NEXT: vpcmpled (%rdi), %ymm0, %k1
112 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
114 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
115 %mask = icmp sge <8 x i32> %y, %x
116 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
120 define <8 x i32> @test256_8(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
121 ; CHECK-LABEL: test256_8:
123 ; CHECK-NEXT: vpcmpleud (%rdi), %ymm0, %k1
124 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
126 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
127 %mask = icmp ule <8 x i32> %x, %y
128 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
132 define <8 x i32> @test256_8b(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %y.ptr) nounwind {
133 ; CHECK-LABEL: test256_8b:
135 ; CHECK-NEXT: vpcmpleud (%rdi), %ymm0, %k1
136 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
138 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
139 %mask = icmp uge <8 x i32> %y, %x
140 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
144 define <8 x i32> @test256_9(<8 x i32> %x, <8 x i32> %y, <8 x i32> %x1, <8 x i32> %y1) nounwind {
145 ; CHECK-LABEL: test256_9:
147 ; CHECK-NEXT: vpcmpeqd %ymm1, %ymm0, %k1
148 ; CHECK-NEXT: vpcmpeqd %ymm3, %ymm2, %k1 {%k1}
149 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
151 %mask1 = icmp eq <8 x i32> %x1, %y1
152 %mask0 = icmp eq <8 x i32> %x, %y
153 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
154 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y
158 define <4 x i64> @test256_10(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1, <4 x i64> %y1) nounwind {
159 ; CHECK-LABEL: test256_10:
161 ; CHECK-NEXT: vpcmpleq %ymm1, %ymm0, %k1
162 ; CHECK-NEXT: vpcmpleq %ymm2, %ymm3, %k1 {%k1}
163 ; CHECK-NEXT: vpblendmq %ymm0, %ymm2, %ymm0 {%k1}
165 %mask1 = icmp sge <4 x i64> %x1, %y1
166 %mask0 = icmp sle <4 x i64> %x, %y
167 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
168 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
172 define <4 x i64> @test256_11(<4 x i64> %x, <4 x i64>* %y.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind {
173 ; CHECK-LABEL: test256_11:
175 ; CHECK-NEXT: vpcmpgtq %ymm2, %ymm1, %k1
176 ; CHECK-NEXT: vpcmpgtq (%rdi), %ymm0, %k1 {%k1}
177 ; CHECK-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
179 %mask1 = icmp sgt <4 x i64> %x1, %y1
180 %y = load <4 x i64>, <4 x i64>* %y.ptr, align 4
181 %mask0 = icmp sgt <4 x i64> %x, %y
182 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
183 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
187 define <8 x i32> @test256_12(<8 x i32> %x, <8 x i32>* %y.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind {
188 ; CHECK-LABEL: test256_12:
190 ; CHECK-NEXT: vpcmpled %ymm1, %ymm2, %k1
191 ; CHECK-NEXT: vpcmpleud (%rdi), %ymm0, %k1 {%k1}
192 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
194 %mask1 = icmp sge <8 x i32> %x1, %y1
195 %y = load <8 x i32>, <8 x i32>* %y.ptr, align 4
196 %mask0 = icmp ule <8 x i32> %x, %y
197 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
198 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
202 define <4 x i64> @test256_13(<4 x i64> %x, <4 x i64> %x1, i64* %yb.ptr) nounwind {
203 ; CHECK-LABEL: test256_13:
205 ; CHECK-NEXT: vpcmpeqq (%rdi){1to4}, %ymm0, %k1
206 ; CHECK-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
208 %yb = load i64, i64* %yb.ptr, align 4
209 %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0
210 %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer
211 %mask = icmp eq <4 x i64> %x, %y
212 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
216 define <8 x i32> @test256_14(<8 x i32> %x, i32* %yb.ptr, <8 x i32> %x1) nounwind {
217 ; CHECK-LABEL: test256_14:
219 ; CHECK-NEXT: vpcmpled (%rdi){1to8}, %ymm0, %k1
220 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
222 %yb = load i32, i32* %yb.ptr, align 4
223 %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0
224 %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer
225 %mask = icmp sle <8 x i32> %x, %y
226 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
230 define <8 x i32> @test256_15(<8 x i32> %x, i32* %yb.ptr, <8 x i32> %x1, <8 x i32> %y1) nounwind {
231 ; CHECK-LABEL: test256_15:
233 ; CHECK-NEXT: vpcmpled %ymm1, %ymm2, %k1
234 ; CHECK-NEXT: vpcmpgtd (%rdi){1to8}, %ymm0, %k1 {%k1}
235 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
237 %mask1 = icmp sge <8 x i32> %x1, %y1
238 %yb = load i32, i32* %yb.ptr, align 4
239 %y.0 = insertelement <8 x i32> undef, i32 %yb, i32 0
240 %y = shufflevector <8 x i32> %y.0, <8 x i32> undef, <8 x i32> zeroinitializer
241 %mask0 = icmp sgt <8 x i32> %x, %y
242 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
243 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
247 define <4 x i64> @test256_16(<4 x i64> %x, i64* %yb.ptr, <4 x i64> %x1, <4 x i64> %y1) nounwind {
248 ; CHECK-LABEL: test256_16:
250 ; CHECK-NEXT: vpcmpleq %ymm1, %ymm2, %k1
251 ; CHECK-NEXT: vpcmpgtq (%rdi){1to4}, %ymm0, %k1 {%k1}
252 ; CHECK-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
254 %mask1 = icmp sge <4 x i64> %x1, %y1
255 %yb = load i64, i64* %yb.ptr, align 4
256 %y.0 = insertelement <4 x i64> undef, i64 %yb, i32 0
257 %y = shufflevector <4 x i64> %y.0, <4 x i64> undef, <4 x i32> zeroinitializer
258 %mask0 = icmp sgt <4 x i64> %x, %y
259 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
260 %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %x1
264 define <8 x i32> @test256_17(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
265 ; CHECK-LABEL: test256_17:
267 ; CHECK-NEXT: vpcmpneqd (%rdi), %ymm0, %k1
268 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
270 %y = load <8 x i32>, <8 x i32>* %yp, align 4
271 %mask = icmp ne <8 x i32> %x, %y
272 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
276 define <8 x i32> @test256_18(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
277 ; CHECK-LABEL: test256_18:
279 ; CHECK-NEXT: vpcmpneqd (%rdi), %ymm0, %k1
280 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
282 %y = load <8 x i32>, <8 x i32>* %yp, align 4
283 %mask = icmp ne <8 x i32> %y, %x
284 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
288 define <8 x i32> @test256_19(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
289 ; CHECK-LABEL: test256_19:
291 ; CHECK-NEXT: vpcmpnltud (%rdi), %ymm0, %k1
292 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
294 %y = load <8 x i32>, <8 x i32>* %yp, align 4
295 %mask = icmp uge <8 x i32> %x, %y
296 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
300 define <8 x i32> @test256_20(<8 x i32> %x, <8 x i32> %x1, <8 x i32>* %yp) nounwind {
301 ; CHECK-LABEL: test256_20:
303 ; CHECK-NEXT: vpcmpleud (%rdi), %ymm0, %k1
304 ; CHECK-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
306 %y = load <8 x i32>, <8 x i32>* %yp, align 4
307 %mask = icmp uge <8 x i32> %y, %x
308 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %x1
312 define <2 x i64> @test128_1(<2 x i64> %x, <2 x i64> %y) nounwind {
313 ; CHECK-LABEL: test128_1:
315 ; CHECK-NEXT: vpcmpeqq %xmm1, %xmm0, %k1
316 ; CHECK-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
318 %mask = icmp eq <2 x i64> %x, %y
319 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %y
323 define <2 x i64> @test128_2(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind {
324 ; CHECK-LABEL: test128_2:
326 ; CHECK-NEXT: vpcmpgtq %xmm1, %xmm0, %k1
327 ; CHECK-NEXT: vpblendmq %xmm2, %xmm1, %xmm0 {%k1}
329 %mask = icmp sgt <2 x i64> %x, %y
330 %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y
334 define <4 x i32> @test128_3(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1) nounwind {
335 ; CHECK-LABEL: test128_3:
337 ; CHECK-NEXT: vpcmpled %xmm0, %xmm1, %k1
338 ; CHECK-NEXT: vpblendmd %xmm2, %xmm1, %xmm0 {%k1}
340 %mask = icmp sge <4 x i32> %x, %y
341 %max = select <4 x i1> %mask, <4 x i32> %x1, <4 x i32> %y
345 define <2 x i64> @test128_4(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1) nounwind {
346 ; CHECK-LABEL: test128_4:
348 ; CHECK-NEXT: vpcmpnleuq %xmm1, %xmm0, %k1
349 ; CHECK-NEXT: vpblendmq %xmm2, %xmm1, %xmm0 {%k1}
351 %mask = icmp ugt <2 x i64> %x, %y
352 %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y
356 define <4 x i32> @test128_5(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %yp) nounwind {
357 ; CHECK-LABEL: test128_5:
359 ; CHECK-NEXT: vpcmpeqd (%rdi), %xmm0, %k1
360 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
362 %y = load <4 x i32>, <4 x i32>* %yp, align 4
363 %mask = icmp eq <4 x i32> %x, %y
364 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
368 define <4 x i32> @test128_5b(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %yp) nounwind {
369 ; CHECK-LABEL: test128_5b:
371 ; CHECK-NEXT: vpcmpeqd (%rdi), %xmm0, %k1
372 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
374 %y = load <4 x i32>, <4 x i32>* %yp, align 4
375 %mask = icmp eq <4 x i32> %y, %x
376 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
380 define <4 x i32> @test128_6(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
381 ; CHECK-LABEL: test128_6:
383 ; CHECK-NEXT: vpcmpgtd (%rdi), %xmm0, %k1
384 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
386 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
387 %mask = icmp sgt <4 x i32> %x, %y
388 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
392 define <4 x i32> @test128_6b(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
393 ; CHECK-LABEL: test128_6b:
395 ; CHECK-NEXT: vpcmpgtd (%rdi), %xmm0, %k1
396 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
398 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
399 %mask = icmp slt <4 x i32> %y, %x
400 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
404 define <4 x i32> @test128_7(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
405 ; CHECK-LABEL: test128_7:
407 ; CHECK-NEXT: vpcmpled (%rdi), %xmm0, %k1
408 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
410 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
411 %mask = icmp sle <4 x i32> %x, %y
412 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
416 define <4 x i32> @test128_7b(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
417 ; CHECK-LABEL: test128_7b:
419 ; CHECK-NEXT: vpcmpled (%rdi), %xmm0, %k1
420 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
422 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
423 %mask = icmp sge <4 x i32> %y, %x
424 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
428 define <4 x i32> @test128_8(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
429 ; CHECK-LABEL: test128_8:
431 ; CHECK-NEXT: vpcmpleud (%rdi), %xmm0, %k1
432 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
434 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
435 %mask = icmp ule <4 x i32> %x, %y
436 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
440 define <4 x i32> @test128_8b(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
441 ; CHECK-LABEL: test128_8b:
443 ; CHECK-NEXT: vpcmpleud (%rdi), %xmm0, %k1
444 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
446 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
447 %mask = icmp uge <4 x i32> %y, %x
448 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
452 define <4 x i32> @test128_9(<4 x i32> %x, <4 x i32> %y, <4 x i32> %x1, <4 x i32> %y1) nounwind {
453 ; CHECK-LABEL: test128_9:
455 ; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %k1
456 ; CHECK-NEXT: vpcmpeqd %xmm3, %xmm2, %k1 {%k1}
457 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
459 %mask1 = icmp eq <4 x i32> %x1, %y1
460 %mask0 = icmp eq <4 x i32> %x, %y
461 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
462 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %y
466 define <2 x i64> @test128_10(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1, <2 x i64> %y1) nounwind {
467 ; CHECK-LABEL: test128_10:
469 ; CHECK-NEXT: vpcmpleq %xmm1, %xmm0, %k1
470 ; CHECK-NEXT: vpcmpleq %xmm2, %xmm3, %k1 {%k1}
471 ; CHECK-NEXT: vpblendmq %xmm0, %xmm2, %xmm0 {%k1}
473 %mask1 = icmp sge <2 x i64> %x1, %y1
474 %mask0 = icmp sle <2 x i64> %x, %y
475 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer
476 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
480 define <2 x i64> @test128_11(<2 x i64> %x, <2 x i64>* %y.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind {
481 ; CHECK-LABEL: test128_11:
483 ; CHECK-NEXT: vpcmpgtq %xmm2, %xmm1, %k1
484 ; CHECK-NEXT: vpcmpgtq (%rdi), %xmm0, %k1 {%k1}
485 ; CHECK-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
487 %mask1 = icmp sgt <2 x i64> %x1, %y1
488 %y = load <2 x i64>, <2 x i64>* %y.ptr, align 4
489 %mask0 = icmp sgt <2 x i64> %x, %y
490 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer
491 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
495 define <4 x i32> @test128_12(<4 x i32> %x, <4 x i32>* %y.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind {
496 ; CHECK-LABEL: test128_12:
498 ; CHECK-NEXT: vpcmpled %xmm1, %xmm2, %k1
499 ; CHECK-NEXT: vpcmpleud (%rdi), %xmm0, %k1 {%k1}
500 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
502 %mask1 = icmp sge <4 x i32> %x1, %y1
503 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
504 %mask0 = icmp ule <4 x i32> %x, %y
505 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
506 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
510 define <2 x i64> @test128_13(<2 x i64> %x, <2 x i64> %x1, i64* %yb.ptr) nounwind {
511 ; CHECK-LABEL: test128_13:
513 ; CHECK-NEXT: vpcmpeqq (%rdi){1to2}, %xmm0, %k1
514 ; CHECK-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
516 %yb = load i64, i64* %yb.ptr, align 4
517 %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 0
518 %y = insertelement <2 x i64> %y.0, i64 %yb, i32 1
519 %mask = icmp eq <2 x i64> %x, %y
520 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
524 define <4 x i32> @test128_14(<4 x i32> %x, i32* %yb.ptr, <4 x i32> %x1) nounwind {
525 ; CHECK-LABEL: test128_14:
527 ; CHECK-NEXT: vpcmpled (%rdi){1to4}, %xmm0, %k1
528 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
530 %yb = load i32, i32* %yb.ptr, align 4
531 %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0
532 %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer
533 %mask = icmp sle <4 x i32> %x, %y
534 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
538 define <4 x i32> @test128_15(<4 x i32> %x, i32* %yb.ptr, <4 x i32> %x1, <4 x i32> %y1) nounwind {
539 ; CHECK-LABEL: test128_15:
541 ; CHECK-NEXT: vpcmpled %xmm1, %xmm2, %k1
542 ; CHECK-NEXT: vpcmpgtd (%rdi){1to4}, %xmm0, %k1 {%k1}
543 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
545 %mask1 = icmp sge <4 x i32> %x1, %y1
546 %yb = load i32, i32* %yb.ptr, align 4
547 %y.0 = insertelement <4 x i32> undef, i32 %yb, i32 0
548 %y = shufflevector <4 x i32> %y.0, <4 x i32> undef, <4 x i32> zeroinitializer
549 %mask0 = icmp sgt <4 x i32> %x, %y
550 %mask = select <4 x i1> %mask0, <4 x i1> %mask1, <4 x i1> zeroinitializer
551 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
555 define <2 x i64> @test128_16(<2 x i64> %x, i64* %yb.ptr, <2 x i64> %x1, <2 x i64> %y1) nounwind {
556 ; CHECK-LABEL: test128_16:
558 ; CHECK-NEXT: vpcmpleq %xmm1, %xmm2, %k1
559 ; CHECK-NEXT: vpcmpgtq (%rdi){1to2}, %xmm0, %k1 {%k1}
560 ; CHECK-NEXT: vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
562 %mask1 = icmp sge <2 x i64> %x1, %y1
563 %yb = load i64, i64* %yb.ptr, align 4
564 %y.0 = insertelement <2 x i64> undef, i64 %yb, i32 0
565 %y = insertelement <2 x i64> %y.0, i64 %yb, i32 1
566 %mask0 = icmp sgt <2 x i64> %x, %y
567 %mask = select <2 x i1> %mask0, <2 x i1> %mask1, <2 x i1> zeroinitializer
568 %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %x1
572 define <4 x i32> @test128_17(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
573 ; CHECK-LABEL: test128_17:
575 ; CHECK-NEXT: vpcmpneqd (%rdi), %xmm0, %k1
576 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
578 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
579 %mask = icmp ne <4 x i32> %x, %y
580 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
584 define <4 x i32> @test128_18(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
585 ; CHECK-LABEL: test128_18:
587 ; CHECK-NEXT: vpcmpneqd (%rdi), %xmm0, %k1
588 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
590 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
591 %mask = icmp ne <4 x i32> %y, %x
592 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
596 define <4 x i32> @test128_19(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
597 ; CHECK-LABEL: test128_19:
599 ; CHECK-NEXT: vpcmpnltud (%rdi), %xmm0, %k1
600 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
602 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
603 %mask = icmp uge <4 x i32> %x, %y
604 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1
608 define <4 x i32> @test128_20(<4 x i32> %x, <4 x i32> %x1, <4 x i32>* %y.ptr) nounwind {
609 ; CHECK-LABEL: test128_20:
611 ; CHECK-NEXT: vpcmpleud (%rdi), %xmm0, %k1
612 ; CHECK-NEXT: vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
614 %y = load <4 x i32>, <4 x i32>* %y.ptr, align 4
615 %mask = icmp uge <4 x i32> %y, %x
616 %max = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> %x1