diff options
author | Richard Henderson <rth@redhat.com> | 2002-04-02 00:14:57 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-04-02 00:14:57 -0800 |
commit | 161eb4fc98a6c96ad2b4cf6ac40dac12a87db468 (patch) | |
tree | 2389ba6f9e306c92c79373dbc6454c807d6aca5f | |
parent | 501e321e0d7866c59b729e795d02d2ba43467ab4 (diff) | |
download | gcc-161eb4fc98a6c96ad2b4cf6ac40dac12a87db468.zip gcc-161eb4fc98a6c96ad2b4cf6ac40dac12a87db468.tar.gz gcc-161eb4fc98a6c96ad2b4cf6ac40dac12a87db468.tar.bz2 |
* config/m68k/m68k.md (dbcc peepholes): Match four forms of dbra.
From-SVN: r51736
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/m68k/m68k.md | 51 |
2 files changed, 54 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f59547c..c1eeba4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-04-02 Richard Henderson <rth@redhat.com> + + PR opt/420 + * config/m68k/m68k.md (dbcc peepholes): Match four forms of dbra. + 2002-04-01 Richard Henderson <rth@redhat.com> PR target/1538 diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index 41cf9b2..35ca2ba 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -7653,6 +7653,53 @@ ;; ;; Which moves the jCC condition outside the inner loop for free. ;; + +(define_peephole + [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p" + [(cc0) (const_int 0)]) + (label_ref (match_operand 2 "" "")) + (pc))) + (parallel + [(set (pc) + (if_then_else + (ne (match_operand:HI 0 "register_operand" "") + (const_int 0)) + (label_ref (match_operand 1 "" "")) + (pc))) + (set (match_dup 0) + (plus:HI (match_dup 0) + (const_int -1)))])] + "!TARGET_5200 && DATA_REG_P (operands[0]) && ! flags_in_68881 ()" + "* +{ + CC_STATUS_INIT; + output_dbcc_and_branch (operands); + return \"\"; +}") + +(define_peephole + [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p" + [(cc0) (const_int 0)]) + (label_ref (match_operand 2 "" "")) + (pc))) + (parallel + [(set (pc) + (if_then_else + (ne (match_operand:SI 0 "register_operand" "") + (const_int 0)) + (label_ref (match_operand 1 "" "")) + (pc))) + (set (match_dup 0) + (plus:SI (match_dup 0) + (const_int -1)))])] + "!TARGET_5200 && DATA_REG_P (operands[0]) && ! flags_in_68881 ()" + "* +{ + CC_STATUS_INIT; + output_dbcc_and_branch (operands); + return \"\"; +}") + (define_peephole [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p" [(cc0) (const_int 0)]) @@ -7661,7 +7708,7 @@ (parallel [(set (pc) (if_then_else - (ge (plus:HI (match_operand:HI 0 "register_operand" "+d") + (ge (plus:HI (match_operand:HI 0 "register_operand" "") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) @@ -7685,7 +7732,7 @@ (parallel [(set (pc) (if_then_else - (ge (plus:SI (match_operand:SI 0 "register_operand" "+d") + (ge (plus:SI (match_operand:SI 0 "register_operand" "") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) |