[LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg.

Nick Lewycky nicholas at mxc.ca
Mon Mar 8 22:02:38 PST 2010


任坤   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




More information about the llvm-dev mailing list