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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P2
                 CC|                            |rguenth at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
We do try to conservatively cost this, but we hit

            /* ???  It can also happen that we end up pulling a def into
               a loop where replacing out-of-loop uses would require
               a new LC SSA PHI node.  Retain the original scalar in
               those cases as well.  PR98064.  */
            if (TREE_CODE (new_tree) == SSA_NAME
                && !SSA_NAME_IS_DEFAULT_DEF (new_tree)
                && (gimple_bb (use_stmt)->loop_father
                    != gimple_bb (vec_stmt)->loop_father)
                && !flow_loop_nested_p (gimple_bb (vec_stmt)->loop_father,
                                        gimple_bb (use_stmt)->loop_father))
              {
                if (dump_enabled_p ())
                  dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
                                   "Using original scalar computation for "
                                   "live lane because there is an out-of-loop "
                                   "definition for it\n");
                continue;

during transform.  Given we do not pre-compute the schedule of vector stmts
on the scalar code we cannot do these verifications during analysis/costing.
That's a long-standing issue.  I bet bisection will hit the PR98064 fix.

Reply via email to