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

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
So I do have a patch amending the r15-5863 revision to allow vectorizing the
cases again but it regresses gcc.dg/vect/pr116352.c (the testcase the code
was added for) since we run into a similar issue in SLP scheduling then,
which tries to order "unordered" SSA defs with code like

            /* We are emitting all vectorized stmts in the same place and
               the last one is the last.
               ???  Unless we have a load permutation applied and that
               figures to re-use an earlier generated load.  */
            unsigned j;
            tree vdef;
            FOR_EACH_VEC_ELT (SLP_TREE_VEC_DEFS (child), j, vdef)
              {
                gimple *vstmt = SSA_NAME_DEF_STMT (vdef);
                if (!last_stmt
                    || vect_stmt_dominates_stmt_p (last_stmt, vstmt))
                  last_stmt = vstmt;
              }

where the main issue is that we do not verify we actually _can_ schedule
the SLP graph onto the existing CFG.  Without inserting PHIs, specifically
LC PHIs, where necessary when for example instead trying to insert at the
hopefully single block of the dominance frontier.

So for now we have to accept the regression and eventually get to the TODO
to actually implement a scheduling feasability check (since we already
fail to ensure trivial schedulability given vectors eventually are combined
from defs from different parts of the CFG).

Reply via email to