Commit cbd03a83 authored by Ben L. Titzer's avatar Ben L. Titzer Committed by Commit Bot

[wasm] Further reduce usage of wasm-module.h outside of src/wasm.

This CL also removes the v8::internal::wasm::testing namespace, which
had methods that were defined in wasm-module.h, moving them to be
*ForTesting methods on the corresponding WASM heap objects.

R=clemensh@chromium.org

Bug: v8:6877
Change-Id: I1b346ec64d93ee3a122b8f7e69772cfe98371754
Reviewed-on: https://chromium-review.googlesource.com/695523Reviewed-by: 's avatarClemens Hammacher <clemensh@chromium.org>
Commit-Queue: Ben Titzer <titzer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#48286}
parent 6a041da0
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
#include "src/wasm/module-decoder.h" #include "src/wasm/module-decoder.h"
#include "src/wasm/wasm-js.h" #include "src/wasm/wasm-js.h"
#include "src/wasm/wasm-module-builder.h" #include "src/wasm/wasm-module-builder.h"
#include "src/wasm/wasm-module.h"
#include "src/wasm/wasm-objects-inl.h" #include "src/wasm/wasm-objects-inl.h"
#include "src/wasm/wasm-result.h" #include "src/wasm/wasm-result.h"
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include "src/compiler/node-properties.h" #include "src/compiler/node-properties.h"
#include "src/compiler/node.h" #include "src/compiler/node.h"
#include "src/compiler/wasm-compiler.h" #include "src/compiler/wasm-compiler.h"
#include "src/wasm/wasm-module.h"
#include "src/zone/zone.h" #include "src/zone/zone.h"
namespace v8 { namespace v8 {
......
...@@ -73,7 +73,6 @@ ...@@ -73,7 +73,6 @@
#include "src/register-configuration.h" #include "src/register-configuration.h"
#include "src/trap-handler/trap-handler.h" #include "src/trap-handler/trap-handler.h"
#include "src/utils.h" #include "src/utils.h"
#include "src/wasm/wasm-module.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
...@@ -742,7 +741,7 @@ class PipelineWasmCompilationJob final : public CompilationJob { ...@@ -742,7 +741,7 @@ class PipelineWasmCompilationJob final : public CompilationJob {
CompilationInfo* info, JSGraph* jsgraph, CallDescriptor* descriptor, CompilationInfo* info, JSGraph* jsgraph, CallDescriptor* descriptor,
SourcePositionTable* source_positions, SourcePositionTable* source_positions,
ZoneVector<trap_handler::ProtectedInstructionData>* protected_insts, ZoneVector<trap_handler::ProtectedInstructionData>* protected_insts,
wasm::ModuleOrigin wasm_origin) bool asmjs_origin)
: CompilationJob(info->isolate(), nullptr, info, "TurboFan", : CompilationJob(info->isolate(), nullptr, info, "TurboFan",
State::kReadyToExecute), State::kReadyToExecute),
zone_stats_(info->isolate()->allocator()), zone_stats_(info->isolate()->allocator()),
...@@ -752,7 +751,7 @@ class PipelineWasmCompilationJob final : public CompilationJob { ...@@ -752,7 +751,7 @@ class PipelineWasmCompilationJob final : public CompilationJob {
source_positions, protected_insts), source_positions, protected_insts),
pipeline_(&data_), pipeline_(&data_),
linkage_(descriptor), linkage_(descriptor),
wasm_origin_(wasm_origin) {} asmjs_origin_(asmjs_origin) {}
protected: protected:
Status PrepareJobImpl() final; Status PrepareJobImpl() final;
...@@ -773,7 +772,7 @@ class PipelineWasmCompilationJob final : public CompilationJob { ...@@ -773,7 +772,7 @@ class PipelineWasmCompilationJob final : public CompilationJob {
PipelineData data_; PipelineData data_;
PipelineImpl pipeline_; PipelineImpl pipeline_;
Linkage linkage_; Linkage linkage_;
wasm::ModuleOrigin wasm_origin_; bool asmjs_origin_;
}; };
PipelineWasmCompilationJob::Status PipelineWasmCompilationJob::Status
...@@ -791,15 +790,14 @@ PipelineWasmCompilationJob::ExecuteJobImpl() { ...@@ -791,15 +790,14 @@ PipelineWasmCompilationJob::ExecuteJobImpl() {
} }
pipeline_.RunPrintAndVerify("Machine", true); pipeline_.RunPrintAndVerify("Machine", true);
if (FLAG_wasm_opt || wasm_origin_ == wasm::ModuleOrigin::kAsmJsOrigin) { if (FLAG_wasm_opt || asmjs_origin_) {
PipelineData* data = &data_; PipelineData* data = &data_;
PipelineRunScope scope(data, "Wasm optimization"); PipelineRunScope scope(data, "Wasm optimization");
JSGraphReducer graph_reducer(data->jsgraph(), scope.zone()); JSGraphReducer graph_reducer(data->jsgraph(), scope.zone());
DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(),
data->common()); data->common());
ValueNumberingReducer value_numbering(scope.zone(), data->graph()->zone()); ValueNumberingReducer value_numbering(scope.zone(), data->graph()->zone());
MachineOperatorReducer machine_reducer( MachineOperatorReducer machine_reducer(data->jsgraph(), asmjs_origin_);
data->jsgraph(), wasm_origin_ == wasm::ModuleOrigin::kAsmJsOrigin);
CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), CommonOperatorReducer common_reducer(&graph_reducer, data->graph(),
data->common(), data->machine()); data->common(), data->machine());
AddReducer(data, &graph_reducer, &dead_code_elimination); AddReducer(data, &graph_reducer, &dead_code_elimination);
...@@ -1867,10 +1865,10 @@ CompilationJob* Pipeline::NewWasmCompilationJob( ...@@ -1867,10 +1865,10 @@ CompilationJob* Pipeline::NewWasmCompilationJob(
CompilationInfo* info, JSGraph* jsgraph, CallDescriptor* descriptor, CompilationInfo* info, JSGraph* jsgraph, CallDescriptor* descriptor,
SourcePositionTable* source_positions, SourcePositionTable* source_positions,
ZoneVector<trap_handler::ProtectedInstructionData>* protected_instructions, ZoneVector<trap_handler::ProtectedInstructionData>* protected_instructions,
wasm::ModuleOrigin wasm_origin) { wasm::ModuleOrigin asmjs_origin) {
return new PipelineWasmCompilationJob(info, jsgraph, descriptor, return new PipelineWasmCompilationJob(info, jsgraph, descriptor,
source_positions, source_positions,
protected_instructions, wasm_origin); protected_instructions, asmjs_origin);
} }
bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config,
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "src/compiler/node-properties.h" #include "src/compiler/node-properties.h"
#include "src/compiler/node.h" #include "src/compiler/node.h"
#include "src/compiler/wasm-compiler.h" #include "src/compiler/wasm-compiler.h"
#include "src/wasm/wasm-module.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "src/compiler/node-matchers.h" #include "src/compiler/node-matchers.h"
#include "src/compiler/osr.h" #include "src/compiler/osr.h"
#include "src/heap/heap-inl.h" #include "src/heap/heap-inl.h"
#include "src/wasm/wasm-module.h"
#include "src/x64/assembler-x64.h" #include "src/x64/assembler-x64.h"
#include "src/x64/macro-assembler-x64.h" #include "src/x64/macro-assembler-x64.h"
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include "src/string-stream.h" #include "src/string-stream.h"
#include "src/visitors.h" #include "src/visitors.h"
#include "src/vm-state-inl.h" #include "src/vm-state-inl.h"
#include "src/wasm/wasm-module.h"
#include "src/wasm/wasm-objects-inl.h" #include "src/wasm/wasm-objects-inl.h"
namespace v8 { namespace v8 {
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "src/keys.h" #include "src/keys.h"
#include "src/objects/frame-array-inl.h" #include "src/objects/frame-array-inl.h"
#include "src/string-builder.h" #include "src/string-builder.h"
#include "src/wasm/wasm-module.h"
#include "src/wasm/wasm-objects.h" #include "src/wasm/wasm-objects.h"
namespace v8 { namespace v8 {
......
...@@ -977,8 +977,8 @@ RUNTIME_FUNCTION(Runtime_ValidateWasmInstancesChain) { ...@@ -977,8 +977,8 @@ RUNTIME_FUNCTION(Runtime_ValidateWasmInstancesChain) {
DCHECK_EQ(2, args.length()); DCHECK_EQ(2, args.length());
CONVERT_ARG_HANDLE_CHECKED(WasmModuleObject, module_obj, 0); CONVERT_ARG_HANDLE_CHECKED(WasmModuleObject, module_obj, 0);
CONVERT_ARG_HANDLE_CHECKED(Smi, instance_count, 1); CONVERT_ARG_HANDLE_CHECKED(Smi, instance_count, 1);
wasm::testing::ValidateInstancesChain(isolate, module_obj, WasmInstanceObject::ValidateInstancesChainForTesting(isolate, module_obj,
instance_count->value()); instance_count->value());
return isolate->heap()->ToBoolean(true); return isolate->heap()->ToBoolean(true);
} }
...@@ -986,7 +986,7 @@ RUNTIME_FUNCTION(Runtime_ValidateWasmModuleState) { ...@@ -986,7 +986,7 @@ RUNTIME_FUNCTION(Runtime_ValidateWasmModuleState) {
HandleScope shs(isolate); HandleScope shs(isolate);
DCHECK_EQ(1, args.length()); DCHECK_EQ(1, args.length());
CONVERT_ARG_HANDLE_CHECKED(WasmModuleObject, module_obj, 0); CONVERT_ARG_HANDLE_CHECKED(WasmModuleObject, module_obj, 0);
wasm::testing::ValidateModuleState(isolate, module_obj); WasmModuleObject::ValidateStateForTesting(isolate, module_obj);
return isolate->heap()->ToBoolean(true); return isolate->heap()->ToBoolean(true);
} }
...@@ -994,7 +994,7 @@ RUNTIME_FUNCTION(Runtime_ValidateWasmOrphanedInstance) { ...@@ -994,7 +994,7 @@ RUNTIME_FUNCTION(Runtime_ValidateWasmOrphanedInstance) {
HandleScope shs(isolate); HandleScope shs(isolate);
DCHECK_EQ(1, args.length()); DCHECK_EQ(1, args.length());
CONVERT_ARG_HANDLE_CHECKED(WasmInstanceObject, instance, 0); CONVERT_ARG_HANDLE_CHECKED(WasmInstanceObject, instance, 0);
wasm::testing::ValidateOrphanedInstance(isolate, instance); WasmInstanceObject::ValidateOrphanedInstanceForTesting(isolate, instance);
return isolate->heap()->ToBoolean(true); return isolate->heap()->ToBoolean(true);
} }
...@@ -1056,6 +1056,7 @@ RUNTIME_FUNCTION(Runtime_WasmTraceMemory) { ...@@ -1056,6 +1056,7 @@ RUNTIME_FUNCTION(Runtime_WasmTraceMemory) {
frame->wasm_instance()->memory_buffer()->allocation_base()); frame->wasm_instance()->memory_buffer()->allocation_base());
int func_index = frame->function_index(); int func_index = frame->function_index();
int pos = frame->position(); int pos = frame->position();
// TODO(titzer): eliminate dependency on WasmModule definition here.
int func_start = int func_start =
frame->wasm_instance()->module()->functions[func_index].code.offset(); frame->wasm_instance()->module()->functions[func_index].code.offset();
tracing::TraceMemoryOperation(tracing::kWasmCompiled, is_store, tracing::TraceMemoryOperation(tracing::kWasmCompiled, is_store,
......
...@@ -191,55 +191,6 @@ bool IsWasmCodegenAllowed(Isolate* isolate, Handle<Context> context) { ...@@ -191,55 +191,6 @@ bool IsWasmCodegenAllowed(Isolate* isolate, Handle<Context> context) {
v8::Utils::ToLocal(isolate->factory()->empty_string())); v8::Utils::ToLocal(isolate->factory()->empty_string()));
} }
namespace testing {
void ValidateInstancesChain(Isolate* isolate,
Handle<WasmModuleObject> module_obj,
int instance_count) {
CHECK_GE(instance_count, 0);
DisallowHeapAllocation no_gc;
WasmCompiledModule* compiled_module = module_obj->compiled_module();
CHECK_EQ(JSObject::cast(compiled_module->ptr_to_weak_wasm_module()->value()),
*module_obj);
Object* prev = nullptr;
int found_instances = compiled_module->has_weak_owning_instance() ? 1 : 0;
WasmCompiledModule* current_instance = compiled_module;
while (current_instance->has_weak_next_instance()) {
CHECK((prev == nullptr && !current_instance->has_weak_prev_instance()) ||
current_instance->ptr_to_weak_prev_instance()->value() == prev);
CHECK_EQ(current_instance->ptr_to_weak_wasm_module()->value(), *module_obj);
CHECK(current_instance->ptr_to_weak_owning_instance()
->value()
->IsWasmInstanceObject());
prev = current_instance;
current_instance = WasmCompiledModule::cast(
current_instance->ptr_to_weak_next_instance()->value());
++found_instances;
CHECK_LE(found_instances, instance_count);
}
CHECK_EQ(found_instances, instance_count);
}
void ValidateModuleState(Isolate* isolate,
Handle<WasmModuleObject> module_obj) {
DisallowHeapAllocation no_gc;
WasmCompiledModule* compiled_module = module_obj->compiled_module();
CHECK(compiled_module->has_weak_wasm_module());
CHECK_EQ(compiled_module->ptr_to_weak_wasm_module()->value(), *module_obj);
CHECK(!compiled_module->has_weak_prev_instance());
CHECK(!compiled_module->has_weak_next_instance());
CHECK(!compiled_module->has_weak_owning_instance());
}
void ValidateOrphanedInstance(Isolate* isolate,
Handle<WasmInstanceObject> instance) {
DisallowHeapAllocation no_gc;
WasmCompiledModule* compiled_module = instance->compiled_module();
CHECK(compiled_module->has_weak_wasm_module());
CHECK(compiled_module->ptr_to_weak_wasm_module()->cleared());
}
} // namespace testing
Handle<JSArray> GetImports(Isolate* isolate, Handle<JSArray> GetImports(Isolate* isolate,
Handle<WasmModuleObject> module_object) { Handle<WasmModuleObject> module_object) {
Handle<WasmCompiledModule> compiled_module(module_object->compiled_module(), Handle<WasmCompiledModule> compiled_module(module_object->compiled_module(),
......
...@@ -328,15 +328,6 @@ class TruncatedUserString { ...@@ -328,15 +328,6 @@ class TruncatedUserString {
char buffer_[kMaxLen]; char buffer_[kMaxLen];
}; };
namespace testing {
void ValidateInstancesChain(Isolate* isolate,
Handle<WasmModuleObject> module_obj,
int instance_count);
void ValidateModuleState(Isolate* isolate, Handle<WasmModuleObject> module_obj);
void ValidateOrphanedInstance(Isolate* isolate,
Handle<WasmInstanceObject> instance);
} // namespace testing
} // namespace wasm } // namespace wasm
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8
......
...@@ -173,6 +173,17 @@ Handle<WasmModuleObject> WasmModuleObject::New( ...@@ -173,6 +173,17 @@ Handle<WasmModuleObject> WasmModuleObject::New(
return module_object; return module_object;
} }
void WasmModuleObject::ValidateStateForTesting(
Isolate* isolate, Handle<WasmModuleObject> module_obj) {
DisallowHeapAllocation no_gc;
WasmCompiledModule* compiled_module = module_obj->compiled_module();
CHECK(compiled_module->has_weak_wasm_module());
CHECK_EQ(compiled_module->ptr_to_weak_wasm_module()->value(), *module_obj);
CHECK(!compiled_module->has_weak_prev_instance());
CHECK(!compiled_module->has_weak_next_instance());
CHECK(!compiled_module->has_weak_owning_instance());
}
Handle<WasmTableObject> WasmTableObject::New(Isolate* isolate, uint32_t initial, Handle<WasmTableObject> WasmTableObject::New(Isolate* isolate, uint32_t initial,
int64_t maximum, int64_t maximum,
Handle<FixedArray>* js_functions) { Handle<FixedArray>* js_functions) {
...@@ -568,6 +579,40 @@ WasmInstanceObject* WasmInstanceObject::GetOwningInstance(Code* code) { ...@@ -568,6 +579,40 @@ WasmInstanceObject* WasmInstanceObject::GetOwningInstance(Code* code) {
return WasmInstanceObject::cast(cell->value()); return WasmInstanceObject::cast(cell->value());
} }
void WasmInstanceObject::ValidateInstancesChainForTesting(
Isolate* isolate, Handle<WasmModuleObject> module_obj, int instance_count) {
CHECK_GE(instance_count, 0);
DisallowHeapAllocation no_gc;
WasmCompiledModule* compiled_module = module_obj->compiled_module();
CHECK_EQ(JSObject::cast(compiled_module->ptr_to_weak_wasm_module()->value()),
*module_obj);
Object* prev = nullptr;
int found_instances = compiled_module->has_weak_owning_instance() ? 1 : 0;
WasmCompiledModule* current_instance = compiled_module;
while (current_instance->has_weak_next_instance()) {
CHECK((prev == nullptr && !current_instance->has_weak_prev_instance()) ||
current_instance->ptr_to_weak_prev_instance()->value() == prev);
CHECK_EQ(current_instance->ptr_to_weak_wasm_module()->value(), *module_obj);
CHECK(current_instance->ptr_to_weak_owning_instance()
->value()
->IsWasmInstanceObject());
prev = current_instance;
current_instance = WasmCompiledModule::cast(
current_instance->ptr_to_weak_next_instance()->value());
++found_instances;
CHECK_LE(found_instances, instance_count);
}
CHECK_EQ(found_instances, instance_count);
}
void WasmInstanceObject::ValidateOrphanedInstanceForTesting(
Isolate* isolate, Handle<WasmInstanceObject> instance) {
DisallowHeapAllocation no_gc;
WasmCompiledModule* compiled_module = instance->compiled_module();
CHECK(compiled_module->has_weak_wasm_module());
CHECK(compiled_module->ptr_to_weak_wasm_module()->cleared());
}
bool WasmExportedFunction::IsWasmExportedFunction(Object* object) { bool WasmExportedFunction::IsWasmExportedFunction(Object* object) {
if (!object->IsJSFunction()) return false; if (!object->IsJSFunction()) return false;
Handle<JSFunction> js_function(JSFunction::cast(object)); Handle<JSFunction> js_function(JSFunction::cast(object));
......
...@@ -81,6 +81,9 @@ class WasmModuleObject : public JSObject { ...@@ -81,6 +81,9 @@ class WasmModuleObject : public JSObject {
static Handle<WasmModuleObject> New( static Handle<WasmModuleObject> New(
Isolate* isolate, Handle<WasmCompiledModule> compiled_module); Isolate* isolate, Handle<WasmCompiledModule> compiled_module);
static void ValidateStateForTesting(Isolate* isolate,
Handle<WasmModuleObject> module);
}; };
// Representation of a WebAssembly.Table JavaScript-level object. // Representation of a WebAssembly.Table JavaScript-level object.
...@@ -228,6 +231,13 @@ class WasmInstanceObject : public JSObject { ...@@ -228,6 +231,13 @@ class WasmInstanceObject : public JSObject {
// instance. Intended to be called from runtime functions. Returns nullptr on // instance. Intended to be called from runtime functions. Returns nullptr on
// failing to get owning instance. // failing to get owning instance.
static WasmInstanceObject* GetOwningInstance(Code* code); static WasmInstanceObject* GetOwningInstance(Code* code);
static void ValidateInstancesChainForTesting(
Isolate* isolate, Handle<WasmModuleObject> module_obj,
int instance_count);
static void ValidateOrphanedInstanceForTesting(
Isolate* isolate, Handle<WasmInstanceObject> instance);
}; };
// A WASM function that is wrapped and exported to JavaScript. // A WASM function that is wrapped and exported to JavaScript.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment