[X86] Memory folding for commutative instructions (updated)
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Mon, 20 Oct 2014 22:14:22 +0000 (22:14 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Mon, 20 Oct 2014 22:14:22 +0000 (22:14 +0000)
commit0d1978b8130c14b97d2e5ca66e5bfb975d6e46b4
tree43a1f2eee8fd1dba4ae8d305e68148ac2322b26d
parentb9c7f601917b88f9743a42d97081b1655fe9bf06
[X86] Memory folding for commutative instructions (updated)

This patch improves support for commutative instructions in the x86 memory folding implementation by attempting to fold a commuted version of the instruction if the original folding fails - if that folding fails as well the instruction is 're-commuted' back to its original order before returning.

Updated version of r219584 (reverted in r219595) - the commutation attempt now explicitly ensures that neither of the commuted source operands are tied to the destination operand / register, which was the source of all the regressions that occurred with the original patch attempt.

Added additional regression test case provided by Joerg Sonnenberger.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220239 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86FastISel.cpp
lib/Target/X86/X86InstrInfo.cpp
lib/Target/X86/X86InstrInfo.h
test/CodeGen/X86/avx1-stack-reload-folding.ll [new file with mode: 0644]
test/CodeGen/X86/fold-tied-op.ll [new file with mode: 0644]