[Patch][GCC][middle-end] - Generate FRINTZ for (double)(int) under -ffast-math on aarch64

Richard Biener richard.guenther@gmail.com
Tue Aug 17 08:12:52 GMT 2021


On Mon, Aug 16, 2021 at 8:48 PM Andrew Pinski via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> On Mon, Aug 16, 2021 at 9:15 AM Jirui Wu via Gcc-patches
> <gcc-patches@gcc.gnu.org> wrote:
> >
> > Hi all,
> >
> > This patch generates FRINTZ instruction to optimize type casts.
> >
> > The changes in this patch covers:
> > * Opimization of a FIX_TRUNC_EXPR cast inside a FLOAT_EXPR using IFN_TRUNC.
> > * Change of corresponding test cases.
> >
> > Regtested on aarch64-none-linux-gnu and no issues.
> >
> > Ok for master? If OK can it be committed for me, I have no commit rights.
>
> Is there a reason why you are doing the transformation manually inside
> forwprop rather than handling it inside match.pd?
> Also can't this only be done for -ffast-math case?

You definitely have to look at the intermediate type - that could be a uint8_t
or even a boolean type.  So unless the intermediate type can represent
all float values optimizing to trunc() is invalid.  Also if you emit
IFN_TRUNC you have to make sure there's target support - we don't
emit calls to a library trunc() from an internal function call (and we wouldn't
want to optimize it that way).

Richard.

>
> Thanks,
> Andrew Pinski
>
> >
> > Thanks,
> > Jirui
> >
> > gcc/ChangeLog:
> >
> >         * tree-ssa-forwprop.c (pass_forwprop::execute): Optimize with frintz.
> >
> >
> > gcc/testsuite/ChangeLog:
> >
> >         * gcc.target/aarch64/fix_trunc1.c: Update to new expectation.


More information about the Gcc-patches mailing list