re PR rtl-optimization/16408 (internal compiler error: in delete_insn, at cfgrtl.c:146)
PR rtl-optimization/16408 * gcse.c (replace_store_insn): Fix LIBCALL/RETVAL notes. From-SVN: r86928
This commit is contained in:
parent
57b38f517c
commit
d7fe118321
@ -1,3 +1,8 @@
|
||||
2004-09-01 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
|
||||
|
||||
PR rtl-optimization/16408
|
||||
* gcse.c (replace_store_insn): Fix LIBCALL/RETVAL notes.
|
||||
|
||||
2004-09-01 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/ns32k/ns32k.h (TRANSFER_FROM_TRAMPOLINE): Remove.
|
||||
|
22
gcc/gcse.c
22
gcc/gcse.c
@ -6321,7 +6321,7 @@ remove_reachable_equiv_notes (basic_block bb, struct ls_expr *smexpr)
|
||||
static void
|
||||
replace_store_insn (rtx reg, rtx del, basic_block bb, struct ls_expr *smexpr)
|
||||
{
|
||||
rtx insn, mem, note, set, ptr;
|
||||
rtx insn, mem, note, set, ptr, pair;
|
||||
|
||||
mem = smexpr->pattern;
|
||||
insn = gen_move_insn (reg, SET_SRC (single_set (del)));
|
||||
@ -6343,6 +6343,26 @@ replace_store_insn (rtx reg, rtx del, basic_block bb, struct ls_expr *smexpr)
|
||||
XEXP (ptr, 0) = insn;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Move the notes from the deleted insn to its replacement, and patch
|
||||
up the LIBCALL notes. */
|
||||
REG_NOTES (insn) = REG_NOTES (del);
|
||||
|
||||
note = find_reg_note (insn, REG_RETVAL, NULL_RTX);
|
||||
if (note)
|
||||
{
|
||||
pair = XEXP (note, 0);
|
||||
note = find_reg_note (pair, REG_LIBCALL, NULL_RTX);
|
||||
XEXP (note, 0) = insn;
|
||||
}
|
||||
note = find_reg_note (insn, REG_LIBCALL, NULL_RTX);
|
||||
if (note)
|
||||
{
|
||||
pair = XEXP (note, 0);
|
||||
note = find_reg_note (pair, REG_RETVAL, NULL_RTX);
|
||||
XEXP (note, 0) = insn;
|
||||
}
|
||||
|
||||
delete_insn (del);
|
||||
|
||||
/* Now we must handle REG_EQUAL notes whose contents is equal to the mem;
|
||||
|
Loading…
Reference in New Issue
Block a user