(ffs): Delete pattern containing nonexistant instruction.
authorRichard Kenner <kenner@gcc.gnu.org>
Tue, 1 Jun 1993 11:41:08 +0000 (07:41 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Tue, 1 Jun 1993 11:41:08 +0000 (07:41 -0400)
From-SVN: r4620

gcc/config/rs6000/rs6000.md

index a9272ba715c645f531a79ef6273a29bc7279f788..4327d0cf5e3e86222d7e4397326f14f589f6f844 100644 (file)
   ""
   "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")
   ""
   "cror 0,0,0")
 \f
-;; 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. 
    #
    #")
                               
-;; 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")