Index: runtime/vm/intermediate_language_ia32.cc |
=================================================================== |
--- runtime/vm/intermediate_language_ia32.cc (revision 31331) |
+++ runtime/vm/intermediate_language_ia32.cc (working copy) |
@@ -1289,6 +1289,8 @@ |
Label* fail = (deopt != NULL) ? deopt : &fail_label; |
+ const bool ok_is_fall_through = (deopt != NULL); |
+ |
if (!compiler->is_optimizing() || (field_cid == kIllegalCid)) { |
if (!compiler->is_optimizing() && (field_reg == kNoRegister)) { |
// Currently we can't have different location summaries for optimized |
@@ -1489,9 +1491,12 @@ |
} |
} |
+ if (!ok_is_fall_through) { |
+ __ jmp(&ok); |
+ } |
+ |
if (deopt == NULL) { |
ASSERT(!compiler->is_optimizing()); |
- __ jmp(&ok); |
__ Bind(fail); |
__ cmpl(FieldAddress(field_reg, Field::guarded_cid_offset()), |
@@ -1506,6 +1511,7 @@ |
} else { |
ASSERT(compiler->is_optimizing()); |
ASSERT(deopt != NULL); |
+ ASSERT(ok_is_fall_through); |
// Field guard class has been initialized and is known. |
if (field_reg != kNoRegister) { |
__ LoadObject(field_reg, Field::ZoneHandle(field().raw())); |