Privatize PrintModulePass and PrintFunctionPass and add
authorDaniel Dunbar <daniel@zuster.org>
Tue, 21 Oct 2008 23:33:38 +0000 (23:33 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 21 Oct 2008 23:33:38 +0000 (23:33 +0000)
createPrintModulePass and createPrintFunctionPass.
 - So clients who compile w/o RTTI can use them.

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

include/llvm/Assembly/PrintModulePass.h
include/llvm/LinkAllPasses.h
lib/CodeGen/LLVMTargetMachine.cpp
lib/VMCore/AsmWriter.cpp
lib/VMCore/PrintModulePass.cpp [new file with mode: 0644]
tools/llvm-dis/llvm-dis.cpp
tools/opt/opt.cpp

index ee5cff509aaa675c48cf6b074ab483db615308f7..7f5acf418b7a633aa394c18b594e06b9288067be 100644 (file)
 #ifndef LLVM_ASSEMBLY_PRINTMODULEPASS_H
 #define LLVM_ASSEMBLY_PRINTMODULEPASS_H
 
-#include "llvm/Pass.h"
-#include "llvm/Module.h"
 #include "llvm/Support/Streams.h"
+#include <string>
 
 namespace llvm {
-
-class PrintModulePass : public ModulePass {
-  OStream *Out;           // ostream to print on
-  bool DeleteStream;      // Delete the ostream in our dtor?
-public:
-  static char ID;
-  PrintModulePass() : ModulePass(intptr_t(&ID)), Out(&cerr), 
-                      DeleteStream(false) {}
-  PrintModulePass(OStream *o, bool DS = false)
-    : ModulePass(intptr_t(&ID)), Out(o), DeleteStream(DS) {}
-
-  ~PrintModulePass() {
-    if (DeleteStream) delete Out;
-  }
-
-  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() {
-    if (DeleteStream) delete Out;
-  }
-
-  // runOnFunction - This pass just prints a banner followed by the function as
-  // it's processed.
-  //
-  bool runOnFunction(Function &F) {
-    (*Out) << Banner << static_cast<Value&>(F);
-    return false;
-  }
-
-  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-    AU.setPreservesAll();
-  }
-};
+  class FunctionPass;
+  class ModulePass;
+  
+  /// createPrintModulePass - Create and return a pass that writes the
+  /// module to the specified OStream.
+  ModulePass *createPrintModulePass(llvm::OStream *OS, bool DeleteStream=false);
+  
+  /// createPrintFunctionPass - Create and return a pass that prints
+  /// functions to the specified OStream as they are processed.
+  FunctionPass *createPrintFunctionPass(const std::string &Banner,
+                                        llvm::OStream *OS, 
+                                        bool DeleteStream=false);  
 
 } // End llvm namespace
 
index f94bc33d25bb110828788daaba03db771ab49189..e23108c67f47114ea63bd6ace647cf9968474c7c 100644 (file)
@@ -23,6 +23,7 @@
 #include "llvm/Analysis/Passes.h"
 #include "llvm/Analysis/PostDominators.h"
 #include "llvm/Analysis/ScalarEvolution.h"
+#include "llvm/Assembly/PrintModulePass.h"
 #include "llvm/CodeGen/Passes.h"
 #include "llvm/Function.h"
 #include "llvm/Transforms/Instrumentation.h"
