Hi!

On Wed, Aug 11, 2021 at 02:56:11PM +0800, Kewen.Lin wrote:
>       * config/rs6000/rs6000.c (rs6000_builtin_md_vectorized_function): Add
>       support for some built-in functions vectorized on Power10.

Say which, not "some" please?

> +  machine_mode in_vmode = TYPE_MODE (type_in);
> +  machine_mode out_vmode = TYPE_MODE (type_out);
> +
> +  /* Power10 supported vectorized built-in functions.  */
> +  if (TARGET_POWER10
> +      && in_vmode == out_vmode
> +      && VECTOR_UNIT_ALTIVEC_OR_VSX_P (in_vmode))
> +    {
> +      machine_mode exp_mode = DImode;
> +      machine_mode exp_vmode = V2DImode;
> +      enum rs6000_builtins vname = RS6000_BUILTIN_COUNT;

"name"?  This should be "bif" or similar?

> +      switch (fn)
> +     {
> +     case MISC_BUILTIN_DIVWE:
> +     case MISC_BUILTIN_DIVWEU:
> +       exp_mode = SImode;
> +       exp_vmode = V4SImode;
> +       if (fn == MISC_BUILTIN_DIVWE)
> +         vname = P10V_BUILTIN_DIVES_V4SI;
> +       else
> +         vname = P10V_BUILTIN_DIVEU_V4SI;
> +       break;
> +     case MISC_BUILTIN_DIVDE:
> +     case MISC_BUILTIN_DIVDEU:
> +       if (fn == MISC_BUILTIN_DIVDE)
> +         vname = P10V_BUILTIN_DIVES_V2DI;
> +       else
> +         vname = P10V_BUILTIN_DIVEU_V2DI;
> +       break;

All of the above should not be builtin functions really, they are all
simple arithmetic :-(  They should not be UNSPECs either, on RTL level.
They can and should be optimised in real code as well.  Oh well.

> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/dive-vectorize-2.c
> @@ -0,0 +1,12 @@
> +/* { dg-do compile } */
> +/* { dg-require-effective-target lp64 } */

Please add a comment what this is needed for?  "We scan for dive*d" is
enough, but without anything, it takes time to figure this out.

> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/dive-vectorize-run-2.c
> @@ -0,0 +1,53 @@
> +/* { dg-do run } */
> +/* { dg-require-effective-target lp64 } */

Same here.  I suppose this uses builtins that do not exist on 32-bit?

> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/p10-bifs-vectorize-run-1.c
> @@ -0,0 +1,45 @@
> +/* { dg-do run } */
> +/* { dg-require-effective-target lp64 } */

And another.

> +#define CHECK(name)                                                          
>  \
> +  __attribute__ ((optimize (1))) void check_##name ()                        
>  \

What is the attribute for, btw?  It seems fragile, but perhaps I do not
understand the intention.


Okay for trunk with whose lp64 things improved.  Thanks!


Segher

Reply via email to