LLVM 24.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;
27class VirtRegMap;
28template <typename T> class SmallVectorImpl;
29
30class PrintMIRPass : public RequiredPassInfoMixin<PrintMIRPass> {
31 raw_ostream &OS;
32
33 void printMachineFunction(MachineFunction &MF, FunctionAnalysisManager &FAM,
35
36public:
37 PrintMIRPass(raw_ostream &OS) : OS(OS) {}
38 /// Print the module and all its machine functions.
40};
41
42/// Print LLVM IR using the MIR serialization format to the given output stream.
43LLVM_ABI void printMIR(raw_ostream &OS, const Module &M);
44
45/// Print MIR using Legacy Pass Manager (uses MachineModuleInfo).
46/// If \p VRM is non-null, the printer will serialize VirtRegMap state
47/// (split-from, assigned-phys).
48LLVM_ABI void printMIR(raw_ostream &OS, const MachineModuleInfo &MMI,
49 const MachineFunction &MF,
50 const VirtRegMap *VRM = nullptr);
51
52/// Print MIR using New Pass Manager (uses FunctionAnalysisManager).
53/// If \p VRM is non-null, the printer will serialize VirtRegMap state
54/// (split-from, assigned-phys).
55LLVM_ABI void printMIR(raw_ostream &OS, FunctionAnalysisManager &FAM,
56 const MachineFunction &MF,
57 const VirtRegMap *VRM = nullptr);
58
59/// Determine a possible list of successors of a basic block based on the
60/// basic block machine operand being used inside the block. This should give
61/// you the correct list of successor blocks in most cases except for things
62/// like jump tables where the basic block references can't easily be found.
63/// The MIRPRinter will skip printing successors if they match the result of
64/// this function and the parser will use this function to construct a list if
65/// it is missing.
66LLVM_ABI void guessSuccessors(const MachineBasicBlock &MBB,
67 SmallVectorImpl<MachineBasicBlock *> &Result,
68 bool &IsFallthrough);
69
70} // end namespace llvm
71
72#endif
MachineBasicBlock & MBB
#define LLVM_ABI
Definition Compiler.h:211
Machine Check Debug Module
FunctionAnalysisManager FAM
ModuleAnalysisManager MAM
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:68
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
Print the module and all its machine functions.
PrintMIRPass(raw_ostream &OS)
Definition MIRPrinter.h:37
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...
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
A CRTP mix-in for passes that should not be skipped.