mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[GraphTraits] Make nodes_iterator dereference to NodeType*/NodeRef
Currently nodes_iterator may dereference to a NodeType* or a NodeType&. Make them all dereference to NodeType*, which is NodeRef later. Differential Revision: https://reviews.llvm.org/D23704 Differential Revision: https://reviews.llvm.org/D23705 llvm-svn: 279326
This commit is contained in:
parent
fb48f6eebf
commit
823bde34b3
@ -34,7 +34,8 @@ struct GraphTraits {
|
||||
//
|
||||
// typedef NodeType - Type of Node in the graph
|
||||
// typedef NodeRef - NodeType *
|
||||
// typedef ChildIteratorType - Type used to iterate over children in graph
|
||||
// typedef ChildIteratorType - Type used to iterate over children in graph,
|
||||
// dereference to a NodeRef
|
||||
|
||||
// static NodeRef getEntryNode(const GraphType &)
|
||||
// Return the entry node of the graph
|
||||
@ -45,7 +46,7 @@ struct GraphTraits {
|
||||
// node list for the specified node.
|
||||
//
|
||||
|
||||
// typedef ...iterator nodes_iterator;
|
||||
// typedef ...iterator nodes_iterator; - dereference to a NodeRef
|
||||
// static nodes_iterator nodes_begin(GraphType *G)
|
||||
// static nodes_iterator nodes_end (GraphType *G)
|
||||
// nodes_iterator/begin/end - Allow iteration over all nodes in the graph
|
||||
|
@ -1271,7 +1271,7 @@ struct BFIDOTGraphTraitsBase : public DefaultDOTGraphTraits {
|
||||
for (NodeIter I = GTraits::nodes_begin(Graph),
|
||||
E = GTraits::nodes_end(Graph);
|
||||
I != E; ++I) {
|
||||
NodeRef N = &*I;
|
||||
NodeRef N = *I;
|
||||
MaxFrequency =
|
||||
std::max(MaxFrequency, Graph->getBlockFreq(N).getFrequency());
|
||||
}
|
||||
|
@ -460,7 +460,7 @@ struct GraphTraits<CallGraph *> : public GraphTraits<CallGraphNode *> {
|
||||
}
|
||||
typedef std::pair<const Function *const, std::unique_ptr<CallGraphNode>>
|
||||
PairTy;
|
||||
typedef std::pointer_to_unary_function<const PairTy &, CallGraphNode &>
|
||||
typedef std::pointer_to_unary_function<const PairTy &, CallGraphNode *>
|
||||
DerefFun;
|
||||
|
||||
// nodes_iterator/begin/end - Allow iteration over all nodes in the graph
|
||||
@ -472,7 +472,7 @@ struct GraphTraits<CallGraph *> : public GraphTraits<CallGraphNode *> {
|
||||
return map_iterator(CG->end(), DerefFun(CGdereference));
|
||||
}
|
||||
|
||||
static CallGraphNode &CGdereference(const PairTy &P) { return *P.second; }
|
||||
static CallGraphNode *CGdereference(const PairTy &P) { return P.second.get(); }
|
||||
};
|
||||
|
||||
template <>
|
||||
@ -483,7 +483,7 @@ struct GraphTraits<const CallGraph *> : public GraphTraits<
|
||||
}
|
||||
typedef std::pair<const Function *const, std::unique_ptr<CallGraphNode>>
|
||||
PairTy;
|
||||
typedef std::pointer_to_unary_function<const PairTy &, const CallGraphNode &>
|
||||
typedef std::pointer_to_unary_function<const PairTy &, const CallGraphNode *>
|
||||
DerefFun;
|
||||
|
||||
// nodes_iterator/begin/end - Allow iteration over all nodes in the graph
|
||||
@ -495,8 +495,8 @@ struct GraphTraits<const CallGraph *> : public GraphTraits<
|
||||
return map_iterator(CG->end(), DerefFun(CGdereference));
|
||||
}
|
||||
|
||||
static const CallGraphNode &CGdereference(const PairTy &P) {
|
||||
return *P.second;
|
||||
static const CallGraphNode *CGdereference(const PairTy &P) {
|
||||
return P.second.get();
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -625,9 +625,13 @@ template <> struct GraphTraits<MachineFunction*> :
|
||||
}
|
||||
|
||||
// nodes_iterator/begin/end - Allow iteration over all nodes in the graph
|
||||
typedef MachineFunction::iterator nodes_iterator;
|
||||
static nodes_iterator nodes_begin(MachineFunction *F) { return F->begin(); }
|
||||
static nodes_iterator nodes_end (MachineFunction *F) { return F->end(); }
|
||||
typedef pointer_iterator<MachineFunction::iterator> nodes_iterator;
|
||||
static nodes_iterator nodes_begin(MachineFunction *F) {
|
||||
return nodes_iterator(F->begin());
|
||||
}
|
||||
static nodes_iterator nodes_end(MachineFunction *F) {
|
||||
return nodes_iterator(F->end());
|
||||
}
|
||||
static unsigned size (MachineFunction *F) { return F->size(); }
|
||||
};
|
||||
template <> struct GraphTraits<const MachineFunction*> :
|
||||
@ -637,12 +641,12 @@ template <> struct GraphTraits<const MachineFunction*> :
|
||||
}
|
||||
|
||||
// nodes_iterator/begin/end - Allow iteration over all nodes in the graph
|
||||
typedef MachineFunction::const_iterator nodes_iterator;
|
||||
typedef pointer_iterator<MachineFunction::const_iterator> nodes_iterator;
|
||||
static nodes_iterator nodes_begin(const MachineFunction *F) {
|
||||
return F->begin();
|
||||
return nodes_iterator(F->begin());
|
||||
}
|
||||
static nodes_iterator nodes_end (const MachineFunction *F) {
|
||||
return F->end();
|
||||
return nodes_iterator(F->end());
|
||||
}
|
||||
static unsigned size (const MachineFunction *F) {
|
||||
return F->size();
|
||||
|
@ -692,12 +692,12 @@ namespace llvm {
|
||||
};
|
||||
|
||||
template <> struct GraphTraits<ScheduleDAG*> : public GraphTraits<SUnit*> {
|
||||
typedef std::vector<SUnit>::iterator nodes_iterator;
|
||||
typedef pointer_iterator<std::vector<SUnit>::iterator> nodes_iterator;
|
||||
static nodes_iterator nodes_begin(ScheduleDAG *G) {
|
||||
return G->SUnits.begin();
|
||||
return nodes_iterator(G->SUnits.begin());
|
||||
}
|
||||
static nodes_iterator nodes_end(ScheduleDAG *G) {
|
||||
return G->SUnits.end();
|
||||
return nodes_iterator(G->SUnits.end());
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1416,12 +1416,12 @@ private:
|
||||
};
|
||||
|
||||
template <> struct GraphTraits<SelectionDAG*> : public GraphTraits<SDNode*> {
|
||||
typedef SelectionDAG::allnodes_iterator nodes_iterator;
|
||||
typedef pointer_iterator<SelectionDAG::allnodes_iterator> nodes_iterator;
|
||||
static nodes_iterator nodes_begin(SelectionDAG *G) {
|
||||
return G->allnodes_begin();
|
||||
return nodes_iterator(G->allnodes_begin());
|
||||
}
|
||||
static nodes_iterator nodes_end(SelectionDAG *G) {
|
||||
return G->allnodes_end();
|
||||
return nodes_iterator(G->allnodes_end());
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -229,9 +229,13 @@ template <> struct GraphTraits<Function*> : public GraphTraits<BasicBlock*> {
|
||||
static NodeType *getEntryNode(Function *F) { return &F->getEntryBlock(); }
|
||||
|
||||
// nodes_iterator/begin/end - Allow iteration over all nodes in the graph
|
||||
typedef Function::iterator nodes_iterator;
|
||||
static nodes_iterator nodes_begin(Function *F) { return F->begin(); }
|
||||
static nodes_iterator nodes_end (Function *F) { return F->end(); }
|
||||
typedef pointer_iterator<Function::iterator> nodes_iterator;
|
||||
static nodes_iterator nodes_begin(Function *F) {
|
||||
return nodes_iterator(F->begin());
|
||||
}
|
||||
static nodes_iterator nodes_end(Function *F) {
|
||||
return nodes_iterator(F->end());
|
||||
}
|
||||
static size_t size (Function *F) { return F->size(); }
|
||||
};
|
||||
template <> struct GraphTraits<const Function*> :
|
||||
@ -239,9 +243,13 @@ template <> struct GraphTraits<const Function*> :
|
||||
static NodeType *getEntryNode(const Function *F) {return &F->getEntryBlock();}
|
||||
|
||||
// nodes_iterator/begin/end - Allow iteration over all nodes in the graph
|
||||
typedef Function::const_iterator nodes_iterator;
|
||||
static nodes_iterator nodes_begin(const Function *F) { return F->begin(); }
|
||||
static nodes_iterator nodes_end (const Function *F) { return F->end(); }
|
||||
typedef pointer_iterator<Function::const_iterator> nodes_iterator;
|
||||
static nodes_iterator nodes_begin(const Function *F) {
|
||||
return nodes_iterator(F->begin());
|
||||
}
|
||||
static nodes_iterator nodes_end(const Function *F) {
|
||||
return nodes_iterator(F->end());
|
||||
}
|
||||
static size_t size (const Function *F) { return F->size(); }
|
||||
};
|
||||
|
||||
|
@ -750,8 +750,8 @@ public:
|
||||
for (typename TraitsTy::nodes_iterator I = TraitsTy::nodes_begin(&F),
|
||||
E = TraitsTy::nodes_end(&F);
|
||||
I != E; ++I)
|
||||
if (TraitsTy::child_begin(&*I) == TraitsTy::child_end(&*I))
|
||||
addRoot(&*I);
|
||||
if (TraitsTy::child_begin(*I) == TraitsTy::child_end(*I))
|
||||
addRoot(*I);
|
||||
|
||||
Calculate<FT, Inverse<NodeT *>>(*this, F);
|
||||
}
|
||||
|
@ -145,22 +145,14 @@ public:
|
||||
// Loop over the graph, printing it out...
|
||||
for (node_iterator I = GTraits::nodes_begin(G), E = GTraits::nodes_end(G);
|
||||
I != E; ++I)
|
||||
if (!isNodeHidden(&*I))
|
||||
writeNode(&*I);
|
||||
}
|
||||
|
||||
bool isNodeHidden(NodeRef const *Node) {
|
||||
return isNodeHidden(*Node);
|
||||
if (!isNodeHidden(*I))
|
||||
writeNode(*I);
|
||||
}
|
||||
|
||||
bool isNodeHidden(NodeRef Node) {
|
||||
return DTraits.isNodeHidden(Node);
|
||||
}
|
||||
|
||||
void writeNode(NodeRef const *Node) {
|
||||
writeNode(*Node);
|
||||
}
|
||||
|
||||
void writeNode(NodeRef Node) {
|
||||
std::string NodeAttributes = DTraits.getNodeAttributes(Node, G);
|
||||
|
||||
|
@ -63,7 +63,7 @@ struct GraphTraits<BlockFrequencyInfo *> {
|
||||
typedef const BasicBlock NodeType;
|
||||
typedef const BasicBlock *NodeRef;
|
||||
typedef succ_const_iterator ChildIteratorType;
|
||||
typedef Function::const_iterator nodes_iterator;
|
||||
typedef pointer_iterator<Function::const_iterator> nodes_iterator;
|
||||
|
||||
static inline const NodeType *getEntryNode(const BlockFrequencyInfo *G) {
|
||||
return &G->getFunction()->front();
|
||||
@ -75,10 +75,10 @@ struct GraphTraits<BlockFrequencyInfo *> {
|
||||
return succ_end(N);
|
||||
}
|
||||
static nodes_iterator nodes_begin(const BlockFrequencyInfo *G) {
|
||||
return G->getFunction()->begin();
|
||||
return nodes_iterator(G->getFunction()->begin());
|
||||
}
|
||||
static nodes_iterator nodes_end(const BlockFrequencyInfo *G) {
|
||||
return G->getFunction()->end();
|
||||
return nodes_iterator(G->getFunction()->end());
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -55,7 +55,7 @@ template <> struct GraphTraits<MachineBlockFrequencyInfo *> {
|
||||
typedef const MachineBasicBlock NodeType;
|
||||
typedef const MachineBasicBlock *NodeRef;
|
||||
typedef MachineBasicBlock::const_succ_iterator ChildIteratorType;
|
||||
typedef MachineFunction::const_iterator nodes_iterator;
|
||||
typedef pointer_iterator<MachineFunction::const_iterator> nodes_iterator;
|
||||
|
||||
static inline const NodeType *
|
||||
getEntryNode(const MachineBlockFrequencyInfo *G) {
|
||||
@ -71,11 +71,11 @@ template <> struct GraphTraits<MachineBlockFrequencyInfo *> {
|
||||
}
|
||||
|
||||
static nodes_iterator nodes_begin(const MachineBlockFrequencyInfo *G) {
|
||||
return G->getFunction()->begin();
|
||||
return nodes_iterator(G->getFunction()->begin());
|
||||
}
|
||||
|
||||
static nodes_iterator nodes_end(const MachineBlockFrequencyInfo *G) {
|
||||
return G->getFunction()->end();
|
||||
return nodes_iterator(G->getFunction()->end());
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -840,7 +840,7 @@ bool AMDGPUCFGStructurizer::run() {
|
||||
} //while, "one iteration" over the function.
|
||||
|
||||
MachineBasicBlock *EntryMBB =
|
||||
&*GraphTraits<MachineFunction *>::nodes_begin(FuncRep);
|
||||
*GraphTraits<MachineFunction *>::nodes_begin(FuncRep);
|
||||
if (EntryMBB->succ_size() == 0) {
|
||||
Finish = true;
|
||||
DEBUG(
|
||||
@ -863,7 +863,7 @@ bool AMDGPUCFGStructurizer::run() {
|
||||
} while (!Finish && MakeProgress);
|
||||
|
||||
// Misc wrap up to maintain the consistency of the Function representation.
|
||||
wrapup(&*GraphTraits<MachineFunction *>::nodes_begin(FuncRep));
|
||||
wrapup(*GraphTraits<MachineFunction *>::nodes_begin(FuncRep));
|
||||
|
||||
// Detach retired Block, release memory.
|
||||
for (MBBInfoMap::iterator It = BlockInfoMap.begin(), E = BlockInfoMap.end();
|
||||
@ -907,9 +907,9 @@ void AMDGPUCFGStructurizer::orderBlocks(MachineFunction *MF) {
|
||||
|
||||
//walk through all the block in func to check for unreachable
|
||||
typedef GraphTraits<MachineFunction *> GTM;
|
||||
MachineFunction::iterator It = GTM::nodes_begin(MF), E = GTM::nodes_end(MF);
|
||||
auto It = GTM::nodes_begin(MF), E = GTM::nodes_end(MF);
|
||||
for (; It != E; ++It) {
|
||||
MachineBasicBlock *MBB = &(*It);
|
||||
MachineBasicBlock *MBB = *It;
|
||||
SccNum = getSCCNum(MBB);
|
||||
if (SccNum == INVALIDSCCNUM)
|
||||
dbgs() << "unreachable block BB" << MBB->getNumber() << "\n";
|
||||
|
@ -211,7 +211,7 @@ bool NaryReassociatePass::doOneIteration(Function &F) {
|
||||
// ensures that all bases of a candidate are in Candidates when we process it.
|
||||
for (auto Node = GraphTraits<DominatorTree *>::nodes_begin(DT);
|
||||
Node != GraphTraits<DominatorTree *>::nodes_end(DT); ++Node) {
|
||||
BasicBlock *BB = Node->getBlock();
|
||||
BasicBlock *BB = (*Node)->getBlock();
|
||||
for (auto I = BB->begin(); I != BB->end(); ++I) {
|
||||
if (SE->isSCEVable(I->getType()) && isPotentiallyNaryReassociable(&*I)) {
|
||||
const SCEV *OldSCEV = SE->getSCEV(&*I);
|
||||
|
@ -1152,7 +1152,7 @@ bool SeparateConstOffsetFromGEP::reuniteExts(Function &F) {
|
||||
DominatingExprs.clear();
|
||||
for (auto Node = GraphTraits<DominatorTree *>::nodes_begin(DT);
|
||||
Node != GraphTraits<DominatorTree *>::nodes_end(DT); ++Node) {
|
||||
BasicBlock *BB = Node->getBlock();
|
||||
BasicBlock *BB = (*Node)->getBlock();
|
||||
for (auto I = BB->begin(); I != BB->end(); ) {
|
||||
Instruction *Cur = &*I++;
|
||||
Changed |= reuniteExts(Cur);
|
||||
|
@ -676,7 +676,7 @@ bool StraightLineStrengthReduce::runOnFunction(Function &F) {
|
||||
// all bases of a candidate are in Candidates when we process it.
|
||||
for (auto node = GraphTraits<DominatorTree *>::nodes_begin(DT);
|
||||
node != GraphTraits<DominatorTree *>::nodes_end(DT); ++node) {
|
||||
for (auto &I : *node->getBlock())
|
||||
for (auto &I : *(*node)->getBlock())
|
||||
allocateCandidatesAndFindBasis(&I);
|
||||
}
|
||||
|
||||
|
@ -24,11 +24,11 @@ template <typename Ty> void canSpecializeGraphTraitsIterators(Ty *G) {
|
||||
auto X = ++I;
|
||||
|
||||
// Should be able to iterate over all nodes of the graph.
|
||||
static_assert(std::is_same<decltype(*I), NodeTy &>::value,
|
||||
static_assert(std::is_same<decltype(*I), NodeTy *>::value,
|
||||
"Node type does not match");
|
||||
static_assert(std::is_same<decltype(*X), NodeTy &>::value,
|
||||
static_assert(std::is_same<decltype(*X), NodeTy *>::value,
|
||||
"Node type does not match");
|
||||
static_assert(std::is_same<decltype(*E), NodeTy &>::value,
|
||||
static_assert(std::is_same<decltype(*E), NodeTy *>::value,
|
||||
"Node type does not match");
|
||||
|
||||
NodeTy *N = GraphTraits<Ty *>::getEntryNode(G);
|
||||
|
Loading…
x
Reference in New Issue
Block a user