Teach two-address lowering how to unfold a load to open up commuting
authorDan Gohman <gohman@apple.com>
Mon, 21 Jun 2010 22:17:20 +0000 (22:17 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 21 Jun 2010 22:17:20 +0000 (22:17 +0000)
commit584fedf188e863604f7b946a931c0f40cf9c944e
tree124aa24862dceb32621b9fbdefa15e4f42953b0a
parentb7cc3f6ae6311395080693a14e67105ddc53665c
Teach two-address lowering how to unfold a load to open up commuting
opportunities. For example, this lets it emit this:

   movq (%rax), %rcx
   addq %rdx, %rcx

instead of this:

   movq %rdx, %rcx
   addq (%rax), %rcx

in the case where %rdx has subsequent uses. It's the same number
of instructions, and usually the same encoding size on x86, but
it appears faster, and in general, it may allow better scheduling
for the load.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106493 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/TwoAddressInstructionPass.cpp
test/CodeGen/X86/2007-01-08-InstrSched.ll
test/CodeGen/X86/lsr-reuse.ll
test/CodeGen/X86/pic.ll
test/CodeGen/X86/stack-align.ll
test/CodeGen/X86/tailcallstack64.ll