diff options
Diffstat (limited to 'gcc/config/ia64/ia64.md')
| -rw-r--r-- | gcc/config/ia64/ia64.md | 16 |
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") |
