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

Unified Diff: runtime/vm/object.h

Issue 2064693003: Remember inside an ICData if it is for a static call or an instance call (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 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/jit_optimizer.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.h
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 984a718d1b86a73f2b9edda5a31e25d5de47eaaf..cd014a3092bd609a521f47dd0f8709aaf98f7841 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1842,7 +1842,7 @@ class ICData : public Object {
bool IsImmutable() const;
- void Reset(bool is_static_call) const;
+ void Reset() const;
void ResetData() const;
// Note: only deopts with reasons before Unknown in this list are recorded in
@@ -2028,7 +2028,8 @@ class ICData : public Object {
const String& target_name,
const Array& arguments_descriptor,
intptr_t deopt_id,
- intptr_t num_args_tested);
+ intptr_t num_args_tested,
+ bool is_static_call);
static RawICData* NewFrom(const ICData& from, intptr_t num_args_tested);
// Generates a new ICData with descriptor and data array copied (deep clone).
@@ -2146,6 +2147,9 @@ class ICData : public Object {
intptr_t tag() const { return raw_ptr()->tag_; }
#endif
+ void SetIsStaticCall(bool static_call) const;
+ bool is_static_call() const;
+
private:
static RawICData* New();
@@ -2167,7 +2171,9 @@ class ICData : public Object {
kDeoptReasonPos = kNumArgsTestedPos + kNumArgsTestedSize,
kDeoptReasonSize = kLastRecordedDeoptReason + 1,
kRangeFeedbackPos = kDeoptReasonPos + kDeoptReasonSize,
- kRangeFeedbackSize = kBitsPerRangeFeedback * kRangeFeedbackSlots
+ kRangeFeedbackSize = kBitsPerRangeFeedback * kRangeFeedbackSlots,
+ kStaticCallPos = kRangeFeedbackPos + kRangeFeedbackSize,
+ kStaticCallSize = 1,
};
class NumArgsTestedBits : public BitField<uint32_t,
@@ -2183,6 +2189,10 @@ class ICData : public Object {
ICData::kRangeFeedbackPos,
ICData::kRangeFeedbackSize> {};
+ class StaticCallBit : public BitField<uint32_t,
+ bool,
+ ICData::kStaticCallPos,
+ ICData::kStaticCallSize> {};
#if defined(DEBUG)
// Used in asserts to verify that a check is not added twice.
bool HasCheck(const GrowableArray<intptr_t>& cids) const;
@@ -2196,7 +2206,8 @@ class ICData : public Object {
const String& target_name,
const Array& arguments_descriptor,
intptr_t deopt_id,
- intptr_t num_args_tested);
+ intptr_t num_args_tested,
+ bool is_static_call);
static void WriteSentinel(const Array& data, intptr_t test_entry_length);
@@ -2275,7 +2286,6 @@ class Function : public Object {
// Reloading support:
void Reparent(const Class& new_cls) const;
void ZeroEdgeCounters() const;
- void FillICDataWithSentinels(const Code& code) const;
RawClass* Owner() const;
RawClass* origin() const;
@@ -4539,6 +4549,10 @@ class Code : public Object {
StorePointer(&raw_ptr()->code_source_map_, code_source_map.raw());
}
+ // Used during reloading (see object_reload.cc). Calls Reset on all ICDatas
+ // that are embedded inside the Code object.
+ void ResetICDatas() const;
+
TokenPosition GetTokenPositionAt(intptr_t offset) const;
// Array of DeoptInfo objects.
« no previous file with comments | « runtime/vm/jit_optimizer.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698