[PATCH] D85092: [InstSimplify] Peephole optimization for icmp (urem X, Y), X

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 4 11:50:22 PDT 2020


This revision was automatically updated to reflect the committed changes.
Closed by commit rG29fe3fe6155f: [InstSimplify] Peephole optimization for icmp (urem X, Y), X (authored by xldenis, committed by nikic).

Changed prior to commit:
  https://reviews.llvm.org/D85092?vs=282457&id=282986#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85092/new/

https://reviews.llvm.org/D85092

Files:
  llvm/lib/Analysis/InstructionSimplify.cpp
  llvm/test/Transforms/InstSimplify/compare.ll


Index: llvm/test/Transforms/InstSimplify/compare.ll
===================================================================
--- llvm/test/Transforms/InstSimplify/compare.ll
+++ llvm/test/Transforms/InstSimplify/compare.ll
@@ -725,9 +725,7 @@
 
 define i1 @urem8(i8 %X, i8 %Y) {
 ; CHECK-LABEL: @urem8(
-; CHECK-NEXT:    [[A:%.*]] = urem i8 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[A]], [[X]]
-; CHECK-NEXT:    ret i1 [[B]]
+; CHECK-NEXT:    ret i1 true
 ;
   %A = urem i8 %X, %Y
   %B = icmp ule i8 %A, %X
@@ -736,9 +734,7 @@
 
 define i1 @urem9(i8 %X, i8 %Y) {
 ; CHECK-LABEL: @urem9(
-; CHECK-NEXT:    [[A:%.*]] = urem i8 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[A]], [[X]]
-; CHECK-NEXT:    ret i1 [[B]]
+; CHECK-NEXT:    ret i1 false
 ;
   %A = urem i8 %X, %Y
   %B = icmp ugt i8 %A, %X
@@ -747,9 +743,7 @@
 
 define i1 @urem10(i8 %X, i8 %Y) {
 ; CHECK-LABEL: @urem10(
-; CHECK-NEXT:    [[A:%.*]] = urem i8 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], [[A]]
-; CHECK-NEXT:    ret i1 [[B]]
+; CHECK-NEXT:    ret i1 true
 ;
   %A = urem i8 %X, %Y
   %B = icmp uge i8 %X, %A
@@ -758,9 +752,7 @@
 
 define i1 @urem11(i8 %X, i8 %Y) {
 ; CHECK-LABEL: @urem11(
-; CHECK-NEXT:    [[A:%.*]] = urem i8 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], [[A]]
-; CHECK-NEXT:    ret i1 [[B]]
+; CHECK-NEXT:    ret i1 false
 ;
   %A = urem i8 %X, %Y
   %B = icmp ult i8 %X, %A
Index: llvm/lib/Analysis/InstructionSimplify.cpp
===================================================================
--- llvm/lib/Analysis/InstructionSimplify.cpp
+++ llvm/lib/Analysis/InstructionSimplify.cpp
@@ -2814,6 +2814,14 @@
     }
   }
 
+  // icmp pred (urem X, Y), X
+  if (match(LBO, m_URem(m_Specific(RHS), m_Value()))) {
+    if (Pred == ICmpInst::ICMP_ULE)
+      return getTrue(ITy);
+    if (Pred == ICmpInst::ICMP_UGT)
+      return getFalse(ITy);
+  }
+
   // x >> y <=u x
   // x udiv y <=u x.
   if (match(LBO, m_LShr(m_Specific(RHS), m_Value())) ||


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85092.282986.patch
Type: text/x-patch
Size: 2026 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200804/21700e9c/attachment.bin>


More information about the llvm-commits mailing list