OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/wasm-compiler.h" | 5 #include "src/compiler/wasm-compiler.h" |
6 | 6 |
7 #include "src/isolate-inl.h" | 7 #include "src/isolate-inl.h" |
8 | 8 |
9 #include "src/base/platform/elapsed-timer.h" | 9 #include "src/base/platform/elapsed-timer.h" |
10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
(...skipping 2665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2676 | 2676 |
2677 void WasmGraphBuilder::SetSourcePosition(Node* node, int position) { | 2677 void WasmGraphBuilder::SetSourcePosition(Node* node, int position) { |
2678 compiler::SourcePosition pos(position); | 2678 compiler::SourcePosition pos(position); |
2679 if (source_position_table_) | 2679 if (source_position_table_) |
2680 source_position_table_->SetSourcePosition(node, pos); | 2680 source_position_table_->SetSourcePosition(node, pos); |
2681 } | 2681 } |
2682 | 2682 |
2683 static void RecordFunctionCompilation(Logger::LogEventsAndTags tag, | 2683 static void RecordFunctionCompilation(Logger::LogEventsAndTags tag, |
2684 CompilationInfo* info, | 2684 CompilationInfo* info, |
2685 const char* message, uint32_t index, | 2685 const char* message, uint32_t index, |
2686 wasm::WasmName func_name) { | 2686 Vector<const char> func_name) { |
2687 Isolate* isolate = info->isolate(); | 2687 Isolate* isolate = info->isolate(); |
2688 if (isolate->logger()->is_logging_code_events() || | 2688 if (isolate->logger()->is_logging_code_events() || |
2689 isolate->cpu_profiler()->is_profiling()) { | 2689 isolate->cpu_profiler()->is_profiling()) { |
2690 ScopedVector<char> buffer(128); | 2690 ScopedVector<char> buffer(128); |
2691 SNPrintF(buffer, "%s#%d:%.*s", message, index, func_name.length, | 2691 SNPrintF(buffer, "%s#%d:%.*s", message, index, func_name.length(), |
2692 func_name.name); | 2692 func_name.start()); |
2693 Handle<String> name_str = | 2693 Handle<String> name_str = |
2694 isolate->factory()->NewStringFromAsciiChecked(buffer.start()); | 2694 isolate->factory()->NewStringFromAsciiChecked(buffer.start()); |
2695 Handle<String> script_str = | 2695 Handle<String> script_str = |
2696 isolate->factory()->NewStringFromAsciiChecked("(WASM)"); | 2696 isolate->factory()->NewStringFromAsciiChecked("(WASM)"); |
2697 Handle<Code> code = info->code(); | 2697 Handle<Code> code = info->code(); |
2698 Handle<SharedFunctionInfo> shared = | 2698 Handle<SharedFunctionInfo> shared = |
2699 isolate->factory()->NewSharedFunctionInfo(name_str, code, false); | 2699 isolate->factory()->NewSharedFunctionInfo(name_str, code, false); |
2700 PROFILE(isolate, CodeCreateEvent(tag, AbstractCode::cast(*code), *shared, | 2700 PROFILE(isolate, CodeCreateEvent(tag, AbstractCode::cast(*code), *shared, |
2701 info, *script_str, 0, 0)); | 2701 info, *script_str, 0, 0)); |
2702 } | 2702 } |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2788 module->module->GetName(func->name_offset, func->name_length)); | 2788 module->module->GetName(func->name_offset, func->name_length)); |
2789 // Set the JSFunction's machine code. | 2789 // Set the JSFunction's machine code. |
2790 function->set_code(*code); | 2790 function->set_code(*code); |
2791 } | 2791 } |
2792 return function; | 2792 return function; |
2793 } | 2793 } |
2794 | 2794 |
2795 Handle<Code> CompileWasmToJSWrapper(Isolate* isolate, wasm::ModuleEnv* module, | 2795 Handle<Code> CompileWasmToJSWrapper(Isolate* isolate, wasm::ModuleEnv* module, |
2796 Handle<JSFunction> function, | 2796 Handle<JSFunction> function, |
2797 wasm::FunctionSig* sig, | 2797 wasm::FunctionSig* sig, |
2798 wasm::WasmName module_name, | 2798 Vector<const char> module_name, |
2799 wasm::WasmName function_name) { | 2799 Vector<const char> function_name) { |
2800 //---------------------------------------------------------------------------- | 2800 //---------------------------------------------------------------------------- |
2801 // Create the Graph | 2801 // Create the Graph |
2802 //---------------------------------------------------------------------------- | 2802 //---------------------------------------------------------------------------- |
2803 Zone zone(isolate->allocator()); | 2803 Zone zone(isolate->allocator()); |
2804 Graph graph(&zone); | 2804 Graph graph(&zone); |
2805 CommonOperatorBuilder common(&zone); | 2805 CommonOperatorBuilder common(&zone); |
2806 MachineOperatorBuilder machine(&zone); | 2806 MachineOperatorBuilder machine(&zone); |
2807 JSGraph jsgraph(isolate, &graph, &common, nullptr, nullptr, &machine); | 2807 JSGraph jsgraph(isolate, &graph, &common, nullptr, nullptr, &machine); |
2808 | 2808 |
2809 Node* control = nullptr; | 2809 Node* control = nullptr; |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2907 r.LowerGraph(); | 2907 r.LowerGraph(); |
2908 } | 2908 } |
2909 | 2909 |
2910 if (result.failed()) { | 2910 if (result.failed()) { |
2911 if (FLAG_trace_wasm_compiler) { | 2911 if (FLAG_trace_wasm_compiler) { |
2912 OFStream os(stdout); | 2912 OFStream os(stdout); |
2913 os << "Compilation failed: " << result << std::endl; | 2913 os << "Compilation failed: " << result << std::endl; |
2914 } | 2914 } |
2915 // Add the function as another context for the exception | 2915 // Add the function as another context for the exception |
2916 ScopedVector<char> buffer(128); | 2916 ScopedVector<char> buffer(128); |
2917 wasm::WasmName name = | 2917 Vector<const char> name = |
2918 module_env->module->GetName(function.name_offset, function.name_length); | 2918 module_env->module->GetName(function.name_offset, function.name_length); |
2919 SNPrintF(buffer, "Compiling WASM function #%d:%.*s failed:", | 2919 SNPrintF(buffer, "Compiling WASM function #%d:%.*s failed:", |
2920 function.func_index, name.length, name.name); | 2920 function.func_index, name.length(), name.start()); |
2921 thrower.Failed(buffer.start(), result); | 2921 thrower.Failed(buffer.start(), result); |
2922 return Handle<Code>::null(); | 2922 return Handle<Code>::null(); |
2923 } | 2923 } |
2924 | 2924 |
2925 int index = static_cast<int>(function.func_index); | 2925 int index = static_cast<int>(function.func_index); |
2926 if (index >= FLAG_trace_wasm_ast_start && index < FLAG_trace_wasm_ast_end) { | 2926 if (index >= FLAG_trace_wasm_ast_start && index < FLAG_trace_wasm_ast_end) { |
2927 PrintAst(isolate->allocator(), body); | 2927 PrintAst(isolate->allocator(), body); |
2928 } | 2928 } |
2929 | 2929 |
2930 if (FLAG_trace_wasm_decode_time) { | 2930 if (FLAG_trace_wasm_decode_time) { |
(...skipping 12 matching lines...) Expand all Loading... |
2943 } | 2943 } |
2944 | 2944 |
2945 Code::Flags flags = Code::ComputeFlags(Code::WASM_FUNCTION); | 2945 Code::Flags flags = Code::ComputeFlags(Code::WASM_FUNCTION); |
2946 // add flags here if a meaningful name is helpful for debugging. | 2946 // add flags here if a meaningful name is helpful for debugging. |
2947 bool debugging = | 2947 bool debugging = |
2948 #if DEBUG | 2948 #if DEBUG |
2949 true; | 2949 true; |
2950 #else | 2950 #else |
2951 FLAG_print_opt_code || FLAG_trace_turbo || FLAG_trace_turbo_graph; | 2951 FLAG_print_opt_code || FLAG_trace_turbo || FLAG_trace_turbo_graph; |
2952 #endif | 2952 #endif |
2953 Vector<const char> func_name = | 2953 Vector<const char> func_name = module_env->module->GetNameOrNull( |
2954 module_env->module | 2954 function.name_offset, function.name_length); |
2955 ->GetNameOrNull(function.name_offset, function.name_length) | |
2956 .toVec(); | |
2957 Vector<char> buffer; | 2955 Vector<char> buffer; |
2958 if (func_name.is_empty()) { | 2956 if (func_name.is_empty()) { |
2959 if (debugging) { | 2957 if (debugging) { |
2960 buffer = Vector<char>::New(128); | 2958 buffer = Vector<char>::New(128); |
2961 int chars = SNPrintF(buffer, "WASM_function_#%d", function.func_index); | 2959 int chars = SNPrintF(buffer, "WASM_function_#%d", function.func_index); |
2962 func_name = Vector<const char>::cast(buffer.SubVector(0, chars)); | 2960 func_name = Vector<const char>::cast(buffer.SubVector(0, chars)); |
2963 } else { | 2961 } else { |
2964 func_name = ArrayVector("wasm"); | 2962 func_name = ArrayVector("wasm"); |
2965 } | 2963 } |
2966 } | 2964 } |
(...skipping 22 matching lines...) Expand all Loading... |
2989 // TODO(bradnelson): Improve histogram handling of size_t. | 2987 // TODO(bradnelson): Improve histogram handling of size_t. |
2990 isolate->counters()->wasm_compile_function_peak_memory_bytes()->AddSample( | 2988 isolate->counters()->wasm_compile_function_peak_memory_bytes()->AddSample( |
2991 static_cast<int>(zone.allocation_size())); | 2989 static_cast<int>(zone.allocation_size())); |
2992 return code; | 2990 return code; |
2993 } | 2991 } |
2994 | 2992 |
2995 | 2993 |
2996 } // namespace compiler | 2994 } // namespace compiler |
2997 } // namespace internal | 2995 } // namespace internal |
2998 } // namespace v8 | 2996 } // namespace v8 |
OLD | NEW |