mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21408 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- llvm/Assembly/PrintModulePass.h - Printing Pass ----------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file was developed by the LLVM research group and is distributed under
 | |
| // the University of Illinois Open Source License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file defines two passes to print out a module.  The PrintModulePass pass
 | |
| // simply prints out the entire module when it is executed.  The
 | |
| // PrintFunctionPass class is designed to be pipelined with other
 | |
| // FunctionPass's, and prints out the functions of the class as they are
 | |
| // processed.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_ASSEMBLY_PRINTMODULEPASS_H
 | |
| #define LLVM_ASSEMBLY_PRINTMODULEPASS_H
 | |
| 
 | |
| #include "llvm/Pass.h"
 | |
| #include "llvm/Module.h"
 | |
| #include <iostream>
 | |
| 
 | |
| namespace llvm {
 | |
| 
 | |
| class PrintModulePass : public ModulePass {
 | |
|   std::ostream *Out;      // ostream to print on
 | |
|   bool DeleteStream;      // Delete the ostream in our dtor?
 | |
| public:
 | |
|   PrintModulePass() : Out(&std::cerr), DeleteStream(false) {}
 | |
|   PrintModulePass(std::ostream *o, bool DS = false)
 | |
|     : 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
 | |
|   std::ostream *Out;      // ostream to print on
 | |
|   bool DeleteStream;      // Delete the ostream in our dtor?
 | |
| public:
 | |
|   PrintFunctionPass() : Banner(""), Out(&std::cerr), DeleteStream(false) {}
 | |
|   PrintFunctionPass(const std::string &B, std::ostream *o = &std::cout,
 | |
|                     bool DS = false)
 | |
|     : 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 << (Value&)F;
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
 | |
|     AU.setPreservesAll();
 | |
|   }
 | |
| };
 | |
| 
 | |
| } // End llvm namespace
 | |
| 
 | |
| #endif
 |