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

Unified Diff: runtime/vm/flow_graph_optimizer.cc

Issue 10826285: Optimize equality for case when all targets are Object.equals. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 4 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 | « no previous file | runtime/vm/intermediate_language.h » ('j') | runtime/vm/intermediate_language.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/flow_graph_optimizer.cc
===================================================================
--- runtime/vm/flow_graph_optimizer.cc (revision 10581)
+++ runtime/vm/flow_graph_optimizer.cc (working copy)
@@ -544,13 +544,16 @@
comp->set_operands_class_id(kSmiCid);
} else if (HasOnlyTwoDouble(ic_data)) {
comp->set_operands_class_id(kDoubleCid);
+ } else if (comp->ic_data()->AllReceiversAreNumbers()) {
+ comp->set_operands_class_id(kNumberCid);
}
}
void FlowGraphOptimizer::VisitEqualityCompare(EqualityCompareComp* comp,
BindInstr* instr) {
- if (comp->HasICData() && (comp->ic_data()->NumberOfChecks() == 1)) {
+ if (!comp->HasICData() || (comp->ic_data()->NumberOfChecks() == 0)) return;
+ if (comp->ic_data()->NumberOfChecks() == 1) {
ASSERT(comp->ic_data()->num_args_tested() == 2);
GrowableArray<intptr_t> class_ids;
Function& target = Function::Handle();
@@ -560,7 +563,11 @@
comp->set_receiver_class_id(kSmiCid);
} else if ((class_ids[0] == kDoubleCid) && (class_ids[1] == kDoubleCid)) {
comp->set_receiver_class_id(kDoubleCid);
+ } else {
+ ASSERT(comp->receiver_class_id() == kIllegalCid);
}
+ } else if (comp->ic_data()->AllReceiversAreNumbers()) {
+ comp->set_receiver_class_id(kNumberCid);
}
}
« no previous file with comments | « no previous file | runtime/vm/intermediate_language.h » ('j') | runtime/vm/intermediate_language.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698