View | Details | Return to bug 20973
Collapse All | Expand All

(-)reload.c (-2 / +14 lines)
Lines 1520-1526 push_reload (rtx in, rtx out, rtx *inloc Link Here
1520
     But if there is no spilling in this block, that is OK.
1520
     But if there is no spilling in this block, that is OK.
1521
     An explicitly used hard reg cannot be a spill reg.  */
1521
     An explicitly used hard reg cannot be a spill reg.  */
1522
1522
1523
  if (rld[i].reg_rtx == 0 && in != 0)
1523
  if (rld[i].reg_rtx == 0 && in != 0 && hard_regs_live_known)
1524
    {
1524
    {
1525
      rtx note;
1525
      rtx note;
1526
      int regno;
1526
      int regno;
Lines 1534-1539 push_reload (rtx in, rtx out, rtx *inloc Link Here
1534
	    && REG_P (XEXP (note, 0))
1534
	    && REG_P (XEXP (note, 0))
1535
	    && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER
1535
	    && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER
1536
	    && reg_mentioned_p (XEXP (note, 0), in)
1536
	    && reg_mentioned_p (XEXP (note, 0), in)
1537
	    && (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
1538
		|| ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,
1539
				   ORIGINAL_REGNO (XEXP (note, 0))))
1537
	    && ! refers_to_regno_for_reload_p (regno,
1540
	    && ! refers_to_regno_for_reload_p (regno,
1538
					       (regno
1541
					       (regno
1539
						+ hard_regno_nregs[regno]
1542
						+ hard_regno_nregs[regno]
Lines 1997-2003 find_dummy_reload (rtx real_in, rtx real Link Here
1997
				is a subreg, and in that case, out
2000
				is a subreg, and in that case, out
1998
				has a real mode.  */
2001
				has a real mode.  */
1999
			     (GET_MODE (out) != VOIDmode
2002
			     (GET_MODE (out) != VOIDmode
2000
			      ? GET_MODE (out) : outmode)))
2003
			      ? GET_MODE (out) : outmode))
2004
        /* But only do all this if we can be sure, that this input
2005
           operand doesn't correspond with an uninitialized pseudoreg.
2006
           global can assign some hardreg to it, which is the same as
2007
	   a different pseudo also currently live (as it can ignore the
2008
	   conflict).  So we never must introduce writes to such hardregs,
2009
	   as they would clobber the other live pseudo using the same.  */
2010
      && (ORIGINAL_REGNO (in) < FIRST_PSEUDO_REGISTER
2011
          || ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,
2012
			     ORIGINAL_REGNO (in))))
2001
    {
2013
    {
2002
      unsigned int regno = REGNO (in) + in_offset;
2014
      unsigned int regno = REGNO (in) + in_offset;
2003
      unsigned int nwords = hard_regno_nregs[regno][inmode];
2015
      unsigned int nwords = hard_regno_nregs[regno][inmode];

Return to bug 20973