Index: src/compiler/wasm-compiler.cc |
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc |
index cca472fb5606002c99c55962dd9a20da45eb0ef4..7837a64c9012562ece864f6e8810a07af6386e30 100644 |
--- a/src/compiler/wasm-compiler.cc |
+++ b/src/compiler/wasm-compiler.cc |
@@ -335,19 +335,6 @@ |
bool WasmGraphBuilder::IsPhiWithMerge(Node* phi, Node* merge) { |
return phi && IrOpcode::IsPhiOpcode(phi->opcode()) && |
NodeProperties::GetControlInput(phi) == merge; |
-} |
- |
-bool WasmGraphBuilder::ThrowsException(Node* node, Node** if_success, |
- Node** if_exception) { |
- if (node->op()->HasProperty(compiler::Operator::kNoThrow)) { |
- return false; |
- } |
- |
- *if_success = graph()->NewNode(jsgraph()->common()->IfSuccess(), node); |
- *if_exception = |
- graph()->NewNode(jsgraph()->common()->IfException(), node, node); |
- |
- return true; |
} |
void WasmGraphBuilder::AppendToMerge(Node* merge, Node* from) { |
@@ -1737,43 +1724,6 @@ |
arraysize(parameters), effect_, *control_); |
} |
-Node* WasmGraphBuilder::Catch(Node* input, wasm::WasmCodePosition position) { |
- CommonOperatorBuilder* common = jsgraph()->common(); |
- |
- Node* parameters[] = {input}; // caught value |
- Node* value = |
- BuildCallToRuntime(Runtime::kWasmGetCaughtExceptionValue, jsgraph(), |
- module_->instance->context, parameters, |
- arraysize(parameters), effect_, *control_); |
- |
- Node* is_smi; |
- Node* is_heap; |
- Branch(BuildTestNotSmi(value), &is_heap, &is_smi); |
- |
- // is_heap |
- Node* heap_f64 = BuildLoadHeapNumberValue(value, is_heap); |
- // *control_ needs to point to the current control dependency (is_heap) in |
- // case BuildI32SConvertF64 needs to insert nodes that depend on the "current" |
- // control node. |
- *control_ = is_heap; |
- Node* heap_i32 = BuildI32SConvertF64(heap_f64, position); |
- // *control_ contains the control node that should be used when merging the |
- // result for the catch clause. It may be different than *control_ because |
- // BuildI32SConvertF64 may introduce a new control node (used for trapping if |
- // heap_f64 cannot be converted to an i32. |
- is_heap = *control_; |
- |
- // is_smi |
- Node* smi_i32 = BuildChangeSmiToInt32(value); |
- |
- Node* merge = graph()->NewNode(common->Merge(2), is_heap, is_smi); |
- Node* value_i32 = graph()->NewNode( |
- common->Phi(MachineRepresentation::kWord32, 2), heap_i32, smi_i32, merge); |
- |
- *control_ = merge; |
- return value_i32; |
-} |
- |
Node* WasmGraphBuilder::BuildI32DivS(Node* left, Node* right, |
wasm::WasmCodePosition position) { |
MachineOperatorBuilder* m = jsgraph()->machine(); |
@@ -2042,9 +1992,8 @@ |
return call; |
} |
-Node* WasmGraphBuilder::BuildWasmCall(wasm::FunctionSig* sig, Node** args, |
- Node*** rets, |
- wasm::WasmCodePosition position) { |
+Node** WasmGraphBuilder::BuildWasmCall(wasm::FunctionSig* sig, Node** args, |
+ wasm::WasmCodePosition position) { |
const size_t params = sig->parameter_count(); |
const size_t extra = 2; // effect and control inputs. |
const size_t count = 1 + params + extra; |
@@ -2064,24 +2013,24 @@ |
*effect_ = call; |
size_t ret_count = sig->return_count(); |
- if (ret_count == 0) return call; // No return value. |
- |
- *rets = Buffer(ret_count); |
+ if (ret_count == 0) return nullptr; // No return value. |
+ |
+ Node** rets = Buffer(ret_count); |
if (ret_count == 1) { |
// Only a single return value. |
- (*rets)[0] = call; |
+ rets[0] = call; |
} else { |
// Create projections for all return values. |
for (size_t i = 0; i < ret_count; i++) { |
- (*rets)[i] = graph()->NewNode(jsgraph()->common()->Projection(i), call, |
- graph()->start()); |
- } |
- } |
- return call; |
-} |
- |
-Node* WasmGraphBuilder::CallDirect(uint32_t index, Node** args, Node*** rets, |
- wasm::WasmCodePosition position) { |
+ rets[i] = graph()->NewNode(jsgraph()->common()->Projection(i), call, |
+ graph()->start()); |
+ } |
+ } |
+ return rets; |
+} |
+ |
+Node** WasmGraphBuilder::CallDirect(uint32_t index, Node** args, |
+ wasm::WasmCodePosition position) { |
DCHECK_NULL(args[0]); |
// Add code object as constant. |
@@ -2090,11 +2039,11 @@ |
args[0] = HeapConstant(code); |
wasm::FunctionSig* sig = module_->GetFunctionSignature(index); |
- return BuildWasmCall(sig, args, rets, position); |
-} |
- |
-Node* WasmGraphBuilder::CallIndirect(uint32_t index, Node** args, Node*** rets, |
- wasm::WasmCodePosition position) { |
+ return BuildWasmCall(sig, args, position); |
+} |
+ |
+Node** WasmGraphBuilder::CallIndirect(uint32_t index, Node** args, |
+ wasm::WasmCodePosition position) { |
DCHECK_NOT_NULL(args[0]); |
DCHECK(module_ && module_->instance); |
@@ -2117,11 +2066,11 @@ |
} else { |
// No function table. Generate a trap and return a constant. |
trap_->AddTrapIfFalse(wasm::kTrapFuncInvalid, Int32Constant(0), position); |
- (*rets) = Buffer(sig->return_count()); |
+ Node** rets = Buffer(sig->return_count()); |
for (size_t i = 0; i < sig->return_count(); i++) { |
- (*rets)[i] = trap_->GetTrapValue(sig->GetReturn(i)); |
- } |
- return trap_->GetTrapValue(sig); |
+ rets[i] = trap_->GetTrapValue(sig->GetReturn(i)); |
+ } |
+ return rets; |
} |
Node* table = FunctionTable(0); |
@@ -2155,7 +2104,7 @@ |
*effect_, *control_); |
args[0] = load_code; |
- return BuildWasmCall(sig, args, rets, position); |
+ return BuildWasmCall(sig, args, position); |
} |
Node* WasmGraphBuilder::BuildI32Rol(Node* left, Node* right) { |