On Mon, 16 Mar 2020 at 18:41, Kyrylo Tkachov <kyrylo.tkac...@arm.com> wrote: > > Hi Srinath, > > I've pushed the first three of the patches for you to master: > [ARM][GCC][3/x]: MVE ACLE intrinsics framework patch. > [ARM][GCC][2/x]: MVE ACLE intrinsics framework patch. > [ARM][GCC][1/x]: MVE ACLE intrinsics framework patch. > > For this first one I adjusted the add_options directives for mve to actually > add armv8.1-m.main+mve or armv8.1-m.main+mve.fp to the march line so that the > tests don't appear as UNSUPPORTED when running the testsuite without any > explicit options specified. > Please keep an eye out for any fallout in the coming days (though I've smoked > tested the patches myself before committing) >
Hi, I've noticed regressions on arm-none-linux-gnueabihf --with-mode arm --with-cpu cortex-a9 --with-fpu neon-fp16 (--with-mode arm is important, or force -marm when running the tests) FAIL: gcc.target/arm/neon-cond-1.c execution test FAIL: gfortran.dg/array_constructor_7.f90 -O3 -g execution test FAIL: gfortran.dg/complex_intrinsic_5.f90 -O0 execution test FAIL: gfortran.dg/complex_intrinsic_5.f90 -O1 execution test FAIL: gfortran.dg/complex_intrinsic_5.f90 -O2 execution test FAIL: gfortran.dg/complex_intrinsic_5.f90 -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test FAIL: gfortran.dg/complex_intrinsic_5.f90 -O3 -g execution test FAIL: gfortran.dg/complex_intrinsic_5.f90 -Os execution test Christophe > Thanks, > Kyrill > > -----Original Message----- > From: Gcc-patches <gcc-patches-boun...@gcc.gnu.org> On Behalf Of Srinath > Parvathaneni > Sent: 16 March 2020 10:53 > To: Kyrill Tkachov <kyrylo.tkac...@foss.arm.com>; gcc-patches@gcc.gnu.org > Subject: Re: [PATCH v3][ARM][GCC][1/x]: MVE ACLE intrinsics framework patch. > > 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.