The LLVMBasedICFG has too many tasks and is therefore hard to maintain and violates the single responsibility principle.
This PR splits the LLVMBasedICFG into three parts: Callgraph-construction (LLVMBasedCallGraphBuilder), global ctors/dtors handling (GlobalCtorsDtorsModel), and representing the LLVM-based ICFG (LLVMBasedICFG). The current API functions from LLVMBasedICFG are still there for compatibility and convenience.
In addition, the callgraph-construction is enhanced to make use of the Soundness flag that is already passed in, but not used.
Also, callgraph-resolvers that do not modify the alias information, can now communicate this information to the callgraph builder in order to reach a faster path in the fixpoint algorithm.
The
LLVMBasedICFG
has too many tasks and is therefore hard to maintain and violates the single responsibility principle.This PR splits the
LLVMBasedICFG
into three parts: Callgraph-construction (LLVMBasedCallGraphBuilder
), global ctors/dtors handling (GlobalCtorsDtorsModel
), and representing the LLVM-based ICFG (LLVMBasedICFG
). The current API functions fromLLVMBasedICFG
are still there for compatibility and convenience.In addition, the callgraph-construction is enhanced to make use of the
Soundness
flag that is already passed in, but not used. Also, callgraph-resolvers that do not modify the alias information, can now communicate this information to the callgraph builder in order to reach a faster path in the fixpoint algorithm.