Commit 509a77dc by Uros Bizjak Committed by Uros Bizjak

i386.md (extendsfdf2, [...]): Do not force operand1 to register if both operands…

i386.md (extendsfdf2, [...]): Do not force operand1 to register if both operands are memory operands.

        * config/i386/i386.md (extendsfdf2, extendsfxf2, extenddfxf2): Do not
        force operand1 to register if both operands are memory operands.
        (*extendsfdf2_mixed, *extendsfdf2_sse, *extendsfdf2_i387)
        (*extendsfxf2_i387, *extenddfxf2_i387): Do not disable pattern
        if both operands are memory operands.
        (truncdfsf2): Do not force operand1 to register if both operands
        are memory operands.

From-SVN: r117934
parent 70ec446f
2006-10-21 Uros Bizjak <uros@kss-loka.si>
* config/i386/i386.md (extendsfdf2, extendsfxf2, extenddfxf2): Do not
force operand1 to register if both operands are memory operands.
(*extendsfdf2_mixed, *extendsfdf2_sse, *extendsfdf2_i387)
(*extendsfxf2_i387, *extenddfxf2_i387): Do not disable pattern
if both operands are memory operands.
(truncdfsf2): Do not force operand1 to register if both operands
are memory operands.
2006-10-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2006-10-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (LIBS): Add $(GMPLIBS). * Makefile.in (LIBS): Add $(GMPLIBS).
......
...@@ -3533,15 +3533,12 @@ ...@@ -3533,15 +3533,12 @@
} }
operands[1] = validize_mem (force_const_mem (SFmode, operands[1])); operands[1] = validize_mem (force_const_mem (SFmode, operands[1]));
} }
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
operands[1] = force_reg (SFmode, operands[1]);
}) })
(define_insn "*extendsfdf2_mixed" (define_insn "*extendsfdf2_mixed"
[(set (match_operand:DF 0 "nonimmediate_operand" "=f,m,Y") [(set (match_operand:DF 0 "nonimmediate_operand" "=f,m,Y")
(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,f,mY")))] (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,f,mY")))]
"TARGET_SSE2 && TARGET_MIX_SSE_I387 "TARGET_SSE2 && TARGET_MIX_SSE_I387"
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{ {
switch (which_alternative) switch (which_alternative)
{ {
...@@ -3567,8 +3564,7 @@ ...@@ -3567,8 +3564,7 @@
(define_insn "*extendsfdf2_sse" (define_insn "*extendsfdf2_sse"
[(set (match_operand:DF 0 "nonimmediate_operand" "=Y") [(set (match_operand:DF 0 "nonimmediate_operand" "=Y")
(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "mY")))] (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "mY")))]
"TARGET_SSE2 && TARGET_SSE_MATH "TARGET_SSE2 && TARGET_SSE_MATH"
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"cvtss2sd\t{%1, %0|%0, %1}" "cvtss2sd\t{%1, %0|%0, %1}"
[(set_attr "type" "ssecvt") [(set_attr "type" "ssecvt")
(set_attr "mode" "DF")]) (set_attr "mode" "DF")])
...@@ -3576,8 +3572,7 @@ ...@@ -3576,8 +3572,7 @@
(define_insn "*extendsfdf2_i387" (define_insn "*extendsfdf2_i387"
[(set (match_operand:DF 0 "nonimmediate_operand" "=f,m") [(set (match_operand:DF 0 "nonimmediate_operand" "=f,m")
(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))]
"TARGET_80387 "TARGET_80387"
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{ {
switch (which_alternative) switch (which_alternative)
{ {
...@@ -3615,15 +3610,12 @@ ...@@ -3615,15 +3610,12 @@
} }
operands[1] = validize_mem (force_const_mem (SFmode, operands[1])); operands[1] = validize_mem (force_const_mem (SFmode, operands[1]));
} }
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
operands[1] = force_reg (SFmode, operands[1]);
}) })
(define_insn "*extendsfxf2_i387" (define_insn "*extendsfxf2_i387"
[(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m")
(float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))]
"TARGET_80387 "TARGET_80387"
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{ {
switch (which_alternative) switch (which_alternative)
{ {
...@@ -3663,15 +3655,12 @@ ...@@ -3663,15 +3655,12 @@
} }
operands[1] = validize_mem (force_const_mem (DFmode, operands[1])); operands[1] = validize_mem (force_const_mem (DFmode, operands[1]));
} }
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
operands[1] = force_reg (DFmode, operands[1]);
}) })
(define_insn "*extenddfxf2_i387" (define_insn "*extenddfxf2_i387"
[(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m")
(float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))] (float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))]
"TARGET_80387 "TARGET_80387"
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{ {
switch (which_alternative) switch (which_alternative)
{ {
...@@ -3707,9 +3696,6 @@ ...@@ -3707,9 +3696,6 @@
(match_operand:DF 1 "nonimmediate_operand" "")))] (match_operand:DF 1 "nonimmediate_operand" "")))]
"TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH)" "TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH)"
{ {
if (MEM_P (operands[0]) && MEM_P (operands[1]))
operands[1] = force_reg (DFmode, operands[1]);
if (TARGET_SSE2 && TARGET_SSE_MATH && !TARGET_MIX_SSE_I387) if (TARGET_SSE2 && TARGET_SSE_MATH && !TARGET_MIX_SSE_I387)
; ;
else if (flag_unsafe_math_optimizations) else if (flag_unsafe_math_optimizations)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment