Hello, I try to make a big CFG (control flow graph) by combining all the CFG-s from all the functions of a module. I still have one problem : I want to get the links between functions. For CFG-s, I used CallGraphNode->second->getFunction, then Function_iterators and succ_iterators, so I have all the links between BBs. Now, the questions is how do I link BBs from different functions? I can do it in a way not so elegant. Take the last BB of every function, then getTerminator and see that function it is called and then link to (instruction-2-instruction). There must be there a better way to get the linkage between BBs that are in different functions. Thank you for any help ! -------------- next part -------------- An HTML attachment was scrubbed... URL: <lists.llvm.org/pipermail/llvm-dev/attachments/20130426/58e26404/attachment.html>
Hi, On 26/04/13 11:19, Alexandru Ionut Diaconescu wrote:> Hello, > > I try to make a big CFG (control flow graph) by combining all the CFG-s from all > the functions of a module. I still have one problem : I want to get the links > between functions. > > For CFG-s, I used CallGraphNode->second->getFunction, then Function_iterators > and succ_iterators, so I have all the links between BBs. Now, the questions is > how do I link BBs from different functions? > > I can do it in a way not so elegant. Take the last BB of every function, then > getTerminator and see that function it is called and then link to > (instruction-2-instruction).calls don't have to be terminators, so that wouldn't work properly anyway.> > There must be there a better way to get the linkage between BBs that are in > different functions.Sure, take a look at include/llvm/Analysis/CallGraph.h Ciao, Duncan.
Thanks for the response. I looked and I cannot see what exactly I need. I saw getCalledFunction() so I need CallSite CS(cast<Value>(II)) where II is a basic block iterator, so an instruction. It seems not easier than the "unelegant" version....if I am still at the Instruction level... I need a method that takes from a "leaf" basic block from a function (Maybe there is the possibility not to have only one "end" basic block) the connection with an entry basic block of another function. Thank you ! On Fri, Apr 26, 2013 at 1:04 PM, Duncan Sands <baldrick at free.fr> wrote:> Hi, > > > On 26/04/13 11:19, Alexandru Ionut Diaconescu wrote: > >> Hello, >> >> I try to make a big CFG (control flow graph) by combining all the CFG-s >> from all >> the functions of a module. I still have one problem : I want to get the >> links >> between functions. >> >> For CFG-s, I used CallGraphNode->second->**getFunction, then >> Function_iterators >> and succ_iterators, so I have all the links between BBs. Now, the >> questions is >> how do I link BBs from different functions? >> >> I can do it in a way not so elegant. Take the last BB of every function, >> then >> getTerminator and see that function it is called and then link to >> (instruction-2-instruction). >> > > calls don't have to be terminators, so that wouldn't work properly anyway. > > > >> There must be there a better way to get the linkage between BBs that are >> in >> different functions. >> > > Sure, take a look at include/llvm/Analysis/**CallGraph.h > > Ciao, Duncan. > ______________________________**_________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu llvm.cs.uiuc.edu > lists.cs.uiuc.edu/**mailman/listinfo/llvmdev<lists.cs.uiuc.edu/mailman/listinfo/llvmdev> >-- Best regards, Alexandru Ionut Diaconescu -------------- next part -------------- An HTML attachment was scrubbed... URL: <lists.llvm.org/pipermail/llvm-dev/attachments/20130426/fe207c41/attachment.html>