Initial check in of header file for profile-paths pass
authorAnand Shukla <ashukla@cs.uiuc.edu>
Tue, 26 Feb 2002 18:43:03 +0000 (18:43 +0000)
committerAnand Shukla <ashukla@cs.uiuc.edu>
Tue, 26 Feb 2002 18:43:03 +0000 (18:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1801 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Transforms/Instrumentation/ProfilePaths.h [new file with mode: 0644]

diff --git a/include/llvm/Transforms/Instrumentation/ProfilePaths.h b/include/llvm/Transforms/Instrumentation/ProfilePaths.h
new file mode 100644 (file)
index 0000000..de9d37c
--- /dev/null
@@ -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
+