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

Side by Side Diff: src/compiler/pipeline.cc

Issue 1912103002: [wasm] Store function names in the wasm object (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@wasm-offset-table-2
Patch Set: fix gcmole and signed/unsigned comparison issue Created 4 years, 8 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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/pipeline.h" 5 #include "src/compiler/pipeline.h"
6 6
7 #include <fstream> // NOLINT(readability/streams) 7 #include <fstream> // NOLINT(readability/streams)
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "src/base/adapters.h" 10 #include "src/base/adapters.h"
(...skipping 1278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1289 // Kill the Typer and thereby uninstall the decorator (if any). 1289 // Kill the Typer and thereby uninstall the decorator (if any).
1290 typer.Reset(nullptr); 1290 typer.Reset(nullptr);
1291 1291
1292 return ScheduleAndGenerateCode( 1292 return ScheduleAndGenerateCode(
1293 Linkage::ComputeIncoming(data.instruction_zone(), info())); 1293 Linkage::ComputeIncoming(data.instruction_zone(), info()));
1294 } 1294 }
1295 1295
1296 Handle<Code> Pipeline::GenerateWASMCode(CompilationInfo* info, 1296 Handle<Code> Pipeline::GenerateWASMCode(CompilationInfo* info,
1297 CallDescriptor* call_descriptor, 1297 CallDescriptor* call_descriptor,
1298 Graph* graph, 1298 Graph* graph,
1299 SourcePositionTable* source_positions) { 1299 SourcePositionTable* source_positions,
1300 Handle<Object> wasm_obj,
1301 uint32_t func_index) {
1300 // Construct a pipeline for scheduling and code generation. 1302 // Construct a pipeline for scheduling and code generation.
1301 ZonePool zone_pool(info->isolate()->allocator()); 1303 ZonePool zone_pool(info->isolate()->allocator());
1302 PipelineData data(&zone_pool, info, graph, source_positions); 1304 PipelineData data(&zone_pool, info, graph, source_positions);
1303 base::SmartPointer<PipelineStatistics> pipeline_statistics; 1305 base::SmartPointer<PipelineStatistics> pipeline_statistics;
1304 if (FLAG_turbo_stats) { 1306 if (FLAG_turbo_stats) {
1305 pipeline_statistics.Reset(new PipelineStatistics(info, &zone_pool)); 1307 pipeline_statistics.Reset(new PipelineStatistics(info, &zone_pool));
1306 pipeline_statistics->BeginPhaseKind("test codegen"); 1308 pipeline_statistics->BeginPhaseKind("test codegen");
1307 } 1309 }
1308 1310
1309 Pipeline pipeline(info); 1311 Pipeline pipeline(info);
1310 pipeline.data_ = &data; 1312 pipeline.data_ = &data;
1311 if (data.schedule() == nullptr) { 1313 if (data.schedule() == nullptr) {
1312 // TODO(rossberg): Should this really be untyped? 1314 // TODO(rossberg): Should this really be untyped?
1313 pipeline.RunPrintAndVerify("Machine", true); 1315 pipeline.RunPrintAndVerify("Machine", true);
1314 } 1316 }
1315 1317
1316 Handle<Code> code = pipeline.ScheduleAndGenerateCode(call_descriptor); 1318 Handle<Code> code = pipeline.ScheduleAndGenerateCode(call_descriptor);
1319
1320 Factory* factory = info->isolate()->factory();
Michael Starzinger 2016/04/22 11:59:35 Can we move all of this into the WASM compiler?
Clemens Hammacher 2016/04/22 14:38:40 Yes we can :) It also saves us the check whether w
titzer 2016/04/25 11:15:05 Yes, let's keep it to convey the intent, and they
1321 Handle<FixedArray> deopt_data = factory->NewFixedArray(2, TENURED);
1322 // Generate deopt data for getting information about the executed wasm
1323 // function later. Either store wasm object and function index (default), or
1324 // just the function name (for debugging code where no wasm object is
1325 // available).
1326 if (wasm_obj.is_null()) {
1327 MaybeHandle<String> maybeName =
1328 factory->NewStringFromUtf8(info->GetFunctionName(), TENURED);
1329 if (!maybeName.is_null()) deopt_data->set(0, *maybeName.ToHandleChecked());
1330 } else {
1331 deopt_data->set(0, *wasm_obj);
1332 deopt_data->set(1, Smi::FromInt(func_index));
1333 }
1334 deopt_data->set_length(2);
1335 code->set_deoptimization_data(*deopt_data);
1336
1317 return code; 1337 return code;
1318 } 1338 }
1319 1339
1320 Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate, 1340 Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate,
1321 CallDescriptor* call_descriptor, 1341 CallDescriptor* call_descriptor,
1322 Graph* graph, Schedule* schedule, 1342 Graph* graph, Schedule* schedule,
1323 Code::Flags flags, 1343 Code::Flags flags,
1324 const char* debug_name) { 1344 const char* debug_name) {
1325 CompilationInfo info(CStrVector(debug_name), isolate, graph->zone(), flags); 1345 CompilationInfo info(CStrVector(debug_name), isolate, graph->zone(), flags);
1326 1346
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
1595 } 1615 }
1596 1616
1597 data->DeleteRegisterAllocationZone(); 1617 data->DeleteRegisterAllocationZone();
1598 } 1618 }
1599 1619
1600 Isolate* Pipeline::isolate() const { return info()->isolate(); } 1620 Isolate* Pipeline::isolate() const { return info()->isolate(); }
1601 1621
1602 } // namespace compiler 1622 } // namespace compiler
1603 } // namespace internal 1623 } // namespace internal
1604 } // namespace v8 1624 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698