[llvm] [InstCombine] Fold negation of unsigned div of non-negatives (PR #84951)

via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 12 10:38:41 PDT 2024


================
@@ -2062,6 +2062,26 @@ static Instruction *foldSubOfMinMax(BinaryOperator &I,
   return nullptr;
 }
 
+/// Fold `sub 0, (udiv nneg X, nneg C)` into `sdiv nneg X, -C`
+static Instruction *foldNegationOfUDivOfNonNegatives(BinaryOperator &I,
+                                                     InstCombinerImpl &IC) {
+  Value *RHS = I.getOperand(1);
+  Value *X, *C;
+
+  if (match(RHS, m_OneUse(m_UDiv(m_Value(X), m_Value(C))))) {
+    KnownBits KnownX = IC.computeKnownBits(X, 0, &I);
+    KnownBits KnownC = IC.computeKnownBits(C, 0, &I);
+    if (KnownX.isNonNegative() && KnownC.isNonNegative()) {
----------------
goldsteinn wrote:

`isKnownNonNegative(X, ...)`

https://github.com/llvm/llvm-project/pull/84951


More information about the llvm-commits mailing list