On Tue, Jan 3, 2012 at 4:55 PM, Chris Lattner <clattner at apple.com> wrote:> On Jan 3, 2012, at 1:53 PM, Jianzhou Zhao wrote: >> I see. I asked the question because LLVM provides several alias >> analysis, and I was wondering how to decide which one should be used >> for compiling most programs. >> >> I think the basicaa is the default one, but by looking into its code, >> it is not inter-procedural or context-sensitive (I am not 100% sure), >> so does not provide interesting mod/ref information. Then, GVN(PRE) >> and LICM may not have a lot of opportunities for optimizing calls. So, >> I looked into the thesis for understanding how those inter-procedural >> aa and other aa contribute. I guess basicaa has a better speed-up per >> compiling-cost ratio for most common programs than others. Is this >> correct? > > We do also use globalsmodref, and have a pass for inferring and propagating the readnone/readonly markers. We also now have Type Based Alias Analysis for C languages.I do not understand how the chaining works here. If I do opt -globalsmodref-aa ..., does the globalsmodref pass call the analysis implemented in AliasAnalysis or BasicAliasAnalysis class when globalsmodref cannot decide Must or No Alias? I think it should be AliasAnalysis, because globalsmodref subclasses AliasAnalysis. The documents say that all the aa analysis are chained, and give an example like opt -basicaa -ds-aa -licm. In this case, does ds-aa automatically call basicaa for the case when ds-aa can only return MayAlias? This looks magic to me. Is this handled by AnalysisGroup magically?> > No one has really been pushing forward aliasing much lately. > > -Chris >-- Jianzhou
Jianzhou Zhao <jianzhou <at> seas.upenn.edu> writes:> The documents say that all the aa analysis are chained, and give an > example like opt -basicaa -ds-aa -licm. In this case, does ds-aa > automatically call basicaa for the case when ds-aa can only return > MayAlias? This looks magic to me. Is this handled by AnalysisGroup > magically?As I understand it, the simplest AA pass which can determine reliable information is the one which is used, which then chains on to more complex (and presumably slower) passes. In this way something like basicaa can determine a few things as definite and anything it cannot determine it chains onto another pass (e.g. ds- aa) to have a go at. This will continue until it finds a definite answer or runs out of AA passes. The chaining is used with masking of the results to ensure that the result only becomes more accurate, even if a chained-to pass doesn't have any idea what to do (at least for mod/ref info, so I presume it is similar for alias() calls).
On Wed, Jan 4, 2012 at 12:10 PM, David Gardner <daveg at xmos.com> wrote:> Jianzhou Zhao <jianzhou <at> seas.upenn.edu> writes: >> The documents say that all the aa analysis are chained, and give an >> example like opt -basicaa -ds-aa -licm. In this case, does ds-aa >> automatically call basicaa for the case when ds-aa can only return >> MayAlias? This looks magic to me. Is this handled by AnalysisGroup >> magically? > > As I understand it, the simplest AA pass which can determine reliable > information is the one which is used, which then chains on to more > complex (and presumably slower) passes. In this way something like > basicaa can determine a few things as definite and anything it cannot > determine it chains onto another pass (e.g. ds- aa) to have a go at. > This will continue until it finds a definite answer or runs out of AA > passes.Hi David, At this level, I can understand how it works. I was confused because I have been looking at the source code for implementing them. All the globalmodref, scev-aa, steenaa and ds-aa are only subclasses of the AliasAnalysis class, so I cannot see how ds-aa can automatically call basicaa. What I guess is that the order of the flags matters. This means if I want to chain a simple AA (say, -basicaa) and a fancier one (ds-aa), I should add the -basicaa before -ds-aa to define the chain, which the AnalysisGroup can understand. If I add ds-aa before basicaa, does that mean basicaa will chain with ds-aa backward?> > The chaining is used with masking of the results to ensure that the > result only becomes more accurate, even if a chained-to pass doesn't > have any idea what to do (at least for mod/ref info, so I presume it > is similar for alias() calls). > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev-- Jianzhou