Recently I sent the patch which was mostly a caller-saves subpass
rewriting. It resulted in removing a call df-analyze because the new
subpass does not use DF-infrastructure as all subsequent subpasses.
Before caller-saves subpass there is a small subpass which
substitutes scratches to pseudos for simpler and better allocation which
called df_insn_rescan after each change. With the new caller-saves
subpass we don't need to do that any more.
The patch was successfully bootstrapped on x86-64 and ia64.
2011-08-25 Vladimir Makarov <vmaka...@redhat.com>
* lra.c (remove_scratches): Don't rescan insn.
Index: lra.c
===================================================================
--- lra.c (revision 178008)
+++ lra.c (working copy)
@@ -1791,7 +1791,6 @@ static void
remove_scratches (void)
{
int i;
- bool insn_change_p;
basic_block bb;
rtx insn, reg;
loc_t loc;
@@ -1807,12 +1806,10 @@ remove_scratches (void)
{
id = lra_get_insn_recog_data (insn);
static_id = id->insn_static_data;
- insn_change_p = false;
for (i = 0; i < static_id->n_operands; i++)
if (GET_CODE (*id->operand_loc[i]) == SCRATCH
&& GET_MODE (*id->operand_loc[i]) != VOIDmode)
{
- insn_change_p = true;
*id->operand_loc[i] = reg
= lra_create_new_reg (static_id->operand[i].mode,
*id->operand_loc[i], ALL_REGS, NULL);
@@ -1829,8 +1826,6 @@ remove_scratches (void)
fprintf (lra_dump_file, "Removing SCRATCH in insn #%u (nop
%d)\n",
INSN_UID (insn), i);
}
- if (insn_change_p)
- df_insn_rescan (insn);
}
}