diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 18:49:54 +0900 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 18:49:54 +0900 |
commit | e2810c9a248f4c7fbfae84bb32b6f7e01027458b (patch) | |
tree | ae0b02a8491b969a1cee94ea16ffe42c559143c5 /llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | |
parent | fa04eb4af95c1ca7377279728cb004bcd2324d01 (diff) | |
parent | bdcf47e4bcb92889665825654bb80a8bbe30379e (diff) | |
download | llvm-users/chapuni/cov/single/switch.zip llvm-users/chapuni/cov/single/switch.tar.gz llvm-users/chapuni/cov/single/switch.tar.bz2 |
Merge branch 'users/chapuni/cov/single/base' into users/chapuni/cov/single/switchusers/chapuni/cov/single/switch
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp index 0b93799..4ec1af3 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp @@ -1852,15 +1852,13 @@ Instruction *InstCombinerImpl::visitFPTrunc(FPTruncInst &FPT) { Value *X; Instruction *Op = dyn_cast<Instruction>(FPT.getOperand(0)); if (Op && Op->hasOneUse()) { - IRBuilder<>::FastMathFlagGuard FMFG(Builder); FastMathFlags FMF = FPT.getFastMathFlags(); if (auto *FPMO = dyn_cast<FPMathOperator>(Op)) FMF &= FPMO->getFastMathFlags(); - Builder.setFastMathFlags(FMF); if (match(Op, m_FNeg(m_Value(X)))) { - Value *InnerTrunc = Builder.CreateFPTrunc(X, Ty); - Value *Neg = Builder.CreateFNeg(InnerTrunc); + Value *InnerTrunc = Builder.CreateFPTruncFMF(X, Ty, FMF); + Value *Neg = Builder.CreateFNegFMF(InnerTrunc, FMF); return replaceInstUsesWith(FPT, Neg); } @@ -1870,15 +1868,17 @@ Instruction *InstCombinerImpl::visitFPTrunc(FPTruncInst &FPT) { if (match(Op, m_Select(m_Value(Cond), m_FPExt(m_Value(X)), m_Value(Y))) && X->getType() == Ty) { // 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); + Value *NarrowY = Builder.CreateFPTruncFMF(Y, Ty, FMF); + Value *Sel = + Builder.CreateSelectFMF(Cond, X, NarrowY, FMF, "narrow.sel", Op); 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); + Value *NarrowY = Builder.CreateFPTruncFMF(Y, Ty, FMF); + Value *Sel = + Builder.CreateSelectFMF(Cond, NarrowY, X, FMF, "narrow.sel", Op); return replaceInstUsesWith(FPT, Sel); } } |