summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenAction.cpp
diff options
context:
space:
mode:
authorFrancis Visoiu Mistrih <francisvm@yahoo.com>2019-06-13 21:46:57 +0000
committerFrancis Visoiu Mistrih <francisvm@yahoo.com>2019-06-13 21:46:57 +0000
commit6e6e3af55bb97e1a4c97375c15a2b0099120c5a7 (patch)
tree4dc151e7deced1ab1a3ebab57fd420e8a0cf0138 /clang/lib/CodeGen/CodeGenAction.cpp
parenta5b12be60f98012dc8b75933d6dc1210bd742054 (diff)
downloadbcm5719-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.cpp51
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())
OpenPOWER on IntegriCloud