Index: runtime/vm/intermediate_language.cc |
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc |
index 3c686ef9c57319c74e89c150abc6ea69ceffd3c6..daa9d9662f2c0a4b91bb42f6f73a41dd2d628468 100644 |
--- a/runtime/vm/intermediate_language.cc |
+++ b/runtime/vm/intermediate_language.cc |
@@ -157,9 +157,12 @@ EffectSet LoadFieldInstr::Dependencies() const { |
bool LoadFieldInstr::AttributesEqual(Instruction* other) const { |
LoadFieldInstr* other_load = other->AsLoadField(); |
ASSERT(other_load != NULL); |
- ASSERT((offset_in_bytes() != other_load->offset_in_bytes()) || |
- ((immutable_ == other_load->immutable_))); |
- return offset_in_bytes() == other_load->offset_in_bytes(); |
+ if (field() != NULL) { |
+ return (other_load->field() != NULL) && |
+ (field()->raw() == other_load->field()->raw()); |
+ } |
+ return (other_load->field() == NULL) && |
+ (offset_in_bytes() == other_load->offset_in_bytes()); |
} |
@@ -1167,21 +1170,14 @@ MethodRecognizer::Kind LoadFieldInstr::RecognizedKindFromArrayCid( |
bool LoadFieldInstr::IsFixedLengthArrayCid(intptr_t cid) { |
+ if (RawObject::IsTypedDataClassId(cid) || |
+ RawObject::IsExternalTypedDataClassId(cid)) { |
+ return true; |
+ } |
+ |
switch (cid) { |
case kArrayCid: |
case kImmutableArrayCid: |
- case kTypedDataInt8ArrayCid: |
- case kTypedDataUint8ArrayCid: |
- case kTypedDataUint8ClampedArrayCid: |
- case kTypedDataInt16ArrayCid: |
- case kTypedDataUint16ArrayCid: |
- case kTypedDataInt32ArrayCid: |
- case kTypedDataUint32ArrayCid: |
- case kTypedDataInt64ArrayCid: |
- case kTypedDataUint64ArrayCid: |
- case kTypedDataFloat32ArrayCid: |
- case kTypedDataFloat64ArrayCid: |
- case kTypedDataFloat32x4ArrayCid: |
return true; |
default: |
return false; |
@@ -1295,7 +1291,7 @@ Instruction* BranchInstr::Canonicalize(FlowGraph* flow_graph) { |
Value* use = comp->input_use_list(); |
if ((use->instruction() == this) && comp->HasOnlyUse(use)) { |
RemoveEnvironment(); |
- InheritDeoptTarget(comp); |
+ flow_graph->CopyDeoptTarget(this, comp); |
comp->RemoveFromGraph(); |
SetComparison(comp); |
@@ -1537,6 +1533,17 @@ void ConstraintInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
} |
+LocationSummary* MaterializeObjectInstr::MakeLocationSummary() const { |
+ UNREACHABLE(); |
+ return NULL; |
+} |
+ |
+ |
+void MaterializeObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
+ UNREACHABLE(); |
+} |
+ |
+ |
LocationSummary* StoreContextInstr::MakeLocationSummary() const { |
const intptr_t kNumInputs = 1; |
const intptr_t kNumTemps = 0; |