From: Francis Visoiu Mistrih Date: Wed, 6 Mar 2019 14:52:37 +0000 (+0000) Subject: Revert "[Remarks] Refactor remark diagnostic emission in a RemarkStreamer" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4107715f75d9782d30b81a1647d8695966973c43;p=llvm Revert "[Remarks] Refactor remark diagnostic emission in a RemarkStreamer" This reverts commit 2e8c4997a2089f8228c843fd81b148d903472e02. Breaks bots. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355511 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Analysis/OptimizationRemarkEmitter.h b/include/llvm/Analysis/OptimizationRemarkEmitter.h index 7b8404404ce..a2b29555ce5 100644 --- a/include/llvm/Analysis/OptimizationRemarkEmitter.h +++ b/include/llvm/Analysis/OptimizationRemarkEmitter.h @@ -77,7 +77,7 @@ public: // remarks enabled. We can't currently check whether remarks are requested // for the calling pass since that requires actually building the remark. - if (F->getContext().getRemarkStreamer() || + if (F->getContext().getDiagnosticsOutputFile() || F->getContext().getDiagHandlerPtr()->isAnyRemarkEnabled()) { auto R = RemarkBuilder(); emit((DiagnosticInfoOptimizationBase &)R); @@ -92,7 +92,7 @@ public: /// provide more context so that non-trivial false positives can be quickly /// detected by the user. bool allowExtraAnalysis(StringRef PassName) const { - return (F->getContext().getRemarkStreamer() || + return (F->getContext().getDiagnosticsOutputFile() || F->getContext().getDiagHandlerPtr()->isAnyRemarkEnabled(PassName)); } diff --git a/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h b/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h index a461a299917..9a0fd562536 100644 --- a/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h +++ b/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h @@ -158,10 +158,9 @@ public: /// (1) to filter trivial false positives or (2) to provide more context so /// that non-trivial false positives can be quickly detected by the user. bool allowExtraAnalysis(StringRef PassName) const { - return ( - MF.getFunction().getContext().getRemarkStreamer() || - MF.getFunction().getContext().getDiagHandlerPtr()->isAnyRemarkEnabled( - PassName)); + return (MF.getFunction().getContext().getDiagnosticsOutputFile() || + MF.getFunction().getContext() + .getDiagHandlerPtr()->isAnyRemarkEnabled(PassName)); } /// Take a lambda that returns a remark which will be emitted. Second @@ -172,11 +171,8 @@ public: // remarks enabled. We can't currently check whether remarks are requested // for the calling pass since that requires actually building the remark. - if (MF.getFunction().getContext().getRemarkStreamer() || - MF.getFunction() - .getContext() - .getDiagHandlerPtr() - ->isAnyRemarkEnabled()) { + if (MF.getFunction().getContext().getDiagnosticsOutputFile() || + MF.getFunction().getContext().getDiagHandlerPtr()->isAnyRemarkEnabled()) { auto R = RemarkBuilder(); emit((DiagnosticInfoOptimizationBase &)R); } diff --git a/include/llvm/IR/LLVMContext.h b/include/llvm/IR/LLVMContext.h index f737801fffb..f28480ee4c6 100644 --- a/include/llvm/IR/LLVMContext.h +++ b/include/llvm/IR/LLVMContext.h @@ -35,8 +35,12 @@ template class SmallVectorImpl; class SMDiagnostic; class StringRef; class Twine; -class RemarkStreamer; -class raw_ostream; + +namespace yaml { + +class Output; + +} // end namespace yaml namespace SyncScope { @@ -242,23 +246,16 @@ public: /// included in optimization diagnostics. void setDiagnosticsHotnessThreshold(uint64_t Threshold); - /// Return the streamer used by the backend to save remark diagnostics. If it - /// does not exist, diagnostics are not saved in a file but only emitted via - /// the diagnostic handler. - RemarkStreamer *getRemarkStreamer(); - const RemarkStreamer *getRemarkStreamer() const; - - /// Set the diagnostics output used for optimization diagnostics. - /// This filename may be embedded in a section for tools to find the - /// diagnostics whenever they're needed. - /// - /// If a remark streamer is already set, it will be replaced with - /// \p RemarkStreamer. + /// Return the YAML file used by the backend to save optimization + /// diagnostics. If null, diagnostics are not saved in a file but only + /// emitted via the diagnostic handler. + yaml::Output *getDiagnosticsOutputFile(); + /// Set the diagnostics output file used for optimization diagnostics. /// - /// By default, diagnostics are not saved in a file but only emitted via the - /// diagnostic handler. Even if an output file is set, the handler is invoked - /// for each diagnostic message. - void setRemarkStreamer(std::unique_ptr RemarkStreamer); + /// By default or if invoked with null, diagnostics are not saved in a file + /// but only emitted via the diagnostic handler. Even if an output file is + /// set, the handler is invoked for each diagnostic message. + void setDiagnosticsOutputFile(std::unique_ptr F); /// Get the prefix that should be printed in front of a diagnostic of /// the given \p Severity diff --git a/include/llvm/IR/RemarkStreamer.h b/include/llvm/IR/RemarkStreamer.h deleted file mode 100644 index 38baa2b3b4b..00000000000 --- a/include/llvm/IR/RemarkStreamer.h +++ /dev/null @@ -1,44 +0,0 @@ -//===- llvm/IR/RemarkStreamer.h - Remark Streamer ---------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file declares the main interface for outputting remarks. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_IR_REMARKSTREAMER_H -#define LLVM_IR_REMARKSTREAMER_H - -#include "llvm/IR/DiagnosticInfo.h" -#include "llvm/Support/YAMLTraits.h" -#include "llvm/Support/raw_ostream.h" -#include -#include - -namespace llvm { -/// Streamer for remarks. -class RemarkStreamer { - /// The filename that the remark diagnostics are emitted to. - const std::string Filename; - /// The open raw_ostream that the remark diagnostics are emitted to. - raw_ostream &OS; - - /// The YAML streamer. - yaml::Output YAMLOutput; - -public: - RemarkStreamer(StringRef Filename, raw_ostream& OS); - /// Return the filename that the remark diagnostics are emitted to. - StringRef getFilename() const { return Filename; } - /// Return stream that the remark diagnostics are emitted to. - raw_ostream &getStream() { return OS; } - /// Emit a diagnostic through the streamer. - void emit(const DiagnosticInfoOptimizationBase &Diag); -}; -} // end namespace llvm - -#endif // LLVM_IR_REMARKSTREAMER_H diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 7d95c4d7be7..5319519ddc0 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -78,7 +78,6 @@ #include "llvm/IR/Metadata.h" #include "llvm/IR/Module.h" #include "llvm/IR/Operator.h" -#include "llvm/IR/RemarkStreamer.h" #include "llvm/IR/Type.h" #include "llvm/IR/Value.h" #include "llvm/MC/MCAsmInfo.h" diff --git a/lib/IR/CMakeLists.txt b/lib/IR/CMakeLists.txt index b1293194800..2ea01b8a767 100644 --- a/lib/IR/CMakeLists.txt +++ b/lib/IR/CMakeLists.txt @@ -46,7 +46,6 @@ add_llvm_library(LLVMCore PassManager.cpp PassRegistry.cpp PassTimingInfo.cpp - RemarkStreamer.cpp SafepointIRVerifier.cpp ProfileSummary.cpp Statepoint.cpp diff --git a/lib/IR/DiagnosticInfo.cpp b/lib/IR/DiagnosticInfo.cpp index 020305d76cb..14bee35dc29 100644 --- a/lib/IR/DiagnosticInfo.cpp +++ b/lib/IR/DiagnosticInfo.cpp @@ -27,7 +27,6 @@ #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Metadata.h" #include "llvm/IR/Module.h" -#include "llvm/IR/RemarkStreamer.h" #include "llvm/IR/Type.h" #include "llvm/IR/Value.h" #include "llvm/Support/Casting.h" diff --git a/lib/IR/LLVMContext.cpp b/lib/IR/LLVMContext.cpp index 75d0218bcc8..1cea21461f4 100644 --- a/lib/IR/LLVMContext.cpp +++ b/lib/IR/LLVMContext.cpp @@ -21,7 +21,6 @@ #include "llvm/IR/DiagnosticPrinter.h" #include "llvm/IR/Metadata.h" #include "llvm/IR/Module.h" -#include "llvm/IR/RemarkStreamer.h" #include "llvm/Support/Casting.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" @@ -161,15 +160,12 @@ uint64_t LLVMContext::getDiagnosticsHotnessThreshold() const { return pImpl->DiagnosticsHotnessThreshold; } -RemarkStreamer *LLVMContext::getRemarkStreamer() { - return pImpl->RemarkStreamer.get(); +yaml::Output *LLVMContext::getDiagnosticsOutputFile() { + return pImpl->DiagnosticsOutputFile.get(); } -const RemarkStreamer *LLVMContext::getRemarkStreamer() const { - return const_cast(this)->getRemarkStreamer(); -} -void LLVMContext::setRemarkStreamer( - std::unique_ptr RemarkStreamer) { - pImpl->RemarkStreamer = std::move(RemarkStreamer); + +void LLVMContext::setDiagnosticsOutputFile(std::unique_ptr F) { + pImpl->DiagnosticsOutputFile = std::move(F); } DiagnosticHandler::DiagnosticHandlerTy @@ -232,10 +228,14 @@ LLVMContext::getDiagnosticMessagePrefix(DiagnosticSeverity Severity) { } void LLVMContext::diagnose(const DiagnosticInfo &DI) { - if (auto *OptDiagBase = dyn_cast(&DI)) - if (RemarkStreamer *RS = getRemarkStreamer()) - RS->emit(*OptDiagBase); - + if (auto *OptDiagBase = dyn_cast(&DI)) { + yaml::Output *Out = getDiagnosticsOutputFile(); + if (Out) { + // For remarks the << operator takes a reference to a pointer. + auto *P = const_cast(OptDiagBase); + *Out << P; + } + } // If there is a report handler, use it. if (pImpl->DiagHandler && (!pImpl->RespectDiagnosticFilters || isDiagnosticEnabled(DI)) && diff --git a/lib/IR/LLVMContextImpl.h b/lib/IR/LLVMContextImpl.h index b8974ef9767..f7038ace035 100644 --- a/lib/IR/LLVMContextImpl.h +++ b/lib/IR/LLVMContextImpl.h @@ -37,7 +37,6 @@ #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Metadata.h" -#include "llvm/IR/RemarkStreamer.h" #include "llvm/IR/TrackingMDRef.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" @@ -1227,7 +1226,7 @@ public: bool RespectDiagnosticFilters = false; bool DiagnosticsHotnessRequested = false; uint64_t DiagnosticsHotnessThreshold = 0; - std::unique_ptr RemarkStreamer; + std::unique_ptr DiagnosticsOutputFile; LLVMContext::YieldCallbackTy YieldCallback = nullptr; void *YieldOpaqueHandle = nullptr; diff --git a/lib/IR/RemarkStreamer.cpp b/lib/IR/RemarkStreamer.cpp deleted file mode 100644 index 0b983408e46..00000000000 --- a/lib/IR/RemarkStreamer.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//===- llvm/IR/RemarkStreamer.cpp - Remark Streamer -*- C++ -------------*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file contains the implementation of the remark outputting as part of -// LLVMContext. -// -//===----------------------------------------------------------------------===// - -#include "llvm/IR/RemarkStreamer.h" - -using namespace llvm; - -RemarkStreamer::RemarkStreamer(StringRef Filename, raw_ostream &OS) - : Filename(Filename), OS(OS), - YAMLOutput(OS, reinterpret_cast(this)) { - assert(!Filename.empty() && "This needs to be a real filename."); -} - -void RemarkStreamer::emit(const DiagnosticInfoOptimizationBase &Diag) { - DiagnosticInfoOptimizationBase *DiagPtr = - const_cast(&Diag); - YAMLOutput << DiagPtr; -} diff --git a/lib/LTO/LTO.cpp b/lib/LTO/LTO.cpp index f6e34c5d061..8e0d532fa7e 100644 --- a/lib/LTO/LTO.cpp +++ b/lib/LTO/LTO.cpp @@ -24,7 +24,6 @@ #include "llvm/IR/LegacyPassManager.h" #include "llvm/IR/Mangler.h" #include "llvm/IR/Metadata.h" -#include "llvm/IR/RemarkStreamer.h" #include "llvm/LTO/LTOBackend.h" #include "llvm/LTO/SummaryBasedOptimizations.h" #include "llvm/Linker/IRMover.h" @@ -1327,8 +1326,8 @@ lto::setupOptimizationRemarks(LLVMContext &Context, llvm::make_unique(Filename, EC, sys::fs::F_None); if (EC) return errorCodeToError(EC); - Context.setRemarkStreamer( - llvm::make_unique(Filename, DiagnosticFile->os())); + Context.setDiagnosticsOutputFile( + llvm::make_unique(DiagnosticFile->os())); DiagnosticFile->keep(); return std::move(DiagnosticFile); } diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index a566d15cd81..ae51eef9e9c 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -31,7 +31,6 @@ #include "llvm/IR/LLVMContext.h" #include "llvm/IR/LegacyPassManager.h" #include "llvm/IR/Module.h" -#include "llvm/IR/RemarkStreamer.h" #include "llvm/IR/Verifier.h" #include "llvm/IRReader/IRReader.h" #include "llvm/MC/SubtargetFeature.h" @@ -334,8 +333,8 @@ int main(int argc, char **argv) { WithColor::error(errs(), argv[0]) << EC.message() << '\n'; return 1; } - Context.setRemarkStreamer( - llvm::make_unique(RemarksFilename, YamlFile->os())); + Context.setDiagnosticsOutputFile( + llvm::make_unique(YamlFile->os())); } if (InputLanguage != "" && InputLanguage != "ir" && diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index 06745b0cca0..2d80b479735 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -33,7 +33,6 @@ #include "llvm/IR/LegacyPassManager.h" #include "llvm/IR/LegacyPassNameParser.h" #include "llvm/IR/Module.h" -#include "llvm/IR/RemarkStreamer.h" #include "llvm/IR/Verifier.h" #include "llvm/IRReader/IRReader.h" #include "llvm/InitializePasses.h" @@ -564,8 +563,8 @@ int main(int argc, char **argv) { errs() << EC.message() << '\n'; return 1; } - Context.setRemarkStreamer(llvm::make_unique( - RemarksFilename, OptRemarkFile->os())); + Context.setDiagnosticsOutputFile( + llvm::make_unique(OptRemarkFile->os())); } // Load the input module...