<div dir="ltr">Thank you for the suggestion. I'll try that.<br></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr">  - Vaivaswatha<br></div></div></div>
<br><div class="gmail_quote">On Fri, Dec 4, 2015 at 12:12 PM, Mehdi Amini <span dir="ltr"><<a href="mailto:mehdi.amini@apple.com" target="_blank">mehdi.amini@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><span class=""><blockquote type="cite"><div>On Dec 3, 2015, at 9:24 PM, Vaivaswatha Nagaraj <<a href="mailto:vn@compilertree.com" target="_blank">vn@compilertree.com</a>> wrote:</div><br><div><div dir="ltr"><div>>You could, in the LTO pipeline, reinsert GlobalsAA after the SLPVectorizer (not saying you should).<br></div>I didn't realise that adding GlobalsAA<i> after</i> SLPVectorizer could help. Thanks for this tip.<br><br><div>>There is something fishy. Do you have a test case that reproduce with llvm-lto?</div>I'm currently looking at a proprietary benchmark. I'll try to extract out a simple test case and send it.<br></div></div></blockquote><div><br></div></span><div>Suggestion: if you get some IR, and bugpoint it (see <a href="http://blog.llvm.org/2015/11/reduce-your-testcases-with-bugpoint-and.html" target="_blank">http://blog.llvm.org/2015/11/reduce-your-testcases-with-bugpoint-and.html</a> ) ; it shouldn’t be anything significant about the original benchmark in the end ;)</div><div><br></div><div>— </div><span class="HOEnZb"><font color="#888888"><div>Mehdi</div></font></span><div><div class="h5"><div><br></div><div><br></div><br><blockquote type="cite"><div><div dir="ltr"><div><div><br></div></div></div><div class="gmail_extra"><br clear="all"><div><div><div dir="ltr">  - Vaivaswatha<br></div></div></div>
<br><div class="gmail_quote">On Fri, Dec 4, 2015 at 12:00 AM, Mehdi Amini <span dir="ltr"><<a href="mailto:mehdi.amini@apple.com" target="_blank">mehdi.amini@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><span><blockquote type="cite"><div>On Dec 3, 2015, at 8:29 AM, Vaivaswatha Nagaraj <<a href="mailto:vn@compilertree.com" target="_blank">vn@compilertree.com</a>> wrote:</div><br><div><div dir="ltr"><div><div>Hi Mehdi, <br><br>Thank you for the response.<br><br>I'm actually on an LTO setup and was referring to PassManagerBuilder::addLTOOptimizationPasses. Here, GlobalsAA is scheduled to run well ahead of SLPVectorizer. However since GlobalsAA is a module pass, it runs once and a bunch of passes, including SLPVectorizer is run for each function. When one of them invalidates the analysis, rest of the functions do not have it available. Both LICM and GVN face the same issue. <br><br></div></div></div></div></blockquote><div><br></div></span>I was reacting to the fact that you claimed that you can’t reinsert a Module pass between two function passes, which is not true. You could, in the LTO pipeline, reinsert GlobalsAA after the SLPVectorizer (not saying you should).</div><div><span><br><blockquote type="cite"><div><div dir="ltr"><div>Surprisingly I didn't see this issue on release37. In fact, on an LTO setup, more LICMs happen on release37 than on the latest SVN, for many of the benchmarks, just because of this.<br></div></div></div></blockquote><div><br></div></span><div>There is something fishy. Do you have a test case that reproduce with llvm-lto?</div><div><br></div><div>Thanks,</div><div><br></div><div>— </div><span><font color="#888888"><div>Mehdi</div></font></span><div><div><div><br></div><br><blockquote type="cite"><div><div dir="ltr"><div><br></div>Thanks,<br></div><div class="gmail_extra"><br clear="all"><div><div><div dir="ltr">  - Vaivaswatha<br></div></div></div>
<br><div class="gmail_quote">On Thu, Dec 3, 2015 at 9:21 PM, Mehdi Amini <span dir="ltr"><<a href="mailto:mehdi.amini@apple.com" target="_blank">mehdi.amini@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><span><blockquote type="cite"><div>On Dec 3, 2015, at 4:21 AM, Vaivaswatha Nagaraj via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:</div><br><div><div dir="ltr"><div><div>Thank you both for the inputs. I've created a patch for the same, please review:<br><a href="http://reviews.llvm.org/D15185" target="_blank">http://reviews.llvm.org/D15185</a><br><br>><span></span>You can specifically insert it into the pass pipeline, but in this case, we should just fix SLP to preserve the analysis.<br></div>@Hal, I tried doing this but it didn't seem to work. I added the GlobalsAA pass right before GVN but it didn't seem to help. In retrospect, looking at the way pass manager works, it looks like it wasn't of much use. Since GlobalsAA is a ModulePass, and FunctionPasses that are scheduled even later are run first</div></div></div></blockquote><div><br></div></span><div>I don’t expect this: the PassManager should honor the order you insert passes. </div><div>I confirmed with: opt -debug-pass=Structure  -globals-aa -instcombine -slp-vectorizer -globals-aa -gvn</div><div><br></div><div> ModulePass Manager<br>    CallGraph Construction<br>    Globals Alias Analysis<br>    FunctionPass Manager<br>      Basic Alias Analysis (stateless AA impl)<br>      Function Alias Analysis Results<br>      Dominator Tree Construction<br>      Combine redundant instructions<br>      Natural Loop Information<br>      Scalar Evolution Analysis<br>      Function Alias Analysis Results<br>      SLP Vectorizer<br>    CallGraph Construction<br>    Globals Alias Analysis<br>    FunctionPass Manager<br>      Dominator Tree Construction<br>      Basic Alias Analysis (stateless AA impl)<br>      Function Alias Analysis Results<br>      Memory Dependence Analysis<br>      Global Value Numbering<br>      Module Verifier<br><br></div><div><br></div><div>— </div><span><font color="#888888"><div>Mehdi</div></font></span><div><div><div><br></div><div><br></div><div><br></div><br><blockquote type="cite"><div><div dir="ltr"><div>, those FunctionPasses that invalidate it do so for good. I do not know if there is some other way to force it though.<br><br></div>Thanks,<br></div><div class="gmail_extra"><br clear="all"><div><div><div dir="ltr">  - Vaivaswatha<br></div></div></div>
<br><div class="gmail_quote">On Thu, Dec 3, 2015 at 4:53 PM, Hal Finkel <span dir="ltr"><<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>----- Original Message -----<br>
> From: "Vaivaswatha Nagaraj via llvm-dev" <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
> To: "James Molloy" <<a href="mailto:james@jamesmolloy.co.uk" target="_blank">james@jamesmolloy.co.uk</a>><br>
> Cc: "LLVM Dev" <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
> Sent: Thursday, December 3, 2015 5:20:34 AM<br>
> Subject: Re: [llvm-dev] GlobalsAA from GVN<br>
><br>
> Hi James,<br>
><br>
> Thanks for the help. From the log, I could infer that SLP vectorizer<br>
> is not preserving alias analysis, preventing GVN from getting the<br>
> info. Although the first function to get compiled has GlobalsAA<br>
> available during GVN, rest of them do not as SLP vectorizer run on<br>
> that function invalidates GlobalsAA which is a module pass. Is there<br>
> a way to force re-computation of a particular analysis?<br>
<br>
</span>You can specifically insert it into the pass pipeline, but in this case, we should just fix SLP to preserve the analysis.<br>
<br>
 -Hal<br>
