[PATCH][Peephole] Rewrite copies to avoid cross register banks copies.

Eric Christopher echristo at gmail.com
Wed Aug 28 14:54:56 PDT 2013


Interesting patch. It could definitely use some numbers. Perhaps an
example of what you're optimizing as a comment in the code?

Silly nits:

couple (RegisterClass, SubReg)

maybe "pair"?

// if

Capitalize.

A few more things:

+  } while (!ShouldRewrite && (Copy = MRI->getVRegDef(Src)) && Copy->isCopy());

I really dislike assignments in this sort of conditional.

I'm not necessarily comfortable approving, but the code looks reasonable.

-eric


On Fri, Aug 23, 2013 at 1:04 PM, Quentin Colombet <qcolombet at apple.com> wrote:
> Hi,
>
> Here is a patch to rewrite copies to avoid cross register banks copies when possible.
> Thanks for your reviews.
>
> ** Context **
>
> By definition copies across register bank 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.
>
>
> ** Proposed Solution **
>
> Add 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.
>
>
> ** Testcase?! **
>
> This patch does not include a test case, because it is very difficult to reproduce this behavior with a reasonably small input.
>
> Cheers,
> -Quentin
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>




More information about the llvm-commits mailing list