mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	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
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- llvm/Assembly/PrintModulePass.h - Printing Pass -----------*- C++ -*--=//
 | |
| //
 | |
| // 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.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_ASSEMBLY_PRINTMODULEPASS_H
 | |
| #define LLVM_ASSEMBLY_PRINTMODULEPASS_H
 | |
| 
 | |
| #include "llvm/Pass.h"
 | |
| #include "llvm/Assembly/Writer.h"
 | |
| #include <iostream>
 | |
| 
 | |
| class PrintModulePass : public Pass {
 | |
|   std::ostream *Out;      // ostream to print on
 | |
|   bool DeleteStream;      // Delete the ostream in our dtor?
 | |
| public:
 | |
|   inline PrintModulePass(std::ostream *o = &std::cout, bool DS = false)
 | |
|     : Out(o), DeleteStream(DS) {
 | |
|   }
 | |
|   
 | |
|   inline ~PrintModulePass() {
 | |
|     if (DeleteStream) delete Out;
 | |
|   }
 | |
|   
 | |
|   bool run(Module *M) {
 | |
|     (*Out) << M;
 | |
|     return false;
 | |
|   }
 | |
| };
 | |
| 
 | |
| 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 runOnMethod(Method *M) {
 | |
|     (*Out) << Banner << M;
 | |
|     return false;
 | |
|   }
 | |
| };
 | |
| 
 | |
| #endif
 |