[llvm-dev] Let CallGraphSCCPass Use Function-Level Analysis

Brian Gesiak via llvm-dev llvm-dev at lists.llvm.org
Tue Jan 7 08:55:36 PST 2020


Hello! The new pass manager provides analysis proxies from one IR unit
type to another. These are specializations of
'llvm::InnerAnalysisManagerProxy'. For example,
'llvm::FunctionAnalysisManagerModuleProxy' allows you to access
function analyses from within module passes.

In your case, it sounds like you'd want to use
'llvm::FunctionAnalysisManagerCGSCCProxy', which allows you to access
function analyses from within an CGSCC pass. Here's an example of
using it:

```
class MyCGSCCPass : public llvm::PassInfoMixin<MyCGSCCPass> {
public:
  llvm::PreservedAnalyses run(llvm::LazyCallGraph::SCC &C,
                              llvm::CGSCCAnalysisManager &AM,
                              llvm::LazyCallGraph &CG,
                              llvm::CGSCCUpdateResult &UR) {
    llvm::FunctionAnalysisManager &FAM =
        AM.getResult<llvm::FunctionAnalysisManagerCGSCCProxy>(C, CG)
            .getManager();
    for (llvm::LazyCallGraph::Node &N : C) {
      llvm::Function &F = N.getFunction();
      llvm::PostDominatorTree &PDT =
          FAM.getResult<llvm::PostDominatorTreeAnalysis>(F);
      PDT.print(llvm::outs());
    }
    return llvm::PreservedAnalyses::none();
  }
};
```

Here's a full example of the above:
https://gist.github.com/modocache/d5804ba567476e32cad1fd0850363532

I was just reading through this part of the codebase, so I'm a little
familiar with it now. Anyway, hope this helps!

- Brian Gesiak

On Tue, Jan 7, 2020 at 8:13 AM Mikhail Gudim via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
>
> Dear all,
>
>
>
> I would like to use the PostDominatorTree in ArgPromotion. I did not find an example of how to use function level analysis inside CallGraphSCCPass. I tried to follow an example of how to use function-level pass in a module pass, but I hit “llvm_unreachable” in PMDataManager::addLowerLevelRequiredPass.
>
>
>
> What would be a proper way to make PostDominatorTree available in ArgPromotion?
>
>
>
> Thanks in advance,
>
>
>
> Mikhail
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list