Commit Graph
4679 Commits
Author SHA1 Message Date
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 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
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 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 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
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
Malte Ubl 5a63ac435c Merge remote-tracking branch 'origin/ni/i7-routing' into HEAD 2026-10-26 16:07:47 -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 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
Malte Ubl 17c9ab53ed Merge remote-tracking branch 'origin/ni/i2-handles' into HEAD 2026-10-26 16:04:13 -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 437ad4ae38 Merge remote-tracking branch 'origin/ni/i1-stack-bound' into HEAD 2026-10-26 16:00:05 -07:00
Malte Ubl 4063f1e1f7 Merge remote-tracking branch 'origin/ni/islands-base' into HEAD 2026-10-26 15:59:32 -07:00
Malte Ubl d245796462 Merge remote-tracking branch 'origin/ni/3-hosted-loop' into HEAD 2026-10-26 15:58:16 -07:00
Malte Ubl e99d3445bf Merge remote-tracking branch 'origin/ni/1-libnode-loader' into HEAD 2026-10-26 15:57:24 -07:00
Malte Ubl 05584c5bf7 Merge remote-tracking branch 'origin/ni/1-libnode-loader' into HEAD 2026-10-26 15:55:46 -07:00
Chris Tate c75c95d864 Check the native stack guard in one function per call cycle
Every unbounded recursion repeats some cycle of the call graph, so a
stack check in one function of each cycle bounds it. stackCheckedFunctions
now picks a feedback vertex set of the stack-check graph greedily (the
function with the most caller-callee pairs first) instead of checking
every function on a cycle, and adds a check where a run of unchecked cycle
functions would exceed 32 calls, so the stack used between two checks
stays of the same order as before.

Worker entry polls follow: a synchronous function on a cycle that may
throw needs no entry poll, since a descent that never returns ends at a
checked function of its cycle. NoThrow contracts keep the model in which
every function on a cycle checks, a superset that does not depend on the
choice.
2026-10-26 17:47:58 -05:00
Chris Tate 7e225c5d87 Merge main 2026-10-26 17:33:06 -05:00
Chris Tate a82a0dda93 Revert "Build node:zlib on the zlib Node bundles"
This reverts #2355. The sanitized three.js nodes CI job has failed on every main commit since it landed.
2026-10-26 17:05:37 -05:00
Malte UblandClaude Opus 5.5 c2f9b49113 Write untyped stores into live records and pass prefix records by pointer
An untyped write of a present declared field of a live record capsule now
stores into the native record through a per-shape `set` hook (checked like
the commit, refusing to the snapshot path for values the field cannot hold),
so the capsule keeps answering from the record instead of turning into a
permanent snapshot. Object.assign from a plain object takes the same path,
and checked conversions and matches read a capsule through a fresh,
uncached snapshot.

A checked conversion of a record capsule into a record type whose storage
is a same-offset prefix of the capsule's record (and whose extra fields hold
no references) passes the pointer: both names keep one object, writes show
through either, and the record remembers its own capsule parameters, so
every later box of it and the narrower type's reflective surfaces answer
for the whole object (decision D3). Other cross-layout conversions keep the
refreshed copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 15:05:27 -07:00
Chris Tate 3c83fcb89c Allocate object groups that die together in arenas (#2348) 2026-10-26 16:54:31 -05:00
Chris Tate 2d557bc87b Test a scalar optional left of ?? in JavaScript on the typed path (#2345) 2026-10-26 16:54:11 -05:00
Chris Tate b242a2d09a Address review feedback 2026-10-26 16:45:40 -05:00
Chris Tate 1b2e591a02 Keep the typed ?? path to literal defaults 2026-10-26 16:18:58 -05:00
Malte UblandClaude Opus 5.5 c89c4a0e85 Merge the deferral test lint fix
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:07:50 -07:00
Malte UblandClaude Opus 5.5 d3c01b8871 Merge the deferral test lint fix
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:07:50 -07:00
Malte UblandClaude Opus 5.5 b3decaa4cd Strip script(1)'s EOF echo without a control-character regex
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:07:49 -07:00
Chris Tate 9f47d74e21 Poll the loops of a nest on every iteration in ELF worker executables (#2351) 2026-10-26 16:04:06 -05:00
Chris Tate 4dd32da391 Lower discarded logical expressions over void conditionals as branches (#2356) 2026-10-26 15:56:00 -05:00
Chris Tate bfd3cf2daf Build node:zlib on the zlib Node bundles (#2355) 2026-10-26 15:48:37 -05:00
Chris Tate 6d8f0558ff Read int32-slot arrays at their width in integer clones 2026-10-26 15:45:29 -05:00
Chris TateandMathurAditya724 3417a5adc4 Lower a discarded logical over a void conditional as a branch
`skip || (flag ? warnA() : warnB())`, with void calls in both arms, as
React's development warnings write it, failed with SC9001 "ternary must
not be void": the statement lowered the logical as a value, and a
conditional of void calls has none. A logical whose result is discarded
now lowers as `if (!skip) ...` (or `if (skip) ...` for `&&`) when its
right operand needs no value: its type maps to void, or it is a logical
or comma expression whose last operand needs none. This holds in
statements and in a for loop's initializer and update, and for a
generic callback's conditional whose type parameter maps to void.

Closes #2322

Co-authored-by: MathurAditya724 <57684218+MathurAditya724@users.noreply.github.com>
2026-10-26 15:25:52 -05:00