CallGraph

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 !

Hi,

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(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 !

Hi,

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.

Ciao, Duncan.

Thank you !