Index: src/code-stubs-hydrogen.cc |
diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc |
index f1b4cb41771a7a76ba59d7f08b87747e87977f44..1d2fb811fbb2c2f007c00ed36ddbcf70e2842afa 100644 |
--- a/src/code-stubs-hydrogen.cc |
+++ b/src/code-stubs-hydrogen.cc |
@@ -794,9 +794,15 @@ HValue* CodeStubGraphBuilderBase::BuildPushElement(HValue* object, HValue* argc, |
{ |
HInstruction* argument = |
Add<HAccessArgumentsAt>(argument_elements, argc, key); |
- Representation r = IsFastSmiElementsKind(kind) ? Representation::Smi() |
- : Representation::Double(); |
- AddUncasted<HForceRepresentation>(argument, r); |
+ IfBuilder can_store(this); |
+ can_store.IfNot<HIsSmiAndBranch>(argument); |
+ if (IsFastDoubleElementsKind(kind)) { |
+ can_store.And(); |
+ can_store.IfNot<HCompareMap>(argument, |
+ isolate()->factory()->heap_number_map()); |
+ } |
+ can_store.ThenDeopt(Deoptimizer::kFastArrayPushFailed); |
+ can_store.End(); |
} |
builder.EndBody(); |
} |