[llvm-commits] [llvm] r129631 - /llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp

Nick Lewycky nicholas at mxc.ca
Fri Apr 15 19:05:18 PDT 2011


Author: nicholas
Date: Fri Apr 15 21:05:18 2011
New Revision: 129631

URL: http://llvm.org/viewvc/llvm-project?rev=129631&view=rev
Log:
Move the re-stemming function up top and use it where it's currently inlined.
Break the arc-profile code out to a function like the notes emission code is,
and reorder the functions in the file.

The only functionality change is that we no longer modify the Module when the
Module has no debug info to use.

Modified:
    llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp

Modified: llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp?rev=129631&r1=129630&r2=129631&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp Fri Apr 15 21:05:18 2011
@@ -54,6 +54,10 @@
     // Create the GCNO files for the Module based on DebugInfo.
     void EmitGCNO(DebugInfoFinder &DIF);
 
+    // Modify the program to track transitions along edges and call into the
+    // profiling runtime to emit .gcda files when run.
+    bool EmitProfileArcs(DebugInfoFinder &DIF);
+
     // Get pointers to the functions in the runtime library.
     Constant *getStartFileFunc();
     Constant *getEmitFunctionFunc();
@@ -285,6 +289,22 @@
   };
 }
 
+// Replace the stem of a file, or add one if missing.
+static std::string ReplaceStem(std::string orig_filename, std::string new_stem){
+  return (sys::path::stem(orig_filename) + "." + new_stem).str();
+}
+
+bool GCOVProfiler::runOnModule(Module &M) {
+  Mod = &M;
+  Ctx = &M.getContext();
+
+  DebugInfoFinder DIF;
+  DIF.processModule(*Mod);
+
+  EmitGCNO(DIF);
+  return EmitProfileArcs(DIF);
+}
+
 void GCOVProfiler::EmitGCNO(DebugInfoFinder &DIF) {
   DenseMap<const MDNode *, raw_fd_ostream *> gcno_files;
   for (DebugInfoFinder::iterator I = DIF.compile_unit_begin(),
@@ -296,9 +316,8 @@
     DICompileUnit CU(*I);
     raw_fd_ostream *&Out = gcno_files[CU];
     std::string ErrorInfo;
-    Out = new raw_fd_ostream(
-        (sys::path::stem(CU.getFilename()) + ".gcno").str().c_str(),
-        ErrorInfo, raw_fd_ostream::F_Binary);
+    Out = new raw_fd_ostream(ReplaceStem(CU.getFilename(), "gcno").c_str(),
+                             ErrorInfo, raw_fd_ostream::F_Binary);
     Out->write("oncg*404MVLL", 12);
   }
 
@@ -342,14 +361,9 @@
   }
 }
 
-bool GCOVProfiler::runOnModule(Module &M) {
-  Mod = &M;
-  Ctx = &M.getContext();
-
-  DebugInfoFinder DIF;
-  DIF.processModule(*Mod);
-
-  EmitGCNO(DIF);
+bool GCOVProfiler::EmitProfileArcs(DebugInfoFinder &DIF) {
+  if (DIF.subprogram_begin() == DIF.subprogram_end())
+    return false;
 
   SmallVector<std::pair<GlobalVariable *, uint32_t>, 8> counters_by_ident;
   for (DebugInfoFinder::iterator SPI = DIF.subprogram_begin(),
@@ -459,10 +473,6 @@
   return Mod->getOrInsertFunction("llvm_gcda_end_file", FTy);
 }
 
-static std::string ReplaceStem(std::string orig_filename, std::string new_stem){
-  return (sys::path::stem(orig_filename) + "." + new_stem).str();
-}
-
 void GCOVProfiler::InsertCounterWriteout(
     DebugInfoFinder &DIF,
     SmallVector<std::pair<GlobalVariable *, uint32_t>, 8> &counters_by_ident) {





More information about the llvm-commits mailing list