Chromium Code Reviews| Index: src/compiler/state-values-utils.h |
| diff --git a/src/compiler/state-values-utils.h b/src/compiler/state-values-utils.h |
| index 14b1b9e59963755c2b0e543becb3c46f3220e994..42a99a6ba0afeb2f2f3a05576d076491d4ae1601 100644 |
| --- a/src/compiler/state-values-utils.h |
| +++ b/src/compiler/state-values-utils.h |
| @@ -5,12 +5,15 @@ |
| #ifndef V8_COMPILER_STATE_VALUES_UTILS_H_ |
| #define V8_COMPILER_STATE_VALUES_UTILS_H_ |
| +#include <array> |
| #include "src/compiler/js-graph.h" |
| #include "src/globals.h" |
| namespace v8 { |
| namespace internal { |
| +class BitVector; |
| + |
| namespace compiler { |
| class Graph; |
| @@ -19,10 +22,12 @@ class V8_EXPORT_PRIVATE StateValuesCache { |
| public: |
| explicit StateValuesCache(JSGraph* js_graph); |
| - Node* GetNodeForValues(Node** values, size_t count); |
| + Node* GetNodeForValues(Node** values, size_t count, |
| + const BitVector* liveness); |
| private: |
| static const size_t kMaxInputCount = 8; |
| + typedef std::array<Node*, kMaxInputCount> WorkingBuffer; |
| struct NodeKey { |
| Node* node; |
| @@ -33,22 +38,23 @@ class V8_EXPORT_PRIVATE StateValuesCache { |
| struct StateValuesKey : public NodeKey { |
| // ValueArray - array of nodes ({node} has to be nullptr). |
| size_t count; |
| + uint32_t mask; |
| Node** values; |
| - StateValuesKey(size_t count, Node** values) |
| - : NodeKey(nullptr), count(count), values(values) {} |
| + StateValuesKey(size_t count, uint32_t mask, Node** values) |
| + : NodeKey(nullptr), count(count), mask(mask), values(values) {} |
| }; |
| - class ValueArrayIterator; |
| - |
| static bool AreKeysEqual(void* key1, void* key2); |
| static bool IsKeysEqualToNode(StateValuesKey* key, Node* node); |
| static bool AreValueKeysEqual(StateValuesKey* key1, StateValuesKey* key2); |
| - Node* BuildTree(ValueArrayIterator* it, size_t max_height); |
| - NodeVector* GetWorkingSpace(size_t level); |
| + Node* BuildTree(size_t& idx, Node** values, size_t count, |
| + const BitVector* liveness, size_t level); |
| + |
| + WorkingBuffer& GetWorkingSpace(size_t level); |
| Node* GetEmptyStateValues(); |
| - Node* GetValuesNodeFromCache(Node** nodes, size_t count); |
| + Node* GetValuesNodeFromCache(Node** nodes, size_t count, uint32_t mask); |
| Graph* graph() { return js_graph_->graph(); } |
| CommonOperatorBuilder* common() { return js_graph_->common(); } |
| @@ -57,7 +63,7 @@ class V8_EXPORT_PRIVATE StateValuesCache { |
| JSGraph* js_graph_; |
| CustomMatcherZoneHashMap hash_map_; |
| - ZoneVector<NodeVector*> working_space_; // One working space per level. |
| + ZoneVector<WorkingBuffer> working_space_; // One working space per level. |
| Node* empty_state_values_; |
| }; |
| @@ -86,17 +92,17 @@ class V8_EXPORT_PRIVATE StateValuesAccess { |
| MachineType type(); |
| bool done(); |
| void Advance(); |
| + void MoveToNextSibling(); |
| + void EnsureValid(); |
| struct StatePos { |
| Node* node; |
| + uint32_t mask; |
|
Jarin
2016/12/08 07:59:43
This needs some explanation of what it means.
Leszek Swirski
2016/12/08 15:44:31
Removed after iterator refactor.
|
| int index; |
| - |
| - explicit StatePos(Node* node) : node(node), index(0) {} |
| - StatePos() {} |
| }; |
| StatePos* Top(); |
| - void Push(Node* node); |
| + void Push(Node* node, uint32_t mask); |
| void Pop(); |
| static const int kMaxInlineDepth = 8; |