commit:     284718dfe07c28b377f17322406590ca6a4feaf4
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Feb  9 15:45:19 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Feb  9 15:45:19 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=284718df

sys-devel/gcc: fix vectoriser miscompile in last snapshot

Bug: https://gcc.gnu.org/PR124034
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...zation-124034-remove-early-break-special-.patch | 79 ++++++++++++++++++++++
 ...60208.ebuild => gcc-16.0.1_p20260208-r1.ebuild} |  1 +
 2 files changed, 80 insertions(+)

diff --git 
a/sys-devel/gcc/files/0001-tree-optimization-124034-remove-early-break-special-.patch
 
b/sys-devel/gcc/files/0001-tree-optimization-124034-remove-early-break-special-.patch
new file mode 100644
index 000000000000..0e94fc35b282
--- /dev/null
+++ 
b/sys-devel/gcc/files/0001-tree-optimization-124034-remove-early-break-special-.patch
@@ -0,0 +1,79 @@
+From bbb15fd5c8a561075f4a6c71eb1f03ad6c08c5ea Mon Sep 17 00:00:00 2001
+Message-ID: 
<bbb15fd5c8a561075f4a6c71eb1f03ad6c08c5ea.1770651580.git....@gentoo.org>
+From: Richard Biener <[email protected]>
+Date: Mon, 9 Feb 2026 10:53:01 +0100
+Subject: [PATCH] tree-optimization/124034 - remove early-break special-casing
+ of inductions
+
+After recent improvements to how we deal with early-break requirements
+of induction variable updates we no longer need to force induction
+latch defs relevant.  This in turn makes only-live defs visible to
+SLP discovery, resolving the miscompilation in this PR.
+
+       PR tree-optimization/124034
+       * tree-vect-stmts.cc (process_use): Never force induction
+       latch defs relevant when doing early break vectorization.
+
+       * gcc.dg/vect/vect-early-break_142-pr124034.c: New testcase.
+---
+ .../vect/vect-early-break_142-pr124034.c      | 31 +++++++++++++++++++
+ gcc/tree-vect-stmts.cc                        |  5 +--
+ 2 files changed, 32 insertions(+), 4 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.dg/vect/vect-early-break_142-pr124034.c
+
+diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_142-pr124034.c 
b/gcc/testsuite/gcc.dg/vect/vect-early-break_142-pr124034.c
+new file mode 100644
+index 000000000000..4834544eeae7
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_142-pr124034.c
+@@ -0,0 +1,31 @@
++/* { dg-add-options vect_early_break } */
++
++#include "tree-vect.h"
++
++__attribute__((noipa))
++static 
++long
++memeqbyte (char byte, void *data, long length)
++{
++  char *p = data;
++  for (long i = 0; i < 16; i++, length--)
++    {
++      if (length == 0)
++        return 0;
++      if (p[i] != byte)
++        return 0;
++    }
++  return length;
++}
++
++#define n 16
++
++int
++main ()
++{
++  char iov[n];
++  check_vect ();
++  __builtin_memset (iov, 'x', n);
++  if (memeqbyte('x', iov, n))
++   __builtin_abort();
++}
+diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
+index e7d6b4c123af..77f6d7a639ae 100644
+--- a/gcc/tree-vect-stmts.cc
++++ b/gcc/tree-vect-stmts.cc
+@@ -644,10 +644,7 @@ process_use (stmt_vec_info stmt_vinfo, tree use, 
loop_vec_info loop_vinfo,
+          && STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_induction_def
+          && (PHI_ARG_DEF_FROM_EDGE (stmt_vinfo->stmt,
+                                     loop_latch_edge (bb->loop_father))
+-             == use)
+-         && (!LOOP_VINFO_EARLY_BREAKS (loop_vinfo)
+-             || (gimple_bb (stmt_vinfo->stmt)
+-                 != LOOP_VINFO_LOOP (loop_vinfo)->header)))
++             == use))
+     {
+       if (dump_enabled_p ())
+       dump_printf_loc (MSG_NOTE, vect_location,
+-- 
+2.53.0
+

diff --git a/sys-devel/gcc/gcc-16.0.1_p20260208.ebuild 
b/sys-devel/gcc/gcc-16.0.1_p20260208-r1.ebuild
similarity index 94%
rename from sys-devel/gcc/gcc-16.0.1_p20260208.ebuild
rename to sys-devel/gcc/gcc-16.0.1_p20260208-r1.ebuild
index 7fd2cd5fad8b..47c25b42c5aa 100644
--- a/sys-devel/gcc/gcc-16.0.1_p20260208.ebuild
+++ b/sys-devel/gcc/gcc-16.0.1_p20260208-r1.ebuild
@@ -52,5 +52,6 @@ src_prepare() {
 
        toolchain_src_prepare
        eapply "${FILESDIR}"/${PN}-13-fix-cross-fixincludes.patch
+       eapply 
"${FILESDIR}"/0001-tree-optimization-124034-remove-early-break-special-.patch
        eapply_user
 }

Reply via email to