Skip to content

Commit

Permalink
[InstCombine] Add tests for icmp eq/ne ({su}div exact X, Y), C; NFC
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D150090
  • Loading branch information
goldsteinn committed Jul 14, 2023
1 parent a01d183 commit fd691fc
Showing 1 changed file with 111 additions and 0 deletions.
111 changes: 111 additions & 0 deletions llvm/test/Transforms/InstCombine/sdiv-icmp.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -passes=instcombine -S | FileCheck %s

declare void @use.i8(i8)
define i1 @sdiv_exact_eq_0(i8 %x, i8 %y) {
; CHECK-LABEL: @sdiv_exact_eq_0(
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 0
; CHECK-NEXT: ret i1 [[R]]
;
%d = sdiv exact i8 %x, %y
%r = icmp eq i8 %d, 0
ret i1 %r
}

define i1 @udiv_exact_ne_0(i8 %x, i8 %y) {
; CHECK-LABEL: @udiv_exact_ne_0(
; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: ret i1 [[R]]
;
%d = udiv exact i8 %x, %y
%r = icmp ne i8 %d, 0
ret i1 %r
}

define i1 @sdiv_exact_ne_1(i8 %x, i8 %y) {
; CHECK-LABEL: @sdiv_exact_ne_1(
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 0
; CHECK-NEXT: ret i1 [[R]]
;
%d = sdiv exact i8 %x, %y
%r = icmp eq i8 %d, 0
ret i1 %r
}

define i1 @udiv_exact_eq_1(i8 %x, i8 %y) {
; CHECK-LABEL: @udiv_exact_eq_1(
; CHECK-NEXT: [[D:%.*]] = udiv exact i8 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[D]], 1
; CHECK-NEXT: ret i1 [[R]]
;
%d = udiv exact i8 %x, %y
%r = icmp ne i8 %d, 1
ret i1 %r
}

define i1 @sdiv_exact_eq_9_no_of(i8 %x, i8 %y) {
; CHECK-LABEL: @sdiv_exact_eq_9_no_of(
; CHECK-NEXT: [[YY:%.*]] = and i8 [[Y:%.*]], 7
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[YY]]
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 9
; CHECK-NEXT: ret i1 [[R]]
;
%yy = and i8 %y, 7
%d = sdiv exact i8 %x, %yy
%r = icmp eq i8 %d, 9
ret i1 %r
}

define i1 @sdiv_exact_eq_9_may_of(i8 %x, i8 %y) {
; CHECK-LABEL: @sdiv_exact_eq_9_may_of(
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 9
; CHECK-NEXT: ret i1 [[R]]
;
%d = sdiv exact i8 %x, %y
%r = icmp eq i8 %d, 9
ret i1 %r
}

define i1 @sdiv_exact_eq_9_no_of_fail_multiuse(i8 %x, i8 %y) {
; CHECK-LABEL: @sdiv_exact_eq_9_no_of_fail_multiuse(
; CHECK-NEXT: [[YY:%.*]] = and i8 [[Y:%.*]], 7
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[YY]]
; CHECK-NEXT: call void @use.i8(i8 [[D]])
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 9
; CHECK-NEXT: ret i1 [[R]]
;
%yy = and i8 %y, 7
%d = sdiv exact i8 %x, %yy
call void @use.i8(i8 %d)
%r = icmp eq i8 %d, 9
ret i1 %r
}

define i1 @sdiv_exact_eq_9_must_of_todo_is_false(i8 %x, i8 %y) {
; CHECK-LABEL: @sdiv_exact_eq_9_must_of_todo_is_false(
; CHECK-NEXT: [[YY:%.*]] = or i8 [[Y:%.*]], 55
; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[YY]]
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 9
; CHECK-NEXT: ret i1 [[R]]
;
%yy = or i8 %y, 55
%d = sdiv exact i8 %x, %yy
%r = icmp eq i8 %d, 9
ret i1 %r
}

define i1 @udiv_exact_ne_30_no_of(i8 %x, i8 %y) {
; CHECK-LABEL: @udiv_exact_ne_30_no_of(
; CHECK-NEXT: [[YY:%.*]] = and i8 [[Y:%.*]], 7
; CHECK-NEXT: [[D:%.*]] = udiv exact i8 [[X:%.*]], [[YY]]
; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[D]], 30
; CHECK-NEXT: ret i1 [[R]]
;
%yy = and i8 %y, 7
%d = udiv exact i8 %x, %yy
%r = icmp ne i8 %d, 30
ret i1 %r
}

0 comments on commit fd691fc

Please sign in to comment.