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;