LLVM
22.0.0git
include
llvm
CodeGen
MachineFunctionPass.h
Go to the documentation of this file.
1
//===-- MachineFunctionPass.h - Pass for MachineFunctions --------*-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 defines the MachineFunctionPass class. MachineFunctionPass's are
10
// just FunctionPass's, except they operate on machine code as part of a code
11
// generator. Because they operate on machine code, not the LLVM
12
// representation, MachineFunctionPass's are not allowed to modify the LLVM
13
// representation. Due to this limitation, the MachineFunctionPass class takes
14
// care of declaring that no LLVM passes are invalidated.
15
//
16
//===----------------------------------------------------------------------===//
17
18
#ifndef LLVM_CODEGEN_MACHINEFUNCTIONPASS_H
19
#define LLVM_CODEGEN_MACHINEFUNCTIONPASS_H
20
21
#include "
llvm/CodeGen/MachineFunction.h
"
22
#include "
llvm/Pass.h
"
23
#include "
llvm/Support/Compiler.h
"
24
25
namespace
llvm
{
26
27
/// MachineFunctionPass - This class adapts the FunctionPass interface to
28
/// allow convenient creation of passes that operate on the MachineFunction
29
/// representation. Instead of overriding runOnFunction, subclasses
30
/// override runOnMachineFunction.
31
class
LLVM_ABI
MachineFunctionPass
:
public
FunctionPass
{
32
public
:
33
bool
doInitialization
(
Module
&)
override
{
34
// Cache the properties info at module-init time so we don't have to
35
// construct them for every function.
36
RequiredProperties = getRequiredProperties();
37
SetProperties = getSetProperties();
38
ClearedProperties = getClearedProperties();
39
return
false
;
40
}
41
protected
:
42
explicit
MachineFunctionPass
(
char
&
ID
) :
FunctionPass
(
ID
) {}
43
44
/// runOnMachineFunction - This method must be overloaded to perform the
45
/// desired machine code transformation or analysis.
46
///
47
virtual
bool
runOnMachineFunction
(
MachineFunction
&MF) = 0;
48
49
/// getAnalysisUsage - Subclasses that override getAnalysisUsage
50
/// must call this.
51
///
52
/// For MachineFunctionPasses, calling AU.preservesCFG() indicates that
53
/// the pass does not modify the MachineBasicBlock CFG.
54
///
55
void
getAnalysisUsage(
AnalysisUsage
&AU)
const override
;
56
57
virtual
MachineFunctionProperties
getRequiredProperties
()
const
{
58
return
MachineFunctionProperties
();
59
}
60
virtual
MachineFunctionProperties
getSetProperties
()
const
{
61
return
MachineFunctionProperties
();
62
}
63
virtual
MachineFunctionProperties
getClearedProperties
()
const
{
64
return
MachineFunctionProperties
();
65
}
66
67
private
:
68
MachineFunctionProperties
RequiredProperties;
69
MachineFunctionProperties
SetProperties;
70
MachineFunctionProperties
ClearedProperties;
71
72
/// createPrinterPass - Get a machine function printer pass.
73
Pass
*createPrinterPass(
raw_ostream
&O,
74
const
std::string &Banner)
const override
;
75
76
bool
runOnFunction
(
Function
&
F
)
override
;
77
};
78
79
}
// End llvm namespace
80
81
#endif
Compiler.h
LLVM_ABI
#define LLVM_ABI
Definition:
Compiler.h:213
runOnFunction
static bool runOnFunction(Function &F, bool PostInlining)
Definition:
EntryExitInstrumenter.cpp:103
F
#define F(x, y, z)
Definition:
MD5.cpp:55
MachineFunction.h
Pass.h
llvm::AnalysisUsage
Represent the analysis usage information of a pass.
Definition:
PassAnalysisSupport.h:48
llvm::FunctionPass
FunctionPass class - This class is used to implement most global optimizations.
Definition:
Pass.h:314
llvm::Function
Definition:
Function.h:64
llvm::MachineFunctionPass
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
Definition:
MachineFunctionPass.h:31
llvm::MachineFunctionPass::doInitialization
bool doInitialization(Module &) override
doInitialization - Virtual method overridden by subclasses to do any necessary initialization before ...
Definition:
MachineFunctionPass.h:33
llvm::MachineFunctionPass::getClearedProperties
virtual MachineFunctionProperties getClearedProperties() const
Definition:
MachineFunctionPass.h:63
llvm::MachineFunctionPass::MachineFunctionPass
MachineFunctionPass(char &ID)
Definition:
MachineFunctionPass.h:42
llvm::MachineFunctionPass::getSetProperties
virtual MachineFunctionProperties getSetProperties() const
Definition:
MachineFunctionPass.h:60
llvm::MachineFunctionPass::runOnMachineFunction
virtual bool runOnMachineFunction(MachineFunction &MF)=0
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformat...
llvm::MachineFunctionPass::getRequiredProperties
virtual MachineFunctionProperties getRequiredProperties() const
Definition:
MachineFunctionPass.h:57
llvm::MachineFunctionProperties
Properties which a MachineFunction may have at a given point in time.
Definition:
MachineFunction.h:137
llvm::MachineFunction
Definition:
MachineFunction.h:286
llvm::Module
A Module instance is used to store all the information related to an LLVM module.
Definition:
Module.h:67
llvm::Pass
Pass interface - Implemented by all 'passes'.
Definition:
Pass.h:99
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition:
raw_ostream.h:53
unsigned
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:
AddressRanges.h:18
Generated on Wed Sep 3 2025 01:15:51 for LLVM by
1.9.6