summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/Reassociate.cpp
diff options
context:
space:
mode:
authorVyacheslav Klochkov <vyacheslav.n.klochkov@gmail.com>2016-11-22 20:23:04 +0000
committerVyacheslav Klochkov <vyacheslav.n.klochkov@gmail.com>2016-11-22 20:23:04 +0000
commit68a677ae5bacec56dff71cded32a376fe06b9fe0 (patch)
tree88c4ac151d067994d6d43cb16c7a286a0372f4a0 /llvm/lib/Transforms/Scalar/Reassociate.cpp
parentb3c3d149b98006ce217f50baa28783fd5d0105e1 (diff)
downloadbcm5719-llvm-68a677ae5bacec56dff71cded32a376fe06b9fe0.tar.gz
bcm5719-llvm-68a677ae5bacec56dff71cded32a376fe06b9fe0.zip
Fixed the lost FastMathFlags in Reassociate optimization.
Reviewer: Hal Finkel. Differential Revision: https://reviews.llvm.org/D26957 llvm-svn: 287695
Diffstat (limited to 'llvm/lib/Transforms/Scalar/Reassociate.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/Reassociate.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/Reassociate.cpp b/llvm/lib/Transforms/Scalar/Reassociate.cpp
index 40c1e3717a2..181a324861e 100644
--- a/llvm/lib/Transforms/Scalar/Reassociate.cpp
+++ b/llvm/lib/Transforms/Scalar/Reassociate.cpp
@@ -1778,6 +1778,12 @@ Value *ReassociatePass::OptimizeMul(BinaryOperator *I,
return nullptr; // All distinct factors, so nothing left for us to do.
IRBuilder<> Builder(I);
+ // The reassociate transformation for FP operations is performed only
+ // if unsafe algebra is permitted by FastMathFlags. Propagate those flags
+ // to the newly generated operations.
+ if (auto FPI = dyn_cast<FPMathOperator>(I))
+ Builder.setFastMathFlags(FPI->getFastMathFlags());
+
Value *V = buildMinimalMultiplyDAG(Builder, Factors);
if (Ops.empty())
return V;
OpenPOWER on IntegriCloud