commit:     5a9a0738452e4387901ed2897e3ebf2a3a551632
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Aug  8 05:42:47 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Aug  8 05:42:58 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5a9a0738

sys-devel/gcc: backport bootstrap fix for 14.0.0_pre20230806

Signed-off-by: Sam James <sam <AT> gentoo.org>

 profiles/package.mask                              |   4 -
 .../gcc-14.0.0_pre20230806-fix-bootstrap.patch     | 105 +++++++++++++++++++++
 ...806.ebuild => gcc-14.0.0_pre20230806-r1.ebuild} |   1 +
 3 files changed, 106 insertions(+), 4 deletions(-)

diff --git a/profiles/package.mask b/profiles/package.mask
index 35593ba85aa8..3935841819f6 100644
--- a/profiles/package.mask
+++ b/profiles/package.mask
@@ -33,10 +33,6 @@
 
 #--- END OF EXAMPLES ---
 
-# Sam James <[email protected]> (2023-07-07)
-# Fails to boostrap: https://gcc.gnu.org/PR110926
-=sys-devel/gcc-14.0.0_pre20230806
-
 # Volkmar W. Pogatzki <[email protected]> (2023-07-05)
 # Library without consumers. Bug #906882
 # Removal on 2023-08-05.

diff --git a/sys-devel/gcc/files/gcc-14.0.0_pre20230806-fix-bootstrap.patch 
b/sys-devel/gcc/files/gcc-14.0.0_pre20230806-fix-bootstrap.patch
new file mode 100644
index 000000000000..5d5747312b69
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-14.0.0_pre20230806-fix-bootstrap.patch
@@ -0,0 +1,105 @@
+https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=af6cfd7b663909688c6ca55b6e9f859cdde4310f
+https://gcc.gnu.org/PR110926
+
+From af6cfd7b663909688c6ca55b6e9f859cdde4310f Mon Sep 17 00:00:00 2001
+From: liuhongt <[email protected]>
+Date: Mon, 7 Aug 2023 11:10:52 +0800
+Subject: [PATCH] Fix ICE in rtl check when bootstrap.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf8
+Content-Transfer-Encoding: 8bit
+
+/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/libgfortran/generated/matmul_i1.c:
 In function âmatmul_i1_avx512fâ:
+/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/libgfortran/generated/matmul_i1.c:1781:1:
 internal compiler error: RTL check: expected elt 0 type 'i' or 'n', have 'w' 
