*** empty log message ***
From-SVN: r426
This commit is contained in:
parent
db5dc21f76
commit
d674b9e395
16
gcc/reorg.c
16
gcc/reorg.c
@ -2674,7 +2674,7 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
|
|||||||
int own_thread, own_opposite_thread;
|
int own_thread, own_opposite_thread;
|
||||||
int slots_to_fill, *pslots_filled;
|
int slots_to_fill, *pslots_filled;
|
||||||
{
|
{
|
||||||
rtx new_thread = thread;
|
rtx new_thread;
|
||||||
rtx delay_list = 0;
|
rtx delay_list = 0;
|
||||||
struct resources opposite_needed, set, needed;
|
struct resources opposite_needed, set, needed;
|
||||||
rtx trial;
|
rtx trial;
|
||||||
@ -2698,6 +2698,12 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
|
|||||||
else
|
else
|
||||||
mark_target_live_regs (opposite_thread, &opposite_needed);
|
mark_target_live_regs (opposite_thread, &opposite_needed);
|
||||||
|
|
||||||
|
/* If the insn at THREAD can be split, do it here to avoid having to
|
||||||
|
update THREAD and NEW_THREAD if it is done in the loop below. Also
|
||||||
|
initialize NEW_THREAD. */
|
||||||
|
|
||||||
|
new_thread = thread = try_split (PATTERN (thread), thread);
|
||||||
|
|
||||||
/* Scan insns at THREAD. We are looking for an insn that can be removed
|
/* Scan insns at THREAD. We are looking for an insn that can be removed
|
||||||
from THREAD (it neither sets nor references resources that were set
|
from THREAD (it neither sets nor references resources that were set
|
||||||
ahead of it and it doesn't set anything needs by the insns ahead of
|
ahead of it and it doesn't set anything needs by the insns ahead of
|
||||||
@ -2895,7 +2901,8 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
|
|||||||
|
|
||||||
/* If we haven't found anything for this delay slot and it is very
|
/* If we haven't found anything for this delay slot and it is very
|
||||||
likely that the branch will be taken, see if the insn at our target
|
likely that the branch will be taken, see if the insn at our target
|
||||||
increments or decrements a register. If so, try to place the opposite
|
increments or decrements a register with an increment that does not
|
||||||
|
depend on the destination register. If so, try to place the opposite
|
||||||
arithmetic insn after the jump insn and put the arithmetic insn in the
|
arithmetic insn after the jump insn and put the arithmetic insn in the
|
||||||
delay slot. If we can't do this, return. */
|
delay slot. If we can't do this, return. */
|
||||||
if (delay_list == 0 && likely && new_thread && GET_CODE (new_thread) == INSN)
|
if (delay_list == 0 && likely && new_thread && GET_CODE (new_thread) == INSN)
|
||||||
@ -2904,7 +2911,7 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
|
|||||||
rtx dest;
|
rtx dest;
|
||||||
rtx src;
|
rtx src;
|
||||||
|
|
||||||
trial = try_split (pat, new_thread, 0);
|
trial = new_thread;
|
||||||
pat = PATTERN (trial);
|
pat = PATTERN (trial);
|
||||||
|
|
||||||
if (GET_CODE (trial) != INSN || GET_CODE (pat) != SET
|
if (GET_CODE (trial) != INSN || GET_CODE (pat) != SET
|
||||||
@ -2913,7 +2920,8 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
|
|||||||
|
|
||||||
dest = SET_DEST (pat), src = SET_SRC (pat);
|
dest = SET_DEST (pat), src = SET_SRC (pat);
|
||||||
if ((GET_CODE (src) == PLUS || GET_CODE (src) == MINUS)
|
if ((GET_CODE (src) == PLUS || GET_CODE (src) == MINUS)
|
||||||
&& rtx_equal_p (XEXP (src, 0), dest))
|
&& rtx_equal_p (XEXP (src, 0), dest)
|
||||||
|
&& ! reg_overlap_mentioned_p (dest, XEXP (src, 1)))
|
||||||
{
|
{
|
||||||
rtx other = XEXP (src, 1);
|
rtx other = XEXP (src, 1);
|
||||||
rtx new_arith;
|
rtx new_arith;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user