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 1890 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1901 | 1901 |
1902 *effect_ = call; | 1902 *effect_ = call; |
1903 return call; | 1903 return call; |
1904 } | 1904 } |
1905 | 1905 |
1906 Node* WasmGraphBuilder::CallDirect(uint32_t index, Node** args, | 1906 Node* WasmGraphBuilder::CallDirect(uint32_t index, Node** args, |
1907 wasm::WasmCodePosition position) { | 1907 wasm::WasmCodePosition position) { |
1908 DCHECK_NULL(args[0]); | 1908 DCHECK_NULL(args[0]); |
1909 | 1909 |
1910 // Add code object as constant. | 1910 // Add code object as constant. |
1911 args[0] = HeapConstant(module_->GetFunctionCode(index)); | 1911 args[0] = HeapConstant(module_->GetCodeOrPlaceholder(index)); |
1912 wasm::FunctionSig* sig = module_->GetFunctionSignature(index); | 1912 wasm::FunctionSig* sig = module_->GetFunctionSignature(index); |
1913 | 1913 |
1914 return BuildWasmCall(sig, args, position); | 1914 return BuildWasmCall(sig, args, position); |
1915 } | 1915 } |
1916 | 1916 |
1917 Node* WasmGraphBuilder::CallImport(uint32_t index, Node** args, | 1917 Node* WasmGraphBuilder::CallImport(uint32_t index, Node** args, |
1918 wasm::WasmCodePosition position) { | 1918 wasm::WasmCodePosition position) { |
1919 DCHECK_NULL(args[0]); | 1919 DCHECK_NULL(args[0]); |
1920 | 1920 |
1921 // Add code object as constant. | 1921 // Add code object as constant. |
(...skipping 1363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3285 } | 3285 } |
3286 if (job_->GenerateCode() != CompilationJob::SUCCEEDED) { | 3286 if (job_->GenerateCode() != CompilationJob::SUCCEEDED) { |
3287 return Handle<Code>::null(); | 3287 return Handle<Code>::null(); |
3288 } | 3288 } |
3289 base::ElapsedTimer compile_timer; | 3289 base::ElapsedTimer compile_timer; |
3290 if (FLAG_trace_wasm_decode_time) { | 3290 if (FLAG_trace_wasm_decode_time) { |
3291 compile_timer.Start(); | 3291 compile_timer.Start(); |
3292 } | 3292 } |
3293 Handle<Code> code = info_.code(); | 3293 Handle<Code> code = info_.code(); |
3294 DCHECK(!code.is_null()); | 3294 DCHECK(!code.is_null()); |
3295 DCHECK(code->deoptimization_data() == nullptr || | |
3296 code->deoptimization_data()->length() == 0); | |
3297 Handle<FixedArray> deopt_data = | |
3298 isolate_->factory()->NewFixedArray(2, TENURED); | |
3299 if (!module_env_->instance->js_object.is_null()) { | |
3300 deopt_data->set(0, *module_env_->instance->js_object); | |
3301 } | |
3302 deopt_data->set(1, Smi::FromInt(function_->func_index)); | |
3303 deopt_data->set_length(2); | |
3304 code->set_deoptimization_data(*deopt_data); | |
3305 | 3295 |
3306 RecordFunctionCompilation( | 3296 RecordFunctionCompilation( |
3307 Logger::FUNCTION_TAG, &info_, "WASM_function", function_->func_index, | 3297 Logger::FUNCTION_TAG, &info_, "WASM_function", function_->func_index, |
3308 module_env_->module->GetName(function_->name_offset, | 3298 module_env_->module->GetName(function_->name_offset, |
3309 function_->name_length)); | 3299 function_->name_length)); |
3310 | 3300 |
3311 if (FLAG_trace_wasm_decode_time) { | 3301 if (FLAG_trace_wasm_decode_time) { |
3312 double compile_ms = compile_timer.Elapsed().InMillisecondsF(); | 3302 double compile_ms = compile_timer.Elapsed().InMillisecondsF(); |
3313 PrintF("wasm-code-generation ok: %d bytes, %0.3f ms code generation\n", | 3303 PrintF("wasm-code-generation ok: %d bytes, %0.3f ms code generation\n", |
3314 static_cast<int>(function_->code_end_offset - | 3304 static_cast<int>(function_->code_end_offset - |
3315 function_->code_start_offset), | 3305 function_->code_start_offset), |
3316 compile_ms); | 3306 compile_ms); |
3317 } | 3307 } |
3318 | 3308 |
3319 return code; | 3309 return code; |
3320 } | 3310 } |
3321 | 3311 |
3322 } // namespace compiler | 3312 } // namespace compiler |
3323 } // namespace internal | 3313 } // namespace internal |
3324 } // namespace v8 | 3314 } // namespace v8 |
OLD | NEW |