[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)
commit2f9548a3efe4cd7268f2572710608bff1218393c
tree2dc8eaf5cabc7dbf9b313ba50168023011d3d7d4
parentc1fdf7fa111f9a153a67e69d75f843ac89ce8d27
[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

llvm-svn: 220239
llvm/lib/Target/X86/X86FastISel.cpp
llvm/lib/Target/X86/X86InstrInfo.cpp
llvm/lib/Target/X86/X86InstrInfo.h
llvm/test/CodeGen/X86/avx1-stack-reload-folding.ll [new file with mode: 0644]
llvm/test/CodeGen/X86/fold-tied-op.ll [new file with mode: 0644]