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/Passes.h" 15f22ef01cSRoman Divacky #include "llvm/CodeGen/MachineFunctionPass.h" 16f22ef01cSRoman Divacky #include "llvm/CodeGen/MachineFunction.h" 17f22ef01cSRoman Divacky #include "llvm/Support/raw_ostream.h" 18f22ef01cSRoman Divacky 19f22ef01cSRoman Divacky using namespace llvm; 20f22ef01cSRoman Divacky 21f22ef01cSRoman Divacky namespace { 22f22ef01cSRoman Divacky /// MachineFunctionPrinterPass - This is a pass to dump the IR of a 23f22ef01cSRoman Divacky /// MachineFunction. 24f22ef01cSRoman Divacky /// 25f22ef01cSRoman Divacky struct MachineFunctionPrinterPass : public MachineFunctionPass { 26f22ef01cSRoman Divacky static char ID; 27f22ef01cSRoman Divacky 28f22ef01cSRoman Divacky raw_ostream &OS; 29f22ef01cSRoman Divacky const std::string Banner; 30f22ef01cSRoman Divacky 31f22ef01cSRoman Divacky MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner) 32f22ef01cSRoman Divacky : MachineFunctionPass(&ID), OS(os), Banner(banner) {} 33f22ef01cSRoman Divacky 34f22ef01cSRoman Divacky const char *getPassName() const { return "MachineFunction Printer"; } 35f22ef01cSRoman Divacky 36f22ef01cSRoman Divacky virtual void getAnalysisUsage(AnalysisUsage &AU) const { 37f22ef01cSRoman Divacky AU.setPreservesAll(); 38f22ef01cSRoman Divacky MachineFunctionPass::getAnalysisUsage(AU); 39f22ef01cSRoman Divacky } 40f22ef01cSRoman Divacky 41f22ef01cSRoman Divacky bool runOnMachineFunction(MachineFunction &MF) { 42f22ef01cSRoman Divacky OS << "# " << Banner << ":\n"; 43f22ef01cSRoman Divacky MF.print(OS); 44f22ef01cSRoman Divacky return false; 45f22ef01cSRoman Divacky } 46f22ef01cSRoman Divacky }; 47f22ef01cSRoman Divacky 48f22ef01cSRoman Divacky char MachineFunctionPrinterPass::ID = 0; 49f22ef01cSRoman Divacky } 50f22ef01cSRoman Divacky 51f22ef01cSRoman Divacky namespace llvm { 52f22ef01cSRoman Divacky /// Returns a newly-created MachineFunction Printer pass. The 53f22ef01cSRoman Divacky /// default banner is empty. 54f22ef01cSRoman Divacky /// 55f22ef01cSRoman Divacky MachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS, 56f22ef01cSRoman Divacky const std::string &Banner){ 57f22ef01cSRoman Divacky return new MachineFunctionPrinterPass(OS, Banner); 58f22ef01cSRoman Divacky } 59f22ef01cSRoman Divacky 60f22ef01cSRoman Divacky } 61