From: Richard Biener Date: Wed, 3 Sep 2025 09:04:49 +0000 (+0200) Subject: tree-optimization/121767 - modvar pattern breaking reductions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6acd5534ad3ab6208cda68fddb48eb73260d6508;p=thirdparty%2Fgcc.git 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 --git a/gcc/testsuite/gcc.dg/vect/pr121767.c b/gcc/testsuite/gcc.dg/vect/pr121767.c new file mode 100644 index 00000000000..3b52692a4b4 --- /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 41ca0f085f0..f5c97242acb 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);