aboutsummaryrefslogtreecommitdiff
path: root/gcc/modulo-sched.c
diff options
context:
space:
mode:
authorRevital Eres <revital.eres@linaro.org>2011-05-11 07:08:44 +0000
committerRevital Eres <revital.eres@linaro.org>2011-05-11 07:08:44 +0000
commit102dc8a2d738ca3423b1b49e6dc7ed5df5a55148 (patch)
tree2ce89b08c7f88397801fe13872af4ffdb5a6a5a4 /gcc/modulo-sched.c
parent86b2821634193ee3ab24972404c7fad7e83f983e (diff)
Doloop pattern for ARM
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@173645 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/modulo-sched.c')
-rw-r--r--gcc/modulo-sched.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c
index f37d743e287..091c0059e5c 100644
--- a/gcc/modulo-sched.c
+++ b/gcc/modulo-sched.c
@@ -1009,9 +1009,11 @@ sms_schedule (void)
continue;
}
- /* Don't handle BBs with calls or barriers, or !single_set insns,
- or auto-increment insns (to avoid creating invalid reg-moves
- for the auto-increment insns).
+ /* Don't handle BBs with calls or barriers or auto-increment insns
+ (to avoid creating invalid reg-moves for the auto-increment insns),
+ 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))
@@ -1021,7 +1023,8 @@ sms_schedule (void)
if (CALL_P (insn)
|| BARRIER_P (insn)
|| (NONDEBUG_INSN_P (insn) && !JUMP_P (insn)
- && !single_set (insn) && GET_CODE (PATTERN (insn)) != USE)
+ && !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))