Can LLVM calculate DominatorTree and LoopInfo for call graphs?
For example, I need to know if an edge (function1->function2) is a
backedge. If there was a DominatorTree for call graphs that would be
easy. Since I haven't found, I've copied the algorithm
FindFunctionBackedges in BasicBlockUtils.cpp and modified it to use
call graphs. Unfortunately, since the call graphs are not reducible,
the algorithm does not find backedges correctly. It finds backedges
where it shouldn't.
Also, I need to know if a function in a call graph is a loop head.
If a loop exists, which functions belongs to this loop. If the above
algorithm works (to find backedges), finding loop information should
Also, given a function in a call graph, is it possible to find its
predecessors? I mean, I can find them by myself, by previously build a
list, but it would be great to have a pred_begin and pred_end for call
graph functions. Is there such a thing?