mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 07:34:33 +00:00
[PM] Completely remove support for explicit 'require' methods on the
AnalysisManager. All this method did was assert something and we have a perfectly good way to trigger that assert from the query path. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194947 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ca1b7799aa
commit
8417e85781
@ -151,6 +151,9 @@ public:
|
||||
/// constructed around.
|
||||
template <typename PassT>
|
||||
const typename PassT::Result &getResult(Module *M) {
|
||||
assert(ModuleAnalysisPasses.count(PassT::ID()) &&
|
||||
"This analysis pass was not registered prior to being queried");
|
||||
|
||||
const AnalysisResultConcept<Module> &ResultConcept =
|
||||
getResultImpl(PassT::ID(), M);
|
||||
typedef AnalysisResultModel<Module, typename PassT::Result> ResultModelT;
|
||||
@ -163,6 +166,9 @@ public:
|
||||
/// re-run the analysis to produce a valid result.
|
||||
template <typename PassT>
|
||||
const typename PassT::Result &getResult(Function *F) {
|
||||
assert(FunctionAnalysisPasses.count(PassT::ID()) &&
|
||||
"This analysis pass was not registered prior to being queried");
|
||||
|
||||
const AnalysisResultConcept<Function> &ResultConcept =
|
||||
getResultImpl(PassT::ID(), F);
|
||||
typedef AnalysisResultModel<Function, typename PassT::Result> ResultModelT;
|
||||
@ -180,21 +186,6 @@ public:
|
||||
registerAnalysisPassImpl<PassT>(llvm_move(Pass));
|
||||
}
|
||||
|
||||
/// \brief Require that a particular analysis pass is provided by the manager.
|
||||
///
|
||||
/// This allows transform passes to assert ther requirements during
|
||||
/// construction and fail fast if the analysis manager doesn't provide the
|
||||
/// needed facilities.
|
||||
///
|
||||
/// We force the analysis manager to have these passes explicitly registered
|
||||
/// first to ensure that there is exactly one place in the code responsible
|
||||
/// for adding an analysis pass to the manager as all transforms will share
|
||||
/// a single pass within the manager and each may not be the canonical place
|
||||
/// to initialize such a pass.
|
||||
template <typename PassT> void requireAnalysisPass() {
|
||||
requireAnalysisPassImpl<PassT>();
|
||||
}
|
||||
|
||||
/// \brief Invalidate a specific analysis pass for an IR module.
|
||||
///
|
||||
/// Note that the analysis result can disregard invalidation.
|
||||
@ -334,22 +325,6 @@ private:
|
||||
new AnalysisPassModel<PassT>(llvm_move(Pass));
|
||||
}
|
||||
|
||||
/// \brief Module pass specific implementation of requirement declaration.
|
||||
template <typename PassT>
|
||||
typename enable_if<is_same<typename PassT::IRUnitT, Module> >::type
|
||||
requireAnalysisPassImpl() {
|
||||
assert(ModuleAnalysisPasses.count(PassT::ID()) &&
|
||||
"This analysis pass was not registered prior to being required");
|
||||
}
|
||||
|
||||
/// \brief Function pass specific implementation of requirement declaration.
|
||||
template <typename PassT>
|
||||
typename enable_if<is_same<typename PassT::IRUnitT, Function> >::type
|
||||
requireAnalysisPassImpl() {
|
||||
assert(FunctionAnalysisPasses.count(PassT::ID()) &&
|
||||
"This analysis pass was not registered prior to being required");
|
||||
}
|
||||
|
||||
|
||||
/// \brief Map type from module analysis pass ID to pass concept pointer.
|
||||
typedef DenseMap<void *, polymorphic_ptr<AnalysisPassConcept<Module> > >
|
||||
|
@ -63,7 +63,6 @@ struct TestModulePass {
|
||||
struct TestFunctionPass {
|
||||
TestFunctionPass(AnalysisManager &AM, int &RunCount, int &AnalyzedInstrCount)
|
||||
: AM(AM), RunCount(RunCount), AnalyzedInstrCount(AnalyzedInstrCount) {
|
||||
AM.requireAnalysisPass<TestAnalysisPass>();
|
||||
}
|
||||
|
||||
bool run(Function *F) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user