任坤
2010-Mar-09 04:17 UTC
[LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg.
Hi: I want to do some optimization on MachineLoop. So I want to get MachineLoopInfo from MachineFunction. I reference MachineLICM.cpp. So I try to write a pass in Target/mytarget directory. I find there is Error. llvm/include/llvm/PassAnalysisSupport.h:198: AnalysisType& llvm::Pass::getAnalysisID(const llvm::PassInfo*) const [with AnalysisType = llvm::MachineLoopInfo]: Assertion `ResultPass && "getAnalysis*() called on an analysis that was not 'required' by pass!"' failed. **************************** runOnMachineFunction(MachineFunction &MF) { LI = &getAnalysis<MachineLoopInfo>(); DT = &getAnalysis<MachineDominatorTree>(); for (MachineLoopInfo::iterator I = LI->begin(), E = LI->end(); I != E; ++I) { CurLoop = *I; } } ****************************** I copy find from MachineLICM.cpp, and change class name. What is different ?? Thanks. Ren Kun --- 10年1月26日,周二, Benoit Boissinot <bboissin+llvm at gmail.com> 写道:> 发件人: Benoit Boissinot <bboissin+llvm at gmail.com> > 主题: Re: [LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg. > 收件人: "任坤" <hbrenkun at yahoo.cn> > 抄送: "llvm" <llvmdev at cs.uiuc.edu> > 日期: 2010年1月26日,周二,下午10:13 > On Tue, Jan 26, 2010 at 10:04:16PM > +0800, 浠诲潳 wrote: > > Hi, Dear Boissinot: > > > > 1. When I have irreducible CFG, I travel its nodes by > DFS. > > search backedge for every node. After I > finish one node, > > push it into a stack. > > [0, 1, 2, M] > <---push. > > [0, 1, 2, M,...N] <---push. > > > > When resolving node M, find a edge from > node N to node M, > > N is not in stack(M < N), It is a > backedge. > > N is in stack(M > N), It is NOT a > backedge. > > > > I treat these backedges as loop-edges. M > is Loop header node. > > If I cut these edges from CFG, CFG can be > topological sort. > > > > Am I right??? > > yes, exactly. > > regards, > > Benoit > > -- > :wq >
Nick Lewycky
2010-Mar-09 06:02 UTC
[LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg.
任坤 wrote:> Hi: > I want to do some optimization on MachineLoop. > So I want to get MachineLoopInfo from MachineFunction. > > I reference MachineLICM.cpp. > So I try to write a pass in Target/mytarget directory. > I find there is Error. > llvm/include/llvm/PassAnalysisSupport.h:198: AnalysisType& llvm::Pass::getAnalysisID(const llvm::PassInfo*) const [with AnalysisType = llvm::MachineLoopInfo]: Assertion `ResultPass&& "getAnalysis*() called on an analysis that was not 'required' by pass!"' failed.Did you copy getAnalysisUsage too? The way it works is that you need getAnalysisUsage to declare all the passes you need to exist before your pass starts, then getAnalysis<>() inside your runOnMachineFunction can use them. If you call getAnalysis on a Pass that you didn't request, you'll hit this assertion. Nick> **************************** > runOnMachineFunction(MachineFunction&MF) { > LI =&getAnalysis<MachineLoopInfo>(); > DT =&getAnalysis<MachineDominatorTree>(); > > for (MachineLoopInfo::iterator > I = LI->begin(), E = LI->end(); I != E; ++I) { > CurLoop = *I; > } > } > ****************************** > I copy find from MachineLICM.cpp, and change class name. > What is different ?? > > Thanks. > > Ren Kun > > > > > --- 10年1月26日,周二, Benoit Boissinot<bboissin+llvm at gmail.com> 写道: > >> 发件人: Benoit Boissinot<bboissin+llvm at gmail.com> >> 主题: Re: [LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg. >> 收件人: "任坤"<hbrenkun at yahoo.cn> >> 抄送: "llvm"<llvmdev at cs.uiuc.edu> >> 日期: 2010年1月26日,周二,下午10:13 >> On Tue, Jan 26, 2010 at 10:04:16PM >> +0800, 浠诲潳 wrote: >>> Hi, Dear Boissinot: >>> >>> 1. When I have irreducible CFG, I travel its nodes by >> DFS. >>> search backedge for every node. After I >> finish one node, >>> push it into a stack. >>> [0, 1, 2, M] >> <---push. >>> [0, 1, 2, M,...N]<---push. >>> >>> When resolving node M, find a edge from >> node N to node M, >>> N is not in stack(M< N), It is a >> backedge. >>> N is in stack(M> N), It is NOT a >> backedge. >>> >>> I treat these backedges as loop-edges. M >> is Loop header node. >>> If I cut these edges from CFG, CFG can be >> topological sort. >>> >>> Am I right??? >> >> yes, exactly. >> >> regards, >> >> Benoit >> >> -- >> :wq >> > > > > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Maybe Matching Threads
- [LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg.
- [LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg.
- [LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg.
- [LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg.
- [LLVMdev] A new project proposal for LLVM and calling help from a chinese student