aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2024-02-13 11:16:25 +0000
committerSam James <sam@gentoo.org>2024-02-13 11:17:03 +0000
commit62e7698eec17981d7d48b5f248a100149fe41514 (patch)
tree5b25084e1977e293d31f9c8d52f56ad385c1cd56
parent14.0.0: drop upstream patches (diff)
downloadgcc-patches-62e7698eec17981d7d48b5f248a100149fe41514.tar.gz
gcc-patches-62e7698eec17981d7d48b5f248a100149fe41514.tar.bz2
gcc-patches-62e7698eec17981d7d48b5f248a100149fe41514.zip
14.0.0: add 75_all_PR113734_middle_end_update_vector_loop_bounds.patch
Bug: https://gcc.gnu.org/PR113734 Signed-off-by: Sam James <sam@gentoo.org>
-rw-r--r--14.0.0/gentoo/75_all_PR113734_middle_end_update_vector_loop_bounds.patch93
-rw-r--r--14.0.0/gentoo/README.history4
2 files changed, 97 insertions, 0 deletions
diff --git a/14.0.0/gentoo/75_all_PR113734_middle_end_update_vector_loop_bounds.patch b/14.0.0/gentoo/75_all_PR113734_middle_end_update_vector_loop_bounds.patch
new file mode 100644
index 0000000..dcc52df
--- /dev/null
+++ b/14.0.0/gentoo/75_all_PR113734_middle_end_update_vector_loop_bounds.patch
@@ -0,0 +1,93 @@
+https://gcc.gnu.org/PR113734
+
+From 491e57451df47cda88f658601a92d6d006ae09d7 Mon Sep 17 00:00:00 2001
+From: Tamar Christina <tamar.christina@arm.com>
+Date: Tue, 13 Feb 2024 11:04:38 +0000
+Subject: [PATCH] middle-end: update vector loop upper bounds when early break
+ vect [PR113734]
+
+When doing early break vectorization we should treat the final iteration as
+possibly being partial. This so that when we calculate the vector loop upper
+bounds we take into account that final iteration could have done some work.
+
+The attached testcase shows that if we don't then cunroll may unroll the loop an
+if the upper bound is wrong we lose a vector iteration.
+
+This is similar to how we adjust the scalar loop bounds for the PEELED case.
+
+gcc/ChangeLog:
+
+ PR tree-optimization/113734
+ * tree-vect-loop.cc (vect_transform_loop): Treat the final iteration of
+ an early break loop as partial.
+
+gcc/testsuite/ChangeLog:
+
+ PR tree-optimization/113734
+ * gcc.dg/vect/vect-early-break_117-pr113734.c: New test.
+---
+ .../vect/vect-early-break_117-pr113734.c | 37 +++++++++++++++++++
+ gcc/tree-vect-loop.cc | 3 +-
+ 2 files changed, 39 insertions(+), 1 deletion(-)
+ create mode 100644 gcc/testsuite/gcc.dg/vect/vect-early-break_117-pr113734.c
+
+diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_117-pr113734.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_117-pr113734.c
+new file mode 100644
+index 000000000000..36ae09483dfd
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_117-pr113734.c
+@@ -0,0 +1,37 @@
++/* { dg-add-options vect_early_break } */
++/* { dg-require-effective-target vect_early_break_hw } */
++/* { dg-require-effective-target vect_int } */
++/* { dg-additional-options "-O3" } */
++
++/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */
++
++#include "tree-vect.h"
++
++#define N 306
++#define NEEDLE 136
++
++int table[N];
++
++__attribute__ ((noipa))
++int foo (int i, unsigned short parse_tables_n)
++{
++ parse_tables_n >>= 9;
++ parse_tables_n += 11;
++ while (i < N && parse_tables_n--)
++ table[i++] = 0;
++
++ return table[NEEDLE];
++}
++
++int main ()
++{
++ check_vect ();
++
++ for (int j = 0; j < N; j++)
++ table[j] = -1;
++
++ if (foo (0, 0xFFFF) != 0)
++ __builtin_abort ();
++
++ return 0;
++}
+diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
+index 04f4b5b6b2fa..367077965fd9 100644
+--- a/gcc/tree-vect-loop.cc
++++ b/gcc/tree-vect-loop.cc
+@@ -12174,7 +12174,8 @@ vect_transform_loop (loop_vec_info loop_vinfo, gimple *loop_vectorized_call)
+ /* True if the final iteration might not handle a full vector's
+ worth of scalar iterations. */
+ bool final_iter_may_be_partial
+- = LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo);
++ = LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo)
++ || LOOP_VINFO_EARLY_BREAKS (loop_vinfo);
+ /* The minimum number of iterations performed by the epilogue. This
+ is 1 when peeling for gaps because we always need a final scalar
+ iteration. */
+--
+2.43.1
+
diff --git a/14.0.0/gentoo/README.history b/14.0.0/gentoo/README.history
index c175cb7..8cfb3c2 100644
--- a/14.0.0/gentoo/README.history
+++ b/14.0.0/gentoo/README.history
@@ -1,3 +1,7 @@
+22 13 Feb 2024
+
+ + 75_all_PR113734_middle_end_update_vector_loop_bounds.patch
+
21 12 Feb 2024
- 75_all_PR113731_fix-ICE-when-moving-statements-to-empty-B.patch