Convert a ton of simple integer type equality tests to the new predicate.
[oota-llvm.git] / lib / ExecutionEngine / JIT / OProfileJITEventListener.cpp
index beea80c889e53010f1adce33f10553e7180530cb..d01c4b2db5419af436b0bedfc74ac9a93053bc90 100644 (file)
@@ -43,16 +43,16 @@ public:
   virtual void NotifyFunctionEmitted(const Function &F,
                                      void *FnStart, size_t FnSize,
                                      const EmittedFunctionDetails &Details);
-  virtual void NotifyFreeingMachineCode(const Function &F, void *OldPtr);
+  virtual void NotifyFreeingMachineCode(void *OldPtr);
 };
 
 OProfileJITEventListener::OProfileJITEventListener()
     : Agent(op_open_agent()) {
   if (Agent == NULL) {
     const std::string err_str = sys::StrError();
-    DEBUG(errs() << "Failed to connect to OProfile agent: " << err_str << "\n");
+    DEBUG(dbgs() << "Failed to connect to OProfile agent: " << err_str << "\n");
   } else {
-    DEBUG(errs() << "Connected to OProfile agent.\n");
+    DEBUG(dbgs() << "Connected to OProfile agent.\n");
   }
 }
 
@@ -60,35 +60,27 @@ OProfileJITEventListener::~OProfileJITEventListener() {
   if (Agent != NULL) {
     if (op_close_agent(Agent) == -1) {
       const std::string err_str = sys::StrError();
-      DEBUG(errs() << "Failed to disconnect from OProfile agent: "
+      DEBUG(dbgs() << "Failed to disconnect from OProfile agent: "
                    << err_str << "\n");
     } else {
-      DEBUG(errs() << "Disconnected from OProfile agent.\n");
+      DEBUG(dbgs() << "Disconnected from OProfile agent.\n");
     }
   }
 }
 
 class FilenameCache {
-  // Holds the filename of each CompileUnit, so that we can pass the
-  // pointer into oprofile.  These char*s are freed in the destructor.
-  DenseMap<GlobalVariable*, char*> Filenames;
-  // Used as the scratch space in DICompileUnit::getFilename().
-  std::string TempFilename;
+  // Holds the filename of each Scope, so that we can pass a null-terminated
+  // string into oprofile.
+  DenseMap<MDNode*, std::string> Filenames;
 
  public:
-  const char* getFilename(GlobalVariable *CompileUnit) {
-    char *&Filename = Filenames[CompileUnit];
-    if (Filename == NULL) {
-      DICompileUnit CU(CompileUnit);
-      Filename = strdup(CU.getFilename(TempFilename).c_str());
-    }
-    return Filename;
-  }
-  ~FilenameCache() {
-    for (DenseMap<GlobalVariable*, char*>::iterator
-             I = Filenames.begin(), E = Filenames.end(); I != E;++I) {
-      free(I->second);
+  const char *getFilename(MDNode *Scope) {
+    std::string &Filename = Filenames[Scope];
+    if (Filename.empty()) {
+      DIScope S(Scope);
+      Filename = S.getFilename();
     }
+    return Filename.c_str();
   }
 };
 
@@ -97,10 +89,10 @@ static debug_line_info LineStartToOProfileFormat(
     uintptr_t Address, DebugLoc Loc) {
   debug_line_info Result;
   Result.vma = Address;
-  const DebugLocTupletuple = MF.getDebugLocTuple(Loc);
+  const DebugLocTuple &tuple = MF.getDebugLocTuple(Loc);
   Result.lineno = tuple.Line;
-  Result.filename = Filenames.getFilename(tuple.CompileUnit);
-  DEBUG(errs() << "Mapping " << reinterpret_cast<void*>(Result.vma) << " to "
+  Result.filename = Filenames.getFilename(tuple.Scope);
+  DEBUG(dbgs() << "Mapping " << reinterpret_cast<void*>(Result.vma) << " to "
                << Result.filename << ":" << Result.lineno << "\n");
   return Result;
 }
@@ -113,7 +105,7 @@ void OProfileJITEventListener::NotifyFunctionEmitted(
   if (op_write_native_code(Agent, F.getName().data(),
                            reinterpret_cast<uint64_t>(FnStart),
                            FnStart, FnSize) == -1) {
-    DEBUG(errs() << "Failed to tell OProfile about native function " 
+    DEBUG(dbgs() << "Failed to tell OProfile about native function " 
           << F.getName() << " at [" 
           << FnStart << "-" << ((char*)FnStart + FnSize) << "]\n");
     return;
@@ -141,7 +133,7 @@ void OProfileJITEventListener::NotifyFunctionEmitted(
   if (!LineInfo.empty()) {
     if (op_write_debug_line_info(Agent, FnStart,
                                  LineInfo.size(), &*LineInfo.begin()) == -1) {
-      DEBUG(errs() 
+      DEBUG(dbgs() 
             << "Failed to tell OProfile about line numbers for native function "
             << F.getName() << " at [" 
             << FnStart << "-" << ((char*)FnStart + FnSize) << "]\n");
@@ -149,13 +141,13 @@ void OProfileJITEventListener::NotifyFunctionEmitted(
   }
 }
 
-// Removes the to-be-deleted function from the symbol table.
-void OProfileJITEventListener::NotifyFreeingMachineCode(
-    const Function &F, void *FnStart) {
+// Removes the being-deleted function from the symbol table.
+void OProfileJITEventListener::NotifyFreeingMachineCode(void *FnStart) {
   assert(FnStart && "Invalid function pointer");
   if (op_unload_native_code(Agent, reinterpret_cast<uint64_t>(FnStart)) == -1) {
-    DEBUG(errs() << "Failed to tell OProfile about unload of native function "
-                 << F.getName() << " at " << FnStart << "\n");
+    DEBUG(dbgs()
+          << "Failed to tell OProfile about unload of native function at "
+          << FnStart << "\n");
   }
 }