commit: 6f6875caa8b9fad78e9c816eec0540edd917ea85 Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Wed Jan 21 21:08:57 2026 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Wed Jan 21 21:08:57 2026 +0000 URL: https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=6f6875ca
16.0.0: fix uncountable loop vect Bug: https://bugs.gentoo.org/968163 Bug: https://bugs.gentoo.org/968756 Bug: https://gcc.gnu.org/PR123588 Bug: https://gcc.gnu.org/PR123657 Signed-off-by: Sam James <sam <AT> gentoo.org> 16.0.0/gentoo/88_all_PR123657.patch | 92 +++++++++++++++++++++++++++++++++++++ 16.0.0/gentoo/README.history | 1 + 2 files changed, 93 insertions(+) diff --git a/16.0.0/gentoo/88_all_PR123657.patch b/16.0.0/gentoo/88_all_PR123657.patch new file mode 100644 index 0000000..1f0364b --- /dev/null +++ b/16.0.0/gentoo/88_all_PR123657.patch @@ -0,0 +1,92 @@ +From 2b3586868aff7d40fb411728367f631c246896d1 Mon Sep 17 00:00:00 2001 +Message-ID: <2b3586868aff7d40fb411728367f631c246896d1.1769029705.git....@gentoo.org> +From: Victor Do Nascimento <[email protected]> +Date: Wed, 21 Jan 2026 14:10:13 +0000 +Subject: [PATCH] vect: Fix outer loop vectorization for nested uncounted loops + [PR123657] + +Given the inability of `expr_invariant_in_loop_p (loop, expr)' to +handle the `scev_not_known' node as the expression, an unknown loop +bound in the inner loop in a nested set of loops led to +`vect_analyze_loop_form' to erroneously consider the outer loop as +suitable for vectorization. This introduces the necessary unknown +loop iteration count check to ensure correct handling of counted loops +with an embedded uncounted loop. + +Bootstrapped on AArch64 and x86_64, no regressions. + +gcc/ChangeLog: + + PR tree-optimization/123657 + * tree-vect-loop.cc (vect_analyze_loop_form): Add + chrec_dont_know check. + * tree-ssa-loop-ivopts.cc (expr_invariant_in_loop_p): + likewise. + +gcc/testsuite/ChangeLog: + +* gcc.dg/vect/vect-uncounted-run_4.c (main): New. +--- + .../gcc.dg/vect/vect-uncounted-run_4.c | 17 +++++++++++++++++ + gcc/tree-ssa-loop-ivopts.cc | 4 ++++ + gcc/tree-vect-loop.cc | 3 ++- + 3 files changed, 23 insertions(+), 1 deletion(-) + create mode 100644 gcc/testsuite/gcc.dg/vect/vect-uncounted-run_4.c + +diff --git a/gcc/testsuite/gcc.dg/vect/vect-uncounted-run_4.c b/gcc/testsuite/gcc.dg/vect/vect-uncounted-run_4.c +new file mode 100644 +index 000000000000..f731daf42d95 +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/vect/vect-uncounted-run_4.c +@@ -0,0 +1,17 @@ ++/* Ensure we don't vectorize outer loops when the inner loop is uncounted. */ ++/* { dg-add-options vect_early_break } */ ++/* { dg-require-effective-target vect_early_break_hw } */ ++/* { dg-require-effective-target vect_int } */ ++/* { dg-additional-options "-O3" } */ ++ ++int a; ++int main() { ++ for (int b = 0; b < 21; b++) { ++ int c = b; ++ while (c) ++ a = c >>= 1; ++ } ++ if (a != 0) __builtin_abort(); ++} ++ ++/* { dg-final { scan-tree-dump "missed: not vectorized: inner-loop count not invariant." "vect" } } */ +diff --git a/gcc/tree-ssa-loop-ivopts.cc b/gcc/tree-ssa-loop-ivopts.cc +index 6ecf5bef7b4f..62df570003d3 100644 +--- a/gcc/tree-ssa-loop-ivopts.cc ++++ b/gcc/tree-ssa-loop-ivopts.cc +@@ -1825,6 +1825,10 @@ expr_invariant_in_loop_p (class loop *loop, tree expr) + + gcc_assert (loop_depth (loop) > 0); + ++ /* CHREC_DONT_KNOW treated as invariant and thus, if not checked, ++ misleadingly returns TRUE. */ ++ gcc_assert (expr != chrec_dont_know); ++ + if (is_gimple_min_invariant (expr)) + return true; + +diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc +index c8b9c6268c84..0ce1a85682b7 100644 +--- a/gcc/tree-vect-loop.cc ++++ b/gcc/tree-vect-loop.cc +@@ -1556,7 +1556,8 @@ vect_analyze_loop_form (class loop *loop, gimple *loop_vectorized_call, + return opt_result::failure_at (vect_location, + "not vectorized: Bad inner loop.\n"); + +- if (!expr_invariant_in_loop_p (loop, inner.number_of_iterations)) ++ if (inner.number_of_iterations == chrec_dont_know ++ || !expr_invariant_in_loop_p (loop, inner.number_of_iterations)) + return opt_result::failure_at (vect_location, + "not vectorized: inner-loop count not" + " invariant.\n"); + +base-commit: 59b9ec2d24e60a49d84f874dfe1e947ad1f8ff22 +-- +2.52.0 + diff --git a/16.0.0/gentoo/README.history b/16.0.0/gentoo/README.history index e9424f0..29ced08 100644 --- a/16.0.0/gentoo/README.history +++ b/16.0.0/gentoo/README.history @@ -1,6 +1,7 @@ 33 ???? - 88_all_PR123650-libatomic-symlink.patch + + 88_all_PR123657.patch 32 18 January 2026
