diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c600bcb6c20d9b910c1c73ccfa7f6e1856ff59d6..cc42a5476d83ce713b19a714cee7fd3c53f8a5cf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-15  Eric Botcazou  <ebotcazou@adacore.com>
+
+	PR rtl-optimization/40710
+	* resource.c (mark_target_live_regs): Reset DF problem to LR.
+
 2009-07-15  Adam Nemet  <anemet@caviumnetworks.com>
 
 	* config/mips/mips.md (*extenddi_truncate<mode>,
diff --git a/gcc/resource.c b/gcc/resource.c
index 846f8ef2b41d710b28c4317157d11c6c69b997c0..08a805519cdab474a9197d88b373e4e732d7a14f 100644
--- a/gcc/resource.c
+++ b/gcc/resource.c
@@ -945,10 +945,11 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
 
   /* If we found a basic block, get the live registers from it and update
      them with anything set or killed between its start and the insn before
-     TARGET.  Otherwise, we must assume everything is live.  */
+     TARGET; this custom life analysis is really about registers so we need
+     to use the LR problem.  Otherwise, we must assume everything is live.  */
   if (b != -1)
     {
-      regset regs_live = df_get_live_in (BASIC_BLOCK (b));
+      regset regs_live = DF_LR_IN (BASIC_BLOCK (b));
       rtx start_insn, stop_insn;
 
       /* Compute hard regs live at start of block.  */
@@ -1052,7 +1053,7 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
 		{
 		  HARD_REG_SET extra_live;
 
-		  REG_SET_TO_HARD_REG_SET (extra_live, df_get_live_in (bb));
+		  REG_SET_TO_HARD_REG_SET (extra_live, DF_LR_IN (bb));
 		  IOR_HARD_REG_SET (current_live_regs, extra_live);
 		}
 	    }