diff --git a/llvm/include/llvm/CodeGen/MIRPrintingPass.h b/llvm/include/llvm/CodeGen/MIRPrintingPass.h new file mode 100644 --- /dev/null +++ b/llvm/include/llvm/CodeGen/MIRPrintingPass.h @@ -0,0 +1,33 @@ +//===- MIRPrintingPass.h - Pass that prints out using the MIR format *- C++ -*-===// +// +// 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 descibes the pass that prints out the LLVM module using the MIR +// serialization format. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CODEGEN_MIRPRINTINGPASS_H +#define LLVM_CODEGEN_MIRPRINTINGPASS_H + +#include "llvm/CodeGen/MachineFunction.h" +#include "llvm/CodeGen/PassManager.h" +#include "llvm/IR/PassManager.h" +#include "llvm/Support/raw_ostream.h" + +namespace llvm { + +// The MIR Printing pass. +struct MIRPrintingPass : PassInfoMixin { + raw_ostream &OS; + MIRPrintingPass(raw_ostream &OS) : OS(OS){}; + PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &); + PreservedAnalyses run(Module &M, ModuleAnalysisManager &); +}; +} // namespace llvm + +#endif // LLVM_CODEGEN_MIRPRINTINGPASS_H diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -250,7 +250,7 @@ void initializeLowerSwitchPass(PassRegistry&); void initializeLowerTypeTestsPass(PassRegistry&); void initializeMIRCanonicalizerPass(PassRegistry &); -void initializeMIRPrintingPassPass(PassRegistry&); +void initializeMIRPrintingLegacyPassPass(PassRegistry &); void initializeMachineBlockFrequencyInfoPass(PassRegistry&); void initializeMachineBlockPlacementPass(PassRegistry&); void initializeMachineBlockPlacementStatsPass(PassRegistry&); diff --git a/llvm/lib/CodeGen/MIRPrintingPass.cpp b/llvm/lib/CodeGen/MIRPrintingPass.cpp --- a/llvm/lib/CodeGen/MIRPrintingPass.cpp +++ b/llvm/lib/CodeGen/MIRPrintingPass.cpp @@ -11,26 +11,42 @@ // //===----------------------------------------------------------------------===// -#include "llvm/CodeGen/MIRPrinter.h" - +#include "llvm/CodeGen/MIRPrintingPass.h" #include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/MIRPrinter.h" #include "llvm/CodeGen/Passes.h" +#include "llvm/CodeGen/PassManager.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; +PreservedAnalyses MIRPrintingPass::run(Module &M, ModuleAnalysisManager &MAM) { + printMIR(OS, M); + // FIXME: Inefficient. Should only make this adaptor once. Put it in + // the class and construct it the first time. + return createModuleToFunctionPassAdaptor( + createFunctionToMachineFunctionPassAdaptor(*this)) + .run(M, MAM); +} + +PreservedAnalyses MIRPrintingPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &) { + printMIR(OS, MF); + return PreservedAnalyses::all(); +} + namespace { /// This pass prints out the LLVM IR to an output stream using the MIR /// serialization format. -struct MIRPrintingPass : public MachineFunctionPass { +struct MIRPrintingLegacyPass : public MachineFunctionPass { static char ID; raw_ostream &OS; std::string MachineFunctions; - MIRPrintingPass() : MachineFunctionPass(ID), OS(dbgs()) {} - MIRPrintingPass(raw_ostream &OS) : MachineFunctionPass(ID), OS(OS) {} + MIRPrintingLegacyPass() : MachineFunctionPass(ID), OS(dbgs()) {} + MIRPrintingLegacyPass(raw_ostream &OS) : MachineFunctionPass(ID), OS(OS) {} StringRef getPassName() const override { return "MIR Printing Pass"; } @@ -54,17 +70,18 @@ } }; -char MIRPrintingPass::ID = 0; +char MIRPrintingLegacyPass::ID = 0; } // end anonymous namespace -char &llvm::MIRPrintingPassID = MIRPrintingPass::ID; -INITIALIZE_PASS(MIRPrintingPass, "mir-printer", "MIR Printer", false, false) +char &llvm::MIRPrintingPassID = MIRPrintingLegacyPass::ID; +INITIALIZE_PASS(MIRPrintingLegacyPass, "mir-printer", "MIR Printer", false, + false) namespace llvm { MachineFunctionPass *createPrintMIRPass(raw_ostream &OS) { - return new MIRPrintingPass(OS); + return new MIRPrintingLegacyPass(OS); } } // end namespace llvm