https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70873

--- Comment #12 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to Bernd Schmidt from comment #10)
> Looks to me like epilogue_completed would be a good predicate. I'll put the
> following in a bootstrap, let me know if you're OK with this patch.
> 
> Index: i386.md
> ===================================================================
> --- i386.md   (revision 235808)
> +++ i386.md   (working copy)
> @@ -5196,12 +5196,13 @@ (define_split
>  
>  ;; Break partial reg stall for cvtsd2ss.
>  
> -(define_peephole2
> +(define_split
>    [(set (match_operand:SF 0 "register_operand")
>          (float_truncate:SF
>         (match_operand:DF 1 "nonimmediate_operand")))]
>    "TARGET_SSE2 && TARGET_SSE_MATH
>     && TARGET_SSE_PARTIAL_REG_DEPENDENCY
> +   && epilogue_completed
>     && optimize_function_for_speed_p (cfun)
>     && SSE_REG_P (operands[0])
>     && (!SSE_REG_P (operands[1])
> @@ -5223,13 +5224,14 @@ (define_peephole2
>  
>  ;; Break partial reg stall for cvtss2sd.
>  
> -(define_peephole2
> +(define_split
>    [(set (match_operand:DF 0 "register_operand")
>          (float_extend:DF
>            (match_operand:SF 1 "nonimmediate_operand")))]
>    "TARGET_SSE2 && TARGET_SSE_MATH
>     && TARGET_SSE_PARTIAL_REG_DEPENDENCY
> +   && epilogue_completed
>     && optimize_function_for_speed_p (cfun)
>     && SSE_REG_P (operands[0])
>     && (!SSE_REG_P (operands[1])
>         || REGNO (operands[0]) != REGNO (operands[1]))

I still see:

        vcvtss2sd       (%ecx,%eax,4), %xmm5, %xmm5

without vxorpd.

Reply via email to