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