mirror of
https://github.com/nodejs/node.git
synced 2025-05-16 00:11:20 +00:00

PR-URL: https://github.com/nodejs/node/pull/47251 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Richard Lau <rlau@redhat.com>
45 lines
1.8 KiB
JavaScript
45 lines
1.8 KiB
JavaScript
// Copyright 2022 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --wasm-max-code-space-size-mb=1
|
|
// Disable lazy compilation, so we actually generate a lot of code at once.
|
|
// Flags: --no-wasm-lazy-compilation
|
|
// Limit the number of background threads, so each thread generates more code.
|
|
// Flags: --wasm-num-compilation-tasks=2
|
|
|
|
// This is a regression test for https://crbug.com/v8/13436. If a single
|
|
// background thread generates more code than fits in a single code space, we
|
|
// need to split it into multiple code spaces.
|
|
|
|
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
|
|
|
|
const start = performance.now();
|
|
function time(name) {
|
|
const ms_since_start = (performance.now() - start).toFixed(1).padStart(7);
|
|
print(`[${ms_since_start}] ${name}`);
|
|
}
|
|
|
|
// At the time of writing this test (Nov 2022), this module generated ~20MB of
|
|
// code on x64 and ~18MB on arm64.
|
|
const builder = new WasmModuleBuilder();
|
|
const kNumFunctions = 1500;
|
|
// Build a large body. Then append one instruction to get different code per
|
|
// function (for the case that we decide to merge identical code objects in the
|
|
// future).
|
|
time('Build function template.');
|
|
let body_template = [kExprLocalGet, 0];
|
|
for (let i = 0; i < kNumFunctions; ++i) {
|
|
body_template.push(kExprCallFunction, ...wasmSignedLeb(i));
|
|
}
|
|
time(`Adding ${kNumFunctions} functions`);
|
|
for (let i = 0; i < kNumFunctions; ++i) {
|
|
if (i != 0 && i % 100 == 0) time(`... added ${i} functions`);
|
|
let body = body_template.concat([...wasmI32Const(i), kExprI32Add, kExprEnd]);
|
|
builder.addFunction('f' + i, kSig_i_i).addBodyWithEnd(body);
|
|
}
|
|
time('Building buffer.');
|
|
const wasm_buf = builder.toBuffer();
|
|
time('Compiling Wasm module.');
|
|
new WebAssembly.Module(wasm_buf);
|