diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-04-22 03:31:37 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-04-22 03:31:37 +0000 |
commit | e1423639bb52a05022520b9c3513586a7f0e31ad (patch) | |
tree | b6d2f2c52f1ab71c8a39585adfc71f05655244da /llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp | |
parent | dc2d66e7b34c0ae93017c70900cd42a8c625b3dc (diff) | |
download | bcm5719-llvm-e1423639bb52a05022520b9c3513586a7f0e31ad.tar.gz bcm5719-llvm-e1423639bb52a05022520b9c3513586a7f0e31ad.zip |
blockfreq: Use pointers to loops instead of an index
Store pointers directly to loops inside the nodes. This could have been
done without changing the type stored in `std::vector<>`. However,
rather than computing the number of loops before constructing them
(which `LoopInfo` doesn't provide directly), I've switched to a
`vector<unique_ptr<LoopData>>`.
This adds some heap overhead, but the number of loops is typically
small.
llvm-svn: 206857
Diffstat (limited to 'llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp')
-rw-r--r-- | llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp b/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp index bc3722eb9d4..909786d366f 100644 --- a/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp +++ b/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp @@ -602,7 +602,7 @@ void BlockFrequencyInfoImplBase::clear() { // does not actually clear heap storage. std::vector<FrequencyData>().swap(Freqs); std::vector<WorkingData>().swap(Working); - std::vector<LoopData>().swap(PackagedLoops); + std::vector<std::unique_ptr<LoopData>>().swap(PackagedLoops); } /// \brief Clear all memory not needed downstream. @@ -646,7 +646,7 @@ static BlockMass &getPackageMass(BlockFrequencyInfoImplBase &BFI, const BlockNode &Node) { assert(Node.isValid()); assert(!BFI.Working[Node.Index].IsPackaged); - if (!BFI.Working[Node.Index].IsAPackage) + if (!BFI.Working[Node.Index].isAPackage()) return BFI.Working[Node.Index].Mass; return BFI.getLoopPackage(Node).Mass; @@ -744,8 +744,9 @@ void BlockFrequencyInfoImplBase::computeLoopScale(const BlockNode &LoopHead) { /// \brief Package up a loop. void BlockFrequencyInfoImplBase::packageLoop(const BlockNode &LoopHead) { DEBUG(dbgs() << "packaging-loop: " << getBlockName(LoopHead) << "\n"); - Working[LoopHead.Index].IsAPackage = true; - for (const BlockNode &M : getLoopPackage(LoopHead).Members) { + auto &PackagedLoop = getLoopPackage(LoopHead); + PackagedLoop.IsPackaged = true; + for (const BlockNode &M : PackagedLoop.Members) { DEBUG(dbgs() << " - node: " << getBlockName(M.Index) << "\n"); Working[M.Index].IsPackaged = true; } |