LLVM 22.0.0git
MIRPrinter.h
Go to the documentation of this file.
1//===- MIRPrinter.h - MIR serialization format printer ----------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares the functions that print out the LLVM IR and the machine
10// functions using the MIR serialization format.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_CODEGEN_MIRPRINTER_H
15#define LLVM_CODEGEN_MIRPRINTER_H
16
20
21namespace llvm {
22
24class MachineFunction;
26class Module;
27template <typename T> class SmallVectorImpl;
28
29class PrintMIRPreparePass : public PassInfoMixin<PrintMIRPreparePass> {
30 raw_ostream &OS;
31
32public:
35 static bool isRequired() { return true; }
36};
37
38class PrintMIRPass : public PassInfoMixin<PrintMIRPass> {
39 raw_ostream &OS;
40
41public:
42 PrintMIRPass(raw_ostream &OS = errs()) : OS(OS) {}
45 static bool isRequired() { return true; }
46};
47
48/// Print LLVM IR using the MIR serialization format to the given output stream.
49LLVM_ABI void printMIR(raw_ostream &OS, const Module &M);
50
51/// Print a machine function using the MIR serialization format to the given
52/// output stream.
53LLVM_ABI void printMIR(raw_ostream &OS, const MachineModuleInfo &MMI,
54 const MachineFunction &MF);
55
56/// Determine a possible list of successors of a basic block based on the
57/// basic block machine operand being used inside the block. This should give
58/// you the correct list of successor blocks in most cases except for things
59/// like jump tables where the basic block references can't easily be found.
60/// The MIRPRinter will skip printing successors if they match the result of
61/// this function and the parser will use this function to construct a list if
62/// it is missing.
63LLVM_ABI void guessSuccessors(const MachineBasicBlock &MBB,
64 SmallVectorImpl<MachineBasicBlock *> &Result,
65 bool &IsFallthrough);
66
67} // end namespace llvm
68
69#endif
MachineBasicBlock & MBB
#define LLVM_ABI
Definition Compiler.h:213
Machine Check Debug Module
This class contains meta information specific to a module.
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
LLVM_ABI PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PrintMIRPass(raw_ostream &OS=errs())
Definition MIRPrinter.h:42
static bool isRequired()
Definition MIRPrinter.h:45
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MFAM)
PrintMIRPreparePass(raw_ostream &OS=errs())
Definition MIRPrinter.h:33
static bool isRequired()
Definition MIRPrinter.h:35
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
This is an optimization pass for GlobalISel generic memory operations.
AnalysisManager< MachineFunction > MachineFunctionAnalysisManager
LLVM_ABI void printMIR(raw_ostream &OS, const Module &M)
Print LLVM IR using the MIR serialization format to the given output stream.
LLVM_ABI void guessSuccessors(const MachineBasicBlock &MBB, SmallVectorImpl< MachineBasicBlock * > &Result, bool &IsFallthrough)
Determine a possible list of successors of a basic block based on the basic block machine operand bei...
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition PassManager.h:70