Chromium Code Reviews| Index: src/hydrogen-check-elimination.cc |
| diff --git a/src/hydrogen-check-elimination.cc b/src/hydrogen-check-elimination.cc |
| index bf8257c83d913e0ebc5f0f98081d7a8de99e546f..a847426a9f9924f0e547b9cf91660f9eaa4c8e43 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 = Find(object); |
| + if (entry == NULL) { |
| + Insert(object, cmp->map()); |
| + } else { |
| + MapSet list = new(phase_->zone()) UniqueSet<Map>(); |
| + list->Add(cmp->map(), phase_->zone()); |
| + entry->maps_ = list; |
|
Toon Verwaest
2013/12/02 15:13:14
What about just having a Set method?
|
| + } |
| + } |
| + // TODO(titzer): is it worthwhile to learn on false branch too? |
| + } |
| return copy; |
| } |