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..181ce7792b5b5339322217c7727b3b733cebe7cf 100644 |
| --- a/src/compiler/state-values-utils.h |
| +++ b/src/compiler/state-values-utils.h |
| @@ -5,12 +5,16 @@ |
| #ifndef V8_COMPILER_STATE_VALUES_UTILS_H_ |
| #define V8_COMPILER_STATE_VALUES_UTILS_H_ |
| +#include <array> |
| +#include "src/compiler/common-operator.h" |
| #include "src/compiler/js-graph.h" |
| #include "src/globals.h" |
| namespace v8 { |
| namespace internal { |
| +class BitVector; |
| + |
| namespace compiler { |
| class Graph; |
| @@ -19,10 +23,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 = nullptr); |
| private: |
| static const size_t kMaxInputCount = 8; |
| + typedef std::array<Node*, kMaxInputCount> WorkingBuffer; |
| struct NodeKey { |
| Node* node; |
| @@ -33,22 +39,34 @@ class V8_EXPORT_PRIVATE StateValuesCache { |
| struct StateValuesKey : public NodeKey { |
| // ValueArray - array of nodes ({node} has to be nullptr). |
| size_t count; |
| + SparseInputMask mask; |
| Node** values; |
| - StateValuesKey(size_t count, Node** values) |
| - : NodeKey(nullptr), count(count), values(values) {} |
| + StateValuesKey(size_t count, SparseInputMask 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); |
| + // Fills {input_buffer}, starting from {input_count}, with {values}, starting |
| + // at {idx}, sparsely encoding according to {liveness}. {input_count} is |
| + // updated with the new number of inputs in {input_buffer}, and a bitmask of |
| + // the sparse encoding is returned. |
| + SparseInputMask::BitMaskType FillBufferWithValues(WorkingBuffer& input_buffer, |
| + size_t& input_count, |
| + size_t& idx, Node** values, |
| + size_t count, |
| + const BitVector* liveness); |
|
Jarin
2016/12/10 10:15:06
I think the style guide only allows passing const
Leszek Swirski
2016/12/13 14:35:16
Updated, thanks.
|
| + |
| + 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, |
| + SparseInputMask mask); |
| Graph* graph() { return js_graph_->graph(); } |
| CommonOperatorBuilder* common() { return js_graph_->common(); } |
| @@ -57,7 +75,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,21 +104,14 @@ class V8_EXPORT_PRIVATE StateValuesAccess { |
| MachineType type(); |
| bool done(); |
| void Advance(); |
| + void EnsureValid(); |
| - struct StatePos { |
| - Node* node; |
| - int index; |
| - |
| - explicit StatePos(Node* node) : node(node), index(0) {} |
| - StatePos() {} |
| - }; |
| - |
| - StatePos* Top(); |
| + SparseInputMask::InputIterator* Top(); |
| void Push(Node* node); |
| void Pop(); |
| static const int kMaxInlineDepth = 8; |
| - StatePos stack_[kMaxInlineDepth]; |
| + SparseInputMask::InputIterator stack_[kMaxInlineDepth]; |
| int current_depth_; |
| }; |