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/MachineFunction.h" 16139f7f9bSDimitry Andric #include "llvm/CodeGen/MachineFunctionPass.h" 177ae0e2c9SDimitry Andric #include "llvm/CodeGen/SlotIndexes.h" 187ae0e2c9SDimitry Andric #include "llvm/Support/Debug.h" 19139f7f9bSDimitry Andric #include "llvm/Support/raw_ostream.h" 20f22ef01cSRoman Divacky 21f22ef01cSRoman Divacky using namespace llvm; 22f22ef01cSRoman Divacky 23f22ef01cSRoman Divacky namespace { 24f22ef01cSRoman Divacky /// MachineFunctionPrinterPass - This is a pass to dump the IR of a 25f22ef01cSRoman Divacky /// MachineFunction. 26f22ef01cSRoman Divacky /// 27f22ef01cSRoman Divacky struct MachineFunctionPrinterPass : public MachineFunctionPass { 28f22ef01cSRoman Divacky static char ID; 29f22ef01cSRoman Divacky 30f22ef01cSRoman Divacky raw_ostream &OS; 31f22ef01cSRoman Divacky const std::string Banner; 32f22ef01cSRoman Divacky 337ae0e2c9SDimitry Andric MachineFunctionPrinterPass() : MachineFunctionPass(ID), OS(dbgs()) { } 34f22ef01cSRoman Divacky MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner) 35e580952dSDimitry Andric : MachineFunctionPass(ID), OS(os), Banner(banner) {} 36f22ef01cSRoman Divacky 3791bc56edSDimitry Andric const char *getPassName() const override { return "MachineFunction Printer"; } 38f22ef01cSRoman Divacky 3991bc56edSDimitry Andric void getAnalysisUsage(AnalysisUsage &AU) const override { 40f22ef01cSRoman Divacky AU.setPreservesAll(); 41f22ef01cSRoman Divacky MachineFunctionPass::getAnalysisUsage(AU); 42f22ef01cSRoman Divacky } 43f22ef01cSRoman Divacky 4491bc56edSDimitry Andric bool runOnMachineFunction(MachineFunction &MF) override { 45f22ef01cSRoman Divacky OS << "# " << Banner << ":\n"; 467ae0e2c9SDimitry Andric MF.print(OS, getAnalysisIfAvailable<SlotIndexes>()); 47f22ef01cSRoman Divacky return false; 48f22ef01cSRoman Divacky } 49f22ef01cSRoman Divacky }; 50f22ef01cSRoman Divacky 51f22ef01cSRoman Divacky char MachineFunctionPrinterPass::ID = 0; 52f22ef01cSRoman Divacky } 53f22ef01cSRoman Divacky 543861d79fSDimitry Andric char &llvm::MachineFunctionPrinterPassID = MachineFunctionPrinterPass::ID; 557ae0e2c9SDimitry Andric INITIALIZE_PASS(MachineFunctionPrinterPass, "print-machineinstrs", 567ae0e2c9SDimitry Andric "Machine Function Printer", false, false) 577ae0e2c9SDimitry Andric 58f22ef01cSRoman Divacky namespace llvm { 59f22ef01cSRoman Divacky /// Returns a newly-created MachineFunction Printer pass. The 60f22ef01cSRoman Divacky /// default banner is empty. 61f22ef01cSRoman Divacky /// 62f22ef01cSRoman Divacky MachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS, 63f22ef01cSRoman Divacky const std::string &Banner){ 64f22ef01cSRoman Divacky return new MachineFunctionPrinterPass(OS, Banner); 65f22ef01cSRoman Divacky } 66f22ef01cSRoman Divacky 67f22ef01cSRoman Divacky } 68