aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-04-02 00:14:57 -0800
committerRichard Henderson <rth@gcc.gnu.org>2002-04-02 00:14:57 -0800
commit161eb4fc98a6c96ad2b4cf6ac40dac12a87db468 (patch)
tree2389ba6f9e306c92c79373dbc6454c807d6aca5f /gcc
parent501e321e0d7866c59b729e795d02d2ba43467ab4 (diff)
downloadgcc-161eb4fc98a6c96ad2b4cf6ac40dac12a87db468.zip
gcc-161eb4fc98a6c96ad2b4cf6ac40dac12a87db468.tar.gz
gcc-161eb4fc98a6c96ad2b4cf6ac40dac12a87db468.tar.bz2
* config/m68k/m68k.md (dbcc peepholes): Match four forms of dbra.
From-SVN: r51736
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/m68k/m68k.md51
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 "" ""))