[Bug rtl-optimization/32725] Unnecessary reg-reg moves

bonzini at gnu dot org gcc-bugzilla@gcc.gnu.org
Wed Jul 11 19:49:00 GMT 2007



------- Comment #3 from bonzini at gnu dot org  2007-07-11 19:49 -------
First, I'm not a reload expert. :-)  But it does not look like a reload bug (or
at least it is easily worked around in the machine description, methinks). 

regmove should have changed that but it does not probably because the final
constraint does not have a duplicate operand.  Actually, I think you want to
look at anddi_1_rex64, not adddi_1_rex64:

  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,rm,r,r")
        (and:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,0,qm")
                (match_operand:DI 2 "x86_64_szext_general_operand"
"Z,re,rm,L")))
   (clobber (reg:CC FLAGS_REG))]

The final constraint is for when and is used to create a zero-extending moves
(L matches constants 0xFF and 0xFFFF).  I would say that you have to 1) define
a predicate which has the same behavior as L and 2) split that alternative out
of the three anddi patterns that use it (grep for '\<L\>') into a separate
insn.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32725



More information about the Gcc-bugs mailing list