Add option to print per module instead of per method, so that
authorVikram S. Adve <vadve@cs.uiuc.edu>
Thu, 18 Oct 2001 18:13:49 +0000 (18:13 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Thu, 18 Oct 2001 18:13:49 +0000 (18:13 +0000)
global declarations are also printed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@891 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Transforms/PrintModulePass.h

index c8fb08f10a8891f0a29fc63d7ac2ca1d117be275..9c3274edc5171ad5fd7afa5725db8be2cd124787 100644 (file)
@@ -16,31 +16,40 @@ class PrintModulePass : public Pass {
   string Banner;          // String to print before each method
   ostream *Out;           // ostream to print on
   bool DeleteStream;      // Delete the ostream in our dtor?
+  bool PrintPerMethod;    // Print one method at a time rather than the whole?
   bool PrintAsBytecode;   // Print as bytecode rather than assembly?
 public:
-  inline PrintModulePass(const string &B, ostream *o = &cout, bool DS = false,
+  inline PrintModulePass(const string &B, ostream *o = &cout,
+                         bool DS = false,
+                         bool printPerMethod = true,
                          bool printAsBytecode = false)
-    : Banner(B), Out(o), DeleteStream(DS), PrintAsBytecode(printAsBytecode) {}
-
+    : Banner(B), Out(o), DeleteStream(DS),
+      PrintPerMethod(printPerMethod), PrintAsBytecode(printAsBytecode) {
+    if (PrintAsBytecode)
+      PrintPerMethod = false;
+  }
+  
   ~PrintModulePass() {
     if (DeleteStream) delete Out;
   }
-
+  
   // doPerMethodWork - This pass just prints a banner followed by the method as
   // it's processed.
   //
   bool doPerMethodWork(Method *M) {
-    if (! PrintAsBytecode)
+    if (PrintPerMethod)
       (*Out) << Banner << M;
     return false;
   }
-  
+
   // doPassFinalization - Virtual method overriden by subclasses to do any post
   // processing needed after all passes have run.
   //
-  bool doPassFinalization(Module *M) {
+  bool doPassFinalization(Module *module) {
     if (PrintAsBytecode)
-      WriteBytecodeToFile(M, *Out);
+      WriteBytecodeToFile(module, *Out);
+    else if (! PrintPerMethod)
+      (*Out) << Banner << module;
     return false;
   }
 };