| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 6e24790fd8dc1aeacf347eb46e36dbcb40414c09..c351687fa8f1cb61ff0074a39520875bf532dee3 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -2647,22 +2647,29 @@ class HCheckMaps V8_FINAL : public HTemplateInstruction<2> {
|
| public:
|
| static HCheckMaps* New(Zone* zone, HValue* context, HValue* value,
|
| Handle<Map> map, CompilationInfo* info,
|
| - HValue *typecheck = NULL);
|
| + HValue* typecheck = NULL);
|
| static HCheckMaps* New(Zone* zone, HValue* context,
|
| HValue* value, SmallMapList* maps,
|
| - HValue *typecheck = NULL) {
|
| + HValue* typecheck = NULL) {
|
| HCheckMaps* check_map = new(zone) HCheckMaps(value, zone, typecheck);
|
| for (int i = 0; i < maps->length(); i++) {
|
| check_map->Add(maps->at(i), zone);
|
| }
|
| return check_map;
|
| }
|
| + // HCheckMaps creation method safe for using during concurrent compilation
|
| + // (does not dereference maps handles).
|
| static HCheckMaps* New(Zone* zone, HValue* context,
|
| HValue* value, UniqueSet<Map>* maps,
|
| - HValue *typecheck = NULL) {
|
| + HValue* typecheck,
|
| + bool has_migration_target) {
|
| HCheckMaps* check_map = new(zone) HCheckMaps(value, zone, typecheck);
|
| for (int i = 0; i < maps->size(); i++) {
|
| - check_map->Add(maps->at(i).handle(), zone);
|
| + check_map->map_set_.Add(maps->at(i), zone);
|
| + }
|
| + if (has_migration_target) {
|
| + check_map->has_migration_target_ = true;
|
| + check_map->SetGVNFlag(kChangesNewSpacePromotion);
|
| }
|
| return check_map;
|
| }
|
|
|