<div><div><br>
><br>
> As a side note, I didn't have this problem on release_37.<br>
><br>
> Thanks a lot.<br>
><br>
> Regards,<br>
><br>
><br>
><br>
><br>
><br>
> - Vaivaswatha<br>
><br>
><br>
> On Thu, Dec 3, 2015 at 3:02 PM, James Molloy <<br>
> <a href="mailto:james@jamesmolloy.co.uk" target="_blank">james@jamesmolloy.co.uk</a> > wrote:<br>
><br>
><br>
><br>
> Hi Vaivaswatha,<br>
><br>
><br>
> GlobalsAA is not an immutable pass because it needs to cache queries<br>
> to avoid them being unusably slow. It therefore relies on passes<br>
> explicitly preserving it. Most of the passes in the scalar pipeline<br>
> have been modified to setPreserved<GlobalsAA>() and I know the pass<br>
> gets preserved at least until LICM.<br>
><br>
><br>
> You can use -debug-pass=Executions to determine at what point<br>
> GlobalsAA is not preserved (which pass clobbers it) - you'd then<br>
> need to add GlobalsAA to its preserved pass list.<br>
><br>
><br>
> Cheers,<br>
><br>
><br>
> James<br>
><br>
><br>
><br>
><br>
> On Wed, 2 Dec 2015 at 09:35 Vaivaswatha Nagaraj via llvm-dev <<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a> > wrote:<br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
> Hi,<br>
><br>
> I've noticed that alias analysis queries arising from GVN do not use<br>
> the results from GlobalsAA.<br>
> The last call to AAResultsWrapperPass::runOnFunction() before GVN<br>
> does not add GlobalsAAWrapperPass due to unavailability. This leads<br>
> to the alias queries from GVN not having any globals mod-ref info.<br>
><br>
> Is this a known issue? and is there any way to have globals mod-ref<br>
> info available for GVN?<br>
><br>
> Thanks,<br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
> - Vaivaswatha<br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
><br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
><br>
<br>
</div></div><span><font color="#888888">--<br>
Hal Finkel<br>
Assistant Computational Scientist<br>
Leadership Computing Facility<br>
Argonne National Laboratory<br>
</font></span></blockquote></div><br></div>
_______________________________________________<br>LLVM Developers mailing list<br><a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br></div></blockquote></div></div></div><br></div></blockquote></div><br></div>
</div></blockquote></div></div></div><br></div></blockquote></div><br></div>
</div></blockquote></div></div></div><br></div></blockquote></div><br></div>