https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117248
--- Comment #4 from John David Anglin <danglin at gcc dot gnu.org> --- The trap doesn't occur with the following change: diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 53f5400a961..112679f8701 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -10573,6 +10573,7 @@ vectorizable_slp_permutation_1 (vec_info *vinfo, gimple_stmt_iterator *gsi, unsigned vnunits = TYPE_VECTOR_SUBPARTS (vtype) .to_constant (); unsigned lane = active_lane[p.first].to_constant (); + gcc_assert (vnunits != 0); unsigned vi = (lane + p.second) / vnunits; unsigned vl = (lane + p.second) % vnunits; vperm.quick_push ({{p.first, vi}, vl}); Need to find out why vnunits is mishandled prior to call to $$divU. It's calculated and put into $r19 in the instruction at 0x40000000014dae44 but the value isn't copied to $r25 for the call.