[LLVMdev] Help me improve two-address code
Evan Cheng
evan.cheng at apple.com
Thu Apr 16 17:07:09 PDT 2009
On Apr 16, 2009, at 4:25 PM, Greg McGary wrote:
> Evan Cheng wrote:
>> On Apr 16, 2009, at 3:17 PM, Greg McGary wrote:
>>
>>> Is there some optimizer knob I'm not turning properly? In more
>>> complex
>>> cases, GCC does poorly with two-address operand choices and so
>>> bloats
>>> the code with unnecessary register moves. I have high hopes LLVM
>>> can do better, so this result for a simple case is bothersome.
>>>
>>
>> Are you marking add as commutable? Are you making mov as a copy
>> instruction?
>>
>
> How do I mark them? For the commutative property, I observed this
> definition:
>
> def add : SDNode<"ISD::ADD" , SDTIntBinOp ,
> [SDNPCommutative, SDNPAssociative]>;
Yes, the "target-independent" ISD::ADD node is commutative. But it
doesn't mean the target specific instruction it is selected to has to
be commutative.
>
> ... and assumed it was sufficient, since I saw no other targets making
> special arrangements.
In X86InstrInfo.td, ADD32rr (and lots others) are marked isCommutable.
Evan
>
> I see no obvious (to me, anyway 8^) "copy instruction" property. The
> insn in question is generated by copyRegToReg(), and satisfies the
> isMoveInstr() predicate.
>
> G
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list