ia64.md (extendsfdf2): Split the nop case out of existance.
authorRichard Henderson <rth@cygnus.com>
Mon, 8 May 2000 23:30:40 +0000 (16:30 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 8 May 2000 23:30:40 +0000 (16:30 -0700)
        * config/ia64/ia64.md (extendsfdf2): Split the nop case out
        of existance.

From-SVN: r33779

gcc/ChangeLog
gcc/config/ia64/ia64.md

index 95a77c7..20873e6 100644 (file)
@@ -1,8 +1,15 @@
+2000-05-08  Richard Henderson  <rth@cygnus.com>
+
+       * config/ia64/ia64.h (predicate_operator): Declare.
+
+       * config/ia64/ia64.md (extendsfdf2): Split the nop case out
+       of existance.
+
 Mon  8 May 22:17:35 2000  Neil Booth  <NeilB@earthling.net>
 
        * cpplex.c (spell_token): New function.
-         (TOKEN_LEN): Add 1 for whitespace.
-         (_cpp_lex_file): Update to use spell_token.
+       (TOKEN_LEN): Add 1 for whitespace.
+       (_cpp_lex_file): Update to use spell_token.
        * cpplib.h (E): Remove.
        (TTYPE_TABLE): Update CPP_VSPACE entry.
 
index 6b7eb15..a83fb34 100644 (file)
 
 ;; Convert between floating point types of different sizes.
 
-;; ??? Optimization opportunity here.
+;; ??? Optimization opportunity here.  Get rid of the insn altogether
+;; when we can.  Should probably use a scheme like has been proposed
+;; for ia32 in dealing with operands that match unary operators.  This
+;; would let combine merge the thing into adjacent insns.
 
-(define_insn "extendsfdf2"
+(define_insn_and_split "extendsfdf2"
   [(set (match_operand:DF 0 "register_operand" "=f,f")
        (float_extend:DF (match_operand:SF 1 "register_operand" "0,f")))]
   ""
-  "@
-   nop 0
-   mov %0 = %1"
-  [(set_attr "type" "unknown,F")])
+  "mov %0 = %1"
+  ""
+  [(set (match_dup 0) (float_extend:DF (match_dup 1)))]
+  "if (true_regnum (operands[0]) == true_regnum (operands[1])) DONE;"
+  [(set_attr "type" "F")])
 
 (define_insn "truncdfsf2"
   [(set (match_operand:SF 0 "register_operand" "=f")