[llvm] r180697 - Added statistics to count the number of retains/releases before/after optimization.

Michael Gottesman mgottesman at apple.com
Sun Apr 28 23:16:58 PDT 2013


Author: mgottesman
Date: Mon Apr 29 01:16:57 2013
New Revision: 180697

URL: http://llvm.org/viewvc/llvm-project?rev=180697&view=rev
Log:
Added statistics to count the number of retains/releases before/after optimization.

Modified:
    llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp

Modified: llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp?rev=180697&r1=180696&r2=180697&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp (original)
+++ llvm/trunk/lib/Transforms/ObjCARC/ObjCARCOpts.cpp Mon Apr 29 01:16:57 2013
@@ -303,6 +303,14 @@ STATISTIC(NumRets,        "Number of ret
                           "retain+autoreleaes eliminated");
 STATISTIC(NumRRs,         "Number of retain+release paths eliminated");
 STATISTIC(NumPeeps,       "Number of calls peephole-optimized");
+STATISTIC(NumRetainsBeforeOpt,
+          "Number of retains before optimization.");
+STATISTIC(NumReleasesBeforeOpt,
+          "Number of releases before optimization.");
+STATISTIC(NumRetainsAfterOpt,
+          "Number of retains after optimization.");
+STATISTIC(NumReleasesAfterOpt,
+          "Number of releases after optimization.");
 
 namespace {
   /// \enum Sequence
@@ -1093,6 +1101,10 @@ namespace {
 
     void OptimizeReturns(Function &F);
 
+#ifndef NDEBUG
+    void GatherStatistics(Function &F, bool AfterOptimization = false);
+#endif
+
     virtual void getAnalysisUsage(AnalysisUsage &AU) const;
     virtual bool doInitialization(Module &M);
     virtual bool runOnFunction(Function &F);
@@ -1480,6 +1492,7 @@ void ObjCARCOpt::OptimizeIndividualCalls
         break;
       // FALLTHROUGH
     case IC_Retain:
+      ++NumRetainsBeforeOpt;
       OptimizeRetainCall(F, Inst);
       break;
     case IC_RetainRV:
@@ -1489,6 +1502,9 @@ void ObjCARCOpt::OptimizeIndividualCalls
     case IC_AutoreleaseRV:
       OptimizeAutoreleaseRVCall(F, Inst, Class);
       break;
+    case IC_Release:
+      ++NumReleasesBeforeOpt;
+      break;
     }
 
     // objc_autorelease(x) -> objc_release(x) if x is otherwise unused.
@@ -3006,6 +3022,30 @@ void ObjCARCOpt::OptimizeReturns(Functio
   }
 }
 
+#ifndef NDEBUG
+void
+ObjCARCOpt::GatherStatistics(Function &F, bool AfterOptimization) {
+  llvm::Statistic &NumRetains =
+    AfterOptimization? NumRetainsAfterOpt : NumRetainsBeforeOpt;
+  llvm::Statistic &NumReleases =
+    AfterOptimization? NumReleasesAfterOpt : NumReleasesBeforeOpt;
+
+  for (inst_iterator I = inst_begin(&F), E = inst_end(&F); I != E; ) {
+    Instruction *Inst = &*I++;
+    switch (GetBasicInstructionClass(Inst)) {
+    default:
+      break;
+    case IC_Retain:
+      ++NumRetains;
+      break;
+    case IC_Release:
+      ++NumReleases;
+      break;
+    }
+  }
+}
+#endif
+
 bool ObjCARCOpt::doInitialization(Module &M) {
   if (!EnableARCOpts)
     return false;
@@ -3092,6 +3132,13 @@ bool ObjCARCOpt::runOnFunction(Function
                             (1 << IC_AutoreleaseRV)))
     OptimizeReturns(F);
 
+  // Gather statistics after optimization.
+#ifndef NDEBUG
+  if (AreStatisticsEnabled()) {
+    GatherStatistics(F, true);
+  }
+#endif
+
   DEBUG(dbgs() << "\n");
 
   return Changed;





More information about the llvm-commits mailing list