Commit 4b8128a0 authored by ahaas's avatar ahaas Committed by Commit bot

[wasm] Use ChangeSmiToInt32 instead of SmiConstant in wasm.

Signature indices are encoded as SMIs in the function table of a wasm
module. To compare a signature index with the index parameter that is
passed to an indirect function call, we now change the signature index
to an int32 instead of encoding the index parameter as a SmiConstant.
SmiConstants get encoded as NumberConstant nodes in the TF graph, which
can cause the allocation of heap numbers. Heap allocation has to be
avoided for parallel compilation.

R=bradnelson@chromium.org, titzer@chromium.org

Review-Url: https://codereview.chromium.org/2090923002
Cr-Commit-Position: refs/heads/master@{#37240}
parent eeeb365b
...@@ -1921,8 +1921,9 @@ Node* WasmGraphBuilder::CallIndirect(uint32_t index, Node** args, ...@@ -1921,8 +1921,9 @@ Node* WasmGraphBuilder::CallIndirect(uint32_t index, Node** args,
Int32Constant(kPointerSizeLog2)), Int32Constant(kPointerSizeLog2)),
Int32Constant(fixed_offset)), Int32Constant(fixed_offset)),
*effect_, *control_); *effect_, *control_);
Node* sig_match = graph()->NewNode(machine->WordEqual(), load_sig, Node* sig_match =
jsgraph()->SmiConstant(index)); graph()->NewNode(machine->Word32Equal(),
BuildChangeSmiToInt32(load_sig), Int32Constant(index));
trap_->AddTrapIfFalse(wasm::kTrapFuncSigMismatch, sig_match, position); trap_->AddTrapIfFalse(wasm::kTrapFuncSigMismatch, sig_match, position);
} }
......
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