On 6/10/2022 3:14 AM, Richard Sandiford via Gcc-patches wrote:
Several existing internal functions map directly to an instruction
defined in target-insns.def.  This patch makes it easier to define
more such functions in future.

This should help to reduce cut-&-paste, but more importantly, it allows
the difference between optab functions and target-insns.def functions
to be abstracted away; both are now treated as “directly-mapped”.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

Richard


gcc/
        * internal-fn.def (DEF_INTERNAL_INSN_FN): New macro.
        (GOMP_SIMT_ENTER_ALLOC, GOMP_SIMT_EXIT, GOMP_SIMT_LANE)
        (GOMP_SIMT_LAST_LANE, GOMP_SIMT_ORDERED_PRED, GOMP_SIMT_VOTE_ANY)
        (GOMP_SIMT_XCHG_BFLY, GOMP_SIMT_XCHG_IDX): Use it.
        * internal-fn.h (direct_internal_fn_info::directly_mapped): New
        member variable.
        (direct_internal_fn_info::vectorizable): Reduce to 1 bit.
        (direct_internal_fn_p): Also return true for internal functions
        that map directly to instructions defined target-insns.def.
        (direct_internal_fn): Adjust comment accordingly.
        * internal-fn.c (direct_insn, optab1, optab2, vectorizable_optab1)
        (vectorizable_optab2): New local macros.
        (not_direct): Initialize directly_mapped.
        (mask_load_direct, load_lanes_direct, mask_load_lanes_direct)
        (gather_load_direct, len_load_direct, mask_store_direct)
        (store_lanes_direct, mask_store_lanes_direct, vec_cond_mask_direct)
        (vec_cond_direct, scatter_store_direct, len_store_direct)
        (vec_set_direct, unary_direct, binary_direct, ternary_direct)
        (cond_unary_direct, cond_binary_direct, cond_ternary_direct)
        (while_direct, fold_extract_direct, fold_left_direct)
        (mask_fold_left_direct, check_ptrs_direct): Use the macros above.
        (expand_GOMP_SIMT_ENTER_ALLOC, expand_GOMP_SIMT_EXIT): Delete
        (expand_GOMP_SIMT_LANE, expand_GOMP_SIMT_LAST_LANE): Likewise;
        (expand_GOMP_SIMT_ORDERED_PRED, expand_GOMP_SIMT_VOTE_ANY): Likewise.
        (expand_GOMP_SIMT_XCHG_BFLY, expand_GOMP_SIMT_XCHG_IDX): Likewise.
        (direct_internal_fn_types): Handle functions that map to instructions
        defined in target-insns.def.
        (direct_internal_fn_types): Likewise.
        (direct_internal_fn_supported_p): Likewise.
        (internal_fn_expanders): Likewise.
OK.
jeff

Reply via email to