aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/X86/X86InstrAVX512.td
diff options
context:
space:
mode:
authorQuentin Colombet <qcolombet@apple.com>2013-09-13 18:26:31 +0000
committerQuentin Colombet <qcolombet@apple.com>2013-09-13 18:26:31 +0000
commit0df68423f9567b3d3eafb3b26668f783b07f687f (patch)
tree7dc78dfa4e7836681d82e8a5e2d4ca784acf73f0 /lib/Target/X86/X86InstrAVX512.td
parentcbe40cfe96a6bb3f2da56445269c2c71e55e0e56 (diff)
downloadexternal_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