diff options
author | Sam James <sam@gentoo.org> | 2023-04-12 08:20:32 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2023-04-12 08:35:03 +0100 |
commit | 989bee28461116343b958e978fe19472fe2ea3cb (patch) | |
tree | fda1f787c6f1410f5a30a1b720d375910774d9bb | |
parent | dev-ruby/nokogiri: add 1.14.3 (diff) | |
download | gentoo-989bee28461116343b958e978fe19472fe2ea3cb.tar.gz gentoo-989bee28461116343b958e978fe19472fe2ea3cb.tar.bz2 gentoo-989bee28461116343b958e978fe19472fe2ea3cb.zip |
sys-devel/gcc: fix SLP returns_twice issue for 13
This fixes a checking (which we now do by default for pre-releases) ICE
for busybox/xdvik, but it's potentially more serious anyway.
Bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109469
Signed-off-by: Sam James <sam@gentoo.org>
-rw-r--r-- | sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109469-SLP-returns-twice.patch | 66 | ||||
-rw-r--r-- | sys-devel/gcc/gcc-13.0.1_pre20230409-r2.ebuild | 57 |
2 files changed, 123 insertions, 0 deletions
diff --git a/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109469-SLP-returns-twice.patch b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109469-SLP-returns-twice.patch new file mode 100644 index 000000000000..7d45c9e60af8 --- /dev/null +++ b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109469-SLP-returns-twice.patch @@ -0,0 +1,66 @@ +https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109469 +https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=2d7ad38707e1fd71193d440198cc0726092b9015 + +From 2d7ad38707e1fd71193d440198cc0726092b9015 Mon Sep 17 00:00:00 2001 +From: Richard Biener <rguenther@suse.de> +Date: Tue, 11 Apr 2023 16:06:12 +0200 +Subject: [PATCH] tree-optimization/109469 - SLP with returns-twice region + start + +The following avoids an SLP region starting with a returns-twice +call where we cannot insert stmts at the head. + + PR tree-optimization/109469 + * tree-vect-slp.cc (vect_slp_function): Skip region starts with + a returns-twice call. + + * gcc.dg/torture/pr109469.c: New testcase. +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/torture/pr109469.c +@@ -0,0 +1,15 @@ ++/* { dg-do compile } */ ++ ++__attribute__((returns_twice)) int foo(); ++ ++struct xio myproc; ++struct xio { ++ void (*read_proc)(); ++ void (*write_proc)(); ++}; ++ ++void dummy_write_proc() { ++ switch (foo()) ++ default: ++ myproc.read_proc = myproc.write_proc = dummy_write_proc; ++} +--- a/gcc/tree-vect-slp.cc ++++ b/gcc/tree-vect-slp.cc +@@ -7671,10 +7671,23 @@ vect_slp_function (function *fun) + { + r |= vect_slp_bbs (bbs, NULL); + bbs.truncate (0); +- bbs.quick_push (bb); + } +- else +- bbs.safe_push (bb); ++ ++ /* We need to be able to insert at the head of the region which ++ we cannot for region starting with a returns-twice call. */ ++ if (bbs.is_empty ()) ++ if (gcall *first = safe_dyn_cast <gcall *> (first_stmt (bb))) ++ if (gimple_call_flags (first) & ECF_RETURNS_TWICE) ++ { ++ if (dump_enabled_p ()) ++ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, ++ "skipping bb%d as start of region as it " ++ "starts with returns-twice call\n", ++ bb->index); ++ continue; ++ } ++ ++ bbs.safe_push (bb); + + /* When we have a stmt ending this block and defining a + value we have to insert on edges when inserting after it for +-- +2.31.1 diff --git a/sys-devel/gcc/gcc-13.0.1_pre20230409-r2.ebuild b/sys-devel/gcc/gcc-13.0.1_pre20230409-r2.ebuild new file mode 100644 index 000000000000..527b71d68608 --- /dev/null +++ b/sys-devel/gcc/gcc-13.0.1_pre20230409-r2.ebuild @@ -0,0 +1,57 @@ +# 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_user +} |