diff --git a/include/llvm/Transforms/Instrumentation/ProfilePaths.h b/include/llvm/Transforms/Instrumentation/ProfilePaths.h new file mode 100644 index 00000000000..de9d37c4e88 --- /dev/null +++ b/include/llvm/Transforms/Instrumentation/ProfilePaths.h @@ -0,0 +1,43 @@ +//===-- ProfilePaths.h - interface to insert instrumentation -----*- C++ -*--=// +// +// This inserts intrumentation for counting +// execution of paths though a given method +// Its implemented as a "Method" Pass, and called using opt +// +// This pass is implemented by using algorithms similar to +// 1."Efficient Path Profiling": Ball, T. and Larus, J. R., +// Proceedings of Micro-29, Dec 1996, Paris, France. +// 2."Efficiently Counting Program events with support for on-line +// "queries": Ball T., ACM Transactions on Programming Languages +// and systems, Sep 1994. +// +// The algorithms work on a Graph constructed over the nodes +// made from Basic Blocks: The transformations then take place on +// the constucted graph (implementation in Graph.cpp and GraphAuxillary.cpp) +// and finally, appropriate instrumentation is placed over suitable edges. +// (code inserted through EdgeCode.cpp). +// +// The algorithm inserts code such that every acyclic path in the CFG +// of a method is identified through a unique number. the code insertion +// is optimal in the sense that its inserted over a minimal set of edges. Also, +// the algorithm makes sure than initialization, path increment and counter +// update can be collapsed into minmimum number of edges. +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TRANSFORMS_INSTRUMENTATION_PROFILE_PATHS_H +#define LLVM_TRANSFORMS_INSTRUMENTATION_PROFILE_PATHS_H + +#include "llvm/Pass.h" + +class ProfilePaths: public MethodPass { + public: + bool runOnMethod(Method *M); + + // getAnalysisUsageInfo - transform cfg to have just one exit node + virtual void getAnalysisUsageInfo(Pass::AnalysisSet &Requires, + Pass::AnalysisSet &Destroyed, + Pass::AnalysisSet &Provided); +}; + +#endif +