* config/mips/mips.md: Merge mips16 lw/srl pattern with its splitter
authorRichard Sandiford <rsandifo@redhat.com>
Mon, 6 Oct 2003 07:53:16 +0000 (07:53 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 6 Oct 2003 07:53:16 +0000 (07:53 +0000)
From-SVN: r72134

gcc/ChangeLog
gcc/config/mips/mips.md

index 6587b58c618236a830a5486d8c57dfc772a30474..9594eb68c1f96c7d956d49754e6dee0286544e2c 100644 (file)
@@ -1,4 +1,9 @@
+2003-10-06  Richard Sandiford  <rsandifo@redhat.com>
+
+       * config/mips/mips.md: Merge mips16 lw/srl pattern with its splitter.
+
 2003-10-05  Andrew Pinski  <apinski@apple.com>
+
        * config/darwin.c (machopic_non_lazy_ptr_name): Fix off by one
        errors in memcpy destinations.
        (machopic_stub_name): Likewise.
index 932025fdd934f0a0aa0e3fb9fd612bca46448cc0..18664397084641052a9e7e0002f51a82909e067a 100644 (file)
@@ -5867,29 +5867,22 @@ sra\t%M0,%M1,%2\n\
 ;; register, and an and (the key problem here is that the mips16 does
 ;; not have and immediate).  We recognize a shift of a load in order
 ;; to make it simple enough for combine to understand.
-
-;; ??? FIXME: turn into a define_insn_and_split
-(define_insn ""
+;;
+;; The length here is the worst case: the length of the split version
+;; will be more accurate. 
+(define_insn_and_split ""
   [(set (match_operand:SI 0 "register_operand" "=d")
        (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
                     (match_operand:SI 2 "immediate_operand" "I")))]
-  "0 && TARGET_MIPS16"
-  "lw\t%0,%1\;srl\t%0,%2"
-  [(set_attr "type"    "load")
-   (set_attr "mode"    "SI")
-   (set_attr_alternative "length"
-               [(if_then_else (match_operand:VOID 2 "m16_uimm3_b" "")
-                              (const_int 12)
-                              (const_int 16))])])
-
-(define_split
-  [(set (match_operand:SI 0 "register_operand" "")
-       (lshiftrt:SI (match_operand:SI 1 "memory_operand" "")
-                    (match_operand:SI 2 "immediate_operand" "")))]
-  "TARGET_MIPS16 && !TARGET_DEBUG_D_MODE"
+  "TARGET_MIPS16"
+  "#"
+  ""
   [(set (match_dup 0) (match_dup 1))
    (set (match_dup 0) (lshiftrt:SI (match_dup 0) (match_dup 2)))]
-  "")
+  ""
+  [(set_attr "type"    "load")
+   (set_attr "mode"    "SI")
+   (set_attr "length"  "16")])
 
 (define_expand "lshrdi3"
   [(parallel [(set (match_operand:DI 0 "register_operand" "")