@@ -120,6 +121,8 @@ namespace {
       (void) llvm::createInstructionNamerPass();
       (void) llvm::createPartialSpecializationPass();
       (void) llvm::createAddReadAttrsPass();
+      (void) llvm::createPrintModulePass(0);
+      (void) llvm::createPrintFunctionPass("", 0);
 
       (void)new llvm::IntervalPartition();
       (void)new llvm::FindUsedTypes();
index 333b8ab9b7c2c6b748c243cb73494268b35e7bda..bc3c9910b4b858aaf80aea6e54a6b5d9019a562f 100644 (file)
@@ -151,7 +151,7 @@ bool LLVMTargetMachine::addCommonCodeGenPasses(PassManagerBase &PM, bool Fast) {
   if (!Fast) {
     PM.add(createLoopStrengthReducePass(getTargetLowering()));
     if (PrintLSR)
-      PM.add(new PrintFunctionPass("\n\n*** Code after LSR ***\n", &cerr));
+      PM.add(createPrintFunctionPass("\n\n*** Code after LSR ***\n", &cerr));
   }
 
   PM.add(createGCLoweringPass());
@@ -166,8 +166,9 @@ bool LLVMTargetMachine::addCommonCodeGenPasses(PassManagerBase &PM, bool Fast) {
     PM.add(createCodeGenPreparePass(getTargetLowering()));
 
   if (PrintISelInput)
-    PM.add(new PrintFunctionPass("\n\n*** Final LLVM Code input to ISel ***\n",
-                                 &cerr));
+    PM.add(createPrintFunctionPass("\n\n"
+                                   "*** Final LLVM Code input to ISel ***\n",
+                                   &cerr));
 
   // Standard Lower-Level Passes.
 
index 273fe3043aeb4210dfa644794b756252d6bc2bc8..55ba300bda95a6be7852af5f4ea7a7662cf4e79c 100644 (file)
@@ -39,14 +39,6 @@ using namespace llvm;
 // Make virtual table appear in this compilation unit.
 AssemblyAnnotationWriter::~AssemblyAnnotationWriter() {}
 
-char PrintModulePass::ID = 0;
-static RegisterPass<PrintModulePass>
-X("print-module", "Print module to stderr");
-char PrintFunctionPass::ID = 0;
-static RegisterPass<PrintFunctionPass>
-Y("print-function","Print function to stderr");
-
-
 //===----------------------------------------------------------------------===//
 // Helper Functions
 //===----------------------------------------------------------------------===//
diff --git a/lib/VMCore/PrintModulePass.cpp b/lib/VMCore/PrintModulePass.cpp
new file mode 100644 (file)
index 0000000..6740af7
--- /dev/null
@@ -0,0 +1,96 @@
+//===--- VMCore/PrintModulePass.cpp - Module/Function Printer -------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// PrintModulePass and PrintFunctionPass implementations.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Assembly/PrintModulePass.h"
+
+#include "llvm/Function.h"
+#include "llvm/Module.h"
+#include "llvm/Pass.h"
+#include "llvm/Support/Compiler.h"
+using namespace llvm;
+
+namespace {
+
+  class VISIBILITY_HIDDEN PrintModulePass : public ModulePass {
+    OStream *Out;           // ostream to print on
+    bool DeleteStream;      // Delete the ostream in our dtor?
+  public:
+    static char ID;
+    PrintModulePass() : ModulePass(intptr_t(&ID)), Out(&cerr), 
+      DeleteStream(false) {}
+    PrintModulePass(OStream *o, bool DS)
+      : ModulePass(intptr_t(&ID)), Out(o), DeleteStream(DS) {}
+    
+    ~PrintModulePass() {
+      if (DeleteStream) delete Out;
+    }
+    
+    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, bool DS)
+      : FunctionPass(intptr_t(&ID)), Banner(B), Out(o), DeleteStream(DS) {}
+    
+    inline ~PrintFunctionPass() {
+      if (DeleteStream) delete Out;
+    }
+    
+    // runOnFunction - This pass just prints a banner followed by the
+    // function as it's processed.
+    //
+    bool runOnFunction(Function &F) {
+      (*Out) << Banner << static_cast<Value&>(F);
+      return false;
+    }
+    
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.setPreservesAll();
+    }
+  };
+}
+
+char PrintModulePass::ID = 0;
+static RegisterPass<PrintModulePass>
+X("print-module", "Print module to stderr");
+char PrintFunctionPass::ID = 0;
+static RegisterPass<PrintFunctionPass>
+Y("print-function","Print function to stderr");
+
+/// createPrintModulePass - Create and return a pass that writes the
+/// module to the specified OStream.
+ModulePass *llvm::createPrintModulePass(llvm::OStream *OS, bool DeleteStream) {
+  return new PrintModulePass(OS, DeleteStream);
+}
+
+/// createPrintFunctionPass - Create and return a pass that prints
+/// functions to the specified OStream as they are processed.
+FunctionPass *llvm::createPrintFunctionPass(const std::string &Banner,
+                                      OStream *OS, bool DeleteStream) {
+  return new PrintFunctionPass(Banner, OS, DeleteStream);
+}
+
index 9802541e0f6bbaf1bf1d1ec64be76f49e2618396..276b1e49534bbbc30c05f3139e5be124c231799b 100644 (file)
@@ -118,7 +118,7 @@ int main(int argc, char **argv) {
     if (!DontPrint) {
       PassManager Passes;
       OStream L(*Out);
-      Passes.add(new PrintModulePass(&L));
+      Passes.add(createPrintModulePass(&L));
       Passes.run(*M.get());
     }
 
index ea6ed3370c084f452bc62c951328de9261445936..358cbdabfbd5cd0bab4850ce0885170022914066 100644 (file)
@@ -543,7 +543,7 @@ int main(int argc, char **argv) {
       }
       
       if (PrintEachXForm)
-        Passes.add(new PrintModulePass(&cerr));
+        Passes.add(createPrintModulePass(&cerr));
     }
     
     // If -std-compile-opts was specified at the end of the pass list, add them.