[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