LLVM  6.0.0svn
MIRPrintingPass.cpp
Go to the documentation of this file.
1 //===- MIRPrintingPass.cpp - Pass that prints out using the MIR format ----===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements a pass that prints out the LLVM module using the MIR
11 // serialization format.
12 //
13 //===----------------------------------------------------------------------===//
14 
16 
19 #include "llvm/CodeGen/Passes.h"
20 #include "llvm/Support/Debug.h"
22 
23 using namespace llvm;
24 
25 namespace {
26 
27 /// This pass prints out the LLVM IR to an output stream using the MIR
28 /// serialization format.
29 struct MIRPrintingPass : public MachineFunctionPass {
30  static char ID;
31  raw_ostream &OS;
32  std::string MachineFunctions;
33 
34  MIRPrintingPass() : MachineFunctionPass(ID), OS(dbgs()) {}
35  MIRPrintingPass(raw_ostream &OS) : MachineFunctionPass(ID), OS(OS) {}
36 
37  StringRef getPassName() const override { return "MIR Printing Pass"; }
38 
39  void getAnalysisUsage(AnalysisUsage &AU) const override {
40  AU.setPreservesAll();
42  }
43 
44  bool runOnMachineFunction(MachineFunction &MF) override {
45  std::string Str;
46  raw_string_ostream StrOS(Str);
47  printMIR(StrOS, MF);
48  MachineFunctions.append(StrOS.str());
49  return false;
50  }
51 
52  bool doFinalization(Module &M) override {
53  printMIR(OS, M);
54  OS << MachineFunctions;
55  return false;
56  }
57 };
58 
59 char MIRPrintingPass::ID = 0;
60 
61 } // end anonymous namespace
62 
64 INITIALIZE_PASS(MIRPrintingPass, "mir-printer", "MIR Printer", false, false)
65 
66 namespace llvm {
67 
69  return new MIRPrintingPass(OS);
70 }
71 
72 } // end namespace llvm
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
A Module instance is used to store all the information related to an LLVM module. ...
Definition: Module.h:63
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.
Represent the analysis usage information of a pass.
char & MIRPrintingPassID
MIRPrintingPass - this pass prints out the LLVM IR using the MIR serialization format.
void printMIR(raw_ostream &OS, const Module &M)
Print LLVM IR using the MIR serialization format to the given output stream.
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
Definition: PassSupport.h:34
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition: Debug.cpp:132
void setPreservesAll()
Set by analyses that do not transform their input at all.
A raw_ostream that writes to an std::string.
Definition: raw_ostream.h:466
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:44
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
MachineFunctionPass * createPrintMIRPass(raw_ostream &OS)
MIRPrinting pass - this pass prints out the LLVM IR into the given stream using the MIR serialization...