[gcc r16-4019] tree-optimization/122023 - rotate pattern with reductions
Richard Biener
rguenth@gcc.gnu.org
Mon Sep 22 09:42:49 GMT 2025
https://gcc.gnu.org/g:32a8a1c26bd0bf340ab4a5138b694d4102290a2e
commit r16-4019-g32a8a1c26bd0bf340ab4a5138b694d4102290a2e
Author: Richard Biener <rguenther@suse.de>
Date: Mon Sep 22 09:41:05 2025 +0200
tree-optimization/122023 - rotate pattern with reductions
The following disables the use of rotate patterns with reductions
since it breaks then single rotate SSA use-def chain constraints.
PR tree-optimization/122023
* tree-vect-patterns.cc (vect_recog_rotate_pattern): Disable
for rotates.
* gcc.dg/vect/pr122023.c: New testcase.
Diff:
---
gcc/testsuite/gcc.dg/vect/pr122023.c | 17 +++++++++++++++++
gcc/tree-vect-patterns.cc | 4 ++++
2 files changed, 21 insertions(+)
diff --git a/gcc/testsuite/gcc.dg/vect/pr122023.c b/gcc/testsuite/gcc.dg/vect/pr122023.c
new file mode 100644
index 000000000000..7555907730f8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr122023.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target int32plus } */
+
+unsigned int gvar1;
+int gvar2;
+void f ()
+{
+ unsigned int temp1;
+ while (gvar1--)
+ {
+ temp1 = gvar2;
+ gvar2 >>= 1;
+ gvar2 &= 2147483647;
+ temp1 <<= 31;
+ gvar2 |= temp1;
+ }
+}
diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
index 70bf768d339d..782327235db1 100644
--- a/gcc/tree-vect-patterns.cc
+++ b/gcc/tree-vect-patterns.cc
@@ -3882,6 +3882,10 @@ vect_recog_rotate_pattern (vec_info *vinfo,
goto use_rotate;
}
+ /* We may not use a reduction operand twice. */
+ if (vect_is_reduction (stmt_vinfo))
+ return NULL;
+
tree utype = unsigned_type_for (type);
tree uvectype = get_vectype_for_scalar_type (vinfo, utype);
if (!uvectype)
More information about the Gcc-cvs
mailing list