OSDN Git Service

* config/h8300/h8300.md (a new peephole2): New.
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 6 Mar 2003 15:14:37 +0000 (15:14 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 6 Mar 2003 15:14:37 +0000 (15:14 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@63892 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/h8300/h8300.md

index 6a56569..d6264c1 100644 (file)
@@ -1,3 +1,7 @@
+2003-03-06  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * config/h8300/h8300.md (a new peephole2): New.
+
 Thu Mar  6 14:20:15 CET 2003  Jan Hubicka  <jh@suse.cz>
 
        * cgraph.c (cgraph_node): Do not confuse nested functions and methods.
index ed154b7..518c98c 100644 (file)
   "operands[2] = gen_lowpart (QImode, operands[0]);
    operands[3] = gen_lowpart (QImode, operands[1]);")
 
+(define_peephole2
+  [(set (match_operand:SI 0 "register_operand" "")
+       (match_operand:SI 1 "memory_operand" ""))
+   (set (match_dup 0)
+       (and:SI (match_dup 0)
+               (match_operand:SI 2 "const_int_operand" "")))]
+  "(TARGET_H8300H || TARGET_H8300S)
+   && !reg_overlap_mentioned_p (operands[0], operands[1])
+   && !(GET_CODE (operands[1]) == MEM && MEM_VOLATILE_P (operands[1]))
+   && (INTVAL (operands[2]) & ~0xffff) == 0
+   && INTVAL (operands[2]) != 255"
+  [(set (match_dup 3)
+       (match_dup 4))
+   (set (match_dup 0)
+       (and:SI (match_dup 0)
+               (match_dup 2)))]
+  "operands[3] = gen_lowpart (HImode, operands[0]);
+   operands[4] = gen_lowpart (HImode, operands[1]);")
+
 ;; (compare (reg:SI) (const_int)) takes 6 bytes, so we try to achieve
 ;; the equivalent with shorter sequences.  Here is the summary.  Cases
 ;; are grouped for each define_peephole2.