Skip to content

Commit 89fdfb6

Browse files
committed
[InstCombine][NFC] precommit tests for sign bit check canonicalization
1 parent a31cf76 commit 89fdfb6

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-srem.ll

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,3 +382,99 @@ define i1 @icmp_ult_sremsmax_smax(i32 %x) {
382382
%c = icmp ult i32 %r, 2147483647
383383
ret i1 %c
384384
}
385+
386+
define i1 @icmp_slt_srem_pos_range(i32 %x, i32 range(i32 999, -2147483648) %y) {
387+
; CHECK-LABEL: define i1 @icmp_slt_srem_pos_range(
388+
; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 999, -2147483648) [[Y:%.*]]) {
389+
; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
390+
; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], [[Y]]
391+
; CHECK-NEXT: ret i1 [[C]]
392+
;
393+
%r = srem i32 %x, 1000
394+
%c = icmp slt i32 %r, %y
395+
ret i1 %c
396+
}
397+
398+
define i1 @icmp_sle_srem_pos_range(i32 %x, i32 range(i32 999, -2147483648) %y) {
399+
; CHECK-LABEL: define i1 @icmp_sle_srem_pos_range(
400+
; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 999, -2147483648) [[Y:%.*]]) {
401+
; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
402+
; CHECK-NEXT: [[C:%.*]] = icmp sle i32 [[R]], [[Y]]
403+
; CHECK-NEXT: ret i1 [[C]]
404+
;
405+
%r = srem i32 %x, 1000
406+
%c = icmp sle i32 %r, %y
407+
ret i1 %c
408+
}
409+
410+
define i1 @icmp_sgt_srem_pos_range(i32 %x, i32 range(i32 999, -2147483648) %y) {
411+
; CHECK-LABEL: define i1 @icmp_sgt_srem_pos_range(
412+
; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 999, -2147483648) [[Y:%.*]]) {
413+
; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
414+
; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], [[Y]]
415+
; CHECK-NEXT: ret i1 [[C]]
416+
;
417+
%r = srem i32 %x, 1000
418+
%c = icmp sgt i32 %r, %y
419+
ret i1 %c
420+
}
421+
422+
define i1 @icmp_sge_srem_pos_range(i32 %x, i32 range(i32 999, -2147483648) %y) {
423+
; CHECK-LABEL: define i1 @icmp_sge_srem_pos_range(
424+
; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 999, -2147483648) [[Y:%.*]]) {
425+
; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
426+
; CHECK-NEXT: [[C:%.*]] = icmp sge i32 [[R]], [[Y]]
427+
; CHECK-NEXT: ret i1 [[C]]
428+
;
429+
%r = srem i32 %x, 1000
430+
%c = icmp sge i32 %r, %y
431+
ret i1 %c
432+
}
433+
434+
define i1 @icmp_slt_srem_neg_range(i32 %x, i32 range(i32 -2147483648, -999) %y) {
435+
; CHECK-LABEL: define i1 @icmp_slt_srem_neg_range(
436+
; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 -2147483648, -999) [[Y:%.*]]) {
437+
; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
438+
; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], [[Y]]
439+
; CHECK-NEXT: ret i1 [[C]]
440+
;
441+
%r = srem i32 %x, 1000
442+
%c = icmp slt i32 %r, %y
443+
ret i1 %c
444+
}
445+
446+
define i1 @icmp_sle_srem_neg_range(i32 %x, i32 range(i32 -2147483648, -999) %y) {
447+
; CHECK-LABEL: define i1 @icmp_sle_srem_neg_range(
448+
; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 -2147483648, -999) [[Y:%.*]]) {
449+
; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
450+
; CHECK-NEXT: [[C:%.*]] = icmp sle i32 [[R]], [[Y]]
451+
; CHECK-NEXT: ret i1 [[C]]
452+
;
453+
%r = srem i32 %x, 1000
454+
%c = icmp sle i32 %r, %y
455+
ret i1 %c
456+
}
457+
458+
define i1 @icmp_sgt_srem_neg_range(i32 %x, i32 range(i32 -2147483648, -999) %y) {
459+
; CHECK-LABEL: define i1 @icmp_sgt_srem_neg_range(
460+
; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 -2147483648, -999) [[Y:%.*]]) {
461+
; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
462+
; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], [[Y]]
463+
; CHECK-NEXT: ret i1 [[C]]
464+
;
465+
%r = srem i32 %x, 1000
466+
%c = icmp sgt i32 %r, %y
467+
ret i1 %c
468+
}
469+
470+
define i1 @icmp_sge_srem_neg_range(i32 %x, i32 range(i32 -2147483648, -999) %y) {
471+
; CHECK-LABEL: define i1 @icmp_sge_srem_neg_range(
472+
; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 -2147483648, -999) [[Y:%.*]]) {
473+
; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
474+
; CHECK-NEXT: [[C:%.*]] = icmp sge i32 [[R]], [[Y]]
475+
; CHECK-NEXT: ret i1 [[C]]
476+
;
477+
%r = srem i32 %x, 1000
478+
%c = icmp sge i32 %r, %y
479+
ret i1 %c
480+
}

0 commit comments

Comments
 (0)