Add allnodes() iterator range to SelectionDAG. NFC.

SelectionDAG already had begin/end methods for iterating over all
the nodes, but didn't define an iterator_range for us in foreach
loops.

This adds such a method and uses it in some of the eligible places
throughout the backends.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242212 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Pete Cooper 2015-07-14 22:10:54 +00:00
parent 4362ca6c77
commit ba77f37392
5 changed files with 20 additions and 20 deletions

View File

@ -323,6 +323,14 @@ public:
return AllNodes.size(); return AllNodes.size();
} }
iterator_range<allnodes_iterator> allnodes() {
return iterator_range<allnodes_iterator>(allnodes_begin(), allnodes_end());
}
iterator_range<allnodes_const_iterator> allnodes() const {
return iterator_range<allnodes_const_iterator>(allnodes_begin(),
allnodes_end());
}
/// Return the root tag of the SelectionDAG. /// Return the root tag of the SelectionDAG.
const SDValue &getRoot() const { return Root; } const SDValue &getRoot() const { return Root; }

View File

@ -725,9 +725,8 @@ void ScheduleDAGLinearize::Schedule() {
SmallVector<SDNode*, 8> Glues; SmallVector<SDNode*, 8> Glues;
unsigned DAGSize = 0; unsigned DAGSize = 0;
for (SelectionDAG::allnodes_iterator I = DAG->allnodes_begin(), for (SDNode &Node : DAG->allnodes()) {
E = DAG->allnodes_end(); I != E; ++I) { SDNode *N = &Node;
SDNode *N = I;
// Use node id to record degree. // Use node id to record degree.
unsigned Degree = N->use_size(); unsigned Degree = N->use_size();

View File

@ -289,9 +289,8 @@ void ScheduleDAGSDNodes::ClusterNeighboringLoads(SDNode *Node) {
/// ClusterNodes - Cluster certain nodes which should be scheduled together. /// ClusterNodes - Cluster certain nodes which should be scheduled together.
/// ///
void ScheduleDAGSDNodes::ClusterNodes() { void ScheduleDAGSDNodes::ClusterNodes() {
for (SelectionDAG::allnodes_iterator NI = DAG->allnodes_begin(), for (SDNode &NI : DAG->allnodes()) {
E = DAG->allnodes_end(); NI != E; ++NI) { SDNode *Node = &NI;
SDNode *Node = &*NI;
if (!Node || !Node->isMachineOpcode()) if (!Node || !Node->isMachineOpcode())
continue; continue;
@ -308,9 +307,8 @@ void ScheduleDAGSDNodes::BuildSchedUnits() {
// to their associated SUnits by holding SUnits table indices. A value // to their associated SUnits by holding SUnits table indices. A value
// of -1 means the SDNode does not yet have an associated SUnit. // of -1 means the SDNode does not yet have an associated SUnit.
unsigned NumNodes = 0; unsigned NumNodes = 0;
for (SelectionDAG::allnodes_iterator NI = DAG->allnodes_begin(), for (SDNode &NI : DAG->allnodes()) {
E = DAG->allnodes_end(); NI != E; ++NI) { NI.setNodeId(-1);
NI->setNodeId(-1);
++NumNodes; ++NumNodes;
} }

View File

@ -1371,18 +1371,14 @@ void AMDGPUDAGToDAGISel::PostprocessISelDAG() {
do { do {
IsModified = false; IsModified = false;
// Go over all selected nodes and try to fold them a bit more // Go over all selected nodes and try to fold them a bit more
for (SelectionDAG::allnodes_iterator I = CurDAG->allnodes_begin(), for (SDNode &Node : CurDAG->allnodes()) {
E = CurDAG->allnodes_end(); I != E; ++I) { MachineSDNode *MachineNode = dyn_cast<MachineSDNode>(&Node);
SDNode *Node = I;
MachineSDNode *MachineNode = dyn_cast<MachineSDNode>(I);
if (!MachineNode) if (!MachineNode)
continue; continue;
SDNode *ResNode = Lowering.PostISelFolding(MachineNode, *CurDAG); SDNode *ResNode = Lowering.PostISelFolding(MachineNode, *CurDAG);
if (ResNode != Node) { if (ResNode != &Node) {
ReplaceUses(Node, ResNode); ReplaceUses(&Node, ResNode);
IsModified = true; IsModified = true;
} }
} }

View File

@ -3406,9 +3406,8 @@ void PPCDAGToDAGISel::PeepholeCROps() {
bool IsModified; bool IsModified;
do { do {
IsModified = false; IsModified = false;
for (SelectionDAG::allnodes_iterator I = CurDAG->allnodes_begin(), for (SDNode &Node : CurDAG->allnodes()) {
E = CurDAG->allnodes_end(); I != E; ++I) { MachineSDNode *MachineNode = dyn_cast<MachineSDNode>(&Node);
MachineSDNode *MachineNode = dyn_cast<MachineSDNode>(I);
if (!MachineNode || MachineNode->use_empty()) if (!MachineNode || MachineNode->use_empty())
continue; continue;
SDNode *ResNode = MachineNode; SDNode *ResNode = MachineNode;