mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-03 01:06:05 +00:00
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:
parent
4362ca6c77
commit
ba77f37392
@ -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; }
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user