diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2014-10-16 18:48:17 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2014-10-16 18:48:17 +0000 |
| commit | c699a6117b0f33739cdbe63fff46f95c79b5133b (patch) | |
| tree | e29dbf975378a9a26369ce78ae503317baaf6026 /llvm/docs/CommandGuide/llvm-diff.rst | |
| parent | d70f3c20b8c0ff71638ac2ee774b4e5a021be521 (diff) | |
| download | llvm-c699a6117b0f33739cdbe63fff46f95c79b5133b.zip llvm-c699a6117b0f33739cdbe63fff46f95c79b5133b.tar.gz llvm-c699a6117b0f33739cdbe63fff46f95c79b5133b.tar.bz2 | |
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/docs/CommandGuide/llvm-diff.rst')
0 files changed, 0 insertions, 0 deletions
