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 12 matching lines...) Expand all Loading... |
23 #include "src/compiler/machine-operator.h" | 23 #include "src/compiler/machine-operator.h" |
24 #include "src/compiler/node-matchers.h" | 24 #include "src/compiler/node-matchers.h" |
25 #include "src/compiler/pipeline.h" | 25 #include "src/compiler/pipeline.h" |
26 #include "src/compiler/source-position.h" | 26 #include "src/compiler/source-position.h" |
27 #include "src/compiler/zone-pool.h" | 27 #include "src/compiler/zone-pool.h" |
28 | 28 |
29 #include "src/code-factory.h" | 29 #include "src/code-factory.h" |
30 #include "src/code-stubs.h" | 30 #include "src/code-stubs.h" |
31 #include "src/factory.h" | 31 #include "src/factory.h" |
32 #include "src/log-inl.h" | 32 #include "src/log-inl.h" |
33 #include "src/profiler/cpu-profiler.h" | |
34 | 33 |
35 #include "src/wasm/ast-decoder.h" | 34 #include "src/wasm/ast-decoder.h" |
36 #include "src/wasm/wasm-module.h" | 35 #include "src/wasm/wasm-module.h" |
37 #include "src/wasm/wasm-opcodes.h" | 36 #include "src/wasm/wasm-opcodes.h" |
38 | 37 |
39 // TODO(titzer): pull WASM_64 up to a common header. | 38 // TODO(titzer): pull WASM_64 up to a common header. |
40 #if !V8_TARGET_ARCH_32_BIT || V8_TARGET_ARCH_X64 | 39 #if !V8_TARGET_ARCH_32_BIT || V8_TARGET_ARCH_X64 |
41 #define WASM_64 1 | 40 #define WASM_64 1 |
42 #else | 41 #else |
43 #define WASM_64 0 | 42 #define WASM_64 0 |
(...skipping 2883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2927 } | 2926 } |
2928 | 2927 |
2929 void WasmGraphBuilder::SetSourcePosition(Node* node, | 2928 void WasmGraphBuilder::SetSourcePosition(Node* node, |
2930 wasm::WasmCodePosition position) { | 2929 wasm::WasmCodePosition position) { |
2931 DCHECK_NE(position, wasm::kNoCodePosition); | 2930 DCHECK_NE(position, wasm::kNoCodePosition); |
2932 compiler::SourcePosition pos(position); | 2931 compiler::SourcePosition pos(position); |
2933 if (source_position_table_) | 2932 if (source_position_table_) |
2934 source_position_table_->SetSourcePosition(node, pos); | 2933 source_position_table_->SetSourcePosition(node, pos); |
2935 } | 2934 } |
2936 | 2935 |
2937 static void RecordFunctionCompilation(Logger::LogEventsAndTags tag, | 2936 static void RecordFunctionCompilation(CodeEventListener::LogEventsAndTags tag, |
2938 CompilationInfo* info, | 2937 CompilationInfo* info, |
2939 const char* message, uint32_t index, | 2938 const char* message, uint32_t index, |
2940 wasm::WasmName func_name) { | 2939 wasm::WasmName func_name) { |
2941 Isolate* isolate = info->isolate(); | 2940 Isolate* isolate = info->isolate(); |
2942 if (isolate->logger()->is_logging_code_events() || isolate->is_profiling()) { | 2941 if (isolate->logger()->is_logging_code_events() || isolate->is_profiling()) { |
2943 ScopedVector<char> buffer(128); | 2942 ScopedVector<char> buffer(128); |
2944 SNPrintF(buffer, "%s#%d:%.*s", message, index, func_name.length(), | 2943 SNPrintF(buffer, "%s#%d:%.*s", message, index, func_name.length(), |
2945 func_name.start()); | 2944 func_name.start()); |
2946 Handle<String> name_str = | 2945 Handle<String> name_str = |
2947 isolate->factory()->NewStringFromAsciiChecked(buffer.start()); | 2946 isolate->factory()->NewStringFromAsciiChecked(buffer.start()); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3030 if (FLAG_print_opt_code && !code.is_null()) { | 3029 if (FLAG_print_opt_code && !code.is_null()) { |
3031 OFStream os(stdout); | 3030 OFStream os(stdout); |
3032 code->Disassemble(buffer.start(), os); | 3031 code->Disassemble(buffer.start(), os); |
3033 } | 3032 } |
3034 #endif | 3033 #endif |
3035 if (debugging) { | 3034 if (debugging) { |
3036 buffer.Dispose(); | 3035 buffer.Dispose(); |
3037 } | 3036 } |
3038 | 3037 |
3039 RecordFunctionCompilation( | 3038 RecordFunctionCompilation( |
3040 Logger::FUNCTION_TAG, &info, "js-to-wasm", index, | 3039 CodeEventListener::FUNCTION_TAG, &info, "js-to-wasm", index, |
3041 module->module->GetName(func->name_offset, func->name_length)); | 3040 module->module->GetName(func->name_offset, func->name_length)); |
3042 // Set the JSFunction's machine code. | 3041 // Set the JSFunction's machine code. |
3043 function->set_code(*code); | 3042 function->set_code(*code); |
3044 } | 3043 } |
3045 return function; | 3044 return function; |
3046 } | 3045 } |
3047 | 3046 |
3048 Handle<Code> CompileWasmToJSWrapper(Isolate* isolate, wasm::ModuleEnv* module, | 3047 Handle<Code> CompileWasmToJSWrapper(Isolate* isolate, wasm::ModuleEnv* module, |
3049 Handle<JSFunction> function, | 3048 Handle<JSFunction> function, |
3050 wasm::FunctionSig* sig, | 3049 wasm::FunctionSig* sig, |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3103 #ifdef ENABLE_DISASSEMBLER | 3102 #ifdef ENABLE_DISASSEMBLER |
3104 if (FLAG_print_opt_code && !code.is_null()) { | 3103 if (FLAG_print_opt_code && !code.is_null()) { |
3105 OFStream os(stdout); | 3104 OFStream os(stdout); |
3106 code->Disassemble(buffer.start(), os); | 3105 code->Disassemble(buffer.start(), os); |
3107 } | 3106 } |
3108 #endif | 3107 #endif |
3109 if (debugging) { | 3108 if (debugging) { |
3110 buffer.Dispose(); | 3109 buffer.Dispose(); |
3111 } | 3110 } |
3112 | 3111 |
3113 RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, "wasm-to-js", 0, | 3112 RecordFunctionCompilation(CodeEventListener::FUNCTION_TAG, &info, |
3114 module_name); | 3113 "wasm-to-js", 0, module_name); |
3115 } | 3114 } |
3116 return code; | 3115 return code; |
3117 } | 3116 } |
3118 | 3117 |
3119 SourcePositionTable* WasmCompilationUnit::BuildGraphForWasmFunction( | 3118 SourcePositionTable* WasmCompilationUnit::BuildGraphForWasmFunction( |
3120 double* decode_ms) { | 3119 double* decode_ms) { |
3121 base::ElapsedTimer decode_timer; | 3120 base::ElapsedTimer decode_timer; |
3122 if (FLAG_trace_wasm_decode_time) { | 3121 if (FLAG_trace_wasm_decode_time) { |
3123 decode_timer.Start(); | 3122 decode_timer.Start(); |
3124 } | 3123 } |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3268 return Handle<Code>::null(); | 3267 return Handle<Code>::null(); |
3269 } | 3268 } |
3270 base::ElapsedTimer compile_timer; | 3269 base::ElapsedTimer compile_timer; |
3271 if (FLAG_trace_wasm_decode_time) { | 3270 if (FLAG_trace_wasm_decode_time) { |
3272 compile_timer.Start(); | 3271 compile_timer.Start(); |
3273 } | 3272 } |
3274 Handle<Code> code = info_.code(); | 3273 Handle<Code> code = info_.code(); |
3275 DCHECK(!code.is_null()); | 3274 DCHECK(!code.is_null()); |
3276 | 3275 |
3277 RecordFunctionCompilation( | 3276 RecordFunctionCompilation( |
3278 Logger::FUNCTION_TAG, &info_, "WASM_function", function_->func_index, | 3277 CodeEventListener::FUNCTION_TAG, &info_, "WASM_function", |
| 3278 function_->func_index, |
3279 module_env_->module->GetName(function_->name_offset, | 3279 module_env_->module->GetName(function_->name_offset, |
3280 function_->name_length)); | 3280 function_->name_length)); |
3281 | 3281 |
3282 if (FLAG_trace_wasm_decode_time) { | 3282 if (FLAG_trace_wasm_decode_time) { |
3283 double compile_ms = compile_timer.Elapsed().InMillisecondsF(); | 3283 double compile_ms = compile_timer.Elapsed().InMillisecondsF(); |
3284 PrintF("wasm-code-generation ok: %d bytes, %0.3f ms code generation\n", | 3284 PrintF("wasm-code-generation ok: %d bytes, %0.3f ms code generation\n", |
3285 static_cast<int>(function_->code_end_offset - | 3285 static_cast<int>(function_->code_end_offset - |
3286 function_->code_start_offset), | 3286 function_->code_start_offset), |
3287 compile_ms); | 3287 compile_ms); |
3288 } | 3288 } |
3289 | 3289 |
3290 return code; | 3290 return code; |
3291 } | 3291 } |
3292 | 3292 |
3293 } // namespace compiler | 3293 } // namespace compiler |
3294 } // namespace internal | 3294 } // namespace internal |
3295 } // namespace v8 | 3295 } // namespace v8 |
OLD | NEW |