https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101325

--- Comment #13 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Christophe Lyon <cl...@gcc.gnu.org>:

https://gcc.gnu.org/g:884f77b4222289510e1df9db2889b60c5df6fcda

commit r12-7338-g884f77b4222289510e1df9db2889b60c5df6fcda
Author: Christophe Lyon <christophe.l...@arm.com>
Date:   Wed Oct 13 09:16:22 2021 +0000

    arm: Implement MVE predicates as vectors of booleans

    This patch implements support for vectors of booleans to support MVE
    predicates, instead of HImode.  Since the ABI mandates pred16_t (aka
    uint16_t) to represent predicates in intrinsics prototypes, we
    introduce a new "predicate" type qualifier so that we can map relevant
    builtins HImode arguments and return value to the appropriate vector
    of booleans (VxBI).

    We have to update test_vector_ops_duplicate, because it iterates using
    an offset in bytes, where we would need to iterate in bits: we stop
    iterating when we reach the end of the vector of booleans.

    In addition, we have to fix the underlying definition of vectors of
    booleans because ARM/MVE needs a different representation than
    AArch64/SVE. With ARM/MVE the 'true' bit is duplicated over the
    element size, so that a true element of V4BI is represented by
    '0b1111'.  This patch updates the aarch64 definition of VNx*BI as
    needed.

    Most of the work of this patch series was carried out while I was
    working at STMicroelectronics as a Linaro assignee.

    2022-02-22  Christophe Lyon  <christophe.l...@arm.com>
                Richard Sandiford  <richard.sandif...@arm.com>

            gcc/
            PR target/100757
            PR target/101325
            * config/aarch64/aarch64-modes.def (VNx16BI, VNx8BI, VNx4BI,
            VNx2BI): Update definition.
            * config/arm/arm-builtins.cc (arm_init_simd_builtin_types): Add new
            simd types.
            (arm_init_builtin): Map predicate vectors arguments to HImode.
            (arm_expand_builtin_args): Move HImode predicate arguments to VxBI
            rtx. Move return value to HImode rtx.
            * config/arm/arm-builtins.h (arm_type_qualifiers): Add
qualifier_predicate.
            * config/arm/arm-modes.def (B2I, B4I, V16BI, V8BI, V4BI): New
modes.
            * config/arm/arm-simd-builtin-types.def (Pred1x16_t,
            Pred2x8_t,Pred4x4_t): New.
            * emit-rtl.cc (init_emit_once): Handle all boolean modes.
            * genmodes.cc (mode_data): Add boolean field.
            (blank_mode): Initialize it.
            (make_complex_modes): Fix handling of boolean modes.
            (make_vector_modes): Likewise.
            (VECTOR_BOOL_MODE): Use new COMPONENT parameter.
            (make_vector_bool_mode): Likewise.
            (BOOL_MODE): New.
            (make_bool_mode): New.
            (emit_insn_modes_h): Fix generation of boolean modes.
            (emit_class_narrowest_mode): Likewise.
            * machmode.def: (VECTOR_BOOL_MODE): Document new COMPONENT
            parameter.  Use new BOOL_MODE instead of FRACTIONAL_INT_MODE to
            define BImode.
            * rtx-vector-builder.cc (rtx_vector_builder::find_cached_value):
            Fix handling of constm1_rtx for VECTOR_BOOL.
            * simplify-rtx.cc (native_encode_rtx): Fix support for VECTOR_BOOL.
            (native_decode_vector_rtx): Likewise.
            (test_vector_ops_duplicate): Skip vec_merge test
            with vectors of booleans.
            * varasm.cc (output_constant_pool_2): Likewise.

Reply via email to