58
58
59
59
namespace llvm {
60
60
61
+ namespace detail {
62
+
63
+ struct MachinePassConcept ;
64
+
65
+ }
66
+
67
+ class MachineFunction ;
61
68
class PreservedAnalyses ;
62
69
class StringRef ;
63
70
@@ -78,7 +85,12 @@ class PassInstrumentationCallbacks {
78
85
using BeforePassFunc = bool (StringRef, Any);
79
86
using BeforeSkippedPassFunc = void (StringRef, Any);
80
87
using BeforeNonSkippedPassFunc = void (StringRef, Any);
88
+ using BeforeNonSkippedMachineFunctionPassFunc =
89
+ void (const detail::MachinePassConcept &, MachineFunction &);
81
90
using AfterPassFunc = void (StringRef, Any, const PreservedAnalyses &);
91
+ using AfterMachineFunctionPassFunc = void (const detail::MachinePassConcept &,
92
+ MachineFunction &,
93
+ const PreservedAnalyses &);
82
94
using AfterPassInvalidatedFunc = void (StringRef, const PreservedAnalyses &);
83
95
using BeforeAnalysisFunc = void (StringRef, Any);
84
96
using AfterAnalysisFunc = void (StringRef, Any);
@@ -107,6 +119,11 @@ class PassInstrumentationCallbacks {
107
119
BeforeNonSkippedPassCallbacks.emplace_back (std::move (C));
108
120
}
109
121
122
+ template <typename CallableT>
123
+ void registerBeforeNonSkippedMachineFunctionPassCallback (CallableT C) {
124
+ BeforeNonSkippedMachineFunctionPassCallbacks.emplace_back (std::move (C));
125
+ }
126
+
110
127
template <typename CallableT>
111
128
void registerAfterPassCallback (CallableT C, bool ToFront = false ) {
112
129
if (ToFront)
@@ -115,6 +132,11 @@ class PassInstrumentationCallbacks {
115
132
AfterPassCallbacks.emplace_back (std::move (C));
116
133
}
117
134
135
+ template <typename CallableT>
136
+ void registerAfterMachineFunctionPassCallback (CallableT C) {
137
+ AfterMachineFunctionPassCallbacks.emplace_back (std::move (C));
138
+ }
139
+
118
140
template <typename CallableT>
119
141
void registerAfterPassInvalidatedCallback (CallableT C, bool ToFront = false ) {
120
142
if (ToFront)
@@ -166,8 +188,12 @@ class PassInstrumentationCallbacks {
166
188
// / These are run on passes that are about to be run.
167
189
SmallVector<llvm::unique_function<BeforeNonSkippedPassFunc>, 4 >
168
190
BeforeNonSkippedPassCallbacks;
191
+ SmallVector<llvm::unique_function<BeforeNonSkippedMachineFunctionPassFunc>, 4 >
192
+ BeforeNonSkippedMachineFunctionPassCallbacks;
169
193
// / These are run on passes that have just run.
170
194
SmallVector<llvm::unique_function<AfterPassFunc>, 4 > AfterPassCallbacks;
195
+ SmallVector<llvm::unique_function<AfterMachineFunctionPassFunc>, 4 >
196
+ AfterMachineFunctionPassCallbacks;
171
197
// / These are run passes that have just run on invalidated IR.
172
198
SmallVector<llvm::unique_function<AfterPassInvalidatedFunc>, 4 >
173
199
AfterPassInvalidatedCallbacks;
@@ -247,6 +273,9 @@ class PassInstrumentation {
247
273
return ShouldRun;
248
274
}
249
275
276
+ bool runBeforeMachineFunctionPass (const detail::MachinePassConcept &Pass,
277
+ MachineFunction &MF) const ;
278
+
250
279
// / AfterPass instrumentation point - takes \p Pass instance that has
251
280
// / just been executed and constant reference to \p IR it operates on.
252
281
// / \p IR is guaranteed to be valid at this point.
@@ -258,6 +287,10 @@ class PassInstrumentation {
258
287
C (Pass.name (), llvm::Any (&IR), PA);
259
288
}
260
289
290
+ void runAfterMachineFunctionPass (const detail::MachinePassConcept &Pass,
291
+ MachineFunction &MF,
292
+ const PreservedAnalyses &PA) const ;
293
+
261
294
// / AfterPassInvalidated instrumentation point - takes \p Pass instance
262
295
// / that has just been executed. For use when IR has been invalidated
263
296
// / by \p Pass execution.
0 commit comments