[llvm-dev] Let CallGraphSCCPass Use Function-Level Analysis
Doerfert, Johannes via llvm-dev
llvm-dev at lists.llvm.org
Tue Jan 7 09:18:44 PST 2020
Hi Mikhail,
As Brian noted, stuff like this works better in the new pass manager.
Even in the old pass manager I thought it should work though.
Did you initialize the pass, via
`INITIALIZE_PASS_DEPENDENCY(PostDominatorTreeWrapperPass)`?
Did you require it, via
` AU.addRequired<PostDominatorTreeWrapperPass>();`?
Btw. May I ask what you are planning to do?
Cheers,
Johannes
On 01/07, Brian Gesiak via llvm-dev wrote:
> 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
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
--
Johannes Doerfert
Researcher
Argonne National Laboratory
Lemont, IL 60439, USA
jdoerfert at anl.gov
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200107/90203561/attachment.sig>
More information about the llvm-dev
mailing list