//===- ProfileInfoLoader.h - Load & convert profile information -*- 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. // //===----------------------------------------------------------------------===// // // The ProfileInfoLoader class is used to load and represent profiling // information read in from the dump file. If conversions between formats are // needed, it can also do this. // //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_PROFILEINFOLOADER_H #define LLVM_ANALYSIS_PROFILEINFOLOADER_H #include #include #include namespace llvm { class Module; class Function; class BasicBlock; class ProfileInfoLoader { Module &M; std::vector CommandLines; std::vector FunctionCounts; std::vector BlockCounts; std::vector EdgeCounts; public: // ProfileInfoLoader ctor - Read the specified profiling data file, exiting // the program if the file is invalid or broken. ProfileInfoLoader(const char *ToolName, const std::string &Filename, Module &M); unsigned getNumExecutions() const { return CommandLines.size(); } const std::string &getExecution(unsigned i) const { return CommandLines[i]; } // getFunctionCounts - This method is used by consumers of function counting // information. If we do not directly have function count information, we // compute it from other, more refined, types of profile information. // void getFunctionCounts(std::vector > &Counts); // hasAccurateBlockCounts - Return true if we can synthesize accurate block // frequency information from whatever we have. // bool hasAccurateBlockCounts() const { return !BlockCounts.empty() || !EdgeCounts.empty(); } // hasAccurateEdgeCounts - Return true if we can synthesize accurate edge // frequency information from whatever we have. // bool hasAccurateEdgeCounts() const { return !EdgeCounts.empty(); } // getBlockCounts - This method is used by consumers of block counting // information. If we do not directly have block count information, we // compute it from other, more refined, types of profile information. // void getBlockCounts(std::vector > &Counts); // getEdgeCounts - This method is used by consumers of edge counting // information. If we do not directly have edge count information, we compute // it from other, more refined, types of profile information. // // Edges are represented as a pair, where the first element is the basic block // and the second element is the successor number. // typedef std::pair Edge; void getEdgeCounts(std::vector > &Counts); }; } // End llvm namespace #endif