| 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 854 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   865 }; |   865 }; | 
|   866  |   866  | 
|   867  |   867  | 
|   868 struct TypedLoweringPhase { |   868 struct TypedLoweringPhase { | 
|   869   static const char* phase_name() { return "typed lowering"; } |   869   static const char* phase_name() { return "typed lowering"; } | 
|   870  |   870  | 
|   871   void Run(PipelineData* data, Zone* temp_zone) { |   871   void Run(PipelineData* data, Zone* temp_zone) { | 
|   872     JSGraphReducer graph_reducer(data->jsgraph(), temp_zone); |   872     JSGraphReducer graph_reducer(data->jsgraph(), temp_zone); | 
|   873     DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), |   873     DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), | 
|   874                                               data->common()); |   874                                               data->common()); | 
|   875     LoadElimination load_elimination(&graph_reducer, data->graph(), |  | 
|   876                                      data->jsgraph()->simplified()); |  | 
|   877     JSBuiltinReducer builtin_reducer(&graph_reducer, data->jsgraph()); |   875     JSBuiltinReducer builtin_reducer(&graph_reducer, data->jsgraph()); | 
|   878     MaybeHandle<LiteralsArray> literals_array = |   876     MaybeHandle<LiteralsArray> literals_array = | 
|   879         data->info()->is_native_context_specializing() |   877         data->info()->is_native_context_specializing() | 
|   880             ? handle(data->info()->closure()->literals(), data->isolate()) |   878             ? handle(data->info()->closure()->literals(), data->isolate()) | 
|   881             : MaybeHandle<LiteralsArray>(); |   879             : MaybeHandle<LiteralsArray>(); | 
|   882     JSCreateLowering create_lowering( |   880     JSCreateLowering create_lowering( | 
|   883         &graph_reducer, data->info()->dependencies(), data->jsgraph(), |   881         &graph_reducer, data->info()->dependencies(), data->jsgraph(), | 
|   884         literals_array, temp_zone); |   882         literals_array, temp_zone); | 
|   885     JSTypedLowering::Flags typed_lowering_flags = JSTypedLowering::kNoFlags; |   883     JSTypedLowering::Flags typed_lowering_flags = JSTypedLowering::kNoFlags; | 
|   886     if (data->info()->is_deoptimization_enabled()) { |   884     if (data->info()->is_deoptimization_enabled()) { | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|   904     CheckpointElimination checkpoint_elimination(&graph_reducer); |   902     CheckpointElimination checkpoint_elimination(&graph_reducer); | 
|   905     CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), |   903     CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), | 
|   906                                          data->common(), data->machine()); |   904                                          data->common(), data->machine()); | 
|   907     AddReducer(data, &graph_reducer, &dead_code_elimination); |   905     AddReducer(data, &graph_reducer, &dead_code_elimination); | 
|   908     AddReducer(data, &graph_reducer, &builtin_reducer); |   906     AddReducer(data, &graph_reducer, &builtin_reducer); | 
|   909     if (data->info()->is_deoptimization_enabled()) { |   907     if (data->info()->is_deoptimization_enabled()) { | 
|   910       AddReducer(data, &graph_reducer, &create_lowering); |   908       AddReducer(data, &graph_reducer, &create_lowering); | 
|   911     } |   909     } | 
|   912     AddReducer(data, &graph_reducer, &typed_lowering); |   910     AddReducer(data, &graph_reducer, &typed_lowering); | 
|   913     AddReducer(data, &graph_reducer, &intrinsic_lowering); |   911     AddReducer(data, &graph_reducer, &intrinsic_lowering); | 
|   914     AddReducer(data, &graph_reducer, &load_elimination); |  | 
|   915     AddReducer(data, &graph_reducer, &simple_reducer); |   912     AddReducer(data, &graph_reducer, &simple_reducer); | 
|   916     AddReducer(data, &graph_reducer, &checkpoint_elimination); |   913     AddReducer(data, &graph_reducer, &checkpoint_elimination); | 
|   917     AddReducer(data, &graph_reducer, &common_reducer); |   914     AddReducer(data, &graph_reducer, &common_reducer); | 
|   918     graph_reducer.ReduceGraph(); |   915     graph_reducer.ReduceGraph(); | 
|   919   } |   916   } | 
|   920 }; |   917 }; | 
|   921  |   918  | 
|   922  |   919  | 
|   923 struct BranchEliminationPhase { |   920 struct BranchEliminationPhase { | 
|   924   static const char* phase_name() { return "branch condition elimination"; } |   921   static const char* phase_name() { return "branch condition elimination"; } | 
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1034  |  1031  | 
|  1035 struct StoreStoreEliminationPhase { |  1032 struct StoreStoreEliminationPhase { | 
|  1036   static const char* phase_name() { return "Store-store elimination"; } |  1033   static const char* phase_name() { return "Store-store elimination"; } | 
|  1037  |  1034  | 
|  1038   void Run(PipelineData* data, Zone* temp_zone) { |  1035   void Run(PipelineData* data, Zone* temp_zone) { | 
|  1039     StoreStoreElimination store_store_elimination(data->jsgraph(), temp_zone); |  1036     StoreStoreElimination store_store_elimination(data->jsgraph(), temp_zone); | 
|  1040     store_store_elimination.Run(); |  1037     store_store_elimination.Run(); | 
|  1041   } |  1038   } | 
|  1042 }; |  1039 }; | 
|  1043  |  1040  | 
 |  1041 struct LoadEliminationPhase { | 
 |  1042   static const char* phase_name() { return "load elimination"; } | 
 |  1043  | 
 |  1044   void Run(PipelineData* data, Zone* temp_zone) { | 
 |  1045     // The memory optimizer requires the graphs to be trimmed, so trim now. | 
 |  1046     GraphTrimmer trimmer(temp_zone, data->graph()); | 
 |  1047     NodeVector roots(temp_zone); | 
 |  1048     data->jsgraph()->GetCachedNodes(&roots); | 
 |  1049     trimmer.TrimGraph(roots.begin(), roots.end()); | 
 |  1050  | 
 |  1051     // Eliminate redundant loads. | 
 |  1052     LoadElimination load_elimination(data->jsgraph(), temp_zone); | 
 |  1053     load_elimination.Run(); | 
 |  1054   } | 
 |  1055 }; | 
 |  1056  | 
|  1044 struct MemoryOptimizationPhase { |  1057 struct MemoryOptimizationPhase { | 
|  1045   static const char* phase_name() { return "memory optimization"; } |  1058   static const char* phase_name() { return "memory optimization"; } | 
|  1046  |  1059  | 
|  1047   void Run(PipelineData* data, Zone* temp_zone) { |  1060   void Run(PipelineData* data, Zone* temp_zone) { | 
|  1048     // The memory optimizer requires the graphs to be trimmed, so trim now. |  1061     // The memory optimizer requires the graphs to be trimmed, so trim now. | 
|  1049     GraphTrimmer trimmer(temp_zone, data->graph()); |  1062     GraphTrimmer trimmer(temp_zone, data->graph()); | 
|  1050     NodeVector roots(temp_zone); |  1063     NodeVector roots(temp_zone); | 
|  1051     data->jsgraph()->GetCachedNodes(&roots); |  1064     data->jsgraph()->GetCachedNodes(&roots); | 
|  1052     trimmer.TrimGraph(roots.begin(), roots.end()); |  1065     trimmer.TrimGraph(roots.begin(), roots.end()); | 
|  1053  |  1066  | 
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1437  |  1450  | 
|  1438     if (FLAG_turbo_stress_loop_peeling) { |  1451     if (FLAG_turbo_stress_loop_peeling) { | 
|  1439       Run<StressLoopPeelingPhase>(); |  1452       Run<StressLoopPeelingPhase>(); | 
|  1440       RunPrintAndVerify("Loop peeled"); |  1453       RunPrintAndVerify("Loop peeled"); | 
|  1441     } |  1454     } | 
|  1442  |  1455  | 
|  1443     if (FLAG_turbo_escape) { |  1456     if (FLAG_turbo_escape) { | 
|  1444       Run<EscapeAnalysisPhase>(); |  1457       Run<EscapeAnalysisPhase>(); | 
|  1445       RunPrintAndVerify("Escape Analysed"); |  1458       RunPrintAndVerify("Escape Analysed"); | 
|  1446     } |  1459     } | 
 |  1460  | 
 |  1461     if (FLAG_turbo_load_elimination) { | 
 |  1462       Run<LoadEliminationPhase>(); | 
 |  1463       RunPrintAndVerify("Load eliminated"); | 
 |  1464     } | 
|  1447   } |  1465   } | 
|  1448  |  1466  | 
|  1449   // Select representations. This has to run w/o the Typer decorator, because |  1467   // Select representations. This has to run w/o the Typer decorator, because | 
|  1450   // we cannot compute meaningful types anyways, and the computed types might |  1468   // we cannot compute meaningful types anyways, and the computed types might | 
|  1451   // even conflict with the representation/truncation logic. |  1469   // even conflict with the representation/truncation logic. | 
|  1452   Run<RepresentationSelectionPhase>(); |  1470   Run<RepresentationSelectionPhase>(); | 
|  1453   RunPrintAndVerify("Representations selected", true); |  1471   RunPrintAndVerify("Representations selected", true); | 
|  1454  |  1472  | 
|  1455 #ifdef DEBUG |  1473 #ifdef DEBUG | 
|  1456   // From now on it is invalid to look at types on the nodes, because: |  1474   // From now on it is invalid to look at types on the nodes, because: | 
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1831   data->DeleteRegisterAllocationZone(); |  1849   data->DeleteRegisterAllocationZone(); | 
|  1832 } |  1850 } | 
|  1833  |  1851  | 
|  1834 CompilationInfo* PipelineImpl::info() const { return data_->info(); } |  1852 CompilationInfo* PipelineImpl::info() const { return data_->info(); } | 
|  1835  |  1853  | 
|  1836 Isolate* PipelineImpl::isolate() const { return info()->isolate(); } |  1854 Isolate* PipelineImpl::isolate() const { return info()->isolate(); } | 
|  1837  |  1855  | 
|  1838 }  // namespace compiler |  1856 }  // namespace compiler | 
|  1839 }  // namespace internal |  1857 }  // namespace internal | 
|  1840 }  // namespace v8 |  1858 }  // namespace v8 | 
| OLD | NEW |