[LLVMdev] Find all backedges of CFG by MachineDominatorTree. please look at my jpg.
任坤
hbrenkun at yahoo.cn
Mon Jan 25 03:12:30 PST 2010
Dear Benoit:
Thanks for your answer.
Best Regards.
Ren Kun
--- 10年1月25日,周一, 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月25日,周一,下午6:14
> 2010/1/25 任坤 <hbrenkun at yahoo.cn>:
> > Hi:
> >
> > I hope to cut all backedges of MachineFunction CFG,
> then topological sort MachineBasicBlocks.
> >
> > 1. MachineDominatorTree *domintree = new
> MachineDominatorTree();
> > domintree->runOnMachineFunction(mf);
> >
> > 2. Then travel mf one by one.
> > When
> domintree->dominates(next,current) is true, there is a
> backedge from current node to next node. move this backedge
> form CFG.
> >
> > But I find A LOOP in some CFG, there
> is backedge from current to next, dominates function reture
> "FALSE". So my algorithm find Graph can not be
> > toplogical sort.
> >
> > 3. how do I find all backedges of CFG???
>
> For non-reducible graphs (as is the case for your example),
> it is no
> longer true that the target of a back-edge dominates the
> source.
>
> If you want back-edges, just do a depth-first search of the
> CFG, the
> back-edges are the edges going to an already processed
> node. If you
> want loop-edges (edges going to loop headers, that is more
> generic
> than back-edges), you'll need to build the loop nesting
> forest.
>
> Cheers,
>
> Benoit
>
___________________________________________________________
好玩贺卡等你发,邮箱贺卡全新上线!
http://card.mail.cn.yahoo.com/
More information about the llvm-dev
mailing list