Index: runtime/vm/intermediate_language.cc |
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc |
index 349fae043e8748a9ac110f9bca2ac7feafff515e..5c69770bb10031c6df6d2d0b636b161b05a44ee5 100644 |
--- a/runtime/vm/intermediate_language.cc |
+++ b/runtime/vm/intermediate_language.cc |
@@ -1534,20 +1534,24 @@ void ChainContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
LocationSummary* StoreVMFieldInstr::MakeLocationSummary() const { |
- return LocationSummary::Make( |
- 2, |
- is_used() ? Location::SameAsFirstInput() : Location::NoLocation(), |
- LocationSummary::kNoCall); |
+ const intptr_t kNumInputs = 2; |
+ const intptr_t kNumTemps = 0; |
+ LocationSummary* locs = |
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
+ locs->set_in(0, value()->NeedsStoreBuffer() ? Location::WritableRegister() |
+ : Location::RequiresRegister()); |
+ locs->set_in(1, Location::RequiresRegister()); |
+ return locs; |
} |
void StoreVMFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
Register value_reg = locs()->in(0).reg(); |
Register dest_reg = locs()->in(1).reg(); |
- ASSERT(!is_used() || (value_reg == locs()->out().reg())); |
if (value()->NeedsStoreBuffer()) { |
- __ StoreIntoObject(dest_reg, FieldAddress(dest_reg, offset_in_bytes()), |
+ __ StoreIntoObject(dest_reg, |
+ FieldAddress(dest_reg, offset_in_bytes()), |
value_reg); |
} else { |
__ StoreIntoObjectNoBarrier( |