1206124Srdivacky//===-- MachineFunctionPrinterPass.cpp ------------------------------------===//
2206124Srdivacky//
3206124Srdivacky//                     The LLVM Compiler Infrastructure
4206124Srdivacky//
5206124Srdivacky// This file is distributed under the University of Illinois Open Source
6206124Srdivacky// License. See LICENSE.TXT for details.
7206124Srdivacky//
8206124Srdivacky//===----------------------------------------------------------------------===//
9206124Srdivacky//
10206124Srdivacky// MachineFunctionPrinterPass implementation.
11206124Srdivacky//
12206124Srdivacky//===----------------------------------------------------------------------===//
13206124Srdivacky
14206124Srdivacky#include "llvm/CodeGen/Passes.h"
15249423Sdim#include "llvm/CodeGen/MachineFunction.h"
16206124Srdivacky#include "llvm/CodeGen/MachineFunctionPass.h"
17239462Sdim#include "llvm/CodeGen/SlotIndexes.h"
18249423Sdim#include "llvm/Support/Debug.h"
19206124Srdivacky#include "llvm/Support/raw_ostream.h"
20206124Srdivacky
21206124Srdivackyusing namespace llvm;
22206124Srdivacky
23206124Srdivackynamespace {
24206124Srdivacky/// MachineFunctionPrinterPass - This is a pass to dump the IR of a
25206124Srdivacky/// MachineFunction.
26206124Srdivacky///
27206124Srdivackystruct MachineFunctionPrinterPass : public MachineFunctionPass {
28206124Srdivacky  static char ID;
29206124Srdivacky
30206124Srdivacky  raw_ostream &OS;
31206124Srdivacky  const std::string Banner;
32206124Srdivacky
33239462Sdim  MachineFunctionPrinterPass() : MachineFunctionPass(ID), OS(dbgs()) { }
34206124Srdivacky  MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner)
35212904Sdim      : MachineFunctionPass(ID), OS(os), Banner(banner) {}
36206124Srdivacky
37206124Srdivacky  const char *getPassName() const { return "MachineFunction Printer"; }
38206124Srdivacky
39206124Srdivacky  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
40206124Srdivacky    AU.setPreservesAll();
41206124Srdivacky    MachineFunctionPass::getAnalysisUsage(AU);
42206124Srdivacky  }
43206124Srdivacky
44206124Srdivacky  bool runOnMachineFunction(MachineFunction &MF) {
45206124Srdivacky    OS << "# " << Banner << ":\n";
46239462Sdim    MF.print(OS, getAnalysisIfAvailable<SlotIndexes>());
47206124Srdivacky    return false;
48206124Srdivacky  }
49206124Srdivacky};
50206124Srdivacky
51206124Srdivackychar MachineFunctionPrinterPass::ID = 0;
52206124Srdivacky}
53206124Srdivacky
54243830Sdimchar &llvm::MachineFunctionPrinterPassID = MachineFunctionPrinterPass::ID;
55239462SdimINITIALIZE_PASS(MachineFunctionPrinterPass, "print-machineinstrs",
56239462Sdim                "Machine Function Printer", false, false)
57239462Sdim
58206124Srdivackynamespace llvm {
59206124Srdivacky/// Returns a newly-created MachineFunction Printer pass. The
60206124Srdivacky/// default banner is empty.
61206124Srdivacky///
62206124SrdivackyMachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS,
63206124Srdivacky                                                      const std::string &Banner){
64206124Srdivacky  return new MachineFunctionPrinterPass(OS, Banner);
65206124Srdivacky}
66206124Srdivacky
67206124Srdivacky}
68