diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2004-03-04 18:05:06 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2004-03-04 18:05:06 +0000 |
commit | d3c40837991a971dc9c72e144324dc8758d3ea38 (patch) | |
tree | bfacf793cedcd1a55cfa793c40c99522afd639ff /gcc | |
parent | eb3d7f9d1f9e562b379585773a26920e2cceab30 (diff) | |
download | gcc-d3c40837991a971dc9c72e144324dc8758d3ea38.zip gcc-d3c40837991a971dc9c72e144324dc8758d3ea38.tar.gz gcc-d3c40837991a971dc9c72e144324dc8758d3ea38.tar.bz2 |
* config/h8300/h8300.md: Add comments about peephole2's.
From-SVN: r78921
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.md | 73 |
2 files changed, 68 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ea801b9..13ce22d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2004-03-04 Kazu Hirata <kazu@cs.umass.edu> + + * config/h8300/h8300.md: Add comments about peephole2's. + 2004-03-04 Steven Bosscher <stevenb@suse.de> * i386.h (TARGET_CPU_DEFAULT_nocona): Fix value. diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index 6bd5143..b653cc9 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -4373,8 +4373,15 @@ ;; ;; ---- 65535 geu/ltu mov.w -;; For a small constant, it is cheaper to actually do the subtraction -;; and then test the register. +;; Transform +;; +;; cmp.l #1,er0 +;; beq .L1 +;; +;; into +;; +;; dec.l #1,er0 +;; beq .L1 (define_peephole2 [(set (cc0) @@ -4399,6 +4406,16 @@ (pc)))] "operands[4] = GEN_INT (- INTVAL (operands[1]));") +;; Transform +;; +;; cmp.l #65536,er0 +;; beq .L1 +;; +;; into +;; +;; dec.l #1,e0 +;; beq .L1 + (define_peephole2 [(set (cc0) (compare (match_operand:SI 0 "register_operand" "") @@ -4425,9 +4442,16 @@ (pc)))] "operands[4] = GEN_INT (- INTVAL (operands[1]));") -;; For certain (in)equality comparisons against a constant, we can -;; XOR the register with the constant, and test the register against -;; 0. +;; Transform +;; +;; cmp.l #100,er0 +;; beq .L1 +;; +;; into +;; +;; xor.b #100,er0 +;; mov.l er0,er0 +;; beq .L1 (define_peephole2 [(set (cc0) @@ -4456,6 +4480,17 @@ (pc)))] "") +;; Transform +;; +;; cmp.l #-100,er0 +;; beq .L1 +;; +;; into +;; +;; xor.b #99,er0 +;; not.l er0 +;; beq .L1 + (define_peephole2 [(set (cc0) (compare (match_operand:SI 0 "register_operand" "") @@ -4484,6 +4519,17 @@ (pc)))] "operands[4] = GEN_INT (INTVAL (operands[1]) ^ -1);") +;; Transform +;; +;; cmp.l #-2147483648,er0 +;; beq .L1 +;; +;; into +;; +;; rotl.l er0 +;; dec.l #1,er0 +;; beq .L1 + (define_peephole2 [(set (cc0) (compare (match_operand:SI 0 "register_operand" "") @@ -4829,10 +4875,19 @@ const0_rtx); }) -;; For constants like -1, -2, 1, 2, it is still cheaper to make a copy -;; of the register being tested, do the subtraction on the copy, and -;; then test the copy. We avoid this transformation if we see more -;; than one copy of the same compare insn. +;; Transform +;; +;; cmp.l #1,er0 +;; beq .L1 +;; +;; into +;; +;; mov.l er0,er1 +;; dec.l #1,er1 +;; beq .L1 + +;; We avoid this transformation if we see more than one copy of the +;; same compare insn. (define_peephole2 [(match_scratch:SI 4 "r") |