Hi!

> gcc/
>       * config/i386/avx512fintrin.h (_mm_mask_roundscale_ss,
>       _mm_maskz_roundscale_ss, _mm_maskz_roundscale_round_ss,
>       _mm_maskz_roundscale_round_ss, _mm_mask_roundscale_sd,
>       _mm_maskz_roundscale_sd, _mm_mask_roundscale_round_sd,
>       _mm_maskz_roundscale_round_sd): New intrinsics.
>       (_mm_roundscale_ss, _mm_roundscale_round_ss): Fix.

"Fix." doesn't describe the change you've done.  So I think it should be
instead:
"Use __builtin_ia32_rndscales?_mask_round builtins instead of
__builtin_ia32_rndscales?_round."

>       * config/i386/i386-builtin.def (__builtin_ia32_rndscaless_round,
>       __builtin_ia32_rndscalesd_round): Remove.
>       (__builtin_ia32_rndscalesd_mask_round,

Pasto, sd listed twice, ss not listed, change the first one to ss.

>       __builtin_ia32_rndscalesd_mask_round): New intrinsics.
>       * config/i386/sse.md (avx512f_rndscale<mode><round_saeonly_name>): 
> Renamed to ...
>       (avx512f_rndscale<mode><mask_scalar_name><round_saeonly_scalar_name>): 
> ... this.

These two lines are too long.  Perhaps:
        * config/i386/sse.md
        (avx512f_rndscale<mode><round_saeonly_name>): Renamed to ...
        (avx512f_rndscale<mode><mask_scalar_name><round_saeonly_scalar_name>):
        ... this.

>       ((match_operand:VF_128 2 "<round_saeonly_nimm_predicate>"
>       "<round_saeonly_constraint>")): Changed to ...
>       ((match_operand:VF_128 2 "<round_saeonly_scalar_nimm_predicate>"
>       "<round_saeonly_scalar_constraint>")): ... this.
>       ("vrndscale<ssescalarmodesuffix>\t{%3, <round_saeonly_op4>%2, %1,
>       %0|%0, %1, %<iptr>2<round_saeonly_op4>, %3}"): Changed to ...
>       
> ("vrndscale<ssescalarmodesuffix>\t{%3,<round_saeonly_scalar_mask_op4>%2, %1,
>       %0<mask_scalar_operand4>|%0<mask_scalar_operand4>, %1,
>       %<iptr>2<round_saeonly_scalar_mask_op4>, %3}"): ... this.

But the above is not appropriate, the ChangeLog in *.md is at the level of
define_{insn,expand,split,peephole2,insn_and_split} etc., not at the level
of individual subrtls or patterns.
So, the right thing is just to ammend the "... this.", follow it up by a
sentence what also changed.  Like " Adjust and add subst attributes to make
it maskable."

> 
> gcc/testsuite/
>       * gcc.target/i386/avx512f-vrndscaless-1.c (_mm_mask_roundscale_ss,
>       _mm_maskz_roundscale_ss, _mm_maskz_roundscale_round_ss,
>       _mm_maskz_roundscale_round_ss): Test new intrinsics.

That is again not what you've changed.  For tests, often the exact
spots aren't listed and one just uses *.c: Description. but if you want to
use details, you can e.g.
        * gcc.target/i386/avx512f-vrndscaless-1.c: Add scan-assembler-times
        directives for newly expected instructions.
        (m): New variable.
        (avx512f_test): Add tests for new intrinsics.

>       * gcc.target/i386/avx512f-vrndscaless-2.c (_mm_mask_roundscale_ss,
>       _mm_maskz_roundscale_ss, _mm_maskz_roundscale_round_ss,
>       _mm_maskz_roundscale_round_ss): Test new intrinsics.
>       * gcc.target/i386/avx512f-vrndscalesd-1.c (_mm_mask_roundscale_sd,
>       _mm_maskz_roundscale_sd, _mm_maskz_roundscale_round_sd,
>       _mm_maskz_roundscale_round_sd): Test new intrinsics.
>       * gcc.target/i386/avx512f-vrndscalesd-2.c (_mm_mask_roundscale_sd,
>       _mm_maskz_roundscale_sd, _mm_maskz_roundscale_round_sd,
>       _mm_maskz_roundscale_round_sd): Test new intrinsics.

Likewise.

>       * gcc.target/i386/avx-1.c (__builtin_ia32_rndscalefss_round,
>       __builtin_ia32_rndscalefsd_round): Remove builtin.
>       (__builtin_ia32_rndscalefss_mask_round,
>       __builtin_ia32_rndscalefsd_mask_round): Test new builtin.

That is not what you've changed.  You are there not Removing a builtin
and testing a new builtin, but removing a macro and defining a new macro.
So I think
: Remove.
: Define.
is more appropriate.

> +#define _mm_roundscale_round_ss(A, B, I, R)                                  
> \
> +  ((__m128) __builtin_ia32_rndscaless_mask_round ((__v4sf)(__m128)(A),       
> \
> +                                               (__v4sf)(__m128)(B),  \
> +                                               (int)(I),             \
> +                                               (__v4sf)_mm_setzero_ps(),\

There should be a space after _mm_setzero_p[sd] .
I know the formatting of many macros is just wrong, but no need to add more
of that.

Ok for trunk with those nits fixed.

In fact, it would be probably cleaner to:
  ((__m128)                                                             \
   __builtin_ia32_rndscaless_mask_round ((__v4sf) (__m128) (A),         \
                                         (__v4sf) (__m128) (B),         \
                                         (int) (I),                     \
                                         (__v4sf) _mm_setzero_ps (),    \
                                         (__mmask8) (-1),               \
                                         (int) (R))
or so, because then one has for long builtin names more space.  But
I'm not asking for that to be changed.

        Jakub

Reply via email to