[PeepholeOptimizer] Advanced rewriting of copies to avoid cross register banks
authorQuentin Colombet <qcolombet@apple.com>
Tue, 1 Jul 2014 14:33:36 +0000 (14:33 +0000)
committerQuentin Colombet <qcolombet@apple.com>
Tue, 1 Jul 2014 14:33:36 +0000 (14:33 +0000)
commite9a4e0681eff4260e8eab4396a0651b29facd585
tree368402f6d39b1402ace015153f9cbe0964cda9e0
parent230bb1b426b4a85b697e967a19349db57bd18484
[PeepholeOptimizer] Advanced rewriting of copies to avoid cross register banks
copies.

This patch extends the peephole optimization introduced in r190713 to produce
register-coalescer friendly copies when possible.

This extension taught the existing cross-bank copy optimization how to deal
with the instructions that generate cross-bank copies, i.e., insert_subreg,
extract_subreg, reg_sequence, and subreg_to_reg.
E.g.
b = insert_subreg e, A, sub0 <-- cross-bank copy
...
C = copy b.sub0 <-- cross-bank copy

Would produce the following code:
b = insert_subreg e, A, sub0 <-- cross-bank copy
...
C = copy A <-- same-bank copy

This patch also introduces a new helper class for that: ValueTracker.
This class implements the logic to look through the copy related instructions
and get the related source.

For now, the advanced rewriting is disabled by default as we are lacking the
semantic on target specific instructions to catch the motivating examples.

Related to <rdar://problem/12702965>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212100 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/MachineInstr.h
lib/CodeGen/PeepholeOptimizer.cpp