mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-18 10:24:45 +00:00
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:
@@ -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;
|
||||||
|
@@ -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();
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user