Bug 250052
| Summary: | Pass core WebAssembly spec tests on ARM64 with single-pass WebAssembly baseline JIT | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | David Degazio <d_degazio> |
| Component: | WebAssembly | Assignee: | David Degazio <d_degazio> |
| Status: | RESOLVED FIXED | ||
| Severity: | Normal | CC: | webkit-bug-importer |
| Priority: | P2 | Keywords: | InRadar |
| Version: | WebKit Nightly Build | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Bug Depends on: | |||
| Bug Blocks: | 252209 | ||
David Degazio
rdar://100332177
The current default WebAssembly baseline JIT is based on emitting Air instructions. This is a moderate compile-time improvement over emitting B3, but still isn't very fast and generates relatively inefficient code. WebAssembly should lend itself relatively well to faster and simpler compilation methods, and we should be able to improve both startup speeds and generated code quality in the baseline JIT by transitioning to a single-pass baseline compiler.
Core design principles:
- Don't waste time generating an IR, emit instructions directly.
- Generate decent but not optimized code. We can do better than spilling everything to stack slots, but we shouldn't do liveness analysis or optimization passes.
- Emphasize compilation speed via efficient data structures and straightforward code generation.
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
David Degazio
Pull request: https://github.com/WebKit/WebKit/pull/8175
David Degazio
rdar://105421077
David Degazio
Renaming this patch to better reflect its state as the initial commit of the new single-pass BBQ JIT, not the entire feature. Since it's a pretty large project, the plan is to land this initial partially-complete version behind the `--useSinglePassBBQJIT` flag, disabled by default.
The new compiler currently passes all the core spec tests (`JSTests/wasm/spec-tests`) on ARM64, but not necessarily on other platforms. It's pretty unstable still, and is missing support for some critical features like SIMD, try/catch, and OSR entry/exit. We'll split these out into separate patches.
Since this bug now reflects the initial patch specifically, I've filed a separate bug (https://bugs.webkit.org/show_bug.cgi?id=252209) to represent the top-level feature.
EWS
Committed 260260@main (46375fbc5a67): <https://commits.webkit.org/260260@main>
Reviewed commits have been landed. Closing PR #8175 and removing active labels.