)]}'
{
  "log": [
    {
      "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."
    },
    {
      "commit": "fb7c6c2fa0d1a024cc945c97713f82e5df87eee4",
      "tree": "4c18c3e605c60982f09ce0b35e04c8c9468f9c7c",
      "parents": [
        "79dfe6b412a3c22bfdb190ed6a4d79adf734db5d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Aug 12 23:28:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 23:28:24 2026"
      },
      "message": "ConstraintAnalysis: Handle tees (#8998)"
    },
    {
      "commit": "79dfe6b412a3c22bfdb190ed6a4d79adf734db5d",
      "tree": "495a04782ba40bdbc6dd554bc864a321b045464b",
      "parents": [
        "7c4c160281aa04df0165d6a29549161af80dc221"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Aug 12 21:53:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 21:53:06 2026"
      },
      "message": "Version 132 (#8997)"
    },
    {
      "commit": "7c4c160281aa04df0165d6a29549161af80dc221",
      "tree": "564759dd0c75a5ece6ac5435bbbf7e9515609ae3",
      "parents": [
        "37f9eb33befdc0d77632344757fec7a62a605e0a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Aug 12 20:59:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 20:59:53 2026"
      },
      "message": "Do not fuzz relaxed-atomics on V8 yet (#8995)\n\nLooks like the support isn\u0027t there atm."
    },
    {
      "commit": "37f9eb33befdc0d77632344757fec7a62a605e0a",
      "tree": "c33033beb052c95e6d67fb7f6a719eaa6e33cef8",
      "parents": [
        "23b17a19c86f0b941f162e4a6546cd7ad6d62fc2"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Aug 12 18:35:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 18:35:07 2026"
      },
      "message": "ConstraintAnalysis: Handle cases with extra constraints (#8988)\n\n1. When incrementing `x++`, drop things we can\u0027t increment, rather than\n  giving up entirely.\n2. When extending ranges, do not look for a single Eq constraint to a\nconstant - do not give up if other constraints exist aside from an Eq\none.\n\nAlso fix two issues:\n\n* We negated operations rather than flipping them.\n* We should propagate constants: if x is a constant, than any constraint\n  referring to it can use that constant."
    },
    {
      "commit": "23b17a19c86f0b941f162e4a6546cd7ad6d62fc2",
      "tree": "c042c4a051980ff5c33e252344c68d593c65aa02",
      "parents": [
        "2a03c015ee53f1dd6e1de842a04099f9e8360ffc"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Aug 12 17:34:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 17:34:17 2026"
      },
      "message": "Add Abstract::flipRelational (#8993)\n\nAlso unit test negateRelational."
    },
    {
      "commit": "2a03c015ee53f1dd6e1de842a04099f9e8360ffc",
      "tree": "6bb9fa34304e9d120bcdb567292288cf09c10277",
      "parents": [
        "d8c6b2abe35ef09be794f310d54d419a39fe8b6d"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Aug 12 17:13:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 17:13:47 2026"
      },
      "message": "Generate more descriptor types in the fuzzer (#8989)\n\nUpdate a one in two chance of adding zero or more descriptor types to a\nplanned descriptor chain to be a three in four chance of adding at least\none descriptor, assuming there is enough remaining room in the rec group\nto add any."
    },
    {
      "commit": "d8c6b2abe35ef09be794f310d54d419a39fe8b6d",
      "tree": "5213edd703f90553cb5983ee9596903ba21ceb99",
      "parents": [
        "86a7c4c7cc5151052ffbec5384ea3c9dcbe12067"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Aug 12 06:18:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 06:18:26 2026"
      },
      "message": "Add a \"relaxed\" memory order (#8984)\n\nThe memory order is not the C++ relaxed memory order, but rather the\nslightly stronger load-store ordered memory order, which prevents\nout-of-thin-air values by forbidding earlier atomic loads from being\nreordered past later atomic stores. This makes it impossible to\nconstruct the self-justifying causality cycle that gives rise to\nout-of-thin-air values. The name of the memory order in both the\nimplementation and the text format is likely to change in the future to\nbecome more descriptive."
    },
    {
      "commit": "86a7c4c7cc5151052ffbec5384ea3c9dcbe12067",
      "tree": "73ae802cdd28ad6aa9cdf0be7bf813b2290b95ae",
      "parents": [
        "302396a676433152a32375a81d71e74687c97a1b"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Aug 12 06:18:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 06:18:26 2026"
      },
      "message": "Add relaxed-atomics feature flag (#8983)\n\nWe previously renamed the old \"relaxed-atomics\" feature to\n\"acquire-release-atomics.\" Add an experimental \"relaxed-atomics\" feature\nthat will allow \"relaxed\" atomics in addition to seqcst and\nacquire-release atomics. The \"relaxed\" atomics will actually be\nload-store ordered atomics, which prevent out-of-thin-air values for a\n(hopefully) modest performance cost. The name of the feature is likely\nto change in the future to more exactly represent the desired semantics."
    },
    {
      "commit": "302396a676433152a32375a81d71e74687c97a1b",
      "tree": "210c887d82a212cd26ec7d24a4ad82339c94ba3b",
      "parents": [
        "b3e9b4fbe69de607832498869b4ab8e57300c996"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Aug 11 23:49:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 23:49:31 2026"
      },
      "message": "Fuzzing: Prioritize RefCast (#8987)"
    },
    {
      "commit": "b3e9b4fbe69de607832498869b4ab8e57300c996",
      "tree": "1fc1ce8c274aa9d8375e4bf8561e08275424604e",
      "parents": [
        "6906bf011c45d647b4d2876943eafaab069d2c90"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Aug 11 22:36:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 22:36:45 2026"
      },
      "message": "Fix inplace_vector test on 32-bit (#8971)\n\nThe use of a 64-bit value led to padding being an issue. With 32-bit\nvalues, no padding should be needed.\n\nFixes #8965"
    },
    {
      "commit": "6906bf011c45d647b4d2876943eafaab069d2c90",
      "tree": "74ff74db3d0684d10b0fdca7c711a83c933f5a73",
      "parents": [
        "efe5df1714bd4c01f6de19d12c908759e720dc55"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Aug 11 19:03:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 19:03:31 2026"
      },
      "message": "ConstraintAnalysis: Optimize loops (#8980)\n\nOne Weird Trick is enough: eagerly extend ranges of constants:\n\n```\nx \u003d C\nbranch on x \u003c D where C \u003c D\n\u003d\u003e\nx \u003e\u003d C \u0026\u0026 x \u003c D\n```\n\nThis is simpler than the typical approach used in Abstract Interpretation,\nas we do it eagerly (immediately on a branch). This eagerness might\nlose some precision, but not in cases we care about, I don\u0027t think:\nif `x` is a constant and we branch on it, then it must be a loop variable\nthat will increment (if it isn\u0027t in a loop, the constant `x` would have been\npropagated to the branch by other passes)."
    },
    {
      "commit": "efe5df1714bd4c01f6de19d12c908759e720dc55",
      "tree": "8981dfd3cc8b28637e3c0aa6a4cda42fa80e20c8",
      "parents": [
        "ab7d0f5965f2e38c62db2c3aada18e208102273e"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Aug 10 17:22:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 10 17:22:30 2026"
      },
      "message": "[CustomDescriptors] Ensure a non-nullable type for br_on_cast_desc_eq on null (#8975)\n\nIf the desc is null, the cast is not even executed, making it\nunreachable. We typed it as nullable if the ref was (in the code path `type \u003d\nref-\u003etype;`), but emiting an uninhabitable type is more precise, and also avoids a\nfuzz bug (see new test) where refinalize actually un-refined a type: it\nturned it from non-nullable to nullable."
    },
    {
      "commit": "ab7d0f5965f2e38c62db2c3aada18e208102273e",
      "tree": "d205006a097cd74cb1c17b1ca8ea536e3b4df98c",
      "parents": [
        "f1b0e46c248cb136095d88d6db9f3b62eca38844"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Aug 10 15:18:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 10 15:18:02 2026"
      },
      "message": "Rename relaxed-atomics to acquire-release-atomics (#8982)\n\nThis is a more precise name now that the proposal will definitely\ninclude only acquire-release atomics.\n\nSee https://github.com/WebAssembly/acquire-release-atomics/issues/2."
    },
    {
      "commit": "f1b0e46c248cb136095d88d6db9f3b62eca38844",
      "tree": "ef7f09b4f6c6948d368614e24907ae2849c6c267",
      "parents": [
        "e27398d8e52a01e6cf1b5b5c91d1aabdb76d960c"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 07 18:52:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 18:52:00 2026"
      },
      "message": "Fix untaken BrOn branch analysis (#8970)\n\nWe skipped the branch if we never took it, but that is not correct,\nsee `visitBreak` above - we need to note all the branches, taken or not, or\nelse we can hit an assertion. (We rely on optimization passes to remove\nuntaken branch instructions.)"
    },
    {
      "commit": "e27398d8e52a01e6cf1b5b5c91d1aabdb76d960c",
      "tree": "32bf282fc18d959f4523007547f9a337873b963e",
      "parents": [
        "042f47fd01a27c3a866fe69cd6d76b60d919685e"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Aug 07 18:28:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 18:28:31 2026"
      },
      "message": "ConstraintAnalysis: Increment constants (#8969)\n\nIf we know `x \u003d\u003d C` and have `x++`, we can set it to `x \u003d\u003d C + 1`, etc.\n\nA risk when computing this is that we might end up doing `x++` from\n0 to 1 to 2 to 3 and so forth, until we reach some high limit. Add a\nmechanism to assert on such pointless work.\n\nThis is necessary to compute loop overflows."
    },
    {
      "commit": "042f47fd01a27c3a866fe69cd6d76b60d919685e",
      "tree": "89fc9d81a563026ecb51c4a6a36b79e854d944aa",
      "parents": [
        "a0463cbeae1e06434caadc2866ad538b21936095"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Aug 07 17:59:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 17:59:16 2026"
      },
      "message": "Consistent header guards. NFC (#8977)\n\nOne bad offender here was src/passes/call-utils.h"
    },
    {
      "commit": "a0463cbeae1e06434caadc2866ad538b21936095",
      "tree": "fed0c5d6db78b3a8ecab862e7ca05776c5eceba9",
      "parents": [
        "b97310a2f0c5db3ae30e5e52d4430d3e82acfd56"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Aug 07 12:55:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 12:55:17 2026"
      },
      "message": "Fix ReFinalize in MakeSharedObjects (#8974)\n\nWe need to refinalize after updating the types to make sure e.g.\nstruct.get of a field that used to contain a function reference has the\nproper i31ref type."
    },
    {
      "commit": "b97310a2f0c5db3ae30e5e52d4430d3e82acfd56",
      "tree": "2e3597bf0c801527758d3fe08607472d8644a15e",
      "parents": [
        "e821d1759676e6402ba9359c01871a909c24fb13"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Aug 06 20:33:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 20:33:57 2026"
      },
      "message": "Add BYN_WARN_UNUSED macro and apply to Name and IString (#8973)\n\nDefine `BYN_WARN_UNUSED` using `[[gnu::warn_unused]]` for GCC/Clang and\nfallback for other compilers. Annotating `IString` and `Name` with this\nattribute allows compilers to report unused variable diagnostics for\ndefault-constructed instances regardless of non-trivial constructors.\n\nFollowup to #8972.\n\nOnce this lands we can extend this to other types to get better\ncoverage."
    },
    {
      "commit": "e821d1759676e6402ba9359c01871a909c24fb13",
      "tree": "4a90c7432ccbf12dcaeeadee6847d09cc6cc4009",
      "parents": [
        "fc8f31cfe291cb7a7305cd845de6b68708046f2c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Aug 05 18:47:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 18:47:02 2026"
      },
      "message": "Remove unused variables. NFC (#8972)\n\nThese were preventing the latest version of llvm from building binaryen.\n\nThis was triggered by https://github.com/llvm/llvm-project/pull/203084\n\nSee\nhttps://logs.chromium.org/logs/emscripten-releases/buildbucket/cr-buildbucket/8674381472972128657/+/u/Build_Binaryen/stdout"
    },
    {
      "commit": "fc8f31cfe291cb7a7305cd845de6b68708046f2c",
      "tree": "894f86b28d927a694bb6d400dda1f73c07685fbd",
      "parents": [
        "8e444fc6f5cfc59d22ecc02be5ea17d9cb86290f"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Aug 04 23:17:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 23:17:26 2026"
      },
      "message": "[Relaxed SIMD] Fix validation and fuzzer handling (#8967)\n\n1. An opcode was not noted as requiring the feature.\n2. Like NaNs, we can\u0027t optimize wasms and then compare them, if relaxed\nSIMD is enabled."
    },
    {
      "commit": "8e444fc6f5cfc59d22ecc02be5ea17d9cb86290f",
      "tree": "97bc4810a236078474528d7676489b6f16737693",
      "parents": [
        "33abc59a3ba7eb86149b7d019d51cb820b13e63b"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Aug 03 16:45:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 16:45:10 2026"
      },
      "message": "ConstraintAnalysis: Add missing unsigned cases (#8963)"
    },
    {
      "commit": "33abc59a3ba7eb86149b7d019d51cb820b13e63b",
      "tree": "2eabd390248f7b46714bc551ebc29181baa14a11",
      "parents": [
        "b8f91600f5476f7e65e8b5f5a445face9b262b6c"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Fri Jul 31 22:27:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 22:27:38 2026"
      },
      "message": "Fix alignment in relaxed atomics spec test (#8961)\n\nThe spec test intends to use the natural alignment for all instructions,\nbut it\u0027s choosing an alignment based on the memory address type rather\nthan the size of the load/store. This means that sometimes the alignment\nis too small (4 bytes for an 8-byte load/store in a 32-bit memory), and\nsometimes the alignment is too large (8 bytes for a 4-byte load/store in\na 64-bit memory) both of which are a [validation\nerror](https://github.com/stevenfontanella/threads/blob/f521d7b3c19bcc9097aad979b3b91837eab88d83/interpreter/valid/valid.ml#L206)\n(but are not in Binaryen today).\n\nUse the size of the load/store as the alignment instead.\n\nSpec reference:\n\u003cimg width\u003d\"737\" height\u003d\"216\" alt\u003d\"image\"\nsrc\u003d\"https://github.com/user-attachments/assets/b86de03e-1316-4c2c-9a12-80773fb88119\"\n/\u003e"
    },
    {
      "commit": "b8f91600f5476f7e65e8b5f5a445face9b262b6c",
      "tree": "4e7b08de7602dc428d98f41b1ee2cb75724b947f",
      "parents": [
        "9c108679d63bef60a44b1e21d3b2ee6bc3747f57"
      ],
      "author": {
        "name": "Chris Harvey",
        "email": "1362083+chharvey@users.noreply.github.com",
        "time": "Fri Jul 31 18:04:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 18:04:06 2026"
      },
      "message": "[JS API] Merge `Module[\u0027readBinaryWithFeatures\u0027]` into `Module[\u0027readBinary\u0027]` (#8954)\n\nRemoves method `binaryen.readBinaryWithFeatures()` in favor of\n`binaryen.readBinary()`, which now supports a `features` parameter that\ndefaults to MVP if omitted.\n\nThis aligns cleanly with #8901, which removed `parseTextWithFeatures` in\nfavor of `parseText`."
    },
    {
      "commit": "9c108679d63bef60a44b1e21d3b2ee6bc3747f57",
      "tree": "16717f472fab66acf1f08e7a51cbaac3950297b8",
      "parents": [
        "d78c2455f33ef13a57840eb480e7843db246d332"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jul 31 18:01:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 18:01:45 2026"
      },
      "message": "ConstraintAnalysis: Add more simple inequalities (#8955)"
    },
    {
      "commit": "d78c2455f33ef13a57840eb480e7843db246d332",
      "tree": "6d9a6002e3fdb532c1b8e215e9b6af5fc42b645a",
      "parents": [
        "26d46edccf594f4cb22b4897407157f95e4aa4a5"
      ],
      "author": {
        "name": "lexi-nadia",
        "email": "lexinadia@google.com",
        "time": "Fri Jul 31 15:35:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 15:35:55 2026"
      },
      "message": "[wasm2c] Only run clang-tidy-diff on files that are compiled (#8959)\n\nAlso, remove the wasm-rt CMake library that was only added so that\nclang-tidy-diff would know these files are C, not C++."
    },
    {
      "commit": "26d46edccf594f4cb22b4897407157f95e4aa4a5",
      "tree": "dd25dca74d1f00f7302794a9a21dbd998026d419",
      "parents": [
        "16272bac649b8f93682cebd0cd7fce6e3834c286"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Jul 30 23:02:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 23:02:16 2026"
      },
      "message": "Add a MakeSharedObjects pass (#8953)\n\nThis pass makes all functions unshared and all structs and arrays\nshared. It avoids validation errors from storing unshared function\nreferences in shared structs and arrays by replacing all function\nreferences with i31 references holding indices into a function table.\nIndirect calls and casts are updated to extract their function reference\nfrom the table.\n\nThis new pass will make it easier to convert unshared Wasm GC programs\nto run on the shared heap for testing purposes. It will also lower\nshared functions emitted by toolchains to allow them to run on\nprototypes that do not support shared functions."
    },
    {
      "commit": "16272bac649b8f93682cebd0cd7fce6e3834c286",
      "tree": "1ac2d1891b3c60fb2a47400977db394cbdaf2748",
      "parents": [
        "a9791003a3632e7e80dc73fa6b253816f1079343"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Jul 30 20:58:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 20:58:23 2026"
      },
      "message": "Fix determinism bug when mapping type names (#8956)\n\nWhen we rewrite module types, we must associate the old type names and\nindices with the new types they are being mapped to. The code for this\nwas previously sensitive to the iteration order over the old-to-new type\nmap because it modified the module\u0027s type names as it traversed them and\nbecause visitation order determined which name was kept in cases where\nmultiple old types map to the same new type. Fix both problems by\nkeeping the lesser names and indices in the case of merges and by not\nupdating the module type names until after the new type names have been\nfully populated."
    },
    {
      "commit": "a9791003a3632e7e80dc73fa6b253816f1079343",
      "tree": "6d1e354c3246f1ba945d0abecb1973cc21f8651a",
      "parents": [
        "ecb3d997e8810d560248518e27738fa8ffafcc4b"
      ],
      "author": {
        "name": "lexi-nadia",
        "email": "me@lexibromfield.com",
        "time": "Thu Jul 30 18:58:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 18:58:48 2026"
      },
      "message": "[wasm2c] Add the very beginning of a wasm2c implementation and test harness (#8763)\n\nThis change adds an extremely bare-bones wasm2c implementation and test\nharness.\n\nMost of the code here is imported directly from WABT, particularly the\nboilerplate code and tests. The only substantive new code is in\nsrc/tools/wasm2c/* and scripts/test/wasm2c.py.\n\nI tried to prune this down to be as minimal as possible while still\nproviding a useful checkpoint, but I\u0027m not sure I succeeded. Please feel\nfree to offer suggestions if you see more ways to shrink this down."
    },
    {
      "commit": "ecb3d997e8810d560248518e27738fa8ffafcc4b",
      "tree": "7bfebc3aaa48246d3747b2aee7ccf38583e62395",
      "parents": [
        "0430c35a1e311020996865129c9fd0958ed90bb8"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Jul 29 21:18:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 21:18:15 2026"
      },
      "message": "[NFC] Add file-level comments to IRBuilder (#8946)\n\nExplain the core mechanism and the main complications necessary to\nbridge the gap between WebAssembly and Binaryen IR. This is meant to be\na gentle introduction to IRBuilder, not a replacement for the detailed\ncomments found throughout the file."
    },
    {
      "commit": "0430c35a1e311020996865129c9fd0958ed90bb8",
      "tree": "adc01890315e8de066058092bee6ece5108e7227",
      "parents": [
        "e336c23bb32ec63e8e2ba4913e131f9582de6f02"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Jul 29 21:18:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 21:18:14 2026"
      },
      "message": "Fix binary spans on wrapper blocks in IRBuilder (#8944)\n\nWhen a parsed module contains branches to control flow structures other\nthan blocks or loops, IRBuilder must create a wrapper block around the\ncontrol flow structure for those branches to target. When that wrapper\nblock is pushed onto the stack, the current binary position is attached\nas its end position. But the matching start position was previously\nstill attached to the original control flow structure. The lack of an\nend position on the original control flow structure could cause an\nassertion failure later when then debug info was written back out.\n\nFix the bug by moving the start position from the original control flow\nstructure to the wrapper block where the matching end position will be\nattached. Update printing of code offsets to include the end offset to\nmake it more obvious in the test that the bug is fixed.\n\nFixes #8940."
    },
    {
      "commit": "e336c23bb32ec63e8e2ba4913e131f9582de6f02",
      "tree": "c8df4d92593a69f8212ef485d8e876f9ea95f58c",
      "parents": [
        "15bd4f0602725b4c63546686cbb9fae51a83396d"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Jul 29 21:15:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 21:15:15 2026"
      },
      "message": "Update ruff to v0.16.0 (#8952)"
    },
    {
      "commit": "15bd4f0602725b4c63546686cbb9fae51a83396d",
      "tree": "f4062cf4e36836ad3636a54438f2bae3941ee0ed",
      "parents": [
        "bbfbb2531cdf32fb65b8e3754e440f687df00767"
      ],
      "author": {
        "name": "Chris Harvey",
        "email": "1362083+chharvey@users.noreply.github.com",
        "time": "Wed Jul 29 21:11:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 21:11:25 2026"
      },
      "message": "[JS API] Expose BinaryenStringConst (#8951)\n\nExposes the `BinaryenStringConst` API via a new `Module#string.const()`\nmethod.\n\nUsage:\n```js\nconst mod \u003d new binaryen.Module();\nconst expr \u003d mod.string.const(\"a JavaScript string value\");\n```\n\nSupersedes #8160."
    }
  ],
  "next": "bbfbb2531cdf32fb65b8e3754e440f687df00767"
}
