--- /dev/null
+//===-- 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
+