aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/Assembly/PrintModulePass.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-01-21 07:31:50 +0000
committerChris Lattner <sabre@nondot.org>2002-01-21 07:31:50 +0000
commitf4de63f65fa995e68e3cd268117ab065068be413 (patch)
tree2fd8cd44af0f23dafd94102c1c0152b1cd82fe4d /include/llvm/Assembly/PrintModulePass.h
parentaff5bcebb7fb9880e0a3518a8e7c999e738d531c (diff)
Implement a more powerful, simpler, pass system. This pass system can figure
out how to run a collection of passes optimially given their behaviors and charactaristics. Convert code to use it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1507 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Assembly/PrintModulePass.h')
-rw-r--r--include/llvm/Assembly/PrintModulePass.h46
1 files changed, 27 insertions, 19 deletions
diff --git a/include/llvm/Assembly/PrintModulePass.h b/include/llvm/Assembly/PrintModulePass.h
index 72d8fabde0..181ce98227 100644
--- a/include/llvm/Assembly/PrintModulePass.h
+++ b/include/llvm/Assembly/PrintModulePass.h
@@ -1,7 +1,9 @@
//===- llvm/Assembly/PrintModulePass.h - Printing Pass -----------*- C++ -*--=//
//
-// This file defines a simple pass to print out methods of a module as they are
-// processed.
+// This file defines two passes to print out a module. The PrintModulePass
+// pass simply prints out the entire module when it is executed. The
+// PrintMethodPass class is designed to be pipelined with other MethodPass's,
+// and prints out the methods of the class as they are processed.
//
//===----------------------------------------------------------------------===//
@@ -13,36 +15,42 @@
#include <iostream>
class PrintModulePass : public Pass {
- std::string Banner; // String to print before each method
std::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?
public:
- inline PrintModulePass(const std::string &B, std::ostream *o = &std::cout,
- bool DS = false,
- bool printPerMethod = true)
- : Banner(B), Out(o), DeleteStream(DS), PrintPerMethod(printPerMethod) {
+ inline PrintModulePass(std::ostream *o = &std::cout, bool DS = false)
+ : Out(o), DeleteStream(DS) {
}
inline ~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 (PrintPerMethod)
- (*Out) << Banner << M;
+ bool run(Module *M) {
+ (*Out) << M;
return false;
}
+};
- // doPassFinalization - Virtual method overriden by subclasses to do any post
- // processing needed after all passes have run.
+class PrintMethodPass : public MethodPass {
+ std::string Banner; // String to print before each method
+ std::ostream *Out; // ostream to print on
+ bool DeleteStream; // Delete the ostream in our dtor?
+public:
+ inline PrintMethodPass(const std::string &B, std::ostream *o = &std::cout,
+ bool DS = false)
+ : Banner(B), Out(o), DeleteStream(DS) {
+ }
+
+ inline ~PrintMethodPass() {
+ if (DeleteStream) delete Out;
+ }
+
+ // runOnMethod - This pass just prints a banner followed by the method as
+ // it's processed.
//
- bool doPassFinalization(Module *M) {
- if (! PrintPerMethod)
- (*Out) << Banner << M;
+ bool runOnMethod(Method *M) {
+ (*Out) << Banner << M;
return false;
}
};