patch na gcc
Arkadiusz Miskiewicz
misiek w pld.ORG.PL
Sob, 25 Lis 2000, 00:50:44 CET
Jak ktoś ma ochotę to niech sprawdzi czy ów patch naprawia
mu błąd z lkml (Artur, rzuć tu źródełkiem testującym) w gcc
na i386, i486, i586 (i686 jest ok).
U mnie na p166 za długo by się to produkowało.
diff -urN gcc-2.95.2.org/gcc/reload1.c gcc-2.95.2/gcc/reload1.c
--- gcc-2.95.2.org/gcc/reload1.c Sat Nov 25 01:48:15 2000
+++ gcc-2.95.2/gcc/reload1.c Sat Nov 25 01:52:07 2000
@@ -423,6 +423,7 @@
static int reload_reg_reaches_end_p PROTO((int, int, enum reload_type));
static int allocate_reload_reg PROTO((struct insn_chain *, int, int,
int));
+static int conflicts_with_override PROTO((rtx));
static void choose_reload_regs PROTO((struct insn_chain *));
static void merge_assigned_reloads PROTO((rtx));
static void emit_reload_insns PROTO((struct insn_chain *));
@@ -5594,6 +5595,21 @@
return 1;
}
+
+/* Determine whether the reload reg X overlaps any rtx'es used for
+ overriding inheritance. Return nonzero if so. */
+
+static int
+conflicts_with_override (x)
+ rtx x;
+{
+ int i;
+ for (i = 0; i < n_reloads; i++)
+ if (reload_override_in[i]
+ && reg_overlap_mentioned_p (x, reload_override_in[i]))
+ return 1;
+ return 0;
+}
/* Assign hard reg targets for the pseudo-registers we must reload
into hard regs for this insn.
@@ -6791,6 +6807,7 @@
&& dead_or_set_p (insn, old)
/* This is unsafe if some other reload
uses the same reg first. */
+ && ! conflicts_with_override (reloadreg)
&& reload_reg_free_for_value_p (REGNO (reloadreg),
reload_opnum[j],
reload_when_needed[j],
--
Arkadiusz Miśkiewicz, AM2-6BONE [ PLD GNU/Linux IPv6 ]
http://www.t17.ds.pwr.wroc.pl/~misiek/ipv6/ [ enabled ]
Więcej informacji o liście dyskusyjnej pld-devel-pl