From: Duncan P. N. Exon Smith Date: Tue, 22 Apr 2014 03:31:44 +0000 (+0000) Subject: blockfreq: Use a pointer for ContainingLoop too X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=40a483e980bb2ec89bd962d341f9a8fce3152c5b;p=oota-llvm.git blockfreq: Use a pointer for ContainingLoop too git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206858 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Analysis/BlockFrequencyInfoImpl.h b/include/llvm/Analysis/BlockFrequencyInfoImpl.h index ca98a2e1d22..3faec526696 100644 --- a/include/llvm/Analysis/BlockFrequencyInfoImpl.h +++ b/include/llvm/Analysis/BlockFrequencyInfoImpl.h @@ -958,16 +958,25 @@ public: /// \brief Index of loop information. struct WorkingData { LoopData *Loop; ///< The loop this block is the header of. - BlockNode ContainingLoop; ///< The block whose loop this block is inside. - bool IsPackaged; ///< Has ContainingLoop been packaged up? + LoopData *ContainingLoop; ///< The block whose loop this block is inside. BlockMass Mass; ///< Mass distribution from the entry block. - WorkingData() : Loop(nullptr), IsPackaged(false) {} + WorkingData() : Loop(nullptr), ContainingLoop(nullptr) {} - bool hasLoopHeader() const { return ContainingLoop.isValid(); } + bool hasLoopHeader() const { return ContainingLoop; } bool isLoopHeader() const { return Loop; } - /// \brief Has this block's loop been packaged up? + BlockNode getContainingHeader() const { + if (ContainingLoop) + return ContainingLoop->Header; + return BlockNode(); + } + + /// \brief Has ContainingLoop been packaged up? + bool isPackaged() const { + return ContainingLoop && ContainingLoop->IsPackaged; + } + /// \brief Has Loop been packaged up? bool isAPackage() const { return Loop && Loop->IsPackaged; } }; @@ -1041,7 +1050,7 @@ public: /// \brief Loop data: see initializeLoops(). std::vector Working; - /// \brief Indexed information about packaged loops. + /// \brief Indexed information about loops. std::vector> PackagedLoops; /// \brief Add all edges out of a packaged loop to the distribution. @@ -1452,7 +1461,7 @@ template void BlockFrequencyInfoImpl::initializeLoops() { const auto &HeaderData = Working[Header.Index]; assert(HeaderData.isLoopHeader()); - Working[Index].ContainingLoop = Header; + Working[Index].ContainingLoop = HeaderData.Loop; HeaderData.Loop->Members.push_back(Index); DEBUG(dbgs() << " - loop = " << getBlockName(Header) << ": member = " << getBlockName(Index) << "\n"); diff --git a/lib/Analysis/BlockFrequencyInfoImpl.cpp b/lib/Analysis/BlockFrequencyInfoImpl.cpp index 909786d366f..f448b128566 100644 --- a/lib/Analysis/BlockFrequencyInfoImpl.cpp +++ b/lib/Analysis/BlockFrequencyInfoImpl.cpp @@ -630,11 +630,11 @@ static void cleanup(BlockFrequencyInfoImplBase &BFI) { static BlockNode getPackagedNode(const BlockFrequencyInfoImplBase &BFI, const BlockNode &Node) { assert(Node.isValid()); - if (!BFI.Working[Node.Index].IsPackaged) + if (!BFI.Working[Node.Index].isPackaged()) return Node; - if (!BFI.Working[Node.Index].ContainingLoop.isValid()) + if (!BFI.Working[Node.Index].isAPackage()) return Node; - return getPackagedNode(BFI, BFI.Working[Node.Index].ContainingLoop); + return getPackagedNode(BFI, BFI.Working[Node.Index].getContainingHeader()); } /// \brief Get the appropriate mass for a possible pseudo-node loop package. @@ -645,7 +645,7 @@ static BlockNode getPackagedNode(const BlockFrequencyInfoImplBase &BFI, static BlockMass &getPackageMass(BlockFrequencyInfoImplBase &BFI, const BlockNode &Node) { assert(Node.isValid()); - assert(!BFI.Working[Node.Index].IsPackaged); + assert(!BFI.Working[Node.Index].isPackaged()); if (!BFI.Working[Node.Index].isAPackage()) return BFI.Working[Node.Index].Mass; @@ -681,7 +681,7 @@ void BlockFrequencyInfoImplBase::addToDist(Distribution &Dist, BlockNode Resolved = getPackagedNode(*this, Succ); assert(Resolved != LoopHead); - if (Working[Resolved.Index].ContainingLoop != LoopHead) { + if (Working[Resolved.Index].getContainingHeader() != LoopHead) { DEBUG(debugSuccessor(" exit ", Resolved)); Dist.addExit(Resolved, Weight); return; @@ -746,10 +746,10 @@ void BlockFrequencyInfoImplBase::packageLoop(const BlockNode &LoopHead) { DEBUG(dbgs() << "packaging-loop: " << getBlockName(LoopHead) << "\n"); 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; - } + DEBUG(for (const BlockNode &M + : PackagedLoop.Members) { + dbgs() << " - node: " << getBlockName(M.Index) << "\n"; + }); } void BlockFrequencyInfoImplBase::distributeMass(const BlockNode &Source,