LLVM: include/llvm/CodeGen/MachineOutliner.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#ifndef LLVM_CODEGEN_MACHINEOUTLINER_H
16#define LLVM_CODEGEN_MACHINEOUTLINER_H
17
22#include <initializer_list>
23
24namespace llvm {
26
27
28
29
30
31
32
33
35
36
37
39private:
40
41 unsigned StartIdx = 0;
42
43
44 unsigned Len = 0;
45
46
48
49
51
52
54
55
56
57 unsigned CallOverhead = 0;
58
59
60
61
62
63
65
66
67
68
69
71
72
73 bool FromEndOfBlockToStartOfSeqWasSet = false;
74
75
76 bool InSeqWasSet = false;
77
78
80 assert(MBB->getParent()->getRegInfo().tracksLiveness() &&
81 "Candidate's Machine Function must track liveness");
82
83 if (FromEndOfBlockToStartOfSeqWasSet)
84 return;
85 FromEndOfBlockToStartOfSeqWasSet = true;
86 FromEndOfBlockToStartOfSeq.init(TRI);
87 FromEndOfBlockToStartOfSeq.addLiveOuts(*MBB);
88
89
92 FromEndOfBlockToStartOfSeq.stepBackward(MI);
93 }
94
95
97 assert(MBB->getParent()->getRegInfo().tracksLiveness() &&
98 "Candidate's Machine Function must track liveness");
99
100 if (InSeqWasSet)
101 return;
102 InSeqWasSet = true;
103 InSeq.init(TRI);
104 for (auto &MI : *this)
105 InSeq.accumulate(MI);
106 }
107
108public:
109
110
112
113
114
116
117
119
120
122
123
125
126
127 unsigned getEndIdx() const { return StartIdx + Len - 1; }
128
129
130
133 CallOverhead = CO;
134 }
135
136
138
141
146
147
148
149
150
151
152
153
154
155
156
157
158
161 if (!FromEndOfBlockToStartOfSeqWasSet)
162 initFromEndOfBlockToStartOfSeq(TRI);
163 return FromEndOfBlockToStartOfSeq.available(Reg);
164 }
165
166
167
170 if (!FromEndOfBlockToStartOfSeqWasSet)
171 initFromEndOfBlockToStartOfSeq(TRI);
173 return !FromEndOfBlockToStartOfSeq.available(Reg);
174 });
175 }
176
177
178
179
180
181
182
183
184
186 if (!InSeqWasSet)
187 initInSeq(TRI);
188 return InSeq.available(Reg);
189 }
190
191
192
193
194
195
196
197
199
204 : StartIdx(StartIdx), Len(Len), FirstInst(FirstInst), LastInst(LastInst),
207
208
209
213
214};
215
216
217
219
220public:
222
223
224
226
227
228
230
231
233
234
236
237
239
240
241
243 unsigned CallOverhead = 0;
245 CallOverhead += C.getCallOverhead();
247 }
248
249
253
254
255
259 return (NotOutlinedCost < OutlinedCost) ? 0
260 : NotOutlinedCost - OutlinedCost;
261 }
262
263
265
274
277};
278
279
280
285
287
288
289
290
291
296
297
298
301 unsigned CallOverhead =
303 ? 0
306 }
307
310};
311
312}
313}
314
315#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
Register const TargetRegisterInfo * TRI
A set of register units used to track register liveness.
MachineInstrBundleIterator< MachineInstr, true > reverse_iterator
MachineInstrBundleIterator< MachineInstr > iterator
Representation of each machine instruction.
Wrapper class representing virtual and physical registers.
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
@ C
The default llvm calling convention, compatible with C.
Definition MachineOutliner.h:25
InstrType
Represents how an instruction should be mapped by the outliner.
Definition MachineOutliner.h:34
@ Legal
Definition MachineOutliner.h:34
@ LegalTerminator
Definition MachineOutliner.h:34
@ Illegal
Definition MachineOutliner.h:34
@ Invisible
Definition MachineOutliner.h:34
This is an optimization pass for GlobalISel generic memory operations.
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
An individual sequence of instructions to be replaced with a call to an outlined function.
Definition MachineOutliner.h:38
unsigned Flags
Target-specific flags for this Candidate's MBB.
Definition MachineOutliner.h:118
MachineInstr & front()
Definition MachineOutliner.h:142
bool isAnyUnavailableAcrossOrOutOfSeq(std::initializer_list< Register > Regs, const TargetRegisterInfo &TRI)
Definition MachineOutliner.h:168
unsigned getCallOverhead() const
Returns the call overhead of this candidate if it is in the list.
Definition MachineOutliner.h:137
void setCallInfo(unsigned CID, unsigned CO)
Set the CallConstructionID and CallOverhead of this candidate to CID and CO respectively.
Definition MachineOutliner.h:131
unsigned Benefit
The number of instructions that would be saved by outlining every candidate of this type.
Definition MachineOutliner.h:198
MachineBasicBlock * getMBB() const
Definition MachineOutliner.h:145
MachineFunction * getMF() const
Definition MachineOutliner.h:144
MachineInstr & back()
Definition MachineOutliner.h:143
MachineBasicBlock::iterator begin()
Definition MachineOutliner.h:139
bool operator<(const Candidate &RHS) const
Used to ensure that Candidates are outlined in an order that preserves the start and end indices of o...
Definition MachineOutliner.h:210
unsigned getEndIdx() const
Return the end index of this candidate.
Definition MachineOutliner.h:127
Candidate(unsigned StartIdx, unsigned Len, MachineBasicBlock::iterator &FirstInst, MachineBasicBlock::iterator &LastInst, MachineBasicBlock *MBB, unsigned FunctionIdx, unsigned Flags)
Definition MachineOutliner.h:200
unsigned CallConstructionID
Identifier denoting the instructions to emit to call an outlined function from this point.
Definition MachineOutliner.h:115
bool isAvailableInsideSeq(Register Reg, const TargetRegisterInfo &TRI)
Definition MachineOutliner.h:185
unsigned getStartIdx() const
Return the start index of this candidate.
Definition MachineOutliner.h:124
MachineBasicBlock::iterator end()
Definition MachineOutliner.h:140
bool isAvailableAcrossAndOutOfSeq(Register Reg, const TargetRegisterInfo &TRI)
Definition MachineOutliner.h:159
unsigned getLength() const
Return the number of instructions in this Candidate.
Definition MachineOutliner.h:121
unsigned FunctionIdx
The index of this Candidate's OutlinedFunction in the list of OutlinedFunctions.
Definition MachineOutliner.h:111
~GlobalOutlinedFunction() override=default
unsigned GlobalOccurrenceCount
Definition MachineOutliner.h:286
GlobalOutlinedFunction(std::unique_ptr< OutlinedFunction > OF, unsigned GlobalOccurrenceCount)
Definition MachineOutliner.h:282
unsigned getOccurrenceCount() const override
Return the number of times that appear globally.
Definition MachineOutliner.h:292
unsigned getOutliningCost() const override
Return the outlining cost using the global occurrence count with the same cost as the first (unique) ...
Definition MachineOutliner.h:299
GlobalOutlinedFunction()=delete
virtual unsigned getOccurrenceCount() const
Return the number of candidates for this OutlinedFunction.
Definition MachineOutliner.h:238
virtual unsigned getOutliningCost() const
Return the number of bytes it would take to outline this function.
Definition MachineOutliner.h:242
unsigned getBenefit() const
Return the number of instructions that would be saved by outlining this function.
Definition MachineOutliner.h:256
unsigned getNotOutlinedCost() const
Return the size in bytes of the unoutlined sequences.
Definition MachineOutliner.h:250
OutlinedFunction()=delete
MachineFunction * MF
The actual outlined function created.
Definition MachineOutliner.h:225
unsigned FrameConstructionID
Target-defined identifier for constructing a frame for this function.
Definition MachineOutliner.h:235
unsigned getNumInstrs() const
Return the number of instructions in this sequence.
Definition MachineOutliner.h:264
OutlinedFunction(std::vector< Candidate > &Candidates, unsigned SequenceSize, unsigned FrameOverhead, unsigned FrameConstructionID)
Definition MachineOutliner.h:266
unsigned FrameOverhead
Target-defined overhead of constructing a frame for this function.
Definition MachineOutliner.h:232
unsigned SequenceSize
Represents the size of a sequence in bytes.
Definition MachineOutliner.h:229
virtual ~OutlinedFunction()=default
std::vector< Candidate > Candidates
Definition MachineOutliner.h:221