109467b48Spatrick //===-- MachineFunctionPrinterPass.cpp ------------------------------------===//
209467b48Spatrick //
309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609467b48Spatrick //
709467b48Spatrick //===----------------------------------------------------------------------===//
809467b48Spatrick //
909467b48Spatrick // MachineFunctionPrinterPass implementation.
1009467b48Spatrick //
1109467b48Spatrick //===----------------------------------------------------------------------===//
1209467b48Spatrick
1309467b48Spatrick #include "llvm/CodeGen/MachineFunction.h"
1409467b48Spatrick #include "llvm/CodeGen/MachineFunctionPass.h"
1509467b48Spatrick #include "llvm/CodeGen/Passes.h"
1609467b48Spatrick #include "llvm/CodeGen/SlotIndexes.h"
17*73471bf0Spatrick #include "llvm/IR/PrintPasses.h"
1809467b48Spatrick #include "llvm/InitializePasses.h"
1909467b48Spatrick #include "llvm/Support/Debug.h"
2009467b48Spatrick #include "llvm/Support/raw_ostream.h"
2109467b48Spatrick
2209467b48Spatrick using namespace llvm;
2309467b48Spatrick
2409467b48Spatrick namespace {
2509467b48Spatrick /// MachineFunctionPrinterPass - This is a pass to dump the IR of a
2609467b48Spatrick /// MachineFunction.
2709467b48Spatrick ///
2809467b48Spatrick struct MachineFunctionPrinterPass : public MachineFunctionPass {
2909467b48Spatrick static char ID;
3009467b48Spatrick
3109467b48Spatrick raw_ostream &OS;
3209467b48Spatrick const std::string Banner;
3309467b48Spatrick
MachineFunctionPrinterPass__anon8bca6f610111::MachineFunctionPrinterPass3409467b48Spatrick MachineFunctionPrinterPass() : MachineFunctionPass(ID), OS(dbgs()) { }
MachineFunctionPrinterPass__anon8bca6f610111::MachineFunctionPrinterPass3509467b48Spatrick MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner)
3609467b48Spatrick : MachineFunctionPass(ID), OS(os), Banner(banner) {}
3709467b48Spatrick
getPassName__anon8bca6f610111::MachineFunctionPrinterPass3809467b48Spatrick StringRef getPassName() const override { return "MachineFunction Printer"; }
3909467b48Spatrick
getAnalysisUsage__anon8bca6f610111::MachineFunctionPrinterPass4009467b48Spatrick void getAnalysisUsage(AnalysisUsage &AU) const override {
4109467b48Spatrick AU.setPreservesAll();
4209467b48Spatrick AU.addUsedIfAvailable<SlotIndexes>();
4309467b48Spatrick MachineFunctionPass::getAnalysisUsage(AU);
4409467b48Spatrick }
4509467b48Spatrick
runOnMachineFunction__anon8bca6f610111::MachineFunctionPrinterPass4609467b48Spatrick bool runOnMachineFunction(MachineFunction &MF) override {
47*73471bf0Spatrick if (!isFunctionInPrintList(MF.getName()))
4809467b48Spatrick return false;
4909467b48Spatrick OS << "# " << Banner << ":\n";
5009467b48Spatrick MF.print(OS, getAnalysisIfAvailable<SlotIndexes>());
5109467b48Spatrick return false;
5209467b48Spatrick }
5309467b48Spatrick };
5409467b48Spatrick
5509467b48Spatrick char MachineFunctionPrinterPass::ID = 0;
5609467b48Spatrick }
5709467b48Spatrick
5809467b48Spatrick char &llvm::MachineFunctionPrinterPassID = MachineFunctionPrinterPass::ID;
5909467b48Spatrick INITIALIZE_PASS(MachineFunctionPrinterPass, "machineinstr-printer",
6009467b48Spatrick "Machine Function Printer", false, false)
6109467b48Spatrick
6209467b48Spatrick namespace llvm {
6309467b48Spatrick /// Returns a newly-created MachineFunction Printer pass. The
6409467b48Spatrick /// default banner is empty.
6509467b48Spatrick ///
createMachineFunctionPrinterPass(raw_ostream & OS,const std::string & Banner)6609467b48Spatrick MachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS,
6709467b48Spatrick const std::string &Banner){
6809467b48Spatrick return new MachineFunctionPrinterPass(OS, Banner);
6909467b48Spatrick }
7009467b48Spatrick
7109467b48Spatrick }
72