[llvm] fd691fc - [InstCombine] Add tests for `icmp eq/ne ({su}div exact X, Y), C`; NFC
Noah Goldstein via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 13 17:37:17 PDT 2023
Author: Noah Goldstein
Date: 2023-07-13T19:36:59-05:00
New Revision: fd691fce59087e9830f8225598f2cbb3aea1f485
URL: https://github.com/llvm/llvm-project/commit/fd691fce59087e9830f8225598f2cbb3aea1f485
DIFF: https://github.com/llvm/llvm-project/commit/fd691fce59087e9830f8225598f2cbb3aea1f485.diff
LOG: [InstCombine] Add tests for `icmp eq/ne ({su}div exact X, Y), C`; NFC
Differential Revision: https://reviews.llvm.org/D150090
Added:
llvm/test/Transforms/InstCombine/sdiv-icmp.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/sdiv-icmp.ll b/llvm/test/Transforms/InstCombine/sdiv-icmp.ll
new file mode 100644
index 00000000000000..39da0a27dad10f
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/sdiv-icmp.ll
@@ -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
+}
More information about the llvm-commits
mailing list