tree-optimization/127195 - ICE with vect_create_constant_vectors

With excess lanes present we miscount the number of copies of the
SLP elements which eventually results in ctor_seq stmts not being
emitted.

	PR tree-optimization/127195
	* tree-vect-slp.cc (vect_create_constant_vectors):
	Properly compute number_of_copies, assert we end up
	on a vector boundary.

	* gcc.dg/vect/vect-pr127195.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/vect/vect-pr127195.c b/gcc/testsuite/gcc.dg/vect/vect-pr127195.c
new file mode 100644
index 0000000..57da05e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-pr127195.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+
+typedef struct {
+  unsigned bold : 1;
+  unsigned : 16;
+} vbi_char;
+typedef struct {
+  vbi_char text[];
+} vbi_page;
+vbi_page enhance_pg;
+vbi_char *enhance_acp = &enhance_pg.text[1];
+int enhance_col, enhance_column;
+void enhance()
+{
+  for (;;) {
+    int bold;
+    enhance_col = enhance_column;
+    for (; enhance_col; enhance_col++)
+      enhance_acp[enhance_col].bold = bold;
+  }
+}
diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index ae6511c..3cfc36f 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -10969,7 +10969,7 @@
   if (!TYPE_VECTOR_SUBPARTS (vector_type).is_constant (&nunits))
     nunits = group_size;
 
-  number_of_copies = nunits * number_of_vectors / group_size;
+  number_of_copies = (nunits * number_of_vectors - excess_elts) / group_size;
 
   constant_p = true;
   tree uniform_elt = NULL_TREE;
@@ -11121,6 +11121,8 @@
         }
     }
 
+  gcc_assert (number_of_places_left_in_vector == nunits);
+
   /* Since the vectors are created in the reverse order, we should invert
      them.  */
   vec_num = voprnds.length ();