[llvm] 51e420c - [InstCombine] add FMF guard to builder in fptrunc transform; NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 5 07:55:54 PST 2019


Author: Sanjay Patel
Date: 2019-12-05T10:55:07-05:00
New Revision: 51e420c27e2dc493bd71a6305ffb4d8acb401755

URL: https://github.com/llvm/llvm-project/commit/51e420c27e2dc493bd71a6305ffb4d8acb401755
DIFF: https://github.com/llvm/llvm-project/commit/51e420c27e2dc493bd71a6305ffb4d8acb401755.diff

LOG: [InstCombine] add FMF guard to builder in fptrunc transform; NFC

This makes no difference currently because we don't apply FMF
to FP casts, but that may change.

This could also be a place to add a fold for select with fptrunc,
so it will make that patch easier/smaller.

Added: 
    

Modified: 
    llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
index 2171c819fd9e..53bcaeb98b42 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
@@ -1622,6 +1622,11 @@ Instruction *InstCombiner::visitFPTrunc(FPTruncInst &FPT) {
   Value *X;
   Instruction *Op = dyn_cast<Instruction>(FPT.getOperand(0));
   if (Op && Op->hasOneUse()) {
+    // FIXME: The FMF should propagate from the fptrunc, not the source op.
+    IRBuilder<>::FastMathFlagGuard FMFG(Builder);
+    if (isa<FPMathOperator>(Op))
+      Builder.setFastMathFlags(Op->getFastMathFlags());
+
     if (match(Op, m_FNeg(m_Value(X)))) {
       Value *InnerTrunc = Builder.CreateFPTrunc(X, Ty);
 


        


More information about the llvm-commits mailing list