mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-26 23:24:34 +00:00
MIR Serialization: move the MIR printer out of the MIR printing pass.
This commit decouples the MIR printer and the MIR printing pass so that it will be possible to move the MIR printer into a separate machine IR library later on. Reviewers: Duncan P. N. Exon Smith git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239788 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -12,54 +12,17 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "MIRPrinter.h"
|
||||
#include "llvm/CodeGen/Passes.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||
#include "llvm/CodeGen/MIRYamlMapping.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Support/YAMLTraits.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
namespace llvm {
|
||||
namespace yaml {
|
||||
|
||||
/// This struct serializes the LLVM IR module.
|
||||
template <> struct BlockScalarTraits<Module> {
|
||||
static void output(const Module &Mod, void *Ctxt, raw_ostream &OS) {
|
||||
Mod.print(OS, nullptr);
|
||||
}
|
||||
static StringRef input(StringRef Str, void *Ctxt, Module &Mod) {
|
||||
llvm_unreachable("LLVM Module is supposed to be parsed separately");
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace yaml
|
||||
} // end namespace llvm
|
||||
|
||||
namespace {
|
||||
|
||||
/// This class prints out the machine functions using the MIR serialization
|
||||
/// format.
|
||||
class MIRPrinter {
|
||||
raw_ostream &OS;
|
||||
|
||||
public:
|
||||
MIRPrinter(raw_ostream &OS) : OS(OS) {}
|
||||
|
||||
void print(const MachineFunction &MF);
|
||||
};
|
||||
|
||||
void MIRPrinter::print(const MachineFunction &MF) {
|
||||
yaml::MachineFunction YamlMF;
|
||||
YamlMF.Name = MF.getName();
|
||||
yaml::Output Out(OS);
|
||||
Out << YamlMF;
|
||||
}
|
||||
|
||||
/// This pass prints out the LLVM IR to an output stream using the MIR
|
||||
/// serialization format.
|
||||
struct MIRPrintingPass : public MachineFunctionPass {
|
||||
@ -80,14 +43,13 @@ struct MIRPrintingPass : public MachineFunctionPass {
|
||||
virtual bool runOnMachineFunction(MachineFunction &MF) override {
|
||||
std::string Str;
|
||||
raw_string_ostream StrOS(Str);
|
||||
MIRPrinter(StrOS).print(MF);
|
||||
printMIR(StrOS, MF);
|
||||
MachineFunctions.append(StrOS.str());
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool doFinalization(Module &M) override {
|
||||
yaml::Output Out(OS);
|
||||
Out << M;
|
||||
printMIR(OS, M);
|
||||
OS << MachineFunctions;
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user