diff options
author | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-06-13 21:46:57 +0000 |
---|---|---|
committer | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-06-13 21:46:57 +0000 |
commit | 6e6e3af55bb97e1a4c97375c15a2b0099120c5a7 (patch) | |
tree | 4dc151e7deced1ab1a3ebab57fd420e8a0cf0138 /clang/lib/CodeGen/CodeGenAction.cpp | |
parent | a5b12be60f98012dc8b75933d6dc1210bd742054 (diff) | |
download | bcm5719-llvm-6e6e3af55bb97e1a4c97375c15a2b0099120c5a7.tar.gz bcm5719-llvm-6e6e3af55bb97e1a4c97375c15a2b0099120c5a7.zip |
[Remarks] Refactor optimization remarks setup
* Add a common function to setup opt-remarks
* Rename common options to the same names
* Add error types to distinguish between file errors and regex errors
llvm-svn: 363328
Diffstat (limited to 'clang/lib/CodeGen/CodeGenAction.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenAction.cpp | 51 |
1 files changed, 24 insertions, 27 deletions
diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index 7671010fc98..e8022c0e637 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -262,35 +262,32 @@ namespace clang { Ctx.getDiagnosticHandler(); Ctx.setDiagnosticHandler(llvm::make_unique<ClangDiagnosticHandler>( CodeGenOpts, this)); - Ctx.setDiagnosticsHotnessRequested(CodeGenOpts.DiagnosticsWithHotness); - if (CodeGenOpts.DiagnosticsHotnessThreshold != 0) - Ctx.setDiagnosticsHotnessThreshold( - CodeGenOpts.DiagnosticsHotnessThreshold); - - std::unique_ptr<llvm::ToolOutputFile> OptRecordFile; - if (!CodeGenOpts.OptRecordFile.empty()) { - std::error_code EC; - OptRecordFile = llvm::make_unique<llvm::ToolOutputFile>( - CodeGenOpts.OptRecordFile, EC, sys::fs::F_None); - if (EC) { - Diags.Report(diag::err_cannot_open_file) << - CodeGenOpts.OptRecordFile << EC.message(); - return; - } - - Ctx.setRemarkStreamer(llvm::make_unique<RemarkStreamer>( - CodeGenOpts.OptRecordFile, - llvm::make_unique<remarks::YAMLSerializer>(OptRecordFile->os()))); - - if (!CodeGenOpts.OptRecordPasses.empty()) - if (Error E = Ctx.getRemarkStreamer()->setFilter( - CodeGenOpts.OptRecordPasses)) - Diags.Report(diag::err_drv_optimization_remark_pattern) - << toString(std::move(E)) << CodeGenOpts.OptRecordPasses; - if (CodeGenOpts.getProfileUse() != CodeGenOptions::ProfileNone) - Ctx.setDiagnosticsHotnessRequested(true); + Expected<std::unique_ptr<llvm::ToolOutputFile>> OptRecordFileOrErr = + setupOptimizationRemarks(Ctx, CodeGenOpts.OptRecordFile, + CodeGenOpts.OptRecordPasses, + CodeGenOpts.DiagnosticsWithHotness, + CodeGenOpts.DiagnosticsHotnessThreshold); + + if (Error E = OptRecordFileOrErr.takeError()) { + handleAllErrors( + std::move(E), + [&](const RemarkSetupFileError &E) { + Diags.Report(diag::err_cannot_open_file) + << CodeGenOpts.OptRecordFile << E.message(); + }, + [&](const RemarkSetupPatternError &E) { + Diags.Report(diag::err_drv_optimization_remark_pattern) + << E.message() << CodeGenOpts.OptRecordPasses; + }); + return; } + std::unique_ptr<llvm::ToolOutputFile> OptRecordFile = + std::move(*OptRecordFileOrErr); + + if (OptRecordFile && + CodeGenOpts.getProfileUse() != CodeGenOptions::ProfileNone) + Ctx.setDiagnosticsHotnessRequested(true); // Link each LinkModule into our module. if (LinkInModules()) |