//
//===----------------------------------------------------------------------===//
+#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 {
MachineFunctionPass::getAnalysisUsage(AU);
}
- virtual bool runOnMachineFunction(MachineFunction &MF) override {
+ 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;
+ bool doFinalization(Module &M) override {
+ printMIR(OS, M);
OS << MachineFunctions;
return false;
}