Node* deopt = graph()->NewNode(common()->Deoptimize(), frame_state_before,
effect, check_failed);
NodeProperties::MergeControlToEnd(graph(), common(), deopt);
- NodeProperties::ReplaceWithValue(node, load, load, check_success);
+ ReplaceWithValue(node, load, load, check_success);
return Replace(load);
}
if (!constant_value.is_null()) {
// Always optimize global constants.
Node* constant = jsgraph()->Constant(constant_value);
- NodeProperties::ReplaceWithValue(node, constant);
+ ReplaceWithValue(node, constant);
return Replace(constant);
}
String::Flatten(Handle<String>::cast(constant_value));
}
Node* constant = jsgraph()->Constant(constant_value);
- NodeProperties::ReplaceWithValue(node, constant);
+ ReplaceWithValue(node, constant);
return Replace(constant);
} else {
// Load directly from the property cell.
Node* load_field = graph()->NewNode(
simplified()->LoadField(access), jsgraph()->Constant(cell),
NodeProperties::GetEffectInput(node), control);
- NodeProperties::ReplaceWithValue(node, load_field, load_field, control);
+ ReplaceWithValue(node, load_field, load_field, control);
return Replace(load_field);
}
}
Node* deopt = graph()->NewNode(common()->Deoptimize(), frame_state_before,
effect, check_failed);
NodeProperties::MergeControlToEnd(graph(), common(), deopt);
- NodeProperties::ReplaceWithValue(node, store, store, check_success);
+ ReplaceWithValue(node, store, store, check_success);
return Replace(store);
}
// Specializes a graph to the type feedback recorded in the
// {js_type_feedback} provided to the constructor.
-class JSTypeFeedbackSpecializer : public Reducer {
+class JSTypeFeedbackSpecializer : public AdvancedReducer {
public:
- JSTypeFeedbackSpecializer(JSGraph* jsgraph,
+ JSTypeFeedbackSpecializer(Editor* editor, JSGraph* jsgraph,
JSTypeFeedbackTable* js_type_feedback,
TypeFeedbackOracle* oracle,
Handle<GlobalObject> global_object,
CompilationDependencies* dependencies)
- : jsgraph_(jsgraph),
+ : AdvancedReducer(editor),
+ jsgraph_(jsgraph),
simplified_(jsgraph->graph()->zone()),
js_type_feedback_(js_type_feedback),
oracle_(oracle),
// TODO(titzer): introduce a specialization mode/flags enum to control
// specializing to the global object here.
JSTypeFeedbackSpecializer specializer(
- data->jsgraph(), data->js_type_feedback(), &oracle, global_object,
- data->info()->dependencies());
+ &graph_reducer, data->jsgraph(), data->js_type_feedback(), &oracle,
+ global_object, data->info()->dependencies());
AddReducer(data, &graph_reducer, &specializer);
graph_reducer.ReduceGraph();
}
MachineOperatorBuilder machine(zone());
JSGraph jsgraph(isolate(), graph(), common(), javascript(), &machine);
JSTypeFeedbackTable table(zone());
- JSTypeFeedbackSpecializer reducer(&jsgraph, &table, nullptr, global_object,
- &dependencies_);
+ // TODO(titzer): mock the GraphReducer here for better unit testing.
+ GraphReducer graph_reducer(graph(), zone());
+ JSTypeFeedbackSpecializer reducer(&graph_reducer, &jsgraph, &table, nullptr,
+ global_object, &dependencies_);
return reducer.Reduce(node);
}