@@ -108,6 +108,15 @@ bool MachineFunctionAnalysisManagerModuleProxy::Result::invalidate(
108
108
ModuleAnalysisManager::Invalidator &Inv);
109
109
extern template class InnerAnalysisManagerProxy <MachineFunctionAnalysisManager,
110
110
Module>;
111
+ using MachineFunctionAnalysisManagerFunctionProxy =
112
+ InnerAnalysisManagerProxy<MachineFunctionAnalysisManager, Function>;
113
+
114
+ template <>
115
+ bool MachineFunctionAnalysisManagerFunctionProxy::Result::invalidate (
116
+ Function &F, const PreservedAnalyses &PA,
117
+ FunctionAnalysisManager::Invalidator &Inv);
118
+ extern template class InnerAnalysisManagerProxy <MachineFunctionAnalysisManager,
119
+ Function>;
111
120
112
121
extern template class OuterAnalysisManagerProxy <ModuleAnalysisManager,
113
122
MachineFunction>;
@@ -129,16 +138,6 @@ class FunctionAnalysisManagerMachineFunctionProxy
129
138
Arg.FAM = nullptr ;
130
139
}
131
140
132
- ~Result () {
133
- // FAM is cleared in a moved from state where there is nothing to do.
134
- if (!FAM)
135
- return ;
136
-
137
- // Clear out the analysis manager if we're being destroyed -- it means we
138
- // didn't even see an invalidate call when we got invalidated.
139
- FAM->clear ();
140
- }
141
-
142
141
Result &operator =(Result &&RHS) {
143
142
FAM = RHS.FAM ;
144
143
// We have to null out the analysis manager in the moved-from state
@@ -187,18 +186,18 @@ class FunctionAnalysisManagerMachineFunctionProxy
187
186
FunctionAnalysisManager *FAM;
188
187
};
189
188
190
- class ModuleToMachineFunctionPassAdaptor
191
- : public PassInfoMixin<ModuleToMachineFunctionPassAdaptor > {
189
+ class FunctionToMachineFunctionPassAdaptor
190
+ : public PassInfoMixin<FunctionToMachineFunctionPassAdaptor > {
192
191
public:
193
192
using PassConceptT =
194
193
detail::PassConcept<MachineFunction, MachineFunctionAnalysisManager>;
195
194
196
- explicit ModuleToMachineFunctionPassAdaptor (
195
+ explicit FunctionToMachineFunctionPassAdaptor (
197
196
std::unique_ptr<PassConceptT> Pass)
198
197
: Pass(std::move(Pass)) {}
199
198
200
- // / Runs the function pass across every function in the module .
201
- PreservedAnalyses run (Module &M, ModuleAnalysisManager &AM );
199
+ // / Runs the function pass across every function in the function .
200
+ PreservedAnalyses run (Function &F, FunctionAnalysisManager &FAM );
202
201
void printPipeline (raw_ostream &OS,
203
202
function_ref<StringRef(StringRef)> MapClassName2PassName);
204
203
@@ -209,14 +208,14 @@ class ModuleToMachineFunctionPassAdaptor
209
208
};
210
209
211
210
template <typename MachineFunctionPassT>
212
- ModuleToMachineFunctionPassAdaptor
213
- createModuleToMachineFunctionPassAdaptor (MachineFunctionPassT &&Pass) {
211
+ FunctionToMachineFunctionPassAdaptor
212
+ createFunctionToMachineFunctionPassAdaptor (MachineFunctionPassT &&Pass) {
214
213
using PassModelT = detail::PassModel<MachineFunction, MachineFunctionPassT,
215
214
MachineFunctionAnalysisManager>;
216
215
// Do not use make_unique, it causes too many template instantiations,
217
216
// causing terrible compile times.
218
- return ModuleToMachineFunctionPassAdaptor (
219
- std::unique_ptr<ModuleToMachineFunctionPassAdaptor ::PassConceptT>(
217
+ return FunctionToMachineFunctionPassAdaptor (
218
+ std::unique_ptr<FunctionToMachineFunctionPassAdaptor ::PassConceptT>(
220
219
new PassModelT (std::forward<MachineFunctionPassT>(Pass))));
221
220
}
222
221
@@ -244,6 +243,10 @@ extern template class PassManager<MachineFunction>;
244
243
// / Convenience typedef for a pass manager over functions.
245
244
using MachineFunctionPassManager = PassManager<MachineFunction>;
246
245
246
+ // / Returns the minimum set of Analyses that all machine function passes must
247
+ // / preserve.
248
+ PreservedAnalyses getMachineFunctionPassPreservedAnalyses ();
249
+
247
250
} // end namespace llvm
248
251
249
252
#endif // LLVM_CODEGEN_MACHINEPASSMANAGER_H
0 commit comments