Hi, second ping for this series (though I'm aware everyones likley busy with cauldron)

KR,
Alfie

On 24/09/2026 13:41, Alfie Richards wrote:
Hi,

Ping (though it hasn't been on the list for ages) :)

I'm especially keen for any feedback on the overall design on the analysis and transformation patches as if a new direction is required I would like as much time as possible to pivot before stage 3.

Thanks,
Alfie

On 17/09/2026 15:39, Alfie Richards wrote:
Hello All,

Thank you all for the reviews and feedback for the V2 series.

I have attempted to addressed this feedback in the new series.

Major changes:
--------------

1. HSSR regions are now stored in a vec in vect_loop_masks and their lifetimes
    are tied to the vect_loop_masks struct. (as suggested by Robin).

    This makes the API and accounting for these signifficantly cleaner.
    Additionally, it makes the lifetimes much easier to reason about.

    It also makes the API less messy if the SLP trees were to be reused
    for epilogue vectorization (not currently supported), as only the
    HSSR regions would need to be recreated, but the analysis of HSSR regions
    could be reused.

2. aarch64 patches separated from target independent changes.

3. general code improvements and refactors.

4. The patch series now depends both on Tamars patch series adding count_active     and my patch series for aarch64 to allow --param=aaarch64-autovec- preference
    to force vectorization with a specific mode.

Bootstrapped, O3+LTO bootstrapped, and regression tested on aarch64, x86_64, and armhf. Spec v6 and v8 both built and run successfully with this series for aarch64
with and without --param=vect-hssr-usage=3.

Thoughts and feedback? Okay for trunk? :)

Many thanks,
Alfie

Alfie Richards (17):
   Add count active
   fix: vect: Consider IV increment being invariant for loop bounds
   vect: Change IV increment position to standard_iv_increment_position
   ifn: optab: Add HSSR ifns and optabs
   vect: Make vect_maybe_permute_loop_masks optional and retargetable
   vect: Add vect-hssr-usage param and testsuite target checks
   Add hssr_read entry to vect_cost_for_stmt
   vect: Add HSSR analysis
   vect: Add HSSR transformation
   vect: Add HSSR tests
   vect: Add HSSR versioning
   aarch64: Add read_ffr_cost item to cost model
   aarch64: Make reads of FFR expensive
   aarch64: Add fold_contiguous_load helper function.
   aarch64: Implement HSSR for aarch64
   aarch64: Add HSSR tests
   vect: Enable HSSR by default.

  gcc/config/aarch64/aarch64-acle-builtins.cc   |  24 +
  gcc/config/aarch64/aarch64-acle-builtins.h    |   1 +
  gcc/config/aarch64/aarch64-protos.h           |  10 +-
  .../aarch64/aarch64-sve-builtins-base.cc      |  99 ++--
  gcc/config/aarch64/aarch64-sve.md             | 260 ++++++++-
  gcc/config/aarch64/aarch64.cc                 |  28 +-
  gcc/config/aarch64/aarch64.md                 |   2 +-
  gcc/config/aarch64/neoversev2.md              |   4 +-
  gcc/config/aarch64/olympus.md                 |   4 +-
  gcc/config/aarch64/tuning_models/a64fx.h      |   3 +-
  gcc/config/aarch64/tuning_models/cortexa320.h |   3 +-
  gcc/config/aarch64/tuning_models/cortexx925.h |   3 +-
  gcc/config/aarch64/tuning_models/generic.h    |   3 +-
  .../aarch64/tuning_models/generic_armv8_a.h   |   3 +-
  .../aarch64/tuning_models/generic_armv9_a.h   |   3 +-
  gcc/config/aarch64/tuning_models/hip12.h      |   3 +-
  .../aarch64/tuning_models/neoverse512tvb.h    |   3 +-
  gcc/config/aarch64/tuning_models/neoversen2.h |   3 +-
  gcc/config/aarch64/tuning_models/neoversen3.h |   3 +-
  gcc/config/aarch64/tuning_models/neoversev1.h |   3 +-
  gcc/config/aarch64/tuning_models/neoversev2.h |   3 +-
  gcc/config/aarch64/tuning_models/neoversev3.h |   3 +-
  .../aarch64/tuning_models/neoversev3ae.h      |   3 +-
  gcc/config/aarch64/tuning_models/olympus.h    |   3 +-
  gcc/doc/ifn.texi                              |  29 +
  gcc/doc/md.texi                               |  42 ++
  gcc/gimple-fold.cc                            |   9 +
  gcc/internal-fn.cc                            |  39 ++
  gcc/internal-fn.def                           |  20 +
  gcc/internal-fn.h                             |   1 +
  gcc/optabs.def                                |  11 +
  gcc/params.opt                                |   4 +
  gcc/target.h                                  |   7 +-
  gcc/targhooks.cc                              |   3 +
  gcc/testsuite/gcc.dg/vect/hssr-1.c            | 124 ++++
  gcc/testsuite/gcc.dg/vect/hssr-2.c            |  34 ++
  gcc/testsuite/gcc.dg/vect/hssr-3.c            |  25 +
  gcc/testsuite/gcc.dg/vect/hssr-4.c            |  25 +
  gcc/testsuite/gcc.dg/vect/hssr-5.c            |  19 +
  gcc/testsuite/gcc.dg/vect/hssr-6.c            |  17 +
  gcc/testsuite/gcc.dg/vect/hssr-ice-1.c        |  12 +
  gcc/testsuite/gcc.dg/vect/hssr-ice-2.c        |  16 +
  gcc/testsuite/gcc.dg/vect/hssr-ice-3.c        |  14 +
  gcc/testsuite/gcc.dg/vect/hssr-ice-4.c        |  17 +
  gcc/testsuite/gcc.target/aarch64/sve/ffr_1.c  |  16 +
  gcc/testsuite/gcc.target/aarch64/sve/ffr_2.c  |  44 ++
  gcc/testsuite/gcc.target/aarch64/sve/ffr_3.c  |  21 +
  gcc/testsuite/gcc.target/aarch64/sve/ffr_4.c  |  21 +
  .../gcc.target/aarch64/sve/noeffect11.c       |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_1.c       |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_11.c      |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_12.c      |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_13.c      |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_14.c      |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_15.c      |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_16.c      |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_17.c      |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_2.c       |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_3.c       |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_4.c       |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_5.c       |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_6.c       |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_7.c       |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_8.c       |   2 +-
  .../gcc.target/aarch64/sve/peel_ind_9.c       |   2 +-
  gcc/testsuite/gcc.target/aarch64/sve/peeled.c |   2 +-
  .../gcc.target/aarch64/sve/peeled1.c          |   2 +-
  .../gcc.target/aarch64/sve/peeled2.c          |   2 +-
  .../gcc.target/aarch64/sve/peeled3.c          |   2 +-
  .../gcc.target/aarch64/sve/pr119351.c         |   2 +-
  gcc/testsuite/lib/target-supports.exp         |  41 ++
  gcc/tree-data-ref.cc                          |   2 +
  gcc/tree-ssa-alias.cc                         |   1 +
  gcc/tree-ssa-loop-ivopts.cc                   |   2 +
  gcc/tree-vect-data-refs.cc                    |   6 +-
  gcc/tree-vect-loop-manip.cc                   | 530 +++++++++++++++++-
  gcc/tree-vect-loop.cc                         | 475 +++++++++++++++-
  gcc/tree-vect-slp.cc                          |  31 +
  gcc/tree-vect-stmts.cc                        | 303 ++++++++--
  gcc/tree-vectorizer.cc                        |  51 +-
  gcc/tree-vectorizer.h                         | 118 +++-
  81 files changed, 2399 insertions(+), 252 deletions(-)
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-1.c
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-2.c
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-3.c
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-4.c
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-5.c
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-6.c
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-ice-1.c
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-ice-2.c
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-ice-3.c
  create mode 100644 gcc/testsuite/gcc.dg/vect/hssr-ice-4.c
  create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/ffr_1.c
  create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/ffr_2.c
  create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/ffr_3.c
  create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/ffr_4.c



Reply via email to