[llvm-dev] PM: loop pass depending on the "outer" BPI analysis

Fedor Sergeev via llvm-dev llvm-dev at lists.llvm.org
Fri Jan 26 12:37:57 PST 2018

Recently I was looking into porting IRCE loop pass into the new pass 
manager and stumbled on a problem.
The problem is due to the existing hard dependency of IRCE on 
BranchProbability analysis.

If I understand it right, in a new pass manager there are only two ways 
for loop analysis to ask
for the result of an "outer" (function/module-level) analysis:
   - get it from a predefined LoopStandardAnalysisResults set
     BPI is not there, so it unsuitable for me right now

   - query a cached result via getCachedResult of an outer analysis 
manager proxy
     only works if somebody already scheduled the analysis

I followed the cached-result way and that essentially means that for 
every presence of 'irce' in a pipeline
I have to insert 'require<branch-prob>' before it. It does not look like 
a very efficient approach.

In particular, all the IRCE tests use some variance of "opt -irce 
test.ll" invocation, which does not
work with a direct translation to "opt -passes=irce test.ll".
It only works with explicit
   opt -passes='require<branch-prob>,irce' test.ll

Legacy pass manager version of IRCE does have an explicit dependency on 
and that automatically installs that analysis into the pipeline before irce.

How do I express that kind of dependency with new pass manager?

If I did not miss something obvious that already handles these kinds of 
then what should be the best way to go?

- Add BPI to LoopStandardAnalysisResults?
   This makes it a required analysis for all loop passes...

- Make it optional in LoopStandardAnalysisResults (similar to MSSA)?
   Then how to express the dependency when required?

- enhance FunctionToLoopPassAdaptor to allow extra passes being added 
into smth like LoopCanonicalizationFPM?

Please, advise.


More information about the llvm-dev mailing list