<div dir="ltr"><div>Thanks Whitney,</div><div><br></div><div>It was really very helpful! I've drafted a proposal [1] with my best efforts, I hope it does justice to your expectations. Looking forward to any feedback or suggestions.</div><div><br></div><div>1. <a href="https://docs.google.com/document/d/1zrCCw1LSe2GktYVxywkRSVvgzcPrQD-rch0_6GkK3lc/edit?usp=sharing">https://docs.google.com/document/d/1zrCCw1LSe2GktYVxywkRSVvgzcPrQD-rch0_6GkK3lc/edit?usp=sharing</a></div><div><br></div><div>Many thanks,</div><div>Rithik<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, 28 Mar 2020 at 03:40, Whitney T Tsang <<a href="mailto:whitneyt@ca.ibm.com">whitneyt@ca.ibm.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p><font size="2">Hi Rithik,</font><br><br><font size="2">CodeMoverUtils is not aimed for only loop transformations, it can be used by any transformation which want to move code or check if code is safe to be moved.</font><br><font size="2">It can currently do both hoist and sink but require control flow equivalent between the original location and the intended to be moved location.</font><br><font size="2">I would like to keep the API decoupled from loop, so other transformation can use it.</font><br><font size="2">In this project we want to limit the scope to loop transformations due to the time constraint, but we should keep in mind that it should be usable for any kind of transformations.</font><br><br><font size="2">My expectations for the proposal should contains</font><br><font size="2">1. the problem we want to solve</font><br><font size="2">2. expected end result</font><br><font size="2">     - how many percentage of the loop transformations do you think can be changed to use the unified API at the end of the project?</font><br><font size="2">3. roadmap + timeline</font><br><font size="2">     a. identified all loop transformations which require code motion</font><br><font size="2">     b. identified all existing code mover utilities</font><br><font size="2">     c. understand the difference (some maybe more conservative, but does it really need to be)<br>     d. improve CodeMoverUtils to accommodate different users</font><br><font size="2">     e. change existing loop transformations to use the improved CodeMoverUtils (should do with (d) at the same time).</font><br><br><font size="2">Note: finding transformations that use code motion is part of the project, so no need to include every opportunity in the proposal.</font><br><br><font size="2">Hope this help.</font><br><br><font size="2">Regards,</font><br><font size="2">Whitney Tsang</font><br><br><img src="cid:1712d2ed524308fca931" alt="Inactive hide details for RITHIK SHARMA ---2020/03/27 03:08:47 PM---Hello Whitney, I spent some good time going through the exa" width="16" height="16" border="0"><font size="2" color="#424282">RITHIK SHARMA ---2020/03/27 03:08:47 PM---Hello Whitney, I spent some good time going through the exact implementation of a few loop</font><br><br><font size="2" color="#5F5F5F">From:        </font><font size="2">RITHIK SHARMA <<a href="mailto:rithiksh02@gmail.com" target="_blank">rithiksh02@gmail.com</a>></font><br><font size="2" color="#5F5F5F">To:        </font><font size="2"><a href="mailto:whitneyt@ca.ibm.com" target="_blank">whitneyt@ca.ibm.com</a></font><br><font size="2" color="#5F5F5F">Cc:        </font><font size="2"><a href="mailto:etiotto@gmail.com" target="_blank">etiotto@gmail.com</a>, Stefanos Baziotis <<a href="mailto:stefanos.baziotis@gmail.com" target="_blank">stefanos.baziotis@gmail.com</a>>, llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>, <a href="mailto:bmahjour@ca.ibm.com" target="_blank">bmahjour@ca.ibm.com</a></font><br><font size="2" color="#5F5F5F">Date:        </font><font size="2">2020/03/27 03:08 PM</font><br><font size="2" color="#5F5F5F">Subject:        </font><font size="2">[EXTERNAL] Re: [llvm-dev] [GSoC] Prospective student for Unify ways to move code or check if code is safe to be moved</font><br></p><hr style="color:rgb(128,145,165)" width="100%" size="2" noshade align="left"><br><br><br>Hello Whitney,<br><br>I spent some good time going through the exact implementation of a few loop transformation passes in llvm and for others, I tried to quickly get an idea of what is going inside them with respect to the implementation in llvm.<br><br>I also went through the CodeMoverUtils [1], I really appreciate the effort of keeping it generic and decoupled from loop though being derived from loop and aimed to be used for loop transformation. I also analyzed Loop Fuse pass [2] as a reference as it already uses CodeMoverUtils which helped me to concrete my understanding of the vision behind the unification of code motion checks. <br><br>LICM [3] does hoisting [4] as well as sinking [5]. I thought about extending the already available isSafeToMoveBefore [6] for hoisting the code from loop body to the pre-header. In my opinion, hosting and sinking are the basic code motions, exposing them in a robust and flexible way will also help other transformations (maybe other non-loop transformations).<br><br>I also saw that Loop Sink pass [7] uses the same checks [8] from LICM and also found another code hoisting opportunity in Loop Rotation pass where we once hoist to the pre-header [9]. I also analyzed passes like Loop Unswitch [10] in the hope for some code motion opportunities but it seems the passes which are expected to run after LICM are void of them (may not be true for all). I limited myself to the loop passes in Transform/Scalar and I'm planning to take a look into other loop passes as well. <br><br>Having said that, my concern right now is the proposal whose deadline is approaching in 4 days, I would like to get a small feedback before the deadline. I am aiming to prepare a draft by Monday morning (PST) so then I may have a short window to incorporate the feedback. I also have two coursework assignment deadlines end of this week which is also demanding some of my effort other than attending the lectures.   <br><br>I'll be glad to hear about your expectations for the proposal. I'm planning to somehow meet them and will also continue to look into loop passes for more code motion checks after the proposal deadline. Does this look good to you? In my proposal can I focus on the findings that I'm able to do before the deadline and keep some buffer for things that I may find later as identifying all the existing ways for code motion in loop transformations is a big portion of the proposed project.<br><br>1. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Utils/CodeMoverUtils.cpp" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Utils/CodeMoverUtils.cpp</font></u></a><br>2. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LoopFuse.cpp" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LoopFuse.cpp</font></u></a><br>3. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LICM.cpp" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LICM.cpp</font></u></a><br>4. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LICM.cpp#L353" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LICM.cpp#L353</font></u></a><br>5. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LICM.cpp#L348" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LICM.cpp#L348</font></u></a><br>6. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Utils/CodeMoverUtils.cpp#L299" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Utils/CodeMoverUtils.cpp#L299</font></u></a><br>7. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LoopSink.cpp" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LoopSink.cpp</font></u></a><br>8. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LoopSink.cpp#L303" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LoopSink.cpp#L303</font></u></a><br>9. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Utils/LoopRotationUtils.cpp#L403" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Utils/LoopRotationUtils.cpp#L403</font></u></a><br>10. <a href="https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp" target="_blank"><u><font color="#0000FF">https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp</font></u></a><br><br>Best,<br>Rithik<br><br><br><br>On Tue, 24 Mar 2020 at 23:30, Stefanos Baziotis <<a href="mailto:stefanos.baziotis@gmail.com" target="_blank"><u><font color="#0000FF">stefanos.baziotis@gmail.com</font></u></a>> wrote:
<ul>Np, good luck! :)<br><br>- Stefanos<br><br>Στις Τρί, 24 Μαρ 2020 στις 8:55 μ.μ., ο/η RITHIK SHARMA <<a href="mailto:rithiksh02@gmail.com" target="_blank"><u><font color="#0000FF">rithiksh02@gmail.com</font></u></a>> έγραψε:<br>Many thanks, Stefanos! I really appreciate your help :) I heard from Whitney. <br><br>Best,<br>Rithik<br><br>On Tue, 24 Mar 2020 at 23:08, Stefanos Baziotis <<a href="mailto:stefanos.baziotis@gmail.com" target="_blank"><u><font color="#0000FF">stefanos.baziotis@gmail.com</font></u></a>> wrote:
<ul>Hi Rithik,<br><br>I CC'd the 2 other mentors and hopefully you'll get answer. Sorry, but I don't know of any other way to help. :/<br>You may also try to contact them privately.<br><br>Best,<br>Stefanos<br><br><br>Στις Τρί, 24 Μαρ 2020 στις 7:35 μ.μ., ο/η RITHIK SHARMA via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank"><u><font color="#0000FF">llvm-dev@lists.llvm.org</font></u></a>> έγραψε:<br>Ping!<br>I'm bit concern about the approaching deadline next week, some pointers will be really appreciated and will be very helpful to me.<br><br>Best regards,<br>Rithik Sharma<br><br>On Sun, 22 Mar 2020 at 01:24, RITHIK SHARMA <<a href="mailto:rithiksh02@gmail.com" target="_blank"><u><font color="#0000FF">rithiksh02@gmail.com</font></u></a>> wrote:
<ul>Hello,<br><br>I am an undergrad from India. This summer I'm interested in working on unifying the code motion checks as a GSoC intern with LLVM. I started reading about classical data flow analysis since few months, I see this as a great opportunity to start contributing to LLVM. The idea of unifying all the code motion checks into one place seems very rational and interesting to me. As in the project description LICM was mentioned, I have a basic idea about it and I spent some time to go through its implementation in LLVM. It makes a lot of sense to me to keep all code motion checks at one place, say an analysis pass, I also looked into GVN hoist & sink passes as they also have some code motion logic. I'll start drafting the proposal after your initial feedback/suggestions. I'm really very excited to work on this.<br><br>Best Regards,<br>Rithik Sharma</ul>_______________________________________________<br>LLVM Developers mailing list<u><font color="#0000FF"><br></font></u><a href="mailto:llvm-dev@lists.llvm.org" target="_blank"><u><font color="#0000FF">llvm-dev@lists.llvm.org</font></u></a><u><font color="#0000FF"><br></font></u><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank"><u><font color="#0000FF">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</font></u></a><br><br></ul></ul><br>
<p></p></div>
</blockquote></div>