| Index: src/compiler/pipeline.cc
|
| diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc
|
| index 4d5982aa460dc348ecf0870a2ac9a701bad93c61..f2316f2049d4a208e56aa54a71ff70ba40ed111d 100644
|
| --- a/src/compiler/pipeline.cc
|
| +++ b/src/compiler/pipeline.cc
|
| @@ -290,11 +290,11 @@ class AstGraphBuilderWithPositions : public AstGraphBuilder {
|
| LoopAssignmentAnalysis* loop_assignment,
|
| SourcePositionTable* source_positions)
|
| : AstGraphBuilder(local_zone, info, jsgraph, loop_assignment),
|
| - source_positions_(source_positions) {}
|
| + source_positions_(source_positions),
|
| + start_position_(info->shared_info()->start_position()) {}
|
|
|
| bool CreateGraph() {
|
| - SourcePositionTable::Scope pos(source_positions_,
|
| - SourcePosition::Unknown());
|
| + SourcePositionTable::Scope pos_scope(source_positions_, start_position_);
|
| return AstGraphBuilder::CreateGraph();
|
| }
|
|
|
| @@ -311,9 +311,50 @@ class AstGraphBuilderWithPositions : public AstGraphBuilder {
|
|
|
| private:
|
| SourcePositionTable* source_positions_;
|
| + SourcePosition start_position_;
|
| +};
|
| +
|
| +
|
| +namespace {
|
| +
|
| +class SourcePositionWrapper : public Reducer {
|
| + public:
|
| + // Allocate SourcePositionWrapper can't inherit from ZoneObject due to code
|
| + // style multiple-inheritance restrictions.
|
| + void* operator new(size_t size, Zone* zone) {
|
| + return zone->New(static_cast<int>(size));
|
| + }
|
| +
|
| + SourcePositionWrapper(Reducer* reducer, SourcePositionTable* table)
|
| + : reducer_(reducer), table_(table) {}
|
| + virtual ~SourcePositionWrapper() {}
|
| +
|
| + virtual Reduction Reduce(Node* node) {
|
| + SourcePosition pos = table_->GetSourcePosition(node);
|
| + SourcePositionTable::Scope position(table_, pos);
|
| + return reducer_->Reduce(node);
|
| + }
|
| +
|
| + private:
|
| + Reducer* reducer_;
|
| + SourcePositionTable* table_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SourcePositionWrapper);
|
| };
|
|
|
|
|
| +static void AddReducer(PipelineData* data, GraphReducer* graph_reducer,
|
| + Reducer* reducer) {
|
| + if (FLAG_turbo_source_positions) {
|
| + SourcePositionWrapper* wrapper = new (data->graph_zone())
|
| + SourcePositionWrapper(reducer, data->source_positions());
|
| + graph_reducer->AddReducer(wrapper);
|
| + } else {
|
| + graph_reducer->AddReducer(reducer);
|
| + }
|
| +}
|
| +};
|
| +
|
| class PipelineRunScope {
|
| public:
|
| PipelineRunScope(PipelineData* data, const char* phase_name)
|
| @@ -382,7 +423,7 @@ struct ContextSpecializerPhase {
|
| JSContextSpecializer spec(data->info(), data->jsgraph(),
|
| data->context_node());
|
| GraphReducer graph_reducer(data->graph(), temp_zone);
|
| - graph_reducer.AddReducer(&spec);
|
| + AddReducer(data, &graph_reducer, &spec);
|
| graph_reducer.ReduceGraph();
|
| }
|
| };
|
| @@ -435,13 +476,13 @@ struct TypedLoweringPhase {
|
| SimplifiedOperatorReducer simple_reducer(data->jsgraph());
|
| CommonOperatorReducer common_reducer;
|
| GraphReducer graph_reducer(data->graph(), temp_zone);
|
| - graph_reducer.AddReducer(&vn_reducer);
|
| - graph_reducer.AddReducer(&builtin_reducer);
|
| - graph_reducer.AddReducer(&typed_lowering);
|
| - graph_reducer.AddReducer(&intrinsic_lowering);
|
| - graph_reducer.AddReducer(&load_elimination);
|
| - graph_reducer.AddReducer(&simple_reducer);
|
| - graph_reducer.AddReducer(&common_reducer);
|
| + AddReducer(data, &graph_reducer, &vn_reducer);
|
| + AddReducer(data, &graph_reducer, &builtin_reducer);
|
| + AddReducer(data, &graph_reducer, &typed_lowering);
|
| + AddReducer(data, &graph_reducer, &intrinsic_lowering);
|
| + AddReducer(data, &graph_reducer, &load_elimination);
|
| + AddReducer(data, &graph_reducer, &simple_reducer);
|
| + AddReducer(data, &graph_reducer, &common_reducer);
|
| graph_reducer.ReduceGraph();
|
| }
|
| };
|
| @@ -453,17 +494,18 @@ struct SimplifiedLoweringPhase {
|
| void Run(PipelineData* data, Zone* temp_zone) {
|
| SourcePositionTable::Scope pos(data->source_positions(),
|
| SourcePosition::Unknown());
|
| - SimplifiedLowering lowering(data->jsgraph(), temp_zone);
|
| + SimplifiedLowering lowering(data->jsgraph(), temp_zone,
|
| + data->source_positions());
|
| lowering.LowerAllNodes();
|
| ValueNumberingReducer vn_reducer(temp_zone);
|
| SimplifiedOperatorReducer simple_reducer(data->jsgraph());
|
| MachineOperatorReducer machine_reducer(data->jsgraph());
|
| CommonOperatorReducer common_reducer;
|
| GraphReducer graph_reducer(data->graph(), temp_zone);
|
| - graph_reducer.AddReducer(&vn_reducer);
|
| - graph_reducer.AddReducer(&simple_reducer);
|
| - graph_reducer.AddReducer(&machine_reducer);
|
| - graph_reducer.AddReducer(&common_reducer);
|
| + AddReducer(data, &graph_reducer, &vn_reducer);
|
| + AddReducer(data, &graph_reducer, &simple_reducer);
|
| + AddReducer(data, &graph_reducer, &machine_reducer);
|
| + AddReducer(data, &graph_reducer, &common_reducer);
|
| graph_reducer.ReduceGraph();
|
| }
|
| };
|
| @@ -483,10 +525,10 @@ struct ChangeLoweringPhase {
|
| CommonOperatorReducer common_reducer;
|
| GraphReducer graph_reducer(data->graph(), temp_zone);
|
| graph_reducer.AddReducer(&vn_reducer);
|
| - graph_reducer.AddReducer(&simple_reducer);
|
| - graph_reducer.AddReducer(&lowering);
|
| - graph_reducer.AddReducer(&machine_reducer);
|
| - graph_reducer.AddReducer(&common_reducer);
|
| + AddReducer(data, &graph_reducer, &simple_reducer);
|
| + AddReducer(data, &graph_reducer, &lowering);
|
| + AddReducer(data, &graph_reducer, &machine_reducer);
|
| + AddReducer(data, &graph_reducer, &common_reducer);
|
| graph_reducer.ReduceGraph();
|
| }
|
| };
|
| @@ -537,8 +579,8 @@ struct GenericLoweringPhase {
|
| JSGenericLowering generic(data->info(), data->jsgraph());
|
| SelectLowering select(data->jsgraph()->graph(), data->jsgraph()->common());
|
| GraphReducer graph_reducer(data->graph(), temp_zone);
|
| - graph_reducer.AddReducer(&generic);
|
| - graph_reducer.AddReducer(&select);
|
| + AddReducer(data, &graph_reducer, &generic);
|
| + AddReducer(data, &graph_reducer, &select);
|
| graph_reducer.ReduceGraph();
|
| }
|
| };
|
|
|