MIRPrintingPass.cpp [plain text]
#include "MIRPrinter.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MIRYamlMapping.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
namespace {
struct MIRPrintingPass : public MachineFunctionPass {
static char ID;
raw_ostream &OS;
std::string MachineFunctions;
MIRPrintingPass() : MachineFunctionPass(ID), OS(dbgs()) {}
MIRPrintingPass(raw_ostream &OS) : MachineFunctionPass(ID), OS(OS) {}
const char *getPassName() const override { return "MIR Printing Pass"; }
void getAnalysisUsage(AnalysisUsage &AU) const override {
AU.setPreservesAll();
MachineFunctionPass::getAnalysisUsage(AU);
}
bool runOnMachineFunction(MachineFunction &MF) override {
std::string Str;
raw_string_ostream StrOS(Str);
printMIR(StrOS, MF);
MachineFunctions.append(StrOS.str());
return false;
}
bool doFinalization(Module &M) override {
printMIR(OS, M);
OS << MachineFunctions;
return false;
}
};
char MIRPrintingPass::ID = 0;
}
char &llvm::MIRPrintingPassID = MIRPrintingPass::ID;
INITIALIZE_PASS(MIRPrintingPass, "mir-printer", "MIR Printer", false, false)
namespace llvm {
MachineFunctionPass *createPrintMIRPass(raw_ostream &OS) {
return new MIRPrintingPass(OS);
}
}