On 07/11/2024 09:18, Christophe Lyon wrote:
This patch series re-implements the store_scatter and load_gather
intrinsincs using the new framework, similarly to previous series.

A few points worth mentioning:

- unlike other intrinsics, these ones have the predicate after the
   mode in their names, hence the need for patch #1

- when checking the 'offset' argument of the *_base_* intrinsics, we
   need ranges with negative lower bounds, unlike what we needed so far
   (SVE does not have such negative bounds AFAIK), hence the need for
   patch #5 and the use of 'ss64' instead of 'su64' in signatures.

- because of some pecularities in ACLE expected output wrt data type
   suffix (.16 vs .u16 vs .f16 for instance), I chose to update a few
   tests in patches #12 and #13, and to introduce a dedicated iterator
   in other cases (patch#10, using and fixing an existing iterator
   would have impact on Neon tests).  I chose the approach which seemed
   the less invasive, but maybe we should aim at more consistency and
   update ACLE instead?


Thanks for this, it's a nice cleanup.

This patch series is OK. In fact, I think you should consider further changes to move things from arm_mve.h inside the pragma as pre-approved, once stage 1 re-opens, and provided they don't need to go significantly beyond the type of changes needed here.

One thing we should perhaps consider in future (ie not right now) is whether we really need poly types in the Arm back-end code. Patch 8 contains:


+ machine_mode memory_vector_mode (const function_instance &fi) const override
+  {
+    poly_uint64 nunits = GET_MODE_NUNITS (fi.vector_mode (0));
+    return arm_mve_data_mode (m_to_int_mode, nunits).require ();
+  }

But since poly types on Arm should degenerate into simple host wide ints, this feels a bit like overkill.

R.

Thanks,

Christophe

Christophe Lyon (15):
   arm: [MVE intrinsics] add mode_after_pred helper in function_shape
   arm: [MVE intrinsics] add store_scatter_offset shape
   arm: [MVE intrinsics] rework vstr?q_scatter_offset
   arm: [MVE intrinsics] rework vstr_scatter_shifted_offset
   arm: [MVE intrinsics] Check immediate is a multiple in a range
   arm: [MVE intrinsics] Add store_scatter_base shape
   arm: [MVE intrinsics] rework vstr scatter_base
   arm: [MVE intrinsics] rework vstr scatter_base_wb
   arm: [MVE intrinsics] add load_ext_gather_offset shape
   arm: [MVE intrinsics] rework vldr gather_offset
   arm: [MVE intrinsics] rework vldr gather_shifted_offset
   arm: [MVE intrinsics] add load_gather_base shape
   arm: [MVE intrinsics] rework vldr gather_base
   arm: [MVE intrinsics] rework vldr gather_base_wb
   arm: [MVE intrinsics] remove useless call_properties implementations.

  gcc/config/arm/arm-builtins.cc                |  146 -
  gcc/config/arm/arm-mve-builtins-base.cc       |  279 +-
  gcc/config/arm/arm-mve-builtins-base.def      |   28 +
  gcc/config/arm/arm-mve-builtins-base.h        |   18 +
  gcc/config/arm/arm-mve-builtins-shapes.cc     |  249 ++
  gcc/config/arm/arm-mve-builtins-shapes.h      |    4 +
  gcc/config/arm/arm-mve-builtins.cc            |   99 +-
  gcc/config/arm/arm-mve-builtins.h             |    5 +
  gcc/config/arm/arm_mve.h                      | 3096 ++---------------
  gcc/config/arm/arm_mve_builtins.def           |  122 -
  gcc/config/arm/iterators.md                   |   63 +-
  gcc/config/arm/mve.md                         | 2150 ++----------
  gcc/config/arm/unspecs.md                     |   78 +-
  .../mve/intrinsics/vldrdq_gather_base_s64.c   |    4 +-
  .../mve/intrinsics/vldrdq_gather_base_u64.c   |    4 +-
  .../intrinsics/vldrdq_gather_base_wb_s64.c    |    4 +-
  .../intrinsics/vldrdq_gather_base_wb_u64.c    |    4 +-
  17 files changed, 1348 insertions(+), 5005 deletions(-)


Reply via email to