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.

Reply via email to