On 2/12/25 7:58 AM, Richard Biener wrote:
For the testcase in question which uses a fold-left vectorized
reduction of a reverse iterating loop we'd need two forwprop
invocations to first bypass the permute emitted for the reverse
iterating loop and then to decompose the vector load that only
feeds element extracts.  The following moves the first transform
to a match.pd pattern and makes sure we fold the element extracts
when the vectorizer emits them so the single forwprop pass can
then pick up the vector load decomposition, avoiding the forwarding
fail that causes.

Moving simplify_bitfield_ref also makes forwprop remove the dead
VEC_PERM_EXPR via the simple-dce it uses - this was also
previously missing.

Bootstrapped and tested on x86_64-unknown-linux-gnu, OK?

Thanks,
Richard.

        PR tree-optimization/90579
        * tree-ssa-forwprop.cc (simplify_bitfield_ref): Move to
        match.pd.
        (pass_forwprop::execute): Adjust.
        * match.pd (bit_field_ref (vec_perm ...)): New pattern
        modeled after simplify_bitfield_ref.
        * tree-vect-loop.cc (vect_expand_fold_left): Fold the
        element extract stmt, combining it with the vector def.
OK.

Jeff

Reply via email to