diff mbox

[lra] patch to fix full bootstrap for LRA

Message ID 50368B7C.1030907@redhat.com
State New
Headers show

Commit Message

Vladimir Makarov Aug. 23, 2012, 7:58 p.m. UTC
The following patch fixes a failure during x86 bootstrap with Java 
language.  The first bug occurs when we have BB containing only debug 
insns.  LRA before the patch did not update live info correctly during 
processing EBBs containing such BBs.  The second bug was in assigning 
wrong mode for x86 fp stack register inside subreg in debug insn.

The patch was successfully bootstrapped on x86/x86-64.

Committed as rev. 190629.

2012-08-23  Vladimir Makarov  <vmakarov@redhat.com>

         * lra-constraints.c (update_ebb_live_info): Process debug insn
         too.

         * lra-spills.c (lra_hard_reg_substitution): Call alter_subreg with
         true only for non-debug insn.
diff mbox

Patch

Index: lra-spills.c
===================================================================
--- lra-spills.c	(revision 190448)
+++ lra-spills.c	(working copy)
@@ -590,7 +590,7 @@  lra_hard_reg_substitution (void)
 	      if (GET_CODE (op) == SUBREG && REG_P (SUBREG_REG (op)))
 		{
 		  lra_assert (REGNO (SUBREG_REG (op)) < FIRST_PSEUDO_REGISTER);
-		  alter_subreg (id->operand_loc[i], true);
+		  alter_subreg (id->operand_loc[i], ! DEBUG_INSN_P (insn));
 		  lra_update_dup (id, i);
 		  insn_change_p = true;
 		}
Index: lra-constraints.c
===================================================================
--- lra-constraints.c	(revision 190448)
+++ lra-constraints.c	(working copy)
@@ -4255,7 +4255,7 @@  update_ebb_live_info (rtx head, rtx tail
        curr_insn = prev_insn)
     {
       prev_insn = PREV_INSN (curr_insn);
-      if (! NONDEBUG_INSN_P (curr_insn))
+      if (! INSN_P (curr_insn))
 	continue;
       curr_bb = BLOCK_FOR_INSN (curr_insn);
       if (curr_bb != prev_bb)
@@ -4291,6 +4291,8 @@  update_ebb_live_info (rtx head, rtx tail
 	  prev_bb = curr_bb;
 	  bitmap_and (&live_regs, &check_only_regs, DF_LR_OUT (curr_bb));
 	}
+      if (DEBUG_INSN_P (curr_insn))
+	continue;
       curr_id = lra_get_insn_recog_data (curr_insn);
       remove_p = false;
       if ((set = single_set (curr_insn)) != NULL_RTX && REG_P (SET_DEST (set))