mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-28 19:25:00 +00:00
MIR Serialization: Connect the machine function analysis pass to the MIR parser.
This commit connects the machine function analysis pass (which creates machine functions) to the MIR parser, which will initialize the machine functions with the state from the MIR file and reconstruct the machine IR. This commit introduces a new interface called 'MachineFunctionInitializer', which can be used to provide custom initialization for the machine functions. This commit also introduces a new diagnostic class called 'DiagnosticInfoMIRParser' which is used for MIR parsing errors. This commit modifies the default diagnostic handling in LLVMContext - now the the diagnostics are printed directly into llvm::errs() so that the MIR parsing errors can be printed with colours. Reviewers: Justin Bogner Differential Revision: http://reviews.llvm.org/D9928 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239753 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -32,6 +32,7 @@ class LLVMContextImpl;
|
||||
class Twine;
|
||||
class Value;
|
||||
class DebugLoc;
|
||||
class SMDiagnostic;
|
||||
|
||||
/// \brief Defines the different supported severity of a diagnostic.
|
||||
enum DiagnosticSeverity {
|
||||
@@ -56,6 +57,7 @@ enum DiagnosticKind {
|
||||
DK_OptimizationRemarkMissed,
|
||||
DK_OptimizationRemarkAnalysis,
|
||||
DK_OptimizationFailure,
|
||||
DK_MIRParser,
|
||||
DK_FirstPluginKind
|
||||
};
|
||||
|
||||
@@ -386,6 +388,24 @@ public:
|
||||
bool isEnabled() const override;
|
||||
};
|
||||
|
||||
/// Diagnostic information for machine IR parser.
|
||||
class DiagnosticInfoMIRParser : public DiagnosticInfo {
|
||||
const SMDiagnostic &Diagnostic;
|
||||
|
||||
public:
|
||||
DiagnosticInfoMIRParser(DiagnosticSeverity Severity,
|
||||
const SMDiagnostic &Diagnostic)
|
||||
: DiagnosticInfo(DK_MIRParser, Severity), Diagnostic(Diagnostic) {}
|
||||
|
||||
const SMDiagnostic &getDiagnostic() const { return Diagnostic; }
|
||||
|
||||
void print(DiagnosticPrinter &DP) const override;
|
||||
|
||||
static bool classof(const DiagnosticInfo *DI) {
|
||||
return DI->getKind() == DK_MIRParser;
|
||||
}
|
||||
};
|
||||
|
||||
// Create wrappers for C Binding types (see CBindingWrapping.h).
|
||||
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DiagnosticInfo, LLVMDiagnosticInfoRef)
|
||||
|
||||
|
@@ -22,6 +22,7 @@ namespace llvm {
|
||||
// Forward declarations.
|
||||
class Module;
|
||||
class raw_ostream;
|
||||
class SMDiagnostic;
|
||||
class StringRef;
|
||||
class Twine;
|
||||
class Value;
|
||||
@@ -51,6 +52,9 @@ public:
|
||||
// IR related types.
|
||||
virtual DiagnosticPrinter &operator<<(const Value &V) = 0;
|
||||
virtual DiagnosticPrinter &operator<<(const Module &M) = 0;
|
||||
|
||||
// Other types.
|
||||
virtual DiagnosticPrinter &operator<<(const SMDiagnostic &Diag) = 0;
|
||||
};
|
||||
|
||||
/// \brief Basic diagnostic printer that uses an underlying raw_ostream.
|
||||
@@ -81,6 +85,9 @@ public:
|
||||
// IR related types.
|
||||
DiagnosticPrinter &operator<<(const Value &V) override;
|
||||
DiagnosticPrinter &operator<<(const Module &M) override;
|
||||
|
||||
// Other types.
|
||||
DiagnosticPrinter &operator<<(const SMDiagnostic &Diag) override;
|
||||
};
|
||||
} // End namespace llvm
|
||||
|
||||
|
Reference in New Issue
Block a user