Use Align for TFL::TransientStackAlignment
[llvm-core.git] / test / CodeGen / X86 / avx512bwvl-vec-cmp.ll
blobdce09b23ddc18de4c4bf85c46ed9959a6a6456f8
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:
6 ; CHECK:       ## %bb.0:
7 ; CHECK-NEXT:    vpcmpeqb %ymm1, %ymm0, %k1
8 ; CHECK-NEXT:    vpblendmb %ymm0, %ymm1, %ymm0 {%k1}
9 ; CHECK-NEXT:    retq
10   %mask = icmp eq <32 x i8> %x, %y
11   %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %y
12   ret <32 x i8> %max
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:
17 ; CHECK:       ## %bb.0:
18 ; CHECK-NEXT:    vpcmpgtb %ymm1, %ymm0, %k1
19 ; CHECK-NEXT:    vpblendmb %ymm0, %ymm2, %ymm0 {%k1}
20 ; CHECK-NEXT:    retq
21   %mask = icmp sgt <32 x i8> %x, %y
22   %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1
23   ret <32 x i8> %max
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:
28 ; CHECK:       ## %bb.0:
29 ; CHECK-NEXT:    vpcmpnltw %ymm1, %ymm0, %k1
30 ; CHECK-NEXT:    vpblendmw %ymm2, %ymm1, %ymm0 {%k1}
31 ; CHECK-NEXT:    retq
32   %mask = icmp sge <16 x i16> %x, %y
33   %max = select <16 x i1> %mask, <16 x i16> %x1, <16 x i16> %y
34   ret <16 x i16> %max
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:
39 ; CHECK:       ## %bb.0:
40 ; CHECK-NEXT:    vpcmpnleub %ymm1, %ymm0, %k1
41 ; CHECK-NEXT:    vpblendmb %ymm0, %ymm2, %ymm0 {%k1}
42 ; CHECK-NEXT:    retq
43   %mask = icmp ugt <32 x i8> %x, %y
44   %max = select <32 x i1> %mask, <32 x i8> %x, <32 x i8> %x1
45   ret <32 x i8> %max
48 define <16 x i16> @test256_5(<16 x i16> %x, <16 x i16> %x1, <16 x i16>* %yp) nounwind {
49 ; CHECK-LABEL: test256_5:
50 ; CHECK:       ## %bb.0:
51 ; CHECK-NEXT:    vpcmpeqw (%rdi), %ymm0, %k1
52 ; CHECK-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
53 ; CHECK-NEXT:    retq
54   %y = load <16 x i16>, <16 x i16>* %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
57   ret <16 x i16> %max
60 define <16 x i16> @test256_6(<16 x i16> %x, <16 x i16> %x1, <16 x i16>* %y.ptr) nounwind {
61 ; CHECK-LABEL: test256_6:
62 ; CHECK:       ## %bb.0:
63 ; CHECK-NEXT:    vpcmpgtw (%rdi), %ymm0, %k1
64 ; CHECK-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
65 ; CHECK-NEXT:    retq
66   %y = load <16 x i16>, <16 x i16>* %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
69   ret <16 x i16> %max
72 define <16 x i16> @test256_7(<16 x i16> %x, <16 x i16> %x1, <16 x i16>* %y.ptr) nounwind {
73 ; CHECK-LABEL: test256_7:
74 ; CHECK:       ## %bb.0:
75 ; CHECK-NEXT:    vpcmplew (%rdi), %ymm0, %k1
76 ; CHECK-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
77 ; CHECK-NEXT:    retq
78   %y = load <16 x i16>, <16 x i16>* %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
81   ret <16 x i16> %max
84 define <16 x i16> @test256_8(<16 x i16> %x, <16 x i16> %x1, <16 x i16>* %y.ptr) nounwind {
85 ; CHECK-LABEL: test256_8:
86 ; CHECK:       ## %bb.0:
87 ; CHECK-NEXT:    vpcmpleuw (%rdi), %ymm0, %k1
88 ; CHECK-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
89 ; CHECK-NEXT:    retq
90   %y = load <16 x i16>, <16 x i16>* %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
93   ret <16 x i16> %max
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:
98 ; CHECK:       ## %bb.0:
99 ; CHECK-NEXT:    vpcmpeqw %ymm1, %ymm0, %k1
100 ; CHECK-NEXT:    vpcmpeqw %ymm3, %ymm2, %k1 {%k1}
101 ; CHECK-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
102 ; CHECK-NEXT:    retq
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
107   ret <16 x i16> %max
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:
112 ; CHECK:       ## %bb.0:
113 ; CHECK-NEXT:    vpcmpleb %ymm1, %ymm0, %k1
114 ; CHECK-NEXT:    vpcmpnltb %ymm3, %ymm2, %k1 {%k1}
115 ; CHECK-NEXT:    vpblendmb %ymm0, %ymm2, %ymm0 {%k1}
116 ; CHECK-NEXT:    retq
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
121   ret <32 x i8> %max
124 define <32 x i8> @test256_11(<32 x i8> %x, <32 x i8>* %y.ptr, <32 x i8> %x1, <32 x i8> %y1) nounwind {
125 ; CHECK-LABEL: test256_11:
126 ; CHECK:       ## %bb.0:
127 ; CHECK-NEXT:    vpcmpgtb %ymm2, %ymm1, %k1
128 ; CHECK-NEXT:    vpcmpgtb (%rdi), %ymm0, %k1 {%k1}
129 ; CHECK-NEXT:    vpblendmb %ymm0, %ymm1, %ymm0 {%k1}
130 ; CHECK-NEXT:    retq
131   %mask1 = icmp sgt <32 x i8> %x1, %y1
132   %y = load <32 x i8>, <32 x i8>* %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
136   ret <32 x i8> %max
139 define <16 x i16> @test256_12(<16 x i16> %x, <16 x i16>* %y.ptr, <16 x i16> %x1, <16 x i16> %y1) nounwind {
140 ; CHECK-LABEL: test256_12:
141 ; CHECK:       ## %bb.0:
142 ; CHECK-NEXT:    vpcmpnltw %ymm2, %ymm1, %k1
143 ; CHECK-NEXT:    vpcmpleuw (%rdi), %ymm0, %k1 {%k1}
144 ; CHECK-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}
145 ; CHECK-NEXT:    retq
146   %mask1 = icmp sge <16 x i16> %x1, %y1
147   %y = load <16 x i16>, <16 x i16>* %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
151   ret <16 x i16> %max
154 define <16 x i8> @test128_1(<16 x i8> %x, <16 x i8> %y) nounwind {
155 ; CHECK-LABEL: test128_1:
156 ; CHECK:       ## %bb.0:
157 ; CHECK-NEXT:    vpcmpeqb %xmm1, %xmm0, %k1
158 ; CHECK-NEXT:    vpblendmb %xmm0, %xmm1, %xmm0 {%k1}
159 ; CHECK-NEXT:    retq
160   %mask = icmp eq <16 x i8> %x, %y
161   %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %y
162   ret <16 x i8> %max
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:
167 ; CHECK:       ## %bb.0:
168 ; CHECK-NEXT:    vpcmpgtb %xmm1, %xmm0, %k1
169 ; CHECK-NEXT:    vpblendmb %xmm0, %xmm2, %xmm0 {%k1}
170 ; CHECK-NEXT:    retq
171   %mask = icmp sgt <16 x i8> %x, %y
172   %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1
173   ret <16 x i8> %max
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:
178 ; CHECK:       ## %bb.0:
179 ; CHECK-NEXT:    vpcmpnltw %xmm1, %xmm0, %k1
180 ; CHECK-NEXT:    vpblendmw %xmm2, %xmm1, %xmm0 {%k1}
181 ; CHECK-NEXT:    retq
182   %mask = icmp sge <8 x i16> %x, %y
183   %max = select <8 x i1> %mask, <8 x i16> %x1, <8 x i16> %y
184   ret <8 x i16> %max
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:
189 ; CHECK:       ## %bb.0:
190 ; CHECK-NEXT:    vpcmpnleub %xmm1, %xmm0, %k1
191 ; CHECK-NEXT:    vpblendmb %xmm0, %xmm2, %xmm0 {%k1}
192 ; CHECK-NEXT:    retq
193   %mask = icmp ugt <16 x i8> %x, %y
194   %max = select <16 x i1> %mask, <16 x i8> %x, <16 x i8> %x1
195   ret <16 x i8> %max
198 define <8 x i16> @test128_5(<8 x i16> %x, <8 x i16> %x1, <8 x i16>* %yp) nounwind {
199 ; CHECK-LABEL: test128_5:
200 ; CHECK:       ## %bb.0:
201 ; CHECK-NEXT:    vpcmpeqw (%rdi), %xmm0, %k1
202 ; CHECK-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
203 ; CHECK-NEXT:    retq
204   %y = load <8 x i16>, <8 x i16>* %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
207   ret <8 x i16> %max
210 define <8 x i16> @test128_6(<8 x i16> %x, <8 x i16> %x1, <8 x i16>* %y.ptr) nounwind {
211 ; CHECK-LABEL: test128_6:
212 ; CHECK:       ## %bb.0:
213 ; CHECK-NEXT:    vpcmpgtw (%rdi), %xmm0, %k1
214 ; CHECK-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
215 ; CHECK-NEXT:    retq
216   %y = load <8 x i16>, <8 x i16>* %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
219   ret <8 x i16> %max
222 define <8 x i16> @test128_7(<8 x i16> %x, <8 x i16> %x1, <8 x i16>* %y.ptr) nounwind {
223 ; CHECK-LABEL: test128_7:
224 ; CHECK:       ## %bb.0:
225 ; CHECK-NEXT:    vpcmplew (%rdi), %xmm0, %k1
226 ; CHECK-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
227 ; CHECK-NEXT:    retq
228   %y = load <8 x i16>, <8 x i16>* %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
231   ret <8 x i16> %max
234 define <8 x i16> @test128_8(<8 x i16> %x, <8 x i16> %x1, <8 x i16>* %y.ptr) nounwind {
235 ; CHECK-LABEL: test128_8:
236 ; CHECK:       ## %bb.0:
237 ; CHECK-NEXT:    vpcmpleuw (%rdi), %xmm0, %k1
238 ; CHECK-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
239 ; CHECK-NEXT:    retq
240   %y = load <8 x i16>, <8 x i16>* %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
243   ret <8 x i16> %max
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:
248 ; CHECK:       ## %bb.0:
249 ; CHECK-NEXT:    vpcmpeqw %xmm1, %xmm0, %k1
250 ; CHECK-NEXT:    vpcmpeqw %xmm3, %xmm2, %k1 {%k1}
251 ; CHECK-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
252 ; CHECK-NEXT:    retq
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
257   ret <8 x i16> %max
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:
262 ; CHECK:       ## %bb.0:
263 ; CHECK-NEXT:    vpcmpleb %xmm1, %xmm0, %k1
264 ; CHECK-NEXT:    vpcmpnltb %xmm3, %xmm2, %k1 {%k1}
265 ; CHECK-NEXT:    vpblendmb %xmm0, %xmm2, %xmm0 {%k1}
266 ; CHECK-NEXT:    retq
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
271   ret <16 x i8> %max
274 define <16 x i8> @test128_11(<16 x i8> %x, <16 x i8>* %y.ptr, <16 x i8> %x1, <16 x i8> %y1) nounwind {
275 ; CHECK-LABEL: test128_11:
276 ; CHECK:       ## %bb.0:
277 ; CHECK-NEXT:    vpcmpgtb %xmm2, %xmm1, %k1
278 ; CHECK-NEXT:    vpcmpgtb (%rdi), %xmm0, %k1 {%k1}
279 ; CHECK-NEXT:    vpblendmb %xmm0, %xmm1, %xmm0 {%k1}
280 ; CHECK-NEXT:    retq
281   %mask1 = icmp sgt <16 x i8> %x1, %y1
282   %y = load <16 x i8>, <16 x i8>* %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
286   ret <16 x i8> %max
289 define <8 x i16> @test128_12(<8 x i16> %x, <8 x i16>* %y.ptr, <8 x i16> %x1, <8 x i16> %y1) nounwind {
290 ; CHECK-LABEL: test128_12:
291 ; CHECK:       ## %bb.0:
292 ; CHECK-NEXT:    vpcmpnltw %xmm2, %xmm1, %k1
293 ; CHECK-NEXT:    vpcmpleuw (%rdi), %xmm0, %k1 {%k1}
294 ; CHECK-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}
295 ; CHECK-NEXT:    retq
296   %mask1 = icmp sge <8 x i16> %x1, %y1
297   %y = load <8 x i16>, <8 x i16>* %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
301   ret <8 x i16> %max