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; |
| + } |
| }; |
| } |
| } |