diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2013-07-19 10:57:36 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2013-07-19 10:57:36 +0000 |
commit | 47042bcc266285676f8ff284e5d46a2c196c367b (patch) | |
tree | 49b9920f1b5c4c75691d7bb04247e0269955a096 /lib/Transforms/Scalar/SROA.cpp | |
parent | fbf2a026224b80d9c1513060082195dc10a99d75 (diff) | |
download | llvm-47042bcc266285676f8ff284e5d46a2c196c367b.tar.gz llvm-47042bcc266285676f8ff284e5d46a2c196c367b.tar.bz2 llvm-47042bcc266285676f8ff284e5d46a2c196c367b.tar.xz |
Cleanup the stats counters for the new implementation. These actually
count the right things and have the right names.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186667 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/SROA.cpp')
-rw-r--r-- | lib/Transforms/Scalar/SROA.cpp | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/lib/Transforms/Scalar/SROA.cpp b/lib/Transforms/Scalar/SROA.cpp index 5d7fa4b01f..2c1aef68fb 100644 --- a/lib/Transforms/Scalar/SROA.cpp +++ b/lib/Transforms/Scalar/SROA.cpp @@ -59,9 +59,9 @@ using namespace llvm; STATISTIC(NumAllocasAnalyzed, "Number of allocas analyzed for replacement"); STATISTIC(NumAllocaPartitions, "Number of alloca partitions formed"); -STATISTIC(MaxPartitionsPerAlloca, "Maximum number of partitions"); -STATISTIC(NumAllocaPartitionUses, "Number of alloca partition uses found"); -STATISTIC(MaxPartitionUsesPerAlloca, "Maximum number of partition uses"); +STATISTIC(MaxPartitionsPerAlloca, "Maximum number of partitions per alloca"); +STATISTIC(NumAllocaPartitionUses, "Number of alloca partition uses rewritten"); +STATISTIC(MaxUsesPerAllocaPartition, "Maximum number of uses of a partition"); STATISTIC(NumNewAllocas, "Number of new, smaller allocas introduced"); STATISTIC(NumPromoted, "Number of allocas promoted to SSA values"); STATISTIC(NumLoadsSpeculated, "Number of loads speculated to allow promotion"); @@ -682,15 +682,6 @@ AllocaSlices::AllocaSlices(const DataLayout &DL, AllocaInst &AI) Slices.erase(std::remove_if(Slices.begin(), Slices.end(), IsSliceDead()), Slices.end()); - - // Record how many slices we end up with. - NumAllocaPartitions += Slices.size(); - MaxPartitionsPerAlloca = - std::max<unsigned>(Slices.size(), MaxPartitionsPerAlloca); - - NumAllocaPartitionUses += Slices.size(); - MaxPartitionUsesPerAlloca = - std::max<unsigned>(Slices.size(), MaxPartitionUsesPerAlloca); } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) @@ -3045,6 +3036,10 @@ bool SROA::rewritePartition(AllocaInst &AI, AllocaSlices &S, unsigned SPOldSize = SpeculatablePHIs.size(); unsigned SSOldSize = SpeculatableSelects.size(); +#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS) + unsigned NumUses = 0; +#endif + AllocaSliceRewriter Rewriter(*DL, S, *this, AI, *NewAI, BeginOffset, EndOffset, IsVectorPromotable, IsIntegerPromotable); @@ -3055,13 +3050,25 @@ bool SROA::rewritePartition(AllocaInst &AI, AllocaSlices &S, DEBUG(dbgs() << " rewriting split "); DEBUG(S.printSlice(dbgs(), *SUI, "")); Promotable &= Rewriter.visit(*SUI); +#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS) + ++NumUses; +#endif } for (AllocaSlices::iterator I = B; I != E; ++I) { DEBUG(dbgs() << " rewriting "); DEBUG(S.printSlice(dbgs(), I, "")); Promotable &= Rewriter.visit(I); +#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS) + ++NumUses; +#endif } +#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS) + NumAllocaPartitionUses += NumUses; + MaxUsesPerAllocaPartition = + std::max<unsigned>(NumUses, MaxUsesPerAllocaPartition); +#endif + if (Promotable && (SpeculatablePHIs.size() > SPOldSize || SpeculatableSelects.size() > SSOldSize)) { // If we have a promotable alloca except for some unspeculated loads below @@ -3135,6 +3142,10 @@ bool SROA::splitAlloca(AllocaInst &AI, AllocaSlices &S) { if (S.begin() == S.end()) return false; +#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS) + unsigned NumPartitions = 0; +#endif + bool Changed = false; SmallVector<AllocaSlices::iterator, 4> SplitUses; uint64_t MaxSplitUseEndOffset = 0; @@ -3181,6 +3192,9 @@ bool SROA::splitAlloca(AllocaInst &AI, AllocaSlices &S) { // Rewrite a sequence of overlapping slices. Changed |= rewritePartition(AI, S, SI, SJ, BeginOffset, MaxEndOffset, SplitUses); +#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS) + ++NumPartitions; +#endif removeFinishedSplitUses(SplitUses, MaxSplitUseEndOffset, MaxEndOffset); } @@ -3220,6 +3234,10 @@ bool SROA::splitAlloca(AllocaInst &AI, AllocaSlices &S) { Changed |= rewritePartition(AI, S, SJ, SJ, MaxEndOffset, PostSplitEndOffset, SplitUses); +#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS) + ++NumPartitions; +#endif + if (SJ == SE) break; // Skip the rest, we don't need to do any cleanup. @@ -3230,6 +3248,12 @@ bool SROA::splitAlloca(AllocaInst &AI, AllocaSlices &S) { BeginOffset = SJ->beginOffset(); } +#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS) + NumAllocaPartitions += NumPartitions; + MaxPartitionsPerAlloca = + std::max<unsigned>(NumPartitions, MaxPartitionsPerAlloca); +#endif + return Changed; } |