[llvm-commits] CVS: llvm/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp
Anand Shukla
ashukla at cs.uiuc.edu
Thu Jun 5 01:03:08 PDT 2003
Changes in directory llvm/lib/Transforms/Instrumentation/ProfilePaths:
ProfilePaths.cpp updated: 1.27 -> 1.28
---
Log message:
Fixed a bug so initialization code is always inserted in main
---
Diffs of the changes:
Index: llvm/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp
diff -u llvm/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp:1.27 llvm/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp:1.28
--- llvm/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp:1.27 Wed Apr 23 11:37:41 2003
+++ llvm/lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp Thu Jun 5 01:02:46 2003
@@ -29,10 +29,12 @@
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
#include "llvm/iMemory.h"
+#include "llvm/iOperators.h"
+#include "llvm/iOther.h"
#include "llvm/Module.h"
#include "Graph.h"
#include <fstream>
-
+#include <stdio.h>
using std::vector;
struct ProfilePaths : public FunctionPass {
@@ -61,7 +63,7 @@
bool ProfilePaths::runOnFunction(Function &F){
static int mn = -1;
-
+ static int CountCounter = 1;
if(F.isExternal()) {
return false;
}
@@ -157,6 +159,38 @@
//if(numPaths<=1) return false;
+ static GlobalVariable *threshold = NULL;
+ static bool insertedThreshold = false;
+
+ if(!insertedThreshold){
+ threshold = new GlobalVariable(Type::IntTy, false,
+ GlobalValue::ExternalLinkage, 0,
+ "reopt_threshold");
+
+ F.getParent()->getGlobalList().push_back(threshold);
+ insertedThreshold = true;
+ }
+
+ assert(threshold && "GlobalVariable threshold not defined!");
+
+
+ if(fr->getParent()->getName() == "main"){
+ //intialize threshold
+ vector<const Type*> initialize_args;
+ initialize_args.push_back(PointerType::get(Type::IntTy));
+
+ const FunctionType *Fty = FunctionType::get(Type::VoidTy, initialize_args,
+ false);
+ Function *initialMeth = fr->getParent()->getParent()->getOrInsertFunction("reoptimizerInitialize", Fty);
+ assert(initialMeth && "Initialize method could not be inserted!");
+
+ vector<Value *> trargs;
+ trargs.push_back(threshold);
+
+ new CallInst(initialMeth, trargs, "", fr->begin());
+ }
+
+
if(numPaths<=1 || numPaths >5000) return false;
#ifdef DEBUG_PATH_PROFILES
@@ -185,24 +219,15 @@
const ArrayType *ATy = ArrayType::get(Type::IntTy, numPaths);
Constant *initializer = ConstantArray::get(ATy, arrayInitialize);
+ char tempChar[20];
+ sprintf(tempChar, "Count%d", CountCounter);
+ CountCounter++;
+ std::string countStr = tempChar;
GlobalVariable *countVar = new GlobalVariable(ATy, false,
GlobalValue::InternalLinkage,
- initializer, "Count",
+ initializer, countStr,
F.getParent());
- static GlobalVariable *threshold = NULL;
- static bool insertedThreshold = false;
-
- if(!insertedThreshold){
- threshold = new GlobalVariable(Type::IntTy, false,
- GlobalValue::ExternalLinkage, 0,
- "reopt_threshold");
-
- F.getParent()->getGlobalList().push_back(threshold);
- insertedThreshold = true;
- }
-
- assert(threshold && "GlobalVariable threshold not defined!");
-
+
// insert initialization code in first (entry) BB
// this includes initializing r and count
insertInTopBB(&F.getEntryNode(),numPaths, rVar, threshold);
More information about the llvm-commits
mailing list