)]}'
{
  "log": [
    {
      "commit": "21312a03e1d028a9d53f2cf855888a23b4b69862",
      "tree": "282067ee6d8c4b0400ec7a9c30e72db7a47f12e4",
      "parents": [
        "fbf2e5aa2cca8c9b8ae0bbd021f57c839c9640f2"
      ],
      "author": {
        "name": "Chris Harvey",
        "email": "1362083+chharvey@users.noreply.github.com",
        "time": "Fri Sep 18 19:53:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 19:53:45 2026"
      },
      "message": "[JS API] Organize types into enums (#9098)\n\nAlternative to #9085, which renamed `binaryen.none` to `binaryen.void`\nand added a new `binaryen.none` referring to the heap type.\nThere were concerns that `binaryen.void` mapping to\nthe C API `BinaryenTypeNone()` might be confusing.\n\nThis PR moves all types from the top-level `binaryen.*` namespace\ninto respective enums called `Type`, `HeapType`, and `PackedType`.\n\nThis change plays nicely with AssemblyScript’s established\n[TypeScript\ntypings](https://github.com/AssemblyScript/binaryen.js/blob/main/index.d.ts#L3)\nbecause now types are scoped in an enum space.\nThis is not a breaking change for the TS typings file —\ne.g., a function that accepts a `Type` (previously just `number`)\nnow accepts a member of the new `Type` enum.\n\nThis change also follows well-established patterns of existing enums\nsuch as `ExpressionIds` and `Features`.\n\n`binaryen.Type.none` now uses `BinaryenTypeNone()` and\n`binaryen.HeapType.none` uses `BinaryenHeapTypeNone()`,\nso there’s no conflict across enums.\n\nThis *is* a breaking change for JS/TS users:\nthey will now have to reference types from the enum space\ninstead of at the top level.\nE.g. `binaryen.i32` becomes `binaryen.Type.i32`,\n`binaryen.any` becomes `binaryen.HeapType.any`,\n`binaryen.i8` becomes `binaryen.PackedType.i8`, etc."
    },
    {
      "commit": "fbf2e5aa2cca8c9b8ae0bbd021f57c839c9640f2",
      "tree": "31ada33a6a609c7b216aafb0555ce21280bbed5d",
      "parents": [
        "829cbec1b75d201cdc632478450e4748f2472bde"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Sep 18 16:50:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 16:50:37 2026"
      },
      "message": "[MakeSharedObjects] Lower externrefs using a dynamically grown table (#9114)\n\nBecause arbitrary unshared externrefs cannot be made shared directly,\nlower unshared externrefs to shared i31ref table indices using a\nLazyTable abstraction that manages the table and runtime conversion\nhelpers on demand.\n\nUnlike function references, externrefs are still passed across the\nmodule boundary, so wrap imported and exported functions that accept or\nreturn externrefs to convert between externrefs and table indices. Also\nlower any.convert_extern and extern.convert_any using imported\nconversion helpers, and check that table.grow succeeds (\u003e\u003d 0) when\nconverting references to indices, trapping otherwise."
    },
    {
      "commit": "829cbec1b75d201cdc632478450e4748f2472bde",
      "tree": "787123e172e04b2b9aabafa4cb6b7379620d8f23",
      "parents": [
        "e45f5ba1204484a59a38a6881b8e6fb6339f2c71"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Sep 18 16:44:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 16:44:38 2026"
      },
      "message": "Fix TypeRefining-GUFA on unreachable StructCmpxchg (#9113)\n\nIf the replacement value is not unreachable, we still need to fix it up."
    },
    {
      "commit": "e45f5ba1204484a59a38a6881b8e6fb6339f2c71",
      "tree": "b56ceafe4652745e7bfeffc778a2357d560fc858",
      "parents": [
        "3f54c9d121d8133bc3ee9ea9914c46a5d7b464e1"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Sep 17 22:22:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 22:22:45 2026"
      },
      "message": "Mark atomic read-write etc. operations as generative (#9112)\n\nTwo such instructions, one after the other, can return different things\ndespite appearances, like a `call` or a `struct.new`."
    },
    {
      "commit": "3f54c9d121d8133bc3ee9ea9914c46a5d7b464e1",
      "tree": "d566952194f932b74d2e456d6f5c6c9f38758f89",
      "parents": [
        "7d27e49028f753b74507ce5b8effc84feca1caf7"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Sep 17 17:57:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 17:57:19 2026"
      },
      "message": "Optionally collect fuzzer statistics across runs (#9073)\n\nWhen a new BINARYEN_FUZZ_STATS environment variable is set, collect\nstatistics about fuzzer patterns and events. Save these statistics to a\nfile, where they can be accumulated and updated across several fuzzer\nruns. The API is designed to make it easy to add new patterns and events\nfor one-off local experiments. Include sample patterns collecting\nfrequencies of various cast instructions as an example."
    },
    {
      "commit": "7d27e49028f753b74507ce5b8effc84feca1caf7",
      "tree": "eb6da300eee0fb5d276987fb165a2c6d47d0947e",
      "parents": [
        "cbecb31262f41e65b54aad4f7bd4f9b4f22cb55c"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Sep 17 16:52:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 16:52:17 2026"
      },
      "message": "[TailCall] Fix intrinsic and unreachable calls (#9111)\n\nLate in the development of the TailCall pass, we removed a run of DCE in\na nested pass runner. It turns out that had been load bearing, because\nwithout it TailCall could optimize unreachable calls whose callee return\ntypes did not match the caller return type, producing invalid IR. Fix\nthe bug by not optimizing unreachable calls, leaving them for a separate\nDCE pass to clean up instead.\n\nAlso fix the lowering of call.without.effects when it is used as a tail\ncall. Previously intrinsic lowering would turn such a tail call into a\nnormal call, again producing invalid IR because the normal call is not\nunreachable and is not valid in all the places a tail call would be.\n\n---------\n\nCo-authored-by: Alon Zakai \u003cazakai@google.com\u003e"
    },
    {
      "commit": "cbecb31262f41e65b54aad4f7bd4f9b4f22cb55c",
      "tree": "527365db27572d72575954c36a1cec85a140f586",
      "parents": [
        "e653452764b6f7806a34196bda15f76564e66c39"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Sep 16 23:01:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 23:01:14 2026"
      },
      "message": "[GUFA] Fix crash on switch handlers (#9110)\n\nSwitch handlers on `resume` and `resume_throw` instructions do not have\nassociated labels. GUFA previously assumed that all handlers would have\nlabels, and would crash after trying to look up the target of an empty\nname. Fix the bug by explicitly checking for the presence of a label on\nthe handlers."
    },
    {
      "commit": "e653452764b6f7806a34196bda15f76564e66c39",
      "tree": "eeebdd98d44cb2e12d8459f0200a502008fbde20",
      "parents": [
        "0c068b71d4015db83b9e57f9f8a514b40a566d86"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Sep 16 22:39:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 22:39:10 2026"
      },
      "message": "ConstraintAnalysis: Parse tees (#9109)\n\nParsing tees allows us to handle more code, as it is common to see\na tee at the start of a constraint, e.g.\n\n```wat\n(if\n  (i32.eq ..\n    (local.tee $x ..)\n    (i32.const 42)\n  )\n```\n\nThis is also a bugfix, as we were not handling unparsed tees before:\nwe need to make sure that no tee tramples a get that we parse into\na constraint. E.g.\n\n```wat\n(i32.and\n  (local.get $x)\n  (local.tee $x ..)\n)\n```\nWe cannot parse that into `$x \u0026\u0026 ..` because at the AND, we have already\ntrampled `$x`. This code looks for any such conflict."
    },
    {
      "commit": "0c068b71d4015db83b9e57f9f8a514b40a566d86",
      "tree": "61330313b447a7094958f76c118aae6cbb96b6c5",
      "parents": [
        "5b07da180bbcdea2f3761be96215cc94ee7f4930"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Sep 16 22:26:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 22:26:47 2026"
      },
      "message": "Add TailCall optimization pass (--tail-call) (#9103)\n\nAdd a pass that converts call, call_indirect, and call_ref instructions\nin tail position into return calls. Whether expressions are in tail\nposition is propagated down from parent expressions to children, so we\nneed to do a pre-order traversal instead of our normal post-order\ntraversal. Add a bespoke PreWalker class that additionally passes\n`isTail` to the various expression visitors. Keep track of the exception\nhandling depth to avoid incorrectly turning calls inside exception\nhandlers into return calls."
    },
    {
      "commit": "5b07da180bbcdea2f3761be96215cc94ee7f4930",
      "tree": "d5c0fa6b443e51eb09967412b421ef6d8f8c939c",
      "parents": [
        "1b198ae5968b3f3322d6c844aad314d31dc79271"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Sep 16 18:29:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 18:29:24 2026"
      },
      "message": "[GTO] Update struct field indices after localizing operands (#9108)\n\nPR #9043 (\"Avoid newly exposing prototypes in GTO\") introduced\nprepending\nan i8 placeholder field at index 0 of exposed no-proto descriptors when\ntheir first field becomes prototype-exposing. When all fields of such a\ndescriptor are kept, the new index of the last field equals the old\nstruct\u0027s `fields.size()`.\n\nBecause `updateInstructions` runs before `updateTypes` (so expression\nheap types still refer to the pre-optimization `Struct` definitions),\nand\n`FieldRemover` is a `PostWalker`, child `struct.get`, `struct.rmw`, and\n`struct.cmpxchg` instructions had their `index` mutated in-place to the\nnew index before an enclosing `struct.new` or `struct.set` ran\n`ChildLocalizer` or `getResultOfFirst`. When `EffectAnalyzer`\nsubsequently\ninspected those child instructions, `readsStruct` accessed\n`type.getStruct().fields[index]` using the old `HeapType` and the new\n`index`, causing an out-of-bounds assertion failure (`__n \u003c\nthis-\u003esize()`)\nor reading the wrong field\u0027s mutability.\n\nFix this by splitting instruction updating into two passes executed in a\nsingle nested `PassRunner` invocation (`FieldRemover` followed by\n`IndexUpdater`), along with sequential `runOnModuleCode` runs.\n`FieldRemover` removes/reorders `struct.new` operands and replaces\nremoved `struct.set`s while all struct instructions still have their old\nfield indices matching their old `HeapType`s, and `IndexUpdater` then\nupdates the field indices on all remaining struct instructions."
    },
    {
      "commit": "1b198ae5968b3f3322d6c844aad314d31dc79271",
      "tree": "5714aab50dff5a52e984f398b0df76085a18b119",
      "parents": [
        "b71b29e2afa8d2dc848a385a42d47327caa48a82"
      ],
      "author": {
        "name": "Govind yadav",
        "email": "43997191+GtechGovind@users.noreply.github.com",
        "time": "Wed Sep 16 18:03:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 18:03:29 2026"
      },
      "message": "Add a pass to remove empty function exports (#9078)\n\nFixes #6506."
    },
    {
      "commit": "b71b29e2afa8d2dc848a385a42d47327caa48a82",
      "tree": "214f9b9337d6a19a13e3648cf8cadf0cc05e5569",
      "parents": [
        "2746295ac84dc054ff0120fbd550bd7086ff09e8"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Tue Sep 15 21:49:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 21:49:53 2026"
      },
      "message": "Port threaded tests from acquire/release proposal (#9107)\n\nPort changes from\nhttps://github.com/WebAssembly/acquire-release-atomics/pull/21 and\nhttps://github.com/WebAssembly/acquire-release-atomics/pull/23. After\nthis PR the test matches the test from the proposal exactly. Once the\nacquire/release atomics proposal is in\nhttps://github.com/WebAssembly/testsuite, we won\u0027t have to copy this\nmanually anymore.\n\n* Add missing `(register ...)` statements within `thread` blocks\n* Use unique names for threads and memories"
    },
    {
      "commit": "2746295ac84dc054ff0120fbd550bd7086ff09e8",
      "tree": "daea7e02e9beb6c002d9131ea889e923327b87d7",
      "parents": [
        "7d9ec2fa2129e6cfb3558bf07bdb3d345dd9962d"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Sep 14 17:50:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 17:50:44 2026"
      },
      "message": "Support parallel fuzzing in monitor_fuzz.py (#9105)\n\nAdd a --jobs (-j) argument to monitor_fuzz.py to control how many\ninstances of fuzz_opt.py are run in parallel. This can increase\nthroughput because a single instance of fuzz_opt.py does not always\nsaturate all cores. The instances are run in separate directories to\navoid interfering with each other.\n\nTo support running simultaneously in separate directories, make a few\ntweaks to fuzz_opt.py to make it more location-independent. For example,\npass `-C` to git operations to run them explicitly in the binaryen root\ninstead of the current directory."
    },
    {
      "commit": "7d9ec2fa2129e6cfb3558bf07bdb3d345dd9962d",
      "tree": "a4b583b9c5d41985fb3e0ad92df60cf6d20842d5",
      "parents": [
        "5eb87bfcbdfa86d24ac8b9b07c1fa606124d140d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Sep 14 16:26:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 16:26:39 2026"
      },
      "message": "[BranchHinting] Do not reorder traps in OptimizeInstructions when neverReorder is set (#9096)\n\nIn the neverReorder testing mode, no code can be reordered, as reordering it\npast branch hints leads to fuzzer errors."
    },
    {
      "commit": "5eb87bfcbdfa86d24ac8b9b07c1fa606124d140d",
      "tree": "d4131c253113b839876331e866efb7114bbd8552",
      "parents": [
        "b7c5ff3c8b4e2f2276f79d79557b96da3d5c5332"
      ],
      "author": {
        "name": "Arkady Skvortsov",
        "email": "152697028+ArkadySkv@users.noreply.github.com",
        "time": "Mon Sep 14 05:06:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 05:06:35 2026"
      },
      "message": "Fix invalid tag index when parsing declarative element segments with … (#9093)\n\n## Summary\n\nFix a parser bug where `wasm-opt` rejected valid modules containing\ndeclarative element segments with GC reftypes, failing with\n`parse exception: invalid tag index`.\n\n## Problem\n\nBinaryen\u0027s binary reader (`WasmBinaryReader::readElementSegments` in\n`src/wasm/wasm-binary.cpp`) misread the type field of **declarative**\nelement segments (flag `0x07`).\n\nIn the binary format, a declarative segment is encoded as:\n```text\n0x07 reftype vec(expr)\n```\n\nwhere `reftype` can be a single byte (e.g. `nullref`) or a prefix byte\nplus a heap-type LEB (e.g. `0x63 0x02` for `(ref null 2)`).\n\nThe reader only consumed a single `getU32LEB()` for the type. When the\nreftype was `(ref null 2)` — i.e. a prefixed heap type — the reader\nwould consume the prefix byte as if it were the whole type, then\nmisinterpret the following bytes as the vector length. This misaligned\nthe stream, and downstream parsing eventually tried to resolve a value\nagainst the tag table, producing:\nparse exception: \n```invalid tag index (at 0:51)```\n\nMinimal repro (from the issue):\n\n```wat\n(module\n  (rec\n    (type (array i16))\n    (type (sub (struct)))\n    (type (array (mut nullexternref)))\n    (type (sub (func (param i64))))\n    (type (array (mut f32)))\n    (type (sub (array (mut v128))))\n  )\n  (elem declare (ref null 2))\n  (elem declare (ref null 3) (ref.null 3))\n  (elem declare nullref)\n  (func (type 3) (param i64))\n  (func (type 3) (param i64))\n)\n```\n```wasm-tools``` validate accepts this module; Binaryen rejects it.\n\n## Fix\nApply the same logic that is already used for passive and table-indexed\nsegments to the declarative case:\n\nIf usesExpressions is set (flag `0x07`), read a full reftype using\n`getType()`.\n\nOtherwise (flag `0x03`), read the single-byte elemkind and validate\nit is 0 (funcref).\n\nPreviously, the declarative branch unconditionally called\n`getU32LEB()` for the type, which works only for flag 0x03.\n\n```cpp\nif (isDeclarative) {\n  // Declared segments are needed in wasm text and binary, but not in\n  // Binaryen IR; skip over the segment.\n  if (usesExpressions) {\n    [[maybe_unused]] auto type \u003d getType();\n  } else {\n    auto elemKind \u003d getU32LEB();\n    if (elemKind !\u003d 0x0) {\n      throwError(\"Invalid kind (!\u003d funcref(0)) since !usesExpressions.\");\n    }\n  }\n  auto num \u003d getU32LEB();\n  for (Index i \u003d 0; i \u003c num; i++) {\n    if (usesExpressions) {\n      readExpression();\n    } else {\n      getU32LEB();\n    }\n  }\n  continue;\n}\n```\n\nWhy this approach: The fix is minimal and localized to the\ndeclarative branch. It reuses the existing, correct reftype-reading\npath rather than introducing a new helper. Declared segments are\nintentionally dropped from Binaryen IR (they are not needed there), so\nno IR representation changes are required — only the binary reader\nneeds to consume the correct number of bytes.\n\n## Testing\n\nManual verification:\n\nBefore the fix:\n\n```text\n$ ./bin/wasm-opt repro.wasm --all-features -o /dev/null\n[parse exception: invalid tag index (at 0:51)]\nFatal: error parsing wasm\n```\nAfter the fix:\n\n```text\n$ ./bin/wasm-opt repro.wasm --all-features -o /dev/null\nwarning: no passes specified, not doing any work\n```\nCross-checked against the reference toolchain:\n\n```text\n$ wasm-tools validate repro.wasm\n$ wasm-tools print repro.wasm\n(module\n  (rec\n    (type (;0;) (array i16))\n    ...\n  )\n  (elem (;0;) declare (ref null 2))\n  (elem (;1;) declare (ref null 3) (ref.null 3))\n  (elem (;2;) declare nullref)\n  ...\n)\n```\n\n```wasm-tools``` accepts the module, confirming the input is spec-compliant.\n\nNew regression test: ```test/lit/binary/gc-elem-declare.wast```\nexercises ```--roundtrip``` on the ```reproducer```, which forces Binaryen to\nwrite and re-read the module through the binary format. Before the\nfix, --roundtrip would hit the same invalid tag index error.\n\n```text\n$ ./bin/binaryen-lit test/lit/binary/gc-elem-declare.wast -v\nPASS: Binaryen lit tests :: binary/gc-elem-declare.wast\n```\n\n**Full test suite:**\n\n```text\n$ python3 check.py lit\n...\nPASS: Binaryen lit tests :: binary/gc-elem-declare.wast (94 of 994)\n...\n```\nAll lit tests pass. \n\n**Related Issues**\nFixes #8540.\n\nFollow-up Work\nNone. Declared segments remain intentionally dropped from Binaryen IR,\nso no additional handling is needed beyond correct parsing."
    },
    {
      "commit": "b7c5ff3c8b4e2f2276f79d79557b96da3d5c5332",
      "tree": "0dd982bfdb0ffafcf35b462219c158b7a0d11380",
      "parents": [
        "1883e1b8be2e0298486f281c530a0cfd37c5ad7f"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Sep 11 23:36:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 23:36:32 2026"
      },
      "message": "[ctor-eval] Fix partial evaluation of return calls (#9104)\n\nwasm-ctor-eval had a bug where return calls with non-serializable\narguments would incorrectly overwrite global state before failing to\nserialize, leading to later crashes. Fix the problem by waiting to\nupdate global state until we are sure that the operation will be\ncommitted."
    },
    {
      "commit": "1883e1b8be2e0298486f281c530a0cfd37c5ad7f",
      "tree": "60641a099315c26651b619b64c21a96d3142954e",
      "parents": [
        "45b6cd96f29e477aad6bc4ccd216121e186333b8"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Fri Sep 11 22:00:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 22:00:50 2026"
      },
      "message": "Parallelize fixed wasm-reduce testcases (#9101)\n\n- Run the 6 fixed wasm-reduce tests in parallel using\nshared.run_parallel_tests\n- Isolate per-test temporary wasm and wat filenames\n- Pipe wasm-reduce stderr to prevent interleaved output\n\nThis reduces runtime from 1m21s to 46s."
    },
    {
      "commit": "45b6cd96f29e477aad6bc4ccd216121e186333b8",
      "tree": "db47a0bba4a4b885d87965d937f424c29aae1be5",
      "parents": [
        "cb3586b8763ddd528c41524778e1c506fb13f735"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Sep 11 18:42:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 18:42:01 2026"
      },
      "message": "Optimize `publish` (#9091)\n\nOptimize out publishes of allocations and publishes of publishes where\nit is clearly not possible for there to be a write to the published\nobject between the allocation or former publish and the outer publish.\nAlso optimize out publishes of unshared and immutable reference types."
    },
    {
      "commit": "cb3586b8763ddd528c41524778e1c506fb13f735",
      "tree": "4815bc1107d93416e387f47d83d71f9c912f5a29",
      "parents": [
        "43dd29435f1148f8d444bbf0e606e737f6112bcb"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Fri Sep 11 16:36:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 16:36:12 2026"
      },
      "message": "Parallelize native example testcases (#9097)\n\n- Run native C/C++ builds, links, and runs in parallel using\nshared.run_parallel_tests\n- Remove use of `subprocess.check_call` to avoid interleaved stdout\n\nThis reduces runtime from 26s to 3s on a 64-core machine."
    },
    {
      "commit": "43dd29435f1148f8d444bbf0e606e737f6112bcb",
      "tree": "c52c01bf74afe7e52f55cfacb7019b4b0dc3b5cb",
      "parents": [
        "14bdb7f536a96b4abf65c99e768935c6d646379a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Sep 11 16:34:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 16:34:29 2026"
      },
      "message": "[NFC] Process Binary arms in natural execution order in Constraints (#9099)"
    },
    {
      "commit": "14bdb7f536a96b4abf65c99e768935c6d646379a",
      "tree": "e24fc4fa8bcfef36b7087d4a356f5ad25de79289",
      "parents": [
        "14fdf52436d9c5ecbc040cfd845aa3cb504cd230"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Thu Sep 10 22:42:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 22:42:11 2026"
      },
      "message": "Parallelize wasm2js test suite (#9090)\n\nRun the wasm2js test suite in parallel to speed up check.py runs.\nIsolate per-test temporary files and pass the debug environment\nexplicitly for thread safety.\n\nThis reduces runtime from 60s to 8s on a 128-core machine."
    },
    {
      "commit": "14fdf52436d9c5ecbc040cfd845aa3cb504cd230",
      "tree": "a809c883c52e0e536a279043f8abf8cdd9b1a00e",
      "parents": [
        "ee098931c69f230650e738b71f3e5eba2684fdd8"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Sep 10 22:07:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 22:07:16 2026"
      },
      "message": "[NFC] Reorder some small fields in wasm.h for size reduction (#9094)\n\nAs suggested in\n\nhttps://github.com/WebAssembly/binaryen/pull/9084#pullrequestreview-5163617227"
    },
    {
      "commit": "ee098931c69f230650e738b71f3e5eba2684fdd8",
      "tree": "18aa19af919f68a1fd8a2eb173872aee85d812af",
      "parents": [
        "b872d117f55a18a3f8e907b14f13eb730baa6a31"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Sep 10 19:44:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 19:44:16 2026"
      },
      "message": "[NFC] Remove ancient trapping-mode support code (#9095)\n\nThis is just not used anywhere. A long time ago asm2wasm and s2wasm\nused it, but both were removed.\n\nEmscripten no longer uses this after we switched to the LLVM wasm\nbackend:\n\nhttps://emscripten.org/docs/tools_reference/settings_reference.html#:~:text\u003dBINARYEN_TRAP_MODE%3A%20The%20wasm%20backend%20does%20not%20support%20a%20trap%20mode%20(it%20always%20clamps%2C%20in%20effect)%20(Valid%20values%3A%20%5B%2D1%5D)"
    },
    {
      "commit": "b872d117f55a18a3f8e907b14f13eb730baa6a31",
      "tree": "4e312d4d4421a4f2c10f5604c8bc97468b279881",
      "parents": [
        "994a5cb99168d29b2071053232202a5fbf66f02a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Sep 10 16:02:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 16:02:49 2026"
      },
      "message": "Optimize tail-padding reuse [NFC] (#9084)\n\nOne some ABIs, if a base class ends with padding, derived classes right\nafter it can reuse that padding, placing their data there. This PR optimizes the\nkey Expression class that way.\n\nSize changes on linux64 (common classes):\n\n| class     | old size | new size |\n| --------  | -------- | -------- |\n| LocalGet  |    24    |    16    |\n| LocalSet  |    32    |    24    |\n| Load      |    64    |    48    |\n| Store     |    80    |    64    |\n| Unary     |    32    |    24    |\n| Binary    |    40    |    32    |\n| StructGet |    40    |    24    |\n| StructSet |    48    |    32    |\n\nOn 5 real-world binaries I tested, this reduced peak RAM usage by\n3%, 4%, 6%, 9%, 9%."
    },
    {
      "commit": "994a5cb99168d29b2071053232202a5fbf66f02a",
      "tree": "b05548329ab5b8709348b11164e34d6544f1abe6",
      "parents": [
        "d57c2a8488655b1a7105f22b2611cb29bbf43356"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Sep 10 00:21:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 00:21:31 2026"
      },
      "message": "Avoid newly exposing prototypes in GTO (#9043)\n\nWhen GTO removes fields or makes them immutable, it may introduce an\nimmutable externref first field on the descriptor of a JS-exposed type\nwhere there was none before. That means that the described type could\nnow have a JS-observable prototype where it did not before optimization,\nwhich makes this a misoptimization.\n\nFix the problem by inserting an i8 placeholder first field wherever we\nwould otherwise start exposing a prototype where there was none before.\nThis is expected to be exceptionally rare in practice, so the extra\nmemory use is not expected to be a real problem.\n\nInstead of adding a placeholder field, we could have inhibited\noptimization of the existing first field, but that would be more likely\nthan an unaccessed placeholder field to have adverse effects in later\npasses.\n\nFixes #9026."
    },
    {
      "commit": "d57c2a8488655b1a7105f22b2611cb29bbf43356",
      "tree": "587955fb47cf2121f6419c66722364e0a46737a0",
      "parents": [
        "3e2bcc00a452c307d83f4d2c3381fad23efb9fa5"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Sep 09 23:45:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 23:45:17 2026"
      },
      "message": "ConstraintAnalysis: Parse AND operations (#9075)\n\nHandles this common code pattern:\n\n```wat\n(if\n  (i32.and (A) (B))\n  (then ..\n```\n\nWe can apply both A and B in the first arm, and `!(A \u0026\u0026 B)` in the\nsecond.\n\nAlso pattern-match `eqz(eqz(..))` as that is the only way to represent\n`!\u003d 0` in a nested position (otherwise, just `if (local.get)` works, which we\nalready matched)."
    },
    {
      "commit": "3e2bcc00a452c307d83f4d2c3381fad23efb9fa5",
      "tree": "0dabb08cc0d4bced728a04a1f53954b7f6d529b6",
      "parents": [
        "5d93aba7a2684fad8e3cdfcd375a82b0bf8e4604"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Sep 09 23:26:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 23:26:49 2026"
      },
      "message": "Optimize resume of non-suspending continuations (#9071)\n\nAdd a `visitResume` in OptimizeInstructions that does the normal\noptimizations on null continuations and then tries to turn resumes into\ncalls. We can do this when we are resuming a freshly allocated\ncontinuation created with a reference to a known function that\nGlobalEffects tells us will not suspend."
    },
    {
      "commit": "5d93aba7a2684fad8e3cdfcd375a82b0bf8e4604",
      "tree": "1b2fbefef58930b814d39887cb1ff51dc9b923b2",
      "parents": [
        "d2e5e03c39972054a154fa32aae9a1de1306db52"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Sep 09 23:21:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 23:21:27 2026"
      },
      "message": "Fix fallthrough for desc operands (#9089)\n\n`getImmediateFallthroughPtr` needs to make sure that the fallthrough\nvalue is not modified or otherwise rendered unusable by the side effects\nof expressions that are evaluated after the fallthrough expression but\nbefore the top-level expression. Previously the only such expression was\nthe br_if condition, and `getImmediateFallthroughPtr` only looked\nthrough the br_if if the condition did not have side effects that would\ninterfere with the rest of the fallthrough expression.\n\nMake this effect analysis slightly more precise by using `orderedBefore`\ninstead of `canReorder`. Also add similar effects analysis for the\n`desc` operands of `RefCast` and `BrOn` expressions, if it exists. These\noperands are also evaluated after the fallthrough expression.\n\nFinally, update `areConsecutiveAndEqual` in `OptimizeInstructions` to\nlook through `RefCast` and `BrOn` expressions despite any effects that\nmay occur in their `desc` operands; it will do its own more precise\neffects analysis afterward."
    },
    {
      "commit": "d2e5e03c39972054a154fa32aae9a1de1306db52",
      "tree": "1f34b8e480759030d85455bdc5d5f47c122e004f",
      "parents": [
        "ac7914969df93a06ef18b3defc6872ad2d527606"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Wed Sep 09 23:20:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 23:20:07 2026"
      },
      "message": "Parallelize wasm-opt passes and print tests (#9088)\n\nRun the wasm-opt passes and print tests in parallel to speed up check.py\nruns. Isolate per-test temporary files and pass the debug environment\nexplicitly to avoid overwriting other environments.\n\nThis reduces runtime from 30s to 4s on a 128-core machine."
    },
    {
      "commit": "ac7914969df93a06ef18b3defc6872ad2d527606",
      "tree": "6af38280116e13e32f9cdcb48a24d97970a717a5",
      "parents": [
        "8d786b30188c1a44d7c1b1686aba19031adec3a4"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Wed Sep 09 20:14:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 20:14:30 2026"
      },
      "message": "Add unified parallel test runner and refactor spec tests (#9083)\n\n- Add shared.run_parallel_tests helper with thread-safe output capture\nand interrupt handling\n- Refactor spec tests to use shared.run_parallel_tests\n\nThe eventual goal here is to have all the suites (that don\u0027t parallelize\nthemselves) using a ThreadPool to parallelize more."
    },
    {
      "commit": "8d786b30188c1a44d7c1b1686aba19031adec3a4",
      "tree": "6f219bb0aec54b43507a8d222fb3819f0c0c036c",
      "parents": [
        "72e6b562e3f196701a50d5c228ee0b313d52e7b9"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Sep 09 20:13:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 20:13:27 2026"
      },
      "message": "[CI] Use existing clang, don\u0027t install using llvm.sh (#9087)\n\n`llvm.sh` from the LLVM project is a standard way to get LLVM, but\nit downloads lots of stuff we don\u0027t need.\n\nWe can just use clang from the runner in most cases. Do that,\nand use a newer ubuntu in the one place we need newer clang\n(for clang-format-21)."
    },
    {
      "commit": "72e6b562e3f196701a50d5c228ee0b313d52e7b9",
      "tree": "e8aa8b8d7ac01ef6a24b52ea3ee93fca69b5e8fc",
      "parents": [
        "a7f790969ee888cba48f420a9621d3c65f8e4398"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Sep 09 17:45:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 17:45:26 2026"
      },
      "message": "[Stack Switching / Exceptions] Add missing null check for null exnref in resume_throw_ref (#9082)"
    },
    {
      "commit": "a7f790969ee888cba48f420a9621d3c65f8e4398",
      "tree": "83696e66aaae23b1aad0a1525927cd376f4b51b5",
      "parents": [
        "2abebd2a71634833bec018a3cbeed4c5cdb2a2ec"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Tue Sep 08 22:48:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 22:48:33 2026"
      },
      "message": "Store primitive GC arrays as raw byte buffers (#9051)\n\nGCData previously represented all allocations using a vector of\nLiterals. Storing numeric array elements this way introduces unnecessary\nmemory overhead and prevents efficient byte-level operations.\n\nRepresent primitive numeric GC arrays using a raw byte buffer in GCData\nwhile preserving Literals storage for reference arrays and structs."
    },
    {
      "commit": "2abebd2a71634833bec018a3cbeed4c5cdb2a2ec",
      "tree": "3d8974551b012b493934260e1fdcacfd67843997",
      "parents": [
        "cdb9eaa079d0264c353809df9816d0d0cf3ca36f"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Sat Sep 05 19:58:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 19:58:13 2026"
      },
      "message": "Initial support for `publish` (#9072)\n\nAs proposed in\nhttps://github.com/WebAssembly/shared-everything-threads/issues/119. Add\nparsing, printing, and validation. The optimization passes will not yet\npreserve the semantics of publish instructions in general; a future\nchange will have to augment EffectAnalyzer to model its effects\ncorrectly."
    },
    {
      "commit": "cdb9eaa079d0264c353809df9816d0d0cf3ca36f",
      "tree": "13ee3204f3b612e1fd4be077a23d8b247dc23df7",
      "parents": [
        "c75f2ae1a525c964f7f2b8067f975e9518012859"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Fri Sep 04 21:49:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 21:49:10 2026"
      },
      "message": "Use fast gzip compression level 1 in ClusterFuzz bundling (#9076)\n\nReduces compression time from ~67s to ~6.5s with a ~18MB / 9.5% increase\nin bundle size."
    },
    {
      "commit": "c75f2ae1a525c964f7f2b8067f975e9518012859",
      "tree": "84d0a91c6b8d6a19243edfcecfb85f347cc29f0a",
      "parents": [
        "180bae3ed42f49fa38b0c4bcab47f6d61e0375e8"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Sep 03 18:49:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 18:49:18 2026"
      },
      "message": "Add a suspends effect (#9070)\n\nThis will be necessary for a future optimization that turns resumes of\ncontinuations that never suspend into calls. Update the effect analysis\nof suspends to set the new effect and clobber global state because the\nsuspend handler might do anything before returning. Test that the\neffects are analyzed as intended and that they work with global effect\nanalysis."
    },
    {
      "commit": "180bae3ed42f49fa38b0c4bcab47f6d61e0375e8",
      "tree": "5377820882f294a418b9115d832acaee3f9651a5",
      "parents": [
        "6c4214f7d34da89cac016c43ce2a166294f29fa4"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Sep 02 22:49:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 22:49:42 2026"
      },
      "message": "Add a monitor_fuzz.py script (#9069)\n\nThis script runs and monitors fuzz_opt.py for up to a given number of\niterations, redirecting its output to a rotating log file and printing\nits progress to stdout once a minute. When it detects that the fuzzer\nhas found a bug, it prints the iteration number and the seed so the bug\ncan be reproduced.\n\nThis script is nicer to run in agent harnesses than raw fuzz_opt.py\nbecause agents can easily run the fuzzer for X iterations and can show\nthe progress without overly polluting the context."
    },
    {
      "commit": "6c4214f7d34da89cac016c43ce2a166294f29fa4",
      "tree": "25dfb9af841660a368cfe9b2d799b711ba4ae481",
      "parents": [
        "e7a45512aa267af4de0fe5dac0bf3d045dc50493"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Sep 02 19:46:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 19:46:29 2026"
      },
      "message": "Require matching finality in descriptor types (#9068)\n\nSee https://github.com/WebAssembly/custom-descriptors/issues/61."
    },
    {
      "commit": "e7a45512aa267af4de0fe5dac0bf3d045dc50493",
      "tree": "7ad60842981d67a71d0538088af7ca49dfb857db",
      "parents": [
        "0f19a05b6e5dfad15e9cce0175b2922949a2e1ba"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Sep 02 15:36:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 15:36:43 2026"
      },
      "message": "Constraints: Add comparisons for term-equal proving (#9066)\n\nThis handles cases where the term is equal but not constant (we already\nhandled constants before). E.g. this proves `x \u003c y \u003d\u003e x \u003c\u003d y`, which is\ntrue even though `y` is unknown."
    },
    {
      "commit": "0f19a05b6e5dfad15e9cce0175b2922949a2e1ba",
      "tree": "2c210867d69e2b7635c2f42174676b8ed5e4830a",
      "parents": [
        "20486056d457ed2167e6fbe9febbe904cac3581e"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Sep 02 15:29:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 15:29:52 2026"
      },
      "message": "OptimizeInstructions: Do not remove an inner cast when there are descriptor effects in the way (#9067)"
    },
    {
      "commit": "20486056d457ed2167e6fbe9febbe904cac3581e",
      "tree": "0323bbae8cc8c43627f8569d1f9dda3bf63fd351",
      "parents": [
        "3d7eee7a4d2c1578f56eedc7164af4728611b7fb"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Wed Sep 02 10:28:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 10:28:37 2026"
      },
      "message": "Fix typos in the codebase (#9063)\n\nThis fixes typos in the codebase using codespell."
    },
    {
      "commit": "3d7eee7a4d2c1578f56eedc7164af4728611b7fb",
      "tree": "32946cad4fac93c7d007ebd8ff2f8b31b7a70842",
      "parents": [
        "d036a3b6c3a04c5d1aefe5a945e75ab113d7dcad"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Sep 01 22:50:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 22:50:27 2026"
      },
      "message": "Increase ConstraintAnalysis limit on basic block computations (#9065)\n\n`10 * MaxBinaryActions` is far too low, as CFGs can be complex enough to\nhit that. Use something far, far higher, unlikely to ever be seen in\npractice, but enough to assert instead of hanging, in case we have a bug."
    },
    {
      "commit": "d036a3b6c3a04c5d1aefe5a945e75ab113d7dcad",
      "tree": "d3a44bb6fc3a81e561e996ec76e90d1ce5b21da3",
      "parents": [
        "6531a981a86daf8c83ba7d933d824bab27f6e02a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Sep 01 21:10:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 21:10:50 2026"
      },
      "message": "Add missing visit to descriptor in LinearExecutionWalker (#9060)"
    },
    {
      "commit": "6531a981a86daf8c83ba7d933d824bab27f6e02a",
      "tree": "fc2e84702ff44504e13e96ca79ed79d1ea5611e4",
      "parents": [
        "f870c9e0558d0d058a903c3ab4ef170c1f9f1029"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Sep 01 00:53:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 00:53:13 2026"
      },
      "message": "[wasm-split] Make mutable/immutable versions of tests (#9062)\n\nA follow-up PR will move immutable globals to secondary modules when\npossible, and it will make the test expectations of\n`transitive-globals-multi.wast` different for mutable and immutable\nglobals. Creating a new test in that PR will make it different to see\nwhat changes in that PR. So this PR duplicates the test to make mutable\nand immutable versions. Note that `$f` can\u0027t be converted to mutable\nbecause it is used in a `global.get`.\n\nThis also adds mutable/immutable versions of globals to\n`split-module-items.wast`."
    },
    {
      "commit": "f870c9e0558d0d058a903c3ab4ef170c1f9f1029",
      "tree": "19e52c7134977b96baf7a05f645b3900b1a08174",
      "parents": [
        "3a46a6c6f3aa49b3616aa6cb12f7aef5c678d170"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Aug 31 23:19:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 23:19:53 2026"
      },
      "message": "ConstraintAnalysis: Fix a hang with a tee in an increment (#9058)\n\nWe didn\u0027t look through the tee properly, and also did wasted work, since\nwe can just stop at the first tee we see and use the value there."
    },
    {
      "commit": "3a46a6c6f3aa49b3616aa6cb12f7aef5c678d170",
      "tree": "71bad09f25bda03ceba5f57dadaf422f52c0c125",
      "parents": [
        "39be64eccdf9069c8e26d28abc5c0c9932651924"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Mon Aug 31 23:18:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 23:18:11 2026"
      },
      "message": "[wasm-split] Don\u0027t use update_lit_checks.py for some tests (#9061)\n\n`update_lit_checks.py` doesn\u0027t always work well with wasm-split. For\nexample, for some tests, the test CHECK lines are mixed like this after\nrunning it:\n```wast\n;; PRIMARY: ...\n;; SECONDARY: ....\n;; PRIMARY: ...\n;; SECONDARY: ...\n```\n\nA follow-up PR will change these two test files\u0027 CHECK lines to be mixed\nwhen using `update_lit_checks.py`, and making them not use in that PR\nwill make it hard to see what actually change in that PR. To make the\nnext PR\u0027s diff tidy, this makes a few tests not use the auto-updating\nscript.\n\nThis also adds `-all` to `transtiive-globals-multi.wast` to be\nconsistent with other `transitive-globals*.wast` tests."
    },
    {
      "commit": "39be64eccdf9069c8e26d28abc5c0c9932651924",
      "tree": "24f9fee1279da57be75aef696a83833118b59c99",
      "parents": [
        "8bad4db00f130a0d4f6d1abc7cb3d0731a501df4"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Aug 31 20:51:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 20:51:29 2026"
      },
      "message": "Update to filecheck 1.0.5 (#9059)\n\nRemove the PYTHONUTF8 variable from the Windows CI because the new\nfilecheck version handles UTF-8 correcty by default."
    },
    {
      "commit": "8bad4db00f130a0d4f6d1abc7cb3d0731a501df4",
      "tree": "251dbd401dee71730417f03cb88527902790a361",
      "parents": [
        "23c19e240a816a2d1c9786e1d1b2cf0d26311b57"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 28 22:54:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 22:54:38 2026"
      },
      "message": "Fast-math mode can ignore the difference between negative zero and zero (#9056)\n\nThis is a standard part of `fast-math` in clang and gcc:\n\nhttps://clang.llvm.org/docs/UsersManual.html#cmdoption-ffast-math\n\nWe may have already been optimizing it, I\u0027m not sure, but a later\nPR will do so, so it seems worth documenting explicitly."
    },
    {
      "commit": "23c19e240a816a2d1c9786e1d1b2cf0d26311b57",
      "tree": "15773b91e5f6b4735f6cd3ee493f9f3e9f447129",
      "parents": [
        "a30696f95e3834be039dc3a0d8b6052c28d4c0a6"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Aug 28 19:57:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 19:57:41 2026"
      },
      "message": "Update pinned filecheck version to 1.0.3 (#9054)\n\nUpdate requirements-dev.txt to use the modern Python filecheck package\n(1.0.3+)."
    },
    {
      "commit": "a30696f95e3834be039dc3a0d8b6052c28d4c0a6",
      "tree": "dc541891778a799f48bacfe1128f120d59171e57",
      "parents": [
        "cdfda07b3935ff22eb309cccbb53ea302d06f931"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Aug 28 19:01:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 19:01:51 2026"
      },
      "message": "Emit CHECK-EMPTY directives in test update scripts (#9053)\n\n- Update update_lit_checks.py and update_help_checks.py to emit\n  CHECK-EMPTY: for blank lines instead of empty CHECK: / CHECK-NEXT:.\n- Update check_line_re in update_lit_checks.py to recognize all\n  standard FileCheck suffixes.\n- Regenerate help tests and manual tests with CHECK-EMPTY:."
    },
    {
      "commit": "cdfda07b3935ff22eb309cccbb53ea302d06f931",
      "tree": "028fbc3a994338f3d19438188c8950c6dcc97c37",
      "parents": [
        "0f38ce795e95ed4433ac4d4736ae0d6866e3d837"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Aug 28 19:01:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 19:01:50 2026"
      },
      "message": "Do not emit trailing whitespace on blank lines (#9052)\n\n- In printWrap, avoid printing trailing spaces before newlines and on\nempty lines.\n- Remove whitespace indentation before closing parentheses on raw string\nliteral tool descriptions in wasm-opt and wasm-reduce.\n- In printStackIR, skip Pop pseudo-instructions before emitting\nindentation so that they do not produce empty lines with indentation.\n\nThe version of filecheck we currently use handles whitespace-only lines\nfine, but LLVM FileCheck and newer versions of Python filecheck require\nexplicit `{{^ +$}}` regex matchers for such lines. It\u0027s nicer to just\nnot emit whitespace-only lines in the first place if we want to upgrade\nour version of filecheck."
    },
    {
      "commit": "0f38ce795e95ed4433ac4d4736ae0d6866e3d837",
      "tree": "1bafdad4a58531ae99bd663b97f066f03fa267d8",
      "parents": [
        "d03c25ea43d8f147fc222f9b88ff3bf641abe8da"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 28 16:44:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 16:44:09 2026"
      },
      "message": "Enable ConstraintAnalysis pass (#9010)\n\n* Run it in -O3/-Os/-Oz.\n* Update test expectations (one test improves slightly).\n\nFuzzed and validated on the emscripten test suite.\n\nFixes #9001"
    },
    {
      "commit": "d03c25ea43d8f147fc222f9b88ff3bf641abe8da",
      "tree": "7ad25640f0299adc234206a881e8149f85a2b72f",
      "parents": [
        "ece5da21a818126ac459bad18fae5f7bccb1da1a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Aug 27 23:56:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 23:56:21 2026"
      },
      "message": "Constraints: Do not optimize floats without fast-math (#9049)\n\nFloating-point math does not follow basic logic (a fact and its negation\ncan both be false, for example), so we must not optimize it. The\nexception is when NaNs are not possible, in fast-math mode."
    },
    {
      "commit": "ece5da21a818126ac459bad18fae5f7bccb1da1a",
      "tree": "6e795f3fef8e147d7281f1ec185947a32b6de7f1",
      "parents": [
        "e258ff09487373732a2113a3d400c15ba02bb03e"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Aug 27 23:12:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 23:12:21 2026"
      },
      "message": "Do not fuzz gufa-waitqueue.wast (#9050)"
    },
    {
      "commit": "e258ff09487373732a2113a3d400c15ba02bb03e",
      "tree": "18cd44633b6d923e32c5941c138049d36b67aa50",
      "parents": [
        "cce27ed1900696338d0d1d41c8645c1f6c0d6bc9"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Aug 27 17:14:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 17:14:39 2026"
      },
      "message": "Constraints: Propagate constants when proving (#9047)\n\nRather than seeing e.g. `x \u003c\u003d ..` and trying to solve it using what we\nknow about `x`, if the rhs is another local `y`, we can use what we know about `y`.\nE.g. `x \u003c\u003d y`, when `y \u003d\u003d 10`, is `x \u003c\u003d 10`."
    },
    {
      "commit": "cce27ed1900696338d0d1d41c8645c1f6c0d6bc9",
      "tree": "95bfd61067a5978bd8d3a549dc96ea6a9b77e4a0",
      "parents": [
        "b7c050e026487aad6386d4ffb49bedf433e994f9"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Aug 27 16:18:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 16:18:35 2026"
      },
      "message": "Do not flatten trapping memory segments (#9048)\n\nFlattening them might remove the trap, if the caller is not careful.\nBut, if this traps then there is no reason to optimize anyhow."
    },
    {
      "commit": "b7c050e026487aad6386d4ffb49bedf433e994f9",
      "tree": "17cb7f9bac45d7c107cb783e08e69a5e49260e9d",
      "parents": [
        "65e9a83095f789fd883d21748aca2828d69188f9"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Thu Aug 27 02:55:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 02:55:34 2026"
      },
      "message": "Fix depth map for waitqueues (#9040)\n\nPart of #8315. Without it this\n[assertion](https://github.com/WebAssembly/binaryen/blob/c3c30bb9459aff7e723ced9074fe46a2b3179d5c/src/ir/possible-contents.cpp#L2299)\nin possible-contents is hit."
    },
    {
      "commit": "65e9a83095f789fd883d21748aca2828d69188f9",
      "tree": "fc41642aafd5097089ad773e381e1c234159ddf2",
      "parents": [
        "876015e45e4f61b96041a74b83d96c8d63661fa3"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Aug 26 23:28:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 23:28:59 2026"
      },
      "message": "ConstraintAnalysis: Fix mixed signed/unsigned comparisons (#9045)\n\nThe IU64 idea was nice in theory - a single representation that includes\nboth signed and unsigned values - and it makes both of those comparisons work\nin a simple and intuitive way, but it fails on mixed comparisons. When\nyou have `x \u003e C` signed, and `x \u003c D` unsigned, IU64 represents e.g. the number\n`-1` twice, once signed and once unsigned. But what matters is the\nbit-pattern, in the end, so we really need to represent it once.\n\nTo handle that, bite the bullet and implement Spans, a set of two Span\ninstances. An unsigned range is then a single Span, and a signed one,\nfitted into the unsigned space, sometimes needs two. For example, `x \u003c\u003d\n100` signed turns into `[0..100]` and also `[0x80000000, 0xffffffff]`, that\nis, small positive numbers and also all negative numbers (and negative numbers,\nin the unsigned space, are all those with the top bit set).\n\n* Remove IU64 and add Spans.\n* Use Spans where IU64 was used.\n* Update tests."
    },
    {
      "commit": "876015e45e4f61b96041a74b83d96c8d63661fa3",
      "tree": "847ba3c20518935f0c876bd5b5f4843e80b66fb7",
      "parents": [
        "0d962bcb6c1c81b6d42fdd7794b5514410f1a68c"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Aug 26 20:00:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 20:00:06 2026"
      },
      "message": "ConstraintAnalysis: Track local copies through fallthrough values (#9046)\n\nWe did not track values flowing through, say, a block, and also did not\ntrack tees. Copies can arise in those ways, and if we didn\u0027t notice them, we\nmight not realize a local\u0027s values matter (and when we think it doesn\u0027t\nmatter, we don\u0027t track its values, which can lead to misoptimizations)."
    },
    {
      "commit": "0d962bcb6c1c81b6d42fdd7794b5514410f1a68c",
      "tree": "4d919ca6e6311e13d599f7270d55c5ddea70a0c0",
      "parents": [
        "ad982e2d20c531910c8b8c12bab532888c624c56"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Aug 26 18:36:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 18:36:51 2026"
      },
      "message": "Constraints: Fix float comparisons (#9041)\n\nWe were doing `Literal \u003d\u003d Literal`, but the right semantics are the wasm\nones that we are modelling, where `0 \u003d\u003d -0` in floats, for example. Use\n`Literal::eq` instead of `operator\u003d\u003d`, and also make `Literal::eq`\nhandle refs properly."
    },
    {
      "commit": "ad982e2d20c531910c8b8c12bab532888c624c56",
      "tree": "816341d89daa2e0a63b6112aa5c5d3e8cbddaa80",
      "parents": [
        "7bed2be74d9bd2720cde9f7329ae210dedefa627"
      ],
      "author": {
        "name": "Gauarv Chaudhary",
        "email": "137998824+ANAMASGARD@users.noreply.github.com",
        "time": "Wed Aug 26 17:57:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 17:57:35 2026"
      },
      "message": "Validate natural alignment for atomic memory operations (#8966)\n\nFixes #8962\n\nAtomic memory instructions were parsing `memarg` alignment but not\nkeeping it in the IR for RMW, cmpxchg, wait, and notify. The builder\nalso forced natural alignment, so invalid alignment from WAT or binary\ninput was silently normalized and passed validation.\n\nThe threads proposal requires atomic accesses to use natural alignment\n(see WebAssembly/threads#242). Binaryen should reject invalid modules\nrather than accept them.\n\nThis PR stores `align` on all atomic memory IR nodes, threads it through\nWAT/binary parsing and printing, and validates it centrally via the\nexisting `validateAlignment(..., isAtomic\u003dtrue)` check. The DeAlign pass\nskips atomic load/store so it does not rewrite their alignment. Adds lit\ntests and unskips `threads/atomic.wast`.\n\n## Test plan\n- [x] `test/lit/validation/atomic-alignment.wast`\n- [x] `test/lit/passes/dealign-atomics.wast`\n- [x] `threads/atomic.wast` (unskipped)\n\n---------\n\nSigned-off-by: Gaurav Chaudhary \u003cchaudharygaurav2004@gmail.com\u003e"
    },
    {
      "commit": "7bed2be74d9bd2720cde9f7329ae210dedefa627",
      "tree": "6393e195a9d196b9cde1860619275857a9c73b95",
      "parents": [
        "a048cb7f950c88610dc43666719a0a045fa23d43"
      ],
      "author": {
        "name": "Gauarv Chaudhary",
        "email": "137998824+ANAMASGARD@users.noreply.github.com",
        "time": "Wed Aug 26 15:28:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 15:28:24 2026"
      },
      "message": "Validate remaining FP16 instruction features (#8979)\n\nFixes #8313\n## Summary\n- Move seven unguarded FP16 unary conversion case labels into the\nexisting FP16-guarded fallthrough group in `visitUnary`\n- Require FP16 for `f32.load_f16` and `f32.store_f16` in\n`visitLoad`/`visitStore`\n- Add lit regression tests: 7 independent unary modules + 2 independent\nmemory modules via `foreach`\nThe SIMDTernary madd/nmadd case from the original report was fixed by\n#8403; this PR closes the remaining identifiable FP16 validation gaps\nfound by audit.\n\n## Test plan\n- [x] `build-clang/bin/binaryen-lit test/lit/validation/fp16-unary.wast\n-v`\n- [x] `build-clang/bin/binaryen-lit test/lit/validation/fp16-memory.wast\n-v`\n- [x] `build-clang/bin/binaryen-lit test/lit/validation -v`\n- [x] `./check.py --binaryen-bin build-clang/bin validator`\n\nSigned-off-by: Gaurav Chaudhary \u003cchaudharygaurav2004@gmail.com\u003e"
    },
    {
      "commit": "a048cb7f950c88610dc43666719a0a045fa23d43",
      "tree": "d3095d0f6c3db85d913408ff8b5372a6f9d7366e",
      "parents": [
        "67ac1ab072cdc7a60d34d9c142c0764855338f88"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Wed Aug 26 15:16:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 15:16:38 2026"
      },
      "message": "Interpreter: factor out applyRMW helper for atomic and GC RMW operations (#9042)"
    },
    {
      "commit": "67ac1ab072cdc7a60d34d9c142c0764855338f88",
      "tree": "def1fa02c4d93697de4efcc1fd2977aa74b644a8",
      "parents": [
        "9d6a093095a780bbaed42fce6ff8f88699e9dc21"
      ],
      "author": {
        "name": "Chris Harvey",
        "email": "1362083+chharvey@users.noreply.github.com",
        "time": "Wed Aug 26 15:04:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 15:04:25 2026"
      },
      "message": "[JS API] fix: update `ExpressionIds` enum (#9044)\n\nMissed in #9039."
    },
    {
      "commit": "9d6a093095a780bbaed42fce6ff8f88699e9dc21",
      "tree": "d3dcd5ad607ca37dbf24f64714e1cc9f5ff6fca3",
      "parents": [
        "c3c30bb9459aff7e723ced9074fe46a2b3179d5c"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Tue Aug 25 21:53:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 21:53:53 2026"
      },
      "message": "Add library API for waitqueue instructions (#9039)\n\nPart of #8315"
    },
    {
      "commit": "c3c30bb9459aff7e723ced9074fe46a2b3179d5c",
      "tree": "776a65de13b78bb0a1d2761f2776498e513090b6",
      "parents": [
        "3029fbb717390af5d49914ba635b5458dd1c6efa"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Aug 25 16:46:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 16:46:56 2026"
      },
      "message": "ConstraintAnalysis: Fix missing overflow checks in x++ (#9037)"
    },
    {
      "commit": "3029fbb717390af5d49914ba635b5458dd1c6efa",
      "tree": "0c08672b73e92d2d0157985021228d63e719c8a2",
      "parents": [
        "9af0edf4a78b531ce1e21b6325f09f4d9219466b"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Aug 24 17:12:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 17:12:01 2026"
      },
      "message": "Use Spans in cases where we can\u0027t infer them exactly (#9034)\n\n`x \u003c 10` can be turned into `Span{0,10}` exactly, but we can actually infer\nsomething from `x \u003c y` even though `y` is unknown: x cannot be MAX_INT.\nThat is, we can prove the Span must be contained in `Span{0, MAX_INT-1}`\neven if we can\u0027t provide an exact span.\n\nTo use this, move the `getSpan()` users out of the code that handles\nconstant constraints and into where non-constant ones are handled. Then\njust use `getProvenSpan` instead of `getSpan` where possible.\n\nThis is important for certain loops (later PRs will depend on this)."
    },
    {
      "commit": "9af0edf4a78b531ce1e21b6325f09f4d9219466b",
      "tree": "d80b77f7e01ba2b840cc6a30fb8936871f3b1b90",
      "parents": [
        "bb0caa3fc547e1281391b1235c93f1ed84541c2e"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Aug 24 15:44:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 15:44:04 2026"
      },
      "message": "ConstraintAnalysis fuzz bug: Do not AND after a branch is not taken (#9035)\n\nIf we prove a branch is not taken, we\u0027d hit an internal error if we tried\nto perform an AND with more constraints on it later. Once we are in\nunreachable code, we must not do anything (and the caller will handle\nthat)."
    },
    {
      "commit": "bb0caa3fc547e1281391b1235c93f1ed84541c2e",
      "tree": "5eae7d43ab2b0230782840e38e4fcc83e93088a5",
      "parents": [
        "f0fd89646afc4036ebb95cfd79f1036595b23fa4"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Aug 22 01:09:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 22 01:09:03 2026"
      },
      "message": "[wasm2js] Support nontrapping float-to-int conversions directly in JS (#9019)\n\nNow that 64-bit `trunc_sat` instructions are supported directly in\n`I64ToI32Lowering` (#9017), and 32-bit `trunc_sat` instructions are\nhandled directly in `wasm2js` (`~~expr` and `~~expr \u003e\u003e\u003e 0`), we no\nlonger need to run `llvm-nontrapping-fptoint-lowering` when\n`--emscripten` is passed.\n\nIn `wasm2js`, trapping float-to-int operations (`i32.trunc_*` and\n`i64.trunc_*`) are already lowered to non-trapping JS conversions\n(`~~expr` and float arithmetic in `I64ToI32Lowering`), which do not trap\non out-of-range values or NaN/Infinity (matching C/C++ UB semantics\nrather than strict Wasm trapping semantics).\n\nRemoving `llvm-nontrapping-fptoint-lowering` extends that same direct\napproach to `trunc_sat` instructions under `--emscripten`, eliminating\nbranching overhead and reducing code size.\n\nFinally, add a commit to `LLVMNontrappingFPToIntLowering.cpp` about it\nhave no known users after this change."
    },
    {
      "commit": "f0fd89646afc4036ebb95cfd79f1036595b23fa4",
      "tree": "59f3edfb90c9e97fb563793bc6744e0381706fcf",
      "parents": [
        "b899ca2f4c4ba7484e690b44a5696cee513ec209"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 21 22:56:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 22:56:13 2026"
      },
      "message": "Constraints: Don\u0027t store immediate contradictions (#9032)\n\nWe have a flag for it on AndedConstraintSet. When we are given an\nimmediate contradiction, set the flag rather than add it.\n\nThis makes the internal representation consistent, and later PRs\nsimpler."
    },
    {
      "commit": "b899ca2f4c4ba7484e690b44a5696cee513ec209",
      "tree": "ed1bb8cd65266d6b0479f6079a0567429ee5fca8",
      "parents": [
        "9b86340f97dd25f782bb127f4d318ebee30c74d0"
      ],
      "author": {
        "name": "lexi-nadia",
        "email": "lexinadia@google.com",
        "time": "Fri Aug 21 21:45:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 21:45:56 2026"
      },
      "message": "Revert binaryen wasm2c (#9033)\n\nPer a recent meeting, we\u0027ve decided to abandon this effort in favor of\n@keithw \u0027s project to build a fast, fully-conformant wasm2c based on\nwasm-tools."
    },
    {
      "commit": "9b86340f97dd25f782bb127f4d318ebee30c74d0",
      "tree": "aff86e1b624cf6bee13f56af4ce9b3a04729bf51",
      "parents": [
        "cafd9c30c96ae29e9632a1e38a32248dcd6d6ae4"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Fri Aug 21 19:22:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 19:22:43 2026"
      },
      "message": "Allow struct.wait on equality-comparable fields except floats (#8939)\n\nPart of #8315. #8672 added struct.wait for i32 struct fields, but left\nout support for i64 and subtypes of `ref null (shared eq)`. See the\ndetails in the\n[proposal](https://github.com/WebAssembly/shared-everything-threads/blob/main/proposals/shared-everything-threads/Overview.md#managed-waiter-queues)."
    },
    {
      "commit": "cafd9c30c96ae29e9632a1e38a32248dcd6d6ae4",
      "tree": "28db7ffe11ae357a8e16d0aa9f5999d64a6a09ef",
      "parents": [
        "293a351e4e3e57cc0a32678f12ad9879d453923a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 21 18:46:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 18:46:21 2026"
      },
      "message": "ConstraintAnalysis: Fix parsing of i64 operations (#9029)\n\nA silly bug: `i64.eqz` etc. return i32s, not i64s, but we were checking\nwith the type of the result. We need to check with the type of the inputs."
    },
    {
      "commit": "293a351e4e3e57cc0a32678f12ad9879d453923a",
      "tree": "12479aba12f4d525a0551d97b6e1afc8cd9e312b",
      "parents": [
        "93c3dbf34215c5cedf4b4ad8b5bb662143d2cabe"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Aug 21 18:40:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 18:40:02 2026"
      },
      "message": "Disallow descriptor \"L\" subtyping (#9011)\n\nThe custom descriptors proposal previously allowed subtyping that looked\nlike this:\n\n```\nA\n^\nB -\u003e B.desc\n```\n\nIt was possible for a type to have a descriptor while its supertype did\nnot.\n\nHowever, we\u0027ve decided to tighten the validation rules to disallow this\npattern. Now `A`` will also need a descriptor, `A.desc`, and `A.desc`\nwill need to be the declared supertype of `B.desc` for this to be valid.\n\nSee https://github.com/WebAssembly/custom-descriptors/issues/109."
    },
    {
      "commit": "93c3dbf34215c5cedf4b4ad8b5bb662143d2cabe",
      "tree": "2dd906338e93e6a36e9f1ce2645226073bdc0b07",
      "parents": [
        "3fe6a5fe0cc31a8a565356298bcd32fd95903abc"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Aug 21 18:35:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 18:35:02 2026"
      },
      "message": "[MakeSharedObjects] Fix casts of non-func types (#9031)\n\nWhen there are ref.tests or ref.casts to abstract non-function types,\nMakeSharedObjects should make the target types shared. It was previously\nreturning early without updating the types in this case."
    },
    {
      "commit": "3fe6a5fe0cc31a8a565356298bcd32fd95903abc",
      "tree": "b18cf0e4cc92f414311a81f1be3a2b7ef11846a8",
      "parents": [
        "d3d84f5b9587afa0313a53c3f98c649eeda29821"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 21 15:21:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 15:21:29 2026"
      },
      "message": "ConstraintAnalysis: Use spans to prove things (#9025)\n\nWhen two constraints can be expressed as spans, see if one shows the\nother is true or not.\n\nLanding this requires improving something else, otherwise tests would\nregress: we \"got lucky\" before and did not notice that `x \u003e\u003d 0` was\nalways true when unsigned, so we carried that around, and after `x++`\nit turned into `x \u003e\u003d 1` which is no longer trivial. We do need that latter\nconstraint, so add the following rule: when `x++` and `x` does not\noverflow during that addition (as proven by some bound like `x \u003c 10`)\nthen we can add `x \u003e 0` (since it can no longer be 0 due to the `x++`)."
    },
    {
      "commit": "d3d84f5b9587afa0313a53c3f98c649eeda29821",
      "tree": "07835b2060d14462fdcc422a8172ff1f69ab2209",
      "parents": [
        "02cb86f52e946f9d21f8f5d2e8ac1e649b451c4d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 21 15:21:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 15:21:03 2026"
      },
      "message": "Add ConstraintAnalysis widening and fuzz it (#9030)"
    },
    {
      "commit": "02cb86f52e946f9d21f8f5d2e8ac1e649b451c4d",
      "tree": "c9b8eae4680edf289455264bea9b5fc04b7ac949",
      "parents": [
        "10eed9ae09ee33cd51955c5dd6e4dc83af737c16"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Thu Aug 20 21:10:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 21:10:47 2026"
      },
      "message": "Port simplify-locals test to lit (#9028)\n\n`python3 scripts/port_passes_tests_to_lit.py\ntest/passes/simplify-locals.wast` + some manual changes removing\n`--all-items`.\n\nUpdating before making some changes to SimplifyLocals"
    },
    {
      "commit": "10eed9ae09ee33cd51955c5dd6e4dc83af737c16",
      "tree": "f0e41263950677b6323a143f2d27b777ed7ae176",
      "parents": [
        "e48e82c4ddf4331b4664018d670d4beef686b59b"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Aug 20 20:48:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 20:48:21 2026"
      },
      "message": "Update `CHANGELOG.md` after #9023. NFC (#9027)\n\nSee: #9023"
    },
    {
      "commit": "e48e82c4ddf4331b4664018d670d4beef686b59b",
      "tree": "e8fa651d05232a256e0e6f9a2c9e350d64a0585e",
      "parents": [
        "0af42fada13d92687f4890276da1a66b8af69483"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Aug 20 19:55:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 19:55:27 2026"
      },
      "message": "Simplify WASM_UNREACHABLE. NFC (#8976)\n\nThe `WASM_BUILTIN_UNREACHABLE` macro is unconditionally defined in\n`compiler-support.h` so checking here is redundant."
    },
    {
      "commit": "0af42fada13d92687f4890276da1a66b8af69483",
      "tree": "97460b87fcf9147a7032e962b537d4b64f147ba6",
      "parents": [
        "1dbc251239471dee31a5faba39fec1e5092f0695"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Aug 20 18:51:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 18:51:15 2026"
      },
      "message": "[i64-to-i32-lowering] Lower nontrapping float-to-int conversions (#9017)\n\nAdd support for `TruncSatSFloat32ToInt64`, `TruncSatUFloat32ToInt64`,\n`TruncSatSFloat64ToInt64`, and `TruncSatUFloat64ToInt64` to\n`I64ToI32Lowering.cpp`.\n\nIn Emscripten mode (`wasm2js --emscripten`), this is effectively a no-op\nbecause `llvm-nontrapping-fptoint-lowering` runs earlier in the pipeline\nand rewrites all `TruncSat` operations into trapping conversions before\n`i64-to-i32-lowering` executes.\n\nHowever, landing this is still useful because:\n1. Standalone `wasm2js` (without `--emscripten`) does not run\n`llvm-nontrapping-fptoint-lowering`, so modules with `i64.trunc_sat_*`\ninstructions would otherwise fail during JS generation.\n2. Direct invocations of `wasm-opt --flatten --i64-to-i32-lowering` will\nnow correctly eliminate all 64-bit operations on modules using the\nnontrapping float-to-int feature.\n3. It ensures `I64ToI32Lowering` is self-contained and handles all wasm\ni64-producing float truncation opcodes without relying on preceding\nlowering passes.\n4. Since we removed the use of the `nontrapping-fptoint-lowering` pass\nin emscripten itself, I\u0027m hoping we can followup by removing its use\nhere too and marking it for removal."
    },
    {
      "commit": "1dbc251239471dee31a5faba39fec1e5092f0695",
      "tree": "f372fbe494b1c7e7079cd42e3ee24f28b49c23a8",
      "parents": [
        "7836ed6eb3a8a447c5c98ec0769a718b96eaa8af"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Aug 20 17:45:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 17:45:23 2026"
      },
      "message": "[wasm-emscripten-finalize] Remove --no-legalize-javascript-ffi flag (#9016)\n\nThis flag was redundant given that we have `--bigint`. See\nhttps://github.com/emscripten-core/emscripten/pull/27570 for where we\nstop using it in emscripten."
    },
    {
      "commit": "7836ed6eb3a8a447c5c98ec0769a718b96eaa8af",
      "tree": "93fe0a85397058f56cc3ab027a652bf064872913",
      "parents": [
        "8d546dc4aea1c3e81e77643f1ed0dea1a649d21d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Aug 20 16:00:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 16:00:25 2026"
      },
      "message": "Add IU64 and Span classes, to compute spans over all integers (#9021)\n\nIU64 is a single numeric representation for both signed and unsigned\nintegers: it can contain as many negative values as a signed number can,\nbut also as many unsigned as well (so it needs more than 64 bits).\n\nThe Span class is a simple representation of contiguous Spans of\nnumbers."
    },
    {
      "commit": "8d546dc4aea1c3e81e77643f1ed0dea1a649d21d",
      "tree": "655716cf50c31810818c8943d51d01215b7a2f79",
      "parents": [
        "8c9b91e6a7deb3bf5a9f739b44ea7fd07fedabc0"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Aug 20 06:41:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 06:41:19 2026"
      },
      "message": "[fuzzer] Allow sign-ext, bulk-memory, and nontrapping-float-to-int in Wasm2JS (#9024)\n\nAllow `sign-ext`, `bulk-memory`, and `nontrapping-float-to-int` to be\nfuzzed by the `Wasm2JS` testcase handler in `scripts/fuzz_opt.py`. These\nfeatures are supported by `wasm2js`."
    },
    {
      "commit": "8c9b91e6a7deb3bf5a9f739b44ea7fd07fedabc0",
      "tree": "e9d97e60953a9d145083439ff6b75b149e8c1941",
      "parents": [
        "89a81ef9b72ef1c677be6be89178d19598e5760f"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Aug 20 06:09:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 06:09:12 2026"
      },
      "message": "Replace `BINARYEN_ROOT` with `BINARYEN_BIN`. NFC (#9023)\n\nThis simplifies the code and also has couple of other nice benefits.\n\n1. It matches the corresponding `--binaryen-bin` command line flags\n2. Its clear that its not actually the binaryen source root so its not\ntempting to think that you can find e.g. tests in `BINARYEN_ROOT/tests`.\nBasically `BINARYEN_ROOT` always really means `BINARYEN_BUILD_ROOT` but\n`BINARYEN_BIN` is not ambigious in the same way.\n\n The only folks who will be effected by this change are binaryen\n developer who use out-of-tree builds and use this environment\n variable rather than passing `--binaryen-bin\u003d` all over the place."
    },
    {
      "commit": "89a81ef9b72ef1c677be6be89178d19598e5760f",
      "tree": "479cface17d0b98aff1e0008c5255d9c689eb84a",
      "parents": [
        "8418a249782ecb14ecee03567ce673ffe00562c4"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Aug 19 23:02:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 23:02:06 2026"
      },
      "message": "I64ToI32Lowering: Document non-trapping float truncation behavior. NFC (#9022)\n\nDocument that `I64ToI32Lowering` is designed for the `wasm2js` pipeline\nand does not preserve strict WebAssembly trapping semantics for\nfloat-to-int conversions.\n\nAlso add comments in `lowerTruncFloatToInt` noting that the emitted\n32-bit truncations are translated to JavaScript bitwise operations in\n`wasm2js` and thus do not trap on out-of-range values, NaN, or infinity.\n\nSee: #9017"
    },
    {
      "commit": "8418a249782ecb14ecee03567ce673ffe00562c4",
      "tree": "b7e94cc520f62b308fa09d7e08476d148d16f6c6",
      "parents": [
        "daf26d2edc109a82d3ecc16cb06f9411e4c590aa"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Aug 19 21:43:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 21:43:09 2026"
      },
      "message": "Fix alignment in acquire-release spec test (#9014)\n\nInstructions like `i32.atomic.load8_u` have a different alignment than\nthe value of their argument. Add an extra `align` field to account for\nthis.\n\nThe value_type was also wrong for a few `load` operations, but this\ndidn\u0027t matter because loads don\u0027t use their `value_type`; it\u0027s only used\nto choose what param to pass as the value for stores."
    },
    {
      "commit": "daf26d2edc109a82d3ecc16cb06f9411e4c590aa",
      "tree": "56d329b4203bdabc4c7bc3329b87d25d4af054e5",
      "parents": [
        "b8c151259b349b25233ba6486b186d16feaf6d9f"
      ],
      "author": {
        "name": "Chris Harvey",
        "email": "1362083+chharvey@users.noreply.github.com",
        "time": "Wed Aug 19 21:11:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 21:11:00 2026"
      },
      "message": "update param of `BinaryenRefNull` to take `BinaryenHeapType` (#8981)\n\nAccording to the [Wasm\nspec](https://webassembly.github.io/spec/core/syntax/instructions.html#reference-instructions),\nthe `(ref.null \u003cht\u003e)` instruction takes a heap type as an argument, not\na reference type. This PR updates `BinaryenRefNull` to align with that.\n\nThe parameter is changed from a `BinaryenType` to a `BinaryenHeapType`\nand removes the nullable assertion. This puts the onus on the caller to\nmake sure they are passing in a correct type.\n\nThis is a breaking change and would require callers to be more careful\nabout their arguments, but it provides for a more spec-aligned and\npredictable API.\n\n### Problem Statement\nAs an example of a problem it solves: say you’re using GC and you define\nyour own custom heap type (example in JS):\n```wasm\n(type $NumberUnion (struct\n\t(field $tag   i8)\n\t(field $int   i64)\n\t(field $float f64)\n))\n```\n```js\nconst tb \u003d new binaryen.TypeBuilder();\ntb.setStructType(0, [\n\t{type: binaryen.i32, packedType: \"i8\"},\n\t{type: binaryen.i64, packedType: \"notPacked\"},\n\t{type: binaryen.f64, packedType: \"notPacked\"},\n]);\nconst heaptypes \u003d tb.buildAndDispose();\nconst ht_NumberUnion \u003d heaptypes[0];\n```\nand then you want to create a null-ref expression `(ref.null\n$NumberUnion)` in your module code:\n```js\nconst mod \u003d new binaryen.Module();\nmod.ref.null(ht_NumberUnion); // error: `BinaryenRefNull` currently only accepts ref types\n```\nTo fix, you have to create your own nullable ref type first:\n```js\nmod.ref.null(binaryen.getTypeFromHeapType(ht_NumberUnion, true));\n```\n\nWith this PR’s proposed change, you can now just call `BinaryenRefNull`\npassing in your heap type."
    },
    {
      "commit": "b8c151259b349b25233ba6486b186d16feaf6d9f",
      "tree": "ee4fa52ce6c787267df6f75de887c6e4a1d3d5ea",
      "parents": [
        "9bb57b3a4c5bcefc0e2be3e6bb1d4d72fffd5060"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Aug 18 22:22:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 22:22:58 2026"
      },
      "message": "[wasm-split] Deduplicate loops in shareImportableItems (NFC) (#8992)\n\nWe have six mostly identical loops in `shareImportableItems`, each for\nmemories, tables, globals, tags, data segments, and element segments.\nThis factors the core logic out as a generic lambda function."
    },
    {
      "commit": "9bb57b3a4c5bcefc0e2be3e6bb1d4d72fffd5060",
      "tree": "254958e1220133d4fb0dbfadc8b68bd214213cf2",
      "parents": [
        "7dd128dfcdef05357d2f0ae2dbb6f472ba76c3bd"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Aug 18 21:18:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 21:18:12 2026"
      },
      "message": "[wasm-split] Remove module elements in bulk (NFC) (#8990)\n\nPreviously we removed module elements one by one within a loop. But\nbecause `Module` stores a module element in both a map and a vector,\nremoving a single module element using `removeModuleElement` is O(N),\nbecause it needs to shift all vector elements after it:\nhttps://github.com/WebAssembly/binaryen/blob/302396a676433152a32375a81d71e74687c97a1b/src/wasm/wasm.cpp#L1970-L1979\n\nThis removes module elements in bulk using `removeModuleElements`, which\ndoes the shifting only once.\n\nhttps://github.com/WebAssembly/binaryen/blob/302396a676433152a32375a81d71e74687c97a1b/src/wasm/wasm.cpp#L2004-L2018\n\nCombined with #8986 and #9007, acx_gallery\u0027s running time improved by\n55.2% (30.6s -\u003e 13.7s), and essentials by 65% (225.1s -\u003e 78.8s). (for\nJul 2026 version)\n\nI guess the main reason for the running time increase in #8441 was this\nO(N) `removeModuleElement` called within a loop after all."
    },
    {
      "commit": "7dd128dfcdef05357d2f0ae2dbb6f472ba76c3bd",
      "tree": "b4f94e666955e5a12bdce217792297c49d4c35ba",
      "parents": [
        "07a6f35f8ae0e2f414b3b80e3ff324bb964fd6c0"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Aug 18 19:56:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 19:56:07 2026"
      },
      "message": "[wasm-split] Precompute ownership info (NFC) (#8986)\n\nGiven a module element name, many parts of the code queries for its\nowning modules (where the module element has to be placed) or secondary\nmodules using that module element. This adds `OwnershipTracker`, which\nprecomputes and manages that information. All calls to `getOwner` or\n`getUsingSecondaries` that required computations iterating on all\nsecondary modules which can be as many as thousands, has been replaced\nwith a call that simply returns prcomputed information.\n\nFor the Jul 2026 version of the applications received from the Dart\nteam, #9007 and this combined reduce the running time of wasm-split by\n25% for acx_gallery (30.6s -\u003e 22.7s) and by 40% for essentials (225.1s\n-\u003e 134.4s).\n\nSuggested in\nhttps://github.com/WebAssembly/binaryen/pull/8832#issuecomment-4714734931."
    },
    {
      "commit": "07a6f35f8ae0e2f414b3b80e3ff324bb964fd6c0",
      "tree": "a8b46dfbb36df08c07deeafde3e2f0202b09e2a5",
      "parents": [
        "081f8cbb1a13fe1a407861ccf50a446deaf4160f"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Mon Aug 17 23:38:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 23:38:03 2026"
      },
      "message": "[wasm-split] Don\u0027t use ParallelFunctionAnalysis in scanModule (#9007)\n\nThis removes the use of `ParallelFunctionAnalysis` within `scanModule`\n(in `computeUsedNames`), which scans `UsedNames` for each module.\n\nI\u0027m not 100% sure why but this improves running time at least for Dart\napplications. I also previously tried to use `ParallelFunctionAnalysis`\nin other functions but it resulted in slowdown so didn\u0027t do it. Maybe\ncache locality works against the parallelism.\n\nThis reduces running time of acx_gallery (Jul 2026) by 7.8% (30.6s -\u003e\n28.2s) essentials by 4.2% (225.1s -\u003e 215.6s)."
    },
    {
      "commit": "081f8cbb1a13fe1a407861ccf50a446deaf4160f",
      "tree": "6dbafd0e217b025ccb5ad33b3ac215ea4d88acbe",
      "parents": [
        "8d9412ef6431ce67f8738554c4d5f091c520b6b7"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Aug 17 22:08:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 22:08:56 2026"
      },
      "message": "[CustomDescriptors] Ensure a non-nullable sent type for br_on_cast_desc_eq on null (#9009)\n\nSimilar to #8975 but now for the sent type, not the returned type."
    },
    {
      "commit": "8d9412ef6431ce67f8738554c4d5f091c520b6b7",
      "tree": "4cbf5b647f6eb892cddcadea231a434b091a649c",
      "parents": [
        "dae272c71a468ba83084700a50f2992c7d508804"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Sat Aug 15 04:16:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 04:16:27 2026"
      },
      "message": "Add multi-threaded tests for acquire/release atomics (#8999)\n\n* Add multi-threaded execution tests exercising acquire/release atomics\n* Most tests demonstrate at least one possible result that would not be\npossible with `seqcst`. It\u0027s impossible to write a test that would fail\non an engine that implements `acqrel` using `seqcst`, since\nstrengthening an atomic operation is always sound.\n* `(atomic.fence acqrel)` currently can\u0027t be exercised in a way that\u0027s\ncorrect without being completely redundant alongside another acqrel\nload/store. With a relaxed memory ordering the test would make more\nsense.\n* Invoke the pause instruction in the `basic.wast` test which was\npreviously unexercised\n* In support.split_wast, ensure that `(thread ...)` and `(wait ...)`\nexpressions are captured in the split output (the latter is currently a\nno-op anyway but best to include it for readability and correctness).\n* Rename relaxed_atomic_execution_tests -\u003e\nacquire_release_atomics_execution_tests to match the new proposal name\n* Passes in Binaryen\u0027s interpreter in an uninteresting way because\n`(thread)` blocks always run sequentially in a blocking manner."
    },
    {
      "commit": "dae272c71a468ba83084700a50f2992c7d508804",
      "tree": "0147a64d623d33f181dddf4383e591bbe8572d11",
      "parents": [
        "e06e0f2589519ed34df1a364a6160e972e733608"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Aug 14 18:36:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 18:36:10 2026"
      },
      "message": "Generate tuple.extract of wide arithmetic in fuzzer (#9005)\n\nThe fuzzer already supported emitting wide arithmetic instructions, but\nonly when the required type was a pair of i64s. To make it easier to\ngenerate these instructions, also generate them when a single i64 is\nrequired, randomly choosing which result to use and dropping the other."
    },
    {
      "commit": "e06e0f2589519ed34df1a364a6160e972e733608",
      "tree": "b9d5507d4b515eb6e28e2fc3b759fcf4aa0894bb",
      "parents": [
        "3444b9772f39606844026d93e488fe2a2718327d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 14 16:04:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 16:04:57 2026"
      },
      "message": "ConstraintAnalysis: Handle fallthrough values (#9000)"
    },
    {
      "commit": "3444b9772f39606844026d93e488fe2a2718327d",
      "tree": "e5cda908e534585dd04fe200c641c644b7ee6b19",
      "parents": [
        "1bca181ef95a136bc9638324de846f2ece4a904d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 14 15:19:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 15:19:58 2026"
      },
      "message": "[NFC] Add a nested loop test for ConstraintAnalysis (#9004)"
    },
    {
      "commit": "1bca181ef95a136bc9638324de846f2ece4a904d",
      "tree": "36f3dcff664360c6de91b6eb8720f426e3abb6ff",
      "parents": [
        "64abb88029ff0d7010bd52c2fbc2f107a69ae02d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Aug 13 23:17:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 23:17:53 2026"
      },
      "message": "ConstraintAnalysis: Optimize loop variables with non-constant bounds (#8996)\n\nThis is perfectly safe even without any further checks, I realized."
    },
    {
      "commit": "64abb88029ff0d7010bd52c2fbc2f107a69ae02d",
      "tree": "168e19e7e198ed72759b59ab9612f4602d68a873",
      "parents": [
        "8f1562688438b2746b9a38c9bef6dcab839c6f42"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Aug 13 23:16:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 23:16:06 2026"
      },
      "message": "ConstraintAnalysis: Stop flowing in unreachable code (#9003)\n\nWithout doing so, we end up in asserts in various places, as we should\nnot be applying constraints in unreachable code."
    },
    {
      "commit": "8f1562688438b2746b9a38c9bef6dcab839c6f42",
      "tree": "3f72bb0742d855948666397e275cffdbb3745c90",
      "parents": [
        "fb7c6c2fa0d1a024cc945c97713f82e5df87eee4"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Aug 13 01:14:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 01:14:01 2026"
      },
      "message": "Fix handling of indirect return calls in DAE2 (#8994)\n\nIn an open world, DAE2 cannot optimize indirect calls or indirect call\ntargets. Since indirect return call results cannot be optimized out, and\nreturn call results must match the caller results, indirect return calls\nshould prevent the caller\u0027s results from being optimized as well. We\nwere not previously handling this correctly, leading to validation\nerrors.\n\nFixes #8968."
    }
  ],
  "next": "fb7c6c2fa0d1a024cc945c97713f82e5df87eee4"
}
