#ifndef LLVM_PASS_H
#define LLVM_PASS_H
+#include "llvm/Support/Streams.h"
#include <vector>
#include <map>
#include <iosfwd>
/// provide the Module* in case the analysis doesn't need it it can just be
/// ignored.
///
+ void print(llvm_ostream &O, const Module *M) const {
+ if (O.stream()) print(*O.stream(), M);
+ }
virtual void print(std::ostream &O, const Module *M) const;
void dump() const; // dump - call print(std::cerr, 0);
///
bool run(Function &F);
-private:
+protected:
template<typename Trait> friend class PassManagerT;
friend class ModulePassManager;
friend class FunctionPassManagerT;
/// other basic block in the function.
/// 3. Optimizations conform to all of the constraints of FunctionPasses.
///
-struct BasicBlockPass : public FunctionPass {
+class BasicBlockPass : public FunctionPass {
+public:
/// doInitialization - Virtual method overridden by subclasses to do
/// any necessary per-module initialization.
///
template<typename Trait> friend class PassManagerT;
friend class FunctionPassManagerT;
friend class BasicBlockPassManager;
+ virtual void addToPassManager(ModulePassManager *PM, AnalysisUsage &AU) {
+ FunctionPass::addToPassManager(PM, AU);
+ }
virtual void addToPassManager(FunctionPassManagerT *PM, AnalysisUsage &AU);
virtual void addToPassManager(BasicBlockPassManager *PM,AnalysisUsage &AU);
};