diff options
author | Doug Evans <dje@gnu.org> | 1996-10-15 21:54:30 +0000 |
---|---|---|
committer | Doug Evans <dje@gnu.org> | 1996-10-15 21:54:30 +0000 |
commit | a7a4457e29fc6ba350a52c5ebf350526e44d60b7 (patch) | |
tree | 1cabfb6726a6c9035191204b2b1a04047d9a1329 | |
parent | 0002d808492ca4c75bd84afe7d781e6807c7c20d (diff) | |
download | gcc-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.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -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) |