OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compiler/pipeline.h" | 5 #include "src/compiler/pipeline.h" |
6 | 6 |
7 #include <fstream> // NOLINT(readability/streams) | 7 #include <fstream> // NOLINT(readability/streams) |
8 #include <sstream> | 8 #include <sstream> |
9 | 9 |
10 #include "src/base/adapters.h" | 10 #include "src/base/adapters.h" |
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
644 DeadCodeElimination dce(&graph_reducer, data->graph(), data->common()); | 644 DeadCodeElimination dce(&graph_reducer, data->graph(), data->common()); |
645 CommonOperatorReducer common(&graph_reducer, data->graph(), data->common(), | 645 CommonOperatorReducer common(&graph_reducer, data->graph(), data->common(), |
646 data->machine()); | 646 data->machine()); |
647 graph_reducer.AddReducer(&dce); | 647 graph_reducer.AddReducer(&dce); |
648 graph_reducer.AddReducer(&common); | 648 graph_reducer.AddReducer(&common); |
649 graph_reducer.ReduceGraph(); | 649 graph_reducer.ReduceGraph(); |
650 } | 650 } |
651 }; | 651 }; |
652 | 652 |
653 | 653 |
654 struct LateControlReductionPhase { | |
655 static const char* phase_name() { return "late control reduction"; } | |
656 void Run(PipelineData* data, Zone* temp_zone) { | |
657 GraphReducer graph_reducer(temp_zone, data->graph()); | |
658 DeadCodeElimination dce(&graph_reducer, data->graph(), data->common()); | |
659 CommonOperatorReducer common(&graph_reducer, data->graph(), data->common(), | |
660 data->machine()); | |
661 graph_reducer.AddReducer(&dce); | |
662 graph_reducer.AddReducer(&common); | |
663 graph_reducer.ReduceGraph(); | |
664 } | |
665 }; | |
666 | |
667 | |
668 struct EarlyGraphTrimmingPhase { | 654 struct EarlyGraphTrimmingPhase { |
669 static const char* phase_name() { return "early graph trimming"; } | 655 static const char* phase_name() { return "early graph trimming"; } |
670 void Run(PipelineData* data, Zone* temp_zone) { | 656 void Run(PipelineData* data, Zone* temp_zone) { |
671 GraphTrimmer trimmer(temp_zone, data->graph()); | 657 GraphTrimmer trimmer(temp_zone, data->graph()); |
672 NodeVector roots(temp_zone); | 658 NodeVector roots(temp_zone); |
673 data->jsgraph()->GetCachedNodes(&roots); | 659 data->jsgraph()->GetCachedNodes(&roots); |
674 trimmer.TrimGraph(roots.begin(), roots.end()); | 660 trimmer.TrimGraph(roots.begin(), roots.end()); |
675 } | 661 } |
676 }; | 662 }; |
677 | 663 |
(...skipping 21 matching lines...) Expand all Loading... |
699 loop_tree->outer_loops()[0], temp_zone); | 685 loop_tree->outer_loops()[0], temp_zone); |
700 } | 686 } |
701 } | 687 } |
702 }; | 688 }; |
703 | 689 |
704 | 690 |
705 struct GenericLoweringPhase { | 691 struct GenericLoweringPhase { |
706 static const char* phase_name() { return "generic lowering"; } | 692 static const char* phase_name() { return "generic lowering"; } |
707 | 693 |
708 void Run(PipelineData* data, Zone* temp_zone) { | 694 void Run(PipelineData* data, Zone* temp_zone) { |
709 JSGenericLowering generic(data->info()->is_typing_enabled(), | 695 JSGraphReducer graph_reducer(data->jsgraph(), temp_zone); |
710 data->jsgraph()); | 696 DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), |
711 SelectLowering select(data->jsgraph()->graph(), data->jsgraph()->common()); | 697 data->common()); |
| 698 CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), |
| 699 data->common(), data->machine()); |
| 700 JSGenericLowering generic_lowering(data->info()->is_typing_enabled(), |
| 701 data->jsgraph()); |
| 702 SelectLowering select_lowering(data->jsgraph()->graph(), |
| 703 data->jsgraph()->common()); |
712 TailCallOptimization tco(data->common(), data->graph()); | 704 TailCallOptimization tco(data->common(), data->graph()); |
713 JSGraphReducer graph_reducer(data->jsgraph(), temp_zone); | 705 AddReducer(data, &graph_reducer, &dead_code_elimination); |
714 AddReducer(data, &graph_reducer, &generic); | 706 AddReducer(data, &graph_reducer, &common_reducer); |
715 AddReducer(data, &graph_reducer, &select); | 707 AddReducer(data, &graph_reducer, &generic_lowering); |
| 708 AddReducer(data, &graph_reducer, &select_lowering); |
716 // TODO(turbofan): TCO is currently limited to stubs. | 709 // TODO(turbofan): TCO is currently limited to stubs. |
717 if (data->info()->IsStub()) AddReducer(data, &graph_reducer, &tco); | 710 if (data->info()->IsStub()) AddReducer(data, &graph_reducer, &tco); |
718 graph_reducer.ReduceGraph(); | 711 graph_reducer.ReduceGraph(); |
719 } | 712 } |
720 }; | 713 }; |
721 | 714 |
722 | 715 |
723 struct ComputeSchedulePhase { | 716 struct ComputeSchedulePhase { |
724 static const char* phase_name() { return "scheduling"; } | 717 static const char* phase_name() { return "scheduling"; } |
725 | 718 |
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1106 // Optimize control flow. | 1099 // Optimize control flow. |
1107 if (FLAG_turbo_cf_optimization) { | 1100 if (FLAG_turbo_cf_optimization) { |
1108 Run<ControlFlowOptimizationPhase>(); | 1101 Run<ControlFlowOptimizationPhase>(); |
1109 RunPrintAndVerify("Control flow optimized"); | 1102 RunPrintAndVerify("Control flow optimized"); |
1110 } | 1103 } |
1111 | 1104 |
1112 // Lower changes that have been inserted before. | 1105 // Lower changes that have been inserted before. |
1113 Run<ChangeLoweringPhase>(); | 1106 Run<ChangeLoweringPhase>(); |
1114 // TODO(jarin, rossberg): Remove UNTYPED once machine typing works. | 1107 // TODO(jarin, rossberg): Remove UNTYPED once machine typing works. |
1115 RunPrintAndVerify("Lowered changes", true); | 1108 RunPrintAndVerify("Lowered changes", true); |
1116 | |
1117 Run<LateControlReductionPhase>(); | |
1118 RunPrintAndVerify("Late Control reduced"); | |
1119 } else { | 1109 } else { |
1120 if (info()->is_osr()) { | 1110 if (info()->is_osr()) { |
1121 Run<OsrDeconstructionPhase>(); | 1111 Run<OsrDeconstructionPhase>(); |
1122 if (info()->bailout_reason() != kNoReason) return Handle<Code>::null(); | 1112 if (info()->bailout_reason() != kNoReason) return Handle<Code>::null(); |
1123 RunPrintAndVerify("OSR deconstruction", true); | 1113 RunPrintAndVerify("OSR deconstruction", true); |
1124 } | 1114 } |
1125 } | 1115 } |
1126 | 1116 |
1127 // Lower any remaining generic JSOperators. | 1117 // Lower any remaining generic JSOperators. |
1128 Run<GenericLoweringPhase>(); | 1118 Run<GenericLoweringPhase>(); |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1376 tcf << AsC1VRegisterAllocationData("CodeGen", | 1366 tcf << AsC1VRegisterAllocationData("CodeGen", |
1377 data->register_allocation_data()); | 1367 data->register_allocation_data()); |
1378 } | 1368 } |
1379 | 1369 |
1380 data->DeleteRegisterAllocationZone(); | 1370 data->DeleteRegisterAllocationZone(); |
1381 } | 1371 } |
1382 | 1372 |
1383 } // namespace compiler | 1373 } // namespace compiler |
1384 } // namespace internal | 1374 } // namespace internal |
1385 } // namespace v8 | 1375 } // namespace v8 |
OLD | NEW |