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
Jianzhou Zhao <jianzhou <at> seas.upenn.edu> writes:> 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.There's some magic in the pass registration which adds them with a `previous' link between AA passes, so the base AliasAnalysis class ends up calling the previous one via the "AliasAnalysis *AA" member.> 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?It will affect the order of the usage of the particular alias analysis passes, but the last one specified is called first (so -basicaa -ds-aa will cause ds-aa to be used first, then chain to basicaa as the previous AA pass). However, I believe that it should not affect the accuracy of the alias information as the chaining will stop when a definite answer is reached, whatever the order of the chained passes.
On Thu, Jan 5, 2012 at 4:14 AM, David Gardner <daveg at xmos.com> wrote:> Jianzhou Zhao <jianzhou <at> seas.upenn.edu> writes: >> 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. > > There's some magic in the pass registration which adds them with a > `previous' link between AA passes, so the base AliasAnalysis class > ends up calling the previous one via the "AliasAnalysis *AA" member. > >> 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? > > It will affect the order of the usage of the particular alias analysis > passes, but the last one specified is called first (so -basicaa -ds-aa > will cause ds-aa to be used first, then chain to basicaa as the previous > AA pass). However, I believe that it should not affect the accuracy of > the alias information as the chaining will stop when a definite answer > is reached, whatever the order of the chained passes.Thanks. This makes a lot of sense.> > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev-- Jianzhou