patches/gcc/4.0.0/130-pr20973-fix.patch
changeset 1617 7d70bcf940a9
parent 1602 1ba79f2126df
parent 1616 1fda13e5d961
child 1618 7f52e1cca71e
     1.1 --- a/patches/gcc/4.0.0/130-pr20973-fix.patch	Wed Oct 28 12:03:38 2009 +0100
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,80 +0,0 @@
     1.4 -http://gcc.gnu.org/PR20973
     1.5 -
     1.6 -"gcc 4 (about RC1) miscompiles khtml, in fact something in CSS, which basically 
     1.7 -leads to all websites being misrendered.  I can't easily reduce the testcase, 
     1.8 -but have applied the whole preprocessed source of css/cssstyleselector.ii. 
     1.9 - 
    1.10 -It is to be compiled with g++ -O2 -fPIC -march=i586 -mtune=i686 
    1.11 --fno-exceptions.  A more detailed analysis will follow, as we've found out 
    1.12 -some things already."
    1.13 -
    1.14 ----
    1.15 -
    1.16 -Subject: Bug 20973
    1.17 -
    1.18 -CVSROOT:	/cvs/gcc
    1.19 -Module name:	gcc
    1.20 -Branch: 	gcc-4_0-branch
    1.21 -Changes by:	matz@gcc.gnu.org	2005-04-22 17:30:21
    1.22 -
    1.23 -Modified files:
    1.24 -	gcc            : ChangeLog reload.c 
    1.25 -
    1.26 -Log message:
    1.27 -	PR middle-end/20973
    1.28 -	* reload.c (push_reload, find_dummy_reload): Check for uninitialized
    1.29 -	pseudos.
    1.30 -
    1.31 -Patches:
    1.32 -http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=2.7592.2.177&r2=2.7592.2.178
    1.33 -http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/reload.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.268&r2=1.268.2.1
    1.34 -
    1.35 ----
    1.36 -
    1.37 -===================================================================
    1.38 -RCS file: /cvs/gcc/gcc/gcc/reload.c,v
    1.39 -retrieving revision 1.268
    1.40 -retrieving revision 1.268.2.1
    1.41 -diff -u -r1.268 -r1.268.2.1
    1.42 ---- gcc/gcc/reload.c	2005/02/24 22:06:06	1.268
    1.43 -+++ gcc/gcc/reload.c	2005/04/22 17:30:15	1.268.2.1
    1.44 -@@ -1520,7 +1520,7 @@
    1.45 -      But if there is no spilling in this block, that is OK.
    1.46 -      An explicitly used hard reg cannot be a spill reg.  */
    1.47 - 
    1.48 --  if (rld[i].reg_rtx == 0 && in != 0)
    1.49 -+  if (rld[i].reg_rtx == 0 && in != 0 && hard_regs_live_known)
    1.50 -     {
    1.51 -       rtx note;
    1.52 -       int regno;
    1.53 -@@ -1534,6 +1534,11 @@
    1.54 - 	    && REG_P (XEXP (note, 0))
    1.55 - 	    && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER
    1.56 - 	    && reg_mentioned_p (XEXP (note, 0), in)
    1.57 -+	    /* Check that we don't use a hardreg for an uninitialized
    1.58 -+	       pseudo.  See also find_dummy_reload().  */
    1.59 -+	    && (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
    1.60 -+		|| ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,
    1.61 -+				   ORIGINAL_REGNO (XEXP (note, 0))))
    1.62 - 	    && ! refers_to_regno_for_reload_p (regno,
    1.63 - 					       (regno
    1.64 - 						+ hard_regno_nregs[regno]
    1.65 -@@ -1997,7 +2002,17 @@
    1.66 - 				is a subreg, and in that case, out
    1.67 - 				has a real mode.  */
    1.68 - 			     (GET_MODE (out) != VOIDmode
    1.69 --			      ? GET_MODE (out) : outmode)))
    1.70 -+			      ? GET_MODE (out) : outmode))
    1.71 -+        /* But only do all this if we can be sure, that this input
    1.72 -+           operand doesn't correspond with an uninitialized pseudoreg.
    1.73 -+           global can assign some hardreg to it, which is the same as
    1.74 -+	   a different pseudo also currently live (as it can ignore the
    1.75 -+	   conflict).  So we never must introduce writes to such hardregs,
    1.76 -+	   as they would clobber the other live pseudo using the same.
    1.77 -+	   See also PR20973.  */
    1.78 -+      && (ORIGINAL_REGNO (in) < FIRST_PSEUDO_REGISTER
    1.79 -+          || ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,
    1.80 -+			     ORIGINAL_REGNO (in))))
    1.81 -     {
    1.82 -       unsigned int regno = REGNO (in) + in_offset;
    1.83 -       unsigned int nwords = hard_regno_nregs[regno][inmode];