[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