Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: src/compiler/wasm-compiler.cc

Issue 1781523002: [wasm] All strings are length-prefixed and inline (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix windows Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/platform.h" 9 #include "src/base/platform/platform.h"
10 10
(...skipping 2187 matching lines...) Expand 10 before | Expand all | Expand 10 after
2198 Int64Lowering r(jsgraph()->graph(), jsgraph()->machine(), 2198 Int64Lowering r(jsgraph()->graph(), jsgraph()->machine(),
2199 jsgraph()->common(), jsgraph()->zone(), 2199 jsgraph()->common(), jsgraph()->zone(),
2200 function_signature_); 2200 function_signature_);
2201 r.LowerGraph(); 2201 r.LowerGraph();
2202 } 2202 }
2203 } 2203 }
2204 2204
2205 static void RecordFunctionCompilation(Logger::LogEventsAndTags tag, 2205 static void RecordFunctionCompilation(Logger::LogEventsAndTags tag,
2206 CompilationInfo* info, 2206 CompilationInfo* info,
2207 const char* message, uint32_t index, 2207 const char* message, uint32_t index,
2208 const char* func_name) { 2208 wasm::WasmName func_name) {
2209 Isolate* isolate = info->isolate(); 2209 Isolate* isolate = info->isolate();
2210 if (isolate->logger()->is_logging_code_events() || 2210 if (isolate->logger()->is_logging_code_events() ||
2211 isolate->cpu_profiler()->is_profiling()) { 2211 isolate->cpu_profiler()->is_profiling()) {
2212 ScopedVector<char> buffer(128); 2212 ScopedVector<char> buffer(128);
2213 SNPrintF(buffer, "%s#%d:%s", message, index, func_name); 2213 SNPrintF(buffer, "%s#%d:%.*s", message, index, func_name.length,
2214 func_name.name);
2214 Handle<String> name_str = 2215 Handle<String> name_str =
2215 isolate->factory()->NewStringFromAsciiChecked(buffer.start()); 2216 isolate->factory()->NewStringFromAsciiChecked(buffer.start());
2216 Handle<String> script_str = 2217 Handle<String> script_str =
2217 isolate->factory()->NewStringFromAsciiChecked("(WASM)"); 2218 isolate->factory()->NewStringFromAsciiChecked("(WASM)");
2218 Handle<Code> code = info->code(); 2219 Handle<Code> code = info->code();
2219 Handle<SharedFunctionInfo> shared = 2220 Handle<SharedFunctionInfo> shared =
2220 isolate->factory()->NewSharedFunctionInfo(name_str, code, false); 2221 isolate->factory()->NewSharedFunctionInfo(name_str, code, false);
2221 PROFILE(isolate, CodeCreateEvent(tag, AbstractCode::cast(*code), *shared, 2222 PROFILE(isolate, CodeCreateEvent(tag, AbstractCode::cast(*code), *shared,
2222 info, *script_str, 0, 0)); 2223 info, *script_str, 0, 0));
2223 } 2224 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2306 func_name = buffer.start(); 2307 func_name = buffer.start();
2307 } 2308 }
2308 2309
2309 CompilationInfo info(func_name, isolate, &zone, flags); 2310 CompilationInfo info(func_name, isolate, &zone, flags);
2310 Handle<Code> code = 2311 Handle<Code> code =
2311 Pipeline::GenerateCodeForTesting(&info, incoming, &graph, nullptr); 2312 Pipeline::GenerateCodeForTesting(&info, incoming, &graph, nullptr);
2312 if (debugging) { 2313 if (debugging) {
2313 buffer.Dispose(); 2314 buffer.Dispose();
2314 } 2315 }
2315 2316
2316 RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, "js-to-wasm", index, 2317 RecordFunctionCompilation(
2317 module->module->GetName(func->name_offset)); 2318 Logger::FUNCTION_TAG, &info, "js-to-wasm", index,
2319 module->module->GetName(func->name_offset, func->name_length));
2318 // Set the JSFunction's machine code. 2320 // Set the JSFunction's machine code.
2319 function->set_code(*code); 2321 function->set_code(*code);
2320 } 2322 }
2321 return function; 2323 return function;
2322 } 2324 }
2323 2325
2324 Handle<Code> CompileWasmToJSWrapper(Isolate* isolate, wasm::ModuleEnv* module, 2326 Handle<Code> CompileWasmToJSWrapper(Isolate* isolate, wasm::ModuleEnv* module,
2325 Handle<JSFunction> function, 2327 Handle<JSFunction> function,
2326 wasm::FunctionSig* sig, 2328 wasm::FunctionSig* sig,
2327 const char* module_cstr, 2329 wasm::WasmName module_name,
2328 const char* function_cstr) { 2330 wasm::WasmName function_name) {
2329 //---------------------------------------------------------------------------- 2331 //----------------------------------------------------------------------------
2330 // Create the Graph 2332 // Create the Graph
2331 //---------------------------------------------------------------------------- 2333 //----------------------------------------------------------------------------
2332 Zone zone; 2334 Zone zone;
2333 Graph graph(&zone); 2335 Graph graph(&zone);
2334 CommonOperatorBuilder common(&zone); 2336 CommonOperatorBuilder common(&zone);
2335 JSOperatorBuilder javascript(&zone); 2337 JSOperatorBuilder javascript(&zone);
2336 MachineOperatorBuilder machine(&zone); 2338 MachineOperatorBuilder machine(&zone);
2337 JSGraph jsgraph(isolate, &graph, &common, &javascript, nullptr, &machine); 2339 JSGraph jsgraph(isolate, &graph, &common, &javascript, nullptr, &machine);
2338 2340
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2386 func_name = buffer.start(); 2388 func_name = buffer.start();
2387 } 2389 }
2388 2390
2389 CompilationInfo info(func_name, isolate, &zone, flags); 2391 CompilationInfo info(func_name, isolate, &zone, flags);
2390 code = Pipeline::GenerateCodeForTesting(&info, incoming, &graph, nullptr); 2392 code = Pipeline::GenerateCodeForTesting(&info, incoming, &graph, nullptr);
2391 if (debugging) { 2393 if (debugging) {
2392 buffer.Dispose(); 2394 buffer.Dispose();
2393 } 2395 }
2394 2396
2395 RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, "wasm-to-js", 0, 2397 RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, "wasm-to-js", 0,
2396 module_cstr); 2398 module_name);
2397 } 2399 }
2398 return code; 2400 return code;
2399 } 2401 }
2400 2402
2401 2403
2402 // Helper function to compile a single function. 2404 // Helper function to compile a single function.
2403 Handle<Code> CompileWasmFunction(wasm::ErrorThrower& thrower, Isolate* isolate, 2405 Handle<Code> CompileWasmFunction(wasm::ErrorThrower& thrower, Isolate* isolate,
2404 wasm::ModuleEnv* module_env, 2406 wasm::ModuleEnv* module_env,
2405 const wasm::WasmFunction& function) { 2407 const wasm::WasmFunction& function) {
2406 if (FLAG_trace_wasm_compiler || FLAG_trace_wasm_decode_time) { 2408 if (FLAG_trace_wasm_compiler || FLAG_trace_wasm_decode_time) {
(...skipping 18 matching lines...) Expand all
2425 module_env->module->module_start + function.code_end_offset}; 2427 module_env->module->module_start + function.code_end_offset};
2426 wasm::TreeResult result = wasm::BuildTFGraph(&builder, body); 2428 wasm::TreeResult result = wasm::BuildTFGraph(&builder, body);
2427 2429
2428 if (result.failed()) { 2430 if (result.failed()) {
2429 if (FLAG_trace_wasm_compiler) { 2431 if (FLAG_trace_wasm_compiler) {
2430 OFStream os(stdout); 2432 OFStream os(stdout);
2431 os << "Compilation failed: " << result << std::endl; 2433 os << "Compilation failed: " << result << std::endl;
2432 } 2434 }
2433 // Add the function as another context for the exception 2435 // Add the function as another context for the exception
2434 ScopedVector<char> buffer(128); 2436 ScopedVector<char> buffer(128);
2435 SNPrintF(buffer, "Compiling WASM function #%d:%s failed:", 2437 wasm::WasmName name =
2436 function.func_index, 2438 module_env->module->GetName(function.name_offset, function.name_length);
2437 module_env->module->GetName(function.name_offset)); 2439 SNPrintF(buffer, "Compiling WASM function #%d:%.*s failed:",
2440 function.func_index, name.length, name.name);
2438 thrower.Failed(buffer.start(), result); 2441 thrower.Failed(buffer.start(), result);
2439 return Handle<Code>::null(); 2442 return Handle<Code>::null();
2440 } 2443 }
2441 2444
2442 // Run the compiler pipeline to generate machine code. 2445 // Run the compiler pipeline to generate machine code.
2443 CallDescriptor* descriptor = 2446 CallDescriptor* descriptor =
2444 wasm::ModuleEnv::GetWasmCallDescriptor(&zone, function.sig); 2447 wasm::ModuleEnv::GetWasmCallDescriptor(&zone, function.sig);
2445 if (machine.Is32()) { 2448 if (machine.Is32()) {
2446 descriptor = module_env->GetI32WasmCallDescriptor(&zone, descriptor); 2449 descriptor = module_env->GetI32WasmCallDescriptor(&zone, descriptor);
2447 } 2450 }
2448 Code::Flags flags = Code::ComputeFlags(Code::WASM_FUNCTION); 2451 Code::Flags flags = Code::ComputeFlags(Code::WASM_FUNCTION);
2449 // add flags here if a meaningful name is helpful for debugging. 2452 // add flags here if a meaningful name is helpful for debugging.
2450 bool debugging = 2453 bool debugging =
2451 #if DEBUG 2454 #if DEBUG
2452 true; 2455 true;
2453 #else 2456 #else
2454 FLAG_print_opt_code || FLAG_trace_turbo || FLAG_trace_turbo_graph; 2457 FLAG_print_opt_code || FLAG_trace_turbo || FLAG_trace_turbo_graph;
2455 #endif 2458 #endif
2456 const char* func_name = "wasm"; 2459 const char* func_name = "wasm";
2457 Vector<char> buffer; 2460 Vector<char> buffer;
2458 if (debugging) { 2461 if (debugging) {
2459 buffer = Vector<char>::New(128); 2462 buffer = Vector<char>::New(128);
2460 SNPrintF(buffer, "WASM_function_#%d:%s", function.func_index, 2463 wasm::WasmName name =
2461 module_env->module->GetName(function.name_offset)); 2464 module_env->module->GetName(function.name_offset, function.name_length);
2465 SNPrintF(buffer, "WASM_function_#%d:%.*s", function.func_index, name.length,
2466 name.name);
2462 func_name = buffer.start(); 2467 func_name = buffer.start();
2463 } 2468 }
2464 CompilationInfo info(func_name, isolate, &zone, flags); 2469 CompilationInfo info(func_name, isolate, &zone, flags);
2465 2470
2466 Handle<Code> code = 2471 Handle<Code> code =
2467 Pipeline::GenerateCodeForTesting(&info, descriptor, &graph); 2472 Pipeline::GenerateCodeForTesting(&info, descriptor, &graph);
2468 if (debugging) { 2473 if (debugging) {
2469 buffer.Dispose(); 2474 buffer.Dispose();
2470 } 2475 }
2471 if (!code.is_null()) { 2476 if (!code.is_null()) {
2472 RecordFunctionCompilation( 2477 RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, "WASM_function",
2473 Logger::FUNCTION_TAG, &info, "WASM_function", function.func_index, 2478 function.func_index,
2474 module_env->module->GetName(function.name_offset)); 2479 module_env->module->GetName(
2480 function.name_offset, function.name_length));
2475 } 2481 }
2476 2482
2477 return code; 2483 return code;
2478 } 2484 }
2479 2485
2480 2486
2481 } // namespace compiler 2487 } // namespace compiler
2482 } // namespace internal 2488 } // namespace internal
2483 } // namespace v8 2489 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/wasm-compiler.h ('k') | src/wasm/ast-decoder.h » ('j') | src/wasm/ast-decoder.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698