[PATCH] D15124: Use @llvm.invariant.start/end intrinsics to extend the meaning of basic AA's pointsToConstantMemory(), for GVN-based load elimination purposes [Local objects only]

Daniel Berlin via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 10 11:43:40 PST 2015


On Thu, Dec 10, 2015 at 11:27 AM, Larisse Voufo <lvoufo at gmail.com> wrote:

> lvoufo added a comment.
>
> In http://reviews.llvm.org/D15124#307279, @dberlin wrote:
>
> > "(2) -gvn already requires -basicaa. So, -basicaa would be redundant in
> >  '-basicaa -gvn'. I could add it for clarity if you prefer.
> >  "
> >  -gvn does not require -basicaa.
> >  You've stated this a few times, and i'm not sure why you think this.
> >
> > <from GVN>:
> >
> >   void getAnalysisUsage(AnalysisUsage &AU) const override {
> >         AU.addRequired<AssumptionCacheTracker>();
> >         AU.addRequired<DominatorTreeWrapperPass>();
> >         AU.addRequired<TargetLibraryInfoWrapperPass>();
> >         if (!NoLoads)
> >           AU.addRequired<MemoryDependenceAnalysis>();
> >         AU.addRequired<AAResultsWrapperPass>();
> >
> >
> > }
> >
> > GVN requires AC, DominatorTree, and TLI all the time.
> >  It uses AA results, which is "whatever aa you have enabled".
> >  It requires memorydependence if you want to optimize loads.
> >  Memory dependence, in turn, does not require basicaa either:
> >
> > void MemoryDependenceAnalysis::getAnalysisUsage(AnalysisUsage &AU) const
> {
> >
> >     AU.setPreservesAll();
> >     AU.addRequired<AssumptionCacheTracker>();
> >     AU.addRequiredTransitive<AAResultsWrapperPass>();
> >     AU.addRequiredTransitive<TargetLibraryInfoWrapperPass>();
> >   }
> >
> >
> >
> > No passes *require* basicaa, because basicaa is an optional pass
> providing
> >  AA results.
>
>
> Point taken. I may be misusing "require" here, but I sure understand what
> is going on better now thanks to this.
> To clarify my statements and for added clarity from your points above, I
> have 2 questions:
>
> 1 - What is one to make of the dependence on `BasicAAWrapperPass` in the
> following?
>
>   INITIALIZE_PASS_BEGIN(AAResultsWrapperPass, "aa",
>                         "Function Alias Analysis Results", false, true)
>   INITIALIZE_PASS_DEPENDENCY(BasicAAWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(CFLAAWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(ExternalAAWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(GlobalsAAWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(ObjCARCAAWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(SCEVAAWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(ScopedNoAliasAAWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(TypeBasedAAWrapperPass)
>   INITIALIZE_PASS_END(AAResultsWrapperPass, "aa",
>                       "Function Alias Analysis Results", false, true)
>
> So far as I understand, this *will* initialize a `BaiscAAWrapperPass` pass
> which, when run (either via `run()` or `runOnFunction()`), will build a
> `BasicAAResult` object.
>

None of these wrapper passes do anything in their runOnFunction.
The resulting result object does nothing unless it is added by the
aaresultswrapperpass to the aa results.

See aaresultswrapperpass::runOnFunction.



>
> 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.
>
>   Pass Arguments:  -targetlibinfo -tti -assumption-cache-tracker
> -invariant-info-marker -basicaa -domtree -aa -memdep -gvn -verify
>


Starting at the new AAResultsWrapperPass, it looks like this changed the
default to require basicaa on August 17th (intentionally or not).

--Dan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151210/9ad3d5ae/attachment.html>


More information about the llvm-commits mailing list