re PR rtl-optimization/21767 (if-convert leaves invalid REG_EQUAL notes)
PR rtl-optimization/21767 * rtl.h (function_invariant_p): Re-add declaration. * reload1.c (function_invariant_p): No longer static. * ifcvt.c (dead_or_predicable): Remove REG_EQUAL notes that might have become invalid. From-SVN: r100448
This commit is contained in:
parent
8e0a600bdd
commit
5fffc382a6
@ -1,3 +1,11 @@
|
||||
2005-06-01 J"orn Rennecke <joern.rennecke@st.com>
|
||||
|
||||
PR rtl-optimization/21767
|
||||
* rtl.h (function_invariant_p): Re-add declaration.
|
||||
* reload1.c (function_invariant_p): No longer static.
|
||||
* ifcvt.c (dead_or_predicable): Remove REG_EQUAL notes that
|
||||
might have become invalid.
|
||||
|
||||
2005-06-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/21536
|
||||
|
19
gcc/ifcvt.c
19
gcc/ifcvt.c
@ -3430,12 +3430,31 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb,
|
||||
/* Move the insns out of MERGE_BB to before the branch. */
|
||||
if (head != NULL)
|
||||
{
|
||||
rtx insn;
|
||||
|
||||
if (end == BB_END (merge_bb))
|
||||
BB_END (merge_bb) = PREV_INSN (head);
|
||||
|
||||
if (squeeze_notes (&head, &end))
|
||||
return TRUE;
|
||||
|
||||
/* PR 21767: When moving insns above a conditional branch, REG_EQUAL
|
||||
notes might become invalid. */
|
||||
insn = head;
|
||||
do
|
||||
{
|
||||
rtx note, set;
|
||||
|
||||
if (! INSN_P (insn))
|
||||
continue;
|
||||
note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
|
||||
if (! note)
|
||||
continue;
|
||||
set = single_set (insn);
|
||||
if (!set || !function_invariant_p (SET_SRC (set)))
|
||||
remove_note (insn, note);
|
||||
} while (insn != end && (insn = NEXT_INSN (insn)));
|
||||
|
||||
reorder_insns (head, end, PREV_INSN (earliest));
|
||||
}
|
||||
|
||||
|
@ -405,7 +405,6 @@ static int reload_reg_free_for_value_p (int, int, int, enum reload_type,
|
||||
rtx, rtx, int, int);
|
||||
static int free_for_value_p (int, enum machine_mode, int, enum reload_type,
|
||||
rtx, rtx, int, int);
|
||||
static int function_invariant_p (rtx);
|
||||
static int reload_reg_reaches_end_p (unsigned int, int, enum reload_type);
|
||||
static int allocate_reload_reg (struct insn_chain *, int, int);
|
||||
static int conflicts_with_override (rtx);
|
||||
@ -4984,7 +4983,7 @@ free_for_value_p (int regno, enum machine_mode mode, int opnum,
|
||||
pic_offset_table_rtx is not, and we must not spill these things to
|
||||
memory. */
|
||||
|
||||
static int
|
||||
int
|
||||
function_invariant_p (rtx x)
|
||||
{
|
||||
if (CONSTANT_P (x))
|
||||
|
Loading…
Reference in New Issue
Block a user