[llvm] [Support] Adding fast-path for KnownBits's udiv when RHS is contant (PR #189779)
Max Graey via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 31 17:57:00 PDT 2026
https://github.com/MaxGraey updated https://github.com/llvm/llvm-project/pull/189779
>From bc71364b702b686d437e63bd8fb043ff3d001a6b Mon Sep 17 00:00:00 2001
From: MaxGraey <maxgraey at gmail.com>
Date: Wed, 1 Apr 2026 03:48:37 +0300
Subject: [PATCH 1/2] add fast-path for KnownBits::udiv when RHS is contant
---
llvm/lib/Support/KnownBits.cpp | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp
index 07e7781d0839d..5809fff3ad6ab 100644
--- a/llvm/lib/Support/KnownBits.cpp
+++ b/llvm/lib/Support/KnownBits.cpp
@@ -1209,6 +1209,20 @@ KnownBits KnownBits::udiv(const KnownBits &LHS, const KnownBits &RHS,
return Known;
}
+ if (RHS.isConstant()) {
+ const APInt Divisor = RHS.getConstant();
+ if (Divisor.isOne())
+ return LHS;
+
+ if (Divisor.isPowerOf2()) {
+ unsigned Shift = Divisor.logBase2();
+ KnownBits Known = LHS;
+ Known.One.lshrInPlace(Shift);
+ Known.Zero.lshrInPlace(Shift);
+ return Known;
+ }
+ }
+
// We can figure out the minimum number of upper zero bits by doing
// MaxNumerator / MinDenominator. If the Numerator gets smaller or Denominator
// gets larger, the number of upper zero bits increases.
>From 98fbc0b1f97150ca44a9fe1b4ca9152665c75868 Mon Sep 17 00:00:00 2001
From: MaxGraey <maxgraey at gmail.com>
Date: Wed, 1 Apr 2026 03:56:48 +0300
Subject: [PATCH 2/2] refactor
---
llvm/lib/Support/KnownBits.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp
index 5809fff3ad6ab..25530d7e46727 100644
--- a/llvm/lib/Support/KnownBits.cpp
+++ b/llvm/lib/Support/KnownBits.cpp
@@ -1216,7 +1216,7 @@ KnownBits KnownBits::udiv(const KnownBits &LHS, const KnownBits &RHS,
if (Divisor.isPowerOf2()) {
unsigned Shift = Divisor.logBase2();
- KnownBits Known = LHS;
+ Known = LHS;
Known.One.lshrInPlace(Shift);
Known.Zero.lshrInPlace(Shift);
return Known;
More information about the llvm-commits
mailing list