Index: src/mips/lithium-mips.cc |
diff --git a/src/mips/lithium-mips.cc b/src/mips/lithium-mips.cc |
index 1eb3ab7a0ed5bf671845c947e0391719670b921b..a5e000b2d621158d43d47e5c93e502c805a188a6 100644 |
--- a/src/mips/lithium-mips.cc |
+++ b/src/mips/lithium-mips.cc |
@@ -2023,8 +2023,12 @@ LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { |
LInstruction* LChunkBuilder::DoTransitionElementsKind( |
HTransitionElementsKind* instr) { |
- if (instr->original_map()->elements_kind() == FAST_SMI_ONLY_ELEMENTS && |
- instr->transitioned_map()->elements_kind() == FAST_ELEMENTS) { |
+ ElementsKind from_kind = instr->original_map()->elements_kind(); |
+ ElementsKind to_kind = instr->transitioned_map()->elements_kind(); |
+ bool simple_map_change = (GetHoleyElementsKind(from_kind) == to_kind) || |
+ (IsFastSmiElementsKind(from_kind) && |
+ IsFastObjectElementsKind(to_kind)); |
+ if (simple_map_change) { |
LOperand* object = UseRegister(instr->object()); |
LOperand* new_map_reg = TempRegister(); |
LTransitionElementsKind* result = |