| Index: src/x64/lithium-codegen-x64.cc
|
| diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc
|
| index b3a1c30f37fa200338789f9737d9b38401558d79..c49fa930f88f6620bfc0fe96939380a7bbd9a639 100644
|
| --- a/src/x64/lithium-codegen-x64.cc
|
| +++ b/src/x64/lithium-codegen-x64.cc
|
| @@ -5013,14 +5013,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);
|
| __ bind(deferred->check_maps());
|
| }
|
| @@ -5035,7 +5041,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());
|
|
|