mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	from basic block counts. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12241 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- llvm/Analysis/ProfileInfo.h - Profile Info Interface -----*- 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 the generic ProfileInfo interface, which is used as the
 | |
| // common interface used by all clients of profiling information, and
 | |
| // implemented either by making static guestimations, or by actually reading in
 | |
| // profiling information gathered by running the program.
 | |
| //
 | |
| // Note that to be useful, all profile-based optimizations should preserve
 | |
| // ProfileInfo, which requires that they notify it when changes to the CFG are
 | |
| // made.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_ANALYSIS_PROFILEINFO_H
 | |
| #define LLVM_ANALYSIS_PROFILEINFO_H
 | |
| 
 | |
| #include <string>
 | |
| #include <map>
 | |
| 
 | |
| namespace llvm {
 | |
|   class BasicBlock;
 | |
|   class Pass;
 | |
| 
 | |
|   /// ProfileInfo Class - This class holds and maintains edge profiling
 | |
|   /// information for some unit of code.
 | |
|   class ProfileInfo {
 | |
|   protected:
 | |
|     // EdgeCounts - Count the number of times a transition between two blocks is
 | |
|     // executed.  As a special case, we also hold an edge from the null
 | |
|     // BasicBlock to the entry block to indicate how many times the function was
 | |
|     // entered.
 | |
|     std::map<std::pair<BasicBlock*, BasicBlock*>, unsigned> EdgeCounts;
 | |
|   public:
 | |
|     virtual ~ProfileInfo();  // We want to be subclassed
 | |
|     
 | |
|     //===------------------------------------------------------------------===//
 | |
|     /// Profile Information Queries
 | |
|     ///
 | |
|     unsigned getExecutionCount(BasicBlock *BB) const;
 | |
| 
 | |
|     unsigned getEdgeWeight(BasicBlock *Src, BasicBlock *Dest) const {
 | |
|       std::map<std::pair<BasicBlock*, BasicBlock*>, unsigned>::const_iterator I=
 | |
|         EdgeCounts.find(std::make_pair(Src, Dest));
 | |
|       return I != EdgeCounts.end() ? I->second : 0;
 | |
|     }
 | |
| 
 | |
|     //===------------------------------------------------------------------===//
 | |
|     /// Analysis Update Methods
 | |
|     ///
 | |
| 
 | |
|   };
 | |
| 
 | |
|   /// createProfileLoaderPass - This function returns a Pass that loads the
 | |
|   /// profiling information for the module from the specified filename, making
 | |
|   /// it available to the optimizers.
 | |
|   Pass *createProfileLoaderPass(const std::string &Filename);
 | |
| } // End llvm namespace
 | |
| 
 | |
| #endif
 |