[llvm] [InstCombine] Optimize redundant floating point comparisons in `or`/`and` inst's (PR #158097)

Rajveer Singh Bharadwaj via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 14 05:46:49 PDT 2025


================
@@ -1850,6 +1850,35 @@ static Value *simplifyAndOrOfFCmps(const SimplifyQuery &Q, FCmpInst *LHS,
                  : ConstantInt::getBool(LHS->getType(), !IsAnd);
   }
 
+  Value *V0;
+  const APFloat *V0Op1, *V1Op1;
+  // (fcmp olt V0, V0Op1) || (fcmp olt V0, V1Op1)
+  //                      --> fcmp olt V0, max(V0Op1, V1Op1)
+  // (fcmp ogt V0, V0Op1) || (fcmp ogt V0, V1Op1)
+  //                      --> fcmp ogt V0, max(V0Op1, V1Op1)
+  //
+  // (fcmp olt V0, V0Op1) && (fcmp olt V0, V1Op1)
+  //                      --> fcmp olt V0, min(V0Op1, V1Op1)
+  // (fcmp ogt V0, V0Op1) && (fcmp ogt V0, V1Op1)
+  //                      --> fcmp ogt V0, min(V0Op1, V1Op1)
+  if (match(LHS, m_SpecificFCmp(FCmpInst::FCMP_OLT, m_Value(V0),
+                                m_APFloat(V0Op1))) &&
+      match(RHS, m_SpecificFCmp(FCmpInst::FCMP_OLT, m_Specific(V0),
+                                m_APFloat(V1Op1)))) {
+    if (V0Op1 > V1Op1)
+      return static_cast<Value *>((!IsAnd ? LHS : RHS));
----------------
Rajveer100 wrote:

Ah, right :)

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


More information about the llvm-commits mailing list