Avoid an unnecessary call to allnodes_size(), which is linear.
authorDan Gohman <gohman@apple.com>
Tue, 23 Dec 2008 17:24:50 +0000 (17:24 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 23 Dec 2008 17:24:50 +0000 (17:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61372 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp

index 4b6469b5d06945a80bec26e47318ccaf3d6106b2..4a7920acedba4894f0eb0ec40784ff52372b9bae 100644 (file)
@@ -68,20 +68,23 @@ static void CheckForPhysRegDependency(SDNode *Def, SDNode *User, unsigned Op,
 /// This SUnit graph is similar to the SelectionDAG, but represents flagged
 /// together nodes with a single SUnit.
 void ScheduleDAGSDNodes::BuildSchedUnits() {
-  // Reserve entries in the vector for each of the SUnits we are creating.  This
-  // ensure that reallocation of the vector won't happen, so SUnit*'s won't get
-  // invalidated.
-  // FIXME: Multiply by 2 because we may clone nodes during scheduling.
-  // This is a temporary workaround.
-  SUnits.reserve(DAG->allnodes_size() * 2);
-  
   // During scheduling, the NodeId field of SDNode is used to map SDNodes
   // to their associated SUnits by holding SUnits table indices. A value
   // of -1 means the SDNode does not yet have an associated SUnit.
+  unsigned NumNodes = 0;
   for (SelectionDAG::allnodes_iterator NI = DAG->allnodes_begin(),
-       E = DAG->allnodes_end(); NI != E; ++NI)
+       E = DAG->allnodes_end(); NI != E; ++NI) {
     NI->setNodeId(-1);
+    ++NumNodes;
+  }
 
+  // Reserve entries in the vector for each of the SUnits we are creating.  This
+  // ensure that reallocation of the vector won't happen, so SUnit*'s won't get
+  // invalidated.
+  // FIXME: Multiply by 2 because we may clone nodes during scheduling.
+  // This is a temporary workaround.
+  SUnits.reserve(NumNodes * 2);
+  
   // Check to see if the scheduler cares about latencies.
   bool UnitLatencies = ForceUnitLatencies();