[llvm-dev] [GSoC 2016] Polly as an Analysis pass - Midterm report

Utpal Bora via llvm-dev llvm-dev at lists.llvm.org
Mon Jun 20 05:00:33 PDT 2016


Dear Community,

I would like to summarize my work till date for GSoC 2016.

Till the current phase of my project, I have mostly focused on developing
the necessary infrastructure to use analysis results from Polly in LLVM.

Initial plan as mentioned in the proposal:

For the first month:-

   1.

   Decouple ScopInfo pass from Polly’s pass chain and provide capability to
   create SCoP(Static Control Parts) objects from arbitrary SESE regions.
   2.

   Implement new passes ScopInfoWrapperPass and DependenceInfoWrapperPass
   as Function Passes.
   3.

   Provide an interface to Polly’s dependence analysis which can be
   directly queried from LLVM transformation passes such as Loop Vectorizer.

For the next phase:-

   1.

   Cache the dependences computed by Polly for a given SCoP and provide
   methods to invalidate the analysis results when the SCoP changes.
   2.

   Demonstrate the power and usefulness of the interface by integrating it
   with Loop Vectorizer or other clients, for example, client that requires
   loop trip count, etc.


Current Status:

   1.

   Decoupling SCoP object creation from pass logic is complete and has been
   addressed under D20770 <http://reviews.llvm.org/D20770>, D20831
   <http://reviews.llvm.org/D20831> and D20912
   <http://reviews.llvm.org/D20912> review items. Patches have been
   accepted and committed.
   2.

   Implemented two new function passes in Polly namely ScopInfoWrapperPass (
   D20962 <http://reviews.llvm.org/D20962>) and DependenceInfoWrapperPass (
   D21105 <http://reviews.llvm.org/D21105>). These are required to bypass
   the RegionPassManager.
   1.

      ScopInfoWrapperPass addresses creating SCoP objects for the whole
      function.
      2.

      DependenceInfoWrapperPass addresses constructing polyhedral
      dependences for all the SCoP objects of a function.
      3.

   These patches are currently under review and I am incorporating changes
   as suggested by the Polly community.
   4.

   Implemented first version of an interface to Polly's analysis passes-
   PolyhedralInfo pass (D21486 <http://reviews.llvm.org/D21486>). Implemented
   isParallel(Loop *) interface to check parallelism of a loop.


Pending Work:

   1.

   Complete the interface - PolyhederalInfo pass. Currently I am working on
   providing more interfaces to check whether a loop is vectorizable or not
   and to get loop trip count.
   -

      isVectorizable(Loop *L, *MinDepDistance)
      -

      getLoopTripCount(Loop *)
      2.

   Work on caching Polly's analysis results properly and provide methods to
   invalidate the analysis results when the SCoP changes.
   3.

   Demonstrate the power and usefulness of the interface by integrating it
   with Loop Vectorizer.


Below are the list of patches I sent  during this period:-

D20770 <http://reviews.llvm.org/D20770>, D20831
<http://reviews.llvm.org/D20831>, D20912 <http://reviews.llvm.org/D20912>,
D20962 <http://reviews.llvm.org/D20962>, D21105
<http://reviews.llvm.org/D21105>, D21486 <http://reviews.llvm.org/D21486>

I thank Johannes, Tobias, Michael, Ether and others for all the
support/feedback/advises. Especially, Johannes for the time spent in
hangouts, which we have been having two times a week.

Looking forward for your suggestions and comments.


Regards,

Utpal Bora
Ph.D. Scholar
Computer Science & Engineering
IIT Hyderabad
http://utpalbora.github.io
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160620/380cbd4a/attachment.html>


More information about the llvm-dev mailing list