[llvm-dev] Expose aliasing information in getModRefInfo (or viceversa?)

Alina Sbirlea via llvm-dev llvm-dev at lists.llvm.org
Mon Oct 9 16:05:04 PDT 2017


On Mon, Oct 9, 2017 at 2:08 PM, Alina Sbirlea <alina.sbirlea at gmail.com>
wrote:

> On Mon, Oct 9, 2017 at 1:57 PM, Daniel Berlin <dberlin at dberlin.org> wrote:
>
>> FWIW:  Bootstrap is probably not a good test of this, there are bugs
>> filed where we end up with tons of loads and stores to test against each
>> other.  That's actually fairly rare in bootstrap, as you can see.
>> Let me get you some test cases.
>>
>
> SG, thanks!
>

I ran a few quick timings of "opt -memoryssa" for gvn_hoist.small.bc in
PR28670/PR28832, and a larger version extracted then.

Reporting:
mssalimit    /  single call getModRef   /   call getModRef followed by
alias().

Smaller test hits the case with 2 alias calls 1282 times. Timings, average
over 5-10 runs (s):
100 / 8.99 / 8.87
200 / 9.24 / 9.113
500 / 48.228 / 48.453

Larger case hits it 1872 times. Timings, average over 5 runs (s):
100 / 23.575 / 23.962
200 /  23.874 / 23.848


My guess is that we should go with mustmod.
>>
>>
>> As for callsites, adding mustmod works for call, memloc and call, call
>> testing.
>>
>
>>
>
>>
>> On Mon, Oct 9, 2017, 4:48 PM Alina Sbirlea <alina.sbirlea at gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> This came up in https://reviews.llvm.org/D38569, and I'd like some
>>> input on what's the best way to get alias and mod-ref info without having
>>> two alias calls.
>>>
>>> A couple of ideas:
>>> (a) Extend the getModRefInfo interface (+getModRefBehavior,
>>> +gerArgModRefInfo) to return a pair {ModRefInfo, AliasResult}.
>>>
>>> The AliasResult can be optional based on an argument
>>>      e.g.:
>>>     struct MRI_AR { ModRefInfo MRI, AliasResult AR };
>>>     MRI_AR getModRefInfoAlias (LoadInst *LI, MemoryLocation Loc, bool
>>> SetAliasResultField);
>>>
>>> Add wrapper APIs to preserve current calls.
>>>     e.g.:
>>>      ModRefInfo getModRefInfo (LoadInst *LI, MemoryLocation Loc) {
>>>           return getModRefInfoAlias (LI, Loc, false).MRI;
>>>       }
>>>
>>> (b) From talking offline with George, introducing a MRI_MustMod in
>>> ModRefInfo.
>>>
>>>
>>> Open question: How to handle callsites.
>>>
>>>
>>> In terms of whether this is worth doing, as a preliminary timing test I
>>> timed the llvm bootstrap build with 1 vs 2 alias calls in D38569:
>>> instructionClobbersQuery:296, and got the following:
>>> 2 alias calls:
>>> real    62m52.627s
>>> user    2769m46.964s
>>> sys     17m48.072s
>>> 1 alias call:
>>> real    62m56.659s
>>> user    2766m40.452s
>>> sys     17m46.312s
>>>
>>> Thoughts?
>>>
>>>
>>> Thanks,
>>> Alina
>>>
>>>
>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171009/1928dc88/attachment.html>


More information about the llvm-dev mailing list