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.
void Analyze(DominatorTreeBase<BlockT> &DomTree);
void analyze(const DominatorTreeBase<BlockT> &DomTree);
// Debugging
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>
static void discoverAndMapSubloop(LoopT *L, ArrayRef<BlockT*> Backedges,
LoopInfoBase<BlockT, LoopT> *LI,
DominatorTreeBase<BlockT> &DomTree) {
const DominatorTreeBase<BlockT> &DomTree) {
typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits;
unsigned NumBlocks = 0;
@ -468,10 +468,10 @@ void PopulateLoopsDFS<BlockT, LoopT>::insertIntoLoop(BlockT *Block) {
/// insertions per block.
template<class BlockT, class LoopT>
void LoopInfoBase<BlockT, LoopT>::
Analyze(DominatorTreeBase<BlockT> &DomTree) {
analyze(const DominatorTreeBase<BlockT> &DomTree) {
// Postorder traversal of the dominator tree.
DomTreeNodeBase<BlockT>* DomRoot = DomTree.getRootNode();
const DomTreeNodeBase<BlockT> *DomRoot = DomTree.getRootNode();
for (auto DomNode : post_order(DomRoot)) {
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*>
: public GraphTraits<MachineDomTreeNode *> {
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*>
: public GraphTraits<DomTreeNode*> {
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
// the problem is better understood.
LoopInfo LI;
LI.Analyze(AM->getResult<DominatorTreeAnalysis>(F));
LI.analyze(AM->getResult<DominatorTreeAnalysis>(F));
return LI;
}
@ -698,7 +698,7 @@ INITIALIZE_PASS_END(LoopInfoWrapperPass, "loops", "Natural Loop Information",
bool LoopInfoWrapperPass::runOnFunction(Function &) {
releaseMemory();
LI.Analyze(getAnalysis<DominatorTreeWrapperPass>().getDomTree());
LI.analyze(getAnalysis<DominatorTreeWrapperPass>().getDomTree());
return false;
}

View File

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