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

Unified Diff: vm/flow_graph_optimizer.cc

Issue 10833068: Refactor building arguments for InstanceCall and fix deoptimization environment for pushed argument… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
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
« no previous file with comments | « vm/flow_graph_builder.cc ('k') | vm/il_printer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vm/flow_graph_optimizer.cc
===================================================================
--- vm/flow_graph_optimizer.cc (revision 10008)
+++ vm/flow_graph_optimizer.cc (working copy)
@@ -114,6 +114,14 @@
}
+static void RemovePushArguments(InstanceCallComp* comp) {
+ // Remove original push arguments.
+ for (intptr_t i = 0; i < comp->ArgumentCount(); ++i) {
+ comp->ArgumentAt(i)->RemoveFromGraph();
+ }
+}
+
+
bool FlowGraphOptimizer::TryReplaceWithBinaryOp(BindInstr* instr,
InstanceCallComp* comp,
Token::Kind op_kind) {
@@ -163,9 +171,9 @@
UNREACHABLE();
};
- ASSERT(comp->InputCount() == 2);
- Value* left = comp->InputAt(0);
- Value* right = comp->InputAt(1);
+ ASSERT(comp->ArgumentCount() == 2);
+ Value* left = comp->ArgumentAt(0)->value();
+ Value* right = comp->ArgumentAt(1)->value();
BinaryOpComp* bin_op =
new BinaryOpComp(op_kind,
operands_type,
@@ -174,6 +182,7 @@
right);
bin_op->set_ic_data(comp->ic_data());
instr->set_computation(bin_op);
+ RemovePushArguments(comp);
return true;
}
@@ -185,19 +194,19 @@
// TODO(srdjan): Not yet supported.
return false;
}
- ASSERT(comp->InputCount() == 1);
+ ASSERT(comp->ArgumentCount() == 1);
Computation* unary_op = NULL;
if (HasOneSmi(*comp->ic_data())) {
- unary_op = new UnarySmiOpComp(op_kind, comp, comp->InputAt(0));
+ unary_op = new UnarySmiOpComp(op_kind, comp, comp->ArgumentAt(0)->value());
} else if (HasOneDouble(*comp->ic_data()) && (op_kind == Token::kNEGATE)) {
- unary_op = new NumberNegateComp(comp, comp->InputAt(0));
+ unary_op = new NumberNegateComp(comp, comp->ArgumentAt(0)->value());
}
- if (unary_op != NULL) {
- unary_op->set_ic_data(comp->ic_data());
- instr->set_computation(unary_op);
- return true;
- }
- return false;
+ if (unary_op == NULL) return false;
+
+ unary_op->set_ic_data(comp->ic_data());
+ instr->set_computation(unary_op);
+ RemovePushArguments(comp);
+ return true;
}
@@ -257,9 +266,10 @@
const Field& field = Field::Handle(GetField(class_ids[0], field_name));
ASSERT(!field.IsNull());
LoadInstanceFieldComp* load = new LoadInstanceFieldComp(
- field, comp->InputAt(0), comp);
+ field, comp->ArgumentAt(0)->value(), comp);
load->set_ic_data(comp->ic_data());
instr->set_computation(load);
+ RemovePushArguments(comp);
return true;
}
@@ -288,12 +298,13 @@
UNREACHABLE();
}
LoadVMFieldComp* load = new LoadVMFieldComp(
- comp->InputAt(0),
+ comp->ArgumentAt(0)->value(),
length_offset,
Type::ZoneHandle(Type::IntInterface()));
load->set_original(comp);
load->set_ic_data(comp->ic_data());
instr->set_computation(load);
+ RemovePushArguments(comp);
return true;
}
@@ -304,12 +315,13 @@
}
ASSERT(HasOneTarget(ic_data));
LoadVMFieldComp* load = new LoadVMFieldComp(
- comp->InputAt(0),
+ comp->ArgumentAt(0)->value(),
String::length_offset(),
Type::ZoneHandle(Type::IntInterface()));
load->set_original(comp);
load->set_ic_data(comp->ic_data());
instr->set_computation(load);
+ RemovePushArguments(comp);
return true;
}
return false;
@@ -344,8 +356,9 @@
return false;
}
ToDoubleComp* coerce = new ToDoubleComp(
- comp->InputAt(0), from_kind, comp);
+ comp->ArgumentAt(0)->value(), from_kind, comp);
instr->set_computation(coerce);
+ RemovePushArguments(comp);
return true;
}
« no previous file with comments | « vm/flow_graph_builder.cc ('k') | vm/il_printer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698