aboutsummaryrefslogtreecommitdiff
path: root/gcc/modulo-sched.c
diff options
context:
space:
mode:
authorRevital Eres <revital.eres@linaro.org>2011-09-30 13:10:56 +0000
committerRevital Eres <revital.eres@linaro.org>2011-09-30 13:10:56 +0000
commit6536fdf1e21cf21e05aff1dc69e96cc6318e282a (patch)
tree24e675ed3ce342877a15ea45c250d0032fc8eed0 /gcc/modulo-sched.c
parente251929ab21a111d05e756c485aeafd0507f69b1 (diff)
SMS: Avoid generating redundant reg-moves
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@179380 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/modulo-sched.c')
-rw-r--r--gcc/modulo-sched.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c
index 28be9425b44..7c33be54bb5 100644
--- a/gcc/modulo-sched.c
+++ b/gcc/modulo-sched.c
@@ -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);
}