[TwoAddressInstructionPass] Try 3 Addr Conversion After Commuting.
authorQuentin Colombet <qcolombet@apple.com>
Wed, 1 Jul 2015 23:12:13 +0000 (23:12 +0000)
committerQuentin Colombet <qcolombet@apple.com>
Wed, 1 Jul 2015 23:12:13 +0000 (23:12 +0000)
commita1a323c6376719271f7f1506bd38062189328ef6
tree9dbea0e8a7f22621a7b624f4d68eaa761faef86d
parentc098b6e6e2d4ad84c5a89ae94199d3385748ddaf
[TwoAddressInstructionPass] Try 3 Addr Conversion After Commuting.

TwoAddressInstructionPass stops after a successful commuting but 3 Addr
conversion might be good for some cases.

Consider:

int foo(int a, int b) {
  return a + b;
}

Before this commit, we emit:

addl %esi, %edi
movl %edi, %eax
ret

After this commit, we try 3 Addr conversion:

leal (%rsi,%rdi), %eax
ret

Patch by Volkan Keles <vkeles@apple.com>!

Differential Revision: http://reviews.llvm.org/D10851

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241206 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/TwoAddressInstructionPass.cpp
test/CodeGen/X86/commute-two-addr.ll
test/CodeGen/X86/twoaddr-lea.ll
test/CodeGen/X86/win64_params.ll
test/Transforms/LoopStrengthReduce/X86/ivchain-stress-X86.ll