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

Unified Diff: src/compiler/escape-analysis.h

Issue 1485183002: [turbofan] Deopt support for escape analysis (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@ea-local
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698