summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-04-22 03:31:37 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-04-22 03:31:37 +0000
commite1423639bb52a05022520b9c3513586a7f0e31ad (patch)
treeb6d2f2c52f1ab71c8a39585adfc71f05655244da /llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp
parentdc2d66e7b34c0ae93017c70900cd42a8c625b3dc (diff)
downloadbcm5719-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.cpp9
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;
}
OpenPOWER on IntegriCloud