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

Quentin Colombet qcolombet at apple.com
Wed Aug 28 17:29:12 PDT 2013


Hi Evan,

Eric suggested that you may be the right person to review this patch.
Could you have a look, please?

This fixes <rdar://problem/14742333>.

Thanks,
-Quentin

On Aug 28, 2013, at 5:25 PM, Quentin Colombet <qcolombet at apple.com> wrote:

> 
> On Aug 28, 2013, at 4:43 PM, Eric Christopher <echristo at gmail.com> wrote:
> 
>>> 
>>> The patch is not triggered by any of the tests that are in the llvm test
>>> suite (tested on both ARM and X86).
>>> 
>> 
>> *nod* I figured, otherwise you'd have said it. :)
>> 
>>> Like I said in my original email, I could rewrite/eliminate more
>>> aggressively copies (and in that case it does kick in in the llvm test
>>> suite) but then, the register allocator does in a few cases a poor
>>> coalescing/live-range splitting job.
>>> 
>> 
>> *nod*
>> 
>>> That said, as it is, when the patch kicks in, we observed with our internal
>>> tests: no regressions and up to 25% runtime speed-up.
>>> 
>> 
>> Pretty nice. Can you give a general idea of the type of code that this
>> is triggering on?
> Basically it was some code using a tone of intrinsics, in particular mixing vector, integer, and floating point code.
> For isel, this means, tone of bitcast, vector insert, and vector extract, across different basic blocks.
> 
>> 
>>> Perhaps an
>>> example of what you're optimizing as a comment in the code?
>>> 
>>> I have added one in the file header. What do you think?
>>> 
>> 
>> Helps. I was hoping for more code details, but the comment provides
>> some helpful bit.
> Do you think I should put more comments?
> 
>> 
>>> I have moved the assignment inside the loop.
>>> Is it better?
>>> (I do like predicated code!)
>>> 
>> 
>> Looks better to me from a readability perspective.
>> 
>>> 
>>> I'm not necessarily comfortable approving, but the code looks reasonable.
>>> 
>>> What do you miss to be comfortable?
>>> Could you point me someone that may be comfortable to approve this, please?
>>> (So that I can through him under the bus!)
>>> 
>> 
>> Ultimately Jakob or Evan. It looks pretty simple so unless you get an
>> objection by tomorrow morning I guess submit?
> I will do that.
> 
> Thanks,
> Quentin
>> 
>> -eric
>> 
>>> Thanks again.
>>> 
>>> -Quentin
>>> 
>>> 
>>> -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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130828/2685dfe2/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PeepholeCopy.svndiff
Type: application/octet-stream
Size: 6312 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130828/2685dfe2/attachment.obj>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130828/2685dfe2/attachment-0001.html>


More information about the llvm-commits mailing list