aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-06-01 07:41:08 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1993-06-01 07:41:08 -0400
commitc225ba7b5689276a207812b5e9512dc34c80522e (patch)
treed8ddeea2ecebf4732f1db2f7c90cb069528b6c2e
parent591d2ce85de124b6b5fab0ef0b64f0e69dc09384 (diff)
downloadgcc-c225ba7b5689276a207812b5e9512dc34c80522e.zip
gcc-c225ba7b5689276a207812b5e9512dc34c80522e.tar.gz
gcc-c225ba7b5689276a207812b5e9512dc34c80522e.tar.bz2
(ffs): Delete pattern containing nonexistant instruction.
From-SVN: r4620
-rw-r--r--gcc/config/rs6000/rs6000.md29
1 files changed, 13 insertions, 16 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index a9272ba..4327d0c 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -435,20 +435,6 @@
""
"neg %0,%1\;and %0,%0,%1\;cntlz %0,%0\;sfi %0,%0,32")
-;; There is no need for (set (condition) (compare (ffs) 0)) because that
-;; can be simplified to an ordinary comparison. A parallel set and compare
-;; might be used, so include it.
-
-(define_insn ""
- [(set (match_operand:CC 2 "cc_reg_operand" "=x")
- (compare:CC (ffs:SI (match_operand:SI 1 "register_operand" "r"))
- (const_int 0)))
- (set (match_operand:SI 0 "register_operand" "=&r")
- (ffs:SI (match_dup 1)))]
- ""
- "neg %0,%1\;and %0,%0,%1\;cntlz %0,%0\;sfi. %0,%0,32"
- [(set_attr "type" "compare")])
-
(define_insn "mulsi3"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
(mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
@@ -4650,7 +4636,18 @@
""
"cror 0,0,0")
-;; Define the subtract-one-and-jump insns.
+;; Define the subtract-one-and-jump insns, starting with the template
+;; so loop.c knows what to generate.
+
+(define_expand "decrement_and_branchsi"
+ [(parallel [(set (pc) (if_then_else (ne (match_operand:SI 0 "register_operand" "c")
+ (const_int 1))
+ (label_ref (match_operand 1 "" ""))
+ (pc)))
+ (set (match_dup 0) (plus:SI (match_dup 0) (const_int -1)))])]
+ ""
+ "")
+
;; We need to be able to do this for any operand, including MEM, or we
;; will cause reload to blow up since we don't allow output reloads on
;; JUMP_INSNs.
@@ -4670,7 +4667,7 @@
#
#")
-;; Similar, but we can use GE since we have a REG_NOTES.
+;; Similar, but we can use GE since we have a REG_NONNEG.
(define_insn ""
[(set (pc)
(if_then_else (ge (match_operand:SI 1 "register_operand" "0,*r,*r")