Ping

On 11/16/2025 2:02 PM, Claudio Bantaloukas wrote:

The majority of sve/sme intrinsics have names which are defined by one type
(like svuint8_t svextq[_u8]) or two types (like svsub_za32[_f32]_vg1x2).
Some intrinsics now have three types (like svtmopa_lane_za32[_s8_u8]).
This change extends the number of type_suffix_indexes from two to three
to cover this case.

gcc/
        * config/aarch64/aarch64-sve-builtins-base.cc: (svmul_impl::fold):
        Replace use of type_suffix_pair with type_suffix_triple.
        * config/aarch64/aarch64-sve-builtins-shapes.cc: (parse_element_type):
        Handle third type suffix.
        (parse_type): Handle c2 in function signature. Add the u signature with
        the ability to pass a tuple with twice as many vectors as the base type.
        Calculate number of vectors against the type with the maximum number of
        bits rather than "the other one".
        (load_contiguous_base::resolve): Add argument to resolve_to call.
        (compare_scalar_def::resolve): Likewise.
        (ternary_mfloat8_def::resolve): Likewise.
        (ternary_mfloat8_lane_def::resolve): Likewise.
        (ternary_mfloat8_opt_n_def::resolve): Likewise.
        * config/aarch64/aarch64-sve-builtins.cc: (TYPES_all_pred,
        TYPES_all_count, TYPES_all_pred_count, TYPES_all_float,
        TYPES_all_signed, TYPES_all_float_and_signed, TYPES_all_unsigned,
        TYPES_all_integer, TYPES_all_arith, TYPES_all_data, TYPES_b, TYPES_c,
        TYPES_b_unsigned, TYPES_b_integer, TYPES_b_data, TYPES_bh_integer,
        TYPES_bs_unsigned, TYPES_bhs_signed, TYPES_bhs_unsigned,
        TYPES_bhs_integer, TYPES_bh_data, TYPES_bhs_data, TYPES_bhs_widen,
        TYPES_h_bfloat, TYPES_h_float, TYPES_h_integer, TYPES_h_data,
        TYPES_hs_signed, TYPES_hs_integer, TYPES_hs_float, TYPES_hs_data,
        TYPES_hd_unsigned, TYPES_hsd_signed, TYPES_hsd_integer, TYPES_hsd_data,
        TYPES_h_float_mf8, TYPES_s_float, TYPES_s_float_mf8,
        TYPES_s_float_hsd_integer, TYPES_s_float_sd_integer, TYPES_s_signed,
        TYPES_s_unsigned, TYPES_s_integer, TYPES_s_data, TYPES_sd_signed,
        TYPES_sd_unsigned, TYPES_sd_integer, TYPES_sd_data,
        TYPES_all_float_and_sd_integer, TYPES_d_float, TYPES_d_unsigned,
        TYPES_d_integer, TYPES_d_data, TYPES_cvt, TYPES_cvt_bfloat,
        TYPES_cvt_h_s_float, TYPES_cvt_f32_f16, TYPES_cvt_long,
        TYPES_cvt_narrow_s, TYPES_cvt_narrow, TYPES_cvt_s_s, TYPES_cvt_mf8,
        TYPES_cvtn_mf8, TYPES_cvtnx_mf8, TYPES_inc_dec_n, TYPES_qcvt_x2,
        TYPES_qcvt_x4, TYPES_qrshr_x2,TYPES_qrshru_x2, TYPES_qrshr_x4,
        TYPES_qrshru_x4, TYPES_reinterpret, TYPES_reinterpret_b,TYPES_while,
        TYPES_while_x, TYPES_while_x_c, TYPES_s_narrow_fsu,TYPES_all_za,
        TYPES_d_za, TYPES_za_bhsd_data,TYPES_za_all_data, TYPES_za_h_mf8,
        TYPES_za_hs_mf8, TYPES_za_h_bfloat, TYPES_za_h_float,
        TYPES_za_s_b_signed, TYPES_za_s_b_unsigned, TYPES_za_s_b_integer,
        TYPES_za_s_h_integer,TYPES_za_s_h_data, TYPES_za_s_unsigned,
        TYPES_za_s_integer, TYPES_za_s_mf8, TYPES_za_s_float, TYPES_za_s_data,
        TYPES_za_d_h_integer, TYPES_za_d_float, TYPES_za_d_integer,
        TYPES_mop_base, TYPES_mop_base_signed, TYPES_mop_base_unsigned,
        TYPES_mop_i16i64, TYPES_mop_i16i64_signed, TYPES_mop_i16i64_unsigned,
        ΤYPES_za): Extend defines to three arguments.
        (DEF_VECTOR_TYPE, DEF_DOUBLE_TYPE): Likewise.
        (DEF_TRIPLE_TYPE): Add new define.
        (DEF_SVE_TYPES_ARRAY): Redefine all types_ arrays into arrays of
        type_suffix_triple.
        (types_none): Likewise.
        (function_instance::hash): Add third type to hash calculation.
        (function_builder::get_name): Add third type to function name.
        (function_builder::add_overloaded_functions): Handle third type.
        (function_resolver::lookup_form): Likewise.
        (function_resolver::resolve_to): Likewise.
        (function_resolver::resolve_unary): Likewise.
        * config/aarch64/aarch64-sve-builtins.h: (type_suffix_triple): replace
        type_suffix_pair.
        (function_group_info::types): Likewise.
        (function_instance::ctor): Likewise.
        (function_instance::type_suffix_ids): Likewise.
        (function_resolver::lookup_form): Add third type argument.
        (function_resolver::resolve_to): Likewise.
        (function_instance::operator==): Add third type to equality calculation.
---
  .../aarch64/aarch64-sve-builtins-base.cc      |   8 +-
  .../aarch64/aarch64-sve-builtins-shapes.cc    |  41 ++-
  gcc/config/aarch64/aarch64-sve-builtins.cc    | 327 +++++++++---------
  gcc/config/aarch64/aarch64-sve-builtins.h     |  19 +-
  4 files changed, 215 insertions(+), 180 deletions(-)


--
Claudio Bantaloukas

Reply via email to