diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-02-16 18:46:24 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-02-16 18:46:24 +0000 |
commit | 920576042d53ab69298bdd13095f63a9bae2697b (patch) | |
tree | 6667c420f0b9da1ccfd21c050acddf9862c519a9 /llvm/lib | |
parent | b9b41a280daec521f9b937a317c6665bb14dd100 (diff) | |
download | bcm5719-llvm-920576042d53ab69298bdd13095f63a9bae2697b.tar.gz bcm5719-llvm-920576042d53ab69298bdd13095f63a9bae2697b.zip |
InstCombine: Canonicalize fast fmuladd to fmul + fadd
llvm-svn: 295353
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index 7f34a55638f..192db0799b1 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -2044,8 +2044,21 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { return replaceInstUsesWith(*II, V); break; } - case Intrinsic::fma: case Intrinsic::fmuladd: { + // Canonicalize fast fmuladd to the separate fmul + fadd. + if (II->hasUnsafeAlgebra()) { + BuilderTy::FastMathFlagGuard Guard(*Builder); + Builder->setFastMathFlags(II->getFastMathFlags()); + Value *Mul = Builder->CreateFMul(II->getArgOperand(0), + II->getArgOperand(1)); + Value *Add = Builder->CreateFAdd(Mul, II->getArgOperand(2)); + Add->takeName(II); + return replaceInstUsesWith(*II, Add); + } + + LLVM_FALLTHROUGH; + } + case Intrinsic::fma: { Value *Src0 = II->getArgOperand(0); Value *Src1 = II->getArgOperand(1); |