[llvm-dev] Polly as an Analysis pass in LLVM
Hongbin Zheng via llvm-dev
llvm-dev at lists.llvm.org
Fri Mar 25 02:28:02 PDT 2016
Hi Utpal,
Yes, we do not need to drive ourself crazy and do everything in this GSoC.
We can build a tight integration in GSoC and improve later when necessary.
Thanks
Hongbin
On Fri, Mar 25, 2016 at 4:07 PM, Utpal Bora <cs14mtech11017 at iith.ac.in>
wrote:
> Hi ether,
>
> Your suggestion is appropriate with respect to LLVM framework.
> However, I am not aware of such a common interface for Dependence Analysis
> as there is one for AliasAnalysis.
> The current plan is to provide the new Dependence Analysis interface that
> can be used when the other analysis engines fail to provide a concrete
> result. I do not want to overestimate things by proposing such a common
> framework for Dependence analysis in LLVM.
> The integration will not be tight as we can return empty analysis result
> if Polly is not compiled with LLVM tools.
>
>
> Regards,
>
> Utpal Bora
> Ph.D. Scholar
> +917032002001
> Computer Science & Engineering
> IIT Hyderabad
>
>
> On Fri, Mar 25, 2016 at 7:53 AM, Hongbin Zheng <etherzhhb at gmail.com>
> wrote:
>
>> In the design the LLVM passes always directly communicate with PolyhedralInfo,
>> this requires Polly tightly integrate in to LLVM.
>>
>> If we do not want a tight integration, we can do the following:
>> 1. Introduce an abstract memory dependency query interface, like
>> AliasAnalysis
>> 2. I remember LLVM had already have dependency analysis, this can be the
>> default implementation of the memory dependency query interface. Or the
>> default implementation can be a "may depend" analysis.
>> 3. PolyhedralInfo is yet another implementation of memory dependency
>> analysis.
>>
>> That is:
>>
>> LLVM Passes --> DependencyAnalysis ---> Default implementation
>> \
>> \---->
>> Implementation in LLVM
>> \
>> ----> Polyhedral
>> dependency analysis in Polly
>>
>>
>>
>> On Thu, Mar 24, 2016 at 5:05 PM, Johannes Doerfert <
>> doerfert at cs.uni-saarland.de> wrote:
>>
>>> On 03/23, Hongbin Zheng wrote:
>>> > Hi Johannes,
>>> >
>>> > On Mon, Mar 21, 2016 at 6:35 PM, Johannes Doerfert <
>>> > doerfert at cs.uni-saarland.de> wrote:
>>> >
>>> > > Hey Utpal,
>>> > >
>>> > > First of, I think you made nice process here and have some very good
>>> > > ideas of what we could do in the future.
>>> > >
>>> > > [NOTE: I CC'ed some people that have shown interest in this topic
>>> but I
>>> > > might have forgotten some, therefor I also added the llvm-dev list.]
>>> > >
>>> > > For the upcoming GSoC proposal we should slow down a little bit and
>>> > > reevaluate our goals. After talking to a couple of LLVM and Polly
>>> folks
>>> > > at EuroLLVM last week, I hope to have a fairly good idea of how to
>>> > > proceed. To this end, I will give you my personal road map that
>>> might be
>>> > > a good start for the proposal too, though it is not the only way we
>>> > > could do this:
>>> > >
>>> > > 1) Make ScopInfo & DependenceInfo function passes to avoid the
>>> > > RegionPassManager for these Polly analysis parts. [This doesn't
>>> > > need to be the first step but it should be done at some point.]
>>> > > 2) Create a secondary ScopDetection & ScopInfo that is restricted
>>> to
>>> > > analyze a single loop. We might just create a dummy region for
>>> this
>>> > > loop and use the original ScopDetection & ScopInfo. The goal is
>>> to
>>> > > make (this secondary) ScopDetection & ScopInfo demand driven and
>>> > > non-dependent on the RegionInfo analysis. [Same as before, this
>>> > > does not need to happen right away.]
>>> > >
>>> > I really like this direction. In general, we may want to decouple the
>>> > ScopDetection/ScopInfo construction logic from the pass logic, such
>>> that we
>>> > can run the logic ScopDetection and ScopInfo construction in a function
>>> > pass, call graph scc pass, or even a loop pass.
>>> Totally agreed. Some kind of ScopBuilder interface that can be queried
>>> would be perfect. Additionally a DependenceBuilder.
>>>
>>> I would imagine something along the lines of:
>>>
>>>
>>> Passes: ScopInfo <-----------[depends]----------- DependenceInfo
>>> | |
>>> [queries] [queries]
>>> | |
>>> V V
>>> Interface: ScopBuilder ------ DependenceBuilder
>>> A | | | A
>>> | | | [creates] |
>>> | | | | |
>>> | | | V |
>>> Objects: | |--[creates]--> Scop <--[uses]--| Dependences |
>>> | | | |
>>> |-----[queries]--| |-----[uses]--| |---[uses]---| |
>>> | V V |
>>> New Pass/Interface: |----------- PolyhedralInfo --[queries]--|
>>> A
>>> |
>>> |
>>> [non-polyhedral queries]
>>> |
>>> |
>>> **LLVM Passes**
>>>
>>> > For 1), can we always construct a whole function Scop (excluding the
>>> entry
>>> > block which contains allocas)?
>>> We could even with allocas ;)
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160325/d332de88/attachment.html>
More information about the llvm-dev
mailing list