| Index: src/hydrogen-check-elimination.cc
|
| diff --git a/src/hydrogen-check-elimination.cc b/src/hydrogen-check-elimination.cc
|
| index bf8257c83d913e0ebc5f0f98081d7a8de99e546f..bbd3042fb7af6659f4107fffb7127e1298000593 100644
|
| --- a/src/hydrogen-check-elimination.cc
|
| +++ b/src/hydrogen-check-elimination.cc
|
| @@ -127,6 +127,23 @@ class HCheckTable : public ZoneObject {
|
| new_entry->check_ = NULL;
|
| new_entry->maps_ = old_entry->maps_->Copy(phase_->zone());
|
| }
|
| + if (succ->predecessors()->length() == 1) {
|
| + HControlInstruction* end = succ->predecessors()->at(0)->end();
|
| + if (end->IsCompareMap() && end->SuccessorAt(0) == succ) {
|
| + // Learn on the true branch of if(CompareMap(x)).
|
| + HCompareMap* cmp = HCompareMap::cast(end);
|
| + HValue* object = cmp->value()->ActualValue();
|
| + HCheckTableEntry* entry = copy->Find(object);
|
| + if (entry == NULL) {
|
| + copy->Insert(object, cmp->map());
|
| + } else {
|
| + MapSet list = new(phase_->zone()) UniqueSet<Map>();
|
| + list->Add(cmp->map(), phase_->zone());
|
| + entry->maps_ = list;
|
| + }
|
| + }
|
| + // TODO(titzer): is it worthwhile to learn on false branch too?
|
| + }
|
| return copy;
|
| }
|
|
|
|
|