Chromium Code Reviews| Index: src/compiler/escape-analysis.h |
| diff --git a/src/compiler/escape-analysis.h b/src/compiler/escape-analysis.h |
| index 44efd6369bad6a9272b4289b488657e38b8a67c1..38cecd233972810ccd3b708c6b03dea2b02ebe49 100644 |
| --- a/src/compiler/escape-analysis.h |
| +++ b/src/compiler/escape-analysis.h |
| @@ -20,16 +20,25 @@ class VirtualObject : public ZoneObject { |
| public: |
| enum Status { kUntracked = 0, kTracked = 1 }; |
| VirtualObject(NodeId id, Zone* zone) |
| - : id_(id), status_(kUntracked), fields_(zone), replacement_(nullptr) {} |
| + : id_(id), |
| + status_(kUntracked), |
| + fields_(zone), |
| + replacement_(nullptr), |
| + object_state_(nullptr) {} |
| VirtualObject(const VirtualObject& other) |
| : id_(other.id_), |
| status_(other.status_), |
| fields_(other.fields_), |
| - replacement_(other.replacement_) {} |
| + replacement_(other.replacement_), |
| + object_state_(other.object_state_) {} |
| VirtualObject(NodeId id, Zone* zone, size_t field_number) |
|
Jarin
2015/12/02 12:24:34
does field_number mean field_count here?
sigurds
2015/12/02 16:35:12
Yes.
|
| - : id_(id), status_(kTracked), fields_(zone), replacement_(nullptr) { |
| + : id_(id), |
| + status_(kTracked), |
| + fields_(zone), |
| + replacement_(nullptr), |
| + object_state_(nullptr) { |
| fields_.resize(field_number); |
| } |
| @@ -54,6 +63,7 @@ class VirtualObject : public ZoneObject { |
| return changed; |
| } |
| + Node** fields_array() { return &fields_.front(); } |
| size_t fields() { return fields_.size(); } |
|
Jarin
2015/12/02 12:24:34
fields -> field_count?
sigurds
2015/12/02 16:35:12
Changed.
|
| bool ResizeFields(size_t field_number) { |
| if (field_number != fields_.size()) { |
| @@ -62,7 +72,8 @@ class VirtualObject : public ZoneObject { |
| } |
| return false; |
| } |
| - |
| + void SetObjectState(Node* node) { object_state_ = node; } |
| + Node* GetObjectState() { return object_state_; } |
| bool UpdateFrom(const VirtualObject& other); |
| NodeId id() { return id_; } |
| @@ -73,6 +84,7 @@ class VirtualObject : public ZoneObject { |
| Status status_; |
| ZoneVector<Node*> fields_; |
| Node* replacement_; |
| + Node* object_state_; |
| }; |
| @@ -164,6 +176,8 @@ class EscapeObjectAnalysis { |
| void Run(); |
| Node* GetReplacement(Node* at, NodeId id); |
| + VirtualObject* GetVirtualObject(Node* at, NodeId id); |
| + Node* GetEffect(Node* node); |
| private: |
| bool Process(Node* node); |
| @@ -175,10 +189,13 @@ class EscapeObjectAnalysis { |
| void ProcessStart(Node* node); |
| bool ProcessEffectPhi(Node* node); |
| void ForwardVirtualState(Node* node); |
| + void ProcessFrameState(Node* node); |
| bool IsEffectBranchPoint(Node* node); |
| bool IsDanglingEffectNode(Node* node); |
| int OffsetFromAccess(Node* node); |
| + void RecordEffectForFrameStateUses(Node* node, Node* effect); |
| + |
| void DebugPrint(); |
| Graph* graph() const { return graph_; } |
| @@ -189,6 +206,7 @@ class EscapeObjectAnalysis { |
| CommonOperatorBuilder* const common_; |
| Zone* const zone_; |
| ZoneVector<VirtualState*> virtual_states_; |
| + ZoneVector<Node*> effects_; |
| DISALLOW_COPY_AND_ASSIGN(EscapeObjectAnalysis); |
| }; |