OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include "src/compiler/simplified-lowering.h" | 5 #include "src/compiler/simplified-lowering.h" |
6 | 6 |
7 #include <deque> | |
8 #include <queue> | |
9 | |
10 #include "src/compiler/common-operator.h" | 7 #include "src/compiler/common-operator.h" |
11 #include "src/compiler/graph-inl.h" | 8 #include "src/compiler/graph-inl.h" |
12 #include "src/compiler/node-properties-inl.h" | 9 #include "src/compiler/node-properties-inl.h" |
13 #include "src/compiler/representation-change.h" | 10 #include "src/compiler/representation-change.h" |
14 #include "src/compiler/simplified-lowering.h" | 11 #include "src/compiler/simplified-lowering.h" |
15 #include "src/compiler/simplified-operator.h" | 12 #include "src/compiler/simplified-operator.h" |
16 #include "src/objects.h" | 13 #include "src/objects.h" |
17 | 14 |
18 namespace v8 { | 15 namespace v8 { |
19 namespace internal { | 16 namespace internal { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 bool queued : 1; // Bookkeeping for the traversal. | 55 bool queued : 1; // Bookkeeping for the traversal. |
59 bool visited : 1; // Bookkeeping for the traversal. | 56 bool visited : 1; // Bookkeeping for the traversal. |
60 MachineTypeUnion output : 14; // Output type of the node. | 57 MachineTypeUnion output : 14; // Output type of the node. |
61 }; | 58 }; |
62 | 59 |
63 RepresentationSelector(JSGraph* jsgraph, Zone* zone, | 60 RepresentationSelector(JSGraph* jsgraph, Zone* zone, |
64 RepresentationChanger* changer) | 61 RepresentationChanger* changer) |
65 : jsgraph_(jsgraph), | 62 : jsgraph_(jsgraph), |
66 count_(jsgraph->graph()->NodeCount()), | 63 count_(jsgraph->graph()->NodeCount()), |
67 info_(zone->NewArray<NodeInfo>(count_)), | 64 info_(zone->NewArray<NodeInfo>(count_)), |
68 nodes_(NodeVector::allocator_type(zone)), | 65 nodes_(zone), |
69 replacements_(NodeVector::allocator_type(zone)), | 66 replacements_(zone), |
70 contains_js_nodes_(false), | 67 contains_js_nodes_(false), |
71 phase_(PROPAGATE), | 68 phase_(PROPAGATE), |
72 changer_(changer), | 69 changer_(changer), |
73 queue_(std::deque<Node*, NodePtrZoneAllocator>( | 70 queue_(zone) { |
74 NodePtrZoneAllocator(zone))) { | |
75 memset(info_, 0, sizeof(NodeInfo) * count_); | 71 memset(info_, 0, sizeof(NodeInfo) * count_); |
76 } | 72 } |
77 | 73 |
78 void Run(SimplifiedLowering* lowering) { | 74 void Run(SimplifiedLowering* lowering) { |
79 // Run propagation phase to a fixpoint. | 75 // Run propagation phase to a fixpoint. |
80 TRACE(("--{Propagation phase}--\n")); | 76 TRACE(("--{Propagation phase}--\n")); |
81 phase_ = PROPAGATE; | 77 phase_ = PROPAGATE; |
82 Enqueue(jsgraph_->graph()->end()); | 78 Enqueue(jsgraph_->graph()->end()); |
83 // Process nodes from the queue until it is empty. | 79 // Process nodes from the queue until it is empty. |
84 while (!queue_.empty()) { | 80 while (!queue_.empty()) { |
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
697 | 693 |
698 private: | 694 private: |
699 JSGraph* jsgraph_; | 695 JSGraph* jsgraph_; |
700 int count_; // number of nodes in the graph | 696 int count_; // number of nodes in the graph |
701 NodeInfo* info_; // node id -> usage information | 697 NodeInfo* info_; // node id -> usage information |
702 NodeVector nodes_; // collected nodes | 698 NodeVector nodes_; // collected nodes |
703 NodeVector replacements_; // replacements to be done after lowering | 699 NodeVector replacements_; // replacements to be done after lowering |
704 bool contains_js_nodes_; // {true} if a JS operator was seen | 700 bool contains_js_nodes_; // {true} if a JS operator was seen |
705 Phase phase_; // current phase of algorithm | 701 Phase phase_; // current phase of algorithm |
706 RepresentationChanger* changer_; // for inserting representation changes | 702 RepresentationChanger* changer_; // for inserting representation changes |
707 | 703 ZoneQueue<Node*> queue_; // queue for traversing the graph |
708 std::queue<Node*, std::deque<Node*, NodePtrZoneAllocator> > queue_; | |
709 | 704 |
710 NodeInfo* GetInfo(Node* node) { | 705 NodeInfo* GetInfo(Node* node) { |
711 DCHECK(node->id() >= 0); | 706 DCHECK(node->id() >= 0); |
712 DCHECK(node->id() < count_); | 707 DCHECK(node->id() < count_); |
713 return &info_[node->id()]; | 708 return &info_[node->id()]; |
714 } | 709 } |
715 | 710 |
716 MachineTypeUnion GetUseInfo(Node* node) { return GetInfo(node)->use; } | 711 MachineTypeUnion GetUseInfo(Node* node) { return GetInfo(node)->use; } |
717 }; | 712 }; |
718 | 713 |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1000 break; | 995 break; |
1001 default: | 996 default: |
1002 UNREACHABLE(); | 997 UNREACHABLE(); |
1003 break; | 998 break; |
1004 } | 999 } |
1005 } | 1000 } |
1006 | 1001 |
1007 } // namespace compiler | 1002 } // namespace compiler |
1008 } // namespace internal | 1003 } // namespace internal |
1009 } // namespace v8 | 1004 } // namespace v8 |
OLD | NEW |