[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / avx512vl-vec-cmp.ll
blob5b09e45b6fcf17835f3c9c03146f61e9ee517a86
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
5 define <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
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
25 define <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
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
46 define <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
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
67 define <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
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
88 define <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
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
110 define <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
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
132 define <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
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
154 define <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
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
176 define <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
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
198 define <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
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
220 define <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
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
242 define <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
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
264 define <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
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
290 define <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
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
316 define <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
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
343 define <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
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
370 define <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
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
393 define <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
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
416 define <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
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
444 define <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
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
472 define <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
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
494 define <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
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
516 define <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
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
538 define <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
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
560 define <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
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
580 define <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
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
601 define <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
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
622 define <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
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
643 define <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
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
665 define <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
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
687 define <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
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
709 define <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
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
731 define <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
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
753 define <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
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
775 define <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
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
797 define <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
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
819 define <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
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
845 define <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
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
871 define <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
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
898 define <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
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
925 define <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
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
948 define <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
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
971 define <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
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
999 define <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
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
1027 define <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
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
1049 define <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
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
1071 define <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
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
1093 define <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
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
1115 define <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
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