Chromium Code Reviews| Index: runtime/vm/object.h |
| diff --git a/runtime/vm/object.h b/runtime/vm/object.h |
| index cdf9ddb515c0212cd24dd0a2446c5f6802c7f57b..f6599f5b082601a7a91a41959b46e49a89b8cec4 100644 |
| --- a/runtime/vm/object.h |
| +++ b/runtime/vm/object.h |
| @@ -3547,6 +3547,10 @@ class ICData : public Object { |
| return raw_ptr()->deopt_id_; |
| } |
| + uint32_t range_feedback() const { |
| + return raw_ptr()->range_feedback_; |
| + } |
| + |
| #define DEOPT_REASONS(V) \ |
| V(Unknown) \ |
| V(InstanceGetter) \ |
| @@ -3641,6 +3645,10 @@ class ICData : public Object { |
| return OFFSET_OF(RawICData, owner_); |
| } |
| + static intptr_t range_feedback_offset() { |
| + return OFFSET_OF(RawICData, range_feedback_); |
| + } |
| + |
| // Used for unoptimized static calls when no class-ids are checked. |
| void AddTarget(const Function& target) const; |
| @@ -3715,6 +3723,38 @@ class ICData : public Object { |
| void GetUsedCidsForTwoArgs(GrowableArray<intptr_t>* first, |
| GrowableArray<intptr_t>* second) const; |
| + enum RangeFeedback { |
| + kSmiRange, kInt32Range, kUint32Range, kInt64Range |
| + }; |
| + |
| + enum { |
| + kSignBit = 1 << 0, |
| + kInt32Bit = 1 << 1, |
| + kUint32Bit = 1 << 2, |
| + kInt64Bit = 1 << 3, |
| + kBitsPerRangeFeedback = 4, |
| + kRangeFeedbackMask = (1 << kBitsPerRangeFeedback) - 1 |
| + }; |
|
srdjan
2014/12/15 16:39:01
I think it would be more readable to say, e.g., kI
Vyacheslav Egorov (Google)
2014/12/15 17:20:05
Done.
|
| + |
| + static const char* RangeFeedbackToString(RangeFeedback feedback) { |
| + switch (feedback) { |
| + case kSmiRange: |
| + return "smi"; |
| + case kInt32Range: |
| + return "int32"; |
| + case kUint32Range: |
| + return "uint32"; |
| + case kInt64Range: |
| + return "int64"; |
| + default: |
| + UNREACHABLE(); |
| + return "?"; |
| + } |
| + } |
| + |
| + bool HasRangeFeedback() const; |
| + RangeFeedback DecodeRangeFeedbackAt(intptr_t idx) const; |
| + |
| private: |
| RawArray* ic_data() const { |
| return raw_ptr()->ic_data_; |
| @@ -3727,6 +3767,7 @@ class ICData : public Object { |
| void SetNumArgsTested(intptr_t value) const; |
| void set_ic_data(const Array& value) const; |
| void set_state_bits(uint32_t bits) const; |
| + void set_range_feedback(uint32_t feedback); |
| enum { |
| kNumArgsTestedPos = 0, |