Chromium Code Reviews| Index: test/cctest/compiler/function-tester.h | 
| diff --git a/test/cctest/compiler/function-tester.h b/test/cctest/compiler/function-tester.h | 
| index c869f00d1931af18a4f07eaff12e38e0d579f835..d93805f9991de9e4c4cf2dce47ae933610afef9e 100644 | 
| --- a/test/cctest/compiler/function-tester.h | 
| +++ b/test/cctest/compiler/function-tester.h | 
| @@ -9,6 +9,7 @@ | 
| #include "test/cctest/cctest.h" | 
| #include "src/compiler.h" | 
| +#include "src/compiler/linkage.h" | 
| #include "src/compiler/pipeline.h" | 
| #include "src/execution.h" | 
| #include "src/full-codegen.h" | 
| @@ -37,52 +38,16 @@ class FunctionTester : public InitializedHandleScope { | 
| CHECK_EQ(0, flags_ & ~supported_flags); | 
| } | 
| + explicit FunctionTester(Graph* graph) | 
| + : isolate(main_isolate()), | 
| + function(NewFunction("(function(a,b){'use strict'; return 0;})")), | 
| 
 
Michael Starzinger
2014/10/08 09:08:10
nit: Just use the empty function ... it looks conf
 
titzer
2014/10/08 09:22:54
Done.
 
 | 
