From: Alfie Richards <alfie.richa...@arm.com> 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 | 135 ++- 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 | 119 ++- 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 | 978 +----------------- gcc/config/arm/arm_mve_builtins.def | 38 - gcc/config/arm/iterators.md | 37 +- gcc/config/arm/mve.md | 662 ++++-------- 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 +- 138 files changed, 783 insertions(+), 1805 deletions(-) -- 2.34.1