diff options
Diffstat (limited to 'llvm/lib/CodeGen/MIRPrintingPass.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/MIRPrintingPass.cpp | 70 | 
1 files changed, 70 insertions, 0 deletions
| diff --git a/llvm/lib/CodeGen/MIRPrintingPass.cpp b/llvm/lib/CodeGen/MIRPrintingPass.cpp new file mode 100644 index 0000000000000..e032fffd658c8 --- /dev/null +++ b/llvm/lib/CodeGen/MIRPrintingPass.cpp @@ -0,0 +1,70 @@ +//===- MIRPrintingPass.cpp - Pass that prints out using the MIR format ----===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements a pass that prints out the LLVM module using the MIR +// serialization format. +// +//===----------------------------------------------------------------------===// + +#include "llvm/CodeGen/MIRPrinter.h" + +#include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/Passes.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/raw_ostream.h" + +using namespace llvm; + +namespace { + +/// This pass prints out the LLVM IR to an output stream using the MIR +/// serialization format. +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) {} + +  StringRef 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; + +} // end anonymous namespace + +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); +} + +} // end namespace llvm | 
