15c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene//===-- MachineFunctionPrinterPass.cpp ------------------------------------===// 25c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene// 35c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene// The LLVM Compiler Infrastructure 45c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene// 55c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene// This file is distributed under the University of Illinois Open Source 65c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene// License. See LICENSE.TXT for details. 75c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene// 85c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene//===----------------------------------------------------------------------===// 95c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene// 105c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene// MachineFunctionPrinterPass implementation. 115c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene// 125c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene//===----------------------------------------------------------------------===// 135c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 145c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene#include "llvm/CodeGen/Passes.h" 155c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene#include "llvm/CodeGen/MachineFunction.h" 16d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/CodeGen/MachineFunctionPass.h" 179389ec7375eb184ad017b7a1f09600cc4c2be4cdJakob Stoklund Olesen#include "llvm/CodeGen/SlotIndexes.h" 186e1b8128505711276a87e96f6bffb818b435cbd5Bob Wilson#include "llvm/Support/Debug.h" 19d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Support/raw_ostream.h" 205c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 215c8aa950fe3484b6e115647328c196f8be64f9edDavid Greeneusing namespace llvm; 225c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 235c8aa950fe3484b6e115647328c196f8be64f9edDavid Greenenamespace { 245c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene/// MachineFunctionPrinterPass - This is a pass to dump the IR of a 255c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene/// MachineFunction. 265c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene/// 275c8aa950fe3484b6e115647328c196f8be64f9edDavid Greenestruct MachineFunctionPrinterPass : public MachineFunctionPass { 285c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene static char ID; 295c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 305c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene raw_ostream &OS; 315c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene const std::string Banner; 325c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 336e1b8128505711276a87e96f6bffb818b435cbd5Bob Wilson MachineFunctionPrinterPass() : MachineFunctionPass(ID), OS(dbgs()) { } 345c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner) 3590c579de5a383cee278acc3f7e7b9d0a656e6a35Owen Anderson : MachineFunctionPass(ID), OS(os), Banner(banner) {} 365c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 375c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene const char *getPassName() const { return "MachineFunction Printer"; } 385c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 395c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene virtual void getAnalysisUsage(AnalysisUsage &AU) const { 405c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene AU.setPreservesAll(); 415c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene MachineFunctionPass::getAnalysisUsage(AU); 425c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene } 435c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 445c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene bool runOnMachineFunction(MachineFunction &MF) { 455c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene OS << "# " << Banner << ":\n"; 469389ec7375eb184ad017b7a1f09600cc4c2be4cdJakob Stoklund Olesen MF.print(OS, getAnalysisIfAvailable<SlotIndexes>()); 475c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene return false; 485c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene } 495c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene}; 505c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 515c8aa950fe3484b6e115647328c196f8be64f9edDavid Greenechar MachineFunctionPrinterPass::ID = 0; 525c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene} 535c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 5463a4c24616fafa2b86d6391308ffd93e012115e4Benjamin Kramerchar &llvm::MachineFunctionPrinterPassID = MachineFunctionPrinterPass::ID; 556e1b8128505711276a87e96f6bffb818b435cbd5Bob WilsonINITIALIZE_PASS(MachineFunctionPrinterPass, "print-machineinstrs", 566e1b8128505711276a87e96f6bffb818b435cbd5Bob Wilson "Machine Function Printer", false, false) 576e1b8128505711276a87e96f6bffb818b435cbd5Bob Wilson 585c8aa950fe3484b6e115647328c196f8be64f9edDavid Greenenamespace llvm { 595c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene/// Returns a newly-created MachineFunction Printer pass. The 605c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene/// default banner is empty. 615c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene/// 625c8aa950fe3484b6e115647328c196f8be64f9edDavid GreeneMachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS, 635c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene const std::string &Banner){ 645c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene return new MachineFunctionPrinterPass(OS, Banner); 655c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene} 665c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene 675c8aa950fe3484b6e115647328c196f8be64f9edDavid Greene} 68