(rtx const_int) in vpternlog_redundant_operand_mask, at 
config/i386/i386.cc:19460
+ 1781 | }
+      | ^
+0x5559de26dc2d rtl_check_failed_type2(rtx_def const*, int, int, int, char 
const*, int, char const*)
+        
/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/gcc/rtl.cc:761
+0x5559de340bfe vpternlog_redundant_operand_mask(rtx_def**)
+        
/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/gcc/config/i386/i386.cc:19460
+0x5559dfec67a6 split_44
+        
/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/gcc/config/i386/sse.md:12730
+0x5559dfec67a6 split_63
+        
/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/gcc/config/i386/sse.md:28428
+0x5559deb8a682 try_split(rtx_def*, rtx_insn*, int)
+        
/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/gcc/emit-rtl.cc:3800
+0x5559deb8adf2 try_split(rtx_def*, rtx_insn*, int)
+        
/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/gcc/emit-rtl.cc:3972
+0x5559def69194 split_insn
+        
/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/gcc/recog.cc:3385
+0x5559def70c57 split_all_insns()
+        
/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/gcc/recog.cc:3489
+0x5559def70d0c execute
+        
/var/tmp/portage/sys-devel/gcc-14.0.0_pre20230806/work/gcc-14-20230806/gcc/recog.cc:4413
+
+Use INTVAL (imm_op) instead of XINT (imm_op, 0).
+
+gcc/ChangeLog:
+
+       PR target/110926
+       * config/i386/i386-protos.h
+       (vpternlog_redundant_operand_mask): Adjust parameter type.
+       * config/i386/i386.cc (vpternlog_redundant_operand_mask): Use
+       INTVAL instead of XINT, also adjust parameter type from rtx*
+       to rtx since the function only needs operands[4] in vpternlog
+       pattern.
+       (substitute_vpternlog_operands): Pass operands[4] instead of
+       operands to vpternlog_redundant_operand_mask.
+       * config/i386/sse.md: Ditto.
+--- a/gcc/config/i386/i386-protos.h
++++ b/gcc/config/i386/i386-protos.h
+@@ -70,7 +70,7 @@ extern machine_mode ix86_cc_mode (enum rtx_code, rtx, rtx);
+ extern int avx_vpermilp_parallel (rtx par, machine_mode mode);
+ extern int avx_vperm2f128_parallel (rtx par, machine_mode mode);
+ 
+-extern int vpternlog_redundant_operand_mask (rtx[]);
++extern int vpternlog_redundant_operand_mask (rtx);
+ extern void substitute_vpternlog_operands (rtx[]);
+ 
+ extern bool ix86_expand_strlen (rtx, rtx, rtx, rtx);
+--- a/gcc/config/i386/i386.cc
++++ b/gcc/config/i386/i386.cc
+@@ -19454,10 +19454,10 @@ avx_vperm2f128_parallel (rtx par, machine_mode mode)
+ /* Return a mask of VPTERNLOG operands that do not affect output.  */
+ 
+ int
+-vpternlog_redundant_operand_mask (rtx *operands)
++vpternlog_redundant_operand_mask (rtx pternlog_imm)
+ {
+   int mask = 0;
+-  int imm8 = XINT (operands[4], 0);
++  int imm8 = INTVAL (pternlog_imm);
+ 
+   if (((imm8 >> 4) & 0x0F) == (imm8 & 0x0F))
+     mask |= 1;
+@@ -19475,7 +19475,7 @@ vpternlog_redundant_operand_mask (rtx *operands)
+ void
+ substitute_vpternlog_operands (rtx *operands)
+ {
+-  int mask = vpternlog_redundant_operand_mask (operands);
++  int mask = vpternlog_redundant_operand_mask (operands[4]);
+ 
+   if (mask & 1) /* The first operand is redundant.  */
+     operands[1] = operands[2];
+--- a/gcc/config/i386/sse.md
++++ b/gcc/config/i386/sse.md
+@@ -12751,7 +12751,7 @@
+          (match_operand:V 3 "memory_operand")
+          (match_operand:SI 4 "const_0_to_255_operand")]
+         UNSPEC_VTERNLOG))]
+-  "!reload_completed && vpternlog_redundant_operand_mask (operands) == 3"
++  "!reload_completed && vpternlog_redundant_operand_mask (operands[4]) == 3"
+   [(set (match_dup 0)
+       (match_dup 3))
+    (set (match_dup 0)
+@@ -12772,7 +12772,7 @@
+          (match_operand:V 3 "nonimmediate_operand")
+          (match_operand:SI 4 "const_0_to_255_operand")]
+         UNSPEC_VTERNLOG))]
+-  "!reload_completed && vpternlog_redundant_operand_mask (operands) != 0"
++  "!reload_completed && vpternlog_redundant_operand_mask (operands[4]) != 0"
+   [(set (match_dup 0)
+       (unspec:V
+         [(match_dup 1)
+-- 
+2.39.3

diff --git a/sys-devel/gcc/gcc-14.0.0_pre20230806.ebuild 
b/sys-devel/gcc/gcc-14.0.0_pre20230806-r1.ebuild
similarity index 97%
rename from sys-devel/gcc/gcc-14.0.0_pre20230806.ebuild
rename to sys-devel/gcc/gcc-14.0.0_pre20230806-r1.ebuild
index 59534d9e96dd..3c3d844369c0 100644
--- a/sys-devel/gcc/gcc-14.0.0_pre20230806.ebuild
+++ b/sys-devel/gcc/gcc-14.0.0_pre20230806-r1.ebuild
@@ -60,5 +60,6 @@ src_prepare() {
 
        toolchain_src_prepare
 
+       eapply "${FILESDIR}"/${P}-fix-bootstrap.patch
        eapply_user
 }

Reply via email to