Index: src/hydrogen-store-elimination.cc |
diff --git a/src/hydrogen-store-elimination.cc b/src/hydrogen-store-elimination.cc |
index f6f85da760045eb10dd7ac2638d76a1d877f55fd..cf5f3a15e69822491cb8e0ebda685fd576223f95 100644 |
--- a/src/hydrogen-store-elimination.cc |
+++ b/src/hydrogen-store-elimination.cc |
@@ -58,11 +58,7 @@ void HStoreEliminationPhase::ProcessStore(HStoreNamedField* store) { |
while (i < unobserved_.length()) { |
HStoreNamedField* prev = unobserved_.at(i); |
if (aliasing_->MustAlias(object, prev->object()->ActualValue()) && |
- store->access().Equals(prev->access()) && |
- (!SmiValuesAre32Bits() || |
- !store->field_representation().IsSmi() || |
- store->store_mode() == STORE_TO_INITIALIZED_ENTRY || |
- prev->store_mode() == INITIALIZING_STORE)) { |
+ store->access().Equals(prev->access())) { |
// This store is guaranteed to overwrite the previous store. |
prev->DeleteAndReplaceWith(NULL); |
TRACE(("++ Unobserved store S%d overwritten by S%d\n", |
@@ -73,8 +69,11 @@ void HStoreEliminationPhase::ProcessStore(HStoreNamedField* store) { |
i++; |
} |
} |
- TRACE(("-- Might remove store S%d\n", store->id())); |
- unobserved_.Add(store, zone()); |
+ // Only non-transitioning stores are removable. |
+ if (!store->has_transition()) { |
+ TRACE(("-- Might remove store S%d\n", store->id())); |
+ unobserved_.Add(store, zone()); |
+ } |
} |