diff --git a/gcc/testsuite/gcc.dg/pr123656.c b/gcc/testsuite/gcc.dg/pr123656.c new file mode 100644 index 00000000000..98439857c49 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr123656.c @@ -0,0 +1,21 @@ +/* PR tree-optimization/123656 */ +/* { dg-do run } */ +/* { dg-options "-Og -Wno-psabi" } */ + +#define C 210 + +typedef __attribute__((__vector_size__ (2))) unsigned char V; + +V +foo (V v) +{ + return v * C; +} + +int +main () +{ + V x = foo ((V) {1, 1}); + if (x[0] != C || x[1] != C) + __builtin_abort (); +} diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc index d34d2c5fa48..77066bbb2e1 100644 --- a/gcc/tree-vect-generic.cc +++ b/gcc/tree-vect-generic.cc @@ -643,9 +643,9 @@ expand_vector_mult (gimple_stmt_iterator *gsi, tree type, tree op0, LSHIFT_EXPR); break; case alg_add_t_m2: - tmp_var = add_shift (gsi, vectype, op0, shifts, LSHIFT_EXPR); + tmp_var = add_shift (gsi, vectype, op0, shifts, LSHIFT_EXPR); accumulator = gimplify_build2 (gsi, PLUS_EXPR, vectype, tmp_var, - accumulator); + accumulator); break; case alg_sub_t_m2: tmp_var = add_shift (gsi, vectype, op0, shifts, LSHIFT_EXPR); @@ -674,7 +674,7 @@ expand_vector_mult (gimple_stmt_iterator *gsi, tree type, tree op0, tmp_var = add_shift (gsi, vectype, accumulator, shifts, LSHIFT_EXPR); accumulator = gimplify_build2 (gsi, MINUS_EXPR, vectype, - accumulator, tmp_var); + tmp_var, accumulator); break; default: gcc_unreachable ();