aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Evans <dje@gnu.org>1996-10-15 21:54:30 +0000
committerDoug Evans <dje@gnu.org>1996-10-15 21:54:30 +0000
commita7a4457e29fc6ba350a52c5ebf350526e44d60b7 (patch)
tree1cabfb6726a6c9035191204b2b1a04047d9a1329
parent0002d808492ca4c75bd84afe7d781e6807c7c20d (diff)
downloadgcc-a7a4457e29fc6ba350a52c5ebf350526e44d60b7.zip
gcc-a7a4457e29fc6ba350a52c5ebf350526e44d60b7.tar.gz
gcc-a7a4457e29fc6ba350a52c5ebf350526e44d60b7.tar.bz2
* loop.c (strength_reduce): Avoid taking PATTERN of a label.
From-SVN: r12965
-rw-r--r--gcc/loop.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/gcc/loop.c b/gcc/loop.c
index 6646e9b..3d07320 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -3952,12 +3952,18 @@ strength_reduce (scan_start, end, loop_top, insn_count,
auto_inc_opt = 1;
#ifdef HAVE_cc0
- /* We can't put an insn immediately after one setting
- cc0, or immediately before one using cc0. */
- if ((auto_inc_opt == 1 && sets_cc0_p (PATTERN (v->insn)))
- || (auto_inc_opt == -1
- && sets_cc0_p (PATTERN (prev_nonnote_insn (v->insn)))))
- auto_inc_opt = 0;
+ {
+ rtx prev;
+
+ /* We can't put an insn immediately after one setting
+ cc0, or immediately before one using cc0. */
+ if ((auto_inc_opt == 1 && sets_cc0_p (PATTERN (v->insn)))
+ || (auto_inc_opt == -1
+ && (prev = prev_nonnote_insn (v->insn)) != 0
+ && GET_RTX_CLASS (GET_CODE (prev)) == 'i'
+ && sets_cc0_p (PATTERN (prev))))
+ auto_inc_opt = 0;
+ }
#endif
if (auto_inc_opt)