168a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene//===-- MachineFunctionPrinterPass.cpp ------------------------------------===//
268a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene//
368a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene//                     The LLVM Compiler Infrastructure
468a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene//
568a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene// This file is distributed under the University of Illinois Open Source
668a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene// License. See LICENSE.TXT for details.
768a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene//
868a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene//===----------------------------------------------------------------------===//
968a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene//
1068a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene// MachineFunctionPrinterPass implementation.
1168a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene//
1268a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene//===----------------------------------------------------------------------===//
1368a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
1468a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene#include "llvm/CodeGen/Passes.h"
1568a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene#include "llvm/CodeGen/MachineFunctionPass.h"
1668a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene#include "llvm/CodeGen/MachineFunction.h"
1768a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene#include "llvm/Support/raw_ostream.h"
1868a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
1968a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greeneusing namespace llvm;
2068a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
2168a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greenenamespace {
2268a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene/// MachineFunctionPrinterPass - This is a pass to dump the IR of a
2368a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene/// MachineFunction.
2468a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene///
2568a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greenestruct MachineFunctionPrinterPass : public MachineFunctionPass {
2668a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  static char ID;
2768a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
2868a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  raw_ostream &OS;
2968a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  const std::string Banner;
3068a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
3168a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner)
327569322765651f19eea0609fb082e6b267d5d2b5Owen Anderson      : MachineFunctionPass(ID), OS(os), Banner(banner) {}
3368a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
3468a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  const char *getPassName() const { return "MachineFunction Printer"; }
3568a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
3668a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
3768a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene    AU.setPreservesAll();
3868a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene    MachineFunctionPass::getAnalysisUsage(AU);
3968a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  }
4068a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
4168a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  bool runOnMachineFunction(MachineFunction &MF) {
4268a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene    OS << "# " << Banner << ":\n";
4368a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene    MF.print(OS);
4468a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene    return false;
4568a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  }
4668a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene};
4768a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
4868a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greenechar MachineFunctionPrinterPass::ID = 0;
4968a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene}
5068a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
5168a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greenenamespace llvm {
5268a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene/// Returns a newly-created MachineFunction Printer pass. The
5368a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene/// default banner is empty.
5468a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene///
5568a217169a546c904bb1dc8ac3f1afb36a29020cDavid GreeneMachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS,
5668a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene                                                      const std::string &Banner){
5768a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene  return new MachineFunctionPrinterPass(OS, Banner);
5868a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene}
5968a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene
6068a217169a546c904bb1dc8ac3f1afb36a29020cDavid Greene}
61