X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FAnalysis%2FProfileInfo.h;h=ff83f97ee042d6fbee9abcecfb60b03c9268dcc8;hb=7ed47a13356daed2a34cd2209a31f92552e3bdd8;hp=4cdce4f97d1c32d62844c961134e2a90a3a3ec34;hpb=171de656eb68d10c90b88e864e708d13c99e642a;p=oota-llvm.git diff --git a/include/llvm/Analysis/ProfileInfo.h b/include/llvm/Analysis/ProfileInfo.h index 4cdce4f97d1..ff83f97ee04 100644 --- a/include/llvm/Analysis/ProfileInfo.h +++ b/include/llvm/Analysis/ProfileInfo.h @@ -1,10 +1,10 @@ //===- 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 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 @@ -21,23 +21,47 @@ #ifndef LLVM_ANALYSIS_PROFILEINFO_H #define LLVM_ANALYSIS_PROFILEINFO_H +#include +#include + namespace llvm { class BasicBlock; + class Pass; - struct ProfileInfo { + /// 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, unsigned> EdgeCounts; + public: + static char ID; // Class identification, replacement for typeinfo virtual ~ProfileInfo(); // We want to be subclassed - + //===------------------------------------------------------------------===// /// Profile Information Queries /// - virtual unsigned getExecutionCount(BasicBlock *BB) = 0; - + unsigned getExecutionCount(BasicBlock *BB) const; + + unsigned getEdgeWeight(BasicBlock *Src, BasicBlock *Dest) const { + std::map, 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