diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr97835.c | 21 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 2 |
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) |