aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.cc
diff options
context:
space:
mode:
authorChristophe Lyon <christophe.lyon@linaro.org>2024-11-13 15:33:18 +0000
committerChristophe Lyon <christophe.lyon@linaro.org>2024-12-13 14:25:35 +0000
commit4f4e13dd235bba9c706948a3ecb3e530dd68aad1 (patch)
tree2ffe0639f8bfb27b08849a342cbf873b01d55cbc /gcc/fortran/trans-expr.cc
parent87235d8ae8cc40468a757ec84e84461e96b7879d (diff)
downloadgcc-4f4e13dd235bba9c706948a3ecb3e530dd68aad1.zip
gcc-4f4e13dd235bba9c706948a3ecb3e530dd68aad1.tar.gz
gcc-4f4e13dd235bba9c706948a3ecb3e530dd68aad1.tar.bz2
arm: [MVE intrinsics] rework vst2q vst4q vld2q vld4q
Implement vst2q, vst4q, vld2q and vld4q using the new MVE builtins framework. Since MVE uses different tuple modes than Neon, we need to use VALID_MVE_STRUCT_MODE because VALID_NEON_STRUCT_MODE is no longer a super-set of it, for instance in output_move_neon and arm_print_operand_address. In arm_hard_regno_mode_ok, the change is similar but a bit more intrusive. Expand the VSTRUCT iterator, so that mov<mode> and neon_mov<mode> patterns from neon.md still work for MVE. Besides the small updates to the patterns in mve.md, we have to update vec_load_lanes and vec_store_lanes in vec-common.md so that the vectorizer can handle the new modes. These patterns are now different from Neon's, so maybe we should move them back to neon.md and mve.md The patch adds arm_array_mode, which is used by build_array_type_nelts and makes it possible to support the new assert in register_builtin_tuple_types. gcc/ChangeLog: * config/arm/arm-mve-builtins-base.cc (class vst24_impl): New. (class vld24_impl): New. (vld2q, vld4q, vst2q, vst4q): New. * config/arm/arm-mve-builtins-base.def (vld2q, vld4q, vst2q) (vst4q): New. * config/arm/arm-mve-builtins-base.h (vld2q, vld4q, vst2q, vst4q): New. * config/arm/arm-mve-builtins.cc (register_builtin_tuple_types): Add more asserts. * config/arm/arm.cc (TARGET_ARRAY_MODE): New. (output_move_neon): Handle MVE struct modes. (arm_print_operand_address): Likewise. (arm_hard_regno_mode_ok): Likewise. (arm_array_mode): New. * config/arm/arm.h (VALID_MVE_STRUCT_MODE): Likewise. * config/arm/arm_mve.h (vst4q): Delete. (vst2q): Delete. (vld2q): Delete. (vld4q): Delete. (vst4q_s8): Delete. (vst4q_s16): Delete. (vst4q_s32): Delete. (vst4q_u8): Delete. (vst4q_u16): Delete. (vst4q_u32): Delete. (vst4q_f16): Delete. (vst4q_f32): Delete. (vst2q_s8): Delete. (vst2q_u8): Delete. (vld2q_s8): Delete. (vld2q_u8): Delete. (vld4q_s8): Delete. (vld4q_u8): Delete. (vst2q_s16): Delete. (vst2q_u16): Delete. (vld2q_s16): Delete. (vld2q_u16): Delete. (vld4q_s16): Delete. (vld4q_u16): Delete. (vst2q_s32): Delete. (vst2q_u32): Delete. (vld2q_s32): Delete. (vld2q_u32): Delete. (vld4q_s32): Delete. (vld4q_u32): Delete. (vld4q_f16): Delete. (vld2q_f16): Delete. (vst2q_f16): Delete. (vld4q_f32): Delete. (vld2q_f32): Delete. (vst2q_f32): Delete. (__arm_vst4q_s8): Delete. (__arm_vst4q_s16): Delete. (__arm_vst4q_s32): Delete. (__arm_vst4q_u8): Delete. (__arm_vst4q_u16): Delete. (__arm_vst4q_u32): Delete. (__arm_vst2q_s8): Delete. (__arm_vst2q_u8): Delete. (__arm_vld2q_s8): Delete. (__arm_vld2q_u8): Delete. (__arm_vld4q_s8): Delete. (__arm_vld4q_u8): Delete. (__arm_vst2q_s16): Delete. (__arm_vst2q_u16): Delete. (__arm_vld2q_s16): Delete. (__arm_vld2q_u16): Delete. (__arm_vld4q_s16): Delete. (__arm_vld4q_u16): Delete. (__arm_vst2q_s32): Delete. (__arm_vst2q_u32): Delete. (__arm_vld2q_s32): Delete. (__arm_vld2q_u32): Delete. (__arm_vld4q_s32): Delete. (__arm_vld4q_u32): Delete. (__arm_vst4q_f16): Delete. (__arm_vst4q_f32): Delete. (__arm_vld4q_f16): Delete. (__arm_vld2q_f16): Delete. (__arm_vst2q_f16): Delete. (__arm_vld4q_f32): Delete. (__arm_vld2q_f32): Delete. (__arm_vst2q_f32): Delete. (__arm_vst4q): Delete. (__arm_vst2q): Delete. (__arm_vld2q): Delete. (__arm_vld4q): Delete. * config/arm/arm_mve_builtins.def (vst4q, vst2q, vld4q, vld2q): Delete. * config/arm/iterators.md (VSTRUCT): Add V2x16QI, V2x8HI, V2x4SI, V2x8HF, V2x4SF, V4x16QI, V4x8HI, V4x4SI, V4x8HF, V4x4SF. (MVE_VLD2_VST2, MVE_vld2_vst2, MVE_VLD4_VST4, MVE_vld4_vst4): New. * config/arm/mve.md (mve_vst4q<mode>): Update into ... (@mve_vst4q<mode>): ... this. (mve_vst2q<mode>): Update into ... (@mve_vst2q<mode>): ... this. (mve_vld2q<mode>): Update into ... (@mve_vld2q<mode>): ... this. (mve_vld4q<mode>): Update into ... (@mve_vld4q<mode>): ... this. * config/arm/vec-common.md (vec_load_lanesoi<mode>) Remove MVE support. (vec_load_lanesxi<mode>): Likewise. (vec_store_lanesoi<mode>): Likewise. (vec_store_lanesxi<mode>): Likewise. (vec_load_lanes<MVE_vld2_vst2><mode>): New. (vec_store_lanes<MVE_vld2_vst2><mode>): New. (vec_load_lanes<MVE_vld4_vst4><mode>): New. (vec_store_lanes<MVE_vld4_vst4><mode>): New.
Diffstat (limited to 'gcc/fortran/trans-expr.cc')
0 files changed, 0 insertions, 0 deletions