Mark CheckMaps that can cause migration with ChangesNewSpacePromotion.

BUG=
R=danno@chromium.org

Review URL: https://chromiumcodereview.appspot.com/22982003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16166 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
verwaest@chromium.org 2013-08-13 09:38:46 +00:00
parent 676f18f207
commit e8d6f44183
2 changed files with 10 additions and 4 deletions

View File

@ -2851,8 +2851,7 @@ HCheckMaps* HCheckMaps::New(Zone* zone,
CompilationInfo* info,
HValue* typecheck) {
HCheckMaps* check_map = new(zone) HCheckMaps(value, zone, typecheck);
check_map->map_set_.Add(map, zone);
check_map->has_migration_target_ = map->is_migration_target();
check_map->Add(map, zone);
if (map->CanOmitMapChecks() &&
value->IsConstant() &&
HConstant::cast(value)->InstanceOf(map)) {

View File

@ -2554,8 +2554,7 @@ class HCheckMaps: public HTemplateInstruction<2> {
HValue *typecheck = NULL) {
HCheckMaps* check_map = new(zone) HCheckMaps(value, zone, typecheck);
for (int i = 0; i < maps->length(); i++) {
check_map->map_set_.Add(maps->at(i), zone);
check_map->has_migration_target_ |= maps->at(i)->is_migration_target();
check_map->Add(maps->at(i), zone);
}
check_map->map_set_.Sort();
return check_map;
@ -2599,6 +2598,14 @@ class HCheckMaps: public HTemplateInstruction<2> {
}
private:
void Add(Handle<Map> map, Zone* zone) {
map_set_.Add(map, zone);
if (!has_migration_target_ && map->is_migration_target()) {
has_migration_target_ = true;
SetGVNFlag(kChangesNewSpacePromotion);
}
}
// Clients should use one of the static New* methods above.
HCheckMaps(HValue* value, Zone *zone, HValue* typecheck)
: HTemplateInstruction<2>(value->type()),