aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr97835.c21
-rw-r--r--gcc/tree-vect-loop.c2
2 files changed, 22 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/pr97835.c b/gcc/testsuite/gcc.dg/vect/pr97835.c
new file mode 100644
index 0000000..5ca477b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr97835.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+struct co {
+ int gx;
+ int ty;
+};
+
+void
+x0 (struct co *yy, long int kc, int wi, int md)
+{
+ while (wi < 1)
+ {
+ yy[wi].gx = md;
+ yy[wi].ty = wi;
+ md += kc;
+ ++wi;
+ }
+}
+
+/* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" } } */
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 39b7319..4d5532f 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -7999,6 +7999,7 @@ vectorizable_induction (loop_vec_info loop_vinfo,
{
/* The scalar steps of the IVs. */
tree elt = steps[(ivn*const_nunits + eltn) % group_size];
+ elt = gimple_convert (&init_stmts, TREE_TYPE (step_vectype), elt);
step_elts.quick_push (elt);
if (!init_node)
{
@@ -8018,7 +8019,6 @@ vectorizable_induction (loop_vec_info loop_vinfo,
: build_int_cstu (stept, mul_elt));
}
vec_step = gimple_build_vector (&init_stmts, &step_elts);
- vec_step = gimple_convert (&init_stmts, step_vectype, vec_step);
vec_steps.safe_push (vec_step);
tree step_mul = gimple_build_vector (&init_stmts, &mul_elts);
if (peel_mul)