| 17 | using namespace llvm; |
| 18 | |
| 19 | void IndCallSolverMgr::solve(Module &M) { |
| 20 | ModulePassManager MPM; |
| 21 | ModuleAnalysisManager MAM; |
| 22 | PassBuilder PB; |
| 23 | PB.registerModuleAnalyses(MAM); |
| 24 | // add customized CVP pass |
| 25 | MPM.addPass(CustomCVPPass()); |
| 26 | MPM.run(M, MAM); |
| 27 | |
| 28 | LLVMWalker Walker; |
| 29 | GlobalInitializerSolverHandler GISHandler; |
| 30 | TBAASimpleSolverHandler TSSHandler; |
| 31 | TestTypeVirtSolverHandler TTVSHandler; |
| 32 | TBAAVirtSolverHandler TVSHandler; |
| 33 | Walker.addHandler(&GISHandler); |
| 34 | Walker.addHandler(&TTVSHandler); |
| 35 | Walker.addHandler(&TSSHandler); |
| 36 | Walker.addHandler(&TVSHandler); |
| 37 | Walker.walk(M); |
| 38 | TTVSHandler.collect(M); |
| 39 | Solvers.emplace_back( |
| 40 | std::make_unique<TestTypeVirtSolver>(std::move(TTVSHandler))); |
| 41 | Solvers.emplace_back( |
| 42 | std::make_unique<TBAASimpleSolver>(std::move(TSSHandler))); |
| 43 | Solvers.emplace_back( |
| 44 | std::make_unique<GlobalInitializerSolver>(std::move(GISHandler))); |
| 45 | Solvers.emplace_back(std::make_unique<TBAAVirtSolver>(std::move(TVSHandler))); |
| 46 | } |
| 47 | |
| 48 | const Function *IndCallSolverMgr::getCalledFunction(const CallBase &CB) const { |
| 49 | auto Result = getCalledFunctions(CB); |
no test coverage detected