From: Richard Biener Date: Mon, 22 Sep 2025 07:41:05 +0000 (+0200) Subject: tree-optimization/122023 - rotate pattern with reductions X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=32a8a1c26bd0bf340ab4a5138b694d4102290a2e;p=thirdparty%2Fgcc.git 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 --git a/gcc/testsuite/gcc.dg/vect/pr122023.c b/gcc/testsuite/gcc.dg/vect/pr122023.c new file mode 100644 index 00000000000..7555907730f --- /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 70bf768d339..782327235db 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)