| Index: runtime/vm/intermediate_language.cc
|
| diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
|
| index ba68b52c7967e06b221efca2e54297f776fdfe7a..60aae5c00a1a416f59513c8bb45807d63219f4f8 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();
|
| }
|
|
|