Index: src/arm/stub-cache-arm.cc |
diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc |
index f22acb4709e386d75a2a4df18f981624449de2fa..e3e5aa2022ec10b1f8d6a4874712e5aaa939b31b 100644 |
--- a/src/arm/stub-cache-arm.cc |
+++ b/src/arm/stub-cache-arm.cc |
@@ -2897,6 +2897,7 @@ Handle<Code> LoadStubCompiler::CompileLoadGlobal( |
Handle<Code> BaseLoadStubCompiler::CompilePolymorphicIC( |
MapHandleList* receiver_maps, |
CodeHandleList* handlers, |
+ int number_of_valid_maps, |
Handle<Name> name, |
Code::StubType type, |
IcCheckType check) { |
@@ -2912,17 +2913,19 @@ Handle<Code> BaseLoadStubCompiler::CompilePolymorphicIC( |
int receiver_count = receiver_maps->length(); |
__ ldr(map_reg, FieldMemOperand(receiver(), HeapObject::kMapOffset)); |
for (int current = 0; current < receiver_count; ++current) { |
- __ mov(ip, Operand(receiver_maps->at(current))); |
- __ cmp(map_reg, ip); |
- __ Jump(handlers->at(current), RelocInfo::CODE_TARGET, eq); |
+ Handle<Map> map = receiver_maps->at(current); |
+ if (!map->is_invalid_transition()) { |
+ __ mov(ip, Operand(receiver_maps->at(current))); |
+ __ cmp(map_reg, ip); |
+ __ Jump(handlers->at(current), RelocInfo::CODE_TARGET, eq); |
+ } |
} |
__ bind(&miss); |
TailCallBuiltin(masm(), MissBuiltin(kind())); |
// Return the generated code. |
- InlineCacheState state = |
- receiver_maps->length() > 1 ? POLYMORPHIC : MONOMORPHIC; |
+ InlineCacheState state = number_of_valid_maps > 1 ? POLYMORPHIC : MONOMORPHIC; |
return GetICCode(kind(), type, name, state); |
} |