1f22ef01cSRoman Divacky //===-- MachineFunctionPrinterPass.cpp ------------------------------------===//
2f22ef01cSRoman Divacky //
3f22ef01cSRoman Divacky // The LLVM Compiler Infrastructure
4f22ef01cSRoman Divacky //
5f22ef01cSRoman Divacky // This file is distributed under the University of Illinois Open Source
6f22ef01cSRoman Divacky // License. See LICENSE.TXT for details.
7f22ef01cSRoman Divacky //
8f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
9f22ef01cSRoman Divacky //
10f22ef01cSRoman Divacky // MachineFunctionPrinterPass implementation.
11f22ef01cSRoman Divacky //
12f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
13f22ef01cSRoman Divacky
14f22ef01cSRoman Divacky #include "llvm/CodeGen/MachineFunction.h"
15139f7f9bSDimitry Andric #include "llvm/CodeGen/MachineFunctionPass.h"
16db17bf38SDimitry Andric #include "llvm/CodeGen/Passes.h"
177ae0e2c9SDimitry Andric #include "llvm/CodeGen/SlotIndexes.h"
18*b5893f02SDimitry Andric #include "llvm/IR/IRPrintingPasses.h"
197ae0e2c9SDimitry Andric #include "llvm/Support/Debug.h"
20139f7f9bSDimitry Andric #include "llvm/Support/raw_ostream.h"
21f22ef01cSRoman Divacky
22f22ef01cSRoman Divacky using namespace llvm;
23f22ef01cSRoman Divacky
24f22ef01cSRoman Divacky namespace {
25f22ef01cSRoman Divacky /// MachineFunctionPrinterPass - This is a pass to dump the IR of a
26f22ef01cSRoman Divacky /// MachineFunction.
27f22ef01cSRoman Divacky ///
28f22ef01cSRoman Divacky struct MachineFunctionPrinterPass : public MachineFunctionPass {
29f22ef01cSRoman Divacky static char ID;
30f22ef01cSRoman Divacky
31f22ef01cSRoman Divacky raw_ostream &OS;
32f22ef01cSRoman Divacky const std::string Banner;
33f22ef01cSRoman Divacky
MachineFunctionPrinterPass__anonc550d1ef0111::MachineFunctionPrinterPass347ae0e2c9SDimitry Andric MachineFunctionPrinterPass() : MachineFunctionPass(ID), OS(dbgs()) { }
MachineFunctionPrinterPass__anonc550d1ef0111::MachineFunctionPrinterPass35f22ef01cSRoman Divacky MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner)
36e580952dSDimitry Andric : MachineFunctionPass(ID), OS(os), Banner(banner) {}
37f22ef01cSRoman Divacky
getPassName__anonc550d1ef0111::MachineFunctionPrinterPass38d88c1a5aSDimitry Andric StringRef getPassName() const override { return "MachineFunction Printer"; }
39f22ef01cSRoman Divacky
getAnalysisUsage__anonc550d1ef0111::MachineFunctionPrinterPass4091bc56edSDimitry Andric void getAnalysisUsage(AnalysisUsage &AU) const override {
41f22ef01cSRoman Divacky AU.setPreservesAll();
42*b5893f02SDimitry Andric AU.addUsedIfAvailable<SlotIndexes>();
43f22ef01cSRoman Divacky MachineFunctionPass::getAnalysisUsage(AU);
44f22ef01cSRoman Divacky }
45f22ef01cSRoman Divacky
runOnMachineFunction__anonc550d1ef0111::MachineFunctionPrinterPass4691bc56edSDimitry Andric bool runOnMachineFunction(MachineFunction &MF) override {
47444ed5c5SDimitry Andric if (!llvm::isFunctionInPrintList(MF.getName()))
48444ed5c5SDimitry Andric return false;
49f22ef01cSRoman Divacky OS << "# " << Banner << ":\n";
507ae0e2c9SDimitry Andric MF.print(OS, getAnalysisIfAvailable<SlotIndexes>());
51f22ef01cSRoman Divacky return false;
52f22ef01cSRoman Divacky }
53f22ef01cSRoman Divacky };
54f22ef01cSRoman Divacky
55f22ef01cSRoman Divacky char MachineFunctionPrinterPass::ID = 0;
56f22ef01cSRoman Divacky }
57f22ef01cSRoman Divacky
583861d79fSDimitry Andric char &llvm::MachineFunctionPrinterPassID = MachineFunctionPrinterPass::ID;
5939d628a0SDimitry Andric INITIALIZE_PASS(MachineFunctionPrinterPass, "machineinstr-printer",
607ae0e2c9SDimitry Andric "Machine Function Printer", false, false)
617ae0e2c9SDimitry Andric
62f22ef01cSRoman Divacky namespace llvm {
63f22ef01cSRoman Divacky /// Returns a newly-created MachineFunction Printer pass. The
64f22ef01cSRoman Divacky /// default banner is empty.
65f22ef01cSRoman Divacky ///
createMachineFunctionPrinterPass(raw_ostream & OS,const std::string & Banner)66f22ef01cSRoman Divacky MachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS,
67f22ef01cSRoman Divacky const std::string &Banner){
68f22ef01cSRoman Divacky return new MachineFunctionPrinterPass(OS, Banner);
69f22ef01cSRoman Divacky }
70f22ef01cSRoman Divacky
71f22ef01cSRoman Divacky }
72