Thanks, committed: e232dc3bb5c3e8f8a3749239135b7b859a204fc7

Best,
Soumya

> On 7 Nov 2024, at 3:32 AM, Jeff Law <jeffreya...@gmail.com> wrote:
> 
> External email: Use caution opening links or attachments
> 
> 
> On 11/6/24 1:12 AM, Soumya AR wrote:
>> 
>> 
>>> On 29 Oct 2024, at 6:59 PM, Richard Biener <rguent...@suse.de> wrote:
>>> 
>>> External email: Use caution opening links or attachments
>>> 
>>> 
>>> On Mon, 28 Oct 2024, Soumya AR wrote:
>>> 
>>>> This patch implements transformations for the following optimizations.
>>>> 
>>>> logN(x) CMP CST -> x CMP expN(CST)
>>>> expN(x) CMP CST -> x CMP logN(CST)
>>>> 
>>>> For example:
>>>> 
>>>> int
>>>> foo (float x)
>>>> {
>>>>   return __builtin_logf (x) < 0.0f;
>>>> }
>>>> 
>>>> can just be:
>>>> 
>>>> int
>>>> foo (float x)
>>>> {
>>>>   return x < 1.0f;
>>>> }
>>>> 
>>>> The patch was bootstrapped and regtested on aarch64-linux-gnu, no 
>>>> regression.
>>>> OK for mainline?
>>> 
>>> +   (for cmp (lt le gt ge eq ne)
>>> +    (for logs (LOG LOG2 LOG10)
>>> +        exps (EXP EXP2 EXP10)
>>> +    /* Simplify logN (x) CMP CST into x CMP expN (CST) */
>>> +    (simplify
>>> +    (cmp:c (logs:s @0) @1)
>>> +     (cmp @0 (exps @1)))
>>> +
>>> +    /* Simplify expN (x) CMP CST into x CMP logN (CST) */
>>> +    (simplify
>>> +    (cmp:c (exps:s @0) @1)
>>> +     (cmp @0 (logs @1))))))
>>> 
>>> this doesn't restrict @1 to be constant.  You should use
>>> 
>>> (cmp:c (exps:s @0) REAL_CST@1)
>> 
>> Fixed.
>> 
>>> I think this transform is also very susceptible to rounding
>>> issues - esp. using it for eq and ne looks very dangerous
>>> to me.  Unless you check a roundtrip through exp/log gets
>>> you back exactly the original constant.
>>> 
>>> I think the compare kinds "most safe" would be le and ge.
>> 
>> This makes sense, I’ve updated the patch to only optimize
>> for le and ge.
>> 
>> Thanks,
>> Soumya
>> 
>>> You can look at fold-const-call.cc:do_mpfr_arg1, mpfr gets
>>> you the information on whether the result is exact for example.
>>> 
>>> Richard.
>>> 
>>> 
>>>> Signed-off-by: Soumya AR <soum...@nvidia.com>
>>>> 
>>>> gcc/ChangeLog:
>>>> 
>>>>       * match.pd: Fold logN(x) CMP CST -> x CMP expN(CST)
>>>>       and expN(x) CMP CST -> x CMP logN(CST)
>>>> 
>>>> gcc/testsuite/ChangeLog:
>>>> 
>>>>       * gcc.dg/tree-ssa/log_exp.c: New test.
> The latest version looks good to me.
> 
> Jeff


Reply via email to