<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 10, 2015 at 11:27 AM, Larisse Voufo <span dir="ltr"><<a href="mailto:lvoufo@gmail.com" target="_blank">lvoufo@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">lvoufo added a comment.<br>
<span class=""><br>
In <a href="http://reviews.llvm.org/D15124#307279" rel="noreferrer" target="_blank">http://reviews.llvm.org/D15124#307279</a>, @dberlin wrote:<br>
<br>
> "(2) -gvn already requires -basicaa. So, -basicaa would be redundant in<br>
>  '-basicaa -gvn'. I could add it for clarity if you prefer.<br>
>  "<br>
>  -gvn does not require -basicaa.<br>
>  You've stated this a few times, and i'm not sure why you think this.<br>
><br>
> <from GVN>:<br>
><br>
>   void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>         AU.addRequired<AssumptionCacheTracker>();<br>
>         AU.addRequired<DominatorTreeWrapperPass>();<br>
>         AU.addRequired<TargetLibraryInfoWrapperPass>();<br>
>         if (!NoLoads)<br>
>           AU.addRequired<MemoryDependenceAnalysis>();<br>
>         AU.addRequired<AAResultsWrapperPass>();<br>
><br>
><br>
> }<br>
><br>
> GVN requires AC, DominatorTree, and TLI all the time.<br>
>  It uses AA results, which is "whatever aa you have enabled".<br>
>  It requires memorydependence if you want to optimize loads.<br>
>  Memory dependence, in turn, does not require basicaa either:<br>
><br>
> void MemoryDependenceAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {<br>
><br>
>     AU.setPreservesAll();<br>
>     AU.addRequired<AssumptionCacheTracker>();<br>
>     AU.addRequiredTransitive<AAResultsWrapperPass>();<br>
>     AU.addRequiredTransitive<TargetLibraryInfoWrapperPass>();<br>
>   }<br>
><br>
><br>
><br>
> No passes *require* basicaa, because basicaa is an optional pass providing<br>
>  AA results.<br>
<br>
<br>
</span>Point taken. I may be misusing "require" here, but I sure understand what is going on better now thanks to this.<br>
To clarify my statements and for added clarity from your points above, I have 2 questions:<br>
<br>
1 - What is one to make of the dependence on `BasicAAWrapperPass` in the following?<br>
<br>
  INITIALIZE_PASS_BEGIN(AAResultsWrapperPass, "aa",<br>
                        "Function Alias Analysis Results", false, true)<br>
  INITIALIZE_PASS_DEPENDENCY(BasicAAWrapperPass)<br>
  INITIALIZE_PASS_DEPENDENCY(CFLAAWrapperPass)<br>
  INITIALIZE_PASS_DEPENDENCY(ExternalAAWrapperPass)<br>
  INITIALIZE_PASS_DEPENDENCY(GlobalsAAWrapperPass)<br>
  INITIALIZE_PASS_DEPENDENCY(ObjCARCAAWrapperPass)<br>
  INITIALIZE_PASS_DEPENDENCY(SCEVAAWrapperPass)<br>
  INITIALIZE_PASS_DEPENDENCY(ScopedNoAliasAAWrapperPass)<br>
  INITIALIZE_PASS_DEPENDENCY(TypeBasedAAWrapperPass)<br>
  INITIALIZE_PASS_END(AAResultsWrapperPass, "aa",<br>
                      "Function Alias Analysis Results", false, true)<br>
<br>
So far as I understand, this *will* initialize a `BaiscAAWrapperPass` pass which, when run (either via `run()` or `runOnFunction()`), will build a `BasicAAResult` object.<br></blockquote><div><br>None of these wrapper passes do anything in their runOnFunction.</div><div>The resulting result object does nothing unless it is added by the aaresultswrapperpass to the aa results.</div><div><br></div><div>See aaresultswrapperpass::runOnFunction.</div><div><br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
2 - There does not seem to be a difference between `opt -gvn` and `opt -basicaa -gvn`. In fact, running `opt -gvn -debug-pass=Arguments` and  `opt -basicaa -gvn -debug-pass=Arguments` both return the following, where -basicaa is automatically added.<br>
<br>
  Pass Arguments:  -targetlibinfo -tti -assumption-cache-tracker -invariant-info-marker -basicaa -domtree -aa -memdep -gvn -verify<br></blockquote><div><br></div><div><br></div><div>Starting at the new AAResultsWrapperPass, it looks like this changed the default to require basicaa on August 17th (intentionally or not).</div><div><br></div><div>--Dan</div></div></div></div>