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>
|
2004-09-01 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* config/ns32k/ns32k.h (TRANSFER_FROM_TRAMPOLINE): Remove.
|
* 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
|
static void
|
||||||
replace_store_insn (rtx reg, rtx del, basic_block bb, struct ls_expr *smexpr)
|
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;
|
mem = smexpr->pattern;
|
||||||
insn = gen_move_insn (reg, SET_SRC (single_set (del)));
|
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;
|
XEXP (ptr, 0) = insn;
|
||||||
break;
|
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);
|
delete_insn (del);
|
||||||
|
|
||||||
/* Now we must handle REG_EQUAL notes whose contents is equal to the mem;
|
/* Now we must handle REG_EQUAL notes whose contents is equal to the mem;
|
||||||
|
Loading…
Reference in New Issue
Block a user