From 6acd5534ad3ab6208cda68fddb48eb73260d6508 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 3 Sep 2025 11:04:49 +0200 Subject: 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. --- gcc/testsuite/gcc.dg/vect/pr121767.c | 9 +++++++++ gcc/tree-vect-patterns.cc | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr121767.c (limited to 'gcc') diff --git a/gcc/testsuite/gcc.dg/vect/pr121767.c b/gcc/testsuite/gcc.dg/vect/pr121767.c new file mode 100644 index 0000000..3b52692 --- /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 41ca0f0..f5c9724 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); -- cgit v1.1