source: patches/gcc-4.0.0-reload_check_uninitialized_pseudos_PR20973.patch@ e38d58c

clfs-1.2 clfs-2.1 clfs-3.0.0-systemd clfs-3.0.0-sysvinit systemd sysvinit
Last change on this file since e38d58c was 617118d, checked in by Jim Gifford <clfs@…>, 19 years ago

r561@server (orig r559): root | 2005-06-05 02:38:49 -0700
Fixed Directory Structure

  • Property mode set to 100644
File size: 2.3 KB
  • gcc/gcc/reload.c

    Submitted by: Ryan Oliver <ryan.oliver@pha.com.au>
    Source: http://gcc.gnu.org/ml/gcc-cvs/2005-04/msg01085.html
    Initial Package Version: 4.0.0
    Upstream Status: In gcc4 mainline
    Description:
    
    2005-04-20  Michael Matz  <matz@suse.de>
    
           PR20973
           * reload.c (push_reload, find_dummy_reload): Check for uninitialized
           pseudos.
    
    RCS file: /cvs/gcc/gcc/gcc/reload.c,v
    retrieving revision 1.268
    retrieving revision 1.269
    diff -u -r1.268 -r1.269
     
    15201520     But if there is no spilling in this block, that is OK.
    15211521     An explicitly used hard reg cannot be a spill reg.  */
    15221522
    1523   if (rld[i].reg_rtx == 0 && in != 0)
     1523  if (rld[i].reg_rtx == 0 && in != 0 && hard_regs_live_known)
    15241524    {
    15251525      rtx note;
    15261526      int regno;
     
    15341534            && REG_P (XEXP (note, 0))
    15351535            && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER
    15361536            && reg_mentioned_p (XEXP (note, 0), in)
     1537            /* Check that we don't use a hardreg for an uninitialized
     1538               pseudo.  See also find_dummy_reload().  */
     1539            && (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
     1540                || ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,
     1541                                   ORIGINAL_REGNO (XEXP (note, 0))))
    15371542            && ! refers_to_regno_for_reload_p (regno,
    15381543                                               (regno
    15391544                                                + hard_regno_nregs[regno]
     
    19972002                                is a subreg, and in that case, out
    19982003                                has a real mode.  */
    19992004                             (GET_MODE (out) != VOIDmode
    2000                               ? GET_MODE (out) : outmode)))
     2005                              ? GET_MODE (out) : outmode))
     2006        /* But only do all this if we can be sure, that this input
     2007           operand doesn't correspond with an uninitialized pseudoreg.
     2008           global can assign some hardreg to it, which is the same as
     2009           a different pseudo also currently live (as it can ignore the
     2010           conflict).  So we never must introduce writes to such hardregs,
     2011           as they would clobber the other live pseudo using the same.
     2012           See also PR20973.  */
     2013      && (ORIGINAL_REGNO (in) < FIRST_PSEUDO_REGISTER
     2014          || ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,
     2015                             ORIGINAL_REGNO (in))))
    20012016    {
    20022017      unsigned int regno = REGNO (in) + in_offset;
    20032018      unsigned int nwords = hard_regno_nregs[regno][inmode];
Note: See TracBrowser for help on using the repository browser.