Double the amount of memory reserved for SUnits. This is a
authorDan Gohman <gohman@apple.com>
Wed, 17 Dec 2008 04:30:46 +0000 (04:30 +0000)
committerDan Gohman <gohman@apple.com>
Wed, 17 Dec 2008 04:30:46 +0000 (04:30 +0000)
temporary workaround for an obscure bug. When node cloning is
used, it is possible that more SUnits will be created, and
if the SUnits std::vector has to reallocate, it will
invalidate all the graph edges.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61122 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp

index 08d6702fc81b8215e6607ff44d587c4481ed79ed..4b6469b5d06945a80bec26e47318ccaf3d6106b2 100644 (file)
@@ -71,7 +71,9 @@ 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.
-  SUnits.reserve(DAG->allnodes_size());
+  // 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