diff options
author | Quentin Colombet <qcolombet@apple.com> | 2013-09-13 18:26:31 +0000 |
---|---|---|
committer | Quentin Colombet <qcolombet@apple.com> | 2013-09-13 18:26:31 +0000 |
commit | 0df68423f9567b3d3eafb3b26668f783b07f687f (patch) | |
tree | 7dc78dfa4e7836681d82e8a5e2d4ca784acf73f0 /lib/Target/X86/X86InstrAVX512.td | |
parent | cbe40cfe96a6bb3f2da56445269c2c71e55e0e56 (diff) | |
download | external_llvm-0df68423f9567b3d3eafb3b26668f783b07f687f.zip external_llvm-0df68423f9567b3d3eafb3b26668f783b07f687f.tar.gz external_llvm-0df68423f9567b3d3eafb3b26668f783b07f687f.tar.bz2 |
[Peephole] Rewrite copies to avoid cross register banks copies.
By definition copies across register banks are not coalescable. Still, it may be
possible to get rid of such a copy when the value is available in another
register of the same register file.
Consider the following example, where capital and lower letters denote different
register file:
b = copy A <-- cross-bank copy
...
C = copy b <-- cross-bank copy
This could have been optimized this way:
b = copy A <-- cross-bank copy
...
C = copy A <-- same-bank copy
Note: b and C's definitions may be in different basic blocks.
This patch adds a peephole optimization that looks through a chain of copies
leading to a cross-bank copy and reuses a source that is on the same register
file if available.
This solution could also be used to get rid of some copies (e.g., A could have
been used instead of C). However, we do not do so because:
- It may over constrain the coloring of the source register for coalescing.
- The register allocator may not be able to find a nice split point for the
longer live-range, leading to more spill.
<rdar://problem/14742333>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190713 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86InstrAVX512.td')
0 files changed, 0 insertions, 0 deletions