From 161eb4fc98a6c96ad2b4cf6ac40dac12a87db468 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 2 Apr 2002 00:14:57 -0800 Subject: [PATCH] * config/m68k/m68k.md (dbcc peepholes): Match four forms of dbra. From-SVN: r51736 --- gcc/ChangeLog | 5 ++++ gcc/config/m68k/m68k.md | 51 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f59547c250f..c1eeba49bbd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-04-02 Richard Henderson + + PR opt/420 + * config/m68k/m68k.md (dbcc peepholes): Match four forms of dbra. + 2002-04-01 Richard Henderson PR target/1538 diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index 41cf9b20468..35ca2baae55 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -7653,6 +7653,7 @@ ;; ;; 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)]) @@ -7661,7 +7662,53 @@ (parallel [(set (pc) (if_then_else - (ge (plus:HI (match_operand:HI 0 "register_operand" "+d") + (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)]) + (label_ref (match_operand 2 "" "")) + (pc))) + (parallel + [(set (pc) + (if_then_else + (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 "" ""))