]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/X86/avx512vl-vec-cmp.ll
Vendor import of llvm trunk r291274:
[FreeBSD/FreeBSD.git] / test / CodeGen / X86 / avx512vl-vec-cmp.ll
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
3
4 define <4 x i64> @test256_1(<4 x i64> %x, <4 x i64> %y) nounwind {
5 ; CHECK-LABEL: test256_1:
6 ; CHECK:       ## BB#0:
7 ; CHECK-NEXT:    vpcmpeqq %ymm1, %ymm0, %k1
8 ; CHECK-NEXT:    vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
9 ; CHECK-NEXT:    retq
10   %mask = icmp eq <4 x i64> %x, %y
11   %max = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> %y
12   ret <4 x i64> %max
13 }
14
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:
17 ; CHECK:       ## BB#0:
18 ; CHECK-NEXT:    vpcmpgtq %ymm1, %ymm0, %k1
19 ; CHECK-NEXT:    vpblendmq %ymm2, %ymm1, %ymm0 {%k1}
20 ; CHECK-NEXT:    retq
21   %mask = icmp sgt <4 x i64> %x, %y
22   %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y
23   ret <4 x i64> %max
24 }
25
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:
28 ; CHECK:       ## BB#0:
29 ; CHECK-NEXT:    vpcmpled %ymm0, %ymm1, %k1
30 ; CHECK-NEXT:    vpblendmd %ymm2, %ymm1, %ymm0 {%k1}
31 ; CHECK-NEXT:    retq
32   %mask = icmp sge <8 x i32> %x, %y
33   %max = select <8 x i1> %mask, <8 x i32> %x1, <8 x i32> %y
34   ret <8 x i32> %max
35 }
36
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:
39 ; CHECK:       ## BB#0:
40 ; CHECK-NEXT:    vpcmpnleuq %ymm1, %ymm0, %k1
41 ; CHECK-NEXT:    vpblendmq %ymm2, %ymm1, %ymm0 {%k1}
42 ; CHECK-NEXT:    retq
43   %mask = icmp ugt <4 x i64> %x, %y
44   %max = select <4 x i1> %mask, <4 x i64> %x1, <4 x i64> %y
45   ret <4 x i64> %max
46 }
47
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:
50 ; CHECK:       ## BB#0:
51 ; CHECK-NEXT:    vpcmpeqd (%rdi), %ymm0, %k1
52 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
53 ; CHECK-NEXT:    retq
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
57   ret <8 x i32> %max
58 }
59
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:
62 ; CHECK:       ## BB#0:
63 ; CHECK-NEXT:    vpcmpeqd (%rdi), %ymm0, %k1
64 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
65 ; CHECK-NEXT:    retq
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
69   ret <8 x i32> %max
70 }
71
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:
74 ; CHECK:       ## BB#0:
75 ; CHECK-NEXT:    vpcmpgtd (%rdi), %ymm0, %k1
76 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
77 ; CHECK-NEXT:    retq
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
81   ret <8 x i32> %max
82 }
83
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:
86 ; CHECK:       ## BB#0:
87 ; CHECK-NEXT:    vpcmpgtd (%rdi), %ymm0, %k1
88 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
89 ; CHECK-NEXT:    retq
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
93   ret <8 x i32> %max
94 }
95
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:
98 ; CHECK:       ## BB#0:
99 ; CHECK-NEXT:    vpcmpled (%rdi), %ymm0, %k1
100 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
101 ; CHECK-NEXT:    retq
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
105   ret <8 x i32> %max
106 }
107
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:
110 ; CHECK:       ## BB#0:
111 ; CHECK-NEXT:    vpcmpled (%rdi), %ymm0, %k1
112 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
113 ; CHECK-NEXT:    retq
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
117   ret <8 x i32> %max
118 }
119
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:
122 ; CHECK:       ## BB#0:
123 ; CHECK-NEXT:    vpcmpleud (%rdi), %ymm0, %k1
124 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
125 ; CHECK-NEXT:    retq
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
129   ret <8 x i32> %max
130 }
131
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:
134 ; CHECK:       ## BB#0:
135 ; CHECK-NEXT:    vpcmpleud (%rdi), %ymm0, %k1
136 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
137 ; CHECK-NEXT:    retq
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
141   ret <8 x i32> %max
142 }
143
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:
146 ; CHECK:       ## BB#0:
147 ; CHECK-NEXT:    vpcmpeqd %ymm1, %ymm0, %k1
148 ; CHECK-NEXT:    vpcmpeqd %ymm3, %ymm2, %k1 {%k1}
149 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
150 ; CHECK-NEXT:    retq
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
155   ret <8 x i32> %max
156 }
157
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:
160 ; CHECK:       ## BB#0:
161 ; CHECK-NEXT:    vpcmpleq %ymm1, %ymm0, %k1
162 ; CHECK-NEXT:    vpcmpleq %ymm2, %ymm3, %k1 {%k1}
163 ; CHECK-NEXT:    vpblendmq %ymm0, %ymm2, %ymm0 {%k1}
164 ; CHECK-NEXT:    retq
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
169   ret <4 x i64> %max
170 }
171
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:
174 ; CHECK:       ## BB#0:
175 ; CHECK-NEXT:    vpcmpgtq %ymm2, %ymm1, %k1
176 ; CHECK-NEXT:    vpcmpgtq (%rdi), %ymm0, %k1 {%k1}
177 ; CHECK-NEXT:    vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
178 ; CHECK-NEXT:    retq
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
184   ret <4 x i64> %max
185 }
186
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:
189 ; CHECK:       ## BB#0:
190 ; CHECK-NEXT:    vpcmpled %ymm1, %ymm2, %k1
191 ; CHECK-NEXT:    vpcmpleud (%rdi), %ymm0, %k1 {%k1}
192 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
193 ; CHECK-NEXT:    retq
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
199   ret <8 x i32> %max
200 }
201
202 define <4 x i64> @test256_13(<4 x i64> %x, <4 x i64> %x1, i64* %yb.ptr) nounwind {
203 ; CHECK-LABEL: test256_13:
204 ; CHECK:       ## BB#0:
205 ; CHECK-NEXT:    vpcmpeqq (%rdi){1to4}, %ymm0, %k1
206 ; CHECK-NEXT:    vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
207 ; CHECK-NEXT:    retq
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
213   ret <4 x i64> %max
214 }
215
216 define <8 x i32> @test256_14(<8 x i32> %x, i32* %yb.ptr, <8 x i32> %x1) nounwind {
217 ; CHECK-LABEL: test256_14:
218 ; CHECK:       ## BB#0:
219 ; CHECK-NEXT:    vpcmpled (%rdi){1to8}, %ymm0, %k1
220 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
221 ; CHECK-NEXT:    retq
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
227   ret <8 x i32> %max
228 }
229
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:
232 ; CHECK:       ## BB#0:
233 ; CHECK-NEXT:    vpcmpled %ymm1, %ymm2, %k1
234 ; CHECK-NEXT:    vpcmpgtd (%rdi){1to8}, %ymm0, %k1 {%k1}
235 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
236 ; CHECK-NEXT:    retq
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
244   ret <8 x i32> %max
245 }
246
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:
249 ; CHECK:       ## BB#0:
250 ; CHECK-NEXT:    vpcmpleq %ymm1, %ymm2, %k1
251 ; CHECK-NEXT:    vpcmpgtq (%rdi){1to4}, %ymm0, %k1 {%k1}
252 ; CHECK-NEXT:    vpblendmq %ymm0, %ymm1, %ymm0 {%k1}
253 ; CHECK-NEXT:    retq
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
261   ret <4 x i64> %max
262 }
263
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:
266 ; CHECK:       ## BB#0:
267 ; CHECK-NEXT:    vpcmpneqd (%rdi), %ymm0, %k1
268 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
269 ; CHECK-NEXT:    retq
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
273   ret <8 x i32> %max
274 }
275
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:
278 ; CHECK:       ## BB#0:
279 ; CHECK-NEXT:    vpcmpneqd (%rdi), %ymm0, %k1
280 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
281 ; CHECK-NEXT:    retq
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
285   ret <8 x i32> %max
286 }
287
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:
290 ; CHECK:       ## BB#0:
291 ; CHECK-NEXT:    vpcmpnltud (%rdi), %ymm0, %k1
292 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
293 ; CHECK-NEXT:    retq
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
297   ret <8 x i32> %max
298 }
299
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:
302 ; CHECK:       ## BB#0:
303 ; CHECK-NEXT:    vpcmpleud (%rdi), %ymm0, %k1
304 ; CHECK-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}
305 ; CHECK-NEXT:    retq
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
309   ret <8 x i32> %max
310 }
311
312 define <2 x i64> @test128_1(<2 x i64> %x, <2 x i64> %y) nounwind {
313 ; CHECK-LABEL: test128_1:
314 ; CHECK:       ## BB#0:
315 ; CHECK-NEXT:    vpcmpeqq %xmm1, %xmm0, %k1
316 ; CHECK-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
317 ; CHECK-NEXT:    retq
318   %mask = icmp eq <2 x i64> %x, %y
319   %max = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> %y
320   ret <2 x i64> %max
321 }
322
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:
325 ; CHECK:       ## BB#0:
326 ; CHECK-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1
327 ; CHECK-NEXT:    vpblendmq %xmm2, %xmm1, %xmm0 {%k1}
328 ; CHECK-NEXT:    retq
329   %mask = icmp sgt <2 x i64> %x, %y
330   %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y
331   ret <2 x i64> %max
332 }
333
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:
336 ; CHECK:       ## BB#0:
337 ; CHECK-NEXT:    vpcmpled %xmm0, %xmm1, %k1
338 ; CHECK-NEXT:    vpblendmd %xmm2, %xmm1, %xmm0 {%k1}
339 ; CHECK-NEXT:    retq
340   %mask = icmp sge <4 x i32> %x, %y
341   %max = select <4 x i1> %mask, <4 x i32> %x1, <4 x i32> %y
342   ret <4 x i32> %max
343 }
344
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:
347 ; CHECK:       ## BB#0:
348 ; CHECK-NEXT:    vpcmpnleuq %xmm1, %xmm0, %k1
349 ; CHECK-NEXT:    vpblendmq %xmm2, %xmm1, %xmm0 {%k1}
350 ; CHECK-NEXT:    retq
351   %mask = icmp ugt <2 x i64> %x, %y
352   %max = select <2 x i1> %mask, <2 x i64> %x1, <2 x i64> %y
353   ret <2 x i64> %max
354 }
355
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:
358 ; CHECK:       ## BB#0:
359 ; CHECK-NEXT:    vpcmpeqd (%rdi), %xmm0, %k1
360 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
361 ; CHECK-NEXT:    retq
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
365   ret <4 x i32> %max
366 }
367
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:
370 ; CHECK:       ## BB#0:
371 ; CHECK-NEXT:    vpcmpeqd (%rdi), %xmm0, %k1
372 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
373 ; CHECK-NEXT:    retq
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
377   ret <4 x i32> %max
378 }
379
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:
382 ; CHECK:       ## BB#0:
383 ; CHECK-NEXT:    vpcmpgtd (%rdi), %xmm0, %k1
384 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
385 ; CHECK-NEXT:    retq
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
389   ret <4 x i32> %max
390 }
391
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:
394 ; CHECK:       ## BB#0:
395 ; CHECK-NEXT:    vpcmpgtd (%rdi), %xmm0, %k1
396 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
397 ; CHECK-NEXT:    retq
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
401   ret <4 x i32> %max
402 }
403
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:
406 ; CHECK:       ## BB#0:
407 ; CHECK-NEXT:    vpcmpled (%rdi), %xmm0, %k1
408 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
409 ; CHECK-NEXT:    retq
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
413   ret <4 x i32> %max
414 }
415
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:
418 ; CHECK:       ## BB#0:
419 ; CHECK-NEXT:    vpcmpled (%rdi), %xmm0, %k1
420 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
421 ; CHECK-NEXT:    retq
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
425   ret <4 x i32> %max
426 }
427
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:
430 ; CHECK:       ## BB#0:
431 ; CHECK-NEXT:    vpcmpleud (%rdi), %xmm0, %k1
432 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
433 ; CHECK-NEXT:    retq
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
437   ret <4 x i32> %max
438 }
439
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:
442 ; CHECK:       ## BB#0:
443 ; CHECK-NEXT:    vpcmpleud (%rdi), %xmm0, %k1
444 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
445 ; CHECK-NEXT:    retq
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
449   ret <4 x i32> %max
450 }
451
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:
454 ; CHECK:       ## BB#0:
455 ; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm0, %k1
456 ; CHECK-NEXT:    vpcmpeqd %xmm3, %xmm2, %k1 {%k1}
457 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
458 ; CHECK-NEXT:    retq
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
463   ret <4 x i32> %max
464 }
465
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:
468 ; CHECK:       ## BB#0:
469 ; CHECK-NEXT:    vpcmpleq %xmm1, %xmm0, %k1
470 ; CHECK-NEXT:    vpcmpleq %xmm2, %xmm3, %k1 {%k1}
471 ; CHECK-NEXT:    vpblendmq %xmm0, %xmm2, %xmm0 {%k1}
472 ; CHECK-NEXT:    retq
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
477   ret <2 x i64> %max
478 }
479
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:
482 ; CHECK:       ## BB#0:
483 ; CHECK-NEXT:    vpcmpgtq %xmm2, %xmm1, %k1
484 ; CHECK-NEXT:    vpcmpgtq (%rdi), %xmm0, %k1 {%k1}
485 ; CHECK-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
486 ; CHECK-NEXT:    retq
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
492   ret <2 x i64> %max
493 }
494
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:
497 ; CHECK:       ## BB#0:
498 ; CHECK-NEXT:    vpcmpled %xmm1, %xmm2, %k1
499 ; CHECK-NEXT:    vpcmpleud (%rdi), %xmm0, %k1 {%k1}
500 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
501 ; CHECK-NEXT:    retq
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
507   ret <4 x i32> %max
508 }
509
510 define <2 x i64> @test128_13(<2 x i64> %x, <2 x i64> %x1, i64* %yb.ptr) nounwind {
511 ; CHECK-LABEL: test128_13:
512 ; CHECK:       ## BB#0:
513 ; CHECK-NEXT:    vpcmpeqq (%rdi){1to2}, %xmm0, %k1
514 ; CHECK-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
515 ; CHECK-NEXT:    retq
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
521   ret <2 x i64> %max
522 }
523
524 define <4 x i32> @test128_14(<4 x i32> %x, i32* %yb.ptr, <4 x i32> %x1) nounwind {
525 ; CHECK-LABEL: test128_14:
526 ; CHECK:       ## BB#0:
527 ; CHECK-NEXT:    vpcmpled (%rdi){1to4}, %xmm0, %k1
528 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
529 ; CHECK-NEXT:    retq
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
535   ret <4 x i32> %max
536 }
537
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:
540 ; CHECK:       ## BB#0:
541 ; CHECK-NEXT:    vpcmpled %xmm1, %xmm2, %k1
542 ; CHECK-NEXT:    vpcmpgtd (%rdi){1to4}, %xmm0, %k1 {%k1}
543 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
544 ; CHECK-NEXT:    retq
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
552   ret <4 x i32> %max
553 }
554
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:
557 ; CHECK:       ## BB#0:
558 ; CHECK-NEXT:    vpcmpleq %xmm1, %xmm2, %k1
559 ; CHECK-NEXT:    vpcmpgtq (%rdi){1to2}, %xmm0, %k1 {%k1}
560 ; CHECK-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}
561 ; CHECK-NEXT:    retq
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
569   ret <2 x i64> %max
570 }
571
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:
574 ; CHECK:       ## BB#0:
575 ; CHECK-NEXT:    vpcmpneqd (%rdi), %xmm0, %k1
576 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
577 ; CHECK-NEXT:    retq
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
581   ret <4 x i32> %max
582 }
583
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:
586 ; CHECK:       ## BB#0:
587 ; CHECK-NEXT:    vpcmpneqd (%rdi), %xmm0, %k1
588 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
589 ; CHECK-NEXT:    retq
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
593   ret <4 x i32> %max
594 }
595
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:
598 ; CHECK:       ## BB#0:
599 ; CHECK-NEXT:    vpcmpnltud (%rdi), %xmm0, %k1
600 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
601 ; CHECK-NEXT:    retq
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
605   ret <4 x i32> %max
606 }
607
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:
610 ; CHECK:       ## BB#0:
611 ; CHECK-NEXT:    vpcmpleud (%rdi), %xmm0, %k1
612 ; CHECK-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}
613 ; CHECK-NEXT:    retq
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
617   ret <4 x i32> %max
618 }