Improve memory usage in Turbofan.
authorjarin@chromium.org <jarin@chromium.org>
Thu, 25 Sep 2014 06:25:10 +0000 (06:25 +0000)
committerjarin@chromium.org <jarin@chromium.org>
Thu, 25 Sep 2014 06:25:10 +0000 (06:25 +0000)
BUG=
R=bmeurer@chromium.org

Review URL: https://codereview.chromium.org/602643002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24198 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/compiler/graph-inl.h
src/compiler/schedule.h
src/compiler/scheduler.cc

index 571ffb3..efebf7b 100644 (file)
@@ -14,8 +14,9 @@ namespace compiler {
 
 template <class Visitor>
 void Graph::VisitNodeUsesFrom(Node* node, Visitor* visitor) {
+  Zone tmp_zone(zone()->isolate());
   GenericGraphVisit::Visit<Visitor, NodeUseIterationTraits<Node> >(
-      this, zone(), node, visitor);
+      this, &tmp_zone, node, visitor);
 }
 
 
@@ -27,8 +28,9 @@ void Graph::VisitNodeUsesFromStart(Visitor* visitor) {
 
 template <class Visitor>
 void Graph::VisitNodeInputsFromEnd(Visitor* visitor) {
+  Zone tmp_zone(zone()->isolate());
   GenericGraphVisit::Visit<Visitor, NodeInputIterationTraits<Node> >(
-      this, zone(), end(), visitor);
+      this, &tmp_zone, end(), visitor);
 }
 }
 }
index 070691e..0ea499c 100644 (file)
@@ -155,7 +155,7 @@ typedef BasicBlockVector::reverse_iterator BasicBlockVectorRIter;
 // by the graph's dependencies. A schedule is required to generate code.
 class Schedule : public GenericGraph<BasicBlock> {
  public:
-  explicit Schedule(Zone* zone)
+  explicit Schedule(Zone* zone, size_t node_count_hint = 0)
       : GenericGraph<BasicBlock>(zone),
         zone_(zone),
         all_blocks_(zone),
@@ -163,6 +163,7 @@ class Schedule : public GenericGraph<BasicBlock> {
         rpo_order_(zone) {
     SetStart(NewBasicBlock());  // entry.
     SetEnd(NewBasicBlock());    // exit.
+    nodeid_to_block_.reserve(node_count_hint);
   }
 
   // Return the block which contains {node}, if any.
index 4029950..58878a0 100644 (file)
@@ -239,7 +239,8 @@ Schedule* Scheduler::ComputeSchedule(Graph* graph) {
   bool had_floating_control = false;
   do {
     Zone tmp_zone(graph->zone()->isolate());
-    schedule = new (graph->zone()) Schedule(graph->zone());
+    schedule = new (graph->zone())
+        Schedule(graph->zone(), static_cast<size_t>(graph->NodeCount()));
     Scheduler scheduler(&tmp_zone, graph, schedule);
 
     scheduler.BuildCFG();