| //===-- MachineFunctionPrinterPass.cpp ------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // MachineFunctionPrinterPass implementation. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/CodeGen/MachineFunction.h" |
| #include "llvm/CodeGen/MachineFunctionPass.h" |
| #include "llvm/CodeGen/Passes.h" |
| #include "llvm/CodeGen/SlotIndexes.h" |
| #include "llvm/IR/IRPrintingPasses.h" |
| #include "llvm/InitializePasses.h" |
| #include "llvm/Support/Debug.h" |
| #include "llvm/Support/raw_ostream.h" |
| |
| using namespace llvm; |
| |
| namespace { |
| /// MachineFunctionPrinterPass - This is a pass to dump the IR of a |
| /// MachineFunction. |
| /// |
| struct MachineFunctionPrinterPass : public MachineFunctionPass { |
| static char ID; |
| |
| raw_ostream &OS; |
| const std::string Banner; |
| |
| MachineFunctionPrinterPass() : MachineFunctionPass(ID), OS(dbgs()) { } |
| MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner) |
| : MachineFunctionPass(ID), OS(os), Banner(banner) {} |
| |
| StringRef getPassName() const override { return "MachineFunction Printer"; } |
| |
| void getAnalysisUsage(AnalysisUsage &AU) const override { |
| AU.setPreservesAll(); |
| AU.addUsedIfAvailable<SlotIndexes>(); |
| MachineFunctionPass::getAnalysisUsage(AU); |
| } |
| |
| bool runOnMachineFunction(MachineFunction &MF) override { |
| if (!llvm::isFunctionInPrintList(MF.getName())) |
| return false; |
| OS << "# " << Banner << ":\n"; |
| MF.print(OS, getAnalysisIfAvailable<SlotIndexes>()); |
| return false; |
| } |
| }; |
| |
| char MachineFunctionPrinterPass::ID = 0; |
| } |
| |
| char &llvm::MachineFunctionPrinterPassID = MachineFunctionPrinterPass::ID; |
| INITIALIZE_PASS(MachineFunctionPrinterPass, "machineinstr-printer", |
| "Machine Function Printer", false, false) |
| |
| namespace llvm { |
| /// Returns a newly-created MachineFunction Printer pass. The |
| /// default banner is empty. |
| /// |
| MachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS, |
| const std::string &Banner){ |
| return new MachineFunctionPrinterPass(OS, Banner); |
| } |
| |
| } |