Sanjay Patel d8214db086 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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219944 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-16 18:48:17 +00:00
..
2014-06-02 21:23:54 +00:00
2014-05-27 16:54:33 +00:00
2014-01-22 22:32:58 +00:00
2014-03-06 05:32:52 +00:00
2014-02-26 19:51:08 +00:00
2014-07-15 00:07:27 +00:00
2014-07-09 17:49:58 +00:00
2014-02-26 22:29:11 +00:00
2014-06-02 22:01:04 +00:00
2014-06-02 22:01:04 +00:00
2014-03-29 10:18:08 +00:00
2014-02-26 22:29:11 +00:00
2014-06-02 22:01:04 +00:00

This directory contains test cases for the instcombine transformation.  The
dated tests are actual bug tests, whereas the named tests are used to test
for features that the this pass should be capable of performing.