mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130068 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//===- PathProfileInfo.h --------------------------------------*- C++ -*---===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// This file outlines the interface used by optimizers to load path profiles.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLVM_PATHPROFILEINFO_H
 | 
						|
#define LLVM_PATHPROFILEINFO_H
 | 
						|
 | 
						|
#include "llvm/BasicBlock.h"
 | 
						|
#include "llvm/Analysis/PathNumbering.h"
 | 
						|
 | 
						|
namespace llvm {
 | 
						|
 | 
						|
class ProfilePath;
 | 
						|
class ProfilePathEdge;
 | 
						|
class PathProfileInfo;
 | 
						|
 | 
						|
typedef std::vector<ProfilePathEdge> ProfilePathEdgeVector;
 | 
						|
typedef std::vector<ProfilePathEdge>::iterator ProfilePathEdgeIterator;
 | 
						|
 | 
						|
typedef std::vector<BasicBlock*> ProfilePathBlockVector;
 | 
						|
typedef std::vector<BasicBlock*>::iterator ProfilePathBlockIterator;
 | 
						|
 | 
						|
typedef std::map<unsigned int,ProfilePath*> ProfilePathMap;
 | 
						|
typedef std::map<unsigned int,ProfilePath*>::iterator ProfilePathIterator;
 | 
						|
 | 
						|
typedef std::map<Function*,unsigned int> FunctionPathCountMap;
 | 
						|
typedef std::map<Function*,ProfilePathMap> FunctionPathMap;
 | 
						|
typedef std::map<Function*,ProfilePathMap>::iterator FunctionPathIterator;
 | 
						|
 | 
						|
class ProfilePathEdge {
 | 
						|
public:
 | 
						|
  ProfilePathEdge(BasicBlock* source, BasicBlock* target,
 | 
						|
                  unsigned duplicateNumber);
 | 
						|
 | 
						|
  inline unsigned getDuplicateNumber() { return _duplicateNumber; }
 | 
						|
  inline BasicBlock* getSource() { return _source; }
 | 
						|
  inline BasicBlock* getTarget() { return _target; }
 | 
						|
 | 
						|
protected:
 | 
						|
  BasicBlock* _source;
 | 
						|
  BasicBlock* _target;
 | 
						|
  unsigned _duplicateNumber;
 | 
						|
};
 | 
						|
 | 
						|
class ProfilePath {
 | 
						|
public:
 | 
						|
  ProfilePath(unsigned int number, unsigned int count,
 | 
						|
              double countStdDev, PathProfileInfo* ppi);
 | 
						|
 | 
						|
  double getFrequency() const;
 | 
						|
 | 
						|
  inline unsigned int getNumber() const { return _number; }
 | 
						|
  inline unsigned int getCount() const { return _count; }
 | 
						|
  inline double getCountStdDev() const { return _countStdDev; }
 | 
						|
 | 
						|
  ProfilePathEdgeVector* getPathEdges() const;
 | 
						|
  ProfilePathBlockVector* getPathBlocks() const;
 | 
						|
 | 
						|
  BasicBlock* getFirstBlockInPath() const;
 | 
						|
 | 
						|
private:
 | 
						|
  unsigned int _number;
 | 
						|
  unsigned int _count;
 | 
						|
  double _countStdDev;
 | 
						|
 | 
						|
  // double pointer back to the profiling info
 | 
						|
  PathProfileInfo* _ppi;
 | 
						|
};
 | 
						|
 | 
						|
// TODO: overload [] operator for getting path
 | 
						|
// Add: getFunctionCallCount()
 | 
						|
class PathProfileInfo {
 | 
						|
  public:
 | 
						|
  PathProfileInfo();
 | 
						|
  ~PathProfileInfo();
 | 
						|
 | 
						|
  void setCurrentFunction(Function* F);
 | 
						|
  Function* getCurrentFunction() const;
 | 
						|
  BasicBlock* getCurrentFunctionEntry();
 | 
						|
 | 
						|
  ProfilePath* getPath(unsigned int number);
 | 
						|
  unsigned int getPotentialPathCount();
 | 
						|
 | 
						|
  ProfilePathIterator pathBegin();
 | 
						|
  ProfilePathIterator pathEnd();
 | 
						|
  unsigned int pathsRun();
 | 
						|
 | 
						|
  static char ID; // Pass identification
 | 
						|
  std::string argList;
 | 
						|
 | 
						|
protected:
 | 
						|
  FunctionPathMap _functionPaths;
 | 
						|
  FunctionPathCountMap _functionPathCounts;
 | 
						|
 | 
						|
private:
 | 
						|
  BallLarusDag* _currentDag;
 | 
						|
  Function* _currentFunction;
 | 
						|
 | 
						|
  friend class ProfilePath;
 | 
						|
};
 | 
						|
} // end namespace llvm
 | 
						|
 | 
						|
#endif
 |