summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/Utils.cpp
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2014-10-16 18:48:17 +0000
committerSanjay Patel <spatel@rotateright.com>2014-10-16 18:48:17 +0000
commitc699a6117b0f33739cdbe63fff46f95c79b5133b (patch)
treee29dbf975378a9a26369ce78ae503317baaf6026 /llvm/lib/Transforms/Utils/Utils.cpp
parentd70f3c20b8c0ff71638ac2ee774b4e5a021be521 (diff)
downloadbcm5719-llvm-c699a6117b0f33739cdbe63fff46f95c79b5133b.tar.gz
bcm5719-llvm-c699a6117b0f33739cdbe63fff46f95c79b5133b.zip
fold: sqrt(x * x * y) -> fabs(x) * sqrt(y)
If a square root call has an FP multiplication argument that can be reassociated, then we can hoist a repeated factor out of the square root call and into a fabs(). In the simplest case, this: y = sqrt(x * x); becomes this: y = fabs(x); This patch relies on an earlier optimization in instcombine or reassociate to put the multiplication tree into a canonical form, so we don't have to search over every permutation of the multiplication tree. Because there are no IR-level FastMathFlags for intrinsics (PR21290), we have to use function-level attributes to do this optimization. This needs to be fixed for both the intrinsics and in the backend. Differential Revision: http://reviews.llvm.org/D5787 llvm-svn: 219944
Diffstat (limited to 'llvm/lib/Transforms/Utils/Utils.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud