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

Unified Diff: runtime/vm/ast.h

Issue 8394061: Store IC data instead of array of classes in AST node, so that we can easier access targets and f... (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years, 2 months 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
« no previous file with comments | « no previous file | runtime/vm/compiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/ast.h
===================================================================
--- runtime/vm/ast.h (revision 755)
+++ runtime/vm/ast.h (working copy)
@@ -8,6 +8,7 @@
#include "vm/allocation.h"
#include "vm/assert.h"
#include "vm/growable_array.h"
+#include "vm/ic_data.h"
#include "vm/scopes.h"
#include "vm/object.h"
#include "vm/native_entry.h"
@@ -100,24 +101,21 @@
explicit AstNode(intptr_t token_index)
: token_index_(token_index),
id_(GetNextId()),
- collected_classes_(NULL),
+ ic_data_(Array::ZoneHandle()),
info_(NULL) {
ASSERT(token_index >= 0);
}
intptr_t token_index() const { return token_index_; }
- virtual const ZoneGrowableArray<const Class*>* CollectedClassesAtId(
- intptr_t node_id) const {
+ virtual void SetIcDataArrayAtId(intptr_t node_id, const Array& value) {
ASSERT(id() == node_id);
- return collected_classes_;
+ set_ic_data_array(value);
}
- virtual void SetCollectedClassesAtId(
- intptr_t node_id,
- const ZoneGrowableArray<const Class*>* value) {
+ virtual const ICData& ICDataAtId(intptr_t node_id) const {
ASSERT(id() == node_id);
- collected_classes_ = value;
+ return ic_data();
}
virtual bool HasId(intptr_t value) const { return id_ == value; }
@@ -175,13 +173,11 @@
virtual const Instance* EvalConstExpr() const { return NULL; }
protected:
- void set_collected_classes(const ZoneGrowableArray<const Class*>* value) {
- collected_classes_ = value;
+ void set_ic_data_array(const Array& value) {
+ ic_data_.set_data(value);
}
- const ZoneGrowableArray<const Class*>* collected_classes() const {
- return collected_classes_;
- }
+ const ICData& ic_data() const { return ic_data_; }
static intptr_t GetNextId() {
Isolate* isolate = Isolate::Current();
@@ -194,9 +190,8 @@
const intptr_t token_index_;
// Unique id per function compiled, used to match AST node to a PC.
const intptr_t id_;
- // Possible classes of the node, collected using inline caches.
- // Inline caches contain all encountered receiver classes for that node.
- const ZoneGrowableArray<const Class*>* collected_classes_;
+ // IC data collected for this node.
+ ICData ic_data_;
// Used by optimizing compiler.
CodeGenInfo* info_;
DISALLOW_COPY_AND_ASSIGN(AstNode);
@@ -645,8 +640,8 @@
field_name_(field_name),
operator_id_(AstNode::GetNextId()),
setter_id_(AstNode::GetNextId()),
- operator_collected_classes_(NULL),
- setter_collected_classes_(NULL) {
+ operator_ic_data_(Array::ZoneHandle()),
+ setter_ic_data_(Array::ZoneHandle()) {
ASSERT(receiver_ != NULL);
ASSERT(field_name_.IsZoneHandle());
ASSERT(kind_ == Token::kINCR || kind_ == Token::kDECR);
@@ -667,30 +662,27 @@
(setter_id() == value);
}
- virtual const ZoneGrowableArray<const Class*>* CollectedClassesAtId(
- intptr_t node_id) const {
+ virtual void SetIcDataArrayAtId(intptr_t node_id, const Array& value) {
ASSERT(HasId(node_id));
if (node_id == getter_id()) {
- return collected_classes();
+ set_ic_data_array(value);
} else if (node_id == operator_id()) {
- return operator_collected_classes_;
+ operator_ic_data_.set_data(value);
} else {
ASSERT(node_id == setter_id());
- return setter_collected_classes_;
+ setter_ic_data_.set_data(value);
}
}
- virtual void SetCollectedClassesAtId(
- intptr_t node_id,
- const ZoneGrowableArray<const Class*>* value) {
+ virtual const ICData& ICDataAtId(intptr_t node_id) const {
ASSERT(HasId(node_id));
if (node_id == getter_id()) {
- set_collected_classes(value);
+ return ic_data();
} else if (node_id == operator_id()) {
- operator_collected_classes_ = value;
+ return operator_ic_data_;
} else {
ASSERT(node_id == setter_id());
- setter_collected_classes_ = value;
+ return setter_ic_data_;
}
}
@@ -709,8 +701,8 @@
const String& field_name_;
const intptr_t operator_id_;
const intptr_t setter_id_;
- const ZoneGrowableArray<const Class*>* operator_collected_classes_;
- const ZoneGrowableArray<const Class*>* setter_collected_classes_;
+ ICData operator_ic_data_;
+ ICData setter_ic_data_;
DISALLOW_IMPLICIT_CONSTRUCTORS(IncrOpInstanceFieldNode);
};
@@ -787,8 +779,8 @@
index_(index),
operator_id_(AstNode::GetNextId()),
store_id_(AstNode::GetNextId()),
- operator_collected_classes_(NULL),
- store_collected_classes_(NULL) {
+ operator_ic_data_(Array::ZoneHandle()),
+ store_ic_data_(Array::ZoneHandle()) {
ASSERT(kind_ == Token::kINCR || kind_ == Token::kDECR);
ASSERT(array_ != NULL);
ASSERT(index_ != NULL);
@@ -809,30 +801,27 @@
(store_id() == value);
}
- virtual const ZoneGrowableArray<const Class*>* CollectedClassesAtId(
- intptr_t node_id) const {
+ virtual const ICData& ICDataAtId(intptr_t node_id) const {
ASSERT(HasId(node_id));
if (node_id == load_id()) {
- return collected_classes();
+ return ic_data();
} else if (node_id == operator_id()) {
- return operator_collected_classes_;
+ return operator_ic_data_;
} else {
ASSERT(node_id == store_id());
- return store_collected_classes_;
+ return store_ic_data_;
}
}
- virtual void SetCollectedClassesAtId(
- intptr_t node_id,
- const ZoneGrowableArray<const Class*>* value) {
+ virtual void SetIcDataArrayAtId(intptr_t node_id, const Array& value) {
ASSERT(HasId(node_id));
if (node_id == load_id()) {
- set_collected_classes(value);
+ set_ic_data_array(value);
} else if (node_id == operator_id()) {
- operator_collected_classes_ = value;
+ operator_ic_data_.set_data(value);
} else {
ASSERT(node_id == store_id());
- store_collected_classes_ = value;
+ store_ic_data_.set_data(value);
}
}
@@ -852,8 +841,8 @@
AstNode* index_;
const intptr_t operator_id_;
const intptr_t store_id_;
- const ZoneGrowableArray<const Class*>* operator_collected_classes_;
- const ZoneGrowableArray<const Class*>* store_collected_classes_;
+ ICData operator_ic_data_;
+ ICData store_ic_data_;
};
« no previous file with comments | « no previous file | runtime/vm/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698