From 7930523de8ea4ce820f4a83b2a87b076b5d0ff37 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu@cs.umass.edu>
Date: Thu, 12 Dec 2002 22:29:10 +0000
Subject: [PATCH] * config/h8300/h8300.md: Add a new peephole2.

From-SVN: r60082
---
 gcc/ChangeLog             |  4 ++++
 gcc/config/h8300/h8300.md | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3accc82cefa6..bf71fdb15afa 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-12-12  Kazu Hirata  <kazu@cs.umass.edu>
+
+	* config/h8300/h8300.md: Add a new peephole2.
+
 2002-12-12  Kazu Hirata  <kazu@cs.umass.edu>
 
 	* config/h8300/h8300.md (a peephole2): Accept a constant
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index ca95f4bbe758..8bc69aa85f68 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -2748,3 +2748,36 @@
 	(plus:SI (match_dup 0)
 		 (match_dup 1)))]
   "")
+
+;; Turn
+;;
+;;   mov.l er7,er0
+;;   add.l #10,er0  (takes 8 bytes)
+;;
+;; into
+;;
+;;   sub.l er0,er0
+;;   add.b #10,r0l
+;;   add.l er7,er0  (takes 6 bytes)
+
+(define_peephole2
+  [(set (match_operand:SI 0 "register_operand" "")
+	(match_operand:SI 1 "register_operand" ""))
+   (set (match_dup 0)
+	(plus:SI (match_dup 0)
+		 (match_operand:SI 2 "const_int_operand" "")))]
+  "(TARGET_H8300H || TARGET_H8300S)
+   && REG_P (operands[0]) && REG_P (operands[1])
+   && REGNO (operands[0]) != REGNO (operands[1])
+   && !CONST_OK_FOR_L (INTVAL (operands[2]))
+   && !CONST_OK_FOR_N (INTVAL (operands[2]))
+   && ((INTVAL (operands[2]) & 0xff) == INTVAL (operands[2])
+       || (INTVAL (operands[2]) & 0xff00) == INTVAL (operands[2])
+       || INTVAL (operands[2]) == 0xffff
+       || INTVAL (operands[2]) == 0xfffe)"
+  [(set (match_dup 0)
+	(match_dup 2))
+   (set (match_dup 0)
+	(plus:SI (match_dup 0)
+		 (match_dup 1)))]
+  "")