diff options
author | J"orn Rennecke <amylaar@redhat.co.uk> | 2000-09-08 02:46:41 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2000-09-08 03:46:41 +0100 |
commit | 712646d00e2328dc283975fd5cff8fef603ad787 (patch) | |
tree | 62ef210fc73c3ab84d6550dc9923ff416f21f50b /gcc/config/sh/sh.md | |
parent | 30acbc3e34bb8b43154fc49bf84ebce893f165d9 (diff) | |
download | gcc-712646d00e2328dc283975fd5cff8fef603ad787.zip gcc-712646d00e2328dc283975fd5cff8fef603ad787.tar.gz gcc-712646d00e2328dc283975fd5cff8fef603ad787.tar.bz2 |
sh.md (cmpeqsi_ior_t, [...]): Remove.
* sh.md (cmpeqsi_ior_t, cmpeqsi_and_t): Remove.
(cmpeqdi_t): Add output pattern.
(cmpeqdi_t+1): Don't split when not optimizing.
Restore proper splitting operation.
From-SVN: r36258
Diffstat (limited to 'gcc/config/sh/sh.md')
-rw-r--r-- | gcc/config/sh/sh.md | 42 |
1 files changed, 13 insertions, 29 deletions
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 88a7743..cbbf06e 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -558,30 +558,6 @@ cmp/eq %1,%0 cmp/eq %1,%0") -(define_insn "cmpeqsi_ior_t" - [(set (reg:SI 18) - (ior:SI (reg:SI 18) - (eq:SI (match_operand:SI 0 "arith_reg_operand" "r,z,r") - (match_operand:SI 1 "arith_operand" "N,rI,r"))))] - "" - "@ - bt .+4\;tst %0,%0 - bt .+4\;cmp/eq %1,%0 - bt .+4\;cmp/eq %1,%0" - [(set_attr "length" "4")]) - -(define_insn "cmpeqsi_and_t" - [(set (reg:SI 18) - (and:SI (reg:SI 18) - (eq:SI (match_operand:SI 0 "arith_reg_operand" "r,z,r") - (match_operand:SI 1 "arith_operand" "N,rI,r"))))] - "" - "@ - bf .+4\;tst %0,%0 - bf .+4\;cmp/eq %1,%0 - bf .+4\;cmp/eq %1,%0" - [(set_attr "length" "4")]) - (define_insn "cmpgtsi_t" [(set (reg:SI 18) (gt:SI (match_operand:SI 0 "arith_reg_operand" "r,r") (match_operand:SI 1 "arith_reg_or_0_operand" "r,N")))] @@ -651,18 +627,25 @@ [(set (reg:SI 18) (eq:SI (match_operand:DI 0 "arith_reg_operand" "r,r") (match_operand:DI 1 "arith_reg_or_0_operand" "N,r")))] "" - "#" + "@ + tst %S0,%S0\;bf %,Ldi%=\;tst %R0,%R0\\nLdi%=: + cmp/eq %S1,%S0\;bf %,Ldi%=\;cmp/eq %R1,%R0\\nLdi%=:" [(set_attr "length" "6") (set_attr "type" "arith3b")]) (define_split [(set (reg:SI 18) (eq:SI (match_operand:DI 0 "arith_reg_operand" "r,r") (match_operand:DI 1 "arith_reg_or_0_operand" "N,r")))] - "reload_completed" +;; If we applied this split when not optimizing, it would only be +;; applied during the machine-dependent reorg, when no new basic blocks +;; may be created. + "reload_completed && optimize" [(set (reg:SI 18) (eq:SI (match_dup 2) (match_dup 3))) - (set (reg:SI 18) - (and:SI (reg:SI 18) - (eq:SI (match_dup 4) (match_dup 5))))] + (set (pc) (if_then_else (eq (reg:SI 18) (const_int 0)) + (label_ref (match_dup 6)) + (pc))) + (set (reg:SI 18) (eq:SI (match_dup 4) (match_dup 5))) + (match_dup 6)] " { operands[2] @@ -676,6 +659,7 @@ + (TARGET_LITTLE_ENDIAN ? 1 : 0))); operands[4] = gen_lowpart (SImode, operands[0]); operands[5] = gen_lowpart (SImode, operands[1]); + operands[6] = gen_label_rtx (); }") (define_insn "cmpgtdi_t" |