77 * Philipp Schubert and others
88 *****************************************************************************/
99
10- #include " phasar/Controller/ AnalysisController.h"
10+ #include " AnalysisController.h"
1111
1212#include " phasar/PhasarLLVM/Passes/GeneralStatisticsAnalysis.h"
1313#include " phasar/PhasarLLVM/TypeHierarchy/LLVMTypeHierarchy.h"
1717
1818namespace psr {
1919
20- static void
21- emitRequestedHelperAnalysisResults (AnalysisController::ControllerData &Data) {
22- auto WithResultFileOrStdout = [&ResultDirectory = Data.ResultDirectory ](
20+ void AnalysisController::emitRequestedHelperAnalysisResults () {
21+ auto WithResultFileOrStdout = [&ResultDirectory = this ->ResultDirectory ](
2322 const auto &FileName, auto Callback) {
2423 if (!ResultDirectory.empty ()) {
2524 if (auto OFS = openFileStream (ResultDirectory.string () + FileName)) {
@@ -30,8 +29,8 @@ emitRequestedHelperAnalysisResults(AnalysisController::ControllerData &Data) {
3029 }
3130 };
3231
33- auto EmitterOptions = Data. EmitterOptions ;
34- auto &HA = *Data. HA ;
32+ auto EmitterOptions = this -> EmitterOptions ;
33+ auto &HA = *this -> HA ;
3534
3635 if (EmitterOptions & AnalysisControllerEmitterOptions::EmitIR) {
3736 WithResultFileOrStdout (" /psr-preprocess-ir.ll" , [&HA](auto &OS) {
@@ -96,24 +95,24 @@ emitRequestedHelperAnalysisResults(AnalysisController::ControllerData &Data) {
9695 }
9796}
9897
99- static void executeDemandDriven (AnalysisController::ControllerData & /* Data*/ ) {
98+ static void executeDemandDriven (AnalysisController & /* Data*/ ) {
10099 llvm::report_fatal_error (
101100 " AnalysisStrategy 'demand-driven' not supported, yet!" );
102101}
103- static void executeIncremental (AnalysisController::ControllerData & /* Data*/ ) {
102+ static void executeIncremental (AnalysisController & /* Data*/ ) {
104103 llvm::report_fatal_error (
105104 " AnalysisStrategy 'incremental' not supported, yet!" );
106105}
107- static void executeModuleWise (AnalysisController::ControllerData & /* Data*/ ) {
106+ static void executeModuleWise (AnalysisController & /* Data*/ ) {
108107 llvm::report_fatal_error (
109108 " AnalysisStrategy 'module-wise' not supported, yet!" );
110109}
111- static void executeVariational (AnalysisController::ControllerData & /* Data*/ ) {
110+ static void executeVariational (AnalysisController & /* Data*/ ) {
112111 llvm::report_fatal_error (
113112 " AnalysisStrategy 'variational' not supported, yet!" );
114113}
115114
116- static void executeWholeProgram (AnalysisController::ControllerData &Data) {
115+ static void executeWholeProgram (AnalysisController &Data) {
117116 for (auto DataFlowAnalysis : Data.DataFlowAnalyses ) {
118117 using namespace controller ;
119118 switch (DataFlowAnalysis) {
@@ -171,60 +170,31 @@ static void executeWholeProgram(AnalysisController::ControllerData &Data) {
171170 }
172171}
173172
174- static void executeAs (AnalysisController::ControllerData &Data,
175- AnalysisStrategy Strategy) {
173+ void AnalysisController::run () {
176174 switch (Strategy) {
177175 case AnalysisStrategy::None:
178176 return ;
179177 case AnalysisStrategy::DemandDriven:
180- executeDemandDriven (Data );
178+ executeDemandDriven (* this );
181179 return ;
182180 case AnalysisStrategy::Incremental:
183- executeIncremental (Data );
181+ executeIncremental (* this );
184182 return ;
185183 case AnalysisStrategy::ModuleWise:
186- executeModuleWise (Data );
184+ executeModuleWise (* this );
187185 return ;
188186 case AnalysisStrategy::Variational:
189- executeVariational (Data );
187+ executeVariational (* this );
190188 return ;
191189 case AnalysisStrategy::WholeProgram:
192- executeWholeProgram (Data );
190+ executeWholeProgram (* this );
193191 return ;
194192 }
195193 llvm_unreachable (
196194 " All AnalysisStrategy variants should be handled in the switch above!" );
197195}
198196
199- AnalysisController::AnalysisController (
200- HelperAnalyses &HA, std::vector<DataFlowAnalysisType> DataFlowAnalyses,
201- std::vector<std::string> AnalysisConfigs,
202- std::vector<std::string> EntryPoints, AnalysisStrategy Strategy,
203- AnalysisControllerEmitterOptions EmitterOptions,
204- IFDSIDESolverConfig SolverConfig, std::string ProjectID,
205- std::string OutDirectory)
206- : Data{
207- &HA,
208- std::move (DataFlowAnalyses),
209- std::move (AnalysisConfigs),
210- std::move (EntryPoints),
211- Strategy,
212- EmitterOptions,
213- std::move (ProjectID),
214- std::move (OutDirectory),
215- SolverConfig,
216- } {
217- if (!Data.ResultDirectory .empty ()) {
218- // create directory for results
219- Data.ResultDirectory /= Data.ProjectID + " -" + createTimeStamp ();
220- std::filesystem::create_directory (Data.ResultDirectory );
221- }
222- emitRequestedHelperAnalysisResults (Data);
223- executeAs (Data, Strategy);
224- }
225-
226- LLVMTaintConfig
227- controller::makeTaintConfig (AnalysisController::ControllerData &Data) {
197+ LLVMTaintConfig controller::makeTaintConfig (AnalysisController &Data) {
228198 std::string AnalysisConfigPath =
229199 !Data.AnalysisConfigs .empty () ? Data.AnalysisConfigs [0 ] : " " ;
230200 return !AnalysisConfigPath.empty ()
0 commit comments