aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2002-12-12 22:29:10 +0000
committerKazu Hirata <kazu@cs.umass.edu>2002-12-12 22:29:10 +0000
commitd4fb279fcfa5eb122a12630e4d0e5e6a09d26377 (patch)
tree3536215d2e42dc9a4e0a3446c6d0157591ba78a3
parent8411fcc97a533615b4bbb327321e22edfa575638 (diff)
* config/h8300/h8300.md: Add a new peephole2.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@60082 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/h8300/h8300.md33
2 files changed, 37 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3accc82cefa..bf71fdb15af 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
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
that's accepted by CONST_OK_FOR_J.
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index ca95f4bbe75..8bc69aa85f6 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)))]
+ "")