reload.c (combine_reloads): When trying to use a dying register...
authorBernd Schmidt <bernd.schmidt@analog.com>
Fri, 20 Apr 2007 00:08:46 +0000 (00:08 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Fri, 20 Apr 2007 00:08:46 +0000 (00:08 +0000)
* reload.c (combine_reloads): When trying to use a dying register,
check whether it's uninitialized and don't use if so.

From-SVN: r123986

gcc/ChangeLog
gcc/reload.c

index e62e9a9dbf8a3ed49841052fade3c5fe50dc0dd7..396579e94a5ab01b7d058945c21207ca58975da2 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-19  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * reload.c (combine_reloads): When trying to use a dying register,
+       check whether it's uninitialized and don't use if so.
+
 2007-04-19  Brooks Moses  <brooks.moses@codesourcery.com>
 
        * fold-const.c: Remove prototypes for native_encode_expr and
index aa22671c13ac456a606f9654df18954a08bb949c..b0374d8c10641f13f2f72e6ad02a5674f759e94f 100644 (file)
@@ -1853,7 +1853,12 @@ combine_reloads (void)
                    ||  ! (TEST_HARD_REG_BIT
                           (reg_class_contents[(int) rld[secondary_out].class],
                            REGNO (XEXP (note, 0)))))))
-       && ! fixed_regs[REGNO (XEXP (note, 0))])
+       && ! fixed_regs[REGNO (XEXP (note, 0))]
+       /* Check that we don't use a hardreg for an uninitialized
+          pseudo.  See also find_dummy_reload().  */
+       && (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
+           || ! bitmap_bit_p (ENTRY_BLOCK_PTR->il.rtl->global_live_at_end,
+                              ORIGINAL_REGNO (XEXP (note, 0)))))
       {
        rld[output_reload].reg_rtx
          = gen_rtx_REG (rld[output_reload].outmode,