[PATCH] PR middle-end/53267: Constant fold BUILT_IN_FMOD.

2021-06-08 Thread Roger Sayle

Here's a three line patch to implement constant folding for fmod,
fmodf and fmodl, which resolves an enhancement request from 2012.

The following patch has been tested on x86_64-pc-linux-gnu with
a make bootstrap and make -k check with no new failures.

Ok for mainline?


2020-06-08  Roger Sayle  

gcc/ChangeLog
PR middle-end/53267
* fold-const-call.c (fold_const_call_sss) [CASE_CFN_FMOD]:
Support evaluation of fmod/fmodf/fmodl at compile-time.

gcc/testsuite/ChangeLog
* gcc.dg/builtins-70.c: New test.


Roger
--
Roger Sayle
NextMove Software
Cambridge, UK

diff --git a/gcc/fold-const-call.c b/gcc/fold-const-call.c
index a1d70b6..d6cb9b1 100644
--- a/gcc/fold-const-call.c
+++ b/gcc/fold-const-call.c
@@ -1375,6 +1375,9 @@ fold_const_call_sss (real_value *result, combined_fn fn,
 CASE_CFN_FDIM:
   return do_mpfr_arg2 (result, mpfr_dim, arg0, arg1, format);
 
+CASE_CFN_FMOD:
+  return do_mpfr_arg2 (result, mpfr_fmod, arg0, arg1, format);
+
 CASE_CFN_HYPOT:
   return do_mpfr_arg2 (result, mpfr_hypot, arg0, arg1, format);
 
/* Copyright (C) 2021 Free Software Foundation.

   Check that constant folding of built-in fmod functions doesn't
   break anything and produces the expected results.

/* { dg-do link } */
/* { dg-options "-O2 -ffast-math" } */

extern void link_error(void);

extern double fmod(double,double);
extern float fmodf(float,float);
extern long double fmodl(long double,long double);

int main()
{
  if (fmod (6.5, 2.3) < 1.8999 || fmod (6.5, 2.3) > 1.9001)
link_error ();
  if (fmod (-6.5, 2.3) < -1.9001 || fmod (-6.5, 2.3) > -1.8999)
link_error ();
  if (fmod (6.5, -2.3) < 1.8999 || fmod (6.5, -2.3) > 1.9001)
link_error ();
  if (fmod (-6.5, -2.3) < -1.9001 || fmod (-6.5, -2.3) > -1.8999)
link_error ();

  if (fmodf (6.5f, 2.3f) < 1.8999f || fmodf (6.5f, 2.3f) > 1.9001f)
link_error ();
  if (fmodf (-6.5f, 2.3f) < -1.9001f || fmodf (-6.5f, 2.3f) > -1.8999f)
link_error ();
  if (fmodf (6.5f, -2.3f) < 1.8999f || fmodf (6.5f, -2.3f) > 1.9001f)
link_error ();
  if (fmodf (-6.5f, -2.3f) < -1.9001f || fmodf (-6.5f, -2.3f) > -1.8999f)
link_error ();

  if (fmodl (6.5l, 2.3l) < 1.8999l || fmod (6.5l, 2.3l) > 1.9001l)
link_error ();
  if (fmodl (-6.5l, 2.3l) < -1.9001l || fmod (-6.5l, 2.3l) > -1.8999l)
link_error ();
  if (fmodl (6.5l, -2.3l) < 1.8999l || fmod (6.5l, -2.3l) > 1.9001l)
link_error ();
  if (fmodl (-6.5l, -2.3l) < -1.9001l || fmod (-6.5l, -2.3l) > -1.8999l)
link_error ();

  return 0;
}



Re: [PATCH] PR middle-end/53267: Constant fold BUILT_IN_FMOD.

2021-06-09 Thread Richard Biener via Gcc-patches
On Tue, Jun 8, 2021 at 9:36 PM Roger Sayle  wrote:
>
>
> Here's a three line patch to implement constant folding for fmod,
> fmodf and fmodl, which resolves an enhancement request from 2012.
>
> The following patch has been tested on x86_64-pc-linux-gnu with
> a make bootstrap and make -k check with no new failures.
>
> Ok for mainline?

OK.  I double-checked and mpfr_fmod appeared in mpfr 2.4.0 and
we require at least 3.1.0.

Thanks,
Richard.

>
> 2020-06-08  Roger Sayle  
>
> gcc/ChangeLog
> PR middle-end/53267
> * fold-const-call.c (fold_const_call_sss) [CASE_CFN_FMOD]:
> Support evaluation of fmod/fmodf/fmodl at compile-time.
>
> gcc/testsuite/ChangeLog
> * gcc.dg/builtins-70.c: New test.
>
>
> Roger
> --
> Roger Sayle
> NextMove Software
> Cambridge, UK
>


Re: [PATCH] PR middle-end/53267: Constant fold BUILT_IN_FMOD.

2021-06-09 Thread Jeff Law via Gcc-patches




On 6/9/2021 4:51 AM, Richard Biener via Gcc-patches wrote:

On Tue, Jun 8, 2021 at 9:36 PM Roger Sayle  wrote:


Here's a three line patch to implement constant folding for fmod,
fmodf and fmodl, which resolves an enhancement request from 2012.

The following patch has been tested on x86_64-pc-linux-gnu with
a make bootstrap and make -k check with no new failures.

Ok for mainline?

OK.  I double-checked and mpfr_fmod appeared in mpfr 2.4.0 and
we require at least 3.1.0.
I'm not sure if Roger has write access these days, so I went ahead and 
committed the patch on his behalf.


jeff



RE: [PATCH] PR middle-end/53267: Constant fold BUILT_IN_FMOD.

2021-06-09 Thread Roger Sayle


Hi Jeff (and Richard),
Many thanks to you both.  Fingers-crossed my write-access (after approval) 
still works
(I think it's just maintainer status that I've lost over time), but finding 
time to contribute
is getting much harder, so my response time is much slower than it was a decade 
ago.
Having someone help with committing patches is always very much appreciated.
Cheers,
Roger
--

-Original Message-
From: Jeff Law  
Sent: 09 June 2021 16:27
To: Richard Biener ; Roger Sayle 

Cc: GCC Patches 
Subject: Re: [PATCH] PR middle-end/53267: Constant fold BUILT_IN_FMOD.



On 6/9/2021 4:51 AM, Richard Biener via Gcc-patches wrote:
> On Tue, Jun 8, 2021 at 9:36 PM Roger Sayle  wrote:
>>
>> Here's a three line patch to implement constant folding for fmod, 
>> fmodf and fmodl, which resolves an enhancement request from 2012.
>>
>> The following patch has been tested on x86_64-pc-linux-gnu with a 
>> make bootstrap and make -k check with no new failures.
>>
>> Ok for mainline?
> OK.  I double-checked and mpfr_fmod appeared in mpfr 2.4.0 and we 
> require at least 3.1.0.
I'm not sure if Roger has write access these days, so I went ahead and 
committed the patch on his behalf.

jeff