[llvm] r346240 - [InstCombine] propagate fast-math-flags when folding fcmp+fpext

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 6 08:23:03 PST 2018


Author: spatel
Date: Tue Nov  6 08:23:03 2018
New Revision: 346240

URL: http://llvm.org/viewvc/llvm-project?rev=346240&view=rev
Log:
[InstCombine] propagate fast-math-flags when folding fcmp+fpext

Modified:
    llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
    llvm/trunk/test/Transforms/InstCombine/fcmp.ll

Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp?rev=346240&r1=346239&r2=346240&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Tue Nov  6 08:23:03 2018
@@ -5483,11 +5483,13 @@ Instruction *InstCombiner::visitFCmpInst
     }
   }
 
-  // fcmp (fpext x), (fpext y) -> fcmp x, y
-  if (FPExtInst *LHSExt = dyn_cast<FPExtInst>(Op0))
-    if (FPExtInst *RHSExt = dyn_cast<FPExtInst>(Op1))
-      if (LHSExt->getSrcTy() == RHSExt->getSrcTy())
-        return new FCmpInst(Pred, LHSExt->getOperand(0), RHSExt->getOperand(0));
+  // fcmp (fpext X), (fpext Y) -> fcmp X, Y
+  if (match(Op0, m_FPExt(m_Value(X))) && match(Op1, m_FPExt(m_Value(Y))) &&
+      X->getType() == Y->getType()) {
+    Instruction *NewFCmp = new FCmpInst(Pred, X, Y);
+    NewFCmp->copyFastMathFlags(&I);
+    return NewFCmp;
+  }
 
   if (I.getType()->isVectorTy())
     if (Instruction *Res = foldVectorCmp(I, Builder))

Modified: llvm/trunk/test/Transforms/InstCombine/fcmp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/fcmp.ll?rev=346240&r1=346239&r2=346240&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/fcmp.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/fcmp.ll Tue Nov  6 08:23:03 2018
@@ -7,7 +7,7 @@ declare <2 x float> @llvm.fabs.v2f32(<2
 
 define i1 @test1(float %x, float %y) {
 ; CHECK-LABEL: @test1(
-; CHECK-NEXT:    [[CMP:%.*]] = fcmp ogt float [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp nnan ogt float [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %ext1 = fpext float %x to double




More information about the llvm-commits mailing list