[LLVMdev] Separating loop nests based on profile information?
Philip Reames
listmail at philipreames.com
Mon Jan 12 10:40:58 PST 2015
On 01/12/2015 10:35 AM, Mehdi Amini wrote:
>
>> On Jan 12, 2015, at 10:08 AM, Philip Reames
>> <listmail at philipreames.com <mailto:listmail at philipreames.com>> wrote:
>>
>>
>> On 01/11/2015 10:35 PM, Daniel Berlin wrote:
>>>
>>>
>>> Looking at what LLVM does, the failing on the PRE side is that
>>> our PRE/GVN models are not strong enough to handle this. I'm not
>>> sure at all why we think anything else is necessary.
>>>
>>>
>>> By this i mean we don't actually perform real PRE for loads. It's a
>>> known deficiency and one that does not require any duplicate
>>> heuristics to solve.
>>> Right now we perform some availability based removal that happens be
>>> willing to do an insertion here or there to try to move a load in
>>> some cases (it will only do a single insertion). It's not also
>>> based on real availability, but on finding nearest dependencies of
>>> loads and squinting at them (which is not even really the same as
>>> finding where a load stops being available) funny.
>>>
>>> It's also not real PRE, just some code that is willing to insert one
>>> load to move a load.
>> Er, I think we have a terminology problem here. From what I can
>> gather, our current implementation *is* an implementation of classic
>> PRE. It's more or less directly organized around the classic
>> "available" and "anticipated" concepts from the literature. The
>> *implementation* has some limitations, but the conceptual framework
>> is there*. One of the key invariants in classic PRE is that you do
>> not change program behaviour on any path. As a result, moving (or at
>> most duplicating) loads is pretty much all that happens.
>>
>> * It took me a few hours of squinting at the code to recognize that
>> weird backwards walk as being an implementation of "anctipated", but
>> it is.
>
> Did you add some comments? It may save a few hours of squinting to
> someone else in the future :)
Not yet, but yes, I plan to.
Having said that, part of my trouble was that I didn't have the
background to understand what I was seeing at first. I had to go do
some literature search and then things made (slightly) more sense.
>
> Mehdi
>
>
>
>> The "available" part comes from MemoryDependenceAnalysis and the
>> forward dataflow algorithm based on those inputs.
>>
>> If you want to start inserting loads on paths which didn't previously
>> have them - for example the loop preheader in your example in the
>> previous email - this is not classic PRE as I'm familiar with it. It
>> can be very profitable and worthwhile, but is not classic PRE. I'm
>> not sure what this variant is known as in the literature.
>>
>> (If I'm being overly pedantic here, or just flat out wrong, please
>> say so. I'm still exploring related material and am trying to
>> categorize things in my own head.)
>>
>> I think we actually in reasonable agreement that we do need to move
>> beyond 'classic PRE' as I called it above. If you have specific
>> suggestions, positive or negative examples, or other thoughts to
>> share, I'd very much value the input.
>>>
>>> If you want this case to work, what you need is a real Load PRE
>>> implementation, not one based on simple memdep based load moving.
>>>
>>> Trying to hack this one up with profile guided code duplication,
>>> etc, to get it to kinda sorta work seems to me to be a bad idea.
>> Not sure I really agree here, but I'm open to pushing as far as we
>> can with static heuristics first. I suspect that's likely to be more
>> stable w.r.t. optimization effect and applicable to more cases.
>>>
>>> It's certainly not requiring special code duplication
>>> heuristics, etc.
>>>
>>> So either you are thinking of a case that is different from the
>>> above, or I am seriously confused :)
>>>
>>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150112/78258703/attachment.html>
More information about the llvm-dev
mailing list