diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc index 58e17f43f2..db51b22896 100644 --- a/src/code-stubs-hydrogen.cc +++ b/src/code-stubs-hydrogen.cc @@ -35,16 +35,22 @@ namespace v8 { namespace internal { -Handle HydrogenCodeStub::CodeFromGraph(HGraph* graph) { - graph->OrderBlocks(); - graph->AssignDominators(); - graph->CollectPhis(); - graph->InsertRepresentationChanges(); - graph->EliminateRedundantBoundsChecks(); +// TODO(svenpanne) Merge with OptimizingCompiler::OptimizeGraph(). +static LChunk* OptimizeGraph(HGraph* graph) { + AssertNoAllocation no_gc; + NoHandleAllocation no_handles; + NoHandleDereference no_deref; + + ASSERT(graph != NULL); + SmartArrayPointer bailout_reason; + if (!graph->Optimize(&bailout_reason)) { + FATAL(bailout_reason.is_empty() ? "unknown" : *bailout_reason); + } LChunk* chunk = LChunk::NewChunk(graph); - ASSERT(chunk != NULL); - Handle stub = chunk->Codegen(Code::COMPILED_STUB); - return stub; + if (chunk == NULL) { + FATAL(graph->info()->bailout_reason()); + } + return chunk; } @@ -133,7 +139,8 @@ void CodeStubGraphBuilder::BuildCodeStub() { Handle KeyedLoadFastElementStub::GenerateCode() { CodeStubGraphBuilder builder(this); - return CodeFromGraph(builder.CreateGraph()); + LChunk* chunk = OptimizeGraph(builder.CreateGraph()); + return chunk->Codegen(Code::COMPILED_STUB); } diff --git a/src/code-stubs.h b/src/code-stubs.h index bf0e261557..96c208980f 100644 --- a/src/code-stubs.h +++ b/src/code-stubs.h @@ -274,9 +274,6 @@ class HydrogenCodeStub : public CodeStub { virtual void InitializeInterfaceDescriptor( Isolate* isolate, CodeStubInterfaceDescriptor* descriptor) = 0; - - protected: - Handle CodeFromGraph(HGraph* graph); };