From d2c1d91ed0e13298f8ce74b079d234ccb249d945 Mon Sep 17 00:00:00 2001 From: Cong Hou Date: Thu, 16 Jul 2015 18:23:57 +0000 Subject: [PATCH] Rename LoopInfo::Analyze() to LoopInfo::analyze() and turn its parameter type to const&. The benefit of turning the parameter of LoopInfo::analyze() to const& is that it now can accept a rvalue. http://reviews.llvm.org/D11250 llvm-svn: 242426 --- llvm/include/llvm/Analysis/LoopInfo.h | 2 +- llvm/include/llvm/Analysis/LoopInfoImpl.h | 6 ++--- llvm/include/llvm/CodeGen/MachineDominators.h | 15 +++++++++++ llvm/include/llvm/IR/Dominators.h | 25 +++++++++++++++++++ llvm/lib/Analysis/LoopInfo.cpp | 4 +-- llvm/lib/CodeGen/MachineLoopInfo.cpp | 2 +- 6 files changed, 47 insertions(+), 7 deletions(-) diff --git a/llvm/include/llvm/Analysis/LoopInfo.h b/llvm/include/llvm/Analysis/LoopInfo.h index 3ec83f2c21fd..292a8b2b6d26 100644 --- a/llvm/include/llvm/Analysis/LoopInfo.h +++ b/llvm/include/llvm/Analysis/LoopInfo.h @@ -622,7 +622,7 @@ public: } /// Create the loop forest using a stable algorithm. - void Analyze(DominatorTreeBase &DomTree); + void analyze(const DominatorTreeBase &DomTree); // Debugging void print(raw_ostream &OS) const; diff --git a/llvm/include/llvm/Analysis/LoopInfoImpl.h b/llvm/include/llvm/Analysis/LoopInfoImpl.h index f5cc856f6247..dcd9a0f4cbcf 100644 --- a/llvm/include/llvm/Analysis/LoopInfoImpl.h +++ b/llvm/include/llvm/Analysis/LoopInfoImpl.h @@ -345,7 +345,7 @@ void LoopBase::print(raw_ostream &OS, unsigned Depth) const { template static void discoverAndMapSubloop(LoopT *L, ArrayRef Backedges, LoopInfoBase *LI, - DominatorTreeBase &DomTree) { + const DominatorTreeBase &DomTree) { typedef GraphTraits > InvBlockTraits; unsigned NumBlocks = 0; @@ -468,10 +468,10 @@ void PopulateLoopsDFS::insertIntoLoop(BlockT *Block) { /// insertions per block. template void LoopInfoBase:: -Analyze(DominatorTreeBase &DomTree) { +analyze(const DominatorTreeBase &DomTree) { // Postorder traversal of the dominator tree. - DomTreeNodeBase* DomRoot = DomTree.getRootNode(); + const DomTreeNodeBase *DomRoot = DomTree.getRootNode(); for (auto DomNode : post_order(DomRoot)) { BlockT *Header = DomNode->getBlock(); diff --git a/llvm/include/llvm/CodeGen/MachineDominators.h b/llvm/include/llvm/CodeGen/MachineDominators.h index 735dd069cf7f..0ac8a5d0e2a4 100644 --- a/llvm/include/llvm/CodeGen/MachineDominators.h +++ b/llvm/include/llvm/CodeGen/MachineDominators.h @@ -263,6 +263,21 @@ template <> struct GraphTraits { } }; +template <> struct GraphTraits { + typedef const MachineDomTreeNode NodeType; + typedef NodeType::const_iterator ChildIteratorType; + + static NodeType *getEntryNode(NodeType *N) { + return N; + } + static inline ChildIteratorType child_begin(NodeType* N) { + return N->begin(); + } + static inline ChildIteratorType child_end(NodeType* N) { + return N->end(); + } +}; + template <> struct GraphTraits : public GraphTraits { static NodeType *getEntryNode(MachineDominatorTree *DT) { diff --git a/llvm/include/llvm/IR/Dominators.h b/llvm/include/llvm/IR/Dominators.h index 27d989b0344c..8080ae7c1224 100644 --- a/llvm/include/llvm/IR/Dominators.h +++ b/llvm/include/llvm/IR/Dominators.h @@ -147,6 +147,31 @@ template <> struct GraphTraits { } }; +template <> struct GraphTraits { + typedef const DomTreeNode NodeType; + typedef NodeType::const_iterator ChildIteratorType; + + static NodeType *getEntryNode(NodeType *N) { + return N; + } + static inline ChildIteratorType child_begin(NodeType *N) { + return N->begin(); + } + static inline ChildIteratorType child_end(NodeType *N) { + return N->end(); + } + + typedef df_iterator nodes_iterator; + + static nodes_iterator nodes_begin(const DomTreeNode *N) { + return df_begin(getEntryNode(N)); + } + + static nodes_iterator nodes_end(const DomTreeNode *N) { + return df_end(getEntryNode(N)); + } +}; + template <> struct GraphTraits : public GraphTraits { static NodeType *getEntryNode(DominatorTree *DT) { diff --git a/llvm/lib/Analysis/LoopInfo.cpp b/llvm/lib/Analysis/LoopInfo.cpp index 6b6faf8a66c3..7ca811067d41 100644 --- a/llvm/lib/Analysis/LoopInfo.cpp +++ b/llvm/lib/Analysis/LoopInfo.cpp @@ -675,7 +675,7 @@ LoopInfo LoopAnalysis::run(Function &F, AnalysisManager *AM) { // objects. I don't want to add that kind of complexity until the scope of // the problem is better understood. LoopInfo LI; - LI.Analyze(AM->getResult(F)); + LI.analyze(AM->getResult(F)); return LI; } @@ -698,7 +698,7 @@ INITIALIZE_PASS_END(LoopInfoWrapperPass, "loops", "Natural Loop Information", bool LoopInfoWrapperPass::runOnFunction(Function &) { releaseMemory(); - LI.Analyze(getAnalysis().getDomTree()); + LI.analyze(getAnalysis().getDomTree()); return false; } diff --git a/llvm/lib/CodeGen/MachineLoopInfo.cpp b/llvm/lib/CodeGen/MachineLoopInfo.cpp index ce6abdd870b3..e19e6e30a01c 100644 --- a/llvm/lib/CodeGen/MachineLoopInfo.cpp +++ b/llvm/lib/CodeGen/MachineLoopInfo.cpp @@ -37,7 +37,7 @@ char &llvm::MachineLoopInfoID = MachineLoopInfo::ID; bool MachineLoopInfo::runOnMachineFunction(MachineFunction &) { releaseMemory(); - LI.Analyze(getAnalysis().getBase()); + LI.analyze(getAnalysis().getBase()); return false; }