Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(449)

Unified Diff: src/hydrogen-check-elimination.cc

Issue 310593004: Revert "Handle HCheckInstanceType and HIsStringAndBranch in check elimination." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/hydrogen-check-elimination.h ('k') | src/hydrogen-instructions.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/hydrogen-check-elimination.cc
diff --git a/src/hydrogen-check-elimination.cc b/src/hydrogen-check-elimination.cc
index d9713813c843be1a5a9b1ad489fcd30c8242062b..506a04588995fbd25c858424b1461adf1155b781 100644
--- a/src/hydrogen-check-elimination.cc
+++ b/src/hydrogen-check-elimination.cc
@@ -104,10 +104,6 @@ class HCheckTable : public ZoneObject {
ReduceCompareObjectEqAndBranch(HCompareObjectEqAndBranch::cast(instr));
break;
}
- case HValue::kIsStringAndBranch: {
- ReduceIsStringAndBranch(HIsStringAndBranch::cast(instr));
- break;
- }
case HValue::kTransitionElementsKind: {
ReduceTransitionElementsKind(
HTransitionElementsKind::cast(instr));
@@ -117,10 +113,6 @@ class HCheckTable : public ZoneObject {
ReduceCheckHeapObject(HCheckHeapObject::cast(instr));
break;
}
- case HValue::kCheckInstanceType: {
- ReduceCheckInstanceType(HCheckInstanceType::cast(instr));
- break;
- }
default: {
// If the instruction changes maps uncontrollably, drop everything.
if (instr->CheckChangesFlag(kOsrEntries)) {
@@ -133,7 +125,7 @@ class HCheckTable : public ZoneObject {
}
}
// Improvements possible:
- // - eliminate redundant HCheckSmi instructions
+ // - eliminate redundant HCheckSmi, HCheckInstanceType instructions
// - track which values have been HCheckHeapObject'd
}
@@ -269,28 +261,6 @@ class HCheckTable : public ZoneObject {
ASSERT_NE(HCheckTableEntry::UNCHECKED_STABLE, re->state_);
}
learned = true;
- } else if (end->IsIsStringAndBranch()) {
- HIsStringAndBranch* cmp = HIsStringAndBranch::cast(end);
- HValue* object = cmp->value()->ActualValue();
- HCheckTableEntry* entry = copy->Find(object);
- if (is_true_branch) {
- // Learn on the true branch of if(IsString(x)).
- if (entry == NULL) {
- copy->Insert(object, NULL, string_maps(),
- HCheckTableEntry::CHECKED);
- } else {
- EnsureChecked(entry, object, cmp);
- entry->maps_ = entry->maps_->Intersect(string_maps(), zone);
- ASSERT_NE(HCheckTableEntry::UNCHECKED_STABLE, entry->state_);
- }
- } else {
- // Learn on the false branch of if(IsString(x)).
- if (entry != NULL) {
- EnsureChecked(entry, object, cmp);
- entry->maps_ = entry->maps_->Subtract(string_maps(), zone);
- ASSERT_NE(HCheckTableEntry::UNCHECKED_STABLE, entry->state_);
- }
- }
}
// Learning on false branches requires storing negative facts.
}
@@ -445,50 +415,6 @@ class HCheckTable : public ZoneObject {
}
}
- void ReduceCheckInstanceType(HCheckInstanceType* instr) {
- HValue* value = instr->value()->ActualValue();
- HCheckTableEntry* entry = Find(value);
- if (entry == NULL) {
- if (instr->check() == HCheckInstanceType::IS_STRING) {
- Insert(value, NULL, string_maps(), HCheckTableEntry::CHECKED);
- }
- return;
- }
- UniqueSet<Map>* maps = new(zone()) UniqueSet<Map>(
- entry->maps_->size(), zone());
- for (int i = 0; i < entry->maps_->size(); ++i) {
- InstanceType type;
- Unique<Map> map = entry->maps_->at(i);
- {
- // This is safe, because maps don't move and their instance type does
- // not change.
- AllowHandleDereference allow_deref;
- type = map.handle()->instance_type();
- }
- if (instr->is_interval_check()) {
- InstanceType first_type, last_type;
- instr->GetCheckInterval(&first_type, &last_type);
- if (first_type <= type && type <= last_type) maps->Add(map, zone());
- } else {
- uint8_t mask, tag;
- instr->GetCheckMaskAndTag(&mask, &tag);
- if ((type & mask) == tag) maps->Add(map, zone());
- }
- }
- if (maps->size() == entry->maps_->size()) {
- TRACE(("Removing redundant CheckInstanceType #%d at B%d\n",
- instr->id(), instr->block()->block_id()));
- EnsureChecked(entry, value, instr);
- instr->DeleteAndReplaceWith(value);
- INC_STAT(removed_cit_);
- } else if (maps->size() != 0) {
- entry->maps_ = maps;
- if (entry->state_ == HCheckTableEntry::UNCHECKED_STABLE) {
- entry->state_ = HCheckTableEntry::CHECKED_STABLE;
- }
- }
- }
-
void ReduceLoadNamedField(HLoadNamedField* instr) {
// Reduce a load of the map field when it is known to be a constant.
if (!instr->access().IsMap()) {
@@ -602,28 +528,6 @@ class HCheckTable : public ZoneObject {
instr->block()->MarkSuccEdgeUnreachable(unreachable_succ);
}
- void ReduceIsStringAndBranch(HIsStringAndBranch* instr) {
- HValue* value = instr->value()->ActualValue();
- HCheckTableEntry* entry = Find(value);
- if (entry == NULL) return;
- EnsureChecked(entry, value, instr);
- int succ;
- if (entry->maps_->IsSubset(string_maps())) {
- TRACE(("Marking redundant IsStringAndBranch #%d at B%d as true\n",
- instr->id(), instr->block()->block_id()));
- succ = 0;
- } else {
- MapSet intersection = entry->maps_->Intersect(string_maps(), zone());
- if (intersection->size() > 0) return;
- TRACE(("Marking redundant IsStringAndBranch #%d at B%d as false\n",
- instr->id(), instr->block()->block_id()));
- succ = 1;
- }
- instr->set_known_successor_index(succ);
- int unreachable_succ = 1 - succ;
- instr->block()->MarkSuccEdgeUnreachable(unreachable_succ);
- }
-
void ReduceTransitionElementsKind(HTransitionElementsKind* instr) {
HValue* object = instr->object()->ActualValue();
HCheckTableEntry* entry = Find(object);
@@ -784,7 +688,6 @@ class HCheckTable : public ZoneObject {
}
Zone* zone() const { return phase_->zone(); }
- MapSet string_maps() const { return phase_->string_maps(); }
friend class HCheckMapsEffects;
friend class HCheckEliminationPhase;
@@ -891,7 +794,6 @@ void HCheckEliminationPhase::PrintStats() {
PRINT_STAT(redundant);
PRINT_STAT(removed);
PRINT_STAT(removed_cho);
- PRINT_STAT(removed_cit);
PRINT_STAT(narrowed);
PRINT_STAT(loads);
PRINT_STAT(empty);
« no previous file with comments | « src/hydrogen-check-elimination.h ('k') | src/hydrogen-instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698