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.