<div dir="ltr">Neat. I will give it a try.<div><br></div><div>David</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 14, 2016 at 2:09 AM, Sean Silva <span dir="ltr"><<a href="mailto:chisophugis@gmail.com" target="_blank">chisophugis@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Thu, Jun 9, 2016 at 2:53 PM, Xinliang David Li via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Ok.<div><br></div><div><br></div><div>There might be more problems. Suppose we make LAI managed by the LoopAnalysisManager in PM. The analysis has the following interface to build LAI on the the fly and cached by LAM:</div><div><br></div><div>class LoopAccessInfoAnalysis {</div><div>public:</div><div>   typedef LoopAccessInfo ResultType;</div><div>   ResultType run(LoopInfo *LI) {  return LoopAccessInfo ( ...); }</div><div>};</div><div><br></div><div>Here is the question for Chandler. As mentioned by Adam, the LV pass is a function pass. With new PM, its run interface is passed with AnalysisManager<Function> reference.   With a function analysis AM, is it possible to get access to the analyis results managed by LAM?</div><div><br></div><div>LoopAccessInfo & LAI = AM.getResult<LoopAccessInfoAnalysis>() ?</div><div><br></div><div>If not, is there a way to get reference to the LAM instance associated with the Loop from function AM?</div></div></blockquote><div><br></div></span><div>If I understand what you are asking correctly (and my understanding of new PM is correct), what you need is the "LoopAnalysisManagerFunctionProxy". E.g. in this code from LoopPassManager.h</div><div><br></div><div><div>  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM) {</div><div>    // Setup the loop analysis manager from its proxy.</div><div>    LoopAnalysisManager &LAM =</div><div>        AM.getResult<LoopAnalysisManagerFunctionProxy>(F).getManager();</div></div><span class="HOEnZb"><font color="#888888"><div> </div><div><br></div><div>-- Sean Silva</div><div><br></div></font></span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div><div class="h5"><div dir="ltr"><div><br></div><div>thanks,</div><div><br></div><div>David</div><div><br></div><div><br></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 9, 2016 at 2:01 PM, Adam Nemet <span dir="ltr"><<a href="mailto:anemet@apple.com" target="_blank">anemet@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><br><div><span><blockquote type="cite"><div>On Jun 9, 2016, at 10:28 PM, Xinliang David Li <<a href="mailto:davidxl@google.com" target="_blank">davidxl@google.com</a>> wrote:</div><br><div><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 9, 2016 at 1:01 PM, Adam Nemet <span dir="ltr"><<a href="mailto:anemet@apple.com" target="_blank">anemet@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word">David, FYI, this didn’t make it to Phab due to replying inline.<div><br></div><div>Anyhow, we could move the map of stride collection to LAA.  I didn’t do that initially as a shortcut but I can look into doing that, just LMK.</div></div></blockquote><div><br></div><div><br></div><div>I have not looked in detail, but looks like client code have different ways to collect strides: see LoopVectorizor and LoopVersioningLICM.    How do you plan to handle this?</div></div></div></div></div></blockquote><div><br></div></span><div>The two functions look identical except that LV also exposes the strides as a set.</div><div><br></div><div>To further clarify the plan should be to have LAA collect the symbolic strides and then have LoopVersioning emit the run-time checks and rewrite the versioned loop (instead of LoopVersioningLICM).</div><div><br></div><div>LV would have to continue to emit the run-time checks itself because it does not yet use LoopVersioning.</div><span><font color="#888888"><div><br></div><div>Adam</div></font></span><div><div><br><blockquote type="cite"><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>David</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div><div></div><div>On Jun 9, 2016, at 6:16 PM, Xinliang David Li <<a href="mailto:davidxl@google.com" target="_blank">davidxl@google.com</a>> wrote:<div><div><blockquote type="cite"><br><div><br><br style="font-family:Helvetica;font-size:10px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div class="gmail_quote" style="font-family:Helvetica;font-size:10px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">On Thu, Jun 9, 2016 at 2:37 AM, Adam Nemet<span> </span><span dir="ltr"><<a href="mailto:anemet@apple.com" target="_blank">anemet@apple.com</a>></span><span> </span>wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">anemet added inline comments.<br><span><br>================<br>Comment at: llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h:704-706<br>@@ +703,5 @@<br>+private:<br>+  /// \brief LoopAccessInfo is created on demand. This map caches<br>+  /// the computed results.<br>+  DenseMap<Loop *, std::unique_ptr<LoopAccessInfo>> LoopAccessInfoMap;<br>+<br>----------------<br></span><span>chandlerc wrote:<br>> This doesn't seem like the right design. It leads to the `getInfo().getInfo()` awkward pattern that IMO is only marginally less awkward spelled as `getResult().getInfo()`.<br>><br>> Instead, I think this pretty clearly wants to be a Loop analysis in the new pass manager. I think that the caching and map should be the new pass manager's caching and map, rather than rolling our own in a function analysis manager.<br>><br>> As a consequence, I don't think you need this result type at all. I think the LoopAccessInfo is already the correct result type. I think you'll need the DenseMap and logic around it in the legacy pass manager's function analysis, and you'll want a different query path to use the LoopAnalysisManager directly in the new pass manager.<br>><br>> Does that make sense?<br></span>Just for the record, this had to be a function pass because the loop vectorizer is a function pass with the legacy PM.<br></blockquote><div><br></div><div><br></div><div>This problem is solvable by providing a function level wrapper for loop access info.</div><div><br></div><div>The bigger problem is that the current getter interface not only takes a  LoopInfo, but also a map of strides which is computed outside.  IIUC, current analysis manager in new PM can not handle that.  Chandler, any thought? Should we make LoopAccess Analysis a function analysis for now and handle it later when Loop analysis is more mature?</div><div><br></div><div>David</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>It would be great to turn this into a loop pass with the new PM.<br><div><div><br><br>Repository:<br> <span> </span>rL LLVM<br><br><a href="http://reviews.llvm.org/D20560" rel="noreferrer" target="_blank">http://reviews.llvm.org/D20560</a></div></div></blockquote></div></div></blockquote></div><br></div></div></div></div></blockquote></div><br></div></div>
</div></blockquote></div></div></div><br></div></blockquote></div><br></div>
</div></div><br></div></div><span class="">_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
<br></span></blockquote></div><br></div></div>
</blockquote></div><br></div>