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