https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121949

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tamar Christina <[email protected]>:

https://gcc.gnu.org/g:c078309cda304ffa18d2bd322512530e6feffdfb

commit r16-4414-gc078309cda304ffa18d2bd322512530e6feffdfb
Author: Tamar Christina <[email protected]>
Date:   Tue Oct 14 10:24:13 2025 +0100

    middle-end: Relax vect_recog_vector_vector_shift_pattern STMT def type
[PR121949]

    The example

    void f(long long* acc)
    {
        for (int row = 0; row < 64; ++row)
          acc[row] = acc[row] << row;
    }

    fails to vectorize because the size of row is different than the size of
the
    being shifted value.

    The vectorizer has a pattern that should deal with such shifts in
    vect_recog_vector_vector_shift_pattern however this pattern is using
    vect_get_internal_def to get the definition of the shift operand.

    This needlessly restricts the pattern to only internal_defs.  The
vectorizer
    can deal with casts on any operand type so this restriction isn't needed
and
    this is dropped.

    gcc/ChangeLog:

            PR tree-optimization/121949
            * tree-vect-patterns.cc (vect_recog_vector_vector_shift_pattern):
Remove
            restriction on internal_def.

    gcc/testsuite/ChangeLog:

            PR tree-optimization/121949
            * gcc.dg/vect/pr121949_1.c: New test.
            * gcc.dg/vect/pr121949_2.c: New test.
            * gcc.dg/vect/pr121949_3.c: New test.

Reply via email to