https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101340
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Patch that breaks for example gfortran.dg/PR100120.f90 because it expands multi-uses inside a chain: diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 2813b3dbe91..0c93be8e4d5 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -1491,7 +1491,11 @@ vect_slp_linearize_chain (vec_info *vinfo, gimple *use_stmt; use_operand_p use_p; if (dt == vect_internal_def - && single_imm_use (op, &use_p, &use_stmt) + /* For the loop SLP discovery case associate across multiple + uses as well, for BB vect avoid this since live lane + handling is not good enough yet. */ + && (is_a <loop_vec_info> (vinfo) + || single_imm_use (op, &use_p, &use_stmt)) && is_gimple_assign (def_stmt_info->stmt) && (gimple_assign_rhs_code (def_stmt_info->stmt) == code || (code == PLUS_EXPR