On Fri, May 26, 2017 at 10:55 AM, Marc Glisse <marc.gli...@inria.fr> wrote:
> Hello,
>
> glibc marks fegetround as a pure function. On x86, people tend to use
> _MM_GET_ROUNDING_MODE instead, which could benefit from the same. I think it
> is safe, but a second opinion would be welcome.

Sounds good.  The important part is to keep the dependency to SET_ROUNDING_MODE
which is done via claiming both touch global memory.

> I could have handled just this builtin, but it seemed better to provide
> def_builtin_pure (like "const" already has) since there should be other
> builtins that can be marked this way (maybe the gathers?).

Should work for gathers.  They could even use stronger guarantees,
namely a fnspec with "..R" (the pointer argument is only read from directly).
Similarly scatter can use ".W" (the pointer argument is only written to
directly).

Richard.

> Bootstrap+testsuite on x86_64-pc-linux-gnu with default languages.
>
> 2017-05-29  Marc Glisse  <marc.gli...@inria.fr>
>
> gcc/
>         * config/i386/i386.c (struct builtin_isa): New field pure_p.
>         Reorder for compactness.
>         (def_builtin, def_builtin2, ix86_add_new_builtins): Handle pure_p.
>         (def_builtin_pure, def_builtin_pure2): New functions.
>         (ix86_init_mmx_sse_builtins) [__builtin_ia32_stmxcsr]: Mark as pure.
>
> gcc/testsuite/
>         * gcc.target/i386/getround.c: New file.
>
> --
> Marc Glisse

Reply via email to