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 | cf71c6320b2ccac219a5ccf770ad63066bbd7028 (patch) | |
| tree | 856be2471a30b78057fd765808748933617bcf44 /llvm/lib/Bitcode/Reader/BitcodeReader.cpp | |
| parent | 5cc6cc13266b11a56b1b5e4b8f16351d85cfbe49 (diff) | |
| download | llvm-cf71c6320b2ccac219a5ccf770ad63066bbd7028.zip llvm-cf71c6320b2ccac219a5ccf770ad63066bbd7028.tar.gz llvm-cf71c6320b2ccac219a5ccf770ad63066bbd7028.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>
llvm-svn: 190713
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
0 files changed, 0 insertions, 0 deletions
