aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@redhat.co.uk>2000-09-08 02:46:41 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2000-09-08 03:46:41 +0100
commit712646d00e2328dc283975fd5cff8fef603ad787 (patch)
tree62ef210fc73c3ab84d6550dc9923ff416f21f50b /gcc
parent30acbc3e34bb8b43154fc49bf84ebce893f165d9 (diff)
downloadgcc-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')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/sh/sh.md42
2 files changed, 20 insertions, 29 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 65f44a7..9e2afe1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+Fri Sep 8 03:26:38 2000 J"orn Rennecke <amylaar@redhat.co.uk>
+
+ * 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.
+
2000-09-07 Richard Henderson <rth@cygnus.com>
* c-lex.c (process_directive): If not HANDLE_GENERIC_PRAGMAS,
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"