[X86] combineTargetShuffle - commute VPERMV3 shuffles so any load is on the RHS
[llvm-project.git] / llvm / test / CodeGen / SystemZ / vec-cmp-08.ll
blob19dc388f908fbc03cf167e67edb3734521cb991f
1 ; Test v1i128 comparisons.
2 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
4 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
6 ; Test eq.
7 define <1 x i128> @f1(<1 x i128> %val1, <1 x i128> %val2) {
8 ; CHECK-LABEL: f1:
9 ; CHECK:       # %bb.0:
10 ; CHECK-NEXT:    vceqgs %v0, %v24, %v26
11 ; CHECK-NEXT:    vgbm %v24, 65535
12 ; CHECK-NEXT:    ber %r14
13 ; CHECK-NEXT:  .LBB0_1:
14 ; CHECK-NEXT:    vgbm %v24, 0
15 ; CHECK-NEXT:    br %r14
16   %cmp = icmp eq <1 x i128> %val1, %val2
17   %ret = sext <1 x i1> %cmp to <1 x i128>
18   ret <1 x i128> %ret
21 ; Test ne.
22 define <1 x i128> @f2(<1 x i128> %val1, <1 x i128> %val2) {
23 ; CHECK-LABEL: f2:
24 ; CHECK:       # %bb.0:
25 ; CHECK-NEXT:    vceqgs %v0, %v24, %v26
26 ; CHECK-NEXT:    vgbm %v24, 65535
27 ; CHECK-NEXT:    bnher %r14
28 ; CHECK-NEXT:  .LBB1_1:
29 ; CHECK-NEXT:    vgbm %v24, 0
30 ; CHECK-NEXT:    br %r14
31   %cmp = icmp ne <1 x i128> %val1, %val2
32   %ret = sext <1 x i1> %cmp to <1 x i128>
33   ret <1 x i128> %ret
36 ; Test sgt.
37 define <1 x i128> @f3(<1 x i128> %val1, <1 x i128> %val2) {
38 ; CHECK-LABEL: f3:
39 ; CHECK:       # %bb.0:
40 ; CHECK-NEXT:    vecg %v26, %v24
41 ; CHECK-NEXT:    jlh .LBB2_2
42 ; CHECK-NEXT:  # %bb.1:
43 ; CHECK-NEXT:    vchlgs %v0, %v24, %v26
44 ; CHECK-NEXT:  .LBB2_2:
45 ; CHECK-NEXT:    vgbm %v24, 65535
46 ; CHECK-NEXT:    blr %r14
47 ; CHECK-NEXT:  .LBB2_3:
48 ; CHECK-NEXT:    vgbm %v24, 0
49 ; CHECK-NEXT:    br %r14
50   %cmp = icmp sgt <1 x i128> %val1, %val2
51   %ret = sext <1 x i1> %cmp to <1 x i128>
52   ret <1 x i128> %ret
55 ; Test sge.
56 define <1 x i128> @f4(<1 x i128> %val1, <1 x i128> %val2) {
57 ; CHECK-LABEL: f4:
58 ; CHECK:       # %bb.0:
59 ; CHECK-NEXT:    vecg %v24, %v26
60 ; CHECK-NEXT:    jlh .LBB3_2
61 ; CHECK-NEXT:  # %bb.1:
62 ; CHECK-NEXT:    vchlgs %v0, %v26, %v24
63 ; CHECK-NEXT:  .LBB3_2:
64 ; CHECK-NEXT:    vgbm %v24, 65535
65 ; CHECK-NEXT:    bnlr %r14
66 ; CHECK-NEXT:  .LBB3_3:
67 ; CHECK-NEXT:    vgbm %v24, 0
68 ; CHECK-NEXT:    br %r14
69   %cmp = icmp sge <1 x i128> %val1, %val2
70   %ret = sext <1 x i1> %cmp to <1 x i128>
71   ret <1 x i128> %ret
74 ; Test sle.
75 define <1 x i128> @f5(<1 x i128> %val1, <1 x i128> %val2) {
76 ; CHECK-LABEL: f5:
77 ; CHECK:       # %bb.0:
78 ; CHECK-NEXT:    vecg %v26, %v24
79 ; CHECK-NEXT:    jlh .LBB4_2
80 ; CHECK-NEXT:  # %bb.1:
81 ; CHECK-NEXT:    vchlgs %v0, %v24, %v26
82 ; CHECK-NEXT:  .LBB4_2:
83 ; CHECK-NEXT:    vgbm %v24, 65535
84 ; CHECK-NEXT:    bnlr %r14
85 ; CHECK-NEXT:  .LBB4_3:
86 ; CHECK-NEXT:    vgbm %v24, 0
87 ; CHECK-NEXT:    br %r14
88   %cmp = icmp sle <1 x i128> %val1, %val2
89   %ret = sext <1 x i1> %cmp to <1 x i128>
90   ret <1 x i128> %ret
93 ; Test slt.
94 define <1 x i128> @f6(<1 x i128> %val1, <1 x i128> %val2) {
95 ; CHECK-LABEL: f6:
96 ; CHECK:       # %bb.0:
97 ; CHECK-NEXT:    vecg %v24, %v26
98 ; CHECK-NEXT:    jlh .LBB5_2
99 ; CHECK-NEXT:  # %bb.1:
100 ; CHECK-NEXT:    vchlgs %v0, %v26, %v24
101 ; CHECK-NEXT:  .LBB5_2:
102 ; CHECK-NEXT:    vgbm %v24, 65535
103 ; CHECK-NEXT:    blr %r14
104 ; CHECK-NEXT:  .LBB5_3:
105 ; CHECK-NEXT:    vgbm %v24, 0
106 ; CHECK-NEXT:    br %r14
107   %cmp = icmp slt <1 x i128> %val1, %val2
108   %ret = sext <1 x i1> %cmp to <1 x i128>
109   ret <1 x i128> %ret
112 ; Test ugt.
113 define <1 x i128> @f7(<1 x i128> %val1, <1 x i128> %val2) {
114 ; CHECK-LABEL: f7:
115 ; CHECK:       # %bb.0:
116 ; CHECK-NEXT:    veclg %v26, %v24
117 ; CHECK-NEXT:    jlh .LBB6_2
118 ; CHECK-NEXT:  # %bb.1:
119 ; CHECK-NEXT:    vchlgs %v0, %v24, %v26
120 ; CHECK-NEXT:  .LBB6_2:
121 ; CHECK-NEXT:    vgbm %v24, 65535
122 ; CHECK-NEXT:    blr %r14
123 ; CHECK-NEXT:  .LBB6_3:
124 ; CHECK-NEXT:    vgbm %v24, 0
125 ; CHECK-NEXT:    br %r14
126   %cmp = icmp ugt <1 x i128> %val1, %val2
127   %ret = sext <1 x i1> %cmp to <1 x i128>
128   ret <1 x i128> %ret
131 ; Test uge.
132 define <1 x i128> @f8(<1 x i128> %val1, <1 x i128> %val2) {
133 ; CHECK-LABEL: f8:
134 ; CHECK:       # %bb.0:
135 ; CHECK-NEXT:    veclg %v24, %v26
136 ; CHECK-NEXT:    jlh .LBB7_2
137 ; CHECK-NEXT:  # %bb.1:
138 ; CHECK-NEXT:    vchlgs %v0, %v26, %v24
139 ; CHECK-NEXT:  .LBB7_2:
140 ; CHECK-NEXT:    vgbm %v24, 65535
141 ; CHECK-NEXT:    bnlr %r14
142 ; CHECK-NEXT:  .LBB7_3:
143 ; CHECK-NEXT:    vgbm %v24, 0
144 ; CHECK-NEXT:    br %r14
145   %cmp = icmp uge <1 x i128> %val1, %val2
146   %ret = sext <1 x i1> %cmp to <1 x i128>
147   ret <1 x i128> %ret
150 ; Test ule.
151 define <1 x i128> @f9(<1 x i128> %val1, <1 x i128> %val2) {
152 ; CHECK-LABEL: f9:
153 ; CHECK:       # %bb.0:
154 ; CHECK-NEXT:    veclg %v26, %v24
155 ; CHECK-NEXT:    jlh .LBB8_2
156 ; CHECK-NEXT:  # %bb.1:
157 ; CHECK-NEXT:    vchlgs %v0, %v24, %v26
158 ; CHECK-NEXT:  .LBB8_2:
159 ; CHECK-NEXT:    vgbm %v24, 65535
160 ; CHECK-NEXT:    bnlr %r14
161 ; CHECK-NEXT:  .LBB8_3:
162 ; CHECK-NEXT:    vgbm %v24, 0
163 ; CHECK-NEXT:    br %r14
164   %cmp = icmp ule <1 x i128> %val1, %val2
165   %ret = sext <1 x i1> %cmp to <1 x i128>
166   ret <1 x i128> %ret
169 ; Test ult.
170 define <1 x i128> @f10(<1 x i128> %val1, <1 x i128> %val2) {
171 ; CHECK-LABEL: f10:
172 ; CHECK:       # %bb.0:
173 ; CHECK-NEXT:    veclg %v24, %v26
174 ; CHECK-NEXT:    jlh .LBB9_2
175 ; CHECK-NEXT:  # %bb.1:
176 ; CHECK-NEXT:    vchlgs %v0, %v26, %v24
177 ; CHECK-NEXT:  .LBB9_2:
178 ; CHECK-NEXT:    vgbm %v24, 65535
179 ; CHECK-NEXT:    blr %r14
180 ; CHECK-NEXT:  .LBB9_3:
181 ; CHECK-NEXT:    vgbm %v24, 0
182 ; CHECK-NEXT:    br %r14
183   %cmp = icmp ult <1 x i128> %val1, %val2
184   %ret = sext <1 x i1> %cmp to <1 x i128>
185   ret <1 x i128> %ret
188 ; Test eq selects.
189 define <1 x i128> @f11(<1 x i128> %val1, <1 x i128> %val2,
190 ; CHECK-LABEL: f11:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vceqgs %v0, %v24, %v26
193 ; CHECK-NEXT:    je .LBB10_2
194 ; CHECK-NEXT:  # %bb.1:
195 ; CHECK-NEXT:    vlr %v28, %v30
196 ; CHECK-NEXT:  .LBB10_2:
197 ; CHECK-NEXT:    vlr %v24, %v28
198 ; CHECK-NEXT:    br %r14
199                        <1 x i128> %val3, <1 x i128> %val4) {
200   %cmp = icmp eq <1 x i128> %val1, %val2
201   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
202   ret <1 x i128> %ret
205 ; Test ne selects.
206 define <1 x i128> @f12(<1 x i128> %val1, <1 x i128> %val2,
207 ; CHECK-LABEL: f12:
208 ; CHECK:       # %bb.0:
209 ; CHECK-NEXT:    vceqgs %v0, %v24, %v26
210 ; CHECK-NEXT:    jnhe .LBB11_2
211 ; CHECK-NEXT:  # %bb.1:
212 ; CHECK-NEXT:    vlr %v28, %v30
213 ; CHECK-NEXT:  .LBB11_2:
214 ; CHECK-NEXT:    vlr %v24, %v28
215 ; CHECK-NEXT:    br %r14
216                        <1 x i128> %val3, <1 x i128> %val4) {
217   %cmp = icmp ne <1 x i128> %val1, %val2
218   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
219   ret <1 x i128> %ret
222 ; Test sgt selects.
223 define <1 x i128> @f13(<1 x i128> %val1, <1 x i128> %val2,
224 ; CHECK-LABEL: f13:
225 ; CHECK:       # %bb.0:
226 ; CHECK-NEXT:    vecg %v26, %v24
227 ; CHECK-NEXT:    je .LBB12_3
228 ; CHECK-NEXT:  # %bb.1:
229 ; CHECK-NEXT:    jnl .LBB12_4
230 ; CHECK-NEXT:  .LBB12_2:
231 ; CHECK-NEXT:    vlr %v24, %v28
232 ; CHECK-NEXT:    br %r14
233 ; CHECK-NEXT:  .LBB12_3:
234 ; CHECK-NEXT:    vchlgs %v0, %v24, %v26
235 ; CHECK-NEXT:    jl .LBB12_2
236 ; CHECK-NEXT:  .LBB12_4:
237 ; CHECK-NEXT:    vlr %v28, %v30
238 ; CHECK-NEXT:    vlr %v24, %v28
239 ; CHECK-NEXT:    br %r14
240                        <1 x i128> %val3, <1 x i128> %val4) {
241   %cmp = icmp sgt <1 x i128> %val1, %val2
242   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
243   ret <1 x i128> %ret
246 ; Test sge selects.
247 define <1 x i128> @f14(<1 x i128> %val1, <1 x i128> %val2,
248 ; CHECK-LABEL: f14:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vecg %v24, %v26
251 ; CHECK-NEXT:    je .LBB13_3
252 ; CHECK-NEXT:  # %bb.1:
253 ; CHECK-NEXT:    jl .LBB13_4
254 ; CHECK-NEXT:  .LBB13_2:
255 ; CHECK-NEXT:    vlr %v24, %v28
256 ; CHECK-NEXT:    br %r14
257 ; CHECK-NEXT:  .LBB13_3:
258 ; CHECK-NEXT:    vchlgs %v0, %v26, %v24
259 ; CHECK-NEXT:    jnl .LBB13_2
260 ; CHECK-NEXT:  .LBB13_4:
261 ; CHECK-NEXT:    vlr %v28, %v30
262 ; CHECK-NEXT:    vlr %v24, %v28
263 ; CHECK-NEXT:    br %r14
264                        <1 x i128> %val3, <1 x i128> %val4) {
265   %cmp = icmp sge <1 x i128> %val1, %val2
266   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
267   ret <1 x i128> %ret
270 ; Test sle selects.
271 define <1 x i128> @f15(<1 x i128> %val1, <1 x i128> %val2,
272 ; CHECK-LABEL: f15:
273 ; CHECK:       # %bb.0:
274 ; CHECK-NEXT:    vecg %v26, %v24
275 ; CHECK-NEXT:    je .LBB14_3
276 ; CHECK-NEXT:  # %bb.1:
277 ; CHECK-NEXT:    jl .LBB14_4
278 ; CHECK-NEXT:  .LBB14_2:
279 ; CHECK-NEXT:    vlr %v24, %v28
280 ; CHECK-NEXT:    br %r14
281 ; CHECK-NEXT:  .LBB14_3:
282 ; CHECK-NEXT:    vchlgs %v0, %v24, %v26
283 ; CHECK-NEXT:    jnl .LBB14_2
284 ; CHECK-NEXT:  .LBB14_4:
285 ; CHECK-NEXT:    vlr %v28, %v30
286 ; CHECK-NEXT:    vlr %v24, %v28
287 ; CHECK-NEXT:    br %r14
288                        <1 x i128> %val3, <1 x i128> %val4) {
289   %cmp = icmp sle <1 x i128> %val1, %val2
290   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
291   ret <1 x i128> %ret
294 ; Test slt selects.
295 define <1 x i128> @f16(<1 x i128> %val1, <1 x i128> %val2,
296 ; CHECK-LABEL: f16:
297 ; CHECK:       # %bb.0:
298 ; CHECK-NEXT:    vecg %v24, %v26
299 ; CHECK-NEXT:    je .LBB15_3
300 ; CHECK-NEXT:  # %bb.1:
301 ; CHECK-NEXT:    jnl .LBB15_4
302 ; CHECK-NEXT:  .LBB15_2:
303 ; CHECK-NEXT:    vlr %v24, %v28
304 ; CHECK-NEXT:    br %r14
305 ; CHECK-NEXT:  .LBB15_3:
306 ; CHECK-NEXT:    vchlgs %v0, %v26, %v24
307 ; CHECK-NEXT:    jl .LBB15_2
308 ; CHECK-NEXT:  .LBB15_4:
309 ; CHECK-NEXT:    vlr %v28, %v30
310 ; CHECK-NEXT:    vlr %v24, %v28
311 ; CHECK-NEXT:    br %r14
312                        <1 x i128> %val3, <1 x i128> %val4) {
313   %cmp = icmp slt <1 x i128> %val1, %val2
314   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
315   ret <1 x i128> %ret
318 ; Test ugt selects.
319 define <1 x i128> @f17(<1 x i128> %val1, <1 x i128> %val2,
320 ; CHECK-LABEL: f17:
321 ; CHECK:       # %bb.0:
322 ; CHECK-NEXT:    veclg %v26, %v24
323 ; CHECK-NEXT:    je .LBB16_3
324 ; CHECK-NEXT:  # %bb.1:
325 ; CHECK-NEXT:    jnl .LBB16_4
326 ; CHECK-NEXT:  .LBB16_2:
327 ; CHECK-NEXT:    vlr %v24, %v28
328 ; CHECK-NEXT:    br %r14
329 ; CHECK-NEXT:  .LBB16_3:
330 ; CHECK-NEXT:    vchlgs %v0, %v24, %v26
331 ; CHECK-NEXT:    jl .LBB16_2
332 ; CHECK-NEXT:  .LBB16_4:
333 ; CHECK-NEXT:    vlr %v28, %v30
334 ; CHECK-NEXT:    vlr %v24, %v28
335 ; CHECK-NEXT:    br %r14
336                        <1 x i128> %val3, <1 x i128> %val4) {
337   %cmp = icmp ugt <1 x i128> %val1, %val2
338   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
339   ret <1 x i128> %ret
342 ; Test uge selects.
343 define <1 x i128> @f18(<1 x i128> %val1, <1 x i128> %val2,
344 ; CHECK-LABEL: f18:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    veclg %v24, %v26
347 ; CHECK-NEXT:    je .LBB17_3
348 ; CHECK-NEXT:  # %bb.1:
349 ; CHECK-NEXT:    jl .LBB17_4
350 ; CHECK-NEXT:  .LBB17_2:
351 ; CHECK-NEXT:    vlr %v24, %v28
352 ; CHECK-NEXT:    br %r14
353 ; CHECK-NEXT:  .LBB17_3:
354 ; CHECK-NEXT:    vchlgs %v0, %v26, %v24
355 ; CHECK-NEXT:    jnl .LBB17_2
356 ; CHECK-NEXT:  .LBB17_4:
357 ; CHECK-NEXT:    vlr %v28, %v30
358 ; CHECK-NEXT:    vlr %v24, %v28
359 ; CHECK-NEXT:    br %r14
360                        <1 x i128> %val3, <1 x i128> %val4) {
361   %cmp = icmp uge <1 x i128> %val1, %val2
362   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
363   ret <1 x i128> %ret
366 ; Test ule selects.
367 define <1 x i128> @f19(<1 x i128> %val1, <1 x i128> %val2,
368 ; CHECK-LABEL: f19:
369 ; CHECK:       # %bb.0:
370 ; CHECK-NEXT:    veclg %v26, %v24
371 ; CHECK-NEXT:    je .LBB18_3
372 ; CHECK-NEXT:  # %bb.1:
373 ; CHECK-NEXT:    jl .LBB18_4
374 ; CHECK-NEXT:  .LBB18_2:
375 ; CHECK-NEXT:    vlr %v24, %v28
376 ; CHECK-NEXT:    br %r14
377 ; CHECK-NEXT:  .LBB18_3:
378 ; CHECK-NEXT:    vchlgs %v0, %v24, %v26
379 ; CHECK-NEXT:    jnl .LBB18_2
380 ; CHECK-NEXT:  .LBB18_4:
381 ; CHECK-NEXT:    vlr %v28, %v30
382 ; CHECK-NEXT:    vlr %v24, %v28
383 ; CHECK-NEXT:    br %r14
384                        <1 x i128> %val3, <1 x i128> %val4) {
385   %cmp = icmp ule <1 x i128> %val1, %val2
386   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
387   ret <1 x i128> %ret
390 ; Test ult selects.
391 define <1 x i128> @f20(<1 x i128> %val1, <1 x i128> %val2,
392 ; CHECK-LABEL: f20:
393 ; CHECK:       # %bb.0:
394 ; CHECK-NEXT:    veclg %v24, %v26
395 ; CHECK-NEXT:    je .LBB19_3
396 ; CHECK-NEXT:  # %bb.1:
397 ; CHECK-NEXT:    jnl .LBB19_4
398 ; CHECK-NEXT:  .LBB19_2:
399 ; CHECK-NEXT:    vlr %v24, %v28
400 ; CHECK-NEXT:    br %r14
401 ; CHECK-NEXT:  .LBB19_3:
402 ; CHECK-NEXT:    vchlgs %v0, %v26, %v24
403 ; CHECK-NEXT:    jl .LBB19_2
404 ; CHECK-NEXT:  .LBB19_4:
405 ; CHECK-NEXT:    vlr %v28, %v30
406 ; CHECK-NEXT:    vlr %v24, %v28
407 ; CHECK-NEXT:    br %r14
408                        <1 x i128> %val3, <1 x i128> %val4) {
409   %cmp = icmp ult <1 x i128> %val1, %val2
410   %ret = select <1 x i1> %cmp, <1 x i128> %val3, <1 x i128> %val4
411   ret <1 x i128> %ret