Hi Kyrill,

> This is ok but please bootstrap it on arm-none-linux-gnueabihf as well.

I have bootstrapped this patch on arm-none-linux-gnueabihf and found no issues.
There is problem with git commit rights, could you commit this patch on my 
behalf.

Regards
SRI
________________________________
From: Kyrill Tkachov <kyrylo.tkac...@foss.arm.com>
Sent: 12 March 2020 11:15
To: Srinath Parvathaneni <srinath.parvathan...@arm.com>; 
gcc-patches@gcc.gnu.org <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH v3][ARM][GCC][1/x]: MVE ACLE intrinsics framework patch.

Hi Srinath,

On 3/10/20 6:19 PM, Srinath Parvathaneni wrote:
> Hello Kyrill,
>
> This patch addresses all the comments in patch version v2.
> (version v2)
> https://gcc.gnu.org/pipermail/gcc-patches/2020-February/540415.html
>
> ####
>
> Hello,
>
> This patch creates the required framework for MVE ACLE intrinsics.
>
> The following changes are done in this patch to support MVE ACLE
> intrinsics.
>
> Header file arm_mve.h is added to source code, which contains the
> definitions of MVE ACLE intrinsics
> and different data types used in MVE. Machine description file mve.md
> is also added which contains the
> RTL patterns defined for MVE.
>
> A new reigster "p0" is added which is used in by MVE predicated
> patterns. A new register class "VPR_REG"
> is added and its contents are defined in REG_CLASS_CONTENTS.
>
> The vec-common.md file is modified to support the standard move
> patterns. The prefix of neon functions
> which are also used by MVE is changed from "neon_" to "simd_".
> eg: neon_immediate_valid_for_move changed to
> simd_immediate_valid_for_move.
>
> In the patch standard patterns mve_move, mve_store and move_load for
> MVE are added and neon.md and vfp.md
> files are modified to support this common patterns.
>
> Please refer to Arm reference manual [1] for more details.
>
> [1] https://developer.arm.com/docs/ddi0553/latest
>
> Regression tested on target arm-none-eabi and armeb-none-eabi and
> found no regressions.
>
> Ok for trunk?


This is ok but please bootstrap it on arm-none-linux-gnueabihf as well.

Thanks,

Kyrill


