https://gcc.gnu.org/g:8dc5ad3ce8d4d2cd6cc2b7516d282395502fdf7d
commit r15-1817-g8dc5ad3ce8d4d2cd6cc2b7516d282395502fdf7d Author: Jennifer Schmitz <jschm...@nvidia.com> Date: Wed Jul 3 14:40:42 2024 +0200 [PATCH] match.pd: Fold x/sqrt(x) to sqrt(x) This patch adds a pattern in match.pd folding x/sqrt(x) to sqrt(x) for -funsafe-math-optimizations. Test cases were added for double, float, and long double. The patch was bootstrapped and regtested on aarch64-linux-gnu, no regression. Ok for mainline? Signed-off-by: Jennifer Schmitz <jschm...@nvidia.com> gcc/ * match.pd: Fold x/sqrt(x) to sqrt(x). gcc/testsuite/ * gcc.dg/tree-ssa/sqrt_div.c: New test. Diff: --- gcc/match.pd | 4 ++++ gcc/testsuite/gcc.dg/tree-ssa/sqrt_div.c | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/gcc/match.pd b/gcc/match.pd index 7fff7b5f9fe..a2e205b3207 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -7770,6 +7770,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) when the operand has that value.) */ (if (flag_unsafe_math_optimizations) + /* Simplify x / sqrt(x) -> sqrt(x). */ + (simplify + (rdiv @0 (SQRT @0)) (SQRT @0)) + /* Simplify sqrt(x) * sqrt(x) -> x. */ (simplify (mult (SQRT_ALL@1 @0) @1) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/sqrt_div.c b/gcc/testsuite/gcc.dg/tree-ssa/sqrt_div.c new file mode 100644 index 00000000000..2ae481b7982 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/sqrt_div.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ffast-math -fdump-tree-forwprop-details" } */ +/* { dg-require-effective-target c99_runtime } */ + +#define T(n, type, fname) \ +type f##n (type x) \ +{ \ + type t1 = __builtin_##fname (x); \ + type t2 = x / t1; \ + return t2; \ +} + +T(1, double, sqrt) + +/* { dg-final { scan-tree-dump "gimple_simplified to t2_\[0-9\]+ = __builtin_sqrt .x_\[0-9\]*.D.." "forwprop1" } } */ + +T(2, float, sqrtf ) + +/* { dg-final { scan-tree-dump "gimple_simplified to t2_\[0-9\]+ = __builtin_sqrtf .x_\[0-9\]*.D.." "forwprop1" } } */ + +T(3, long double, sqrtl) + +/* { dg-final { scan-tree-dump "gimple_simplified to t2_\[0-9\]+ = __builtin_sqrtl .x_\[0-9\]*.D.." "forwprop1" } } */