[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