[wasm] Fold constant to pointer conversion
On 64 bit architectures, reading memory in wasm requires a conversion of the 32 bit index into a 64 bit value. For this, we generate a ChangeUint32ToUint64 graph node, which later materializes as a move and hence consumes a register. This generates unneccesary register pressure, especially with gvn enabled. Now, the WasmGraphBuilder will emit a IntPtrConstant node right away if the index is a constant. Change-Id: Id8d7efa90c6bd8e4d7b6419e2075802dfc1eb383 Reviewed-on: https://chromium-review.googlesource.com/1099061 Commit-Queue: Stephan Herhut <herhut@chromium.org> Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#53726}
This commit is contained in:
parent
d2e1620cd4
commit
83864aa236
@ -3318,6 +3318,12 @@ Node* WasmGraphBuilder::BuildAsmjsLoadMem(MachineType type, Node* index) {
|
||||
|
||||
Node* WasmGraphBuilder::Uint32ToUintptr(Node* node) {
|
||||
if (mcgraph()->machine()->Is32()) return node;
|
||||
// Fold instances of ChangeUint32ToUint64(IntConstant) directly.
|
||||
UintPtrMatcher matcher(node);
|
||||
if (matcher.HasValue()) {
|
||||
uintptr_t value = matcher.Value();
|
||||
return mcgraph()->IntPtrConstant(bit_cast<intptr_t>(value));
|
||||
}
|
||||
return graph()->NewNode(mcgraph()->machine()->ChangeUint32ToUint64(), node);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user