Skip to content

Commit 3d58110

Browse files
committed
Pre-commit tests (NFC)
1 parent efa833d commit 3d58110

File tree

2 files changed

+402
-0
lines changed

2 files changed

+402
-0
lines changed

llvm/test/CodeGen/AArch64/cmp-chains.ll

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,3 +258,191 @@ define i32 @neg_range_int(i32 %a, i32 %b, i32 %c) {
258258
ret i32 %retval.0
259259
}
260260

261+
; (b > -(d | 1) && a < c)
262+
define i32 @neg_range_int_comp(i32 %a, i32 %b, i32 %c, i32 %d) {
263+
; CHECK-LABEL: neg_range_int_comp:
264+
; CHECK: // %bb.0:
265+
; CHECK-NEXT: orr w8, w3, #0x1
266+
; CHECK-NEXT: cmp w0, w2
267+
; CHECK-NEXT: neg w8, w8
268+
; CHECK-NEXT: ccmp w1, w8, #4, lt
269+
; CHECK-NEXT: csel w0, w1, w0, gt
270+
; CHECK-NEXT: ret
271+
%dor = or i32 %d, 1
272+
%negd = sub i32 0, %dor
273+
%cmp = icmp sgt i32 %b, %negd
274+
%cmp1 = icmp slt i32 %a, %c
275+
%or.cond = and i1 %cmp, %cmp1
276+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
277+
ret i32 %retval.0
278+
}
279+
280+
; (b >u -(d | 1) && a < c)
281+
define i32 @neg_range_int_comp_u(i32 %a, i32 %b, i32 %c, i32 %d) {
282+
; CHECK-LABEL: neg_range_int_comp_u:
283+
; CHECK: // %bb.0:
284+
; CHECK-NEXT: orr w8, w3, #0x1
285+
; CHECK-NEXT: cmp w0, w2
286+
; CHECK-NEXT: neg w8, w8
287+
; CHECK-NEXT: ccmp w1, w8, #0, lt
288+
; CHECK-NEXT: csel w0, w1, w0, hi
289+
; CHECK-NEXT: ret
290+
%dor = or i32 %d, 1
291+
%negd = sub i32 0, %dor
292+
%cmp = icmp ugt i32 %b, %negd
293+
%cmp1 = icmp slt i32 %a, %c
294+
%or.cond = and i1 %cmp, %cmp1
295+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
296+
ret i32 %retval.0
297+
}
298+
299+
; (b > -(d | 1) && a u < c)
300+
define i32 @neg_range_int_comp_ua(i32 %a, i32 %b, i32 %c, i32 %d) {
301+
; CHECK-LABEL: neg_range_int_comp_ua:
302+
; CHECK: // %bb.0:
303+
; CHECK-NEXT: orr w8, w3, #0x1
304+
; CHECK-NEXT: cmp w0, w2
305+
; CHECK-NEXT: neg w8, w8
306+
; CHECK-NEXT: ccmp w1, w8, #4, lo
307+
; CHECK-NEXT: csel w0, w1, w0, gt
308+
; CHECK-NEXT: ret
309+
%dor = or i32 %d, 1
310+
%negd = sub i32 0, %dor
311+
%cmp = icmp sgt i32 %b, %negd
312+
%cmp1 = icmp ult i32 %a, %c
313+
%or.cond = and i1 %cmp, %cmp1
314+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
315+
ret i32 %retval.0
316+
}
317+
318+
; (b <= -3 && a > c)
319+
define i32 @neg_range_int_2(i32 %a, i32 %b, i32 %c) {
320+
; SDISEL-LABEL: neg_range_int_2:
321+
; SDISEL: // %bb.0:
322+
; SDISEL-NEXT: cmp w0, w2
323+
; SDISEL-NEXT: ccmn w1, #4, #4, gt
324+
; SDISEL-NEXT: csel w0, w1, w0, gt
325+
; SDISEL-NEXT: ret
326+
;
327+
; GISEL-LABEL: neg_range_int_2:
328+
; GISEL: // %bb.0:
329+
; GISEL-NEXT: cmp w0, w2
330+
; GISEL-NEXT: ccmn w1, #3, #8, gt
331+
; GISEL-NEXT: csel w0, w1, w0, ge
332+
; GISEL-NEXT: ret
333+
%cmp = icmp sge i32 %b, -3
334+
%cmp1 = icmp sgt i32 %a, %c
335+
%or.cond = and i1 %cmp, %cmp1
336+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
337+
ret i32 %retval.0
338+
}
339+
340+
; (b < -(d | 1) && a >= c)
341+
define i32 @neg_range_int_comp2(i32 %a, i32 %b, i32 %c, i32 %d) {
342+
; CHECK-LABEL: neg_range_int_comp2:
343+
; CHECK: // %bb.0:
344+
; CHECK-NEXT: orr w8, w3, #0x1
345+
; CHECK-NEXT: cmp w0, w2
346+
; CHECK-NEXT: neg w8, w8
347+
; CHECK-NEXT: ccmp w1, w8, #0, ge
348+
; CHECK-NEXT: csel w0, w1, w0, lt
349+
; CHECK-NEXT: ret
350+
%dor = or i32 %d, 1
351+
%negd = sub i32 0, %dor
352+
%cmp = icmp slt i32 %b, %negd
353+
%cmp1 = icmp sge i32 %a, %c
354+
%or.cond = and i1 %cmp, %cmp1
355+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
356+
ret i32 %retval.0
357+
}
358+
359+
; (b <u -(d | 1) && a > c)
360+
define i32 @neg_range_int_comp_u2(i32 %a, i32 %b, i32 %c, i32 %d) {
361+
; CHECK-LABEL: neg_range_int_comp_u2:
362+
; CHECK: // %bb.0:
363+
; CHECK-NEXT: orr w8, w3, #0x1
364+
; CHECK-NEXT: cmp w0, w2
365+
; CHECK-NEXT: neg w8, w8
366+
; CHECK-NEXT: ccmp w1, w8, #2, gt
367+
; CHECK-NEXT: csel w0, w1, w0, lo
368+
; CHECK-NEXT: ret
369+
%dor = or i32 %d, 1
370+
%negd = sub i32 0, %dor
371+
%cmp = icmp ult i32 %b, %negd
372+
%cmp1 = icmp sgt i32 %a, %c
373+
%or.cond = and i1 %cmp, %cmp1
374+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
375+
ret i32 %retval.0
376+
}
377+
378+
; (b > -(d | 1) && a u > c)
379+
define i32 @neg_range_int_comp_ua2(i32 %a, i32 %b, i32 %c, i32 %d) {
380+
; CHECK-LABEL: neg_range_int_comp_ua2:
381+
; CHECK: // %bb.0:
382+
; CHECK-NEXT: orr w8, w3, #0x1
383+
; CHECK-NEXT: cmp w0, w2
384+
; CHECK-NEXT: neg w8, w8
385+
; CHECK-NEXT: ccmp w1, w8, #4, hi
386+
; CHECK-NEXT: csel w0, w1, w0, gt
387+
; CHECK-NEXT: ret
388+
%dor = or i32 %d, 1
389+
%negd = sub i32 0, %dor
390+
%cmp = icmp sgt i32 %b, %negd
391+
%cmp1 = icmp ugt i32 %a, %c
392+
%or.cond = and i1 %cmp, %cmp1
393+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
394+
ret i32 %retval.0
395+
}
396+
397+
; (b > -(d | 1) && a u == c)
398+
define i32 @neg_range_int_comp_ua3(i32 %a, i32 %b, i32 %c, i32 %d) {
399+
; CHECK-LABEL: neg_range_int_comp_ua3:
400+
; CHECK: // %bb.0:
401+
; CHECK-NEXT: orr w8, w3, #0x1
402+
; CHECK-NEXT: cmp w0, w2
403+
; CHECK-NEXT: neg w8, w8
404+
; CHECK-NEXT: ccmp w1, w8, #4, eq
405+
; CHECK-NEXT: csel w0, w1, w0, gt
406+
; CHECK-NEXT: ret
407+
%dor = or i32 %d, 1
408+
%negd = sub i32 0, %dor
409+
%cmp = icmp sgt i32 %b, %negd
410+
%cmp1 = icmp eq i32 %a, %c
411+
%or.cond = and i1 %cmp, %cmp1
412+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
413+
ret i32 %retval.0
414+
}
415+
416+
; -(a | 1) > (b | 3) && a < c
417+
define i32 @neg_range_int_c(i32 %a, i32 %b, i32 %c) {
418+
; SDISEL-LABEL: neg_range_int_c:
419+
; SDISEL: // %bb.0: // %entry
420+
; SDISEL-NEXT: orr w8, w0, #0x1
421+
; SDISEL-NEXT: orr w9, w1, #0x3
422+
; SDISEL-NEXT: neg w8, w8
423+
; SDISEL-NEXT: cmp w9, w8
424+
; SDISEL-NEXT: ccmp w2, w0, #2, lo
425+
; SDISEL-NEXT: cset w0, lo
426+
; SDISEL-NEXT: ret
427+
;
428+
; GISEL-LABEL: neg_range_int_c:
429+
; GISEL: // %bb.0: // %entry
430+
; GISEL-NEXT: orr w8, w0, #0x1
431+
; GISEL-NEXT: orr w9, w1, #0x3
432+
; GISEL-NEXT: neg w8, w8
433+
; GISEL-NEXT: cmp w9, w8
434+
; GISEL-NEXT: cset w8, lo
435+
; GISEL-NEXT: cmp w2, w0
436+
; GISEL-NEXT: cset w9, lo
437+
; GISEL-NEXT: and w0, w8, w9
438+
; GISEL-NEXT: ret
439+
entry:
440+
%or = or i32 %a, 1
441+
%sub = sub i32 0, %or
442+
%or1 = or i32 %b, 3
443+
%cmp = icmp ult i32 %or1, %sub
444+
%cmp2 = icmp ult i32 %c, %a
445+
%0 = and i1 %cmp, %cmp2
446+
%land.ext = zext i1 %0 to i32
447+
ret i32 %land.ext
448+
}

0 commit comments

Comments
 (0)