Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/compiler/generic-algorithm.h

Issue 467103003: Allow use of phase-local zone in GenericGraphVisit. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/compiler/graph-inl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_COMPILER_GENERIC_ALGORITHM_H_ 5 #ifndef V8_COMPILER_GENERIC_ALGORITHM_H_
6 #define V8_COMPILER_GENERIC_ALGORITHM_H_ 6 #define V8_COMPILER_GENERIC_ALGORITHM_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <stack> 9 #include <stack>
10 10
(...skipping 20 matching lines...) Expand all
31 DEFER = SKIP | REENTER 31 DEFER = SKIP | REENTER
32 }; 32 };
33 33
34 // struct Visitor { 34 // struct Visitor {
35 // Control Pre(Traits::Node* current); 35 // Control Pre(Traits::Node* current);
36 // Control Post(Traits::Node* current); 36 // Control Post(Traits::Node* current);
37 // void PreEdge(Traits::Node* from, int index, Traits::Node* to); 37 // void PreEdge(Traits::Node* from, int index, Traits::Node* to);
38 // void PostEdge(Traits::Node* from, int index, Traits::Node* to); 38 // void PostEdge(Traits::Node* from, int index, Traits::Node* to);
39 // } 39 // }
40 template <class Visitor, class Traits, class RootIterator> 40 template <class Visitor, class Traits, class RootIterator>
41 static void Visit(GenericGraphBase* graph, RootIterator root_begin, 41 static void Visit(GenericGraphBase* graph, Zone* zone,
42 RootIterator root_end, Visitor* visitor) { 42 RootIterator root_begin, RootIterator root_end,
43 // TODO(bmeurer): Pass "local" zone as parameter. 43 Visitor* visitor) {
44 Zone* zone = graph->zone();
45 typedef typename Traits::Node Node; 44 typedef typename Traits::Node Node;
46 typedef typename Traits::Iterator Iterator; 45 typedef typename Traits::Iterator Iterator;
47 typedef std::pair<Iterator, Iterator> NodeState; 46 typedef std::pair<Iterator, Iterator> NodeState;
48 typedef zone_allocator<NodeState> ZoneNodeStateAllocator; 47 typedef zone_allocator<NodeState> ZoneNodeStateAllocator;
49 typedef std::deque<NodeState, ZoneNodeStateAllocator> NodeStateDeque; 48 typedef std::deque<NodeState, ZoneNodeStateAllocator> NodeStateDeque;
50 typedef std::stack<NodeState, NodeStateDeque> NodeStateStack; 49 typedef std::stack<NodeState, NodeStateDeque> NodeStateStack;
51 NodeStateStack stack((NodeStateDeque(ZoneNodeStateAllocator(zone)))); 50 NodeStateStack stack((NodeStateDeque(ZoneNodeStateAllocator(zone))));
52 BoolVector visited(Traits::max_id(graph), false, ZoneBoolAllocator(zone)); 51 BoolVector visited(Traits::max_id(graph), false, ZoneBoolAllocator(zone));
53 Node* current = *root_begin; 52 Node* current = *root_begin;
54 while (true) { 53 while (true) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 } 89 }
91 top = stack.top(); 90 top = stack.top();
92 visitor->PostEdge(Traits::from(top.first), top.first.edge().index(), 91 visitor->PostEdge(Traits::from(top.first), top.first.edge().index(),
93 Traits::to(top.first)); 92 Traits::to(top.first));
94 ++stack.top().first; 93 ++stack.top().first;
95 } 94 }
96 } 95 }
97 } 96 }
98 97
99 template <class Visitor, class Traits> 98 template <class Visitor, class Traits>
100 static void Visit(GenericGraphBase* graph, typename Traits::Node* current, 99 static void Visit(GenericGraphBase* graph, Zone* zone,
101 Visitor* visitor) { 100 typename Traits::Node* current, Visitor* visitor) {
102 typename Traits::Node* array[] = {current}; 101 typename Traits::Node* array[] = {current};
103 Visit<Visitor, Traits>(graph, &array[0], &array[1], visitor); 102 Visit<Visitor, Traits>(graph, zone, &array[0], &array[1], visitor);
104 } 103 }
105 104
106 template <class B, class S> 105 template <class B, class S>
107 struct NullNodeVisitor { 106 struct NullNodeVisitor {
108 Control Pre(GenericNode<B, S>* node) { return CONTINUE; } 107 Control Pre(GenericNode<B, S>* node) { return CONTINUE; }
109 Control Post(GenericNode<B, S>* node) { return CONTINUE; } 108 Control Post(GenericNode<B, S>* node) { return CONTINUE; }
110 void PreEdge(GenericNode<B, S>* from, int index, GenericNode<B, S>* to) {} 109 void PreEdge(GenericNode<B, S>* from, int index, GenericNode<B, S>* to) {}
111 void PostEdge(GenericNode<B, S>* from, int index, GenericNode<B, S>* to) {} 110 void PostEdge(GenericNode<B, S>* from, int index, GenericNode<B, S>* to) {}
112 }; 111 };
113 112
(...skipping 13 matching lines...) Expand all
127 static bool GetVisited(BoolVector* visited, int id) { 126 static bool GetVisited(BoolVector* visited, int id) {
128 if (id >= static_cast<int>(visited->size())) return false; 127 if (id >= static_cast<int>(visited->size())) return false;
129 return visited->at(id); 128 return visited->at(id);
130 } 129 }
131 }; 130 };
132 } 131 }
133 } 132 }
134 } // namespace v8::internal::compiler 133 } // namespace v8::internal::compiler
135 134
136 #endif // V8_COMPILER_GENERIC_ALGORITHM_H_ 135 #endif // V8_COMPILER_GENERIC_ALGORITHM_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler/graph-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698