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

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

Issue 2446543002: [turbofan] Support variable size argument popping in TF-generated functions (Closed)
Patch Set: Fix tests and arm64 Created 4 years, 1 month 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
« no previous file with comments | « src/compiler/tail-call-optimization.cc ('k') | src/compiler/x64/code-generator-x64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/wasm-compiler.cc
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc
index 1e7b2f76f53f2391925bc9b1e706bbb36f5db911..baa6b7b41b0d9bc0b9dd3baa1a004c7cc169f00c 100644
--- a/src/compiler/wasm-compiler.cc
+++ b/src/compiler/wasm-compiler.cc
@@ -281,7 +281,8 @@ class WasmTrapHelper : public ZoneObject {
} else {
// End the control flow with returning 0xdeadbeef
Node* ret_value = GetTrapValue(builder_->GetFunctionSignature());
- end = graph()->NewNode(jsgraph()->common()->Return(), ret_value,
+ end = graph()->NewNode(jsgraph()->common()->Return(),
+ jsgraph()->Int32Constant(0), ret_value,
*effect_ptr, *control_ptr);
}
@@ -1041,11 +1042,13 @@ Node* WasmGraphBuilder::Return(unsigned count, Node** vals) {
DCHECK_NOT_NULL(*control_);
DCHECK_NOT_NULL(*effect_);
- Node** buf = Realloc(vals, count, count + 2);
- buf[count] = *effect_;
- buf[count + 1] = *control_;
+ Node** buf = Realloc(vals, count, count + 3);
+ memmove(buf + 1, buf, sizeof(void*) * count);
+ buf[0] = jsgraph()->Int32Constant(0);
+ buf[count + 1] = *effect_;
+ buf[count + 2] = *control_;
Node* ret =
- graph()->NewNode(jsgraph()->common()->Return(count), count + 2, vals);
+ graph()->NewNode(jsgraph()->common()->Return(count), count + 3, buf);
MergeControlToEnd(jsgraph(), ret);
return ret;
@@ -2675,8 +2678,8 @@ void WasmGraphBuilder::BuildJSToWasmWrapper(Handle<Code> wasm_code,
}
Node* jsval = ToJS(
retval, sig->return_count() == 0 ? wasm::kAstStmt : sig->GetReturn());
- Node* ret =
- graph()->NewNode(jsgraph()->common()->Return(), jsval, call, start);
+ Node* ret = graph()->NewNode(jsgraph()->common()->Return(),
+ jsgraph()->Int32Constant(0), jsval, call, start);
MergeControlToEnd(jsgraph(), ret);
}
@@ -2787,14 +2790,16 @@ void WasmGraphBuilder::BuildWasmToJSWrapper(Handle<JSReceiver> target,
Node* val =
FromJS(call, HeapConstant(isolate->native_context()),
sig->return_count() == 0 ? wasm::kAstStmt : sig->GetReturn());
+ Node* pop_size = jsgraph()->Int32Constant(0);
if (jsgraph()->machine()->Is32() && sig->return_count() > 0 &&
sig->GetReturn() == wasm::kAstI64) {
- ret = graph()->NewNode(jsgraph()->common()->Return(), val,
+ ret = graph()->NewNode(jsgraph()->common()->Return(), pop_size, val,
graph()->NewNode(jsgraph()->machine()->Word32Sar(),
val, jsgraph()->Int32Constant(31)),
call, start);
} else {
- ret = graph()->NewNode(jsgraph()->common()->Return(), val, call, start);
+ ret = graph()->NewNode(jsgraph()->common()->Return(), pop_size, val, call,
+ start);
}
MergeControlToEnd(jsgraph(), ret);
« no previous file with comments | « src/compiler/tail-call-optimization.cc ('k') | src/compiler/x64/code-generator-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698