Commit Graph
6750 Commits
Author SHA1 Message Date
Chris Tate 9d0ca5f641 Give the native layout and metadata emission test 600 seconds
The sanitized run of "native LLVM layout and metadata emission (llvm)"
takes 170 to 300 seconds in its CI shard beside the shard's other tests,
against the suite's 300-second test timeout. On a quiet 8-vCPU machine it
takes 130 to 160 seconds.
2026-10-26 20:50:23 -05:00
Chris Tate 6beed6cb01 Test two inline-cache entries inline at dynamic-tier property sites
A dynamic-tier property site tested only the first entry of its cache
inline and called scr_js_get_probe (or scr_js_store_probe) for anything
else. A site that sees two layouts, such as object literals of one
record built in two key orders, then took the out-of-line probe on
every access to objects of its second layout.

Sites now test the first two entries inline, own or prototype, for
reads and replacing writes. The probe still answers the third and fourth
entries, misses and everything that is not plain data.
2026-10-26 20:47:23 -05:00
Chris Tate 807f5f6712 Shard the zero-cost gate and reuse baseline work across runs (#2365) 2026-10-26 20:29:33 -05:00
Chris Tate f5b8ff9019 Bound V8's stack scan by Node's own stack in Node islands (#1898) 2026-10-26 20:11:41 -05:00
Chris Tate cd606e96ff Key baseline cache entries by their program's inputs
A recorded baseline entry now holds a hash of its program's inputs: the
entry file and its relative imports (paths and contents) and the
optimization level. --baseline-cache uses an entry only when the program
still hashes the same, so a program or an import that changed since the
record builds its baseline, instead of a recorded build error or artifact
hash of the old sources settling the comparison as both-fail or identical.
Records take schema 2; older records are ignored.
2026-10-26 19:53:49 -05:00
Malte UblandClaude Opus 5.5 d0047c813f Shard the zero-cost gate and reuse baseline work across runs
The full gate takes 30 to 75 minutes on one Sandbox, which made it the
longest step of a validation round. It can now be split and merged:

- --shard=i/n splits the bench and corpus programs (the self-hosted
  compiler runs in shard 1, or alone with --set=self), and
  scripts/zero-cost-merge.mjs merges the shards' --json reports into one
  verdict, recomputing the compile-time intervals over every shard.
- --record-baseline-cache records the baseline's artifact hashes once;
  --baseline-cache skips the baseline build of every program whose
  candidate artifacts hash the same. The record is tied to the built
  baseline checkout, toolchain and paths.
- The candidate-source self build overlaps the comparison builds on
  hosts with room for it.

pnpm test:sandbox can reuse a prepared snapshot's LLVM helper and runtime
pack (SCRIPTC_SANDBOX_NATIVE_REFERENCE) when their inputs are identical,
and retries rate-limited Sandbox creation with backoff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 17:43:44 -07:00
Chris Tate 2c5b3b48d4 Version loops around nested loops only for accesses inside them (#2364) 2026-10-26 19:35:06 -05:00
Chris Tate ad7846bcfa Search ASCII strings from a start index without index conversion (#2362) 2026-10-26 19:18:50 -05:00
Chris Tate 79fc99ef43 Build node:zlib on the zlib Node bundles (#2363) 2026-10-26 19:10:48 -05:00
Chris Tate ca1a6b5bed Version loops around nested loops only for accesses inside them
A typed-array loop version runs a checked copy and one or two fast copies
of the loop, and each copy repeats every nested loop together with the
nested loop's own version. A loop whose guard proves only accesses outside
its nested loops, which run once per pass, now runs as written when a
nested loop accesses typed arrays; the nested loops still version their own
accesses. The loop versions as before when the guard proves the bounds of
an access inside a nested loop, or, in a worker program, the ownership of
an access inside a nested while loop, which never versions for ownership
alone.

Spectral-norm's paired row sums no longer copy their column loop for the
row loop's two stores. The worker program's au and atu functions are
102 KB of LLVM text instead of 236 KB each, and the program 519 KB instead
of 786 KB.

Corpus typed-array-nested-loop-versions covers row loops that store past
the end or at negative, fractional and NaN rows, views the nested loop
writes, and a nested while loop.
2026-10-26 19:05:12 -05:00
Malte UblandClaude Opus 5.5 73335a5130 Benchmark typed records written through untyped views
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 16:59:12 -07:00
Malte UblandClaude Opus 5.5 90b971fbb2 Match the record-ops table with its store hook in the live-capsule test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 16:56:04 -07:00
Chris Tate 7be9803076 Build node:zlib on the zlib Node bundles
Re-lands #2355, reverted in #2358. #2361 fixed the CI failure it exposed.
2026-10-26 18:40:07 -05:00
Malte Ubl f29a780112 Merge remote-tracking branch 'origin/ni/i10-js-island-requires' into HEAD 2026-10-26 16:39:53 -07:00
Malte Ubl f2341a5743 Merge remote-tracking branch 'origin/ni/i9-recorded-deferral' into HEAD 2026-10-26 16:39:32 -07:00
Malte Ubl 3f696a8a79 Merge remote-tracking branch 'origin/ni/i8-exit' into HEAD 2026-10-26 16:39:06 -07:00
Malte Ubl e274620b81 Merge remote-tracking branch 'origin/ni/i7-routing' into HEAD 2026-10-26 16:38:44 -07:00
Chris Tate 4dddb94373 Revert "Build node:zlib on the zlib Node bundles" (#2358) 2026-10-26 18:38:38 -05:00
Malte Ubl 22a88838bc Merge remote-tracking branch 'origin/ni/i6-subclasses' into HEAD 2026-10-26 16:38:10 -07:00
Malte Ubl cc95c9064e Merge remote-tracking branch 'origin/ni/i5-shared-modules' into HEAD 2026-10-26 16:37:46 -07:00
Malte Ubl fd7a9179e4 Merge remote-tracking branch 'origin/ni/i4-deferred' into HEAD 2026-10-26 16:37:21 -07:00
Malte Ubl 5ca7bcc504 Merge remote-tracking branch 'origin/ni/i3-exports' into HEAD 2026-10-26 16:36:57 -07:00
Malte Ubl bc159d3d13 Merge remote-tracking branch 'origin/ni/i2-handles' into HEAD 2026-10-26 16:36:30 -07:00
Malte Ubl a53c7eea6d Do not count a synthesized fence as module code
Main's lookup for builtin globals read through the global object lowers
every global's value, and its fences have no source position, so they
were marked as module-init fences and made packages like jose islands.
The lookup runs when the program calls it.
2026-10-26 16:35:52 -07:00
Malte Ubl 55e7cc20db Have orderkit require its part when it loads
Main resolves computed createRequire specifiers at run time, so a computed
require inside a function no longer makes an island; one in module code
still does.
2026-10-26 16:35:52 -07:00
Chris Tate 80a5d9a820 Read missing elements through non-null asserted operands as Node does (#2331) 2026-10-26 18:35:37 -05:00
Chris Tate ce616f44dd Guard <riscv_vector.h> by target in the implicit toolchain probe (#2361) 2026-10-26 18:30:27 -05:00
Chris Tate 1245b18469 Search ASCII strings from a start index without index conversion
String.prototype.indexOf took its byte-search fast path on a proven-ASCII
receiver only when the start index was not positive. A positive start went
through the general path: ToIntegerOrInfinity, the surrogate-needle check,
and UTF-16 to byte conversions in both directions, although byte offsets
are UTF-16 indexes in an ASCII string. The fast path now covers every start
index: a positive start truncates and clamps to the length, where only the
empty needle is found, and the search runs from that byte offset.
2026-10-26 18:22:22 -05:00
Chris Tate 8464f2a7c5 Check the native stack guard in one function per call cycle (#2360) 2026-10-26 18:20:07 -05:00
Chris Tate f9258423f1 Run native async generators as stackless coroutines (#2332) 2026-10-26 18:11:00 -05:00
Malte Ubl d0813fc78e Merge remote-tracking branch 'origin/ni/i10-js-island-requires' into HEAD 2026-10-26 16:09:21 -07:00
Malte Ubl 1226a77c99 Merge remote-tracking branch 'origin/ni/i9-recorded-deferral' into HEAD
# Conflicts:
#	packages/compiler/src/frontend/lowering/lower-stmts.ts
2026-10-26 16:08:55 -07:00
Malte Ubl dc0e11fe77 Merge remote-tracking branch 'origin/ni/i8-exit' into HEAD 2026-10-26 16:08:03 -07:00
Chris Tate 2b8873bb92 Keep the native compiler's profile matching its functions (#2357) 2026-10-26 18:07:49 -05:00
Malte Ubl 5a63ac435c Merge remote-tracking branch 'origin/ni/i7-routing' into HEAD 2026-10-26 16:07:47 -07:00
Malte Ubl af19aa1439 Do not count a synthesized fence as module code
Main's lookup for builtin globals read through the global object lowers
every global's value, and its fences have no source position, so they
were marked as module-init fences and made packages like jose islands.
The lookup runs when the program calls it.
2026-10-26 16:07:12 -07:00
Malte Ubl b425eeca6e Move SC8021 and SC8023 from the reserved to the active codes 2026-10-26 16:07:11 -07:00
Malte Ubl c11049e25c Merge remote-tracking branch 'origin/ni/i6-subclasses' into HEAD 2026-10-26 16:07:09 -07:00
Malte Ubl 9b503eb1b3 Merge remote-tracking branch 'origin/ni/i5-shared-modules' into HEAD 2026-10-26 16:06:28 -07:00
Malte Ubl 73d65b6c1d Move SC8020, SC8022 from the reserved to the active codes 2026-10-26 16:05:38 -07:00
Malte Ubl 60ed8cb2ba Merge remote-tracking branch 'origin/ni/i4-deferred' into HEAD 2026-10-26 16:05:36 -07:00
Malte Ubl 30c01c4ba9 Merge remote-tracking branch 'origin/ni/i3-exports' into HEAD 2026-10-26 16:05:09 -07:00
Chris Tate 707b790603 Inline small leaf functions called only from loops (#2359) 2026-10-26 18:04:38 -05:00
Malte Ubl 407cb350df Move SC8011 from the reserved to the active codes 2026-10-26 16:04:21 -07:00
Malte Ubl 17c9ab53ed Merge remote-tracking branch 'origin/ni/i2-handles' into HEAD 2026-10-26 16:04:13 -07:00
Malte Ubl b29475cec4 Move SC8001 and SC8010 from the reserved to the active codes 2026-10-26 16:03:28 -07:00
Chris Tate 19b0b40486 Address review feedback 2026-10-26 18:01:27 -05:00
Malte Ubl 803d654f99 Make corpus 6839's package an island with a spread require
Main resolves computed createRequire specifiers at run time, so the
package's computed require no longer makes an island; a spread argument
list still does.
2026-10-26 16:01:24 -07:00
Malte Ubl c9f6e46f45 Answer typeof of an island import from the island
An island package's declaration file declares its values ambiently, and
main's typeof folds an ambient const that nothing defines to
"undefined"; the island defines it.
2026-10-26 16:01:10 -07:00
Malte Ubl 2d264e2401 Classify only a native addon refusal as one
The computed createRequire note main added ('…, such as a native addon,
ends the program') matched the native-addon pattern, so every package with
a computed require became a runtime island; it is a deferred gap now, like
other fences that may never run.
2026-10-26 16:01:09 -07:00