diff options
author | Jennifer Schmitz <jschmitz@nvidia.com> | 2024-09-25 03:21:22 -0700 |
---|---|---|
committer | Jennifer Schmitz <jschmitz@nvidia.com> | 2024-10-11 16:56:37 +0200 |
commit | 4be7d2d340a013d01a47c43d2feb6826d1b67af0 (patch) | |
tree | cc320817624aa13bd9024e695fb915f5392bc54b /gcc/fortran/error.cc | |
parent | 00a87ee76f47d0fa5a10ef982101cb3c3b8e9c99 (diff) | |
download | gcc-4be7d2d340a013d01a47c43d2feb6826d1b67af0.zip gcc-4be7d2d340a013d01a47c43d2feb6826d1b67af0.tar.gz gcc-4be7d2d340a013d01a47c43d2feb6826d1b67af0.tar.bz2 |
match.pd: Fold logarithmic identities.
This patch implements 4 rules for logarithmic identities in match.pd
under -funsafe-math-optimizations:
1) logN(1.0/a) -> -logN(a). This avoids the division instruction.
2) logN(C/a) -> logN(C) - logN(a), where C is a real constant. Same as 1).
3) logN(a) + logN(b) -> logN(a*b). This reduces the number of calls to
log function.
4) logN(a) - logN(b) -> logN(a/b). Same as 4).
Tests were added for float, double, and long double.
The patch was bootstrapped and regtested on aarch64-linux-gnu and
x86_64-linux-gnu, no regression.
Additionally, SPEC 2017 fprate was run. While the transform does not seem
to be triggered, we also see no non-noise impact on performance.
OK for mainline?
Signed-off-by: Jennifer Schmitz <jschmitz@nvidia.com>
gcc/
PR tree-optimization/116826
PR tree-optimization/86710
* match.pd: Fold logN(1.0/a) -> -logN(a),
logN(C/a) -> logN(C) - logN(a), logN(a) + logN(b) -> logN(a*b),
and logN(a) - logN(b) -> logN(a/b).
gcc/testsuite/
PR tree-optimization/116826
PR tree-optimization/86710
* gcc.dg/tree-ssa/log_ident.c: New test.
Diffstat (limited to 'gcc/fortran/error.cc')
0 files changed, 0 insertions, 0 deletions