Changes v1->v2:
- patch 3/5: fixed indentation
- patch 5/5: moved new patterns higher in mve.md, at the point where
the first deleted pattern was. Due to the multiple refactoring, it
is not convenient to move some of the new patterns later in the file
since the new ones combine several old ones, but the new ones also
now split truncating vs non-truncating stores (resp extending vs
non-extending loads) into different patterns while they were in the
same one previously. The patch also updates
gcc.target/arm/pr112337.c.
---
Hi,
This patch series refactors the MVE vst and vld intrinsics to use the builtins
framework.
This is a prerequisite for a later patch which adds gimple folding which in
turn enables some optimisations that were being missed.
I have crosscompiled on an x64 machine and regtested it.
Ok for master?
Thanks,
Alfie Richards
Alfie Richards (5):
arm: [MVE intrinsics] fix vst tests
arm: [MVE intrinsics] Add load_ext intrinsic shape
arm: [MVE intrinsics] Add load_extending and store_truncating function
bases
arm: [MVE intrinsics] Add support for predicated contiguous loads and
stores
arm: [MVE intrinsics] Rework MVE vld/vst intrinsics
gcc/config/arm/arm-mve-builtins-base.cc | 134 ++-
gcc/config/arm/arm-mve-builtins-base.def | 20 +-
gcc/config/arm/arm-mve-builtins-base.h | 6 +
gcc/config/arm/arm-mve-builtins-functions.h | 116 +-
gcc/config/arm/arm-mve-builtins-shapes.cc | 30 +-
gcc/config/arm/arm-mve-builtins-shapes.h | 1 +
gcc/config/arm/arm-mve-builtins.cc | 19 +-
gcc/config/arm/arm-protos.h | 3 +
gcc/config/arm/arm.cc | 15 +
gcc/config/arm/arm_mve.h | 1010 +----------------
gcc/config/arm/arm_mve_builtins.def | 38 -
gcc/config/arm/iterators.md | 37 +-
gcc/config/arm/mve.md | 649 ++++-------
gcc/config/arm/unspecs.md | 29 +-
.../arm/mve/intrinsics/vst1q_p_f16.c | 4 +-
.../arm/mve/intrinsics/vst1q_p_f32.c | 4 +-
.../arm/mve/intrinsics/vst1q_p_s16.c | 4 +-
.../arm/mve/intrinsics/vst1q_p_s32.c | 4 +-
.../arm/mve/intrinsics/vst1q_p_s8.c | 4 +-
.../arm/mve/intrinsics/vst1q_p_u16.c | 4 +-
.../arm/mve/intrinsics/vst1q_p_u32.c | 4 +-
.../arm/mve/intrinsics/vst1q_p_u8.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst2q_f16.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst2q_f32.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst2q_s16.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst2q_s32.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst2q_s8.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst2q_u16.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst2q_u32.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst2q_u8.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst4q_f16.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst4q_f32.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst4q_s16.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst4q_s32.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst4q_s8.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst4q_u16.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst4q_u32.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vst4q_u8.c | 4 +-
.../arm/mve/intrinsics/vstrbq_p_s16.c | 4 +-
.../arm/mve/intrinsics/vstrbq_p_s32.c | 4 +-
.../arm/mve/intrinsics/vstrbq_p_s8.c | 4 +-
.../arm/mve/intrinsics/vstrbq_p_u16.c | 4 +-
.../arm/mve/intrinsics/vstrbq_p_u32.c | 4 +-
.../arm/mve/intrinsics/vstrbq_p_u8.c | 4 +-
.../arm/mve/intrinsics/vstrbq_s16.c | 4 +-
.../arm/mve/intrinsics/vstrbq_s32.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vstrbq_s8.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_p_s16.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_p_s32.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_p_s8.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_p_u16.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_p_u32.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_p_u8.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_s16.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_s32.c | 4 +-
.../mve/intrinsics/vstrbq_scatter_offset_s8.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_u16.c | 4 +-
.../intrinsics/vstrbq_scatter_offset_u32.c | 4 +-
.../mve/intrinsics/vstrbq_scatter_offset_u8.c | 4 +-
.../arm/mve/intrinsics/vstrbq_u16.c | 4 +-
.../arm/mve/intrinsics/vstrbq_u32.c | 4 +-
.../gcc.target/arm/mve/intrinsics/vstrbq_u8.c | 4 +-
.../intrinsics/vstrdq_scatter_base_p_s64.c | 4 +-
.../intrinsics/vstrdq_scatter_base_p_u64.c | 4 +-
.../mve/intrinsics/vstrdq_scatter_base_s64.c | 4 +-
.../mve/intrinsics/vstrdq_scatter_base_u64.c | 4 +-
.../intrinsics/vstrdq_scatter_base_wb_p_s64.c | 4 +-
.../intrinsics/vstrdq_scatter_base_wb_p_u64.c | 4 +-
.../intrinsics/vstrdq_scatter_base_wb_s64.c | 4 +-
.../intrinsics/vstrdq_scatter_base_wb_u64.c | 4 +-
.../intrinsics/vstrdq_scatter_offset_p_s64.c | 4 +-
.../intrinsics/vstrdq_scatter_offset_p_u64.c | 4 +-
.../intrinsics/vstrdq_scatter_offset_s64.c | 4 +-
.../intrinsics/vstrdq_scatter_offset_u64.c | 4 +-
.../vstrdq_scatter_shifted_offset_p_s64.c | 4 +-
.../vstrdq_scatter_shifted_offset_p_u64.c | 4 +-
.../vstrdq_scatter_shifted_offset_s64.c | 4 +-
.../vstrdq_scatter_shifted_offset_u64.c | 4 +-
.../arm/mve/intrinsics/vstrhq_f16.c | 4 +-
.../arm/mve/intrinsics/vstrhq_p_f16.c | 4 +-
.../arm/mve/intrinsics/vstrhq_p_s16.c | 4 +-
.../arm/mve/intrinsics/vstrhq_p_s32.c | 4 +-
.../arm/mve/intrinsics/vstrhq_p_u16.c | 4 +-
.../arm/mve/intrinsics/vstrhq_p_u32.c | 4 +-
.../arm/mve/intrinsics/vstrhq_s16.c | 4 +-
.../arm/mve/intrinsics/vstrhq_s32.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_f16.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_p_f16.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_p_s16.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_p_s32.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_p_u16.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_p_u32.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_s16.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_s32.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_u16.c | 4 +-
.../intrinsics/vstrhq_scatter_offset_u32.c | 4 +-
.../vstrhq_scatter_shifted_offset_f16.c | 4 +-
.../vstrhq_scatter_shifted_offset_p_f16.c | 4 +-
.../vstrhq_scatter_shifted_offset_p_s16.c | 4 +-
.../vstrhq_scatter_shifted_offset_p_s32.c | 4 +-
.../vstrhq_scatter_shifted_offset_p_u16.c | 4 +-
.../vstrhq_scatter_shifted_offset_p_u32.c | 4 +-
.../vstrhq_scatter_shifted_offset_s16.c | 4 +-
.../vstrhq_scatter_shifted_offset_s32.c | 4 +-
.../vstrhq_scatter_shifted_offset_u16.c | 4 +-
.../vstrhq_scatter_shifted_offset_u32.c | 4 +-
.../arm/mve/intrinsics/vstrhq_u16.c | 4 +-
.../arm/mve/intrinsics/vstrhq_u32.c | 4 +-
.../arm/mve/intrinsics/vstrwq_f32.c | 4 +-
.../arm/mve/intrinsics/vstrwq_p_f32.c | 4 +-
.../arm/mve/intrinsics/vstrwq_p_s32.c | 4 +-
.../arm/mve/intrinsics/vstrwq_p_u32.c | 4 +-
.../arm/mve/intrinsics/vstrwq_s32.c | 4 +-
.../mve/intrinsics/vstrwq_scatter_base_f32.c | 4 +-
.../intrinsics/vstrwq_scatter_base_p_f32.c | 4 +-
.../intrinsics/vstrwq_scatter_base_p_s32.c | 4 +-
.../intrinsics/vstrwq_scatter_base_p_u32.c | 4 +-
.../mve/intrinsics/vstrwq_scatter_base_s32.c | 4 +-
.../mve/intrinsics/vstrwq_scatter_base_u32.c | 4 +-
.../intrinsics/vstrwq_scatter_base_wb_f32.c | 4 +-
.../intrinsics/vstrwq_scatter_base_wb_p_f32.c | 4 +-
.../intrinsics/vstrwq_scatter_base_wb_p_s32.c | 4 +-
.../intrinsics/vstrwq_scatter_base_wb_p_u32.c | 4 +-
.../intrinsics/vstrwq_scatter_base_wb_s32.c | 4 +-
.../intrinsics/vstrwq_scatter_base_wb_u32.c | 4 +-
.../intrinsics/vstrwq_scatter_offset_f32.c | 4 +-
.../intrinsics/vstrwq_scatter_offset_p_f32.c | 4 +-
.../intrinsics/vstrwq_scatter_offset_p_s32.c | 4 +-
.../intrinsics/vstrwq_scatter_offset_p_u32.c | 4 +-
.../intrinsics/vstrwq_scatter_offset_s32.c | 4 +-
.../intrinsics/vstrwq_scatter_offset_u32.c | 4 +-
.../vstrwq_scatter_shifted_offset_f32.c | 4 +-
.../vstrwq_scatter_shifted_offset_p_f32.c | 4 +-
.../vstrwq_scatter_shifted_offset_p_s32.c | 4 +-
.../vstrwq_scatter_shifted_offset_p_u32.c | 4 +-
.../vstrwq_scatter_shifted_offset_s32.c | 4 +-
.../vstrwq_scatter_shifted_offset_u32.c | 4 +-
.../arm/mve/intrinsics/vstrwq_u32.c | 4 +-
gcc/testsuite/gcc.target/arm/pr112337.c | 4 +-
139 files changed, 774 insertions(+), 1833 deletions(-)
--
2.34.1