postreload.c (fixup_debug_insns): Remove arg REGNO.

* postreload.c (fixup_debug_insns): Remove arg REGNO.  New args
	FROM and TO.  All callers changed.  Don't look for tracked uses,
	just scan the RTL for DEBUG_INSNs and substitute.
	(reload_combine_recognize_pattern): Call fixup_debug_insns.
	(reload_combine): Ignore DEBUG_INSNs.

From-SVN: r162342
This commit is contained in:
Bernd Schmidt 2010-07-20 15:33:35 +00:00 committed by Bernd Schmidt
parent be5fda91fb
commit caa4a25077
2 changed files with 35 additions and 36 deletions

View File

@ -1,3 +1,11 @@
2010-07-20 Bernd Schmidt <bernds@codesourcery.com>
* postreload.c (fixup_debug_insns): Remove arg REGNO. New args
FROM and TO. All callers changed. Don't look for tracked uses,
just scan the RTL for DEBUG_INSNs and substitute.
(reload_combine_recognize_pattern): Call fixup_debug_insns.
(reload_combine): Ignore DEBUG_INSNs.
2010-07-20 Jakub Jelinek <jakub@redhat.com>
* var-tracking.c (vt_expand_loc, vt_expand_loc_dummy): Bump maximum

View File

@ -848,41 +848,26 @@ reload_combine_closest_single_use (unsigned regno, int ruid_limit)
return retval;
}
/* After we've moved an add insn, fix up any debug insns that occur between
the old location of the add and the new location. REGNO is the destination
register of the add insn; REG is the corresponding RTX. REPLACEMENT is
the SET_SRC of the add. MIN_RUID specifies the ruid of the insn after
which we've placed the add, we ignore any debug insns after it. */
/* After we've moved an add insn, fix up any debug insns that occur
between the old location of the add and the new location. REG is
the destination register of the add insn; REPLACEMENT is the
SET_SRC of the add. FROM and TO specify the range in which we
should make this change on debug insns. */
static void
fixup_debug_insns (unsigned regno, rtx reg, rtx replacement, int min_ruid)
fixup_debug_insns (rtx reg, rtx replacement, rtx from, rtx to)
{
struct reg_use *use;
int from = reload_combine_ruid;
for (;;)
rtx insn;
for (insn = from; insn != to; insn = NEXT_INSN (insn))
{
rtx t;
rtx use_insn = NULL_RTX;
if (from < min_ruid)
break;
use = reload_combine_closest_single_use (regno, from);
if (use)
{
from = use->ruid;
use_insn = use->insn;
}
else
break;
if (NONDEBUG_INSN_P (use->insn))
if (!DEBUG_INSN_P (insn))
continue;
t = INSN_VAR_LOCATION_LOC (use_insn);
t = INSN_VAR_LOCATION_LOC (insn);
t = simplify_replace_rtx (t, reg, copy_rtx (replacement));
validate_change (use->insn,
&INSN_VAR_LOCATION_LOC (use->insn), t, 0);
reload_combine_purge_insn_uses (use_insn);
reload_combine_note_use (&PATTERN (use_insn), use_insn,
use->ruid, NULL_RTX);
validate_change (insn, &INSN_VAR_LOCATION_LOC (insn), t, 0);
}
}
@ -1063,8 +1048,8 @@ reload_combine_recognize_const_pattern (rtx insn)
/* Process the add normally. */
return false;
fixup_debug_insns (regno, reg, src, add_moved_after_ruid);
fixup_debug_insns (reg, src, insn, add_moved_after_insn);
reorder_insns (insn, insn, add_moved_after_insn);
reload_combine_purge_reg_uses_after_ruid (regno, add_moved_after_ruid);
reload_combine_split_ruids (add_moved_after_ruid - 1);
@ -1191,15 +1176,21 @@ reload_combine_recognize_pattern (rtx insn)
if (apply_change_group ())
{
struct reg_use *lowest_ruid = NULL;
/* For every new use of REG_SUM, we have to record the use
of BASE therein, i.e. operand 1. */
for (i = reg_state[regno].use_index;
i < RELOAD_COMBINE_MAX_USES; i++)
reload_combine_note_use
(&XEXP (*reg_state[regno].reg_use[i].usep, 1),
reg_state[regno].reg_use[i].insn,
reg_state[regno].reg_use[i].ruid,
reg_state[regno].reg_use[i].containing_mem);
{
struct reg_use *use = reg_state[regno].reg_use + i;
reload_combine_note_use (&XEXP (*use->usep, 1), use->insn,
use->ruid, use->containing_mem);
if (lowest_ruid == NULL || use->ruid < lowest_ruid->ruid)
lowest_ruid = use;
}
fixup_debug_insns (reg, reg_sum, insn, lowest_ruid->insn);
/* Delete the reg-reg addition. */
delete_insn (insn);
@ -1313,7 +1304,7 @@ reload_combine (void)
if (! fixed_regs[r])
reg_state[r].use_index = RELOAD_COMBINE_MAX_USES;
if (! INSN_P (insn))
if (! NONDEBUG_INSN_P (insn))
continue;
reload_combine_ruid++;