Index: src/compiler/graph.h |
diff --git a/src/compiler/graph.h b/src/compiler/graph.h |
index d619da252fa3fea0dc52122ec5106db4cfd3a8ff..e825b7e9a110fe292b938764811680dc9223fd7a 100644 |
--- a/src/compiler/graph.h |
+++ b/src/compiler/graph.h |
@@ -5,12 +5,8 @@ |
#ifndef V8_COMPILER_GRAPH_H_ |
#define V8_COMPILER_GRAPH_H_ |
-#include <map> |
-#include <set> |
- |
-#include "src/compiler/node.h" |
-#include "src/compiler/node-aux-data.h" |
-#include "src/compiler/source-position.h" |
+#include "src/zone.h" |
+#include "src/zone-containers.h" |
namespace v8 { |
namespace internal { |
@@ -18,6 +14,19 @@ namespace compiler { |
// Forward declarations. |
class GraphDecorator; |
+class Node; |
+class Operator; |
+ |
+ |
+// Marks are used during traversal of the graph to distinguish states of nodes. |
+// Each node has a mark which is a monotonically increasing integer, and a |
+// {NodeMarker} has a range of values that indicate states of a node. |
+typedef uint32_t Mark; |
+ |
+ |
+// NodeIds are identifying numbers for nodes that can be used to index auxiliary |
+// out-of-line data associated with each node. |
+typedef int32_t NodeId; |
class Graph : public ZoneObject { |
@@ -71,27 +80,18 @@ class Graph : public ZoneObject { |
void SetStart(Node* start) { start_ = start; } |
void SetEnd(Node* end) { end_ = end; } |
- NodeId NextNodeID() { return next_node_id_++; } |
- NodeId NodeCount() const { return next_node_id_; } |
+ int NodeCount() const { return next_node_id_; } |
void Decorate(Node* node); |
- |
- void AddDecorator(GraphDecorator* decorator) { |
- decorators_.push_back(decorator); |
- } |
- |
- void RemoveDecorator(GraphDecorator* decorator) { |
- ZoneVector<GraphDecorator*>::iterator it = |
- std::find(decorators_.begin(), decorators_.end(), decorator); |
- DCHECK(it != decorators_.end()); |
- decorators_.erase(it, it + 1); |
- } |
+ void AddDecorator(GraphDecorator* decorator); |
+ void RemoveDecorator(GraphDecorator* decorator); |
private: |
- template <typename State> |
- friend class NodeMarker; |
+ friend class NodeMarkerBase; |
- Zone* zone_; |
+ inline NodeId NextNodeId(); |
+ |
+ Zone* const zone_; |
Node* start_; |
Node* end_; |
Mark mark_max_; |
@@ -102,40 +102,6 @@ class Graph : public ZoneObject { |
}; |
-// A NodeMarker uses monotonically increasing marks to assign local "states" |
-// to nodes. Only one NodeMarker per graph is valid at a given time. |
-template <typename State> |
-class NodeMarker BASE_EMBEDDED { |
- public: |
- NodeMarker(Graph* graph, uint32_t num_states) |
- : mark_min_(graph->mark_max_), mark_max_(graph->mark_max_ += num_states) { |
- DCHECK(num_states > 0); // user error! |
- DCHECK(mark_max_ > mark_min_); // check for wraparound. |
- } |
- |
- State Get(Node* node) { |
- Mark mark = node->mark(); |
- if (mark < mark_min_) { |
- mark = mark_min_; |
- node->set_mark(mark_min_); |
- } |
- DCHECK_LT(mark, mark_max_); |
- return static_cast<State>(mark - mark_min_); |
- } |
- |
- void Set(Node* node, State state) { |
- Mark local = static_cast<Mark>(state); |
- DCHECK(local < (mark_max_ - mark_min_)); |
- DCHECK_LT(node->mark(), mark_max_); |
- node->set_mark(local + mark_min_); |
- } |
- |
- private: |
- Mark mark_min_; |
- Mark mark_max_; |
-}; |
- |
- |
// A graph decorator can be used to add behavior to the creation of nodes |
// in a graph. |
class GraphDecorator : public ZoneObject { |