LLVM 17.0.0git
MIRPrintingPass.cpp
Go to the documentation of this file.
1//===- MIRPrintingPass.cpp - Pass that prints out using the MIR format ----===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements a pass that prints out the LLVM module using the MIR
10// serialization format.
11//
12//===----------------------------------------------------------------------===//
13
16#include "llvm/CodeGen/Passes.h"
18#include "llvm/Support/Debug.h"
20
21using namespace llvm;
22
23namespace {
24
25/// This pass prints out the LLVM IR to an output stream using the MIR
26/// serialization format.
27struct MIRPrintingPass : public MachineFunctionPass {
28 static char ID;
29 raw_ostream &OS;
30 std::string MachineFunctions;
31
32 MIRPrintingPass() : MachineFunctionPass(ID), OS(dbgs()) {}
33 MIRPrintingPass(raw_ostream &OS) : MachineFunctionPass(ID), OS(OS) {}
34
35 StringRef getPassName() const override { return "MIR Printing Pass"; }
36
37 void getAnalysisUsage(AnalysisUsage &AU) const override {
38 AU.setPreservesAll();
40 }
41
42 bool runOnMachineFunction(MachineFunction &MF) override {
43 std::string Str;
44 raw_string_ostream StrOS(Str);
45 printMIR(StrOS, MF);
46 MachineFunctions.append(StrOS.str());
47 return false;
48 }
49
50 bool doFinalization(Module &M) override {
51 printMIR(OS, M);
52 OS << MachineFunctions;
53 return false;
54 }
55};
56
57char MIRPrintingPass::ID = 0;
58
59} // end anonymous namespace
60
61char &llvm::MIRPrintingPassID = MIRPrintingPass::ID;
62INITIALIZE_PASS(MIRPrintingPass, "mir-printer", "MIR Printer", false, false)
63
64namespace llvm {
65
67 return new MIRPrintingPass(OS);
68}
69
70} // end namespace llvm
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
Definition: PassSupport.h:38
Represent the analysis usage information of a pass.
void setPreservesAll()
Set by analyses that do not transform their input at all.
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
virtual bool runOnMachineFunction(MachineFunction &MF)=0
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformat...
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:65
virtual bool doFinalization(Module &)
doFinalization - Virtual method overriden by subclasses to do any necessary clean up after all passes...
Definition: Pass.h:120
virtual StringRef getPassName() const
getPassName - Return a nice clean name for a pass.
Definition: Pass.cpp:81
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
A raw_ostream that writes to an std::string.
Definition: raw_ostream.h:642
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition: CallingConv.h:24
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
MachineFunctionPass * createPrintMIRPass(raw_ostream &OS)
MIRPrinting pass - this pass prints out the LLVM IR into the given stream using the MIR serialization...
void printMIR(raw_ostream &OS, const Module &M)
Print LLVM IR using the MIR serialization format to the given output stream.
Definition: MIRPrinter.cpp:961
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition: Debug.cpp:163
char & MIRPrintingPassID
MIRPrintingPass - this pass prints out the LLVM IR using the MIR serialization format.