| 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 <memory> | 7 #include <memory> | 
| 8 | 8 | 
| 9 #include "src/assembler-inl.h" | 9 #include "src/assembler-inl.h" | 
| 10 #include "src/base/optional.h" | 10 #include "src/base/optional.h" | 
| (...skipping 3926 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3937   DCHECK(name_len > 0 && name_len < name_vector.length()); | 3937   DCHECK(name_len > 0 && name_len < name_vector.length()); | 
| 3938 | 3938 | 
| 3939   char* index_name = zone->NewArray<char>(name_len); | 3939   char* index_name = zone->NewArray<char>(name_len); | 
| 3940   memcpy(index_name, name_vector.start(), name_len); | 3940   memcpy(index_name, name_vector.start(), name_len); | 
| 3941   return Vector<const char>(index_name, name_len); | 3941   return Vector<const char>(index_name, name_len); | 
| 3942 } | 3942 } | 
| 3943 }  // namespace | 3943 }  // namespace | 
| 3944 | 3944 | 
| 3945 WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate, | 3945 WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate, | 
| 3946                                          wasm::ModuleBytesEnv* module_env, | 3946                                          wasm::ModuleBytesEnv* module_env, | 
| 3947                                          const wasm::WasmFunction* function, | 3947                                          const wasm::WasmFunction* function) | 
| 3948                                          bool is_sync) |  | 
| 3949     : WasmCompilationUnit( | 3948     : WasmCompilationUnit( | 
| 3950           isolate, &module_env->module_env, | 3949           isolate, &module_env->module_env, | 
| 3951           wasm::FunctionBody{ | 3950           wasm::FunctionBody{ | 
| 3952               function->sig, module_env->wire_bytes.start(), | 3951               function->sig, module_env->wire_bytes.start(), | 
| 3953               module_env->wire_bytes.start() + function->code.offset(), | 3952               module_env->wire_bytes.start() + function->code.offset(), | 
| 3954               module_env->wire_bytes.start() + function->code.end_offset()}, | 3953               module_env->wire_bytes.start() + function->code.end_offset()}, | 
| 3955           module_env->wire_bytes.GetNameOrNull(function), function->func_index, | 3954           module_env->wire_bytes.GetNameOrNull(function), | 
| 3956           is_sync) {} | 3955           function->func_index) {} | 
| 3957 | 3956 | 
| 3958 WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate, | 3957 WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate, | 
| 3959                                          wasm::ModuleEnv* module_env, | 3958                                          wasm::ModuleEnv* module_env, | 
| 3960                                          wasm::FunctionBody body, | 3959                                          wasm::FunctionBody body, | 
| 3961                                          wasm::WasmName name, int index, | 3960                                          wasm::WasmName name, int index) | 
| 3962                                          bool is_sync) |  | 
| 3963     : isolate_(isolate), | 3961     : isolate_(isolate), | 
| 3964       module_env_(module_env), | 3962       module_env_(module_env), | 
| 3965       func_body_(body), | 3963       func_body_(body), | 
| 3966       func_name_(name), | 3964       func_name_(name), | 
| 3967       is_sync_(is_sync), |  | 
| 3968       centry_stub_(CEntryStub(isolate, 1).GetCode()), | 3965       centry_stub_(CEntryStub(isolate, 1).GetCode()), | 
| 3969       func_index_(index) {} | 3966       func_index_(index) {} | 
| 3970 | 3967 | 
| 3971 void WasmCompilationUnit::ExecuteCompilation() { | 3968 void WasmCompilationUnit::ExecuteCompilation() { | 
| 3972   // TODO(karlschimpf): Make this work when asynchronous. | 3969   HistogramTimerScope wasm_compile_function_time_scope( | 
| 3973   // https://bugs.chromium.org/p/v8/issues/detail?id=6361 | 3970       isolate_->counters()->wasm_compile_function_time()); | 
| 3974   base::Optional<HistogramTimerScope> wasm_compile_function_time_scope; |  | 
| 3975   if (is_sync_) { |  | 
| 3976     wasm_compile_function_time_scope.emplace( |  | 
| 3977         isolate_->counters()->wasm_compile_function_time()); |  | 
| 3978   } |  | 
| 3979 | 3971 | 
| 3980   if (FLAG_trace_wasm_compiler) { | 3972   if (FLAG_trace_wasm_compiler) { | 
| 3981     if (func_name_.start() != nullptr) { | 3973     if (func_name_.start() != nullptr) { | 
| 3982       PrintF("Compiling wasm function %d:'%.*s'\n\n", func_index(), | 3974       PrintF("Compiling wasm function %d:'%.*s'\n\n", func_index(), | 
| 3983              func_name_.length(), func_name_.start()); | 3975              func_name_.length(), func_name_.start()); | 
| 3984     } else { | 3976     } else { | 
| 3985       PrintF("Compiling wasm function %d:<unnamed>\n\n", func_index()); | 3977       PrintF("Compiling wasm function %d:<unnamed>\n\n", func_index()); | 
| 3986     } | 3978     } | 
| 3987   } | 3979   } | 
| 3988 | 3980 | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4027         isolate_, compilation_zone_.get(), | 4019         isolate_, compilation_zone_.get(), | 
| 4028         Code::ComputeFlags(Code::WASM_FUNCTION))); | 4020         Code::ComputeFlags(Code::WASM_FUNCTION))); | 
| 4029     ZoneVector<trap_handler::ProtectedInstructionData> protected_instructions( | 4021     ZoneVector<trap_handler::ProtectedInstructionData> protected_instructions( | 
| 4030         compilation_zone_.get()); | 4022         compilation_zone_.get()); | 
| 4031 | 4023 | 
| 4032     job_.reset(Pipeline::NewWasmCompilationJob( | 4024     job_.reset(Pipeline::NewWasmCompilationJob( | 
| 4033         info_.get(), jsgraph_, descriptor, source_positions, | 4025         info_.get(), jsgraph_, descriptor, source_positions, | 
| 4034         &protected_instructions, !module_env_->module->is_wasm())); | 4026         &protected_instructions, !module_env_->module->is_wasm())); | 
| 4035     ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED; | 4027     ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED; | 
| 4036     // TODO(bradnelson): Improve histogram handling of size_t. | 4028     // TODO(bradnelson): Improve histogram handling of size_t. | 
| 4037     if (is_sync_) | 4029     isolate_->counters()->wasm_compile_function_peak_memory_bytes()->AddSample( | 
| 4038       // TODO(karlschimpf): Make this work when asynchronous. | 4030         static_cast<int>(jsgraph_->graph()->zone()->allocation_size())); | 
| 4039       // https://bugs.chromium.org/p/v8/issues/detail?id=6361 |  | 
| 4040       isolate_->counters() |  | 
| 4041           ->wasm_compile_function_peak_memory_bytes() |  | 
| 4042           ->AddSample( |  | 
| 4043               static_cast<int>(jsgraph_->graph()->zone()->allocation_size())); |  | 
| 4044 | 4031 | 
| 4045     if (FLAG_trace_wasm_decode_time) { | 4032     if (FLAG_trace_wasm_decode_time) { | 
| 4046       double pipeline_ms = pipeline_timer.Elapsed().InMillisecondsF(); | 4033       double pipeline_ms = pipeline_timer.Elapsed().InMillisecondsF(); | 
| 4047       PrintF( | 4034       PrintF( | 
| 4048           "wasm-compilation phase 1 ok: %u bytes, %0.3f ms decode, %zu nodes, " | 4035           "wasm-compilation phase 1 ok: %u bytes, %0.3f ms decode, %zu nodes, " | 
| 4049           "%0.3f ms pipeline\n", | 4036           "%0.3f ms pipeline\n", | 
| 4050           static_cast<unsigned>(func_body_.end - func_body_.start), decode_ms, | 4037           static_cast<unsigned>(func_body_.end - func_body_.start), decode_ms, | 
| 4051           node_count, pipeline_ms); | 4038           node_count, pipeline_ms); | 
| 4052     } | 4039     } | 
| 4053     // The graph zone is about to get out of scope. Avoid invalid references. | 4040     // The graph zone is about to get out of scope. Avoid invalid references. | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4110     wasm::ErrorThrower* thrower, Isolate* isolate, | 4097     wasm::ErrorThrower* thrower, Isolate* isolate, | 
| 4111     wasm::ModuleBytesEnv* module_env, const wasm::WasmFunction* function) { | 4098     wasm::ModuleBytesEnv* module_env, const wasm::WasmFunction* function) { | 
| 4112   WasmCompilationUnit unit(isolate, module_env, function); | 4099   WasmCompilationUnit unit(isolate, module_env, function); | 
| 4113   unit.ExecuteCompilation(); | 4100   unit.ExecuteCompilation(); | 
| 4114   return unit.FinishCompilation(thrower); | 4101   return unit.FinishCompilation(thrower); | 
| 4115 } | 4102 } | 
| 4116 | 4103 | 
| 4117 }  // namespace compiler | 4104 }  // namespace compiler | 
| 4118 }  // namespace internal | 4105 }  // namespace internal | 
| 4119 }  // namespace v8 | 4106 }  // namespace v8 | 
| OLD | NEW | 
|---|