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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242426 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Cong Hou
2015-07-16 18:23:57 +00:00
parent 4a6d99b0a9
commit 204b59072d
6 changed files with 47 additions and 7 deletions

View File

@@ -622,7 +622,7 @@ public:
} }
/// Create the loop forest using a stable algorithm. /// Create the loop forest using a stable algorithm.
void Analyze(DominatorTreeBase<BlockT> &DomTree); void analyze(const DominatorTreeBase<BlockT> &DomTree);
// Debugging // Debugging
void print(raw_ostream &OS) const; void print(raw_ostream &OS) const;

View File

@@ -345,7 +345,7 @@ void LoopBase<BlockT, LoopT>::print(raw_ostream &OS, unsigned Depth) const {
template<class BlockT, class LoopT> template<class BlockT, class LoopT>
static void discoverAndMapSubloop(LoopT *L, ArrayRef<BlockT*> Backedges, static void discoverAndMapSubloop(LoopT *L, ArrayRef<BlockT*> Backedges,
LoopInfoBase<BlockT, LoopT> *LI, LoopInfoBase<BlockT, LoopT> *LI,
DominatorTreeBase<BlockT> &DomTree) { const DominatorTreeBase<BlockT> &DomTree) {
typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits; typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits;
unsigned NumBlocks = 0; unsigned NumBlocks = 0;
@@ -468,10 +468,10 @@ void PopulateLoopsDFS<BlockT, LoopT>::insertIntoLoop(BlockT *Block) {
/// insertions per block. /// insertions per block.
template<class BlockT, class LoopT> template<class BlockT, class LoopT>
void LoopInfoBase<BlockT, LoopT>:: void LoopInfoBase<BlockT, LoopT>::
Analyze(DominatorTreeBase<BlockT> &DomTree) { analyze(const DominatorTreeBase<BlockT> &DomTree) {
// Postorder traversal of the dominator tree. // Postorder traversal of the dominator tree.
DomTreeNodeBase<BlockT>* DomRoot = DomTree.getRootNode(); const DomTreeNodeBase<BlockT> *DomRoot = DomTree.getRootNode();
for (auto DomNode : post_order(DomRoot)) { for (auto DomNode : post_order(DomRoot)) {
BlockT *Header = DomNode->getBlock(); BlockT *Header = DomNode->getBlock();

View File

@@ -263,6 +263,21 @@ template <> struct GraphTraits<MachineDomTreeNode *> {
} }
}; };
template <> struct GraphTraits<const MachineDomTreeNode *> {
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<MachineDominatorTree*> template <> struct GraphTraits<MachineDominatorTree*>
: public GraphTraits<MachineDomTreeNode *> { : public GraphTraits<MachineDomTreeNode *> {
static NodeType *getEntryNode(MachineDominatorTree *DT) { static NodeType *getEntryNode(MachineDominatorTree *DT) {

View File

@@ -147,6 +147,31 @@ template <> struct GraphTraits<DomTreeNode*> {
} }
}; };
template <> struct GraphTraits<const DomTreeNode *> {
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<const DomTreeNode *> 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<DominatorTree*> template <> struct GraphTraits<DominatorTree*>
: public GraphTraits<DomTreeNode*> { : public GraphTraits<DomTreeNode*> {
static NodeType *getEntryNode(DominatorTree *DT) { static NodeType *getEntryNode(DominatorTree *DT) {

View File

@@ -675,7 +675,7 @@ LoopInfo LoopAnalysis::run(Function &F, AnalysisManager<Function> *AM) {
// objects. I don't want to add that kind of complexity until the scope of // objects. I don't want to add that kind of complexity until the scope of
// the problem is better understood. // the problem is better understood.
LoopInfo LI; LoopInfo LI;
LI.Analyze(AM->getResult<DominatorTreeAnalysis>(F)); LI.analyze(AM->getResult<DominatorTreeAnalysis>(F));
return LI; return LI;
} }
@@ -698,7 +698,7 @@ INITIALIZE_PASS_END(LoopInfoWrapperPass, "loops", "Natural Loop Information",
bool LoopInfoWrapperPass::runOnFunction(Function &) { bool LoopInfoWrapperPass::runOnFunction(Function &) {
releaseMemory(); releaseMemory();
LI.Analyze(getAnalysis<DominatorTreeWrapperPass>().getDomTree()); LI.analyze(getAnalysis<DominatorTreeWrapperPass>().getDomTree());
return false; return false;
} }

View File

@@ -37,7 +37,7 @@ char &llvm::MachineLoopInfoID = MachineLoopInfo::ID;
bool MachineLoopInfo::runOnMachineFunction(MachineFunction &) { bool MachineLoopInfo::runOnMachineFunction(MachineFunction &) {
releaseMemory(); releaseMemory();
LI.Analyze(getAnalysis<MachineDominatorTree>().getBase()); LI.analyze(getAnalysis<MachineDominatorTree>().getBase());
return false; return false;
} }