>
> Thanks,
> Srinath
>
> gcc/ChangeLog:
>
> 2020-03-06  Andre Vieira <andre.simoesdiasvie...@arm.com>
>             Mihail Ionescu  <mihail.ione...@arm.com>
>             Srinath Parvathaneni <srinath.parvathan...@arm.com>
>
>         * config.gcc (arm_mve.h): Include mve intrinsics header file.
>         * config/arm/aout.h (p0): Add new register name for MVE predicated
>         cases.
>         * config/arm-builtins.c (ARM_BUILTIN_SIMD_LANE_CHECK): Define
> macro
>         common to Neon and MVE.
>         (ARM_BUILTIN_NEON_LANE_CHECK): Renamed to
> ARM_BUILTIN_SIMD_LANE_CHECK.
>         (arm_init_simd_builtin_types): Disable poly types for MVE.
>         (arm_init_neon_builtins): Move a check to arm_init_builtins
> function.
>         (arm_init_builtins): Use ARM_BUILTIN_SIMD_LANE_CHECK instead of
>         ARM_BUILTIN_NEON_LANE_CHECK.
>         (mve_dereference_pointer): Add function.
>         (arm_expand_builtin_args): Call to mve_dereference_pointer
> when MVE is
>         enabled.
>         (arm_expand_neon_builtin): Moved to arm_expand_builtin function.
>         (arm_expand_builtin): Moved from arm_expand_neon_builtin function.
>         * config/arm/arm-c.c (__ARM_FEATURE_MVE): Define macro for MVE
> and MVE
>         with floating point enabled.
>         * config/arm/arm-protos.h (neon_immediate_valid_for_move):
> Renamed to
>         simd_immediate_valid_for_move.
>         (simd_immediate_valid_for_move): Renamed from
>         neon_immediate_valid_for_move function.
>         * config/arm/arm.c (arm_options_perform_arch_sanity_checks):
> Generate
>         error if vfpv2 feature bit is disabled and mve feature bit is also
>         disabled for HARD_FLOAT_ABI.
>         (use_return_insn): Check to not push VFP regs for MVE.
>         (aapcs_vfp_allocate): Add MVE check to have same Procedure
> Call Standard
>         as Neon.
>         (aapcs_vfp_allocate_return_reg): Likewise.
>         (thumb2_legitimate_address_p): Check to return 0 on valid Thumb-2
>         address operand for MVE.
>         (arm_rtx_costs_internal): MVE check to determine cost of rtx.
>         (neon_valid_immediate): Rename to simd_valid_immediate.
>         (simd_valid_immediate): Rename from neon_valid_immediate.
>         (simd_valid_immediate): MVE check on size of vector is 128 bits.
>         (neon_immediate_valid_for_move): Rename to
>         simd_immediate_valid_for_move.
>         (simd_immediate_valid_for_move): Rename from
>         neon_immediate_valid_for_move.
>         (neon_immediate_valid_for_logic): Modify call to
> neon_valid_immediate
>         function.
>         (neon_make_constant): Modify call to neon_valid_immediate
> function.
>         (neon_vector_mem_operand): Return VFP register for POST_INC or
> PRE_DEC
>         for MVE.
>         (output_move_neon): Add MVE check to generate vldm/vstm
> instrcutions.
>         (arm_compute_frame_layout): Calculate space for saved VFP
> registers for
>         MVE.
>         (arm_save_coproc_regs): Save coproc registers for MVE.
>         (arm_print_operand): Add case 'E' to print memory operands for
> MVE.
>         (arm_print_operand_address): Check to print register number
> for MVE.
>         (arm_hard_regno_mode_ok): Check for arm hard regno mode ok for
> MVE.
>         (arm_modes_tieable_p): Check to allow structure mode for MVE.
>         (arm_regno_class): Add VPR_REGNUM check.
>         (arm_expand_epilogue_apcs_frame): MVE check to calculate
> epilogue code
>         for APCS frame.
>         (arm_expand_epilogue): MVE check for enabling pop instructions in
>         epilogue.
>         (arm_print_asm_arch_directives): Modify function to disable
> print of
>         .arch_extension "mve" and "fp" for cases where MVE is enabled with
>         "SOFT FLOAT ABI".
>         (arm_vector_mode_supported_p): Check for modes available in
> MVE interger
>         and MVE floating point.
>         (arm_array_mode_supported_p): Add TARGET_HAVE_MVE check for
> array mode
>         pointer support.
>         (arm_conditional_register_usage): Enable usage of conditional
> regsiter
>         for MVE.
>         (fixed_regs[VPR_REGNUM]): Enable VPR_REG for MVE.
>         (arm_declare_function_name): Modify function to disable print of
>         .arch_extension "mve" and "fp" for cases where MVE is enabled with
>         "SOFT FLOAT ABI".
>         * config/arm/arm.h (TARGET_HAVE_MVE): Disable for soft float
> abi and
>         when target general registers are required.
>         (TARGET_HAVE_MVE_FLOAT): Likewise.
>         (FIXED_REGISTERS): Add bit for VFP_REG class which is enabled
> in arm.c
>         for MVE.
>         (CALL_USED_REGISTERS): Set bit for VFP_REG class in
> CALL_USED_REGISTERS
>         which indicate this is not available for across function calls.
>         (FIRST_PSEUDO_REGISTER): Modify.
>         (VALID_MVE_MODE): Define valid MVE mode.
>         (VALID_MVE_SI_MODE): Define valid MVE SI mode.
>         (VALID_MVE_SF_MODE): Define valid MVE SF mode.
>         (VALID_MVE_STRUCT_MODE): Define valid MVE struct mode.
>         (VPR_REGNUM): Add Vector Predication Register in
> arm_regs_in_sequence
>         for MVE.
>         (IS_VPR_REGNUM): Macro to check for VPR_REG register.
>         (REG_ALLOC_ORDER): Add VPR_REGNUM entry.
>         (enum reg_class): Add VPR_REG entry.
>         (REG_CLASS_NAMES): Add VPR_REG entry.
>         * config/arm/arm.md (VPR_REGNUM): Define.
>         (conds): Check is_mve_type attrbiute to differentiate
> "conditional" and
>         "unconditional" instructions.
>         (arm_movsf_soft_insn): Modify RTL to not allow for MVE.
>         (movdf_soft_insn): Modify RTL to not allow for MVE.
>         (vfp_pop_multiple_with_writeback): Enable for MVE.
>         (include "mve.md"): Include mve.md file.
>         * config/arm/arm_mve.h: Add MVE intrinsics head file.
>         * config/arm/constraints.md (Up): Constraint to enable "p0"
> register in MVE
>         for vector predicated operands.
>         * config/arm/iterators.md (VNIM1): Define.
>         (VNINOTM1): Define.
>         (VHFBF_split): Define
>         * config/arm/mve.md: New file.
>         (mve_mov<mode>): Define RTL for move, store and load in MVE.
>         (mve_mov<mode>): Define move RTL pattern with vec_duplicate
> operator for
>         second operand.
>         * config/arm/neon.md (neon_immediate_valid_for_move): Rename with
>         simd_immediate_valid_for_move.
>         (neon_mov<mode>): Split pattern and move expand pattern
> "movv8hf" which
>         is common to MVE and  NEON to vec-common.md file.
>         (vec_init<mode><V_elem_l>): Add TARGET_HAVE_MVE check.
>         * config/arm/predicates.md (vpr_register_operand): Define.
>         * config/arm/t-arm: Add mve.md file.
>         * config/arm/types.md (mve_move): Add MVE instructions mve_move to
>         attribute "type".
>         (mve_store): Add MVE instructions mve_store to attribute "type".
>         (mve_load): Add MVE instructions mve_load to attribute "type".
>         (is_mve_type): Define attribute.
>         * config/arm/vec-common.md (mov<mode>): Modify RTL expand to
> support
>         standard move patterns in MVE along with NEON and IWMMXT with mode
>         iterator VNIM1.
>         (mov<mode>): Modify RTL expand to support standard move
> patterns in NEON
>         and IWMMXT with mode iterator V8HF.
>         (movv8hf): Define RTL expand to support standard "movv8hf"
> pattern in
>         NEON and MVE.
>         * config/arm/vfp.md (neon_immediate_valid_for_move): Rename to
>         simd_immediate_valid_for_move.
>
> gcc/testsuite/ChangeLog:
>
> 2020-03-06  Andre Vieira <andre.simoesdiasvie...@arm.com>
>             Mihail Ionescu  <mihail.ione...@arm.com>
>             Srinath Parvathaneni <srinath.parvathan...@arm.com>
>
>         * gcc.target/arm/mve/intrinsics/mve_vector_float.c: New test.
>         * gcc.target/arm/mve/intrinsics/mve_vector_float1.c: Likewise.
>         * gcc.target/arm/mve/intrinsics/mve_vector_float2.c: Likewise.
>         * gcc.target/arm/mve/intrinsics/mve_vector_int.c: Likewise.
>         * gcc.target/arm/mve/intrinsics/mve_vector_int1.c: Likewise.
>         * gcc.target/arm/mve/intrinsics/mve_vector_int2.c: Likewise.
>         * gcc.target/arm/mve/intrinsics/mve_vector_uint.c: Likewise.
>         * gcc.target/arm/mve/intrinsics/mve_vector_uint1.c: Likewise.
>         * gcc.target/arm/mve/intrinsics/mve_vector_uint2.c: Likewise.
>         * gcc.target/arm/mve/mve.exp: New file.
>         * lib/target-supports.exp:
> (check_effective_target_arm_v8_1m_mve_fp_ok_nocache): Proc to check
>         armv8.1-m.main+mve.fp and returning corresponding options.
>         (check_effective_target_arm_v8_1m_mve_fp_ok): Proc to call
>         check_effective_target_arm_v8_1m_mve_fp_ok_nocache to check
> suppoer of
>         MVE with floating point on the current target.
>         (add_options_for_arm_v8_1m_mve_fp): Proc to call
>         check_effective_target_arm_v8_1m_mve_fp_ok to return corresponding
>         compiler options for MVE with floating point.
>         (check_effective_target_arm_v8_1m_mve_ok_nocache): Modify to
> test and
>         return hard float-abi on success.

Reply via email to