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

Unified Diff: runtime/vm/flow_graph_optimizer.cc

Issue 10830109: Add type propagation phase in optimizing compiler (work in progress). (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 5 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
Index: runtime/vm/flow_graph_optimizer.cc
===================================================================
--- runtime/vm/flow_graph_optimizer.cc (revision 10101)
+++ runtime/vm/flow_graph_optimizer.cc (working copy)
@@ -10,8 +10,10 @@
namespace dart {
+DECLARE_FLAG(bool, eliminate_type_checks);
DECLARE_FLAG(bool, enable_type_checks);
DECLARE_FLAG(bool, trace_optimization);
+DECLARE_FLAG(bool, trace_type_check_elimination);
void FlowGraphOptimizer::ApplyICData() {
VisitBlocks();
@@ -363,8 +365,6 @@
}
-
-
void FlowGraphOptimizer::VisitInstanceCall(InstanceCallComp* comp,
BindInstr* instr) {
if (comp->HasICData() && (comp->ic_data()->NumberOfChecks() > 0)) {
@@ -441,7 +441,6 @@
}
-
void FlowGraphOptimizer::VisitInstanceSetter(InstanceSetterComp* comp,
BindInstr* instr) {
// TODO(srdjan): Add assignable check node if --enable_type_checks.
@@ -544,7 +543,30 @@
}
+void FlowGraphTypePropagator::VisitAssertAssignable(AssertAssignableComp* comp,
+ BindInstr* instr) {
+ if (FLAG_eliminate_type_checks &&
+ (comp->value() != NULL) &&
+ !comp->dst_type().IsMalformed() &&
+ comp->value()->StaticTypeIsMoreSpecificThan(comp->dst_type())) {
+ // TODO(regis): Eliminate type check by removing comp node from graph.
+ if (FLAG_trace_type_check_elimination) {
+ FlowGraphPrinter::PrintTypeCheck(parsed_function(),
+ comp->token_pos(),
+ comp->value(),
+ comp->dst_type(),
+ comp->dst_name(),
+ /*eliminated*/ true);
+ }
+ }
+}
+
+void FlowGraphTypePropagator::VisitBind(BindInstr* instr) {
+ instr->computation()->Accept(this, instr);
+}
+
+
void FlowGraphAnalyzer::Analyze() {
is_leaf_ = true;
for (intptr_t i = 0; i < blocks_.length(); ++i) {
@@ -559,4 +581,9 @@
}
}
+
+void FlowGraphTypePropagator::PropagateTypes() {
+ VisitBlocks();
+}
+
} // namespace dart

Powered by Google App Engine
This is Rietveld 408576698