commit:     efd15a6fa5db222c80ae272f77ae229340e4fb20
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Wed Apr 12 13:20:36 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Apr 12 13:23:23 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=efd15a6f

sys-devel/gcc: backport two more patches for 13 (checking ICE + Clang 
miscompilation)

First fix is a checking ICE. As we're new to handling checking (see previous 
commits),
these are generally a sign of possible wrong-code/miscompilation, so it's nice
when checking flags it up and turns the issue into an ICE. So, don't be fooled
by the ICE part.

Second is a miscompilation of Clang which leads to a test failure.

I wouldn't normally backport so many of these, but they're all things we've
found through testing in Gentoo over the last few days, and it's especially
important given GCC 13 is imminent.

Bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109473
Bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109462
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...-clang-LocalizationChecker-ranger-any-PHI.patch | 46 +++++++++++++++++
 ...pre20230409-PR109473-ICE-reduction-epilog.patch | 58 +++++++++++++++++++++
 sys-devel/gcc/gcc-13.0.1_pre20230409-r4.ebuild     | 60 ++++++++++++++++++++++
 3 files changed, 164 insertions(+)

diff --git 
a/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109462-clang-LocalizationChecker-ranger-any-PHI.patch
 
b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109462-clang-LocalizationChecker-ranger-any-PHI.patch
new file mode 100644
index 000000000000..2b5ea5ad826a
--- /dev/null
+++ 
b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109462-clang-LocalizationChecker-ranger-any-PHI.patch
@@ -0,0 +1,46 @@
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109462
+https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=24af552876eff707f75d30d3f0f0e7a5d62dd857
+
+From 24af552876eff707f75d30d3f0f0e7a5d62dd857 Mon Sep 17 00:00:00 2001
+From: Andrew MacLeod <[email protected]>
+Date: Tue, 11 Apr 2023 17:29:03 -0400
+Subject: [PATCH] Don't use ANY PHI equivalences in range-on-entry.
+
+PR 108139 dissallows PHI equivalencies in the on-entry calculator, but
+it was only checking if the equivlaence was a PHI.  In this case, NAME
+itself is a PHI with an equivlaence caused by an undefined value, so we
+also need to check that case.  Unfortunately this un-fixes 101912.
+
+       PR tree-optimization/109462
+       gcc/
+       * gimple-range-cache.cc (ranger_cache::fill_block_cache): Don't
+       check for equivalences if NAME is a phi node.
+
+       gcc/testsuite/
+       * gcc.dg/uninit-pr101912.c: XFAIL the warning.
+--- a/gcc/gimple-range-cache.cc
++++ b/gcc/gimple-range-cache.cc
+@@ -1218,7 +1218,9 @@ ranger_cache::fill_block_cache (tree name, basic_block 
bb, basic_block def_bb)
+         fprintf (dump_file, "\n");
+       }
+       // See if any equivalences can refine it.
+-      if (m_oracle)
++      // PR 109462, like 108139 below, a one way equivalence introduced
++      // by a PHI node can also be through the definition side.  Disallow it.
++      if (m_oracle && !is_a<gphi *> (SSA_NAME_DEF_STMT (name)))
+       {
+         tree equiv_name;
+         relation_kind rel;
+--- a/gcc/testsuite/gcc.dg/uninit-pr101912.c
++++ b/gcc/testsuite/gcc.dg/uninit-pr101912.c
+@@ -11,7 +11,7 @@ tzloadbody (void)
+   for (int i = 0; i < n; i++)
+     {
+       int corr = getint ();
+-      if (corr < 1 || (corr == 1 && !(leapcnt == 0 || (prevcorr < corr ? corr 
== prevcorr + 1 : (corr == prevcorr || corr == prevcorr - 1))))) /* { dg-bogus 
"uninitialized" } */
++      if (corr < 1 || (corr == 1 && !(leapcnt == 0 || (prevcorr < corr ? corr 
== prevcorr + 1 : (corr == prevcorr || corr == prevcorr - 1))))) /* { dg-bogus 
"uninitialized" "pr101912" { xfail *-*-* } } */
+       return -1;
+ 
+       prevcorr = corr;
+-- 
+2.31.1

diff --git 
a/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109473-ICE-reduction-epilog.patch
 
b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109473-ICE-reduction-epilog.patch
new file mode 100644
index 000000000000..cab26653a09d
--- /dev/null
+++ 
b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109473-ICE-reduction-epilog.patch
@@ -0,0 +1,58 @@
+https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=df7f55cb2ae550adeda339a57b657ebe1ad39367
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109473
+
+From df7f55cb2ae550adeda339a57b657ebe1ad39367 Mon Sep 17 00:00:00 2001
+From: Richard Biener <[email protected]>
+Date: Wed, 12 Apr 2023 10:22:08 +0200
+Subject: [PATCH] tree-optimization/109473 - ICE with reduction epilog
+ adjustment op
+
+The following makes sure to carry out the reduction epilog adjustment
+in the original computation type which for pointers is an unsigned
+integer type.  There's a similar issue with signed vs. unsigned ops
+and overflow which is fixed by this as well.
+
+       PR tree-optimization/109473
+       * tree-vect-loop.cc (vect_create_epilog_for_reduction):
+       Convert scalar result to the computation type before performing
+       the reduction adjustment.
+
+       * gcc.dg/vect/pr109473.c: New testcase.
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/vect/pr109473.c
+@@ -0,0 +1,16 @@
++/* { dg-do compile } */
++/* { dg-additional-options "-O" } */
++
++struct spa_buffer {
++  __UINT32_TYPE__ *metas;
++};
++void do_port_use_buffers(struct spa_buffer **buffers, void *endptr, void *mem)
++{
++  for (int i = 0; i < 128; i++)
++    {
++      for (int j = 0; j < 128; j++)
++      endptr = (void *)((__UINTPTR_TYPE__)endptr + buffers[i]->metas[j]);
++      if (endptr > mem)
++      return;
++    }
++}
+--- a/gcc/tree-vect-loop.cc
++++ b/gcc/tree-vect-loop.cc
+@@ -6297,9 +6297,12 @@ vect_create_epilog_for_reduction (loop_vec_info 
loop_vinfo,
+       {
+           new_temp = scalar_results[0];
+         gcc_assert (TREE_CODE (TREE_TYPE (adjustment_def)) != VECTOR_TYPE);
+-        adjustment_def = gimple_convert (&stmts, scalar_type, adjustment_def);
+-        new_temp = gimple_build (&stmts, code, scalar_type,
++        adjustment_def = gimple_convert (&stmts, TREE_TYPE (vectype),
++                                         adjustment_def);
++        new_temp = gimple_convert (&stmts, TREE_TYPE (vectype), new_temp);
++        new_temp = gimple_build (&stmts, code, TREE_TYPE (vectype),
+                                  new_temp, adjustment_def);
++        new_temp = gimple_convert (&stmts, scalar_type, new_temp);
+       }
+ 
+       epilog_stmt = gimple_seq_last_stmt (stmts);
+-- 
+2.31.1

diff --git a/sys-devel/gcc/gcc-13.0.1_pre20230409-r4.ebuild 
b/sys-devel/gcc/gcc-13.0.1_pre20230409-r4.ebuild
new file mode 100644
index 000000000000..f1ae324ca919
--- /dev/null
+++ b/sys-devel/gcc/gcc-13.0.1_pre20230409-r4.ebuild
@@ -0,0 +1,60 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+TOOLCHAIN_PATCH_DEV="sam"
+PATCH_VER="9"
+PATCH_GCC_VER="13.1.0"
+MUSL_VER="1"
+MUSL_GCC_VER="13.1.0"
+
+if [[ $(ver_cut 3) == 9999 ]] ; then
+       MY_PV_2=$(ver_cut 2)
+       MY_PV_3=$(($(ver_cut 3) - 9998))
+       if [[ ${MY_PV_2} == 0 ]] ; then
+               MY_PV_2=0
+               MY_PV_3=0
+       else
+               MY_PV_2=$(($(ver_cut 2) - 1))
+       fi
+
+       # e.g. 12.2.9999 -> 12.1.1
+       TOOLCHAIN_GCC_PV=$(ver_cut 1).${MY_PV_2}.${MY_PV_3}
+fi
+
+inherit toolchain
+# Needs to be after inherit (for now?), bug #830908
+EGIT_BRANCH=master
+
+# Don't keyword live ebuilds
+if ! tc_is_live && [[ -z ${TOOLCHAIN_USE_GIT_PATCHES} ]] ; then
+#      KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc 
~ppc64 ~riscv ~s390 ~sparc ~x86"
+       KEYWORDS="~loong"
+fi
+
+if [[ ${CATEGORY} != cross-* ]] ; then
+       # Technically only if USE=hardened *too* right now, but no point in 
complicating it further.
+       # If GCC is enabling CET by default, we need glibc to be built with 
support for it.
+       # bug #830454
+       RDEPEND="elibc_glibc? ( sys-libs/glibc[cet(-)?] )"
+       DEPEND="${RDEPEND}"
+       BDEPEND=">=${CATEGORY}/binutils-2.30[cet(-)?]"
+fi
+
+src_prepare() {
+       local p upstreamed_patches=(
+               # add them here
+       )
+       for p in "${upstreamed_patches[@]}"; do
+               rm -v "${WORKDIR}/patch/${p}" || die
+       done
+
+       toolchain_src_prepare
+
+       eapply "${FILESDIR}"/${P}-PR109469-SLP-returns-twice.patch
+       eapply "${FILESDIR}"/${P}-PR109434-DSE-throw.patch
+       eapply "${FILESDIR}"/${P}-PR109473-ICE-reduction-epilog.patch
+       eapply 
"${FILESDIR}"/${P}-PR109462-clang-LocalizationChecker-ranger-any-PHI.patch
+       eapply_user
+}

Reply via email to