[llvm] [InstSimplify] Generalize simplification of icmps with monotonic operands (PR #69471)

via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 18 09:01:56 PDT 2023


================
@@ -3103,6 +3103,54 @@ static Value *simplifyICmpWithConstant(CmpInst::Predicate Pred, Value *LHS,
   return nullptr;
 }
 
+/// Get values V_i such that V uge V_i (Greater) or V ule V_i (!Greater).
+static void getUnsignedMonotonicValues(SmallPtrSetImpl<Value *> &Res, Value *V,
+                                       bool Greater, unsigned Depth = 0) {
+  if (!Res.insert(V).second)
+    return;
+
+  // Can be increased if useful.
+  if (++Depth > 1)
+    return;
+
+  Value *X, *Y;
+  if (Greater) {
+    if (match(V, m_Or(m_Value(X), m_Value(Y))) ||
+        match(V, m_Intrinsic<Intrinsic::uadd_sat>(m_Value(X), m_Value(Y)))) {
----------------
goldsteinn wrote:

You can imagine a lot more cases for this. Imo should just be a switch from the start.

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


More information about the llvm-commits mailing list