Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index 1f90a4a5a5efe979fba450898a2f3f9bd3599d0f..ba43e4230fd9667577d5fa7457443da20f178e59 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -5594,14 +5594,20 @@ void LCodeGen::DoCheckMaps(LCheckMaps* instr) { |
Register object_; |
}; |
- if (instr->hydrogen()->CanOmitMapChecks()) return; |
+ if (instr->hydrogen()->IsStabilityCheck()) { |
+ const UniqueSet<Map>* maps = instr->hydrogen()->maps(); |
+ for (int i = 0; i < maps->size(); ++i) { |
+ AddStabilityDependency(maps->at(i).handle()); |
+ } |
+ return; |
+ } |
LOperand* input = instr->value(); |
ASSERT(input->IsRegister()); |
Register reg = ToRegister(input); |
DeferredCheckMaps* deferred = NULL; |
- if (instr->hydrogen()->has_migration_target()) { |
+ if (instr->hydrogen()->HasMigrationTarget()) { |
deferred = new(zone()) DeferredCheckMaps(this, instr, reg, x87_stack_); |
__ bind(deferred->check_maps()); |
} |
@@ -5616,7 +5622,7 @@ void LCodeGen::DoCheckMaps(LCheckMaps* instr) { |
Handle<Map> map = maps->at(maps->size() - 1).handle(); |
__ CompareMap(reg, map); |
- if (instr->hydrogen()->has_migration_target()) { |
+ if (instr->hydrogen()->HasMigrationTarget()) { |
__ j(not_equal, deferred->entry()); |
} else { |
DeoptimizeIf(not_equal, instr->environment()); |