| Index: src/compiler/pipeline.cc
|
| diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc
|
| index e480b194c93f443a3d78adf7cef32021c6256e3e..84fde32f715239cebb92613fe02ab017e05b5423 100644
|
| --- a/src/compiler/pipeline.cc
|
| +++ b/src/compiler/pipeline.cc
|
| @@ -19,15 +19,15 @@
|
| #include "src/compiler/common-operator-reducer.h"
|
| #include "src/compiler/control-flow-optimizer.h"
|
| #include "src/compiler/dead-code-elimination.h"
|
| -#include "src/compiler/escape-analysis.h"
|
| #include "src/compiler/escape-analysis-reducer.h"
|
| +#include "src/compiler/escape-analysis.h"
|
| #include "src/compiler/frame-elider.h"
|
| #include "src/compiler/graph-replay.h"
|
| #include "src/compiler/graph-trimmer.h"
|
| #include "src/compiler/graph-visualizer.h"
|
| #include "src/compiler/greedy-allocator.h"
|
| -#include "src/compiler/instruction.h"
|
| #include "src/compiler/instruction-selector.h"
|
| +#include "src/compiler/instruction.h"
|
| #include "src/compiler/js-builtin-reducer.h"
|
| #include "src/compiler/js-call-reducer.h"
|
| #include "src/compiler/js-context-specialization.h"
|
| @@ -48,20 +48,21 @@
|
| #include "src/compiler/move-optimizer.h"
|
| #include "src/compiler/osr.h"
|
| #include "src/compiler/pipeline-statistics.h"
|
| -#include "src/compiler/register-allocator.h"
|
| #include "src/compiler/register-allocator-verifier.h"
|
| +#include "src/compiler/register-allocator.h"
|
| #include "src/compiler/schedule.h"
|
| #include "src/compiler/scheduler.h"
|
| #include "src/compiler/select-lowering.h"
|
| #include "src/compiler/simplified-lowering.h"
|
| -#include "src/compiler/simplified-operator.h"
|
| #include "src/compiler/simplified-operator-reducer.h"
|
| +#include "src/compiler/simplified-operator.h"
|
| #include "src/compiler/tail-call-optimization.h"
|
| #include "src/compiler/type-hint-analyzer.h"
|
| #include "src/compiler/typer.h"
|
| #include "src/compiler/value-numbering-reducer.h"
|
| #include "src/compiler/verifier.h"
|
| #include "src/compiler/zone-pool.h"
|
| +#include "src/isolate-inl.h"
|
| #include "src/ostreams.h"
|
| #include "src/register-configuration.h"
|
| #include "src/type-info.h"
|
| @@ -476,6 +477,67 @@ class PipelineRunScope {
|
| ZonePool::Scope zone_scope_;
|
| };
|
|
|
| +class PipelineCompilationJob : public OptimizedCompileJob {
|
| + public:
|
| + explicit PipelineCompilationJob(CompilationInfo* info)
|
| + : OptimizedCompileJob(info) {}
|
| +
|
| + protected:
|
| + virtual Status CreateGraphImpl();
|
| + virtual Status OptimizeGraphImpl();
|
| + virtual Status GenerateCodeImpl();
|
| +};
|
| +
|
| +PipelineCompilationJob::Status PipelineCompilationJob::CreateGraphImpl() {
|
| + if (FLAG_trace_opt) {
|
| + OFStream os(stdout);
|
| + os << "[compiling method " << Brief(*info()->closure())
|
| + << " using TurboFan";
|
| + if (info()->is_osr()) os << " OSR";
|
| + os << "]" << std::endl;
|
| + }
|
| +
|
| + if (info()->shared_info()->asm_function()) {
|
| + if (info()->osr_frame()) info()->MarkAsFrameSpecializing();
|
| + info()->MarkAsFunctionContextSpecializing();
|
| + } else {
|
| + if (!FLAG_always_opt) {
|
| + info()->MarkAsBailoutOnUninitialized();
|
| + }
|
| + if (FLAG_native_context_specialization) {
|
| + info()->MarkAsNativeContextSpecializing();
|
| + info()->MarkAsTypingEnabled();
|
| + }
|
| + }
|
| + if (!info()->shared_info()->asm_function() || FLAG_turbo_asm_deoptimization) {
|
| + info()->MarkAsDeoptimizationEnabled();
|
| + }
|
| +
|
| + Pipeline pipeline(info());
|
| + pipeline.GenerateCode();
|
| + if (isolate()->has_pending_exception()) return FAILED; // Stack overflowed.
|
| + if (info()->code().is_null()) return AbortOptimization(kGraphBuildingFailed);
|
| +
|
| + return SUCCEEDED;
|
| +}
|
| +
|
| +PipelineCompilationJob::Status PipelineCompilationJob::OptimizeGraphImpl() {
|
| + // TODO(turbofan): Currently everything is done in the first phase.
|
| + DCHECK(!info()->code().is_null());
|
| + return SUCCEEDED;
|
| +}
|
| +
|
| +PipelineCompilationJob::Status PipelineCompilationJob::GenerateCodeImpl() {
|
| + // TODO(turbofan): Currently everything is done in the first phase.
|
| + DCHECK(!info()->code().is_null());
|
| + info()->dependencies()->Commit(info()->code());
|
| + if (info()->is_deoptimization_enabled()) {
|
| + info()->context()->native_context()->AddOptimizedCode(*info()->code());
|
| + RegisterWeakObjectsInOptimizedCode(info()->code());
|
| + }
|
| + return SUCCEEDED;
|
| +}
|
| +
|
| } // namespace
|
|
|
|
|
| @@ -1313,6 +1375,9 @@ Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info,
|
| return pipeline.ScheduleAndGenerateCode(call_descriptor);
|
| }
|
|
|
| +OptimizedCompileJob* Pipeline::NewCompilationJob(CompilationInfo* info) {
|
| + return new (info->zone()) PipelineCompilationJob(info);
|
| +}
|
|
|
| bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config,
|
| InstructionSequence* sequence,
|
|
|