Hi Carl, on 2024/7/24 01:52, Carl Love wrote: > > GCC maintainers: > > This patch was previously posted. Per the feedback, it is now the first of > two patches to remove the set built-ins. > > This patch removes the __builtin_vec_set_v1ti, __builtin_vec_set_v2df and > __builtin_vec_set_v2di built-ins. The users should just use normal C-code to > update the various vector elements. This change was originally intended to > be part of the earlier series of cleanup patches. It was initially thought > that some additional work would be needed to do some gimple generation > instead of these built-ins. However, the existing default code generation > does produce the needed code. For the vec_set bif, the equivalent C code > is as good or better than the built-in. For the vec_insert bif whose > resolving previously made use of the vec_set bif, the assembly code > generation is as good as before with the -O3 optimization.
This background information will be also mentioned in commit log, right? > > The patch has been tested on Power 10 LE with no regressions. > > Please let me know if the patch is acceptable for mainline. Thanks. > > Carl > > ----------------------------------------------------------------------------------------------------------------- > rs6000, Remove __builtin_vec_set_v1ti, __builtin_vec_set_v2df, > __builtin_vec_set_v2di > > Remove the built-ins, use the default gimple generation instead. OK for trunk with better commit log like the above paragraph, thanks! // Assuming testing on BE goes well too. :) BR, Kewen > > gcc/ChangeLog: > * config/rs6000/rs6000-builtins.def (__builtin_vec_set_v1ti, > __builtin_vec_set_v2df, __builtin_vec_set_v2di): Remove built-in > definitions. > * config/rs6000/rs6000-c.cc (resolve_vec_insert): Remove the > handling for constant vec_insert position with > VECTOR_UNIT_VSX_P V1TImode, V2DFmode and V2DImode modes. > --- > gcc/config/rs6000/rs6000-builtins.def | 13 --------- > gcc/config/rs6000/rs6000-c.cc | 40 --------------------------- > 2 files changed, 53 deletions(-) > > diff --git a/gcc/config/rs6000/rs6000-builtins.def > b/gcc/config/rs6000/rs6000-builtins.def > index 47830b7dcb0..75c33aa9ffc 100644 > --- a/gcc/config/rs6000/rs6000-builtins.def > +++ b/gcc/config/rs6000/rs6000-builtins.def > @@ -1263,19 +1263,6 @@ > const signed long long __builtin_vec_ext_v2di (vsll, signed int); > VEC_EXT_V2DI nothing {extract} > > -;; VEC_SET_V1TI, VEC_SET_V2DF and VEC_SET_V2DI are used in > -;; resolve_vec_insert(), rs6000-c.cc > -;; TODO: Remove VEC_SET_V1TI, VEC_SET_V2DF and VEC_SET_V2DI once the uses > -;; in resolve_vec_insert are replaced by the equivalent gimple statements. > - const vsq __builtin_vec_set_v1ti (vsq, signed __int128, const int<0,0>); > - VEC_SET_V1TI nothing {set} > - > - const vd __builtin_vec_set_v2df (vd, double, const int<1>); > - VEC_SET_V2DF nothing {set} > - > - const vsll __builtin_vec_set_v2di (vsll, signed long long, const int<1>); > - VEC_SET_V2DI nothing {set} > - > const vsc __builtin_vsx_cmpge_16qi (vsc, vsc); > CMPGE_16QI vector_nltv16qi {} > > diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc > index 68519e1397f..04882c396bf 100644 > --- a/gcc/config/rs6000/rs6000-c.cc > +++ b/gcc/config/rs6000/rs6000-c.cc > @@ -1524,46 +1524,6 @@ resolve_vec_insert (resolution *res, vec<tree, va_gc> > *arglist, > return error_mark_node; > } > > - /* If we can use the VSX xxpermdi instruction, use that for insert. */ > - machine_mode mode = TYPE_MODE (arg1_type); > - > - if ((mode == V2DFmode || mode == V2DImode) > - && VECTOR_UNIT_VSX_P (mode) > - && TREE_CODE (arg2) == INTEGER_CST) > - { > - wide_int selector = wi::to_wide (arg2); > - selector = wi::umod_trunc (selector, 2); > - arg2 = wide_int_to_tree (TREE_TYPE (arg2), selector); > - > - tree call = NULL_TREE; > - if (mode == V2DFmode) > - call = rs6000_builtin_decls[RS6000_BIF_VEC_SET_V2DF]; > - else if (mode == V2DImode) > - call = rs6000_builtin_decls[RS6000_BIF_VEC_SET_V2DI]; > - > - /* Note, __builtin_vec_insert_<xxx> has vector and scalar types > - reversed. */ > - if (call) > - { > - *res = resolved; > - return build_call_expr (call, 3, arg1, arg0, arg2); > - } > - } > - > - else if (mode == V1TImode > - && VECTOR_UNIT_VSX_P (mode) > - && TREE_CODE (arg2) == INTEGER_CST) > - { > - tree call = rs6000_builtin_decls[RS6000_BIF_VEC_SET_V1TI]; > - wide_int selector = wi::zero(32); > - arg2 = wide_int_to_tree (TREE_TYPE (arg2), selector); > - > - /* Note, __builtin_vec_insert_<xxx> has vector and scalar types > - reversed. */ > - *res = resolved; > - return build_call_expr (call, 3, arg1, arg0, arg2); > - } > - > /* Build *(((arg1_inner_type*) & (vector type){arg1}) + arg2) = arg0 with > VIEW_CONVERT_EXPR. i.e.: > D.3192 = v1;