Commit 0efa4029 by Paolo Bonzini Committed by Paolo Bonzini

combine.c (record_value_for_reg): Invalidate registers if INSN is null.

2005-01-16  Paolo Bonzini  <bonzini@gnu.org>

	* combine.c (record_value_for_reg): Invalidate registers
	if INSN is null.
	(record_dead_and_set_regs_1): Likewise, by passing them to
	record_value_for_reg.
	(record_dead_and_set_regs): Invalidate stores made by a
	call.  We do not combine across a call, but we still
	relied on equivalences.

From-SVN: r109759
parent 61ead135
2005-01-16 Paolo Bonzini <bonzini@gnu.org>
* combine.c (record_value_for_reg): Invalidate registers
if INSN is null.
(record_dead_and_set_regs_1): Likewise, by passing them to
record_value_for_reg.
(record_dead_and_set_regs): Invalidate stores made by a
call. We do not combine across a call, but we still
relied on equivalences.
2006-01-16 Eric Botcazou <ebotcazou@adacore.com> 2006-01-16 Eric Botcazou <ebotcazou@adacore.com>
* tree-vrp.c (extract_range_from_binary_expr): Cope with * tree-vrp.c (extract_range_from_binary_expr): Cope with
......
...@@ -10927,7 +10927,7 @@ record_value_for_reg (rtx reg, rtx insn, rtx value) ...@@ -10927,7 +10927,7 @@ record_value_for_reg (rtx reg, rtx insn, rtx value)
for (i = regno; i < endregno; i++) for (i = regno; i < endregno; i++)
{ {
reg_stat[i].last_set_label = label_tick; reg_stat[i].last_set_label = label_tick;
if (value && reg_stat[i].last_set_table_tick == label_tick) if (!insn || (value && reg_stat[i].last_set_table_tick == label_tick))
reg_stat[i].last_set_invalid = 1; reg_stat[i].last_set_invalid = 1;
else else
reg_stat[i].last_set_invalid = 0; reg_stat[i].last_set_invalid = 0;
...@@ -10976,6 +10976,13 @@ record_dead_and_set_regs_1 (rtx dest, rtx setter, void *data) ...@@ -10976,6 +10976,13 @@ record_dead_and_set_regs_1 (rtx dest, rtx setter, void *data)
if (GET_CODE (dest) == SUBREG) if (GET_CODE (dest) == SUBREG)
dest = SUBREG_REG (dest); dest = SUBREG_REG (dest);
if (!record_dead_insn)
{
if (REG_P (dest))
record_value_for_reg (dest, NULL_RTX, NULL_RTX);
return;
}
if (REG_P (dest)) if (REG_P (dest))
{ {
/* If we are setting the whole register, we know its value. Otherwise /* If we are setting the whole register, we know its value. Otherwise
...@@ -11049,15 +11056,14 @@ record_dead_and_set_regs (rtx insn) ...@@ -11049,15 +11056,14 @@ record_dead_and_set_regs (rtx insn)
last_call_cuid = mem_last_set = INSN_CUID (insn); last_call_cuid = mem_last_set = INSN_CUID (insn);
/* Don't bother recording what this insn does. It might set the /* We can't combine into a call pattern. Remember, though, that
return value register, but we can't combine into a call the return value register is set at this CUID. We could
pattern anyway, so there's no point trying (and it may cause still replace a register with the return value from the
a crash, if e.g. we wind up asking for last_set_value of a wrong subroutine call! */
SUBREG of the return value register). */ note_stores (PATTERN (insn), record_dead_and_set_regs_1, NULL_RTX);
return;
} }
else
note_stores (PATTERN (insn), record_dead_and_set_regs_1, insn); note_stores (PATTERN (insn), record_dead_and_set_regs_1, insn);
} }
/* If a SUBREG has the promoted bit set, it is in fact a property of the /* If a SUBREG has the promoted bit set, it is in fact a property of the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment