/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/lib/CodeGen/MIRPrintingPass.cpp
Line | Count | Source (jump to first uncovered line) |
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 | | |
15 | | #include "llvm/CodeGen/MIRPrinter.h" |
16 | | |
17 | | #include "llvm/CodeGen/MIRYamlMapping.h" |
18 | | #include "llvm/CodeGen/MachineFunctionPass.h" |
19 | | #include "llvm/CodeGen/Passes.h" |
20 | | #include "llvm/Support/Debug.h" |
21 | | #include "llvm/Support/raw_ostream.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 | 0 | MIRPrintingPass() : MachineFunctionPass(ID), OS(dbgs()) {} |
35 | 748 | MIRPrintingPass(raw_ostream &OS) : MachineFunctionPass(ID), OS(OS) {} |
36 | | |
37 | 2 | StringRef getPassName() const override { return "MIR Printing Pass"; } |
38 | | |
39 | 748 | void getAnalysisUsage(AnalysisUsage &AU) const override { |
40 | 748 | AU.setPreservesAll(); |
41 | 748 | MachineFunctionPass::getAnalysisUsage(AU); |
42 | 748 | } |
43 | | |
44 | 2.51k | bool runOnMachineFunction(MachineFunction &MF) override { |
45 | 2.51k | std::string Str; |
46 | 2.51k | raw_string_ostream StrOS(Str); |
47 | 2.51k | printMIR(StrOS, MF); |
48 | 2.51k | MachineFunctions.append(StrOS.str()); |
49 | 2.51k | return false; |
50 | 2.51k | } |
51 | | |
52 | 609 | bool doFinalization(Module &M) override { |
53 | 609 | printMIR(OS, M); |
54 | 609 | OS << MachineFunctions; |
55 | 609 | return false; |
56 | 609 | } |
57 | | }; |
58 | | |
59 | | char MIRPrintingPass::ID = 0; |
60 | | |
61 | | } // end anonymous namespace |
62 | | |
63 | | char &llvm::MIRPrintingPassID = MIRPrintingPass::ID; |
64 | | INITIALIZE_PASS(MIRPrintingPass, "mir-printer", "MIR Printer", false, false) |
65 | | |
66 | | namespace llvm { |
67 | | |
68 | 748 | MachineFunctionPass *createPrintMIRPass(raw_ostream &OS) { |
69 | 748 | return new MIRPrintingPass(OS); |
70 | 748 | } |
71 | | |
72 | | } // end namespace llvm |