Doerfert, Johannes via llvm-dev
2020-Jan-07 17:18 UTC
[llvm-dev] Let CallGraphSCCPass Use Function-Level Analysis
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>
Mikhail Gudim via llvm-dev
2020-Jan-09 15:35 UTC
[llvm-dev] Let CallGraphSCCPass Use Function-Level Analysis
Thanks Brian and Johannes for your replies. " As Brian noted, stuff like this works better in the new pass manager." Yes, but I need it to work for the old pass manager. " Did you initialize the pass, via `INITIALIZE_PASS_DEPENDENCY(PostDominatorTreeWrapperPass)`? Did you require it, via ` AU.addRequired<PostDominatorTreeWrapperPass>();`" Yes, I did. " Btw. May I ask what you are planning to do?" I would like to iterate through all post-dominators of the entry block (instead of just the entry block) to find more opportunities for argument promotion: https://reviews.llvm.org/D72382 Btw, it would be great if you could review / give some feedback on that patch. -----Original Message----- From: Doerfert, Johannes [mailto:jdoerfert at anl.gov] Sent: Tuesday, January 07, 2020 12:19 PM To: Brian Gesiak <modocache at gmail.com> Cc: Mikhail Gudim <mikhail.gudim at huawei.com>; llvm-dev at lists.llvm.org Subject: Re: [llvm-dev] Let CallGraphSCCPass Use Function-Level Analysis 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
Doerfert, Johannes via llvm-dev
2020-Jan-09 16:25 UTC
[llvm-dev] Let CallGraphSCCPass Use Function-Level Analysis
On 01/09, Mikhail Gudim wrote:> Thanks Brian and Johannes for your replies. > > " As Brian noted, stuff like this works better in the new pass manager." > > Yes, but I need it to work for the old pass manager. > > " Did you initialize the pass, via > `INITIALIZE_PASS_DEPENDENCY(PostDominatorTreeWrapperPass)`? > Did you require it, via > ` AU.addRequired<PostDominatorTreeWrapperPass>();`" > > Yes, I did.Worst case, you could build the PostDominatorTree yourself in the pass.> " Btw. May I ask what you are planning to do?" > > I would like to iterate through all post-dominators of the entry block (instead of just the entry block) to find more opportunities for argument promotion: > > https://reviews.llvm.org/D72382 > > Btw, it would be great if you could review / give some feedback on that patch.Done. -------------- 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/20200109/3a1b871d/attachment.sig>