------- 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

Reply via email to