[llvm] [InstCombine] Fold icmp on frexp exponent to fcmp on fabs(x) (PR #210711)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 27 02:11:48 PDT 2026


================
@@ -3606,6 +3606,51 @@ Instruction *InstCombinerImpl::foldICmpInstWithConstant(ICmpInst &Cmp) {
       if (Instruction *I = foldICmpIntrinsicWithConstant(Cmp, II, *C))
         return I;
 
+    {
+      // icmp slt/sgt (extractvalue (frexp X), 1), C -->
+      //                         fcmp olt/oge (fabs X), 2^ExpVal
+      // slt -> olt, ExpVal = C-1; sgt -> oge, ExpVal = C.
+      Value *X;
+      if (match(Cmp.getOperand(0),
+                m_OneUse(m_ExtractValue<1>(
+                    m_OneUse(m_Intrinsic<Intrinsic::frexp>(m_Value(X)))))) &&
+          isKnownNeverInfOrNaN(X, SQ.getWithInstruction(&Cmp))) {
----------------
FathimaHaris wrote:

Moved , isKnownNeverInfOrNaN is now the last check, after the exponent range check.

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


More information about the llvm-commits mailing list