Index: tools/llvm-exegesis/llvm-exegesis.cpp =================================================================== --- tools/llvm-exegesis/llvm-exegesis.cpp +++ tools/llvm-exegesis/llvm-exegesis.cpp @@ -73,6 +73,9 @@ static llvm::cl::opt AnalysisClustersFile("analysis-clusters-file", llvm::cl::desc(""), llvm::cl::init("-")); +static llvm::cl::opt + AnalysisInconsistenciesFile("analysis-inconsistencies-file", + llvm::cl::desc(""), llvm::cl::init("-")); namespace exegesis { @@ -125,6 +128,26 @@ exegesis::pfm::pfmTerminate(); } +// Prints the results of running analysis printer `Print` to file `Filename` if +// Filename is non-empty. +void maybePrintAnalysis(const Analysis &Analyzer, const std::string &Name, + const std::string &Filename, + llvm::Error (Analysis::*Print)(llvm::raw_ostream &) + const) { + if (!Filename.empty()) { + if (Filename != "-") { + llvm::errs() << "Printing " << Name << " results to file '" << Filename + << "'\n"; + } + std::error_code ErrorCode; + llvm::raw_fd_ostream ClustersOS(Filename, ErrorCode, llvm::sys::fs::F_RW); + if (ErrorCode) + llvm::report_fatal_error("cannot open out file: " + Filename); + if (auto Err = (Analyzer.*Print)(ClustersOS)) + llvm::report_fatal_error(std::move(Err)); + } +} + void analysisMain() { // Read benchmarks. const std::vector Points = @@ -152,17 +175,11 @@ const Analysis Analyzer(*TheTarget, Clustering); - std::error_code ErrorCode; - llvm::raw_fd_ostream ClustersOS(AnalysisClustersFile, ErrorCode, - llvm::sys::fs::F_RW); - if (ErrorCode) - llvm::report_fatal_error("cannot open out file: " + AnalysisClustersFile); - - if (auto Err = Analyzer.printClusters(ClustersOS)) - llvm::report_fatal_error(std::move(Err)); - - if (auto Err = Analyzer.printSchedClassInconsistencies(llvm::outs())) - llvm::report_fatal_error(std::move(Err)); + maybePrintAnalysis(Analyzer, "analysis clusters", AnalysisClustersFile, + &Analysis::printClusters); + maybePrintAnalysis(Analyzer, "sched class consistency analysis", + AnalysisInconsistenciesFile, + &Analysis::printSchedClassInconsistencies); } } // namespace exegesis