Thank you Richard,

I misunderstood your request to “always state how you tested a patch”. I 
improved the test description in the patch comment, instead.

I tested the patch on both x86_64-pc-linux-gnu and aarch64-arm64-linux-gnu. 
Since I have another patch under review, I’ll write a follow-up email on that 
thread with this information.

Thanks again,
Matteo


> On Sep 11, 2025, at 1:19 PM, Richard Biener <richard.guent...@gmail.com> 
> wrote:
> 
> On Tue, Sep 9, 2025 at 10:39 PM Matteo Nicoli
> <matteo.nicoli...@gmail.com> wrote:
>> 
>> Dear Richard,
>> 
>> You are right, there was a typo in my patch. I removed the duplicate */ and 
>> updated the description of the test in the commit description.
> 
> Thanks.  I have bootstrapped and tested this on x86_64-unknown-linux-gnu
> (please always state how you tested a patch).
> 
> The changelog needed some minor adjustments:
> 
>      PR tree-optimization/121595
>      * gcc/match.pd:(fabs(a + 0.0) -> fabs (a)): Optimization pattern
> limited to
>                                                  the -fno-trapping-math case.
> 
> gcc/ should be dropped and indenting for multi-line entries is to the column
> of the '*', not the ':'.
> 
> All lines should be indented by a tab.
> 
>        * gcc.dg/fabs-plus-zero-1.c: With -ftrapping-math (default behavior),
>        the '+0.0' must be preserved.
> 
> should simply say: New testcase.
> 
> I have pushed the change with this adjustments as r16-3802-gaa4aafbad5235f
> 
> Richard.
> 
> 
>> Best regards,
>> Matteo
>> 
>> 
>> 
>> On 5 Sep 2025, at 9:27 am, Richard Biener <richard.guent...@gmail.com> wrote:
>> 
>> On Thu, Sep 4, 2025 at 4:15 PM Matteo Nicoli <matteo.nicoli...@gmail.com> 
>> wrote:
>> 
>> 
>> Dear Richard,
>> 
>> No, I don’t have access to gcc git. Anyway, I updated the patch description 
>> and attached here the new patch.
>> 
>> 
>> Please always state how you tested a patch.  This one doesn't compile 
>> because:
>> 
>> ../../gcc/gcc/match.pd:2050:56 error: expected (, got *
>>  Otherwise !HONOR_SNANS would be sufficient here.  */*/
>>                                                      ^
>> make[3]: *** [Makefile:3053: s-generic-match] Error 1
>> 
>> @@ -2045,6 +2045,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>> (abs (negate @0))
>> (abs @0))
>> 
>> +/* fabs(x + 0.0) -> fabs(x), safe even with signed zeros when
>> -fno-trapping-math.
>> +   With non-default exception handling denormal + 0.0 might trap.
>> +   Otherwise !HONOR_SNANS would be sufficient here.  */*/
>> +(for op (plus minus)
>> 
>> duplicate */ here.
>> 
>> Richard.
>> 
>> Best regards,
>> Matteo
>> 
>> 
>> 
>> On Sep 2, 2025, at 1:57 PM, Richard Biener <richard.guent...@gmail.com> 
>> wrote:
>> 
>> On Fri, Aug 29, 2025 at 2:20 PM Matteo Nicoli
>> <matteo.nicoli...@gmail.com> wrote:
>> 
>> 
>> Here’s the patch with the modified comment before the rule in match.pd
>> 
>> 
>> OK.  Do you have git access?  Btw, the ChangeLog is currently wrong:
>> 
>> Subject: [PATCH] tree-optimization/121595 - the optimization fabs(a+0.0) ->
>> fabs(a) should apply only for non trapping case
>> 
>> * added a match expression
>>  -  gcc/match.pd
>> * added tests
>>  -  gcc/testsuite/gcc.dg/fabs-plus-zero-1.c
>>  -  gcc/testsuite/gcc.dg/fabs-plus-zero-2.c
>> 
>> 
>> there's a missing patch description and the changlog part should look like 
>> this:
>> 
>>      PR tree-optimization/121595
>>      * match.pd (fabs(a + 0.0) -> fabs (a)): New pattern.
>> 
>>      * gcc.dg/fabs-plus-zero-1.c: New testcase.
>>      * gcc.dg/fabs-plus-zero-2.c: Likewise.
>> 
>> 
>> 
>> 
>> On Aug 29, 2025, at 12:53 PM, Richard Biener <richard.guent...@gmail.com> 
>> wrote:
>> 
>> On Fri, Aug 29, 2025 at 10:56 AM Matteo Nicoli
>> <matteo.nicoli...@gmail.com> wrote:
>> 
>> 
>> Dear Richard,
>> 
>> 
>> It can trap with sNaN ± 0.0. ±Inf ± 0.0 = ±Inf, so it does not raise an 
>> FE_OVERFLOW (because there’s no overflow of a finite quantity), and qNaN 
>> does not raise an FE_INVALID because it’s quiet.
>> 
>> 
>> There’s already a check for sNaN in fold-const.cc
>> 
>> 
>> /* Don't allow the fold with -fsignaling-nans. */
>> if (arg ? tree_expr_maybe_signaling_nan_p (arg) : HONOR_SNANS (type))
>> 
>> return false;
>> 
>> 
>> As far as I know, the purpose of this bug fix was to suppress this specific 
>> optimization when the program is compiled with -ftrapping-math flag.
>> 
>> 
>> So we've discussed on IRC and the conclusion was that with default
>> exception handling !HONOR_SNANS would be sufficient
>> but alternate exception handling might trap on x + 0.0 when x is
>> denormal.  Ideally we'd have a separate flag for
>> non-default exception handling, but as-is we don't.
>> 
>> Please add a comment like
>> 
>> /* With non-default exception handling denormal + 0.0 might trap.
>> Otherwise !HONOR_SNANS would be sufficient here.  */
>> 
>> The patch is OK with that change.
>> 
>> Richard.
>> 
>> 
>> 
>> 
>> Best regards,
>> 
>> Matteo
>> 
>> 
>> 
>> 
>> On Aug 28, 2025, at 10:43 AM, Richard Biener <richard.guent...@gmail.com> 
>> wrote:
>> 
>> On Sat, Aug 23, 2025 at 11:56 PM Matteo Nicoli
>> <matteo.nicoli...@gmail.com> wrote:
>> 
>> 
>> Dear reviewers,
>> 
>> I attached a patch for bug 121595 
>> (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121595). I signed it, and 
>> added `Reviewed-by: Andrew Pinski  <andrew.pin...@oss.qualcomm.com>` (here 
>> in CC).
>> 
>> 
>> +/* fabs(x + 0.0) -> fabs(x), safe even with signed zeros when
>> -fno-trapping-math.  */
>> +(for op (plus minus)
>> + (simplify
>> +  (abs (op @0 real_zerop@1))
>> +  (if (!flag_trapping_math)
>> +   (abs @0))))
>> 
>> so forgive my ignorance, possibly IEEE abs() never raises FP exceptions
>> (unless operating on sNaN?)?  But does Inf + 0.0 raise FE_OVERFLOW?
>> Does NaN + 0.0 raise FE_INVALID?
>> 
>> So what I wonder is whether !HONOR_SNANS (@0) would be enough to check?
>> 
>> I refrained from trusting AI on those questions ...
>> 
>> Richard.
>> 
>> Best regards,
>> Matteo
>> 
>> 
>> 
>> 
>> 
>> 

Reply via email to