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

Unified Diff: runtime/vm/intermediate_language.h

Issue 10910003: Only store IC data with instructions that collect type feedback. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 3 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 | « runtime/vm/il_printer.cc ('k') | runtime/vm/intermediate_language.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/intermediate_language.h
===================================================================
--- runtime/vm/intermediate_language.h (revision 11602)
+++ runtime/vm/intermediate_language.h (working copy)
@@ -129,11 +129,8 @@
class Computation : public ZoneAllocated {
public:
- Computation() : deopt_id_(Isolate::kNoDeoptId), ic_data_(NULL), locs_(NULL) {
- Isolate* isolate = Isolate::Current();
- deopt_id_ = isolate->GetNextDeoptId();
- ic_data_ = isolate->GetICDataForDeoptId(deopt_id_);
- }
+ Computation()
+ : deopt_id_(Isolate::Current()->GetNextDeoptId()), locs_(NULL) { }
// Unique id used for deoptimization.
intptr_t deopt_id() const {
@@ -141,12 +138,6 @@
return deopt_id_;
}
- const ICData* ic_data() const { return ic_data_; }
- void set_ic_data(const ICData* value) { ic_data_ = value; }
- bool HasICData() const {
- return (ic_data() != NULL) && !ic_data()->IsNull();
- }
-
// Visiting support.
virtual void Accept(FlowGraphVisitor* visitor, BindInstr* instr) = 0;
@@ -257,7 +248,6 @@
friend class BranchInstr;
intptr_t deopt_id_;
- const ICData* ic_data_;
LocationSummary* locs_;
DISALLOW_COPY_AND_ASSIGN(Computation);
@@ -603,7 +593,8 @@
ZoneGrowableArray<PushArgumentInstr*>* arguments,
const Array& argument_names,
intptr_t checked_argument_count)
- : token_pos_(token_pos),
+ : ic_data_(Isolate::Current()->GetICDataForDeoptId(deopt_id())),
+ token_pos_(token_pos),
function_name_(function_name),
token_kind_(token_kind),
arguments_(arguments),
@@ -622,6 +613,11 @@
DECLARE_CALL_COMPUTATION(InstanceCall)
+ const ICData* ic_data() const { return ic_data_; }
+ bool HasICData() const {
+ return (ic_data() != NULL) && !ic_data()->IsNull();
+ }
+
intptr_t token_pos() const { return token_pos_; }
const String& function_name() const { return function_name_; }
Token::Kind token_kind() const { return token_kind_; }
@@ -638,6 +634,7 @@
virtual intptr_t ResultCid() const { return kDynamicCid; }
private:
+ const ICData* ic_data_;
const intptr_t token_pos_;
const String& function_name_;
const Token::Kind token_kind_; // Binary op, unary op, kGET or kILLEGAL.
@@ -651,8 +648,10 @@
class PolymorphicInstanceCallComp : public TemplateComputation<0> {
public:
- explicit PolymorphicInstanceCallComp(InstanceCallComp* comp, bool with_checks)
- : instance_call_(comp), with_checks_(with_checks) {
+ PolymorphicInstanceCallComp(InstanceCallComp* comp,
+ const ICData& ic_data,
+ bool with_checks)
+ : instance_call_(comp), ic_data_(ic_data), with_checks_(with_checks) {
ASSERT(instance_call_ != NULL);
}
@@ -667,11 +666,14 @@
DECLARE_CALL_COMPUTATION(PolymorphicInstanceCall)
+ const ICData& ic_data() const { return ic_data_; }
+
virtual bool CanDeoptimize() const { return true; }
virtual intptr_t ResultCid() const { return kDynamicCid; }
private:
InstanceCallComp* instance_call_;
+ const ICData& ic_data_;
const bool with_checks_;
DISALLOW_COPY_AND_ASSIGN(PolymorphicInstanceCallComp);
@@ -731,6 +733,7 @@
Value* left,
Value* right)
: ComparisonComp(kind, left, right),
+ ic_data_(Isolate::Current()->GetICDataForDeoptId(deopt_id())),
token_pos_(token_pos),
receiver_class_id_(kIllegalCid) {
ASSERT((kind == Token::kEQ) || (kind == Token::kNE));
@@ -738,6 +741,11 @@
DECLARE_COMPUTATION(EqualityCompare)
+ const ICData* ic_data() const { return ic_data_; }
+ bool HasICData() const {
+ return (ic_data() != NULL) && !ic_data()->IsNull();
+ }
+
intptr_t token_pos() const { return token_pos_; }
// Receiver class id is computed from collected ICData.
@@ -753,6 +761,7 @@
BranchInstr* branch);
private:
+ const ICData* ic_data_;
const intptr_t token_pos_;
intptr_t receiver_class_id_; // Set by optimizer.
@@ -767,6 +776,7 @@
Value* left,
Value* right)
: ComparisonComp(kind, left, right),
+ ic_data_(Isolate::Current()->GetICDataForDeoptId(deopt_id())),
token_pos_(token_pos),
operands_class_id_(kIllegalCid) {
ASSERT(Token::IsRelationalOperator(kind));
@@ -774,6 +784,11 @@
DECLARE_COMPUTATION(RelationalOp)
+ const ICData* ic_data() const { return ic_data_; }
+ bool HasICData() const {
+ return (ic_data() != NULL) && !ic_data()->IsNull();
+ }
+
intptr_t token_pos() const { return token_pos_; }
// TODO(srdjan): instead of class-id pass an enum that can differentiate
@@ -793,6 +808,7 @@
BranchInstr* branch);
private:
+ const ICData* ic_data_;
const intptr_t token_pos_;
intptr_t operands_class_id_; // class id of both operands.
@@ -1706,6 +1722,8 @@
InstanceCallComp* instance_call() const { return instance_call_; }
+ const ICData* ic_data() const { return instance_call()->ic_data(); }
+
virtual void PrintOperandsTo(BufferFormatter* f) const;
DECLARE_COMPUTATION(BinarySmiOp)
@@ -1743,6 +1761,8 @@
InstanceCallComp* instance_call() const { return instance_call_; }
+ const ICData* ic_data() const { return instance_call()->ic_data(); }
+
virtual void PrintOperandsTo(BufferFormatter* f) const;
DECLARE_COMPUTATION(BinaryMintOp)
@@ -1767,6 +1787,8 @@
InstanceCallComp* instance_call() const { return instance_call_; }
+ const ICData* ic_data() const { return instance_call()->ic_data(); }
+
virtual void PrintOperandsTo(BufferFormatter* f) const;
DECLARE_CALL_COMPUTATION(BinaryDoubleOp)
@@ -1829,6 +1851,8 @@
InstanceCallComp* instance_call() const { return instance_call_; }
+ const ICData* ic_data() const { return instance_call()->ic_data(); }
+
DECLARE_COMPUTATION(NumberNegate)
virtual bool CanDeoptimize() const { return true; }
@@ -1907,8 +1931,11 @@
class CheckClassComp : public TemplateComputation<1> {
public:
- CheckClassComp(Value* value, InstanceCallComp* original)
- : original_(original) {
+ CheckClassComp(Value* value,
+ InstanceCallComp* instance_call,
+ const ICData& unary_checks)
+ : instance_call_(instance_call),
+ unary_checks_(unary_checks) {
ASSERT(value != NULL);
inputs_[0] = value;
}
@@ -1924,14 +1951,17 @@
Value* value() const { return inputs_[0]; }
- intptr_t deopt_id() const { return original_->deopt_id(); }
+ const ICData& unary_checks() const { return unary_checks_; }
+ intptr_t deopt_id() const { return instance_call_->deopt_id(); }
+
virtual Definition* TryReplace(BindInstr* instr) const;
virtual void PrintOperandsTo(BufferFormatter* f) const;
private:
- InstanceCallComp* original_;
+ InstanceCallComp* instance_call_;
+ const ICData& unary_checks_;
DISALLOW_COPY_AND_ASSIGN(CheckClassComp);
};
@@ -1939,8 +1969,8 @@
class CheckSmiComp : public TemplateComputation<1> {
public:
- CheckSmiComp(Value* value, InstanceCallComp* original)
- : original_(original) {
+ CheckSmiComp(Value* value, InstanceCallComp* instance_call)
+ : instance_call_(instance_call) {
ASSERT(value != NULL);
inputs_[0] = value;
}
@@ -1958,10 +1988,10 @@
Value* value() const { return inputs_[0]; }
- intptr_t deopt_id() const { return original_->deopt_id(); }
+ intptr_t deopt_id() const { return instance_call_->deopt_id(); }
private:
- InstanceCallComp* original_;
+ InstanceCallComp* instance_call_;
DISALLOW_COPY_AND_ASSIGN(CheckSmiComp);
};
@@ -1972,8 +2002,8 @@
CheckArrayBoundComp(Value* array,
Value* index,
intptr_t array_type,
- InstanceCallComp* original)
- : array_type_(array_type), original_(original) {
+ InstanceCallComp* instance_call)
+ : array_type_(array_type), instance_call_(instance_call) {
ASSERT(array != NULL);
ASSERT(index != NULL);
inputs_[0] = array;
@@ -1994,11 +2024,11 @@
intptr_t array_type() const { return array_type_; }
- intptr_t deopt_id() const { return original_->deopt_id(); }
+ intptr_t deopt_id() const { return instance_call_->deopt_id(); }
private:
intptr_t array_type_;
- InstanceCallComp* original_;
+ InstanceCallComp* instance_call_;
DISALLOW_COPY_AND_ASSIGN(CheckArrayBoundComp);
};
@@ -2579,7 +2609,7 @@
catch_try_index_(CatchClauseNode::kInvalidTryIndex) { }
// Used for exception catch entries.
- explicit TargetEntryInstr(intptr_t try_index, intptr_t catch_try_index)
+ TargetEntryInstr(intptr_t try_index, intptr_t catch_try_index)
: BlockEntryInstr(try_index),
predecessor_(NULL),
catch_try_index_(catch_try_index) { }
« no previous file with comments | « runtime/vm/il_printer.cc ('k') | runtime/vm/intermediate_language.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698