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