This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] i386: Roundeven expansion for SSE4.1+


On Wed, Jul 24, 2019 at 12:43 PM Tejas Joshi <tejasjoshi9673@gmail.com> wrote:
>
> Hi.
> This is a patch that Uros suggested for roundeven expansion, here.
> Thanks for the heads up.
> <https://gcc.gnu.org/ml/gcc-patches/2019-07/msg01038.html>
> I have rerun the testsuite on the patch, it survives the regression
> tests and bootstraps on x86_64-linux-gnu. Note, patch to be applied on
> top of
> <https://gcc.gnu.org/ml/gcc-patches/2019-06/msg01828.html>
>
> Thanks,
> Tejas
>
> gcc/ChangeLog:
>
> 2019-07-24  Tejas Joshi  <tejasjoshi9673@gmail.com>
>
>     * builtins.c (mathfn_built_in_2): Change CASE_MATHFN to
>     CASE_MATHFN_FLOATN for roundeven.
>     * config/i386/i386.c (ix86_i387_mode_needed): Add case I387_ROUNDEVEN.
>     (ix86_mode_needed): Likewise.
>     (ix86_mode_after): Likewise.
>     (ix86_mode_entry): Likewise.
>     (ix86_mode_exit): Likewise.
>     (ix86_emit_mode_set): Likewise.
>     (emit_i387_cw_initialization): Add case I387_CW_ROUNDEVEN.
>     * config/i386/i386.h (ix86_stack_slot) : Add SLOT_CW_ROUNDEVEN.
>     (ix86_entry): Add I387_ROUNDEVEN.
>     (avx_u128_state): Add I387_CW_ANY.
>     * config/i386/i386.md: Define UNSPEC_FRNDINT_ROUNDEVEN.
>     (define_int_iterator): Likewise.
>     (define_int_attr): Likewise for rounding_insn, rounding and ROUNDING.
>     (define_constant): Define ROUND_ROUNDEVEN mode.
>     (define_attr): Add roundeven mode for i387_cw.
>     (<rouding_insn><mode>2): Add condition for ROUND_ROUNDEVEN.
>     * internal-fn.def (ROUNDEVEN): New builtin function.
>     * optabs.def (roundeven_optab): New optab.
>

LGTM for the x86 part, but you are mixing middle-end changes in the
patch, so you also need an OK from a middle-end maintainer.

> gcc/testsuite/ChangeLog:
>
> 2019-07-24  Tejas Joshi  <tejasjoshi9673@gmail.com>
>
>     * gcc.target/i386/avx-vround-roundeven-1.c: New test.
>     * gcc.target/i386/avx-vround-roundeven-2.c: New test.

roundss and roundsd are sse4_1 instructions, also please change tests
to use -O2:

/* { dg-require-effective-target sse4 } */
/* { dg-options "-O2 -msse4.1" } */

and

#include "sse4_1-check.h"

with

static void
sse4_1_test (void)
{
... test code ...
}

No need to use that much #defines.

Uros.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]