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

Unified Diff: src/compiler/pipeline.cc

Issue 1021713005: [turbofan]: Integrate basic type feedback for property accesses. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 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/compiler/node-properties.cc ('k') | src/compiler/verifier.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/pipeline.cc
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc
index 223ca8f02f380d35fcd7cae7e7accbb4b66f2506..b1d7fda9a37b3fad741d75ef78a33c995c707ba7 100644
--- a/src/compiler/pipeline.cc
+++ b/src/compiler/pipeline.cc
@@ -25,6 +25,7 @@
#include "src/compiler/js-generic-lowering.h"
#include "src/compiler/js-inlining.h"
#include "src/compiler/js-intrinsic-lowering.h"
+#include "src/compiler/js-type-feedback.h"
#include "src/compiler/js-typed-lowering.h"
#include "src/compiler/jump-threading.h"
#include "src/compiler/load-elimination.h"
@@ -46,6 +47,7 @@
#include "src/compiler/verifier.h"
#include "src/compiler/zone-pool.h"
#include "src/ostreams.h"
+#include "src/type-info.h"
#include "src/utils.h"
namespace v8 {
@@ -72,6 +74,7 @@ class PipelineData {
common_(nullptr),
javascript_(nullptr),
jsgraph_(nullptr),
+ js_type_feedback_(nullptr),
typer_(nullptr),
schedule_(nullptr),
instruction_zone_scope_(zone_pool_),
@@ -111,6 +114,7 @@ class PipelineData {
common_(nullptr),
javascript_(nullptr),
jsgraph_(nullptr),
+ js_type_feedback_(nullptr),
typer_(nullptr),
schedule_(schedule),
instruction_zone_scope_(zone_pool_),
@@ -137,6 +141,7 @@ class PipelineData {
common_(nullptr),
javascript_(nullptr),
jsgraph_(nullptr),
+ js_type_feedback_(nullptr),
typer_(nullptr),
schedule_(nullptr),
instruction_zone_scope_(zone_pool_),
@@ -174,6 +179,10 @@ class PipelineData {
CommonOperatorBuilder* common() const { return common_; }
JSOperatorBuilder* javascript() const { return javascript_; }
JSGraph* jsgraph() const { return jsgraph_; }
+ JSTypeFeedbackTable* js_type_feedback() { return js_type_feedback_; }
+ void set_js_type_feedback(JSTypeFeedbackTable* js_type_feedback) {
+ js_type_feedback_ = js_type_feedback;
+ }
Typer* typer() const { return typer_.get(); }
LoopAssignmentAnalysis* loop_assignment() const { return loop_assignment_; }
@@ -207,6 +216,7 @@ class PipelineData {
common_ = nullptr;
javascript_ = nullptr;
jsgraph_ = nullptr;
+ js_type_feedback_ = nullptr;
schedule_ = nullptr;
}
@@ -259,6 +269,7 @@ class PipelineData {
CommonOperatorBuilder* common_;
JSOperatorBuilder* javascript_;
JSGraph* jsgraph_;
+ JSTypeFeedbackTable* js_type_feedback_;
// TODO(dcarney): make this into a ZoneObject.
SmartPointer<Typer> typer_;
Schedule* schedule_;
@@ -310,8 +321,10 @@ class AstGraphBuilderWithPositions : public AstGraphBuilder {
AstGraphBuilderWithPositions(Zone* local_zone, CompilationInfo* info,
JSGraph* jsgraph,
LoopAssignmentAnalysis* loop_assignment,
+ JSTypeFeedbackTable* js_type_feedback,
SourcePositionTable* source_positions)
- : AstGraphBuilder(local_zone, info, jsgraph, loop_assignment),
+ : AstGraphBuilder(local_zone, info, jsgraph, loop_assignment,
+ js_type_feedback),
source_positions_(source_positions),
start_position_(info->shared_info()->start_position()) {}
@@ -419,7 +432,7 @@ struct GraphBuilderPhase {
void Run(PipelineData* data, Zone* temp_zone, bool constant_context) {
AstGraphBuilderWithPositions graph_builder(
temp_zone, data->info(), data->jsgraph(), data->loop_assignment(),
- data->source_positions());
+ data->js_type_feedback(), data->source_positions());
bool stack_check = !data->info()->IsStub();
if (!graph_builder.CreateGraph(constant_context, stack_check)) {
data->set_compilation_failed();
@@ -480,6 +493,25 @@ struct OsrDeconstructionPhase {
};
+struct JSTypeFeedbackPhase {
+ static const char* phase_name() { return "type feedback specializing"; }
+
+ void Run(PipelineData* data, Zone* temp_zone) {
+ SourcePositionTable::Scope pos(data->source_positions(),
+ SourcePosition::Unknown());
+ Handle<Context> native_context(data->info()->context()->native_context());
+ TypeFeedbackOracle oracle(data->isolate(), temp_zone,
+ data->info()->unoptimized_code(),
+ data->info()->feedback_vector(), native_context);
+ GraphReducer graph_reducer(data->graph(), temp_zone);
+ JSTypeFeedbackSpecializer specializer(data->jsgraph(),
+ data->js_type_feedback(), &oracle);
+ AddReducer(data, &graph_reducer, &specializer);
+ graph_reducer.ReduceGraph();
+ }
+};
+
+
struct TypedLoweringPhase {
static const char* phase_name() { return "typed lowering"; }
@@ -884,6 +916,11 @@ Handle<Code> Pipeline::GenerateCode() {
PipelineData data(&zone_pool, info(), pipeline_statistics.get());
this->data_ = &data;
+ if (info()->is_type_feedback_enabled()) {
+ data.set_js_type_feedback(new (data.graph_zone())
+ JSTypeFeedbackTable(data.graph_zone()));
+ }
+
BeginPhaseKind("graph creation");
if (FLAG_trace_turbo) {
@@ -951,6 +988,11 @@ Handle<Code> Pipeline::GenerateCode() {
RunPrintAndVerify("OSR deconstruction");
}
+ if (info()->is_type_feedback_enabled()) {
+ Run<JSTypeFeedbackPhase>();
+ RunPrintAndVerify("JSType feedback");
+ }
+
// Lower simplified operators and insert changes.
Run<SimplifiedLoweringPhase>();
RunPrintAndVerify("Lowered simplified");
@@ -963,7 +1005,7 @@ Handle<Code> Pipeline::GenerateCode() {
// Lower changes that have been inserted before.
Run<ChangeLoweringPhase>();
- // // TODO(jarin, rossberg): Remove UNTYPED once machine typing works.
+ // TODO(jarin, rossberg): Remove UNTYPED once machine typing works.
RunPrintAndVerify("Lowered changes", true);
Run<LateControlReductionPhase>();
« no previous file with comments | « src/compiler/node-properties.cc ('k') | src/compiler/verifier.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698