Home | History | Annotate | Download | only in CodeGen
      1 //===-- MachineFunctionPrinterPass.cpp ------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // MachineFunctionPrinterPass implementation.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "llvm/CodeGen/Passes.h"
     15 #include "llvm/CodeGen/MachineFunction.h"
     16 #include "llvm/CodeGen/MachineFunctionPass.h"
     17 #include "llvm/CodeGen/SlotIndexes.h"
     18 #include "llvm/Support/Debug.h"
     19 #include "llvm/Support/raw_ostream.h"
     20 
     21 using namespace llvm;
     22 
     23 namespace {
     24 /// MachineFunctionPrinterPass - This is a pass to dump the IR of a
     25 /// MachineFunction.
     26 ///
     27 struct MachineFunctionPrinterPass : public MachineFunctionPass {
     28   static char ID;
     29 
     30   raw_ostream &OS;
     31   const std::string Banner;
     32 
     33   MachineFunctionPrinterPass() : MachineFunctionPass(ID), OS(dbgs()) { }
     34   MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner)
     35       : MachineFunctionPass(ID), OS(os), Banner(banner) {}
     36 
     37   const char *getPassName() const override { return "MachineFunction Printer"; }
     38 
     39   void getAnalysisUsage(AnalysisUsage &AU) const override {
     40     AU.setPreservesAll();
     41     MachineFunctionPass::getAnalysisUsage(AU);
     42   }
     43 
     44   bool runOnMachineFunction(MachineFunction &MF) override {
     45     OS << "# " << Banner << ":\n";
     46     MF.print(OS, getAnalysisIfAvailable<SlotIndexes>());
     47     return false;
     48   }
     49 };
     50 
     51 char MachineFunctionPrinterPass::ID = 0;
     52 }
     53 
     54 char &llvm::MachineFunctionPrinterPassID = MachineFunctionPrinterPass::ID;
     55 INITIALIZE_PASS(MachineFunctionPrinterPass, "print-machineinstrs",
     56                 "Machine Function Printer", false, false)
     57 
     58 namespace llvm {
     59 /// Returns a newly-created MachineFunction Printer pass. The
     60 /// default banner is empty.
     61 ///
     62 MachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS,
     63                                                       const std::string &Banner){
     64   return new MachineFunctionPrinterPass(OS, Banner);
     65 }
     66 
     67 }
     68