summaryrefslogtreecommitdiff
path: root/gcc/modulo-sched.c
diff options
context:
space:
mode:
authorrevitale <revitale@138bc75d-0d04-0410-961f-82ee72b054a4>2011-09-30 13:25:30 +0000
committerrevitale <revitale@138bc75d-0d04-0410-961f-82ee72b054a4>2011-09-30 13:25:30 +0000
commit2917ecd30044d75e72331d7aec72cc56f3abda94 (patch)
tree719fcfc0091e715491d3570d58ada90b4bd5d2ba /gcc/modulo-sched.c
parentd1cae43ef1e80f71b5e88e36f4bb778515cc1137 (diff)
downloadgcc-2917ecd30044d75e72331d7aec72cc56f3abda94.tar.gz
SMS: Support instructions with REG_INC_NOTE
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@179381 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/modulo-sched.c')
-rw-r--r--gcc/modulo-sched.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c
index 7c33be54bb5..57186ec8710 100644
--- a/gcc/modulo-sched.c
+++ b/gcc/modulo-sched.c
@@ -506,6 +506,10 @@ generate_reg_moves (partial_schedule_ptr ps, bool rescan)
we assume no regmoves are generated as the doloop
instructions are tied to the branch with an edge. */
gcc_assert (set);
+ /* If the instruction contains auto-inc register then
+ validate that the regmov is being generated for the
+ target regsiter rather then the inc'ed register. */
+ gcc_assert (!autoinc_var_is_used_p (u->insn, e->dest->insn));
}
nreg_moves = MAX (nreg_moves, nreg_moves4e);
@@ -1281,12 +1285,10 @@ sms_schedule (void)
continue;
}
- /* Don't handle BBs with calls or barriers or auto-increment insns
- (to avoid creating invalid reg-moves for the auto-increment insns),
+ /* Don't handle BBs with calls or barriers
or !single_set with the exception of instructions that include
count_reg---these instructions are part of the control part
that do-loop recognizes.
- ??? Should handle auto-increment insns.
??? Should handle insns defining subregs. */
for (insn = head; insn != NEXT_INSN (tail); insn = NEXT_INSN (insn))
{
@@ -1297,7 +1299,6 @@ sms_schedule (void)
|| (NONDEBUG_INSN_P (insn) && !JUMP_P (insn)
&& !single_set (insn) && GET_CODE (PATTERN (insn)) != USE
&& !reg_mentioned_p (count_reg, insn))
- || (FIND_REG_INC_NOTE (insn, NULL_RTX) != 0)
|| (INSN_P (insn) && (set = single_set (insn))
&& GET_CODE (SET_DEST (set)) == SUBREG))
break;
@@ -1311,8 +1312,6 @@ sms_schedule (void)
fprintf (dump_file, "SMS loop-with-call\n");
else if (BARRIER_P (insn))
fprintf (dump_file, "SMS loop-with-barrier\n");
- else if (FIND_REG_INC_NOTE (insn, NULL_RTX) != 0)
- fprintf (dump_file, "SMS reg inc\n");
else if ((NONDEBUG_INSN_P (insn) && !JUMP_P (insn)
&& !single_set (insn) && GET_CODE (PATTERN (insn)) != USE))
fprintf (dump_file, "SMS loop-with-not-single-set\n");