[clang] [llvm] [IR] Allow fast math flags on fptrunc and fpext (PR #115894)

Yingwei Zheng via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 13 17:02:51 PST 2024


================
@@ -1875,13 +1873,17 @@ Instruction *InstCombinerImpl::visitFPTrunc(FPTruncInst &FPT) {
       // fptrunc (select Cond, (fpext X), Y --> select Cond, X, (fptrunc Y)
       Value *NarrowY = Builder.CreateFPTrunc(Y, Ty);
       Value *Sel = Builder.CreateSelect(Cond, X, NarrowY, "narrow.sel", Op);
+      if (auto *I = dyn_cast<Instruction>(Sel))
+        I->setFastMathFlags(Op->getFastMathFlags());
       return replaceInstUsesWith(FPT, Sel);
     }
     if (match(Op, m_Select(m_Value(Cond), m_Value(Y), m_FPExt(m_Value(X)))) &&
         X->getType() == Ty) {
       // fptrunc (select Cond, Y, (fpext X) --> select Cond, (fptrunc Y), X
       Value *NarrowY = Builder.CreateFPTrunc(Y, Ty);
       Value *Sel = Builder.CreateSelect(Cond, NarrowY, X, "narrow.sel", Op);
+      if (auto *I = dyn_cast<Instruction>(Sel))
+        I->setFastMathFlags(Op->getFastMathFlags());
----------------
dtcxzyw wrote:

We already propagate FMF in `IRBuilder::CreateSelect`. BTW it is incorrect to preserve `ninf`: https://github.com/llvm/llvm-project/pull/116073#discussion_r1840831023


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


More information about the cfe-commits mailing list