https://gcc.gnu.org/g:6acd5534ad3ab6208cda68fddb48eb73260d6508
commit r16-3539-g6acd5534ad3ab6208cda68fddb48eb73260d6508 Author: Richard Biener <rguent...@suse.de> Date: Wed Sep 3 11:04:49 2025 +0200 tree-optimization/121767 - modvar pattern breaking reductions The a % b -> a - a / b pattern breaks reduction constraints, disable it for reduction stmts. PR tree-optimization/121767 * tree-vect-patterns.cc (vect_recog_mod_var_pattern): Disable for reductions. * gcc.dg/vect/pr121767.c: New testcase. Diff: --- gcc/testsuite/gcc.dg/vect/pr121767.c | 9 +++++++++ gcc/tree-vect-patterns.cc | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/vect/pr121767.c b/gcc/testsuite/gcc.dg/vect/pr121767.c new file mode 100644 index 000000000000..3b52692a4b49 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr121767.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-mcpu=neoverse-v2" { target aarch64-*-* } } */ + +int foo (int x, int y, int n) +{ + for (int i = 0; i < n; ++i) + x = x % y; + return x; +} diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index 41ca0f085f0e..f5c97242acb6 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -5363,7 +5363,7 @@ vect_recog_mod_var_pattern (vec_info *vinfo, gimple *pattern_stmt, *def_stmt; enum tree_code rhs_code; - if (!is_gimple_assign (last_stmt)) + if (!is_gimple_assign (last_stmt) || vect_is_reduction (stmt_vinfo)) return NULL; rhs_code = gimple_assign_rhs_code (last_stmt);