+
+ bool runOnModule(Module &M) {
+ (*Out) << M << std::flush;
+ return false;
+ }
+
+ virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+ AU.setPreservesAll();
+ }
+};
+
+class PrintFunctionPass : public FunctionPass {
+ std::string Banner; // String to print before each function
+ OStream *Out; // ostream to print on
+ bool DeleteStream; // Delete the ostream in our dtor?
+public:
+ static char ID;
+ PrintFunctionPass() : FunctionPass(intptr_t(&ID)), Banner(""), Out(&cerr),
+ DeleteStream(false) {}
+ PrintFunctionPass(const std::string &B, OStream *o = &cout,
+ bool DS = false)
+ : FunctionPass(intptr_t(&ID)), Banner(B), Out(o), DeleteStream(DS) {}
+
+ inline ~PrintFunctionPass() {