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);
}
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);
}
}
}
// 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),
rpo_order_(zone) {
SetStart(NewBasicBlock()); // entry.
SetEnd(NewBasicBlock()); // exit.
+ nodeid_to_block_.reserve(node_count_hint);
}
// Return the block which contains {node}, if any.
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();