aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-if-conv.h
diff options
context:
space:
mode:
authorChristophe Lyon <christophe.lyon@linaro.org>2024-10-29 10:31:53 +0000
committerChristophe Lyon <christophe.lyon@linaro.org>2024-12-13 14:23:30 +0000
commit5cfb8ff332bebfd06db62bdc9933e513a2511567 (patch)
treefb5be4b6c9bf11e4674e318a19c3f383a1a91eea /gcc/tree-if-conv.h
parentbccbb696e51def52cd8dec7269341b22d79b70a7 (diff)
downloadgcc-5cfb8ff332bebfd06db62bdc9933e513a2511567.zip
gcc-5cfb8ff332bebfd06db62bdc9933e513a2511567.tar.gz
gcc-5cfb8ff332bebfd06db62bdc9933e513a2511567.tar.bz2
arm: [MVE intrinsics] rework vstr?q_scatter_offset
This patch implements vstr?q_scatter_offset using the new MVE builtins framework. It uses a similar approach to a previous patch which grouped truncating and non-truncating stores in two sets of patterns, rather than having groups of patterns depending on the destination size. We need to add the 'integer_64' types of suffixes in order to support vstrdq_scatter_offset. The patch introduces the MVE_VLD_ST_scatter iterator, similar to MVE_VLD_ST but which also includes V2DI (again, for vstrdq_scatter_offset). The new MVE_scatter_offset mode attribute is used to map the destination type to the offset type (both are usually equal, except when the destination is floating-point). We end up with four sets of patterns: - vector scatter stores with offset (non-truncating) - predicated vector scatter stores with offset (non-truncating) - truncating vector scatter stores with offset - predicated truncating vector scatter stores with offset gcc/ChangeLog: * config/arm/arm-mve-builtins-base.cc (class vstrq_scatter_impl): New. (vstrbq_scatter, vstrhq_scatter, vstrwq_scatter, vstrdq_scatter): New. * config/arm/arm-mve-builtins-base.def (vstrbq_scatter) (vstrhq_scatter, vstrwq_scatter, vstrdq_scatter): New. * config/arm/arm-mve-builtins-base.h (vstrbq_scatter) (vstrhq_scatter, vstrwq_scatter, vstrdq_scatter): New. * config/arm/arm-mve-builtins.cc (integer_64): New. * config/arm/arm_mve.h (vstrbq_scatter_offset): Delete. (vstrbq_scatter_offset_p): Delete. (vstrhq_scatter_offset): Delete. (vstrhq_scatter_offset_p): Delete. (vstrdq_scatter_offset_p): Delete. (vstrdq_scatter_offset): Delete. (vstrwq_scatter_offset_p): Delete. (vstrwq_scatter_offset): Delete. (vstrbq_scatter_offset_s8): Delete. (vstrbq_scatter_offset_u8): Delete. (vstrbq_scatter_offset_u16): Delete. (vstrbq_scatter_offset_s16): Delete. (vstrbq_scatter_offset_u32): Delete. (vstrbq_scatter_offset_s32): Delete. (vstrbq_scatter_offset_p_s8): Delete. (vstrbq_scatter_offset_p_s32): Delete. (vstrbq_scatter_offset_p_s16): Delete. (vstrbq_scatter_offset_p_u8): Delete. (vstrbq_scatter_offset_p_u32): Delete. (vstrbq_scatter_offset_p_u16): Delete. (vstrhq_scatter_offset_s32): Delete. (vstrhq_scatter_offset_s16): Delete. (vstrhq_scatter_offset_u32): Delete. (vstrhq_scatter_offset_u16): Delete. (vstrhq_scatter_offset_p_s32): Delete. (vstrhq_scatter_offset_p_s16): Delete. (vstrhq_scatter_offset_p_u32): Delete. (vstrhq_scatter_offset_p_u16): Delete. (vstrdq_scatter_offset_p_s64): Delete. (vstrdq_scatter_offset_p_u64): Delete. (vstrdq_scatter_offset_s64): Delete. (vstrdq_scatter_offset_u64): Delete. (vstrhq_scatter_offset_f16): Delete. (vstrhq_scatter_offset_p_f16): Delete. (vstrwq_scatter_offset_f32): Delete. (vstrwq_scatter_offset_p_f32): Delete. (vstrwq_scatter_offset_p_s32): Delete. (vstrwq_scatter_offset_p_u32): Delete. (vstrwq_scatter_offset_s32): Delete. (vstrwq_scatter_offset_u32): Delete. (__arm_vstrbq_scatter_offset_s8): Delete. (__arm_vstrbq_scatter_offset_s32): Delete. (__arm_vstrbq_scatter_offset_s16): Delete. (__arm_vstrbq_scatter_offset_u8): Delete. (__arm_vstrbq_scatter_offset_u32): Delete. (__arm_vstrbq_scatter_offset_u16): Delete. (__arm_vstrbq_scatter_offset_p_s8): Delete. (__arm_vstrbq_scatter_offset_p_s32): Delete. (__arm_vstrbq_scatter_offset_p_s16): Delete. (__arm_vstrbq_scatter_offset_p_u8): Delete. (__arm_vstrbq_scatter_offset_p_u32): Delete. (__arm_vstrbq_scatter_offset_p_u16): Delete. (__arm_vstrhq_scatter_offset_s32): Delete. (__arm_vstrhq_scatter_offset_s16): Delete. (__arm_vstrhq_scatter_offset_u32): Delete. (__arm_vstrhq_scatter_offset_u16): Delete. (__arm_vstrhq_scatter_offset_p_s32): Delete. (__arm_vstrhq_scatter_offset_p_s16): Delete. (__arm_vstrhq_scatter_offset_p_u32): Delete. (__arm_vstrhq_scatter_offset_p_u16): Delete. (__arm_vstrdq_scatter_offset_p_s64): Delete. (__arm_vstrdq_scatter_offset_p_u64): Delete. (__arm_vstrdq_scatter_offset_s64): Delete. (__arm_vstrdq_scatter_offset_u64): Delete. (__arm_vstrwq_scatter_offset_p_s32): Delete. (__arm_vstrwq_scatter_offset_p_u32): Delete. (__arm_vstrwq_scatter_offset_s32): Delete. (__arm_vstrwq_scatter_offset_u32): Delete. (__arm_vstrhq_scatter_offset_f16): Delete. (__arm_vstrhq_scatter_offset_p_f16): Delete. (__arm_vstrwq_scatter_offset_f32): Delete. (__arm_vstrwq_scatter_offset_p_f32): Delete. (__arm_vstrbq_scatter_offset): Delete. (__arm_vstrbq_scatter_offset_p): Delete. (__arm_vstrhq_scatter_offset): Delete. (__arm_vstrhq_scatter_offset_p): Delete. (__arm_vstrdq_scatter_offset_p): Delete. (__arm_vstrdq_scatter_offset): Delete. (__arm_vstrwq_scatter_offset_p): Delete. (__arm_vstrwq_scatter_offset): Delete. * config/arm/arm_mve_builtins.def (vstrbq_scatter_offset_s) (vstrbq_scatter_offset_u, vstrbq_scatter_offset_p_s) (vstrbq_scatter_offset_p_u, vstrhq_scatter_offset_p_u) (vstrhq_scatter_offset_u, vstrhq_scatter_offset_p_s) (vstrhq_scatter_offset_s, vstrdq_scatter_offset_s) (vstrhq_scatter_offset_f, vstrwq_scatter_offset_f) (vstrwq_scatter_offset_s, vstrdq_scatter_offset_p_s) (vstrhq_scatter_offset_p_f, vstrwq_scatter_offset_p_f) (vstrwq_scatter_offset_p_s, vstrdq_scatter_offset_u) (vstrwq_scatter_offset_u, vstrdq_scatter_offset_p_u) (vstrwq_scatter_offset_p_u) Delete. * config/arm/iterators.md (MVE_VLD_ST_scatter): New. (MVE_scatter_offset): New. (MVE_elem_ch): Add entry for V2DI. (supf): Remove VSTRBQSO_S, VSTRBQSO_U, VSTRHQSO_S, VSTRHQSO_U, VSTRDQSO_S, VSTRDQSO_U, VSTRWQSO_U, VSTRWQSO_S. (VSTRBSOQ, VSTRHSOQ, VSTRDSOQ, VSTRWSOQ): Delete. * config/arm/mve.md (mve_vstrbq_scatter_offset_<supf><mode>): Delete. (mve_vstrbq_scatter_offset_<supf><mode>_insn): Delete. (mve_vstrbq_scatter_offset_p_<supf><mode>): Delete. (mve_vstrbq_scatter_offset_p_<supf><mode>_insn): Delete. (mve_vstrhq_scatter_offset_p_<supf><mode>): Delete. (mve_vstrhq_scatter_offset_p_<supf><mode>_insn): Delete. (mve_vstrhq_scatter_offset_<supf><mode>): Delete. (mve_vstrhq_scatter_offset_<supf><mode>_insn): Delete. (mve_vstrdq_scatter_offset_p_<supf>v2di): Delete. (mve_vstrdq_scatter_offset_p_<supf>v2di_insn): Delete. (mve_vstrdq_scatter_offset_<supf>v2di): Delete. (mve_vstrdq_scatter_offset_<supf>v2di_insn): Delete. (mve_vstrhq_scatter_offset_fv8hf): Delete. (mve_vstrhq_scatter_offset_fv8hf_insn): Delete. (mve_vstrhq_scatter_offset_p_fv8hf): Delete. (mve_vstrhq_scatter_offset_p_fv8hf_insn): Delete. (mve_vstrwq_scatter_offset_fv4sf): Delete. (mve_vstrwq_scatter_offset_fv4sf_insn): Delete. (mve_vstrwq_scatter_offset_p_fv4sf): Delete. (mve_vstrwq_scatter_offset_p_fv4sf_insn): Delete. (mve_vstrwq_scatter_offset_p_<supf>v4si): Delete. (mve_vstrwq_scatter_offset_p_<supf>v4si_insn): Delete. (mve_vstrwq_scatter_offset_<supf>v4si): Delete. (mve_vstrwq_scatter_offset_<supf>v4si_insn): Delete. (@mve_vstrq_scatter_offset_<mode>): New. (@mve_vstrq_scatter_offset_p_<mode>): New. (@mve_vstrq_truncate_scatter_offset_<mode>): New. (@mve_vstrq_truncate_scatter_offset_p_<mode>): New. * config/arm/unspecs.md (VSTRBQSO_S, VSTRBQSO_U, VSTRHQSO_S) (VSTRDQSO_S, VSTRDQSO_U, VSTRWQSO_S, VSTRWQSO_U, VSTRHQSO_F) (VSTRWQSO_F, VSTRHQSO_U): Delete. (VSTRQSO, VSTRQSO_P, VSTRQSO_TRUNC, VSTRQSO_TRUNC_P): New.
Diffstat (limited to 'gcc/tree-if-conv.h')
0 files changed, 0 insertions, 0 deletions