SMS: Avoid generating redundant reg-moves

From-SVN: r179380
This commit is contained in:
Revital Eres 2011-09-30 13:10:56 +00:00 committed by Revital Eres
parent f27a3d372a
commit 442b891d02
2 changed files with 22 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2011-09-30 Revital Eres <revital.eres@linaro.org>
* modulo-sched.c (generate_reg_moves): Skip instructions that
do not set a register and verify no regmoves are created for
!single_set instructions.
2011-09-30 Bernd Schmidt <bernds@codesourcery.com>
* hw-doloop.c (scan_loop): Compute register usage only for non-debug

View File

@ -476,7 +476,12 @@ generate_reg_moves (partial_schedule_ptr ps, bool rescan)
sbitmap *uses_of_defs;
rtx last_reg_move;
rtx prev_reg, old_reg;
rtx set = single_set (u->insn);
/* Skip instructions that do not set a register. */
if ((set && !REG_P (SET_DEST (set))))
continue;
/* Compute the number of reg_moves needed for u, by looking at life
ranges started at u (excluding self-loops). */
for (e = u->out; e; e = e->next_out)
@ -493,6 +498,16 @@ generate_reg_moves (partial_schedule_ptr ps, bool rescan)
&& SCHED_COLUMN (e->dest) < SCHED_COLUMN (e->src))
nreg_moves4e--;
if (nreg_moves4e >= 1)
{
/* !single_set instructions are not supported yet and
thus we do not except to encounter them in the loop
except from the doloop part. For the latter case
we assume no regmoves are generated as the doloop
instructions are tied to the branch with an edge. */
gcc_assert (set);
}
nreg_moves = MAX (nreg_moves, nreg_moves4e);
}