diff options
-rw-r--r-- | llvm/include/llvm/IR/DiagnosticInfo.h | 20 | ||||
-rw-r--r-- | llvm/lib/IR/DiagnosticInfo.cpp | 4 |
2 files changed, 24 insertions, 0 deletions
diff --git a/llvm/include/llvm/IR/DiagnosticInfo.h b/llvm/include/llvm/IR/DiagnosticInfo.h index cbd328c2251..d8be3d39cd1 100644 --- a/llvm/include/llvm/IR/DiagnosticInfo.h +++ b/llvm/include/llvm/IR/DiagnosticInfo.h @@ -54,6 +54,7 @@ enum DiagnosticKind { DK_Linker, DK_DebugMetadataVersion, DK_DebugMetadataInvalid, + DK_ISelFallback, DK_SampleProfile, DK_OptimizationRemark, DK_OptimizationRemarkMissed, @@ -584,6 +585,25 @@ public: } }; +/// Diagnostic information for ISel fallback path. +class DiagnosticInfoISelFallback : public DiagnosticInfo { + /// The function that is concerned by this diagnostic. + const Function &Fn; + +public: + DiagnosticInfoISelFallback(const Function &Fn, + DiagnosticSeverity Severity = DS_Warning) + : DiagnosticInfo(DK_ISelFallback, Severity), Fn(Fn) {} + + const Function &getFunction() const { return Fn; } + + void print(DiagnosticPrinter &DP) const override; + + static bool classof(const DiagnosticInfo *DI) { + return DI->getKind() == DK_ISelFallback; + } +}; + // Create wrappers for C Binding types (see CBindingWrapping.h). DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DiagnosticInfo, LLVMDiagnosticInfoRef) diff --git a/llvm/lib/IR/DiagnosticInfo.cpp b/llvm/lib/IR/DiagnosticInfo.cpp index ce67be328ab..7dd4cab734d 100644 --- a/llvm/lib/IR/DiagnosticInfo.cpp +++ b/llvm/lib/IR/DiagnosticInfo.cpp @@ -262,3 +262,7 @@ void llvm::emitLoopInterleaveWarning(LLVMContext &Ctx, const Function &Fn, Ctx.diagnose(DiagnosticInfoOptimizationFailure( Fn, DLoc, Twine("loop not interleaved: " + Msg))); } + +void DiagnosticInfoISelFallback::print(DiagnosticPrinter &DP) const { + DP << "Instruction selection used fallback path for " << getFunction(); +} |