Hi Carl,

on 2024/6/14 03:40, Carl Love wrote:
> GCC maintainers:
> 
> The patch has been updated per the feedback from version 3.  Please let me 
> know it the patch is acceptable for mainline.
> 
> Thanks.
> 
>                       Carl 
> 
> ----------------------------------------------------------------------------------
> 
> rs6000, remove vector set and vector init built-ins
> 
> The vector init built-ins:
> 
>   __builtin_vec_init_v16qi, __builtin_vec_init_v8hi,
>   __builtin_vec_init_v4si, __builtin_vec_init_v4sf,
>   __builtin_vec_init_v2di, __builtin_vec_init_v2df,
>   __builtin_vec_init_v1ti
> 
> perform the same operation as initializing the vector in C code.  For
> example:
> 
>   result_v4si = __builtin_vec_init_v4si (1, 2, 3, 4);
>   result_v4si = {1, 2, 3, 4};
> 
> These two constructs were tested and verified they generate identical
> assembly instructions with no optimization and -O3 optimization.
> 
> The vector set built-ins:
> 
>   __builtin_vec_set_v16qi, __builtin_vec_set_v8hi.
>   __builtin_vec_set_v4si, __builtin_vec_set_v4sf,
>   __builtin_vec_set_v1ti, __builtin_vec_set_v2di,
>   __builtin_vec_set_v2df
> 
> perform the same operation as setting a specific element in the vector in
> C code.  For example:
> 
>   src_v4si = __builtin_vec_set_v4si (src_v4si, int_val, index);
>   src_v4si[index] = int_val;
> 
> The built-in actually generates more instructions than the inline C code
> with no optimization but is identical with -O3 optimizations.
> 
> All of the above built-ins that are removed do not have test cases and
> are not documented.
> 
> Built-ins   __builtin_vec_set_v1ti __builtin_vec_set_v2di,
> __builtin_vec_set_v2df are not removed as they are used in function
> resolve_vec_insert() in file rs6000-c.cc.
> 
> The built-ins are removed as they don't provide any benefit over just
> using C code.
> 
> gcc/ChangeLog:
>       * config/rs6000/rs6000-builtins.def (__builtin_vec_init_v16qi,
>       __builtin_vec_init_v4sf, __builtin_vec_init_v4si,
>       __builtin_vec_init_v8hi, __builtin_vec_init_v1ti,
>       __builtin_vec_init_v2df, __builtin_vec_init_v2di,
>       __builtin_vec_set_v16qi, __builtin_vec_set_v4sf,
>       __builtin_vec_set_v4si, __builtin_vec_set_v8hi): Remove
>       built-in definitions.
> ---
>  gcc/config/rs6000/rs6000-builtins.def | 44 +++------------------------
>  1 file changed, 4 insertions(+), 40 deletions(-)
> 
> diff --git a/gcc/config/rs6000/rs6000-builtins.def 
> b/gcc/config/rs6000/rs6000-builtins.def
> index 02aa04e5698..053dc0115d2 100644
> --- a/gcc/config/rs6000/rs6000-builtins.def
> +++ b/gcc/config/rs6000/rs6000-builtins.def
> @@ -1118,37 +1118,6 @@
>    const signed short __builtin_vec_ext_v8hi (vss, signed int);
>      VEC_EXT_V8HI nothing {extract}
>  
> -  const vsc __builtin_vec_init_v16qi (signed char, signed char, signed char, 
> \
> -            signed char, signed char, signed char, signed char, signed char, 
> \
> -            signed char, signed char, signed char, signed char, signed char, 
> \
> -            signed char, signed char, signed char);
> -    VEC_INIT_V16QI nothing {init}

I just realized this {init} is customized for vec_init only, these removed 
vec_init
bifs are the only users of it, so we should remove this attribute as well.  
Sorry that
I should have found and pointed out this in the previous review.  I think it 
means
some removals are needed on:

    1) comments in rs6000-builtins.def
       ;   init     Process as a vec_init function

    2) related gen code for this attribute bit, like:

      fprintf (header_file, "#define bif_init_bit\t\t(0x00000001)\n");
      fprintf (header_file,
           "#define bif_is_init(x)\t\t((x).bifattrs & bif_init_bit)\n");
      if (bifp->attrs.isinit)
        fprintf (init_file, " | bif_init_bit");

The others look good to me!

BR,
Kewen

Reply via email to