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