optabs.c (emit_libcall_block): Use no_conflict_move_test.

* optabs.c (emit_libcall_block): Use no_conflict_move_test.
	(no_conflict_move_test): Update comments.

From-SVN: r104563
This commit is contained in:
J"orn Rennecke 2005-09-23 12:13:07 +00:00 committed by Joern Rennecke
parent 9617ccfdc4
commit 748ebfc7f9
2 changed files with 25 additions and 17 deletions

View File

@ -7,6 +7,9 @@
* optabs.c (no_conflict_move_test): Don't set must_stay for a
clobber / clobber match between dest and p->first.
* optabs.c (emit_libcall_block): Use no_conflict_move_test.
(no_conflict_move_test): Update comments.
2005-09-22 Ranjit Mathew <rmathew@gcc.gnu.org>
* doc/install.texi: Update URL for Jacks.

View File

@ -3004,9 +3004,10 @@ struct no_conflict_data
bool must_stay;
};
/* Called via note_stores by emit_no_conflict_block. Set P->must_stay
if the currently examined clobber / store has to stay in the list of
insns that constitute the actual no_conflict block. */
/* Called via note_stores by emit_no_conflict_block and emit_libcall_block.
Set P->must_stay if the currently examined clobber / store has to stay
in the list of insns that constitute the actual no_conflict block /
libcall block. */
static void
no_conflict_move_test (rtx dest, rtx set, void *p0)
{
@ -3248,23 +3249,27 @@ emit_libcall_block (rtx insns, rtx target, rtx result, rtx equiv)
next = NEXT_INSN (insn);
if (set != 0 && REG_P (SET_DEST (set))
&& REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
&& (insn == insns
|| ((! INSN_P(insns)
|| ! reg_mentioned_p (SET_DEST (set), PATTERN (insns)))
&& ! reg_used_between_p (SET_DEST (set), insns, insn)
&& ! modified_in_p (SET_SRC (set), insns)
&& ! modified_between_p (SET_SRC (set), insns, insn))))
&& REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
{
if (PREV_INSN (insn))
NEXT_INSN (PREV_INSN (insn)) = next;
else
insns = next;
struct no_conflict_data data;
if (next)
PREV_INSN (next) = PREV_INSN (insn);
data.target = const0_rtx;
data.first = insns;
data.insn = insn;
data.must_stay = 0;
note_stores (PATTERN (insn), no_conflict_move_test, &data);
if (! data.must_stay)
{
if (PREV_INSN (insn))
NEXT_INSN (PREV_INSN (insn)) = next;
else
insns = next;
add_insn (insn);
if (next)
PREV_INSN (next) = PREV_INSN (insn);
add_insn (insn);
}
}
/* Some ports use a loop to copy large arguments onto the stack.