[PM] Simplify the IR printing passes significantly now that a narrower
authorChandler Carruth <chandlerc@gmail.com>
Sun, 12 Jan 2014 11:40:03 +0000 (11:40 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sun, 12 Jan 2014 11:40:03 +0000 (11:40 +0000)
API is exposed.

This removes the support for deleting the ostream, switches the member
and constructor order arround to be consistent with the creation
routines, and switches to using references.

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

lib/IR/IRPrintingPasses.cpp

index 242dcff795bd58c01e2a79a33f25d6830b5caa77..b8e2a2ba5942b4ce549b16bf17d16ff459dd0579 100644 (file)
@@ -22,23 +22,17 @@ using namespace llvm;
 namespace {
 
 class PrintModulePass : public ModulePass {
+  raw_ostream &Out;
   std::string Banner;
-  raw_ostream *Out;
-  bool DeleteStream;
 
 public:
   static char ID;
-  PrintModulePass() : ModulePass(ID), Out(&dbgs()), DeleteStream(false) {}
-  PrintModulePass(const std::string &B, raw_ostream *o, bool DS)
-      : ModulePass(ID), Banner(B), Out(o), DeleteStream(DS) {}
-
-  ~PrintModulePass() {
-    if (DeleteStream)
-      delete Out;
-  }
+  PrintModulePass() : ModulePass(ID), Out(dbgs()) {}
+  PrintModulePass(raw_ostream &Out, const std::string &Banner)
+      : ModulePass(ID), Out(Out), Banner(Banner) {}
 
   bool runOnModule(Module &M) {
-    (*Out) << Banner << M;
+    Out << Banner << M;
     return false;
   }
 
@@ -48,25 +42,18 @@ public:
 };
 
 class PrintFunctionPass : public FunctionPass {
+  raw_ostream &Out;
   std::string Banner;
-  raw_ostream *Out;
-  bool DeleteStream;
 
 public:
   static char ID;
-  PrintFunctionPass()
-      : FunctionPass(ID), Banner(""), Out(&dbgs()), DeleteStream(false) {}
-  PrintFunctionPass(const std::string &B, raw_ostream *o, bool DS)
-      : FunctionPass(ID), Banner(B), Out(o), DeleteStream(DS) {}
-
-  ~PrintFunctionPass() {
-    if (DeleteStream)
-      delete Out;
-  }
+  PrintFunctionPass() : FunctionPass(ID), Out(dbgs()) {}
+  PrintFunctionPass(raw_ostream &Out, const std::string &Banner)
+      : FunctionPass(ID), Out(Out), Banner(Banner) {}
 
   // This pass just prints a banner followed by the function as it's processed.
   bool runOnFunction(Function &F) {
-    (*Out) << Banner << static_cast<Value &>(F);
+    Out << Banner << static_cast<Value &>(F);
     return false;
   }
 
@@ -76,24 +63,17 @@ public:
 };
 
 class PrintBasicBlockPass : public BasicBlockPass {
+  raw_ostream &Out;
   std::string Banner;
-  raw_ostream *Out;
-  bool DeleteStream;
 
 public:
   static char ID;
-  PrintBasicBlockPass()
-      : BasicBlockPass(ID), Out(&dbgs()), DeleteStream(false) {}
-  PrintBasicBlockPass(const std::string &B, raw_ostream *o, bool DS)
-      : BasicBlockPass(ID), Banner(B), Out(o), DeleteStream(DS) {}
-
-  ~PrintBasicBlockPass() {
-    if (DeleteStream)
-      delete Out;
-  }
+  PrintBasicBlockPass() : BasicBlockPass(ID), Out(dbgs()) {}
+  PrintBasicBlockPass(raw_ostream &Out, const std::string &Banner)
+      : BasicBlockPass(ID), Out(Out), Banner(Banner) {}
 
   bool runOnBasicBlock(BasicBlock &BB) {
-    (*Out) << Banner << BB;
+    Out << Banner << BB;
     return false;
   }
 
@@ -101,6 +81,7 @@ public:
     AU.setPreservesAll();
   }
 };
+
 }
 
 char PrintModulePass::ID = 0;
@@ -115,15 +96,15 @@ INITIALIZE_PASS(PrintBasicBlockPass, "print-bb", "Print BB to stderr", false,
 
 ModulePass *llvm::createPrintModulePass(llvm::raw_ostream &OS,
                                         const std::string &Banner) {
-  return new PrintModulePass(Banner, &OS, false);
+  return new PrintModulePass(OS, Banner);
 }
 
 FunctionPass *llvm::createPrintFunctionPass(llvm::raw_ostream &OS,
                                             const std::string &Banner) {
-  return new PrintFunctionPass(Banner, &OS, false);
+  return new PrintFunctionPass(OS, Banner);
 }
 
 BasicBlockPass *llvm::createPrintBasicBlockPass(llvm::raw_ostream &OS,
                                                 const std::string &Banner) {
-  return new PrintBasicBlockPass(Banner, &OS, false);
+  return new PrintBasicBlockPass(OS, Banner);
 }