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

Unified Diff: runtime/vm/object.h

Issue 735543003: Range feedback for binary integer operations. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: ready for review Created 6 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: 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,

Powered by Google App Engine
This is Rietveld 408576698