#include "llvm/PassManager.h"
#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/DenseMap.h"
#include <deque>
#include <map>
/// then return NULL.
Pass *findAnalysisPass(AnalysisID AID);
+ /// Find analysis usage information for the pass P.
+ AnalysisUsage *findAnalysisUsage(Pass *P);
+
explicit PMTopLevelManager(enum TopLevelManagerType t);
virtual ~PMTopLevelManager();
// Map to keep track of last user of the analysis pass.
// LastUser->second is the last user of Lastuser->first.
- std::map<Pass *, Pass *> LastUser;
+ DenseMap<Pass *, Pass *> LastUser;
+
+ // Map to keep track of passes that are last used by a pass.
+ // This inverse map is initialized at PM->run() based on
+ // LastUser map.
+ DenseMap<Pass *, SmallPtrSet<Pass *, 8> > InversedLastUser;
/// Immutable passes are managed by top level manager.
std::vector<ImmutablePass *> ImmutablePasses;
+
+ DenseMap<Pass *, AnalysisUsage *> AnUsageMap;
};