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

--- Comment #6 from Vladimir Makarov <vmakarov at gcc dot gnu.org> ---
The culprit for the bad code generation is the following insn description

(define_insn "*movsi_internal"
  [(set (match_operand:SI 0 "nonimmediate_operand"
    "=r,m ,*y,*y,?*y,?m,?r,?*y,*v,*v,*v,m ,?r,?*v,*k,*k ,*rm")
        (match_operand:SI 1 "general_operand"
    "g ,re,C ,*y,m  ,*y,*y,r  ,C ,*v,m ,*v,*v,r  ,*r,*km,*k"))]

Alternatives with sse regs are not considered at all (hint *) for cost
calculation even if one operand is sse hard reg.  And therefore sse class for
another operand with pseudo is too costly.

Removing the hints is not a solution.  I believe we will have even more
problems with GCC testsuite.  So I am trying to solve it with specific
treatment of moves for cost calculations.  The patch I am working on solves the
PR but currently creates a few GCC testsuite failures (unexpected but correct
code generation).  So I am continuing to work on the PR.

Reply via email to