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 <32 x i8> @test256_1(<32 x i8> %x, <32 x i8> %y) nounwind {
5 ; CHECK-LABEL: test256_1:
7 ; CHECK-NEXT: vpcmpeqb %ymm1, %ymm0, %k1
8 ; CHECK-NEXT: vpblendmb %ymm0, %ymm1, %ymm0 {%k1}
10 %mask = icmp eq <32 x i8> %x, %y
11 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %y
15 define <32 x i8> @test256_2(<32 x i8> %x, <32 x i8> %y, <32 x i8> %x1) nounwind {
16 ; CHECK-LABEL: test256_2:
18 ; CHECK-NEXT: vpcmpgtb %ymm1, %ymm0, %k1
19 ; CHECK-NEXT: vpblendmb %ymm0, %ymm2, %ymm0 {%k1}
21 %mask = icmp sgt <32 x i8> %x, %y
22 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1
26 define <16 x i16> @test256_3(<16 x i16> %x, <16 x i16> %y, <16 x i16> %x1) nounwind {
27 ; CHECK-LABEL: test256_3:
29 ; CHECK-NEXT: vpcmpnltw %ymm1, %ymm0, %k1
30 ; CHECK-NEXT: vpblendmw %ymm2, %ymm1, %ymm0 {%k1}
32 %mask = icmp sge <16 x i16> %x, %y
33 %max = select <16 x i1> %mask, <16 x i16> %x1, <16 x i16> %y
37 define <32 x i8> @test256_4(<32 x i8> %x, <32 x i8> %y, <32 x i8> %x1) nounwind {
38 ; CHECK-LABEL: test256_4:
40 ; CHECK-NEXT: vpcmpnleub %ymm1, %ymm0, %k1
41 ; CHECK-NEXT: vpblendmb %ymm0, %ymm2, %ymm0 {%k1}
43 %mask = icmp ugt <32 x i8> %x, %y
44 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1
48 define <16 x i16> @test256_5(<16 x i16> %x, <16 x i16> %x1, ptr %yp) nounwind {
49 ; CHECK-LABEL: test256_5:
51 ; CHECK-NEXT: vpcmpeqw (%rdi), %ymm0, %k1
52 ; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
54 %y = load <16 x i16>, ptr %yp, align 4
55 %mask = icmp eq <16 x i16> %x, %y
56 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1
60 define <16 x i16> @test256_6(<16 x i16> %x, <16 x i16> %x1, ptr %y.ptr) nounwind {
61 ; CHECK-LABEL: test256_6:
63 ; CHECK-NEXT: vpcmpgtw (%rdi), %ymm0, %k1
64 ; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
66 %y = load <16 x i16>, ptr %y.ptr, align 4
67 %mask = icmp sgt <16 x i16> %x, %y
68 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1
72 define <16 x i16> @test256_7(<16 x i16> %x, <16 x i16> %x1, ptr %y.ptr) nounwind {
73 ; CHECK-LABEL: test256_7:
75 ; CHECK-NEXT: vpcmplew (%rdi), %ymm0, %k1
76 ; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
78 %y = load <16 x i16>, ptr %y.ptr, align 4
79 %mask = icmp sle <16 x i16> %x, %y
80 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1
84 define <16 x i16> @test256_8(<16 x i16> %x, <16 x i16> %x1, ptr %y.ptr) nounwind {
85 ; CHECK-LABEL: test256_8:
87 ; CHECK-NEXT: vpcmpleuw (%rdi), %ymm0, %k1
88 ; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
90 %y = load <16 x i16>, ptr %y.ptr, align 4
91 %mask = icmp ule <16 x i16> %x, %y
92 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1
96 define <16 x i16> @test256_9(<16 x i16> %x, <16 x i16> %y, <16 x i16> %x1, <16 x i16> %y1) nounwind {
97 ; CHECK-LABEL: test256_9:
99 ; CHECK-NEXT: vpcmpeqw %ymm1, %ymm0, %k1
100 ; CHECK-NEXT: vpcmpeqw %ymm3, %ymm2, %k1 {%k1}
101 ; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
103 %mask1 = icmp eq <16 x i16> %x1, %y1
104 %mask0 = icmp eq <16 x i16> %x, %y
105 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer
106 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %y
110 define <32 x i8> @test256_10(<32 x i8> %x, <32 x i8> %y, <32 x i8> %x1, <32 x i8> %y1) nounwind {
111 ; CHECK-LABEL: test256_10:
113 ; CHECK-NEXT: vpcmpleb %ymm1, %ymm0, %k1
114 ; CHECK-NEXT: vpcmpnltb %ymm3, %ymm2, %k1 {%k1}
115 ; CHECK-NEXT: vpblendmb %ymm0, %ymm2, %ymm0 {%k1}
117 %mask1 = icmp sge <32 x i8> %x1, %y1
118 %mask0 = icmp sle <32 x i8> %x, %y
119 %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer
120 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1
124 define <32 x i8> @test256_11(<32 x i8> %x, ptr %y.ptr, <32 x i8> %x1, <32 x i8> %y1) nounwind {
125 ; CHECK-LABEL: test256_11:
127 ; CHECK-NEXT: vpcmpgtb %ymm2, %ymm1, %k1
128 ; CHECK-NEXT: vpcmpgtb (%rdi), %ymm0, %k1 {%k1}
129 ; CHECK-NEXT: vpblendmb %ymm0, %ymm1, %ymm0 {%k1}
131 %mask1 = icmp sgt <32 x i8> %x1, %y1
132 %y = load <32 x i8>, ptr %y.ptr, align 4
133 %mask0 = icmp sgt <32 x i8> %x, %y
134 %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer
135 %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1
139 define <16 x i16> @test256_12(<16 x i16> %x, ptr %y.ptr, <16 x i16> %x1, <16 x i16> %y1) nounwind {
140 ; CHECK-LABEL: test256_12:
142 ; CHECK-NEXT: vpcmpnltw %ymm2, %ymm1, %k1
143 ; CHECK-NEXT: vpcmpleuw (%rdi), %ymm0, %k1 {%k1}
144 ; CHECK-NEXT: vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
146 %mask1 = icmp sge <16 x i16> %x1, %y1
147 %y = load <16 x i16>, ptr %y.ptr, align 4
148 %mask0 = icmp ule <16 x i16> %x, %y
149 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer
150 %max = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %x1
154 define <16 x i8> @test128_1(<16 x i8> %x, <16 x i8> %y) nounwind {
155 ; CHECK-LABEL: test128_1:
157 ; CHECK-NEXT: vpcmpeqb %xmm1, %xmm0, %k1
158 ; CHECK-NEXT: vpblendmb %xmm0, %xmm1, %xmm0 {%k1}
160 %mask = icmp eq <16 x i8> %x, %y
161 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %y
165 define <16 x i8> @test128_2(<16 x i8> %x, <16 x i8> %y, <16 x i8> %x1) nounwind {
166 ; CHECK-LABEL: test128_2:
168 ; CHECK-NEXT: vpcmpgtb %xmm1, %xmm0, %k1
169 ; CHECK-NEXT: vpblendmb %xmm0, %xmm2, %xmm0 {%k1}
171 %mask = icmp sgt <16 x i8> %x, %y
172 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1
176 define <8 x i16> @test128_3(<8 x i16> %x, <8 x i16> %y, <8 x i16> %x1) nounwind {
177 ; CHECK-LABEL: test128_3:
179 ; CHECK-NEXT: vpcmpnltw %xmm1, %xmm0, %k1
180 ; CHECK-NEXT: vpblendmw %xmm2, %xmm1, %xmm0 {%k1}
182 %mask = icmp sge <8 x i16> %x, %y
183 %max = select <8 x i1> %mask, <8 x i16> %x1, <8 x i16> %y
187 define <16 x i8> @test128_4(<16 x i8> %x, <16 x i8> %y, <16 x i8> %x1) nounwind {
188 ; CHECK-LABEL: test128_4:
190 ; CHECK-NEXT: vpcmpnleub %xmm1, %xmm0, %k1
191 ; CHECK-NEXT: vpblendmb %xmm0, %xmm2, %xmm0 {%k1}
193 %mask = icmp ugt <16 x i8> %x, %y
194 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1
198 define <8 x i16> @test128_5(<8 x i16> %x, <8 x i16> %x1, ptr %yp) nounwind {
199 ; CHECK-LABEL: test128_5:
201 ; CHECK-NEXT: vpcmpeqw (%rdi), %xmm0, %k1
202 ; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
204 %y = load <8 x i16>, ptr %yp, align 4
205 %mask = icmp eq <8 x i16> %x, %y
206 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1
210 define <8 x i16> @test128_6(<8 x i16> %x, <8 x i16> %x1, ptr %y.ptr) nounwind {
211 ; CHECK-LABEL: test128_6:
213 ; CHECK-NEXT: vpcmpgtw (%rdi), %xmm0, %k1
214 ; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
216 %y = load <8 x i16>, ptr %y.ptr, align 4
217 %mask = icmp sgt <8 x i16> %x, %y
218 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1
222 define <8 x i16> @test128_7(<8 x i16> %x, <8 x i16> %x1, ptr %y.ptr) nounwind {
223 ; CHECK-LABEL: test128_7:
225 ; CHECK-NEXT: vpcmplew (%rdi), %xmm0, %k1
226 ; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
228 %y = load <8 x i16>, ptr %y.ptr, align 4
229 %mask = icmp sle <8 x i16> %x, %y
230 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1
234 define <8 x i16> @test128_8(<8 x i16> %x, <8 x i16> %x1, ptr %y.ptr) nounwind {
235 ; CHECK-LABEL: test128_8:
237 ; CHECK-NEXT: vpcmpleuw (%rdi), %xmm0, %k1
238 ; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
240 %y = load <8 x i16>, ptr %y.ptr, align 4
241 %mask = icmp ule <8 x i16> %x, %y
242 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1
246 define <8 x i16> @test128_9(<8 x i16> %x, <8 x i16> %y, <8 x i16> %x1, <8 x i16> %y1) nounwind {
247 ; CHECK-LABEL: test128_9:
249 ; CHECK-NEXT: vpcmpeqw %xmm1, %xmm0, %k1
250 ; CHECK-NEXT: vpcmpeqw %xmm3, %xmm2, %k1 {%k1}
251 ; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
253 %mask1 = icmp eq <8 x i16> %x1, %y1
254 %mask0 = icmp eq <8 x i16> %x, %y
255 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
256 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %y
260 define <16 x i8> @test128_10(<16 x i8> %x, <16 x i8> %y, <16 x i8> %x1, <16 x i8> %y1) nounwind {
261 ; CHECK-LABEL: test128_10:
263 ; CHECK-NEXT: vpcmpleb %xmm1, %xmm0, %k1
264 ; CHECK-NEXT: vpcmpnltb %xmm3, %xmm2, %k1 {%k1}
265 ; CHECK-NEXT: vpblendmb %xmm0, %xmm2, %xmm0 {%k1}
267 %mask1 = icmp sge <16 x i8> %x1, %y1
268 %mask0 = icmp sle <16 x i8> %x, %y
269 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer
270 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1
274 define <16 x i8> @test128_11(<16 x i8> %x, ptr %y.ptr, <16 x i8> %x1, <16 x i8> %y1) nounwind {
275 ; CHECK-LABEL: test128_11:
277 ; CHECK-NEXT: vpcmpgtb %xmm2, %xmm1, %k1
278 ; CHECK-NEXT: vpcmpgtb (%rdi), %xmm0, %k1 {%k1}
279 ; CHECK-NEXT: vpblendmb %xmm0, %xmm1, %xmm0 {%k1}
281 %mask1 = icmp sgt <16 x i8> %x1, %y1
282 %y = load <16 x i8>, ptr %y.ptr, align 4
283 %mask0 = icmp sgt <16 x i8> %x, %y
284 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer
285 %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1
289 define <8 x i16> @test128_12(<8 x i16> %x, ptr %y.ptr, <8 x i16> %x1, <8 x i16> %y1) nounwind {
290 ; CHECK-LABEL: test128_12:
292 ; CHECK-NEXT: vpcmpnltw %xmm2, %xmm1, %k1
293 ; CHECK-NEXT: vpcmpleuw (%rdi), %xmm0, %k1 {%k1}
294 ; CHECK-NEXT: vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
296 %mask1 = icmp sge <8 x i16> %x1, %y1
297 %y = load <8 x i16>, ptr %y.ptr, align 4
298 %mask0 = icmp ule <8 x i16> %x, %y
299 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer
300 %max = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %x1