[GSoC 2016] Introduction - Polly as an Analysis pass in LLVM

Dear All,

I am glad to be part of GSoC 2016 with LLVM organization. I am a first year PhD student at IIT Hyderabad, India and my research area is compiler optimizations using polyhedral model.

My GSoC 2016 project is to implement Polly as an Analysis pass in LLVM [1].
We have a discussion on Polly-dev mailing list [2] on taking a better approach to implement this project. Based upon this discussion, I am planning to cover the following items in the first month of this GSoC.

1: Decouple ScopInfo object from pass and create two passes. One region pass to preserve compatibility with existing Polly transformation passes, other will be a function pass to be used by PolyhedralInfo pass as mentioned below.

2: Decouple DependenceInfo object from pass and create two passes. Same as above.

3: Create the interface PolyhedralInfo, which will extract Memory Access wise dependence information from Polly and provide few simple interfaces like isParallel(), isVectorizable(), tripCount(Loop&).

Please feel free to post your comments and suggestions on this.

[1] https://docs.google.com/document/d/1QyUzL3OOwJSI91lDqr7VsvqUsFyTY9FlpAwbGSipUtw/edit#

[2] https://groups.google.com/forum/#!topic/polly-dev/DuRxNmKfEnM

What is the difference between “isParallel” and “isVectorizable” for a loop?
Also is tripCount() returning a literal or is it somehow symbolic?

Thanks,

In the beginning I would say isParallel() should return true if there
are no loop carried dependences, while isVectorizable(unsigned TripCount)
should return true if the loop carried dependencies are greater than
"TripCount".

Something like tripCount(Loop &L) can return either a constant or a
SCEV. I would prefer the latter.

Cheers,
  Johannes

>
> >
> > Dear All,
> >
> > I am glad to be part of GSoC 2016 with LLVM organization. I am a first
year PhD student at IIT Hyderabad, India and my research area is compiler
optimizations using polyhedral model.
> >
> > My GSoC 2016 project is to implement Polly as an Analysis pass in LLVM
[1].
> > We have a discussion on Polly-dev mailing list [2] on taking a better
approach to implement this project. Based upon this discussion, I am
planning to cover the following items in the first month of this GSoC.
> >
> > 1: Decouple ScopInfo object from pass and create two passes. One
region pass to preserve compatibility with existing Polly transformation
passes, other will be a function pass to be used by PolyhedralInfo pass as
mentioned below.
> >
> > 2: Decouple DependenceInfo object from pass and create two passes.
Same as above.
> >
> > 3: Create the interface PolyhedralInfo, which will extract Memory
Access wise dependence information from Polly and provide few simple
interfaces like isParallel(), isVectorizable(), tripCount(Loop&).
>
> What is the difference between "isParallel" and "isVectorizable" for a
loop?
> Also is tripCount() returning a literal or is it somehow symbolic?
In the beginning I would say isParallel() should return true if there
are no loop carried dependences, while isVectorizable(unsigned TripCount)

Or we can directly return the loop-carried dependence of the innermost loop
(or the loop at a given level like DependenceAnalysis), as SCEV.

Hi Utpal,

please submit a patch for http://llvm.org/SummerOfCode/2016.html, in
case you want to add further information about your project.

Design improvements are also very welcome. This website is the GSoC
student website. So you guys can make it as nice as possible. Vivek and
Roman can probably help to review your patch and commit it upstream.

Best,
Tobias