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/platform/elapsed-timer.h" | 10 #include "src/base/platform/elapsed-timer.h" |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 }; | 407 }; |
408 | 408 |
409 | 409 |
410 struct OsrDeconstructionPhase { | 410 struct OsrDeconstructionPhase { |
411 static const char* phase_name() { return "OSR deconstruction"; } | 411 static const char* phase_name() { return "OSR deconstruction"; } |
412 | 412 |
413 void Run(PipelineData* data, Zone* temp_zone) { | 413 void Run(PipelineData* data, Zone* temp_zone) { |
414 SourcePositionTable::Scope pos(data->source_positions(), | 414 SourcePositionTable::Scope pos(data->source_positions(), |
415 SourcePosition::Unknown()); | 415 SourcePosition::Unknown()); |
416 OsrHelper osr_helper(data->info()); | 416 OsrHelper osr_helper(data->info()); |
417 osr_helper.Deconstruct(data->jsgraph(), data->common(), temp_zone); | 417 bool success = |
| 418 osr_helper.Deconstruct(data->jsgraph(), data->common(), temp_zone); |
| 419 if (!success) data->info()->RetryOptimization(kOsrCompileFailed); |
418 } | 420 } |
419 }; | 421 }; |
420 | 422 |
421 | 423 |
422 struct TypedLoweringPhase { | 424 struct TypedLoweringPhase { |
423 static const char* phase_name() { return "typed lowering"; } | 425 static const char* phase_name() { return "typed lowering"; } |
424 | 426 |
425 void Run(PipelineData* data, Zone* temp_zone) { | 427 void Run(PipelineData* data, Zone* temp_zone) { |
426 SourcePositionTable::Scope pos(data->source_positions(), | 428 SourcePositionTable::Scope pos(data->source_positions(), |
427 SourcePosition::Unknown()); | 429 SourcePosition::Unknown()); |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
767 if (FLAG_trace_turbo) { | 769 if (FLAG_trace_turbo) { |
768 Run<PrintGraphPhase>(phase); | 770 Run<PrintGraphPhase>(phase); |
769 } | 771 } |
770 if (FLAG_turbo_verify) { | 772 if (FLAG_turbo_verify) { |
771 Run<VerifyGraphPhase>(untyped); | 773 Run<VerifyGraphPhase>(untyped); |
772 } | 774 } |
773 } | 775 } |
774 | 776 |
775 | 777 |
776 Handle<Code> Pipeline::GenerateCode() { | 778 Handle<Code> Pipeline::GenerateCode() { |
777 // TODO(turbofan): Make OSR work with inner loops and remove this bailout. | 779 if (info()->is_osr() && !FLAG_turbo_osr) { |
778 if (info()->is_osr() && !FLAG_turbo_osr) return Handle<Code>::null(); | 780 // TODO(turbofan): remove this flag and always handle OSR |
| 781 info()->RetryOptimization(kOsrCompileFailed); |
| 782 return Handle<Code>::null(); |
| 783 } |
779 | 784 |
780 // TODO(mstarzinger): This is just a temporary hack to make TurboFan work, | 785 // TODO(mstarzinger): This is just a temporary hack to make TurboFan work, |
781 // the correct solution is to restore the context register after invoking | 786 // the correct solution is to restore the context register after invoking |
782 // builtins from full-codegen. | 787 // builtins from full-codegen. |
783 Handle<SharedFunctionInfo> shared = info()->shared_info(); | 788 Handle<SharedFunctionInfo> shared = info()->shared_info(); |
784 if (isolate()->bootstrapper()->IsActive() || | 789 if (isolate()->bootstrapper()->IsActive() || |
785 shared->disable_optimization_reason() == | 790 shared->disable_optimization_reason() == |
786 kBuiltinFunctionCannotBeOptimized) { | 791 kBuiltinFunctionCannotBeOptimized) { |
787 shared->DisableOptimization(kBuiltinFunctionCannotBeOptimized); | 792 shared->DisableOptimization(kBuiltinFunctionCannotBeOptimized); |
788 return Handle<Code>::null(); | 793 return Handle<Code>::null(); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
856 Run<TypedLoweringPhase>(); | 861 Run<TypedLoweringPhase>(); |
857 RunPrintAndVerify("Lowered typed"); | 862 RunPrintAndVerify("Lowered typed"); |
858 | 863 |
859 if (FLAG_turbo_stress_loop_peeling) { | 864 if (FLAG_turbo_stress_loop_peeling) { |
860 Run<StressLoopPeelingPhase>(); | 865 Run<StressLoopPeelingPhase>(); |
861 RunPrintAndVerify("Loop peeled", true); | 866 RunPrintAndVerify("Loop peeled", true); |
862 } | 867 } |
863 | 868 |
864 if (info()->is_osr()) { | 869 if (info()->is_osr()) { |
865 Run<OsrDeconstructionPhase>(); | 870 Run<OsrDeconstructionPhase>(); |
| 871 if (info()->bailout_reason() != kNoReason) return Handle<Code>::null(); |
866 RunPrintAndVerify("OSR deconstruction"); | 872 RunPrintAndVerify("OSR deconstruction"); |
867 } | 873 } |
868 | 874 |
869 // Lower simplified operators and insert changes. | 875 // Lower simplified operators and insert changes. |
870 Run<SimplifiedLoweringPhase>(); | 876 Run<SimplifiedLoweringPhase>(); |
871 RunPrintAndVerify("Lowered simplified"); | 877 RunPrintAndVerify("Lowered simplified"); |
872 | 878 |
873 // Lower changes that have been inserted before. | 879 // Lower changes that have been inserted before. |
874 Run<ChangeLoweringPhase>(); | 880 Run<ChangeLoweringPhase>(); |
875 // // TODO(jarin, rossberg): Remove UNTYPED once machine typing works. | 881 // // TODO(jarin, rossberg): Remove UNTYPED once machine typing works. |
876 RunPrintAndVerify("Lowered changes", true); | 882 RunPrintAndVerify("Lowered changes", true); |
877 | 883 |
878 Run<LateControlReductionPhase>(); | 884 Run<LateControlReductionPhase>(); |
879 RunPrintAndVerify("Late Control reduced"); | 885 RunPrintAndVerify("Late Control reduced"); |
880 } else { | 886 } else { |
881 if (info()->is_osr()) { | 887 if (info()->is_osr()) { |
882 Run<OsrDeconstructionPhase>(); | 888 Run<OsrDeconstructionPhase>(); |
| 889 if (info()->bailout_reason() != kNoReason) return Handle<Code>::null(); |
883 RunPrintAndVerify("OSR deconstruction"); | 890 RunPrintAndVerify("OSR deconstruction"); |
884 } | 891 } |
885 } | 892 } |
886 | 893 |
887 // Lower any remaining generic JSOperators. | 894 // Lower any remaining generic JSOperators. |
888 Run<GenericLoweringPhase>(); | 895 Run<GenericLoweringPhase>(); |
889 // TODO(jarin, rossberg): Remove UNTYPED once machine typing works. | 896 // TODO(jarin, rossberg): Remove UNTYPED once machine typing works. |
890 RunPrintAndVerify("Lowered generic", true); | 897 RunPrintAndVerify("Lowered generic", true); |
891 | 898 |
892 BeginPhaseKind("block building"); | 899 BeginPhaseKind("block building"); |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1114 } | 1121 } |
1115 | 1122 |
1116 | 1123 |
1117 void Pipeline::TearDown() { | 1124 void Pipeline::TearDown() { |
1118 InstructionOperand::TearDownCaches(); | 1125 InstructionOperand::TearDownCaches(); |
1119 } | 1126 } |
1120 | 1127 |
1121 } // namespace compiler | 1128 } // namespace compiler |
1122 } // namespace internal | 1129 } // namespace internal |
1123 } // namespace v8 | 1130 } // namespace v8 |
OLD | NEW |