Kewen:

On 6/18/24 20:04, Kewen.Lin wrote:

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");

OK, Yes, we can remove the attribute string for the vec_init built-in.  In 
addition to the code you mentioned, we will need to remove the uses of 
bif_init_bit, bif_is_init and the function altivec_expand_vec_init_builtin.

                          Carl

Reply via email to