summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Transforms/Instrumentation.h14
-rw-r--r--include/llvm/Transforms/LinkAllPasses.h9
-rw-r--r--lib/Transforms/Instrumentation/BlockProfiling.cpp8
-rw-r--r--lib/Transforms/Instrumentation/EdgeProfiling.cpp3
-rw-r--r--lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp3
-rw-r--r--lib/Transforms/Instrumentation/TraceBasicBlocks.cpp6
6 files changed, 40 insertions, 3 deletions
diff --git a/include/llvm/Transforms/Instrumentation.h b/include/llvm/Transforms/Instrumentation.h
index 869f9d05d6..f6aff42d68 100644
--- a/include/llvm/Transforms/Instrumentation.h
+++ b/include/llvm/Transforms/Instrumentation.h
@@ -28,6 +28,20 @@ FunctionPass *createCombineBranchesPass();
// Reoptimizer support pass: emit table of global functions
ModulePass *createEmitFunctionTablePass ();
+// Reoptimizer support pass: insert function profiling instrumentation
+ModulePass *createFunctionProfilerPass();
+
+// Reoptimizer support pass: insert block profiling instrumentation
+ModulePass *createBlockProfilerPass();
+
+// Reoptimizer support pass: insert edge profiling instrumentation
+ModulePass *createEdgeProfilerPass();
+
+// Reoptimizer support pass: insert basic block tracing instrumentation
+ModulePass *createTraceBasicBlockPass();
+
+// Reoptimizer support pass: insert counting of execute paths instrumentation
+FunctionPass *createProfilePathsPass();
//===----------------------------------------------------------------------===//
// Support for inserting LLVM code to print values at basic block and function
diff --git a/include/llvm/Transforms/LinkAllPasses.h b/include/llvm/Transforms/LinkAllPasses.h
index 9d27437ea8..15ac307e76 100644
--- a/include/llvm/Transforms/LinkAllPasses.h
+++ b/include/llvm/Transforms/LinkAllPasses.h
@@ -40,11 +40,9 @@ namespace {
std::vector<llvm::BasicBlock*> bbv;
- // The commented out calls below refer to non-existent creation
- // functions. They will be uncommented as the functions are added.
-
(void) llvm::createAggressiveDCEPass();
(void) llvm::createArgumentPromotionPass();
+ (void) llvm::createBlockProfilerPass();
(void) llvm::createBreakCriticalEdgesPass();
(void) llvm::createCFGSimplificationPass();
(void) llvm::createCombineBranchesPass();
@@ -56,8 +54,10 @@ namespace {
(void) llvm::createDeadInstEliminationPass();
(void) llvm::createDeadStoreEliminationPass();
(void) llvm::createDeadTypeEliminationPass();
+ (void) llvm::createEdgeProfilerPass();
(void) llvm::createEmitFunctionTablePass();
(void) llvm::createFunctionInliningPass();
+ (void) llvm::createFunctionProfilerPass();
(void) llvm::createFunctionResolvingPass();
(void) llvm::createGCSEPass();
(void) llvm::createGlobalDCEPass();
@@ -74,11 +74,13 @@ namespace {
(void) llvm::createLoopUnrollPass();
(void) llvm::createLoopUnswitchPass();
(void) llvm::createLowerAllocationsPass();
+ (void) llvm::createLowerConstantExpressionsPass();
(void) llvm::createLowerGCPass();
(void) llvm::createLowerInvokePass();
(void) llvm::createLowerPackedPass();
(void) llvm::createLowerSetJmpPass();
(void) llvm::createLowerSwitchPass();
+ (void) llvm::createProfilePathsPass();
(void) llvm::createPromoteMemoryToRegister();
(void) llvm::createPruneEHPass();
(void) llvm::createRaiseAllocationsPass();
@@ -89,6 +91,7 @@ namespace {
(void) llvm::createSingleLoopExtractorPass();
(void) llvm::createTailCallEliminationPass();
(void) llvm::createTailDuplicationPass();
+ (void) llvm::createTraceBasicBlockPass();
(void) llvm::createTraceValuesPassForBasicBlocks();
(void) llvm::createTraceValuesPassForFunction();
}
diff --git a/lib/Transforms/Instrumentation/BlockProfiling.cpp b/lib/Transforms/Instrumentation/BlockProfiling.cpp
index f22f81feef..ef1df23e8b 100644
--- a/lib/Transforms/Instrumentation/BlockProfiling.cpp
+++ b/lib/Transforms/Instrumentation/BlockProfiling.cpp
@@ -23,6 +23,7 @@
#include "llvm/DerivedTypes.h"
#include "llvm/Module.h"
#include "llvm/Pass.h"
+#include "llvm/Transforms/Instrumentation.h"
#include "ProfilingUtils.h"
#include <iostream>
@@ -37,6 +38,11 @@ namespace {
"Insert instrumentation for function profiling");
}
+ModulePass *llvm::createFunctionProfilerPass()
+{
+ return new FunctionProfiler();
+}
+
bool FunctionProfiler::runOnModule(Module &M) {
Function *Main = M.getMainFunction();
if (Main == 0) {
@@ -77,6 +83,8 @@ namespace {
"Insert instrumentation for block profiling");
}
+ModulePass *llvm::createBlockProfilerPass() { return new BlockProfiler(); }
+
bool BlockProfiler::runOnModule(Module &M) {
Function *Main = M.getMainFunction();
if (Main == 0) {
diff --git a/lib/Transforms/Instrumentation/EdgeProfiling.cpp b/lib/Transforms/Instrumentation/EdgeProfiling.cpp
index 89c540c5bc..c453554236 100644
--- a/lib/Transforms/Instrumentation/EdgeProfiling.cpp
+++ b/lib/Transforms/Instrumentation/EdgeProfiling.cpp
@@ -22,6 +22,7 @@
#include "llvm/Module.h"
#include "llvm/Pass.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
+#include "llvm/Transforms/Instrumentation.h"
#include "ProfilingUtils.h"
#include <iostream>
#include <set>
@@ -36,6 +37,8 @@ namespace {
"Insert instrumentation for edge profiling");
}
+ModulePass *llvm::createEdgeProfilerPass() { return new EdgeProfiler(); }
+
bool EdgeProfiler::runOnModule(Module &M) {
Function *Main = M.getMainFunction();
if (Main == 0) {
diff --git a/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp b/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp
index aa0723bd4a..cc14c268e0 100644
--- a/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp
+++ b/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp
@@ -31,6 +31,7 @@
//
//===----------------------------------------------------------------------===//
+#include "llvm/Transforms/Instrumentation.h"
#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
#include "llvm/Support/CFG.h"
#include "llvm/Constants.h"
@@ -56,6 +57,8 @@ struct ProfilePaths : public FunctionPass {
static RegisterOpt<ProfilePaths> X("paths", "Profile Paths");
+FunctionPass *createProfilePathsPass() { return new ProfilePaths(); }
+
static Node *findBB(std::vector<Node *> &st, BasicBlock *BB){
for(std::vector<Node *>::iterator si=st.begin(); si!=st.end(); ++si){
if(((*si)->getElement())==BB){
diff --git a/lib/Transforms/Instrumentation/TraceBasicBlocks.cpp b/lib/Transforms/Instrumentation/TraceBasicBlocks.cpp
index 746e82221a..68d50ae559 100644
--- a/lib/Transforms/Instrumentation/TraceBasicBlocks.cpp
+++ b/lib/Transforms/Instrumentation/TraceBasicBlocks.cpp
@@ -18,6 +18,7 @@
#include "llvm/Module.h"
#include "llvm/Pass.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
+#include "llvm/Transforms/Instrumentation.h"
#include "llvm/Instructions.h"
#include "ProfilingUtils.h"
#include "llvm/Support/Debug.h"
@@ -33,6 +34,11 @@ namespace {
"Insert instrumentation for basic block tracing");
}
+ModulePass *llvm::createTraceBasicBlockPass()
+{
+ return new TraceBasicBlocks();
+}
+
static void InsertInstrumentationCall (BasicBlock *BB,
const std::string FnName,
unsigned BBNumber) {