Skip to content
  • Quentin Colombet's avatar
    [Peephole] Rewrite copies to avoid cross register banks copies. · cf71c632
    Quentin Colombet authored
    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
    cf71c632
Loading