aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/ia64/ia64.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/ia64/ia64.md')
-rw-r--r--gcc/config/ia64/ia64.md16
1 files changed, 10 insertions, 6 deletions
diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md
index 6b7eb15..a83fb34 100644
--- a/gcc/config/ia64/ia64.md
+++ b/gcc/config/ia64/ia64.md
@@ -520,16 +520,20 @@
;; 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")