Commit 1422dce0 by Richard Kenner

(mark_target_live_regs): Look at USE insns made by update_block when scanning forward past target.

(mark_target_live_regs): Look at USE insns made by update_block when scanning
forward past target.
(mark_target_live_regs, dbr_schedule): Use GET_RTX_CLASS.

From-SVN: r2366
parent 3f783329
...@@ -2051,9 +2051,7 @@ mark_target_live_regs (target, res) ...@@ -2051,9 +2051,7 @@ mark_target_live_regs (target, res)
/* If this insn is a USE made by update_block, we care about the /* If this insn is a USE made by update_block, we care about the
underlying insn. */ underlying insn. */
if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == USE if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == USE
&& (GET_CODE (XEXP (PATTERN (insn), 0)) == INSN && GET_RTX_CLASS (GET_CODE (XEXP (PATTERN (insn), 0))) == 'i')
|| GET_CODE (XEXP (PATTERN (insn), 0)) == CALL_INSN
|| GET_CODE (XEXP (PATTERN (insn), 0)) == JUMP_INSN))
real_insn = XEXP (PATTERN (insn), 0); real_insn = XEXP (PATTERN (insn), 0);
if (GET_CODE (real_insn) == CALL_INSN) if (GET_CODE (real_insn) == CALL_INSN)
...@@ -2170,10 +2168,30 @@ mark_target_live_regs (target, res) ...@@ -2170,10 +2168,30 @@ mark_target_live_regs (target, res)
continue; continue;
case INSN: case INSN:
if (GET_CODE (PATTERN (insn)) == USE if (GET_CODE (PATTERN (insn)) == USE)
|| GET_CODE (PATTERN (insn)) == CLOBBER) {
/* If INSN is a USE made by update_block, we care about the
underlying insn. Any registers set or referenced by the
underlying insn should be treated as if the insn were
located here without the USE. */
if (GET_RTX_CLASS (GET_CODE (XEXP (PATTERN (insn), 0))) == 'i')
{
rtx inner = XEXP (PATTERN (insn), 0);
mark_referenced_resources (inner, &needed, 1);
mark_set_resources (inner, &set, 0, 1);
COPY_HARD_REG_SET (scratch, set.regs);
AND_COMPL_HARD_REG_SET (scratch, needed.regs);
AND_COMPL_HARD_REG_SET (res->regs, scratch);
}
/* All other USE insns are to be ignored. */
continue;
}
else if (GET_CODE (PATTERN (insn)) == CLOBBER)
continue; continue;
if (GET_CODE (PATTERN (insn)) == SEQUENCE) else if (GET_CODE (PATTERN (insn)) == SEQUENCE)
{ {
/* An unconditional jump can be used to fill the delay slot /* An unconditional jump can be used to fill the delay slot
of a call, so search for a JUMP_INSN in any position. */ of a call, so search for a JUMP_INSN in any position. */
...@@ -3663,9 +3681,7 @@ dbr_schedule (first, file) ...@@ -3663,9 +3681,7 @@ dbr_schedule (first, file)
next = NEXT_INSN (insn); next = NEXT_INSN (insn);
if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == USE if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == USE
&& (GET_CODE (XEXP (PATTERN (insn), 0)) == INSN && GET_RTX_CLASS (GET_CODE (XEXP (PATTERN (insn), 0))) == 'i')
|| GET_CODE (XEXP (PATTERN (insn), 0)) == JUMP_INSN
|| GET_CODE (XEXP (PATTERN (insn), 0)) == CALL_INSN))
next = delete_insn (insn); next = delete_insn (insn);
} }
......
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