| + flags_(0) { | 
| + CompileGraph(graph); | 
| + } | 
| + | 
| Isolate* isolate; | 
| Handle<JSFunction> function; | 
| - Handle<JSFunction> Compile(Handle<JSFunction> function) { | 
| -#if V8_TURBOFAN_TARGET | 
| - CompilationInfoWithZone info(function); | 
| - | 
| - CHECK(Parser::Parse(&info)); | 
| - info.SetOptimizing(BailoutId::None(), Handle<Code>(function->code())); | 
| - if (flags_ & CompilationInfo::kContextSpecializing) { | 
| - info.MarkAsContextSpecializing(); | 
| - } | 
| - if (flags_ & CompilationInfo::kInliningEnabled) { | 
| - info.MarkAsInliningEnabled(); | 
| - } | 
| - if (flags_ & CompilationInfo::kTypingEnabled) { | 
| - info.MarkAsTypingEnabled(); | 
| - } | 
| - CHECK(Rewriter::Rewrite(&info)); | 
| - CHECK(Scope::Analyze(&info)); | 
| - CHECK(Compiler::EnsureDeoptimizationSupport(&info)); | 
| - | 
| - Pipeline pipeline(&info); | 
| - Handle<Code> code = pipeline.GenerateCode(); | 
| - if (FLAG_turbo_deoptimization) { | 
| - info.context()->native_context()->AddOptimizedCode(*code); | 
| - } | 
| - | 
| - CHECK(!code.is_null()); | 
| - function->ReplaceCode(*code); | 
| -#elif USE_CRANKSHAFT | 
| - Handle<Code> unoptimized = Handle<Code>(function->code()); | 
| - Handle<Code> code = Compiler::GetOptimizedCode(function, unoptimized, | 
| - Compiler::NOT_CONCURRENT); | 
| - CHECK(!code.is_null()); | 
| -#if ENABLE_DISASSEMBLER | 
| - if (FLAG_print_opt_code) { | 
| - CodeTracer::Scope tracing_scope(isolate->GetCodeTracer()); | 
| - code->Disassemble("test code", tracing_scope.file()); | 
| - } | 
| -#endif | 
| - function->ReplaceCode(*code); | 
| -#endif | 
| - return function; | 
| - } | 
| - | 
| MaybeHandle<Object> Call(Handle<Object> a, Handle<Object> b) { | 
| Handle<Object> args[] = {a, b}; | 
| return Execution::Call(isolate, function, undefined(), 2, args, false); | 
| @@ -183,8 +148,82 @@ class FunctionTester : public InitializedHandleScope { | 
| Handle<Object> false_value() { return isolate->factory()->false_value(); } | 
| + Handle<JSFunction> Compile(Handle<JSFunction> function) { | 
| +// foo me | 
| 
 
Michael Starzinger
2014/10/08 09:08:10
nit: Hmm, it looks foo'ed already. :)
 
titzer
2014/10/08 09:22:55
Done.
 
 | 
| +#if V8_TURBOFAN_TARGET | 
| + CompilationInfoWithZone info(function); | 
| + | 
| + CHECK(Parser::Parse(&info)); | 
| + info.SetOptimizing(BailoutId::None(), Handle<Code>(function->code())); | 
| + if (flags_ & CompilationInfo::kContextSpecializing) { | 
| + info.MarkAsContextSpecializing(); | 
| + } | 
| + if (flags_ & CompilationInfo::kInliningEnabled) { | 
| + info.MarkAsInliningEnabled(); | 
| + } | 
| + if (flags_ & CompilationInfo::kTypingEnabled) { | 
| + info.MarkAsTypingEnabled(); | 
| + } | 
| + CHECK(Rewriter::Rewrite(&info)); | 
| + CHECK(Scope::Analyze(&info)); | 
| + CHECK(Compiler::EnsureDeoptimizationSupport(&info)); | 
| + | 
| + Pipeline pipeline(&info); | 
| + Handle<Code> code = pipeline.GenerateCode(); | 
| + if (FLAG_turbo_deoptimization) { | 
| + info.context()->native_context()->AddOptimizedCode(*code); | 
| + } | 
| + | 
| + CHECK(!code.is_null()); | 
| + function->ReplaceCode(*code); | 
| +#elif USE_CRANKSHAFT | 
| + Handle<Code> unoptimized = Handle<Code>(function->code()); | 
| + Handle<Code> code = Compiler::GetOptimizedCode(function, unoptimized, | 
| + Compiler::NOT_CONCURRENT); | 
| + CHECK(!code.is_null()); | 
| +#if ENABLE_DISASSEMBLER | 
| + if (FLAG_print_opt_code) { | 
| + CodeTracer::Scope tracing_scope(isolate->GetCodeTracer()); | 
| + code->Disassemble("test code", tracing_scope.file()); | 
| + } | 
| +#endif | 
| + function->ReplaceCode(*code); | 
| +#endif | 
| + return function; | 
| + } | 
| + | 
| + static Handle<JSFunction> ForMachineGraph(Graph* graph) { | 
| + JSFunction* p = NULL; | 
| + { // because of the implicit handle scope of FunctionTester. | 
| + FunctionTester f(graph); | 
| + p = *f.function; | 
| + } | 
| + return Handle<JSFunction>(p); // allocated in outer handle scope. | 
| + } | 
| + | 
| private: | 
| uint32_t flags_; | 
| + | 
| + // Compile the given machine graph instead of the source of the function | 
| + // and replace the JSFunction's code with the result. | 
| + Handle<JSFunction> CompileGraph(Graph* graph) { | 
| + CHECK(Pipeline::SupportedTarget()); | 
| + CompilationInfoWithZone info(function); | 
| + | 
| + CHECK(Parser::Parse(&info)); | 
| + info.SetOptimizing(BailoutId::None(), | 
| + Handle<Code>(function->shared()->code())); | 
| + CHECK(Rewriter::Rewrite(&info)); | 
| + CHECK(Scope::Analyze(&info)); | 
| + CHECK(Compiler::EnsureDeoptimizationSupport(&info)); | 
| + | 
| + Pipeline pipeline(&info); | 
| + Linkage linkage(&info); | 
| + Handle<Code> code = pipeline.GenerateCodeForMachineGraph(&linkage, graph); | 
| + CHECK(!code.is_null()); | 
| + function->ReplaceCode(*code); | 
| + return function; | 
| + } | 
| }; | 
| } | 
| } |