On Mon, Oct 5, 2026 at 3:29 PM Christopher Bazley <[email protected]> wrote:
>
> Gentle ping. We'd really like to get this in before the end of stage 1.
The series doesn't git am anymore and I cannot figure out which GCC
rev it was based on.
Can you re-base please (or tell me a revision it ams on?)
I believe I approved parts of the series already, but I see no indication
which patches were already fully reviewed/acked which causes extra
work for me. Please indicate this appropriately. Maybe add
some acked-by attribution or at _least_ in the cover letter mark
patches that are approved (and whether they had any changes
after being approved).
Thanks,
Richard.
> On 21/09/2026 17:53, Christopher Bazley wrote:
> > GCC already supports fully-predicated vectorisation for loops, both
> > using "traditional" loop vectorisation and loop-aware SLP
> > (superword-level parallelism). For example, GCC can vectorise:
> >
> > void
> > foo (char *x)
> > {
> > for (int i = 0; i < 6; i += 2)
> > {
> > x[i] += 1;
> > x[i + 1] += 2;
> > }
> > }
> >
> > from which it generates the following assembly code (with -O2
> > -ftree-vectorize -march=armv9-a+sve -msve-vector-bits=scalable):
> >
> > foo:
> > ptrue p7.b, vl6
> > mov w1, 513
> > ld1b z31.b, p7/z, [x0]
> > mov z30.h, w1
> > add z30.b, z31.b, z30.b
> > st1b z30.b, p7, [x0]
> > ret
> >
> > However, GCC cannot yet vectorise the unrolled form of the same
> > function, even though it is semantically equivalent:
> >
> > void
> > foo (char *x)
> > {
> > x[0] += 1;
> > x[1] += 2;
> > x[2] += 1;
> > x[3] += 2;
> > x[4] += 1;
> > x[5] += 2;
> > }
> >
> > These patches implement support for vectorising the unrolled form of
> > the above function by enabling use of a predicate mask or length
> > limit for basic block SLP. For example, it can now be vectorised to
> > the following assembly code (using the same options as above):
> >
> > foo:
> > adrp x1, .LANCHOR0
> > ptrue p7.b, vl6
> > ld1b z31.b, p7/z, [x0]
> > ldr d30, [x1, #:lo12:.LANCHOR0]
> > add z30.b, z31.b, z30.b
> > st1b z30.b, p7, [x0]
> > ret
> >
> > The initial vector mode for an SLP region is "autodetected" by calling
> > aarch64_preferred_simd_mode, which prefers SVE modes if supported and
> > unless configured otherwise (e.g. VNx4SI for int). If at least one
> > profitable subgraph can be scheduled then GCC does not try to vectorise
> > the region using any other modes, even though their estimated costs
> > might otherwise have been lower.
> >
> > That is mitigated by the fact that a sequence of GIMPLE stmts such as:
> >
> > vectp.14_86 = x_50(D) + 16;
> > slp_mask_87 = .WHILE_ULT (0, 8, { 0, ... });
> > .MASK_STORE (vectp.14_86, 8B, slp_mask_87, vect__34.12_85);
> >
> > are lowered to a fixed-length vector store (e.g., str d30, [x0, 16]) if
> > possible, instead of a more literal interpretation such as:
> >
> > add x0, x0, 16
> > ptrue p7.b, vl8
> > st1b z30.b, p7, [x0]
> >
> > Based on commit d6bac80f3dd.
> >
> > Bootstrapped and regression-tested on aarch64-unknown-linux-gnu and
> > x86_64-pc-linux-gnu. No test result regressions are known but one
> > existing test has gained an xfail because of PR 127271.
> >
> > Changes in v2:
> > - Updated regexes used by the vect-over-widen-*.c tests so that they
> > do not accidentally match text that is now part of the dump but
> > was not previously.
> > - Updated regexes used by the aarch64/popcnt-sve.c test so that it
> > expects 'all' as the operand of 'ptrue', instead of some specific
> > number of active elements.
> > - Removed a dump_printf from vect_get_num_copies because the
> > gcc.dg/vect/vect-shift-5.c test relies on a fixed dump layout
> > spanning multiple lines.
> > - Fixed a bug in vect_get_vector_types_for_stmt, which had
> > accidentally been modified to unconditionally set group_size to
> > zero (even for basic block vectorization).
> > - Relaxed an overzealous new check in
> > vect_maybe_update_slp_op_vectype, which now considers the
> > vectorization factor when checking the number of lanes of external
> > definitions during loop vectorization. e.g., lanes=11 is not
> > divisible by subparts=8 with vf=1 but vf*lanes=88 is divisible by
> > subparts=8 with vf=11.
> > - Removed the stmts vector ownership changes relating to mishandling
> > of failure of the vect_analyze_slp_instance function (to be fixed
> > separately).
> > - A check in get_vectype_for_scalar_type for whether the natural
> > choice of vector type satisfies the group size was too simplistic.
> > Instead of choosing a narrower vector type if the natural vector
> > type could be long enough but not definitely (variable length, by
> > proxy), get_len_load_store_mode is now used to explicitly query
> > whether the target supports mask- or length-limited loads and
> > stores. With the previous version, GCC preferred the natural vector
> > type if it was known to be long enough; sometimes that resulted in
> > better output than a narrower type, but it also caused some
> > bb-slp-* tests to fail.
> > - Shuffled dump_printfs around into separate patches.
> > - An assertion is now used to protect my change to use lower bound
> > of number of subparts in gimple_build_vector.
> >
> > Changes in v3:
> > - Wrote changelog entries.
> > - Created the gimple_build_vector_with_zero_padding function and
> > used it place of the gimple_build_vector function.
> > - Reverted my change to use constant_lower_bound of subparts in the
> > gimple_build_vector function.
> > - Fixed a check for 'partial vectors required' in vect_analyze_stmt
> > to include cases in which the minimum bound of the length of a
> > variable-length vector type equals the number of active lanes in an
> > SLP tree node. (Maybe less than, instead of known to be less than.)
> > - Reverted my change to regexes used by the aarch64/popcnt-sve.c test
> > because it is not needed after the above fix.
> > - Replaced SLP_TREE_CAN_USE_MASK_P and SLP_TREE_CAN_USE_LEN_P with
> > SLP_TREE_PARTIAL_VECTORS_STYLE.
> > - Titivated the documentation of vect_record_nunits.
> > - Renamed local variable max_nunits to nunits in the
> > vect_analyze_slp_reduc_chain function.
> > - Added an assertion in vect_create_constant_vectors to verify a
> > claimed relationship between group size and number of subparts.
> > - Fixed a mistake in the description of vect_slp_get_bb_len.
> > - Clarified the descriptions of vect_record_mask and vect_record_len
> > (from 'would be required' to 'could be used ... if required').
> > - Renamed the vect_can_use_mask_p function as vect_fully_masked_p
> > and vect_can_use_len_p as vect_fully_with_length_p.
> > - Tightened assertions in vect_record_mask and vect_record_len:
> > instead of just 'the other function must not have been called', we
> > now assert that no partial vectors style has already been set.
> > - Updated the documentation of check_load_store_for_partial_vectors
> > to describe its role in BB SLP vectorization.
> > - Renamed masked_loop_p and len_loop_p as masked_p and len_p in
> > contexts where they may now be used for BB SLP vectorization.
> > - Guard against a potential null pointer dereference in
> > LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS when used by the
> > vectorizable_operation and vectorizable_call functions for BB SLP
> > vectorization (instead of assuming !vect_fully_with_length_p).
> > - Guard against calling dump_printf_loc with null instead of
> > a vector type in vectorizable_comparison_1.
> > - Clear any partial vectors style that might have been set by callees
> > of vect_analyze_stmt if it finds that partial vectors aren't needed.
> > - Revert a change to make the vect_is_simple_use function more robust
> > when the requested SLP tree child node is not an internal def and
> > has no scalar operand to return.
> > - Revert a change to reserve slots for the definitions to be pushed
> > for narrow FLOAT_EXPR vectorization before using quick_push in the
> > vectorizable_conversion function.
> >
> > Changes in v4:
> > - Resolved code generation regressions in
> > gcc.target/aarch64/sve/slp_6.c and
> > gcc.target/aarch64/sve/slp_7_costly.c by adding code to
> > handle variable-length vector types in store_constructor.
> > (Still had to update expectations for slp_6.c though.)
> > - Removed a default constructor from the definition of
> > struct slp_tree_nunits in order to fix a compilation error in
> > the vect_update_nunits function.
> > - Renamed the gimple_build_vector_with_zero_padding function as
> > gimple_build_vector_from_elems.
> > - Changed gimple_build_vector_from_elems to take a vector type
> > and list of element values instead of a tree_vector_builder.
> > - Rewrote the description of gimple_build_vector_from_elems.
> > - Removed redundant masking from gimple_build_vector_from_elems. It's
> > now almost equivalent to gimple_build_vector in use cases where
> > some element value is not constant.
> > - Assert that the constant lower bound of the number of subparts
> > in a vector type is a power of 2 instead of merely a multiple of 2
> > in vect_build_slp_tree_1.
> >
> > Changes in v5:
> > - Removed the patch to track the minimum and maximum number of lanes
> > for BB SLP.
> > - Added a new function, vect_slp_tree_min_nunits, which is invoked by
> > vect_analyze_slp_instance to compute the minimum number of subparts
> > for all of the vector types used in an SLP tree for which an SLP
> > instance is about to be created.
> >
> > Changes in v6:
> > - Moved the BB SLP implementations of vect_record_mask and
> > vect_record_len into tree-vect-slp.cc.
> > - Relaxed (failing) assertions: the style of an SLP node is not always
> > vect_partial_vectors_none on entry to vect_record_mask and
> > vect_record_len. Allow the same style to be set multiple times.
> > - Updated an existing pattern named 'Simplify vector extracts' to
> > guard against invalid invocations of tree_to_uhwi when a
> > BIT_FIELD_REF has an unsuitable polynomial offset or size.
> > - Rebased on 43afcb3a83c3648141285d80cd3d8a562047fb43.
> >
> > Changes in v7:
> > - Fixed the vectorizable_live_operation function so that it no
> > longer generates invalid offsets such as BIT_FIELD_REF
> > <_251, 32, POLY_INT_CST [96, 128]> for BB SLP with a
> > variable-length vector type.
> > - Revert changes to the existing pattern named 'Simplify vector
> > extracts' because those changes to make the pattern more robust
> > are now redundant.
> > - Rebased on 630c1bfbb5bc3ba9fafca5e97096263ab8f0a04b.
> >
> > Changes in v8:
> > - Fixed a regression in vectorizable_simd_clone_call that was
> > caused by an error when rebasing. (Silent conflict with
> > commit cea34ac07e3bd7.)
> >
> > Changes in v9:
> > - Optimised vec_init for partial SVE vector modes and added a
> > test to guard against any return to the pathological stack usage
> > previously observed.
> > - Removed -march=armv9-a+sve from the dg-options of new tests
> > because it was redundant.
> > - More arguments are now passed through to vect_slp_record_bb_mask
> > and vect_slp_record_bb_len (from vect_slp_record_mask or
> > vect_slp_record_len) in anticipation of a future implementation
> > that shares masks, at least within an SLP sub-tree.
> > - A new per-SLP-node variable, SLP_TREE_NUM_PARTIAL_VECTORS, is
> > now used to calculate a worst-case estimate of the cost of
> > creating masks or lengths for partial vector tails. This aligns
> > BB SLP with existing costing of vectorised loops.
> > - Replaced early returns from vect_slp_get_bb_mask and
> > vect_slp_get_bb_len (when more than one vector, the requested vector
> > is not the last, or not partial) with code to construct an
> > appropriate mask or length. The value of NULL_TREE previously
> > returned in such edge is not a valid mask, so this change makes the
> > code more robust. vect_slp_record_bb_mask has been seen to be called
> > with nvectors=2 when running the asrdiv_2 test (msve-vector-bits=128,
> > group_size=8, nunits=4). The vector type was 128 bit: vector(4) int.
> > - Added a defensive check for BB SLP as part of the refactoring of
> > check_load_store_for_partial_vectors that is done by the first patch,
> > although we don't expect that function to be called for BB SLP until
> > vect_can_use_partial_vectors_p has been updated to sometimes return
> > true for BB SLP (which is done by the 'Extend BB SLP vectorization
> > to use predicated tails' patch).
> > - Rebased on commit a28bb06b3e20a26579e06dc1b5bd6344ce4f88f0.
> >
> > Changes in v10:
> > - store_constructor now zeros RTL elements up to the lower bound of the
> > number of subparts in a variable-length vector type instead of
> > only zeroing the number of elements specified by the constructor.
> > - Documented the treatment of partial constructors of vector type in
> > the description of store_constructor.
> > - Reverted some of my previous changes to vect_create_constant_vectors
> > because it is no longer deemed necessary to pad the length of
> > variable-length vector constants with zeros in GIMPLE.
> > - Rebased on commit ee7d0c7b4102b8ef0bcaa725c75e141248b774cb.
> > Consequently, vect_get_len and vect_slp_get_bb_len gained an extra
> > parameter.
> > - Update gcc.target/aarch64/sve/vec_construct_*.c to expect SVE
> > instead of ASIMD instructions and add
> > --param=aarch64-autovec-preference=sve-only to avoid flip-flopping.
> > - Increase the number of elements stored in vec_construct_3.c to
> > ensure vectorization using SVE is deemed profitable despite predicate
> > mask costs.
> > - Added a new test for vectorization of a copy of two contiguous bytes.
> > According to the default tuning, the cost is the same whether the
> > operation is vectorized or not, therefore it is vectorised.
> >
> > Changes in v11:
> > - Update the description of vec_init to specify its behavior for
> > scalable vector modes.
> >
> > Changes in v12:
> > - Removed 'Add extra conditional dump output to the vectorizer' (by
> > request).
> > - Removed 'AArch64/SVE: Optimize vec_init for partial SVE vector modes'
> > and 'AArch64/SVE: Relax the expectations of the popcnt-sve test'
> > (both were pushed separately).
> > - Removed 'Handle variable-length vector types in store_constructor'
> > and 'Specify behavior of vec_init for scalable vector modes'
> > (squashed together and submitted for review separately by request).
> > - Added 'aarch64: improve code generation in
> > aarch64_expand_sve_const_vector'.
> > (new patch, not previously submitted for review).
> > - Rework of 'Update constant creation for BB SLP with predicated tails'
> > to clarify when repetition of vector elements is actually required
> > (as opposed to an unwanted side-effect with obscure failure modes), and
> > to simplify code that previously called gimple_build_vector.
> >
> > Changes in v13:
> > - Split the 'Prepare promotion/demotion for BB SLP with predicated tails'
> > patch from this series by request, although it is still a key
> > dependency.
> > - Reworked constant creation for BB SLP with predicated tails to avoid
> > introducing new GIMPLE helper functions.
> > - Moved state for partial-vector masks and lengths from the
> > loop vectorizer class to its superclass vec_info, to allow them to be
> > shared with BB SLP vectorization.
> > - Partial-vector controls (masks and lengths) can now be shared between
> > different vectorized statements in an SLP region.
> > - Implemented deferred verification that partial vector requirements
> > recorded during the analysis phase are consistent and can be satisfied.
> > - Partial vector setup for BB SLP is now deferred instead of occurring
> > in the mask and length SSA name accessor functions.
> > - Several more existing tests are also now run-tests.
> > - Added tests for mask sharing, predicated arithmetic and splitting of SLP
> > groups.
> > - Existing tests are more exacting for important properties and more
> > permissive for incidental properties such as choice of addressing mode.
> > - The patch series has been reorganized into a larger number of more
> > focused commits. Several supporting changes and refactorings are now
> > presented separately.
> >
> > Changes in v14:
> > - Substituted aarch64_sve128_hw for aarch64_sve_hw as the target for three
> > of the new SLP tests that run code compiled for a vector length of 128
> > bits (one of which previously failed on a machine with 256-bit vectors).
> > - Added three new tests to ensure that 'rev' instructions are still
> > generated instead of inappropriately vectorising byte order reversals
> > using BB SLP. 10c43486134 must therefore be an ancestor so that
> > truncated
> > scalar stores are costed correctly by the vectorizer.
> > - Split the 'Tests for use of predicated vector tails for BB SLP' patch
> > into three patches because it had grown to incorporate unrelated kinds
> > of test that were already described separately.
> > - Rebased on ece564fdaa1.
> >
> > Changes in v15:
> > - Rebased on d6bac80f3dd and fixed many conflicts with upstream.
> > - Updated vect_get_num_copies for BB SLP to calculate the number of
> > vectors
> > using can_div_away_from_zero_p instead of returning 1 whenever the
> > vector
> > type is long enough for the SLP node.
> > - Reworked recording of partial-vector requirements for BB SLP to support
> > sequences of more than one fixed-length vector. Full vectors require
> > no recorded control. Mask/length rgroups are now indexed by the number
> > of
> > active lanes in the tail vector rather than by the whole SLP group size.
> > - Fixed vect_transform_slp_perm_load_1 to complete permutation-mask
> > encodings
> > for partial SLP vectors by padding inactive lanes.
> > - Updated the new vect_get_num_copies_for_invariant helper introduced
> > upstream to support BB SLP with variable-length vector types when the
> > SLP
> > group fits within the minimum vector length.
> > - Reworked vect_create_constant_vectors to use
> > vect_get_num_copies_for_invariant and its excess-element count, and to
> > distinguish the number of scalar operands in the final vector from the
> > minimum or fixed vector length.
> > - Brought the 'Prepare promotion/demotion for BB SLP with predicated
> > tails'
> > patch back into this series but removed its promotion-side changes to
> > vect_create_vectorized_promotion_stmts, because upstream now limits the
> > number of results it produces.
> > - Cleared partial_vector_style when loop analysis ultimately decides not
> > to use partial vectors, to avoid creating SSA names for masks or lengths
> > that will not subsequently be defined.
> > - Changed vect_analyze_slp_instance to use the constant lower bound of a
> > VLA vector type when choosing an SLP-group split point, provided that
> > the
> > matching prefix is divisible by that value. Deleted
> > vect_slp_tree_min_nunits and vect_update_slp_min_nunits_for_node.
> > - Adapted vect_build_slp_tree_1 to upstream changes while preserving the
> > v14 behaviour of using the minimum number of subparts of a VLA type to
> > choose an SLP splitting point.
> > - Renamed vect_min_prec_for_max_group_size as vect_min_prec_for_slp.
> > - Renamed max_group_size as max_normalized_group_size and group_size as
> > normalized_group_size in vect_min_prec_for_slp.
> > - Removed the vec_info parameter of vect_maybe_update_slp_op_vectype.
> > - The patch to guard against an infinite loop in
> > vect_create_constant_vectors
> > was merged separately.
> > - Added a comment in vectorizable_conversion to explain why an extra zero
> > is pushed.
> > - Removed the code previously added to vect_maybe_update_slp_op_vectype
> > for the purpose of rejecting attempts to set a vector type for external
> > defs whose number of lanes is not divisible by the number of subparts.
> > Conversions for which it is impossible to determine the number of input
> > vectors are now rejected in vectorizable_conversion instead.
> > - Corrected the description of max_nscalars_per_iter for BB SLP
> > vectorization with vect_partial_vectors_len.
> > - Updated outdated descriptions of the vec_construct_1.c,
> > vec_construct_3.c and vec_construct_5.c tests.
> > - Changed the type of group_size to unsigned int in
> > check_load_store_for_partial_vectors.
> > - Fixed the spacing of some uses of template functions.
> >
> > Link to v1:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v2:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v3:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v4:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v5:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v6:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v7:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v8:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v9:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v10:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v11:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v12:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v13:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Link to v14:
> > https://inbox.sourceware.org/gcc-patches/[email protected]/
> >
> > Christopher Bazley (19):
> > vect: Prepare demotion for BB SLP with predicated tails
> > vect: Handle partial SLP vectors in vect_transform_slp_perm_load_1
> > vect: Preparation to support predicated tails for BB SLP
> > vect: Update constant creation for BB SLP with predicated tails
> > vect: Refactor check_load_store_for_partial_vectors
> > vect: Return a failure indication from
> > check_load_store_for_partial_vectors
> > vect: Handle BB SLP in check_load_store_for_partial_vectors
> > vect: Fix vectorizable_live_operation for BB SLP with a VLA type
> > vect: Prepare vectorizable_* functions for BB SLP with predicated
> > tails
> > vect: Record/cost/set BB SLP partial vector controls for WHILE_ULT
> > vect: Record/cost/set BB SLP partial vector controls for AVX512
> > vect: Record/cost/set BB SLP partial vector controls for LEN
> > vect: Extend BB SLP vectorization to use predicated tails
> > AArch64/SVE: Tests for use of predicated vector tails for BB SLP
> > AArch64/SVE: Tests for sharing of masks by BB SLP
> > AArch64/SVE: Tests for masked arithmetic with BB SLP
> > AArch64/SVE: Regression tests for use of 'rev' instead of BB SLP
> > AArch64/SVE: Optimize aarch64_expand_sve_const_vector
> > vect: Rename masked_loop_p and len_loop_p variables
> >
> > gcc/config/aarch64/aarch64.cc | 135 ++-
> > gcc/gimple-fold.cc | 33 +-
> > .../gcc.dg/vect/vect-over-widen-10.c | 2 +-
> > .../gcc.dg/vect/vect-over-widen-13.c | 2 +-
> > .../gcc.dg/vect/vect-over-widen-14.c | 2 +-
> > .../gcc.dg/vect/vect-over-widen-17.c | 2 +-
> > .../gcc.dg/vect/vect-over-widen-18.c | 2 +-
> > gcc/testsuite/gcc.dg/vect/vect-over-widen-5.c | 2 +-
> > gcc/testsuite/gcc.dg/vect/vect-over-widen-6.c | 2 +-
> > gcc/testsuite/gcc.dg/vect/vect-over-widen-7.c | 2 +-
> > gcc/testsuite/gcc.dg/vect/vect-over-widen-8.c | 2 +-
> > gcc/testsuite/gcc.dg/vect/vect-over-widen-9.c | 2 +-
> > gcc/testsuite/gcc.target/aarch64/sve/slp_6.c | 18 +-
> > .../gcc.target/aarch64/sve/slp_pred_1.c | 43 +
> > .../gcc.target/aarch64/sve/slp_pred_10.c | 23 +
> > .../gcc.target/aarch64/sve/slp_pred_11.c | 36 +
> > .../gcc.target/aarch64/sve/slp_pred_12.c | 51 +
> > .../gcc.target/aarch64/sve/slp_pred_13.c | 45 +
> > .../gcc.target/aarch64/sve/slp_pred_14.c | 35 +
> > .../gcc.target/aarch64/sve/slp_pred_15.c | 36 +
> > .../gcc.target/aarch64/sve/slp_pred_16.c | 26 +
> > .../gcc.target/aarch64/sve/slp_pred_17.c | 27 +
> > .../gcc.target/aarch64/sve/slp_pred_18.c | 24 +
> > .../gcc.target/aarch64/sve/slp_pred_19.c | 35 +
> > .../gcc.target/aarch64/sve/slp_pred_1_run.c | 6 +
> > .../gcc.target/aarch64/sve/slp_pred_2.c | 35 +
> > .../gcc.target/aarch64/sve/slp_pred_20.c | 31 +
> > .../gcc.target/aarch64/sve/slp_pred_21.c | 31 +
> > .../gcc.target/aarch64/sve/slp_pred_22.c | 31 +
> > .../gcc.target/aarch64/sve/slp_pred_23.c | 35 +
> > .../gcc.target/aarch64/sve/slp_pred_24.c | 29 +
> > .../gcc.target/aarch64/sve/slp_pred_25.c | 29 +
> > .../gcc.target/aarch64/sve/slp_pred_2_run.c | 6 +
> > .../gcc.target/aarch64/sve/slp_pred_3.c | 40 +
> > .../gcc.target/aarch64/sve/slp_pred_3_run.c | 6 +
> > .../gcc.target/aarch64/sve/slp_pred_4.c | 40 +
> > .../gcc.target/aarch64/sve/slp_pred_4_run.c | 6 +
> > .../gcc.target/aarch64/sve/slp_pred_5.c | 38 +
> > .../gcc.target/aarch64/sve/slp_pred_6.c | 43 +
> > .../gcc.target/aarch64/sve/slp_pred_6_run.c | 6 +
> > .../gcc.target/aarch64/sve/slp_pred_7.c | 48 +
> > .../gcc.target/aarch64/sve/slp_pred_7_run.c | 6 +
> > .../gcc.target/aarch64/sve/slp_pred_8.c | 42 +
> > .../gcc.target/aarch64/sve/slp_pred_8_run.c | 6 +
> > .../gcc.target/aarch64/sve/slp_pred_9.c | 57 ++
> > .../gcc.target/aarch64/sve/slp_pred_9_run.c | 6 +
> > .../gcc.target/aarch64/sve/slp_pred_harness.h | 28 +
> > .../gcc.target/aarch64/sve/slp_rev_32_1.c | 25 +
> > .../gcc.target/aarch64/sve/slp_rev_32_2.c | 29 +
> > .../gcc.target/aarch64/sve/slp_rev_32_3.c | 26 +
> > .../aarch64/sve/truncated_concatenation_1.c | 5 +-
> > .../gcc.target/aarch64/sve/vec_construct_1.c | 11 +-
> > .../gcc.target/aarch64/sve/vec_construct_2.c | 4 +-
> > .../gcc.target/aarch64/sve/vec_construct_3.c | 25 +-
> > .../gcc.target/aarch64/sve/vec_construct_4.c | 5 +-
> > .../gcc.target/aarch64/sve/vec_construct_5.c | 13 +-
> > gcc/tree-vect-loop.cc | 768 ++++++++++-----
> > gcc/tree-vect-slp.cc | 460 +++++++--
> > gcc/tree-vect-stmts.cc | 876 +++++++++++-------
> > gcc/tree-vectorizer.cc | 7 +-
> > gcc/tree-vectorizer.h | 346 +++----
> > 61 files changed, 2956 insertions(+), 836 deletions(-)
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_1.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_10.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_11.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_12.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_13.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_14.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_15.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_16.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_17.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_18.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_19.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_1_run.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_2.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_20.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_21.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_22.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_23.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_24.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_25.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_2_run.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_3.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_3_run.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_4.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_4_run.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_5.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_6.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_6_run.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_7.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_7_run.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_8.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_8_run.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_9.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_9_run.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_pred_harness.h
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_rev_32_1.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_rev_32_2.c
> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/slp_rev_32_3.c
> >
>
>
> --
> Christopher Bazley
> Staff Software Engineer, GNU Tools Team.
> Arm Ltd, 110 Fulbourn Road, Cambridge, CB1 9NJ, UK.
> http://www.arm.com/