aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2025-09-03 11:04:49 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2025-09-03 13:02:35 +0200
commit6acd5534ad3ab6208cda68fddb48eb73260d6508 (patch)
tree2ffdae4c2bb14acda9ec01515f8d36f225c431c4 /gcc
parent41e2fe9be1ff5ef2eafd49b30882898d26b9bf36 (diff)
downloadgcc-6acd5534ad3ab6208cda68fddb48eb73260d6508.zip
gcc-6acd5534ad3ab6208cda68fddb48eb73260d6508.tar.gz
gcc-6acd5534ad3ab6208cda68fddb48eb73260d6508.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr121767.c9
-rw-r--r--gcc/tree-vect-patterns.cc2
2 files changed, 10 insertions, 1 deletions
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);