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

Unified Diff: src/compiler/wasm-compiler.cc

Issue 1991143002: Convert SIMD wasm ops to runtime function calls (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Bill's review Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: src/compiler/wasm-compiler.cc
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc
index 619e639e1509a2a73e2e0908bd397869838c08f4..bdaad494603465ec0680aeebddd82b04404e887f 100644
--- a/src/compiler/wasm-compiler.cc
+++ b/src/compiler/wasm-compiler.cc
@@ -23,6 +23,7 @@
#include "src/compiler/machine-operator.h"
#include "src/compiler/node-matchers.h"
#include "src/compiler/pipeline.h"
+#include "src/compiler/simd-lowering.h"
#include "src/compiler/source-position.h"
#include "src/compiler/zone-pool.h"
@@ -610,6 +611,9 @@ Node* WasmGraphBuilder::Binop(wasm::WasmOpcode opcode, Node* left, Node* right,
return BuildF64Atan2(left, right);
case wasm::kExprF64Mod:
return BuildF64Mod(left, right);
+ case wasm::kExprInt32x4ExtractLane:
+ return graph()->NewNode(jsgraph()->machine()->Int32x4ExtractLane(), left,
+ right);
case wasm::kExprI32AsmjsDivS:
return BuildI32AsmjsDivS(left, right);
case wasm::kExprI32AsmjsDivU:
@@ -865,6 +869,9 @@ Node* WasmGraphBuilder::Unop(wasm::WasmOpcode opcode, Node* input,
return BuildI64UConvertF32(input, position);
case wasm::kExprI64UConvertF64:
return BuildI64UConvertF64(input, position);
+ case wasm::kExprInt32x4Splat:
+ return graph()->NewNode(jsgraph()->machine()->CreateInt32x4(), input,
+ input, input, input);
case wasm::kExprI32AsmjsLoadMem8S:
return BuildAsmjsLoadMem(MachineType::Int8(), input);
case wasm::kExprI32AsmjsLoadMem8U:
@@ -2123,6 +2130,12 @@ Node* WasmGraphBuilder::ToJS(Node* node, Node* context, wasm::LocalType type) {
}
}
+Node* WasmGraphBuilder::BuildChangeTaggedToInt32(Node* value) {
+ value = BuildChangeTaggedToFloat64(value);
+ value = graph()->NewNode(jsgraph()->machine()->ChangeFloat64ToInt32(), value);
+ return value;
+}
+
Node* WasmGraphBuilder::BuildJavaScriptToNumber(Node* node, Node* context,
Node* effect, Node* control) {
Callable callable = CodeFactory::ToNumber(jsgraph()->isolate());
@@ -2544,6 +2557,12 @@ Node* WasmGraphBuilder::MemSize(uint32_t offset) {
}
}
+Node* WasmGraphBuilder::DefaultS128Value() {
+ Node* zero = jsgraph()->Int32Constant(0);
+ return graph()->NewNode(jsgraph()->machine()->CreateInt32x4(), zero, zero,
+ zero, zero);
+}
+
Node* WasmGraphBuilder::FunctionTable() {
DCHECK(module_ && module_->instance &&
!module_->instance->function_table.is_null());
@@ -2929,6 +2948,21 @@ std::pair<JSGraph*, SourcePositionTable*> BuildGraphForWasmFunction(
thrower->Failed(buffer.start(), result);
return std::make_pair(nullptr, nullptr);
}
+
+ // Run lowering pass if SIMD ops are present in the function
+ if (builder.is_simd_function()) {
+ SimdLowering simd(jsgraph, &builder, module_env->instance->context);
+ GraphReducer graph_reducer(jsgraph->zone(), jsgraph->graph());
+ graph_reducer.AddReducer(&simd);
+ graph_reducer.ReduceGraph();
+
+ if (FLAG_trace_turbo_graph) { // Simple textual RPO.
+ OFStream os(stdout);
+ os << "-- Graph after simd lowering -- " << std::endl;
+ os << AsRPO(*graph);
+ }
+ }
+
int index = static_cast<int>(function->func_index);
if (index >= FLAG_trace_wasm_ast_start && index < FLAG_trace_wasm_ast_end) {
PrintAst(isolate->allocator(), body);

Powered by Google App Engine
This is Rietveld 408576698