Commit 6873ecab by Steven Bosscher

lower-subreg.c (resolve_simple_move): If called self-recursive...


	* lower-subreg.c (resolve_simple_move): If called self-recursive,
	do not delete_insn insns that have not yet been emitted, only
	unlink them with remove_insn.
	* df-scan.c (df_insn_delete): Revert r197492.

From-SVN: r198042
parent bb52b0b9
2013-04-18 Steven Bosscher <steven@gcc.gnu.org>
* lower-subreg.c (resolve_simple_move): If called self-recursive,
do not delete_insn insns that have not yet been emitted, only
unlink them with remove_insn.
* df-scan.c (df_insn_delete): Revert r197492.
2013-04-17 Steven Bosscher <steven@gcc.gnu.org>
* emit-rtl.c (link_insn_into_chain): Handle chaining of SEQUENCEs.
......
......@@ -1158,17 +1158,7 @@ df_insn_delete (rtx insn)
In any case, we expect BB to be non-NULL at least up to register
allocation, so disallow a non-NULL BB up to there. Not perfect
but better than nothing... */
/* ??? bb can also be NULL if lower-subreg.c:resolve_simple_mov emits
an insn into a sequence and then does delete_insn on it. Not sure
if that makes sense, but for now it means this assert cannot work.
See PR56738.
Disable for now but revisit before the end of GCC 4.9 stage1. */
#if 0
gcc_checking_assert (bb != NULL || reload_completed);
#else
if (bb == NULL)
return;
#endif
df_grow_bb_info (df_scan);
df_grow_reg_info ();
......
......@@ -1069,7 +1069,13 @@ resolve_simple_move (rtx set, rtx insn)
emit_insn_before (insns, insn);
delete_insn (insn);
/* If we get here via self-recutsion, then INSN is not yet in the insns
chain and delete_insn will fail. We only want to remove INSN from the
current sequence. See PR56738. */
if (in_sequence_p ())
remove_insn (insn);
else
delete_insn (insn);
return insns;
}
......
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