commit: 8cda62318174b911a7cba57fcf70efd38f265f0e Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Wed Jul 30 00:44:05 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Wed Jul 30 00:44:48 2025 +0000 URL: https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=8cda6231
16.0.0: update patches Signed-off-by: Sam James <sam <AT> gentoo.org> ...sufficient-alignment-requirement-for-spec.patch | 55 ++++++++-------------- ...ssing-skip-vector-check-for-peeling-with-.patch | 28 ++++++----- 16.0.0/gentoo/README.history | 5 ++ 3 files changed, 39 insertions(+), 49 deletions(-) diff --git a/16.0.0/gentoo/86_all_PR121190-vect-Fix-insufficient-alignment-requirement-for-spec.patch b/16.0.0/gentoo/86_all_PR121190-vect-Fix-insufficient-alignment-requirement-for-spec.patch index 9a03cdd..f05e749 100644 --- a/16.0.0/gentoo/86_all_PR121190-vect-Fix-insufficient-alignment-requirement-for-spec.patch +++ b/16.0.0/gentoo/86_all_PR121190-vect-Fix-insufficient-alignment-requirement-for-spec.patch @@ -1,10 +1,10 @@ https://bugs.gentoo.org/959698 -https://inbox.sourceware.org/gcc-patches/[email protected]/T/#u +https://inbox.sourceware.org/gcc-patches/db3pr08mb89626fa52fea5fb7ace33b19a4...@db3pr08mb8962.eurprd08.prod.outlook.com/ -From e120f6cb794a4d104b37913c918aabe0ae6b2c64 Mon Sep 17 00:00:00 2001 -Message-ID: <e120f6cb794a4d104b37913c918aabe0ae6b2c64.1753106388.git....@gentoo.org> +From f91a62751e8198e6f02c21dffa35ac803b46d048 Mon Sep 17 00:00:00 2001 +Message-ID: <f91a62751e8198e6f02c21dffa35ac803b46d048.1753836047.git....@gentoo.org> From: Pengfei Li <[email protected]> -Date: Mon, 21 Jul 2025 11:02:32 +0000 +Date: Tue, 29 Jul 2025 14:58:18 +0000 Subject: [PATCH 1/2] vect: Fix insufficient alignment requirement for speculative loads [PR121190] @@ -42,9 +42,9 @@ alignment, but the following ones (at offset 32) may not be safe because they could read from the beginning of the next memory page, potentially leading to segmentation faults. -To avoid the issue, this patch increases the alignment requirement for -speculative loads to DR_TARGET_ALIGNMENT. It ensures all vector loads in -the same vector iteration access memory within the same page. +To avoid the issue, this patch increases the alignment requirement to +DR_TARGET_ALIGNMENT. It ensures all vector loads in the same vector +iteration access memory within the same page. This patch is bootstrapped and regression-tested on x86_64-linux-gnu, arm-linux-gnueabihf and aarch64-linux-gnu. @@ -61,20 +61,19 @@ gcc/testsuite/ChangeLog: * gcc.dg/vect/vect-early-break_52.c: Update an unsafe test. * gcc.dg/vect/vect-early-break_137.c-pr121190: New test. --- - .../vect/vect-early-break_137-pr121190.c | 60 +++++++++++++++++++ + .../vect/vect-early-break_137-pr121190.c | 62 +++++++++++++++++++ .../gcc.dg/vect/vect-early-break_52.c | 2 +- - gcc/tree-vect-data-refs.cc | 15 ++++- - 3 files changed, 75 insertions(+), 2 deletions(-) + gcc/tree-vect-data-refs.cc | 3 +- + 3 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/vect-early-break_137-pr121190.c diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_137-pr121190.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_137-pr121190.c new file mode 100644 -index 000000000000..da11146c578e +index 000000000000..e6b071c411cf --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_137-pr121190.c -@@ -0,0 +1,60 @@ +@@ -0,0 +1,62 @@ +/* PR tree-optimization/121190 */ -+/* { dg-do run } */ +/* { dg-options "-O3" } */ +/* { dg-additional-options "-march=znver2" { target x86_64-*-* i?86-*-* } } */ +/* { dg-require-effective-target mmap } */ @@ -85,6 +84,7 @@ index 000000000000..da11146c578e +#include <stdio.h> +#include <sys/mman.h> +#include <unistd.h> ++#include "tree-vect.h" + +#define MAX_COMPARE 5000 + @@ -102,6 +102,8 @@ index 000000000000..da11146c578e + +int main () +{ ++ check_vect (); ++ + long pgsz = sysconf (_SC_PAGESIZE); + if (pgsz == -1) { + fprintf (stderr, "sysconf failed\n"); @@ -144,38 +146,19 @@ index 86a632f2a822..6abfcd6580e4 100644 -/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" { target { ! "x86_64-*-* i?86-*-*" } } } } */ +/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" { target { ! "x86_64-*-* i?86-*-* arm*-*-*" } } } } */ diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc -index a24ddfbc3841..24048086857f 100644 +index e7919b73c258..66217c54b050 100644 --- a/gcc/tree-vect-data-refs.cc +++ b/gcc/tree-vect-data-refs.cc -@@ -2964,12 +2964,25 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) - break; - } - -+ /* Normally, we require DRs to be aligned to the vector mode size. -+ However, this is not sufficient when a statement involves safe -+ speculative read. In such cases, a single scalar load can be -+ vectorized into multiple vector loads in one loop iteration. -+ Even if the first vector load is safe, subsequent loads might -+ still access an invalid memory page. We increase the alignment -+ requirement to prevent this. */ -+ poly_uint64 required_align_size; -+ if (dr_safe_speculative_read_required (stmt_info)) -+ required_align_size = DR_TARGET_ALIGNMENT (dr_info); -+ else -+ required_align_size = GET_MODE_SIZE (TYPE_MODE (vectype)); -+ - /* At present we don't support versioning for alignment - with variable VF, since there's no guarantee that the +@@ -2969,7 +2969,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) VF is a power of two. We could relax this if we added a way of enforcing a power-of-two size. */ unsigned HOST_WIDE_INT size; - if (!GET_MODE_SIZE (TYPE_MODE (vectype)).is_constant (&size)) -+ if (!required_align_size.is_constant (&size)) ++ if (!LOOP_VINFO_VECT_FACTOR (loop_vinfo).is_constant () ++ || !DR_TARGET_ALIGNMENT (dr_info).is_constant (&size)) { do_versioning = false; break; - -base-commit: b441d735c092f5d60c4a9c7167ed9153003d49fa -- 2.50.1 diff --git a/16.0.0/gentoo/87_all_PR121020-vect-Add-missing-skip-vector-check-for-peeling-with-.patch b/16.0.0/gentoo/87_all_PR121020-vect-Add-missing-skip-vector-check-for-peeling-with-.patch index 5aae3a5..c472d5d 100644 --- a/16.0.0/gentoo/87_all_PR121020-vect-Add-missing-skip-vector-check-for-peeling-with-.patch +++ b/16.0.0/gentoo/87_all_PR121020-vect-Add-missing-skip-vector-check-for-peeling-with-.patch @@ -1,12 +1,12 @@ https://bugs.gentoo.org/959698 -https://inbox.sourceware.org/gcc-patches/[email protected]/T/#u +https://inbox.sourceware.org/gcc-patches/db3pr08mb8962138b27178069736147e5a4...@db3pr08mb8962.eurprd08.prod.outlook.com/ -From f66323025c47ba09cee296a8a638cfe63d1bdad3 Mon Sep 17 00:00:00 2001 -Message-ID: <f66323025c47ba09cee296a8a638cfe63d1bdad3.1753106388.git....@gentoo.org> -In-Reply-To: <e120f6cb794a4d104b37913c918aabe0ae6b2c64.1753106388.git....@gentoo.org> -References: <e120f6cb794a4d104b37913c918aabe0ae6b2c64.1753106388.git....@gentoo.org> +From 652f42c43949e64961721b7c78758030a8b9b1e0 Mon Sep 17 00:00:00 2001 +Message-ID: <652f42c43949e64961721b7c78758030a8b9b1e0.1753836047.git....@gentoo.org> +In-Reply-To: <f91a62751e8198e6f02c21dffa35ac803b46d048.1753836047.git....@gentoo.org> +References: <f91a62751e8198e6f02c21dffa35ac803b46d048.1753836047.git....@gentoo.org> From: Pengfei Li <[email protected]> -Date: Mon, 21 Jul 2025 11:06:42 +0000 +Date: Tue, 29 Jul 2025 14:53:46 +0000 Subject: [PATCH 2/2] vect: Add missing skip-vector check for peeling with versioning [PR121020] @@ -45,20 +45,19 @@ gcc/testsuite/ChangeLog: * gcc.dg/vect/vect-early-break_138-pr121020.c: New test. --- - .../vect/vect-early-break_138-pr121020.c | 52 +++++++++++++++++++ + .../vect/vect-early-break_138-pr121020.c | 54 +++++++++++++++++++ gcc/tree-vect-loop-manip.cc | 2 +- gcc/tree-vectorizer.h | 4 ++ - 3 files changed, 57 insertions(+), 1 deletion(-) + 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/vect/vect-early-break_138-pr121020.c diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_138-pr121020.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_138-pr121020.c new file mode 100644 -index 000000000000..86661e445a83 +index 000000000000..8cb62bf5bc93 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_138-pr121020.c -@@ -0,0 +1,52 @@ +@@ -0,0 +1,54 @@ +/* PR tree-optimization/121020 */ -+/* { dg-do run } */ +/* { dg-options "-O3 --vect-cost-model=unlimited" } */ +/* { dg-additional-options "-march=znver2" { target x86_64-*-* i?86-*-* } } */ +/* { dg-require-effective-target mmap } */ @@ -68,6 +67,7 @@ index 000000000000..86661e445a83 +#include <stdio.h> +#include <sys/mman.h> +#include <unistd.h> ++#include "tree-vect.h" + +__attribute__((noipa)) +bool equal (uint64_t *restrict p, uint64_t *restrict q, int length) @@ -81,6 +81,8 @@ index 000000000000..86661e445a83 + +int main () +{ ++ check_vect (); ++ + long pgsz = sysconf (_SC_PAGESIZE); + if (pgsz == -1) { + fprintf (stderr, "sysconf failed\n"); @@ -123,10 +125,10 @@ index 2d01a4b0ed1c..7fcbc1ad2eb8 100644 /* Epilog loop must be executed if the number of iterations for epilog diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h -index 80f8853733de..69428f1747cb 100644 +index 203e5ad964a6..e19002794324 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h -@@ -1168,6 +1168,10 @@ public: +@@ -1197,6 +1197,10 @@ public: || LOOP_REQUIRES_VERSIONING_FOR_NITERS (L) \ || LOOP_REQUIRES_VERSIONING_FOR_SIMD_IF_COND (L)) diff --git a/16.0.0/gentoo/README.history b/16.0.0/gentoo/README.history index 89b8363..c0dd40f 100644 --- a/16.0.0/gentoo/README.history +++ b/16.0.0/gentoo/README.history @@ -1,3 +1,8 @@ +9 ???? + + U 86_all_PR121190-vect-Fix-insufficient-alignment-requirement-for-spec.patch + U 87_all_PR121020-vect-Add-missing-skip-vector-check-for-peeling-with-.patch + 8 30 July 2025 + 86_all_PR121190-vect-Fix-insufficient-alignment-requirement-for-spec.patch
