diff options
author | Dan Gohman <gohman@apple.com> | 2008-12-23 17:24:50 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-12-23 17:24:50 +0000 |
commit | e1dfc7da8991270db5094aa736fde273bfab6061 (patch) | |
tree | ce320890ced6be5b08a8154563dd527fa0f26488 /lib/CodeGen | |
parent | 1578f8486d401a16bdfbe7f27cd4d644920000bf (diff) |
Avoid an unnecessary call to allnodes_size(), which is linear.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61372 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp index 4b6469b5d0..4a7920aced 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp @@ -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(); |