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.
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
Thanks for the response.
I looked and I cannot see what exactly I need. I saw getCalledFunction() so I need CallSite CS(cast(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.
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...
the call graph gives you a graph where the nodes are functions, and there is an
edge from function F to function G if function F calls function G.
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.
Most functions don't end in a call to another function, they end by returning
control to the function that called them.