https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117556
Bug ID: 117556 Summary: gcc.dg/vect/vect-live-slp-3.c fails to SLP with variable-length vectors Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org Target Milestone: --- gcc.dg/vect/vect-live-slp-3.c:31:1: missed: Cannot determine which vector holds the final result. gcc.dg/vect/vect-live-slp-3.c:31:1: missed: not vectorized: live stmt not supported: n0_29 = *_4; gcc.dg/vect/vect-live-slp-3.c:31:1: note: unsupported SLP instance starting from: *_14 = _15; on aarch64 with SVE we fall back to AdvSIMD, with RISC-V we fall back to fixed length modes. With --param vect-force-slp=0 we can use VLA vectors. The above is bool vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, slp_tree slp_node, slp_instance slp_node_instance, int slp_index, bool vec_stmt_p, stmt_vector_for_cost *cost_vec) { ... /* Calculate which vector contains the result, and which lane of that vector we need. */ if (!can_div_trunc_p (pos, nunits, &vec_entry, &vec_index)) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, "Cannot determine which vector holds the" " final result.\n"); return false; } I suppose for single-lane SLP this can possibly be relaxed.