On Mon, 20 Jan 2025, Soumya AR wrote: > This patch fixes the ICE caused when comparing log or exp of a constant with > another constant. > > The transform is now restricted to cases where the resultant > log/exp (CST) can be constant folded.
OK. Richard. > Signed-off-by: Soumya AR <soum...@nvidia.com> > > gcc/ChangeLog: > > PR target/118490 > * match.pd: Added ! to verify that log/exp (CST) can be constant folded. > > gcc/testsuite/ChangeLog: > > PR target/118490 > * gcc.dg/pr118490.c: New test. > --- > gcc/match.pd | 4 ++-- > gcc/testsuite/gcc.dg/pr | 0 > gcc/testsuite/gcc.dg/pr118490.c | 7 +++++++ > 3 files changed, 9 insertions(+), 2 deletions(-) > create mode 100644 gcc/testsuite/gcc.dg/pr > create mode 100644 gcc/testsuite/gcc.dg/pr118490.c > > diff --git a/gcc/match.pd b/gcc/match.pd > index b6cbb851897..fd1ddf627bf 100644 > --- a/gcc/match.pd > +++ b/gcc/match.pd > @@ -8317,12 +8317,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > /* Simplify logN (x) CMP CST into x CMP expN (CST) */ > (simplify > (cmp:c (logs:s @0) REAL_CST@1) > - (cmp @0 (exps @1))) > + (cmp @0 (exps! @1))) > > /* Simplify expN (x) CMP CST into x CMP logN (CST) */ > (simplify > (cmp:c (exps:s @0) REAL_CST@1) > - (cmp @0 (logs @1)))))) > + (cmp @0 (logs! @1)))))) > > (for logs (LOG LOG2 LOG10 LOG10) > exps (EXP EXP2 EXP10 POW10) > diff --git a/gcc/testsuite/gcc.dg/pr b/gcc/testsuite/gcc.dg/pr > new file mode 100644 > index 00000000000..e69de29bb2d > diff --git a/gcc/testsuite/gcc.dg/pr118490.c b/gcc/testsuite/gcc.dg/pr118490.c > new file mode 100644 > index 00000000000..4ae0dacefee > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/pr118490.c > @@ -0,0 +1,7 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -ffast-math -frounding-math -Wlogical-op" } */ > + > +double exp(double); > +int foo(int v) { > + return v && exp(1.) < 2.; > +} > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)