[llvm] r313387 - This reverts r313381
Chad Rosier via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 15 12:56:08 PDT 2017
Please make sure to include the reason for revert in the commit message.
On 9/15/2017 3:53 PM, Vivek Pandya via llvm-commits wrote:
> Author: vivekvpandya
> Date: Fri Sep 15 12:53:54 2017
> New Revision: 313387
>
> URL: http://llvm.org/viewvc/llvm-project?rev=313387&view=rev
> Log:
> This reverts r313381
>
> Removed:
> llvm/trunk/include/llvm/IR/DiagnosticHandler.h
> llvm/trunk/lib/IR/DiagnosticHandler.cpp
> Modified:
> llvm/trunk/include/llvm/Analysis/OptimizationDiagnosticInfo.h
> llvm/trunk/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
> llvm/trunk/include/llvm/IR/DiagnosticInfo.h
> llvm/trunk/include/llvm/IR/LLVMContext.h
> llvm/trunk/include/llvm/LTO/Config.h
> llvm/trunk/include/llvm/LTO/legacy/LTOCodeGenerator.h
> llvm/trunk/lib/IR/CMakeLists.txt
> llvm/trunk/lib/IR/Core.cpp
> llvm/trunk/lib/IR/DiagnosticInfo.cpp
> llvm/trunk/lib/IR/LLVMContext.cpp
> llvm/trunk/lib/IR/LLVMContextImpl.cpp
> llvm/trunk/lib/IR/LLVMContextImpl.h
> llvm/trunk/lib/LTO/LTOCodeGenerator.cpp
> llvm/trunk/lib/Transforms/Scalar/GVN.cpp
> llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
> llvm/trunk/test/Transforms/GVN/opt-remarks.ll
> llvm/trunk/tools/llc/llc.cpp
> llvm/trunk/tools/llvm-dis/llvm-dis.cpp
> llvm/trunk/tools/llvm-link/llvm-link.cpp
> llvm/trunk/tools/llvm-lto/llvm-lto.cpp
> llvm/trunk/tools/lto/lto.cpp
>
> Modified: llvm/trunk/include/llvm/Analysis/OptimizationDiagnosticInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/OptimizationDiagnosticInfo.h?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/OptimizationDiagnosticInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/OptimizationDiagnosticInfo.h Fri Sep 15 12:53:54 2017
> @@ -78,9 +78,10 @@ public:
> /// use the extra analysis (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 (F->getContext().getDiagnosticsOutputFile() ||
> - F->getContext().getDiagHandlerPtr()->isAnyRemarkEnabled(PassName));
> + bool allowExtraAnalysis() const {
> + // For now, only allow this with -fsave-optimization-record since the -Rpass
> + // options are handled in the front-end.
> + return F->getContext().getDiagnosticsOutputFile();
> }
>
> private:
>
> Modified: llvm/trunk/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h Fri Sep 15 12:53:54 2017
> @@ -73,9 +73,7 @@ public:
>
> /// \see DiagnosticInfoOptimizationBase::isEnabled.
> bool isEnabled() const override {
> - const Function &Fn = getFunction();
> - LLVMContext &Ctx = Fn.getContext();
> - return Ctx.getDiagHandlerPtr()->isPassedOptRemarkEnabled(getPassName());
> + return OptimizationRemark::isEnabled(getPassName());
> }
> };
>
> @@ -99,9 +97,7 @@ public:
>
> /// \see DiagnosticInfoOptimizationBase::isEnabled.
> bool isEnabled() const override {
> - const Function &Fn = getFunction();
> - LLVMContext &Ctx = Fn.getContext();
> - return Ctx.getDiagHandlerPtr()->isMissedOptRemarkEnabled(getPassName());
> + return OptimizationRemarkMissed::isEnabled(getPassName());
> }
> };
>
> @@ -125,9 +121,7 @@ public:
>
> /// \see DiagnosticInfoOptimizationBase::isEnabled.
> bool isEnabled() const override {
> - const Function &Fn = getFunction();
> - LLVMContext &Ctx = Fn.getContext();
> - return Ctx.getDiagHandlerPtr()->isAnalysisRemarkEnabled(getPassName());
> + return OptimizationRemarkAnalysis::isEnabled(getPassName());
> }
> };
>
> @@ -158,10 +152,10 @@ public:
> /// that are normally too noisy. In this mode, we can use the extra analysis
> /// (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().getDiagnosticsOutputFile() ||
> - MF.getFunction()->getContext()
> - .getDiagHandlerPtr()->isAnyRemarkEnabled(PassName));
> + bool allowExtraAnalysis() const {
> + // For now, only allow this with -fsave-optimization-record since the -Rpass
> + // options are handled in the front-end.
> + return MF.getFunction()->getContext().getDiagnosticsOutputFile();
> }
>
> private:
>
> Removed: llvm/trunk/include/llvm/IR/DiagnosticHandler.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DiagnosticHandler.h?rev=313386&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/DiagnosticHandler.h (original)
> +++ llvm/trunk/include/llvm/IR/DiagnosticHandler.h (removed)
> @@ -1,67 +0,0 @@
> -//===- DiagnosticHandler.h - DiagnosticHandler class for LLVM -*- C++ ---*-===//
> -//
> -// The LLVM Compiler Infrastructure
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
> -//===----------------------------------------------------------------------===//
> -// Base DiagnosticHandler class declaration. Derive from this class to provide
> -// custom diagnostic reporting.
> -//===----------------------------------------------------------------------===//
> -
> -#include "llvm/ADT/StringRef.h"
> -
> -namespace llvm {
> -class DiagnosticInfo;
> -
> -/// \brief This is the base class for diagnostic handling in LLVM.
> -/// The handleDiagnostics method must be overriden by the subclasses to handle
> -/// diagnostic. The *RemarkEnabled methods can be overriden to control
> -/// which remarks are enabled.
> -struct DiagnosticHandler {
> - void *DiagnosticContext = nullptr;
> - DiagnosticHandler(void *DiagContext = nullptr)
> - : DiagnosticContext(DiagContext) {}
> - virtual ~DiagnosticHandler() = default;
> -
> - using DiagnosticHandlerTy = void (*)(const DiagnosticInfo &DI, void *Context);
> -
> - /// DiagHandlerCallback is settable from the C API and base implementation
> - /// of DiagnosticHandler will call it from handleDiagnostics(). Any derived
> - /// class of DiagnosticHandler should not use callback but
> - /// implement handleDiagnostics().
> - DiagnosticHandlerTy DiagHandlerCallback = nullptr;
> -
> - /// Override handleDiagnostics to provide custom implementation.
> - /// Return true if it handles diagnostics reporting properly otherwise
> - /// return false to make LLVMContext::diagnose() to print the message
> - /// with a prefix based on the severity.
> - virtual bool handleDiagnostics(const DiagnosticInfo &DI) {
> - if (DiagHandlerCallback) {
> - DiagHandlerCallback(DI, DiagnosticContext);
> - return true;
> - }
> - return false;
> - }
> -
> - /// Return true if analysis remarks are enabled, override
> - /// to provide different implementation.
> - virtual bool isAnalysisRemarkEnabled(StringRef PassName) const;
> -
> - /// Return true if missed optimization remarks are enabled, override
> - /// to provide different implementation.
> - virtual bool isMissedOptRemarkEnabled(StringRef PassName) const;
> -
> - /// Return true if passed optimization remarks are enabled, override
> - /// to provide different implementation.
> - virtual bool isPassedOptRemarkEnabled(StringRef PassName) const;
> -
> - /// Return true if any type of remarks are enabled.
> - bool isAnyRemarkEnabled(StringRef PassName) const {
> - return (isMissedOptRemarkEnabled(PassName) ||
> - isPassedOptRemarkEnabled(PassName) ||
> - isAnalysisRemarkEnabled(PassName));
> - }
> -};
> -}
>
> Modified: llvm/trunk/include/llvm/IR/DiagnosticInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DiagnosticInfo.h?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/DiagnosticInfo.h (original)
> +++ llvm/trunk/include/llvm/IR/DiagnosticInfo.h Fri Sep 15 12:53:54 2017
> @@ -604,8 +604,10 @@ public:
> return DI->getKind() == DK_OptimizationRemark;
> }
>
> + static bool isEnabled(StringRef PassName);
> +
> /// \see DiagnosticInfoOptimizationBase::isEnabled.
> - bool isEnabled() const override;
> + bool isEnabled() const override { return isEnabled(getPassName()); }
>
> private:
> /// This is deprecated now and only used by the function API below.
> @@ -645,8 +647,10 @@ public:
> return DI->getKind() == DK_OptimizationRemarkMissed;
> }
>
> + static bool isEnabled(StringRef PassName);
> +
> /// \see DiagnosticInfoOptimizationBase::isEnabled.
> - bool isEnabled() const override;
> + bool isEnabled() const override { return isEnabled(getPassName()); }
>
> private:
> /// This is deprecated now and only used by the function API below.
> @@ -697,8 +701,12 @@ public:
> return DI->getKind() == DK_OptimizationRemarkAnalysis;
> }
>
> + static bool isEnabled(StringRef PassName);
> +
> /// \see DiagnosticInfoOptimizationBase::isEnabled.
> - bool isEnabled() const override;
> + bool isEnabled() const override {
> + return shouldAlwaysPrint() || isEnabled(getPassName());
> + }
>
> static const char *AlwaysPrint;
>
>
> Modified: llvm/trunk/include/llvm/IR/LLVMContext.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/LLVMContext.h?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/LLVMContext.h (original)
> +++ llvm/trunk/include/llvm/IR/LLVMContext.h Fri Sep 15 12:53:54 2017
> @@ -16,7 +16,6 @@
> #define LLVM_IR_LLVMCONTEXT_H
>
> #include "llvm-c/Types.h"
> -#include "llvm/IR/DiagnosticHandler.h"
> #include "llvm/Support/CBindingWrapping.h"
> #include "llvm/Support/Options.h"
> #include <cstdint>
> @@ -168,6 +167,11 @@ public:
> using InlineAsmDiagHandlerTy = void (*)(const SMDiagnostic&, void *Context,
> unsigned LocCookie);
>
> + /// Defines the type of a diagnostic handler.
> + /// \see LLVMContext::setDiagnosticHandler.
> + /// \see LLVMContext::diagnose.
> + using DiagnosticHandlerTy = void (*)(const DiagnosticInfo &DI, void *Context);
> +
> /// Defines the type of a yield callback.
> /// \see LLVMContext::setYieldCallback.
> using YieldCallbackTy = void (*)(LLVMContext *Context, void *OpaqueHandle);
> @@ -190,43 +194,26 @@ public:
> /// setInlineAsmDiagnosticHandler.
> void *getInlineAsmDiagnosticContext() const;
>
> - /// setDiagnosticHandlerCallBack - This method sets a handler call back
> - /// that is invoked when the backend needs to report anything to the user.
> - /// The first argument is a function pointer and the second is a context pointer
> - /// that gets passed into the DiagHandler. The third argument should be set to
> + /// setDiagnosticHandler - This method sets a handler that is invoked
> + /// when the backend needs to report anything to the user. The first
> + /// argument is a function pointer and the second is a context pointer that
> + /// gets passed into the DiagHandler. The third argument should be set to
> /// true if the handler only expects enabled diagnostics.
> ///
> /// LLVMContext doesn't take ownership or interpret either of these
> /// pointers.
> - void setDiagnosticHandlerCallBack(
> - DiagnosticHandler::DiagnosticHandlerTy DiagHandler,
> - void *DiagContext = nullptr, bool RespectFilters = false);
> -
> - /// setDiagnosticHandler - This method sets unique_ptr to object of DiagnosticHandler
> - /// to provide custom diagnostic handling. The first argument is unique_ptr of object
> - /// of type DiagnosticHandler or a derived of that. The third argument should be
> - /// set to true if the handler only expects enabled diagnostics.
> - ///
> - /// Ownership of this pointer is moved to LLVMContextImpl.
> - void setDiagnosticHandler(std::unique_ptr<DiagnosticHandler> &&DH,
> + void setDiagnosticHandler(DiagnosticHandlerTy DiagHandler,
> + void *DiagContext = nullptr,
> bool RespectFilters = false);
>
> - /// getDiagnosticHandlerCallBack - Return the diagnostic handler call back set by
> - /// setDiagnosticHandlerCallBack.
> - DiagnosticHandler::DiagnosticHandlerTy getDiagnosticHandlerCallBack() const;
> + /// getDiagnosticHandler - Return the diagnostic handler set by
> + /// setDiagnosticHandler.
> + DiagnosticHandlerTy getDiagnosticHandler() const;
>
> /// getDiagnosticContext - Return the diagnostic context set by
> /// setDiagnosticContext.
> void *getDiagnosticContext() const;
>
> - /// getDiagHandlerPtr - Returns const raw pointer of DiagnosticHandler set by
> - /// setDiagnosticHandler.
> - const DiagnosticHandler *getDiagHandlerPtr() const;
> -
> - /// getDiagnosticHandler - transfers owenership of DiagnosticHandler unique_ptr
> - /// to caller.
> - std::unique_ptr<DiagnosticHandler> getDiagnosticHandler();
> -
> /// \brief Return if a code hotness metric should be included in optimization
> /// diagnostics.
> bool getDiagnosticsHotnessRequested() const;
>
> Modified: llvm/trunk/include/llvm/LTO/Config.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/Config.h?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/LTO/Config.h (original)
> +++ llvm/trunk/include/llvm/LTO/Config.h Fri Sep 15 12:53:54 2017
> @@ -171,27 +171,20 @@ struct Config {
> bool UseInputModulePath = false);
> };
>
> -struct LTOLLVMDiagnosticHandler : public DiagnosticHandler {
> - DiagnosticHandlerFunction *Fn;
> - LTOLLVMDiagnosticHandler(DiagnosticHandlerFunction *DiagHandlerFn)
> - : Fn(DiagHandlerFn) {}
> - bool handleDiagnostics(const DiagnosticInfo &DI) override {
> - (*Fn)(DI);
> - return true;
> - }
> -};
> /// A derived class of LLVMContext that initializes itself according to a given
> /// Config object. The purpose of this class is to tie ownership of the
> /// diagnostic handler to the context, as opposed to the Config object (which
> /// may be ephemeral).
> -// FIXME: This should not be required as diagnostic handler is not callback.
> struct LTOLLVMContext : LLVMContext {
> + static void funcDiagHandler(const DiagnosticInfo &DI, void *Context) {
> + auto *Fn = static_cast<DiagnosticHandlerFunction *>(Context);
> + (*Fn)(DI);
> + }
>
> LTOLLVMContext(const Config &C) : DiagHandler(C.DiagHandler) {
> setDiscardValueNames(C.ShouldDiscardValueNames);
> enableDebugTypeODRUniquing();
> - setDiagnosticHandler(
> - llvm::make_unique<LTOLLVMDiagnosticHandler>(&DiagHandler), true);
> + setDiagnosticHandler(funcDiagHandler, &DiagHandler, true);
> }
> DiagnosticHandlerFunction DiagHandler;
> };
>
> Modified: llvm/trunk/include/llvm/LTO/legacy/LTOCodeGenerator.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/legacy/LTOCodeGenerator.h?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/LTO/legacy/LTOCodeGenerator.h (original)
> +++ llvm/trunk/include/llvm/LTO/legacy/LTOCodeGenerator.h Fri Sep 15 12:53:54 2017
> @@ -184,7 +184,6 @@ struct LTOCodeGenerator {
> LLVMContext &getContext() { return Context; }
>
> void resetMergedModule() { MergedModule.reset(); }
> - void DiagnosticHandler(const DiagnosticInfo &DI);
>
> private:
> void initializeLTOPasses();
> @@ -205,6 +204,10 @@ private:
> bool determineTarget();
> std::unique_ptr<TargetMachine> createTargetMachine();
>
> + static void DiagnosticHandler(const DiagnosticInfo &DI, void *Context);
> +
> + void DiagnosticHandler2(const DiagnosticInfo &DI);
> +
> void emitError(const std::string &ErrMsg);
> void emitWarning(const std::string &ErrMsg);
>
>
> Modified: llvm/trunk/lib/IR/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/CMakeLists.txt?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/CMakeLists.txt (original)
> +++ llvm/trunk/lib/IR/CMakeLists.txt Fri Sep 15 12:53:54 2017
> @@ -17,7 +17,6 @@ add_llvm_library(LLVMCore
> DebugInfo.cpp
> DebugInfoMetadata.cpp
> DebugLoc.cpp
> - DiagnosticHandler.cpp
> DiagnosticInfo.cpp
> DiagnosticPrinter.cpp
> Dominators.cpp
>
> Modified: llvm/trunk/lib/IR/Core.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Core.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/Core.cpp (original)
> +++ llvm/trunk/lib/IR/Core.cpp Fri Sep 15 12:53:54 2017
> @@ -85,15 +85,15 @@ LLVMContextRef LLVMGetGlobalContext() {
> void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
> LLVMDiagnosticHandler Handler,
> void *DiagnosticContext) {
> - unwrap(C)->setDiagnosticHandlerCallBack(
> - LLVM_EXTENSION reinterpret_cast<DiagnosticHandler::DiagnosticHandlerTy>(
> + unwrap(C)->setDiagnosticHandler(
> + LLVM_EXTENSION reinterpret_cast<LLVMContext::DiagnosticHandlerTy>(
> Handler),
> DiagnosticContext);
> }
>
> LLVMDiagnosticHandler LLVMContextGetDiagnosticHandler(LLVMContextRef C) {
> return LLVM_EXTENSION reinterpret_cast<LLVMDiagnosticHandler>(
> - unwrap(C)->getDiagnosticHandlerCallBack());
> + unwrap(C)->getDiagnosticHandler());
> }
>
> void *LLVMContextGetDiagnosticContext(LLVMContextRef C) {
>
> Removed: llvm/trunk/lib/IR/DiagnosticHandler.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DiagnosticHandler.cpp?rev=313386&view=auto
> ==============================================================================
> --- llvm/trunk/lib/IR/DiagnosticHandler.cpp (original)
> +++ llvm/trunk/lib/IR/DiagnosticHandler.cpp (removed)
> @@ -1,86 +0,0 @@
> -//===- DiagnosticHandler.h - DiagnosticHandler class for LLVM -------------===//
> -//
> -// The LLVM Compiler Infrastructure
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
> -//===----------------------------------------------------------------------===//
> -//
> -//
> -//===----------------------------------------------------------------------===//
> -#include "llvm/IR/DiagnosticHandler.h"
> -#include "llvm/Support/CommandLine.h"
> -#include "llvm/Support/RegEx.h"
> -
> -using namespace llvm;
> -
> -namespace {
> -
> -/// \brief Regular expression corresponding to the value given in one of the
> -/// -pass-remarks* command line flags. Passes whose name matches this regexp
> -/// will emit a diagnostic when calling the associated diagnostic function
> -/// (emitOptimizationRemark, emitOptimizationRemarkMissed or
> -/// emitOptimizationRemarkAnalysis).
> -struct PassRemarksOpt {
> - std::shared_ptr<Regex> Pattern;
> -
> - void operator=(const std::string &Val) {
> - // Create a regexp object to match pass names for emitOptimizationRemark.
> - if (!Val.empty()) {
> - Pattern = std::make_shared<Regex>(Val);
> - std::string RegexError;
> - if (!Pattern->isValid(RegexError))
> - report_fatal_error("Invalid regular expression '" + Val +
> - "' in -pass-remarks: " + RegexError,
> - false);
> - }
> - }
> -};
> -
> -static PassRemarksOpt PassRemarksPassedOptLoc;
> -static PassRemarksOpt PassRemarksMissedOptLoc;
> -static PassRemarksOpt PassRemarksAnalysisOptLoc;
> -
> -// -pass-remarks
> -// Command line flag to enable emitOptimizationRemark()
> -static cl::opt<PassRemarksOpt, true, cl::parser<std::string>> PassRemarks(
> - "pass-remarks", cl::value_desc("pattern"),
> - cl::desc("Enable optimization remarks from passes whose name match "
> - "the given regular expression"),
> - cl::Hidden, cl::location(PassRemarksPassedOptLoc), cl::ValueRequired,
> - cl::ZeroOrMore);
> -
> -// -pass-remarks-missed
> -// Command line flag to enable emitOptimizationRemarkMissed()
> -static cl::opt<PassRemarksOpt, true, cl::parser<std::string>> PassRemarksMissed(
> - "pass-remarks-missed", cl::value_desc("pattern"),
> - cl::desc("Enable missed optimization remarks from passes whose name match "
> - "the given regular expression"),
> - cl::Hidden, cl::location(PassRemarksMissedOptLoc), cl::ValueRequired,
> - cl::ZeroOrMore);
> -
> -// -pass-remarks-analysis
> -// Command line flag to enable emitOptimizationRemarkAnalysis()
> -static cl::opt<PassRemarksOpt, true, cl::parser<std::string>>
> - PassRemarksAnalysis(
> - "pass-remarks-analysis", cl::value_desc("pattern"),
> - cl::desc(
> - "Enable optimization analysis remarks from passes whose name match "
> - "the given regular expression"),
> - cl::Hidden, cl::location(PassRemarksAnalysisOptLoc), cl::ValueRequired,
> - cl::ZeroOrMore);
> -}
> -
> -bool DiagnosticHandler::isAnalysisRemarkEnabled(StringRef PassName) const {
> - return (PassRemarksAnalysisOptLoc.Pattern &&
> - PassRemarksAnalysisOptLoc.Pattern->match(PassName));
> -}
> -bool DiagnosticHandler::isMissedOptRemarkEnabled(StringRef PassName) const {
> - return (PassRemarksMissedOptLoc.Pattern &&
> - PassRemarksMissedOptLoc.Pattern->match(PassName));
> -}
> -bool DiagnosticHandler::isPassedOptRemarkEnabled(StringRef PassName) const {
> - return (PassRemarksPassedOptLoc.Pattern &&
> - PassRemarksPassedOptLoc.Pattern->match(PassName));
> -}
>
> Modified: llvm/trunk/lib/IR/DiagnosticInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DiagnosticInfo.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/DiagnosticInfo.cpp (original)
> +++ llvm/trunk/lib/IR/DiagnosticInfo.cpp Fri Sep 15 12:53:54 2017
> @@ -13,7 +13,6 @@
> //===----------------------------------------------------------------------===//
>
> #include "llvm/IR/DiagnosticInfo.h"
> -#include "LLVMContextImpl.h"
> #include "llvm/ADT/StringExtras.h"
> #include "llvm/ADT/Twine.h"
> #include "llvm/ADT/iterator_range.h"
> @@ -42,6 +41,61 @@
>
> using namespace llvm;
>
> +namespace {
> +
> +/// \brief Regular expression corresponding to the value given in one of the
> +/// -pass-remarks* command line flags. Passes whose name matches this regexp
> +/// will emit a diagnostic via ORE->emit(...);
> +struct PassRemarksOpt {
> + std::shared_ptr<Regex> Pattern;
> +
> + void operator=(const std::string &Val) {
> + if (!Val.empty()) {
> + Pattern = std::make_shared<Regex>(Val);
> + std::string RegexError;
> + if (!Pattern->isValid(RegexError))
> + report_fatal_error("Invalid regular expression '" + Val +
> + "' in -pass-remarks: " + RegexError,
> + false);
> + }
> + }
> +};
> +
> +} // end anonymous namespace
> +
> +static PassRemarksOpt PassRemarksOptLoc;
> +static PassRemarksOpt PassRemarksMissedOptLoc;
> +static PassRemarksOpt PassRemarksAnalysisOptLoc;
> +
> +// -pass-remarks
> +// Command line flag to enable optimization remarks
> +static cl::opt<PassRemarksOpt, true, cl::parser<std::string>>
> +PassRemarks("pass-remarks", cl::value_desc("pattern"),
> + cl::desc("Enable optimization remarks from passes whose name match "
> + "the given regular expression"),
> + cl::Hidden, cl::location(PassRemarksOptLoc), cl::ValueRequired,
> + cl::ZeroOrMore);
> +
> +// -pass-remarks-missed
> +// Command line flag to enable missed optimization remarks
> +static cl::opt<PassRemarksOpt, true, cl::parser<std::string>> PassRemarksMissed(
> + "pass-remarks-missed", cl::value_desc("pattern"),
> + cl::desc("Enable missed optimization remarks from passes whose name match "
> + "the given regular expression"),
> + cl::Hidden, cl::location(PassRemarksMissedOptLoc), cl::ValueRequired,
> + cl::ZeroOrMore);
> +
> +// -pass-remarks-analysis
> +// Command line flag to enable optimization analysis remarks
> +static cl::opt<PassRemarksOpt, true, cl::parser<std::string>>
> +PassRemarksAnalysis(
> + "pass-remarks-analysis", cl::value_desc("pattern"),
> + cl::desc(
> + "Enable optimization analysis remarks from passes whose name match "
> + "the given regular expression"),
> + cl::Hidden, cl::location(PassRemarksAnalysisOptLoc), cl::ValueRequired,
> + cl::ZeroOrMore);
> +
> int llvm::getNextAvailablePluginDiagnosticKind() {
> static std::atomic<int> PluginKindID(DK_FirstPluginKind);
> return ++PluginKindID;
> @@ -229,10 +283,9 @@ OptimizationRemark::OptimizationRemark(c
> RemarkName, *Func, Func->getSubprogram(),
> &getFirstFunctionBlock(Func)) {}
>
> -bool OptimizationRemark::isEnabled() const {
> - const Function &Fn = getFunction();
> - LLVMContext &Ctx = Fn.getContext();
> - return Ctx.getDiagHandlerPtr()->isPassedOptRemarkEnabled(getPassName());
> +bool OptimizationRemark::isEnabled(StringRef PassName) {
> + return PassRemarksOptLoc.Pattern &&
> + PassRemarksOptLoc.Pattern->match(PassName);
> }
>
> OptimizationRemarkMissed::OptimizationRemarkMissed(
> @@ -250,10 +303,9 @@ OptimizationRemarkMissed::OptimizationRe
> *Inst->getParent()->getParent(),
> Inst->getDebugLoc(), Inst->getParent()) {}
>
> -bool OptimizationRemarkMissed::isEnabled() const {
> - const Function &Fn = getFunction();
> - LLVMContext &Ctx = Fn.getContext();
> - return Ctx.getDiagHandlerPtr()->isMissedOptRemarkEnabled(getPassName());
> +bool OptimizationRemarkMissed::isEnabled(StringRef PassName) {
> + return PassRemarksMissedOptLoc.Pattern &&
> + PassRemarksMissedOptLoc.Pattern->match(PassName);
> }
>
> OptimizationRemarkAnalysis::OptimizationRemarkAnalysis(
> @@ -278,11 +330,9 @@ OptimizationRemarkAnalysis::Optimization
> *cast<BasicBlock>(CodeRegion)->getParent(),
> Loc, CodeRegion) {}
>
> -bool OptimizationRemarkAnalysis::isEnabled() const {
> - const Function &Fn = getFunction();
> - LLVMContext &Ctx = Fn.getContext();
> - return Ctx.getDiagHandlerPtr()->isAnalysisRemarkEnabled(getPassName()) ||
> - shouldAlwaysPrint();
> +bool OptimizationRemarkAnalysis::isEnabled(StringRef PassName) {
> + return PassRemarksAnalysisOptLoc.Pattern &&
> + PassRemarksAnalysisOptLoc.Pattern->match(PassName);
> }
>
> void DiagnosticInfoMIRParser::print(DiagnosticPrinter &DP) const {
>
> Modified: llvm/trunk/lib/IR/LLVMContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMContext.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/LLVMContext.cpp (original)
> +++ llvm/trunk/lib/IR/LLVMContext.cpp Fri Sep 15 12:53:54 2017
> @@ -129,17 +129,11 @@ void *LLVMContext::getInlineAsmDiagnosti
> return pImpl->InlineAsmDiagContext;
> }
>
> -void LLVMContext::setDiagnosticHandlerCallBack(
> - DiagnosticHandler::DiagnosticHandlerTy DiagnosticHandler,
> - void *DiagnosticContext, bool RespectFilters) {
> - pImpl->DiagHandler->DiagHandlerCallback = DiagnosticHandler;
> - pImpl->DiagHandler->DiagnosticContext = DiagnosticContext;
> - pImpl->RespectDiagnosticFilters = RespectFilters;
> -}
> -
> -void LLVMContext::setDiagnosticHandler(std::unique_ptr<DiagnosticHandler> &&DH,
> - bool RespectFilters) {
> - pImpl->DiagHandler = std::move(DH);
> +void LLVMContext::setDiagnosticHandler(DiagnosticHandlerTy DiagnosticHandler,
> + void *DiagnosticContext,
> + bool RespectFilters) {
> + pImpl->DiagnosticHandler = DiagnosticHandler;
> + pImpl->DiagnosticContext = DiagnosticContext;
> pImpl->RespectDiagnosticFilters = RespectFilters;
> }
>
> @@ -165,13 +159,12 @@ void LLVMContext::setDiagnosticsOutputFi
> pImpl->DiagnosticsOutputFile = std::move(F);
> }
>
> -DiagnosticHandler::DiagnosticHandlerTy
> -LLVMContext::getDiagnosticHandlerCallBack() const {
> - return pImpl->DiagHandler->DiagHandlerCallback;
> +LLVMContext::DiagnosticHandlerTy LLVMContext::getDiagnosticHandler() const {
> + return pImpl->DiagnosticHandler;
> }
>
> void *LLVMContext::getDiagnosticContext() const {
> - return pImpl->DiagHandler->DiagnosticContext;
> + return pImpl->DiagnosticContext;
> }
>
> void LLVMContext::setYieldCallback(YieldCallbackTy Callback, void *OpaqueHandle)
> @@ -222,10 +215,11 @@ LLVMContext::getDiagnosticMessagePrefix(
>
> void LLVMContext::diagnose(const DiagnosticInfo &DI) {
> // If there is a report handler, use it.
> - if (pImpl->DiagHandler &&
> - (!pImpl->RespectDiagnosticFilters || isDiagnosticEnabled(DI)) &&
> - pImpl->DiagHandler->handleDiagnostics(DI))
> + if (pImpl->DiagnosticHandler) {
> + if (!pImpl->RespectDiagnosticFilters || isDiagnosticEnabled(DI))
> + pImpl->DiagnosticHandler(DI, pImpl->DiagnosticContext);
> return;
> + }
>
> if (!isDiagnosticEnabled(DI))
> return;
> @@ -321,11 +315,3 @@ void LLVMContext::setDiscardValueNames(b
> OptBisect &LLVMContext::getOptBisect() {
> return pImpl->getOptBisect();
> }
> -
> -const DiagnosticHandler *LLVMContext::getDiagHandlerPtr() const {
> - return pImpl->DiagHandler.get();
> -}
> -
> -std::unique_ptr<DiagnosticHandler> LLVMContext::getDiagnosticHandler() {
> - return std::move(pImpl->DiagHandler);
> -}
>
> Modified: llvm/trunk/lib/IR/LLVMContextImpl.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMContextImpl.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/LLVMContextImpl.cpp (original)
> +++ llvm/trunk/lib/IR/LLVMContextImpl.cpp Fri Sep 15 12:53:54 2017
> @@ -22,8 +22,7 @@
> using namespace llvm;
>
> LLVMContextImpl::LLVMContextImpl(LLVMContext &C)
> - : DiagHandler(llvm::make_unique<DiagnosticHandler>()),
> - VoidTy(C, Type::VoidTyID),
> + : VoidTy(C, Type::VoidTyID),
> LabelTy(C, Type::LabelTyID),
> HalfTy(C, Type::HalfTyID),
> FloatTy(C, Type::FloatTyID),
>
> Modified: llvm/trunk/lib/IR/LLVMContextImpl.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMContextImpl.h?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/LLVMContextImpl.h (original)
> +++ llvm/trunk/lib/IR/LLVMContextImpl.h Fri Sep 15 12:53:54 2017
> @@ -1168,7 +1168,8 @@ public:
> LLVMContext::InlineAsmDiagHandlerTy InlineAsmDiagHandler = nullptr;
> void *InlineAsmDiagContext = nullptr;
>
> - std::unique_ptr<DiagnosticHandler> DiagHandler;
> + LLVMContext::DiagnosticHandlerTy DiagnosticHandler = nullptr;
> + void *DiagnosticContext = nullptr;
> bool RespectDiagnosticFilters = false;
> bool DiagnosticsHotnessRequested = false;
> uint64_t DiagnosticsHotnessThreshold = 0;
>
> Modified: llvm/trunk/lib/LTO/LTOCodeGenerator.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/lib/LTO/LTOCodeGenerator.cpp (original)
> +++ llvm/trunk/lib/LTO/LTOCodeGenerator.cpp Fri Sep 15 12:53:54 2017
> @@ -622,8 +622,12 @@ void LTOCodeGenerator::parseCodeGenDebug
> }
> }
>
> +void LTOCodeGenerator::DiagnosticHandler(const DiagnosticInfo &DI,
> + void *Context) {
> + ((LTOCodeGenerator *)Context)->DiagnosticHandler2(DI);
> +}
>
> -void LTOCodeGenerator::DiagnosticHandler(const DiagnosticInfo &DI) {
> +void LTOCodeGenerator::DiagnosticHandler2(const DiagnosticInfo &DI) {
> // Map the LLVM internal diagnostic severity to the LTO diagnostic severity.
> lto_codegen_diagnostic_severity_t Severity;
> switch (DI.getSeverity()) {
> @@ -653,29 +657,17 @@ void LTOCodeGenerator::DiagnosticHandler
> (*DiagHandler)(Severity, MsgStorage.c_str(), DiagContext);
> }
>
> -namespace {
> -struct LTODiagnosticHandler : public DiagnosticHandler {
> - LTOCodeGenerator *CodeGenerator;
> - LTODiagnosticHandler(LTOCodeGenerator *CodeGenPtr)
> - : CodeGenerator(CodeGenPtr) {}
> - bool handleDiagnostics(const DiagnosticInfo &DI) override {
> - CodeGenerator->DiagnosticHandler(DI);
> - return true;
> - }
> -};
> -}
> -
> void
> LTOCodeGenerator::setDiagnosticHandler(lto_diagnostic_handler_t DiagHandler,
> void *Ctxt) {
> this->DiagHandler = DiagHandler;
> this->DiagContext = Ctxt;
> if (!DiagHandler)
> - return Context.setDiagnosticHandler(nullptr);
> + return Context.setDiagnosticHandler(nullptr, nullptr);
> // Register the LTOCodeGenerator stub in the LLVMContext to forward the
> // diagnostic to the external DiagHandler.
> - Context.setDiagnosticHandler(llvm::make_unique<LTODiagnosticHandler>(this),
> - true);
> + Context.setDiagnosticHandler(LTOCodeGenerator::DiagnosticHandler, this,
> + /* RespectFilters */ true);
> }
>
> namespace {
>
> Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Fri Sep 15 12:53:54 2017
> @@ -920,7 +920,8 @@ bool GVN::AnalyzeLoadAvailability(LoadIn
> Instruction *I = DepInfo.getInst();
> dbgs() << " is clobbered by " << *I << '\n';
> );
> - if (ORE->allowExtraAnalysis(DEBUG_TYPE))
> +
> + if (ORE->allowExtraAnalysis())
> reportMayClobberedLoad(LI, DepInfo, DT, ORE);
>
> return false;
>
> Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
> +++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Fri Sep 15 12:53:54 2017
> @@ -4957,15 +4957,12 @@ bool LoopVectorizationLegality::canVecto
> // Store the result and return it at the end instead of exiting early, in case
> // allowExtraAnalysis is used to report multiple reasons for not vectorizing.
> bool Result = true;
> -
> - bool DoExtraAnalysis = ORE->allowExtraAnalysis(DEBUG_TYPE);
> - if (DoExtraAnalysis)
> // We must have a loop in canonical form. Loops with indirectbr in them cannot
> // be canonicalized.
> if (!TheLoop->getLoopPreheader()) {
> ORE->emit(createMissedAnalysis("CFGNotUnderstood")
> << "loop control flow is not understood by vectorizer");
> - if (DoExtraAnalysis)
> + if (ORE->allowExtraAnalysis())
> Result = false;
> else
> return false;
> @@ -4978,7 +4975,7 @@ bool LoopVectorizationLegality::canVecto
> if (!TheLoop->empty()) {
> ORE->emit(createMissedAnalysis("NotInnermostLoop")
> << "loop is not the innermost loop");
> - if (DoExtraAnalysis)
> + if (ORE->allowExtraAnalysis())
> Result = false;
> else
> return false;
> @@ -4988,7 +4985,7 @@ bool LoopVectorizationLegality::canVecto
> if (TheLoop->getNumBackEdges() != 1) {
> ORE->emit(createMissedAnalysis("CFGNotUnderstood")
> << "loop control flow is not understood by vectorizer");
> - if (DoExtraAnalysis)
> + if (ORE->allowExtraAnalysis())
> Result = false;
> else
> return false;
> @@ -4998,7 +4995,7 @@ bool LoopVectorizationLegality::canVecto
> if (!TheLoop->getExitingBlock()) {
> ORE->emit(createMissedAnalysis("CFGNotUnderstood")
> << "loop control flow is not understood by vectorizer");
> - if (DoExtraAnalysis)
> + if (ORE->allowExtraAnalysis())
> Result = false;
> else
> return false;
> @@ -5010,7 +5007,7 @@ bool LoopVectorizationLegality::canVecto
> if (TheLoop->getExitingBlock() != TheLoop->getLoopLatch()) {
> ORE->emit(createMissedAnalysis("CFGNotUnderstood")
> << "loop control flow is not understood by vectorizer");
> - if (DoExtraAnalysis)
> + if (ORE->allowExtraAnalysis())
> Result = false;
> else
> return false;
> @@ -5024,7 +5021,7 @@ bool LoopVectorizationLegality::canVecto
> unsigned NumBlocks = TheLoop->getNumBlocks();
> if (NumBlocks != 1 && !canVectorizeWithIfConvert()) {
> DEBUG(dbgs() << "LV: Can't if-convert the loop.\n");
> - if (DoExtraAnalysis)
> + if (ORE->allowExtraAnalysis())
> Result = false;
> else
> return false;
> @@ -5033,7 +5030,7 @@ bool LoopVectorizationLegality::canVecto
> // Check if we can vectorize the instructions and CFG in this loop.
> if (!canVectorizeInstrs()) {
> DEBUG(dbgs() << "LV: Can't vectorize the instructions or CFG\n");
> - if (DoExtraAnalysis)
> + if (ORE->allowExtraAnalysis())
> Result = false;
> else
> return false;
> @@ -5042,7 +5039,7 @@ bool LoopVectorizationLegality::canVecto
> // Go over each instruction and look at memory deps.
> if (!canVectorizeMemory()) {
> DEBUG(dbgs() << "LV: Can't vectorize due to memory conflicts\n");
> - if (DoExtraAnalysis)
> + if (ORE->allowExtraAnalysis())
> Result = false;
> else
> return false;
> @@ -5073,7 +5070,7 @@ bool LoopVectorizationLegality::canVecto
> << "Too many SCEV assumptions need to be made and checked "
> << "at runtime");
> DEBUG(dbgs() << "LV: Too many SCEV checks needed.\n");
> - if (DoExtraAnalysis)
> + if (ORE->allowExtraAnalysis())
> Result = false;
> else
> return false;
>
> Modified: llvm/trunk/test/Transforms/GVN/opt-remarks.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/opt-remarks.ll?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/GVN/opt-remarks.ll (original)
> +++ llvm/trunk/test/Transforms/GVN/opt-remarks.ll Fri Sep 15 12:53:54 2017
> @@ -11,7 +11,7 @@
> ; CHECK: remark: <unknown>:0:0: load of type i32 eliminated{{$}}
> ; CHECK-NEXT: remark: <unknown>:0:0: load of type i32 eliminated{{$}}
> ; CHECK-NEXT: remark: <unknown>:0:0: load of type i32 eliminated{{$}}
> -; CHECK-NEXT: remark: /tmp/s.c:3:3: load of type i32 not eliminated
> +; CHECK-NOT: remark:
>
> ; YAML: --- !Passed
> ; YAML-NEXT: Pass: gvn
>
> Modified: llvm/trunk/tools/llc/llc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llc/llc.cpp (original)
> +++ llvm/trunk/tools/llc/llc.cpp Fri Sep 15 12:53:54 2017
> @@ -235,24 +235,20 @@ GetOutputStream(const char *TargetName,
> return FDOut;
> }
>
> -struct LLCDiagnosticHandler : public DiagnosticHandler {
> - bool *HasError;
> - LLCDiagnosticHandler(bool *HasErrorPtr) : HasError(HasErrorPtr) {}
> - bool handleDiagnostics(const DiagnosticInfo &DI) override {
> - if (DI.getSeverity() == DS_Error)
> - *HasError = true;
> -
> - if (auto *Remark = dyn_cast<DiagnosticInfoOptimizationBase>(&DI))
> - if (!Remark->isEnabled())
> - return true;
> -
> - DiagnosticPrinterRawOStream DP(errs());
> - errs() << LLVMContext::getDiagnosticMessagePrefix(DI.getSeverity()) << ": ";
> - DI.print(DP);
> - errs() << "\n";
> - return true;
> - }
> -};
> +static void DiagnosticHandler(const DiagnosticInfo &DI, void *Context) {
> + bool *HasError = static_cast<bool *>(Context);
> + if (DI.getSeverity() == DS_Error)
> + *HasError = true;
> +
> + if (auto *Remark = dyn_cast<DiagnosticInfoOptimizationBase>(&DI))
> + if (!Remark->isEnabled())
> + return;
> +
> + DiagnosticPrinterRawOStream DP(errs());
> + errs() << LLVMContext::getDiagnosticMessagePrefix(DI.getSeverity()) << ": ";
> + DI.print(DP);
> + errs() << "\n";
> +}
>
> static void InlineAsmDiagHandler(const SMDiagnostic &SMD, void *Context,
> unsigned LocCookie) {
> @@ -312,8 +308,7 @@ int main(int argc, char **argv) {
>
> // Set a diagnostic handler that doesn't exit on the first error
> bool HasError = false;
> - Context.setDiagnosticHandler(
> - llvm::make_unique<LLCDiagnosticHandler>(&HasError));
> + Context.setDiagnosticHandler(DiagnosticHandler, &HasError);
> Context.setInlineAsmDiagnosticHandler(InlineAsmDiagHandler, &HasError);
>
> if (PassRemarksWithHotness)
> @@ -569,9 +564,8 @@ static int compileModule(char **argv, LL
>
> PM.run(*M);
>
> - auto HasError =
> - ((const LLCDiagnosticHandler *)(Context.getDiagHandlerPtr()))->HasError;
> - if (*HasError)
> + auto HasError = *static_cast<bool *>(Context.getDiagnosticContext());
> + if (HasError)
> return 1;
>
> // Compare the two outputs and make sure they're the same
>
> Modified: llvm/trunk/tools/llvm-dis/llvm-dis.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-dis/llvm-dis.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-dis/llvm-dis.cpp (original)
> +++ llvm/trunk/tools/llvm-dis/llvm-dis.cpp Fri Sep 15 12:53:54 2017
> @@ -122,30 +122,26 @@ public:
> }
> };
>
> -struct LLVMDisDiagnosticHandler : public DiagnosticHandler {
> - char *Prefix;
> - LLVMDisDiagnosticHandler(char *PrefixPtr) : Prefix(PrefixPtr) {}
> - bool handleDiagnostics(const DiagnosticInfo &DI) override {
> - raw_ostream &OS = errs();
> - OS << Prefix << ": ";
> - switch (DI.getSeverity()) {
> - case DS_Error: OS << "error: "; break;
> - case DS_Warning: OS << "warning: "; break;
> - case DS_Remark: OS << "remark: "; break;
> - case DS_Note: OS << "note: "; break;
> - }
> -
> - DiagnosticPrinterRawOStream DP(OS);
> - DI.print(DP);
> - OS << '\n';
> -
> - if (DI.getSeverity() == DS_Error)
> - exit(1);
> - return true;
> - }
> -};
> } // end anon namespace
>
> +static void diagnosticHandler(const DiagnosticInfo &DI, void *Context) {
> + raw_ostream &OS = errs();
> + OS << (char *)Context << ": ";
> + switch (DI.getSeverity()) {
> + case DS_Error: OS << "error: "; break;
> + case DS_Warning: OS << "warning: "; break;
> + case DS_Remark: OS << "remark: "; break;
> + case DS_Note: OS << "note: "; break;
> + }
> +
> + DiagnosticPrinterRawOStream DP(OS);
> + DI.print(DP);
> + OS << '\n';
> +
> + if (DI.getSeverity() == DS_Error)
> + exit(1);
> +}
> +
> static ExitOnError ExitOnErr;
>
> static std::unique_ptr<Module> openInputFile(LLVMContext &Context) {
> @@ -170,8 +166,9 @@ int main(int argc, char **argv) {
>
> LLVMContext Context;
> llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
> - Context.setDiagnosticHandler(
> - llvm::make_unique<LLVMDisDiagnosticHandler>(argv[0]));
> +
> + Context.setDiagnosticHandler(diagnosticHandler, argv[0]);
> +
> cl::ParseCommandLineOptions(argc, argv, "llvm .bc -> .ll disassembler\n");
>
> std::unique_ptr<Module> M = openInputFile(Context);
>
> Modified: llvm/trunk/tools/llvm-link/llvm-link.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-link/llvm-link.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-link/llvm-link.cpp (original)
> +++ llvm/trunk/tools/llvm-link/llvm-link.cpp Fri Sep 15 12:53:54 2017
> @@ -182,30 +182,25 @@ Module &ModuleLazyLoaderCache::operator(
> }
> } // anonymous namespace
>
> -namespace {
> -struct LLVMLinkDiagnosticHandler : public DiagnosticHandler {
> - bool handleDiagnostics(const DiagnosticInfo &DI) override {
> - unsigned Severity = DI.getSeverity();
> - switch (Severity) {
> - case DS_Error:
> - errs() << "ERROR: ";
> - break;
> - case DS_Warning:
> - if (SuppressWarnings)
> - return true;
> - errs() << "WARNING: ";
> - break;
> - case DS_Remark:
> - case DS_Note:
> - llvm_unreachable("Only expecting warnings and errors");
> - }
> -
> - DiagnosticPrinterRawOStream DP(errs());
> - DI.print(DP);
> - errs() << '\n';
> - return true;
> +static void diagnosticHandler(const DiagnosticInfo &DI, void *C) {
> + unsigned Severity = DI.getSeverity();
> + switch (Severity) {
> + case DS_Error:
> + errs() << "ERROR: ";
> + break;
> + case DS_Warning:
> + if (SuppressWarnings)
> + return;
> + errs() << "WARNING: ";
> + break;
> + case DS_Remark:
> + case DS_Note:
> + llvm_unreachable("Only expecting warnings and errors");
> }
> -};
> +
> + DiagnosticPrinterRawOStream DP(errs());
> + DI.print(DP);
> + errs() << '\n';
> }
>
> /// Import any functions requested via the -import option.
> @@ -352,8 +347,8 @@ int main(int argc, char **argv) {
> ExitOnErr.setBanner(std::string(argv[0]) + ": ");
>
> LLVMContext Context;
> - Context.setDiagnosticHandler(
> - llvm::make_unique<LLVMLinkDiagnosticHandler>(), true);
> + Context.setDiagnosticHandler(diagnosticHandler, nullptr, true);
> +
> llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
> cl::ParseCommandLineOptions(argc, argv, "llvm linker\n");
>
>
> Modified: llvm/trunk/tools/llvm-lto/llvm-lto.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-lto/llvm-lto.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-lto/llvm-lto.cpp (original)
> +++ llvm/trunk/tools/llvm-lto/llvm-lto.cpp Fri Sep 15 12:53:54 2017
> @@ -235,40 +235,34 @@ static void handleDiagnostics(lto_codege
> }
>
> static std::string CurrentActivity;
> +static void diagnosticHandler(const DiagnosticInfo &DI, void *Context) {
> + raw_ostream &OS = errs();
> + OS << "llvm-lto: ";
> + switch (DI.getSeverity()) {
> + case DS_Error:
> + OS << "error";
> + break;
> + case DS_Warning:
> + OS << "warning";
> + break;
> + case DS_Remark:
> + OS << "remark";
> + break;
> + case DS_Note:
> + OS << "note";
> + break;
> + }
> + if (!CurrentActivity.empty())
> + OS << ' ' << CurrentActivity;
> + OS << ": ";
> +
> + DiagnosticPrinterRawOStream DP(OS);
> + DI.print(DP);
> + OS << '\n';
>
> -namespace {
> - struct LLVMLTODiagnosticHandler : public DiagnosticHandler {
> - bool handleDiagnostics(const DiagnosticInfo &DI) override {
> - raw_ostream &OS = errs();
> - OS << "llvm-lto: ";
> - switch (DI.getSeverity()) {
> - case DS_Error:
> - OS << "error";
> - break;
> - case DS_Warning:
> - OS << "warning";
> - break;
> - case DS_Remark:
> - OS << "remark";
> - break;
> - case DS_Note:
> - OS << "note";
> - break;
> - }
> - if (!CurrentActivity.empty())
> - OS << ' ' << CurrentActivity;
> - OS << ": ";
> -
> - DiagnosticPrinterRawOStream DP(OS);
> - DI.print(DP);
> - OS << '\n';
> -
> - if (DI.getSeverity() == DS_Error)
> - exit(1);
> - return true;
> - }
> - };
> - }
> + if (DI.getSeverity() == DS_Error)
> + exit(1);
> +}
>
> static void error(const Twine &Msg) {
> errs() << "llvm-lto: " << Msg << '\n';
> @@ -299,8 +293,7 @@ getLocalLTOModule(StringRef Path, std::u
> Buffer = std::move(BufferOrErr.get());
> CurrentActivity = ("loading file '" + Path + "'").str();
> std::unique_ptr<LLVMContext> Context = llvm::make_unique<LLVMContext>();
> - Context->setDiagnosticHandler(llvm::make_unique<LLVMLTODiagnosticHandler>(),
> - true);
> + Context->setDiagnosticHandler(diagnosticHandler, nullptr, true);
> ErrorOr<std::unique_ptr<LTOModule>> Ret = LTOModule::createInLocalContext(
> std::move(Context), Buffer->getBufferStart(), Buffer->getBufferSize(),
> Options, Path);
> @@ -844,8 +837,7 @@ int main(int argc, char **argv) {
> unsigned BaseArg = 0;
>
> LLVMContext Context;
> - Context.setDiagnosticHandler(llvm::make_unique<LLVMLTODiagnosticHandler>(),
> - true);
> + Context.setDiagnosticHandler(diagnosticHandler, nullptr, true);
>
> LTOCodeGenerator CodeGen(Context);
>
>
> Modified: llvm/trunk/tools/lto/lto.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.cpp?rev=313387&r1=313386&r2=313387&view=diff
> ==============================================================================
> --- llvm/trunk/tools/lto/lto.cpp (original)
> +++ llvm/trunk/tools/lto/lto.cpp Fri Sep 15 12:53:54 2017
> @@ -75,23 +75,20 @@ static bool parsedOptions = false;
>
> static LLVMContext *LTOContext = nullptr;
>
> -struct LTOToolDiagnosticHandler : public DiagnosticHandler {
> - bool handleDiagnostics(const DiagnosticInfo &DI) override {
> - if (DI.getSeverity() != DS_Error) {
> - DiagnosticPrinterRawOStream DP(errs());
> - DI.print(DP);
> - errs() << '\n';
> - return true;
> - }
> - sLastErrorString = "";
> - {
> - raw_string_ostream Stream(sLastErrorString);
> - DiagnosticPrinterRawOStream DP(Stream);
> - DI.print(DP);
> - }
> - return true;
> +static void diagnosticHandler(const DiagnosticInfo &DI, void *Context) {
> + if (DI.getSeverity() != DS_Error) {
> + DiagnosticPrinterRawOStream DP(errs());
> + DI.print(DP);
> + errs() << '\n';
> + return;
> }
> -};
> + sLastErrorString = "";
> + {
> + raw_string_ostream Stream(sLastErrorString);
> + DiagnosticPrinterRawOStream DP(Stream);
> + DI.print(DP);
> + }
> +}
>
> // Initialize the configured targets if they have not been initialized.
> static void lto_initialize() {
> @@ -111,8 +108,7 @@ static void lto_initialize() {
>
> static LLVMContext Context;
> LTOContext = &Context;
> - LTOContext->setDiagnosticHandler(
> - llvm::make_unique<LTOToolDiagnosticHandler>(), true);
> + LTOContext->setDiagnosticHandler(diagnosticHandler, nullptr, true);
> initialized = true;
> }
> }
> @@ -278,8 +274,7 @@ lto_module_t lto_module_create_in_local_
>
> // Create a local context. Ownership will be transferred to LTOModule.
> std::unique_ptr<LLVMContext> Context = llvm::make_unique<LLVMContext>();
> - Context->setDiagnosticHandler(llvm::make_unique<LTOToolDiagnosticHandler>(),
> - true);
> + Context->setDiagnosticHandler(diagnosticHandler, nullptr, true);
>
> ErrorOr<std::unique_ptr<LTOModule>> M = LTOModule::createInLocalContext(
> std::move(Context), mem, length, Options, StringRef(path));
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list