diff options
Diffstat (limited to 'llvm/lib/IR')
-rw-r--r-- | llvm/lib/IR/DiagnosticInfo.cpp | 37 | ||||
-rw-r--r-- | llvm/lib/IR/LLVMContext.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/IR/LLVMContextImpl.h | 2 |
3 files changed, 47 insertions, 0 deletions
diff --git a/llvm/lib/IR/DiagnosticInfo.cpp b/llvm/lib/IR/DiagnosticInfo.cpp index b194d4fa005..38076e97f95 100644 --- a/llvm/lib/IR/DiagnosticInfo.cpp +++ b/llvm/lib/IR/DiagnosticInfo.cpp @@ -14,6 +14,7 @@ #include "llvm/IR/DiagnosticInfo.h" #include "LLVMContextImpl.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/ADT/Twine.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DebugInfo.h" @@ -170,6 +171,9 @@ const std::string DiagnosticInfoWithDebugLocBase::getLocationStr() const { return (Filename + ":" + Twine(Line) + ":" + Twine(Column)).str(); } +DiagnosticInfoOptimizationBase::Argument::Argument(StringRef Key, int N) + : Key(Key), Val(itostr(N)) {} + void DiagnosticInfoOptimizationBase::print(DiagnosticPrinter &DP) const { DP << getLocationStr() << ": " << getMsg(); if (Hotness) @@ -181,6 +185,13 @@ bool DiagnosticInfoOptimizationRemark::isEnabled() const { PassRemarksOptLoc.Pattern->match(getPassName()); } +DiagnosticInfoOptimizationRemarkMissed::DiagnosticInfoOptimizationRemarkMissed( + const char *PassName, StringRef RemarkName, Instruction *Inst) + : DiagnosticInfoOptimizationBase(DK_OptimizationRemarkMissed, DS_Remark, + PassName, RemarkName, + *Inst->getParent()->getParent(), + Inst->getDebugLoc(), Inst->getParent()) {} + bool DiagnosticInfoOptimizationRemarkMissed::isEnabled() const { return PassRemarksMissedOptLoc.Pattern && PassRemarksMissedOptLoc.Pattern->match(getPassName()); @@ -266,3 +277,29 @@ void llvm::emitLoopInterleaveWarning(LLVMContext &Ctx, const Function &Fn, void DiagnosticInfoISelFallback::print(DiagnosticPrinter &DP) const { DP << "Instruction selection used fallback path for " << getFunction(); } + +DiagnosticInfoOptimizationBase &DiagnosticInfoOptimizationBase:: +operator<<(StringRef S) { + Args.emplace_back(S); + return *this; +} + +DiagnosticInfoOptimizationBase &DiagnosticInfoOptimizationBase:: +operator<<(Argument A) { + Args.push_back(std::move(A)); + return *this; +} + +DiagnosticInfoOptimizationBase &DiagnosticInfoOptimizationBase:: +operator<<(setIsVerbose V) { + IsVerbose = true; + return *this; +} + +std::string DiagnosticInfoOptimizationBase::getMsg() const { + std::string Str; + raw_string_ostream OS(Str); + for (const DiagnosticInfoOptimizationBase::Argument &Arg : Args) + OS << Arg.Val; + return OS.str(); +} diff --git a/llvm/lib/IR/LLVMContext.cpp b/llvm/lib/IR/LLVMContext.cpp index d27fcfb1b7a..c97228fd51a 100644 --- a/llvm/lib/IR/LLVMContext.cpp +++ b/llvm/lib/IR/LLVMContext.cpp @@ -203,6 +203,14 @@ bool LLVMContext::getDiagnosticHotnessRequested() const { return pImpl->DiagnosticHotnessRequested; } +yaml::Output *LLVMContext::getDiagnosticsOutputFile() { + return pImpl->DiagnosticsOutputFile.get(); +} + +void LLVMContext::setDiagnosticsOutputFile(yaml::Output *F) { + pImpl->DiagnosticsOutputFile.reset(F); +} + LLVMContext::DiagnosticHandlerTy LLVMContext::getDiagnosticHandler() const { return pImpl->DiagnosticHandler; } diff --git a/llvm/lib/IR/LLVMContextImpl.h b/llvm/lib/IR/LLVMContextImpl.h index 40935d9331e..49a35a4d375 100644 --- a/llvm/lib/IR/LLVMContextImpl.h +++ b/llvm/lib/IR/LLVMContextImpl.h @@ -33,6 +33,7 @@ #include "llvm/IR/Metadata.h" #include "llvm/IR/ValueHandle.h" #include "llvm/Support/Dwarf.h" +#include "llvm/Support/YAMLTraits.h" #include <vector> namespace llvm { @@ -1043,6 +1044,7 @@ public: void *DiagnosticContext; bool RespectDiagnosticFilters; bool DiagnosticHotnessRequested; + std::unique_ptr<yaml::Output> DiagnosticsOutputFile; LLVMContext::YieldCallbackTy YieldCallback; void *YieldOpaqueHandle; |