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

--- Comment #14 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:91224cf625dc90304bb515a0cc602beed48fe3da

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

    arm: Implement auto-vectorized MVE comparisons with vectors of boolean
predicates

    We make use of qualifier_predicate to describe MVE builtins
    prototypes, restricting to auto-vectorizable vcmp* and vpsel builtins,
    as they are exercised by the tests added earlier in the series.

    Special handling is needed for mve_vpselq because it has a v2di
    variant, which has no natural VPR.P0 representation: we keep HImode
    for it.

    The vector_compare expansion code is updated to use the right VxBI
    mode instead of HI for the result.

    We extend the existing thumb2_movhi_vfp and thumb2_movhi_fp16 patterns
    to use the new MVE_7_HI iterator which covers HI and the new VxBI
    modes, in conjunction with the new DB constraint for a constant vector
    of booleans.

    This patch also adds tests derived from the one provided in PR
    target/101325: there is a compile-only test because I did not have
    access to anything that could execute MVE code until recently.  I have
    been able to add an executable test since QEMU supports MVE.

    Instead of adding arm_v8_1m_mve_hw, I update arm_mve_hw so that it
    uses add_options_for_arm_v8_1m_mve_fp, like arm_neon_hw does.  This
    ensures arm_mve_hw passes even if the toolchain does not generate MVE
    code by default.

    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/arm/arm-builtins.cc (BINOP_PRED_UNONE_UNONE_QUALIFIERS)
            (BINOP_PRED_NONE_NONE_QUALIFIERS)
            (TERNOP_NONE_NONE_NONE_PRED_QUALIFIERS)
            (TERNOP_UNONE_UNONE_UNONE_PRED_QUALIFIERS): New.
            * config/arm/arm-protos.h (mve_bool_vec_to_const): New.
            * config/arm/arm.cc (arm_hard_regno_mode_ok): Handle new VxBI
            modes.
            (arm_mode_to_pred_mode): New.
            (arm_expand_vector_compare): Use the right VxBI mode instead of
            HI.
            (arm_expand_vcond): Likewise.
            (simd_valid_immediate): Handle MODE_VECTOR_BOOL.
            (mve_bool_vec_to_const): New.
            (neon_make_constant): Call mve_bool_vec_to_const when needed.
            * config/arm/arm_mve_builtins.def (vcmpneq_, vcmphiq_, vcmpcsq_)
            (vcmpltq_, vcmpleq_, vcmpgtq_, vcmpgeq_, vcmpeqq_, vcmpneq_f)
            (vcmpltq_f, vcmpleq_f, vcmpgtq_f, vcmpgeq_f, vcmpeqq_f, vpselq_u)
            (vpselq_s, vpselq_f): Use new predicated qualifiers.
            * config/arm/constraints.md (DB): New.
            * config/arm/iterators.md (MVE_7, MVE_7_HI): New mode iterators.
            (MVE_VPRED, MVE_vpred): New attribute iterators.
            * config/arm/mve.md (@mve_vcmp<mve_cmp_op>q_<mode>)
            (@mve_vcmp<mve_cmp_op>q_f<mode>, @mve_vpselq_<supf><mode>)
            (@mve_vpselq_f<mode>): Use MVE_VPRED instead of HI.
            (@mve_vpselq_<supf>v2di): Define separately.
            (mov<mode>): New expander for VxBI modes.
            * config/arm/vfp.md (thumb2_movhi_vfp, thumb2_movhi_fp16): Use
            MVE_7_HI iterator and add support for DB constraint.

            gcc/testsuite/
            PR target/100757
            PR target/101325
            * gcc.dg/rtl/arm/mve-vxbi.c: New test.
            * gcc.target/arm/simd/pr101325.c: New.
            * gcc.target/arm/simd/pr101325-2.c: New.
            * lib/target-supports.exp (check_effective_target_arm_mve_hw): Use
            add_options_for_arm_v8_1m_mve_fp.

Reply via email to