Index: runtime/vm/intermediate_language.cc |
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc |
index ff334db5e8bf4e4d749d593f57f8ab6b978258e0..a4bd4f9f27c82cfbff20d6109b1c7dcafcddf19b 100644 |
--- a/runtime/vm/intermediate_language.cc |
+++ b/runtime/vm/intermediate_language.cc |
@@ -151,6 +151,21 @@ bool LoadFieldInstr::IsPotentialUnboxedLoad() const { |
} |
+Representation LoadFieldInstr::representation() const { |
+ if (IsUnboxedLoad()) { |
+ const intptr_t cid = field()->UnboxedFieldCid(); |
+ switch (cid) { |
+ case kDoubleCid: |
+ return kUnboxedDouble; |
+ // TODO(johnmccutchan): Add kFloat32x4Cid here. |
+ default: |
+ UNREACHABLE(); |
+ } |
+ } |
+ return kTagged; |
+} |
+ |
+ |
bool StoreInstanceFieldInstr::IsUnboxedStore() const { |
return FLAG_unbox_double_fields && field().IsUnboxedField(); |
} |
@@ -161,6 +176,22 @@ bool StoreInstanceFieldInstr::IsPotentialUnboxedStore() const { |
} |
+Representation StoreInstanceFieldInstr::RequiredInputRepresentation( |
+ intptr_t index) const { |
+ ASSERT((index == 0) || (index == 1)); |
+ if ((index == 1) && IsUnboxedStore()) { |
+ const intptr_t cid = field().UnboxedFieldCid(); |
+ switch (cid) { |
+ case kDoubleCid: |
+ return kUnboxedDouble; |
+ default: |
+ UNREACHABLE(); |
+ } |
+ } |
+ return kTagged; |
+} |
+ |
+ |
bool GuardFieldInstr::AttributesEqual(Instruction* other) const { |
return field().raw() == other->AsGuardField()->field().raw(); |
} |