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

Reply via email to