)]}'
{
  "log": [
    {
      "commit": "d3029d2b975488acdf9253eb2994a3fc55bd3549",
      "tree": "f16ec443dc956a9fbd17be2c9d0ecce3089d4a6a",
      "parents": [
        "b5b9ebd748027515445ac7f98ffb69ad7204be75"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Fri May 15 22:34:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 22:34:18 2026"
      },
      "message": "[wasm-split] Fix table naming conflicts (#8708)\n\nAfter #8688, we split module elements, including tables, earlier than\n`indirectCallsToSecondaryFunctions`, which calls `getSlot`, which calls\n`makeTable`. But when making a table, we only try to get a valid name\nwithin the primary module:\n\nhttps://github.com/WebAssembly/binaryen/blob/2f1f55aef6d9adfa6fdc2c25e46d202232dbf6e2/src/ir/module-splitting.cpp#L235-L238\n\nIf an existing table\u0027s name was `0` and it was moved to a secondary\nmodule in `shareImportable` already, this will happily create an active\ntable with the name `0` again. And in `setupTablePatching`, because the\nsecondary module already has `0`, the active table will not be exported\n/ imported there:\n\nhttps://github.com/WebAssembly/binaryen/blob/2f1f55aef6d9adfa6fdc2c25e46d202232dbf6e2/src/ir/module-splitting.cpp#L1103-L1117\n\nBut this existing table is NOT the active table, and this table\u0027s type\nmay not even be `funcref`.\n\nThis fixes `makeTable` so that it makes a table name that does not\ncollide with any table names not only in the primary module but all\nsecondary modules.\n\nThis also disables `Split` fuzzer for now; I\u0027m finding more bugs, so\nI\u0027ll reenable it after it is more stabilized."
    },
    {
      "commit": "b5b9ebd748027515445ac7f98ffb69ad7204be75",
      "tree": "9b502b1ed993ac50e2aeeb6537726352b6edd8d5",
      "parents": [
        "e7987f62a5b31cd165cf4ce9fb6ff40633150315"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Fri May 15 21:47:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 21:47:51 2026"
      },
      "message": "[wasm-split] Sync secondary tables\u0027 initial/max (#8714)\n\nWhen an existing table is used as the active table, after we increate\nthe size of the table by placing placeholders, we should sync it to the\nsecondary modules\u0027 imports of the table.\n\nFixes https://github.com/emscripten-core/emscripten/issues/26959."
    },
    {
      "commit": "e7987f62a5b31cd165cf4ce9fb6ff40633150315",
      "tree": "27367a87a22d466b88ee83a22dff2f2675c8be92",
      "parents": [
        "2458c41db802168a3d7f26c060f0332b416d89c7"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Fri May 15 21:01:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 21:01:50 2026"
      },
      "message": "[wasm-split] Use Name() for nonexistent global base (NFC) (#8704)\n\nRather than using an empty string, this uses `Name()` when an active\ntable does not have a base global. This allows us to check for the\nexistence of the global by just\n```cpp\nif (tableManager.activeBase.global)\n```\nrather than\n```cpp\nif (tableManager.activeBase.global.size())\n```"
    },
    {
      "commit": "2458c41db802168a3d7f26c060f0332b416d89c7",
      "tree": "3b1f5775d62c0dc4e6e1cffcc89689f1b6679a52",
      "parents": [
        "332a49f12888baac1479e721187f660dc018e1e4"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri May 15 20:57:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 20:57:13 2026"
      },
      "message": "Supply fuzz imports to second modules as well (#8705)\n\nUpdate execution-results.h to supply standard fuzzing imports, including\nimported externref globals materialized on demand, to second modules.\nThis matches the behavior of fuzz_shell.js, which already makes these\nimports available to both modules."
    },
    {
      "commit": "332a49f12888baac1479e721187f660dc018e1e4",
      "tree": "82546a54d2fadd606342de7261d401d6f96435eb",
      "parents": [
        "2f1f55aef6d9adfa6fdc2c25e46d202232dbf6e2"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri May 15 20:01:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 20:01:19 2026"
      },
      "message": "PrintBoundary pass, emitting a JSON summary of the API boundary of the module (#8703)"
    },
    {
      "commit": "2f1f55aef6d9adfa6fdc2c25e46d202232dbf6e2",
      "tree": "12a2d48c788ae2c980a07e6ddefad66dd9b218e9",
      "parents": [
        "02f114bd79dde59a3185eac203eef6a872f0e34a"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Thu May 14 20:34:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 14 20:34:32 2026"
      },
      "message": "[wasm-split] Split module elements early (#8688)\n\nBefore #8443, we scanned `ref.func`s in global initializers early in\n`indirectReferencesToSecondaryFunctions` and created trampolines for\nthem and replaced `ref.func $func`s with `ref.func $trampoline_func` if\n`func` was set to move to a secondary module. But in case the global\ncontaining `ref.func $trampoline_func` also ends up moving to the same\nsecondary module, creating trampoline and using it was not necessary,\nbecause the global can simply use `ref.func $func` because `func` is in\nthe same secondary module.\n\nTo fix this, in #8443, we postponed creating trampolines for `ref.func`s\nin global initializers until `shareImportableItems`. This had a problem,\nbecause we end up creating new trampolines late in\n`shareImportableItems`. But trampolines were designed to go through\n`indirectCallsToSecondaryFunctions` and `setupTablePatching`, so those\nlate trampolines were invalid, like\n```wast\n(func $trampoline_foo\n  (call $foo)\n)\n```\nwhen `foo` was in a secondary module. This was supposed to be converted\nto a `call_indirect` in `indirectCallsToSecondaryFunctions` and the\ntable elements were supposed to set up in `setupTablePatching`.\n\n---\n\nThis moves `shareImportableItems` before\n`indirectReferencesToSecondaryFunctions`. Turns out, except for the\nactive table and its base global, we can do all splitting before we make\nmost of the changes related to splitting. This also simplifies\n`shareImportableItems` because we can now delete code handling the\nconsequences of various transformations.\n\nBecause the active table and its base global may not be registered as\n\"used\" in `shareImportableItems` before `setupTablePatching`, we make\nsure they are correctly shared with secondary modules in\n`setupTablePatching`.\n\n`active-table-base-global-used-elsewhere.wast` has some edge cases that\nI feel easy to miss, because now we specially handle the active table\nand the base global in `setupTablePatching`. `global-reffunc.wast` is\nthe same but just renamed expectation rewritten. `global-reffunc2.wast`\nis the failing case simplified from #8510. Other test changes are just\nthe changes in the creation order of module elements and not meaningful.\n\nReplaces #8542 and fixes #8510."
    },
    {
      "commit": "02f114bd79dde59a3185eac203eef6a872f0e34a",
      "tree": "d7e7c41680e52705cc57cb292b1fea614873746c",
      "parents": [
        "bb6ead889c9fd0bde9ad7717182d16d6e41e92a7"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 14 19:58:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 14 19:58:03 2026"
      },
      "message": "JSON: Implement printing for all types (#8701)\n\nAlso add minor quality-of-life improvements like nicer constructors."
    },
    {
      "commit": "bb6ead889c9fd0bde9ad7717182d16d6e41e92a7",
      "tree": "407304695c55d778246fe760cd3ed3efa817c6a3",
      "parents": [
        "a8df1c08bd807fb7308bf9163034b9023b0d6f95"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 14 15:28:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 14 15:28:41 2026"
      },
      "message": "execution-results: Handle a trap during start (#8699)\n\nBefore, the entire process crashed on a thrown exception there, as it\nwas not handled."
    },
    {
      "commit": "a8df1c08bd807fb7308bf9163034b9023b0d6f95",
      "tree": "963c0a10a3ec6aff0c59c20218f3b4faa4fd830e",
      "parents": [
        "66c5d775459849b8d69204df95c92f768c7ee125"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu May 14 00:27:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 14 00:27:04 2026"
      },
      "message": "[wasm-reduce] Remove functions with delta debugging (#8690)\n\nAlso take care not to remove functions that are referenced from\nmodule-level code, since in general those references cannot be replaced\nwith anything else. When we remove functions, use ChildLocalizer to keep\nany children with side effects, since they might be important for\nreproducing the issue. Also try to replace calls to removed functions\nwith constants if possible to avoid inserting unnecessary traps. Unlike\nthe old implementation, this reduction scheme avoids wasted work by\nensuring that the reduced module is still valid."
    },
    {
      "commit": "66c5d775459849b8d69204df95c92f768c7ee125",
      "tree": "02c3a3bd546f47cc10fa7a6c278629f7077fac8a",
      "parents": [
        "2f1a08b8f84282f401be1ad406904355150b5ac3"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 14 00:07:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 14 00:07:57 2026"
      },
      "message": "[wasm-merge] Handle merging of start functions with control flow (#8697)\n\nWhen the merged modules both had start functions, we\u0027d inline one\ninto the other. However, we didn\u0027t use the full inlining logic with\nhandles control flow, so a return in the code caused a problem:\n\n```wat\n(func $start-a\n  A\n  (return)\n)\n(func $start-b\n  B\n)\n\n;; naively-merged starts\n(func $merged\n  A\n  (return)  ;; this ends up skipping B\n  B\n)\n```\n\nAs a fix, avoid attempts to be clever and just make a new function with\ntwo calls to the starts, in order.\n\nFixes #8692"
    },
    {
      "commit": "2f1a08b8f84282f401be1ad406904355150b5ac3",
      "tree": "83cbeeebbd6dd5b3141c7fba9102bbbeab207f02",
      "parents": [
        "36b703354301c89e7cb3bc6396a572562746669d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed May 13 23:15:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 23:15:16 2026"
      },
      "message": "Fuzzer: Do not emit calls to table.get when trivialNesting is set (#8700)\n\n`trivialNesting` means we were asked to emit something as trivial as\npossible.\n\nThe other option in this code, to emit a `ref.func` for the `funcref`\ntype, is far simpler."
    },
    {
      "commit": "36b703354301c89e7cb3bc6396a572562746669d",
      "tree": "a3c66436cce25b6901d68665596ccc4c5b7e73ce",
      "parents": [
        "d9fd5da61afc0e540b0275f21b8cbf802cf860de"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue May 12 16:31:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 16:31:26 2026"
      },
      "message": "Testing: Add verbose logging feature, and stop excessive spec logging (#8684)"
    },
    {
      "commit": "d9fd5da61afc0e540b0275f21b8cbf802cf860de",
      "tree": "e140488d1eb94c56535184365f0149bf816baed7",
      "parents": [
        "79d54a16a1ce488dbc4fde1c80c438cad4c89df8"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Mon May 11 18:57:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 18:57:32 2026"
      },
      "message": "[wasm-split] Move shareImportableItems (NFC) (#8686)\n\nThis just moves the function up in the file. A follow-up PR will change\nthe order of functions and run it before\n`indirectReferencesToSecondaryFunctions`, so I\u0027d like to match the order\nof the functions in the file to match that order, but if I move the\nfunction in that PR, it is hard to see what changes in the function."
    },
    {
      "commit": "79d54a16a1ce488dbc4fde1c80c438cad4c89df8",
      "tree": "e286649ddb787b4fbc05bba5958784c08336ec0e",
      "parents": [
        "6c3212577de63ee451ef2784836d5a5dfce3d37f"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri May 08 23:19:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 23:19:11 2026"
      },
      "message": "Fix crash in MinimizeRecGroups (#8685)\n\nWe previously did not store type indices for public types. This caused a\ncrash when the logic for comparing rec groups came across references to\npublic types and assumed there would be indices to compare them by.\n\nFixes #8682."
    },
    {
      "commit": "6c3212577de63ee451ef2784836d5a5dfce3d37f",
      "tree": "9b9d4d5024f4935a5abdef2e42961ad2e46d36cf",
      "parents": [
        "e9b4b4c45684882f5756411c64c603e4716bdd73"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri May 08 17:31:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 17:31:10 2026"
      },
      "message": "Fuzzer: Fix subtyping of bottom types when fuzzing against JS (#8683)\n\nmaybeRefine should refine between old and new, and we were missing\na check for being refined enough when traversing all subtypes of bottom.\nAs a result, we could un-refine, which can break if a call exists."
    },
    {
      "commit": "e9b4b4c45684882f5756411c64c603e4716bdd73",
      "tree": "6962ebb738fd04f36620c0f84193f9f648158609",
      "parents": [
        "3180c6f73e9f9598016b6a8a8346b81af0b9a5f2"
      ],
      "author": {
        "name": "Changqing  Jing",
        "email": "changqing.jing@bmw.com",
        "time": "Fri May 08 17:30:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 17:30:57 2026"
      },
      "message": "[NFC] cache repeated tree walks to avoid O(N^2) in optimizeTerminatingTails in CodeFolding (#8602)\n\nCache the result of getBranchTargets(getFunction()-\u003ebody) in\noptimizeTerminatingTails so that recursive calls share the same computed\nset rather than each re-walking the entire function body. This avoids\nO(N²) behavior where N is the size of the function body, since the\nrecursive calls previously each performed an O(N) tree walk. The cached\ntargets are computed lazily on first need and passed through to the\ncanMove overload that accepts pre-computed branch targets.\n\n## Benmark data\n\nFor the test case in\nhttps://github.com/WebAssembly/binaryen/issues/7319#issuecomment-2678393304\nMain head:\n```shell\ntime ./build/bin/wasm-opt --code-folding --enable-bulk-memory --enable-multivalue --enable-reference-types --enable-gc --enable-tail-call --enable-exception-handling -o /dev/null ./test3.wasm\n\nreal    5m45.996s\nuser    6m6.267s\nsys     0m3.798s\n```\n\nThis PR:\n```shell\ntime ./build/bin/wasm-opt --code-folding --enable-bulk-memory --enable-multivalue --enable-reference-types --enable-gc --enable-tail-call --enable-exception-handling -o /dev/null ./test3.wasm\n\nreal    2m2.380s\nuser    2m25.700s\nsys     0m2.449s\n```\n\n## Benchmark regression test\nTest case:\nhttps://jetbrains.github.io/kotlinconf-app/73cbe24d7cf5a54d37ad.wasm\nOn main\n```shell\nPerformance counter stats for \u0027build/bin/wasm-opt 73cbe24d7cf5a54d37ad.wasm -all --code-folding -o /dev/null\u0027 (10 runs):\n\n        4837936912      task-clock                       #    1.445 CPUs utilized               ( +-  0.51% )\n               114      context-switches                 #   23.564 /sec                        ( +-  7.58% )\n                 7      cpu-migrations                   #    1.447 /sec                        ( +- 16.88% )\n             46271      page-faults                      #    9.564 K/sec                       ( +-  0.00% )\n       13431328103      instructions                     #    1.21  insn per cycle              ( +-  0.01% )\n       11125222873      cycles                           #    2.300 GHz                         ( +-  0.51% )\n          64641504      branch-misses                                                           ( +-  1.26% )\n\n            3.3484 +- 0.0221 seconds time elapsed  ( +-  0.66% )\n```\n\nOn current PR\n```shell\n Performance counter stats for \u0027build/bin/wasm-opt 73cbe24d7cf5a54d37ad.wasm -all --code-folding -o /dev/null\u0027 (10 runs):\n\n        4802304211      task-clock                       #    1.437 CPUs utilized               ( +-  0.47% )\n               125      context-switches                 #   26.029 /sec                        ( +-  6.50% )\n                 8      cpu-migrations                   #    1.666 /sec                        ( +- 14.20% )\n             46272      page-faults                      #    9.635 K/sec                       ( +-  0.00% )\n       13391520427      instructions                     #    1.21  insn per cycle              ( +-  0.01% )\n       11043221889      cycles                           #    2.300 GHz                         ( +-  0.47% )\n          59021679      branch-misses                                                           ( +-  1.24% )\n\n            3.3427 +- 0.0207 seconds time elapsed  ( +-  0.62% )\n```"
    },
    {
      "commit": "3180c6f73e9f9598016b6a8a8346b81af0b9a5f2",
      "tree": "1755008bb01ced1ba4ef1cf3f484e12f1582f10e",
      "parents": [
        "dc6762753219d0b5fd92d46d5986e64b16b0a955"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri May 08 16:45:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 16:45:11 2026"
      },
      "message": "[NFC] Inline more core HeapType methods (#8681)\n\nThis makes Unsubtyping over 2x faster on a large Dart testcase. This was the\nslowest pass there by far. On -Os this saves 5.5% of total time.\n\nThe key slowdowns this fixes are HeapType::getShared() took\n33% (!) of total runtime in Unsubtyping and HeapType::getKind() took 6%, all\ndue to the call overhead that inlining can fix."
    },
    {
      "commit": "dc6762753219d0b5fd92d46d5986e64b16b0a955",
      "tree": "e061c978b206171d210aa3640f04e4101678e6e2",
      "parents": [
        "3141b1a6909cbe59ebda3424fb56343565b69881"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri May 08 16:42:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 16:42:25 2026"
      },
      "message": "Add `print_heading` testsuite helper. NFC (#8650)"
    },
    {
      "commit": "3141b1a6909cbe59ebda3424fb56343565b69881",
      "tree": "d1a732f67d55f73bb7df6da684a01d73cdd361c3",
      "parents": [
        "5f3595803cdf044d94e7951638f78b150dd19b10"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu May 07 23:51:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 23:51:31 2026"
      },
      "message": "Remove guesswork from getStackPointerGlobal. NFC (#8679)\n\nWe were just assuming that if no `__stack_pointer` was imported then the\nfirst global must be the `__stack_pointer`.\n\nInstead we can just require that the global be names correctly in the\nname section. This will require an emscripten-side change to ensure\nnames are generated when running this pass.\n\nNeeded for fixing\nhttps://github.com/emscripten-core/emscripten/issues/24964."
    },
    {
      "commit": "5f3595803cdf044d94e7951638f78b150dd19b10",
      "tree": "1e4591720e42421506f83d318ff716c4c5200f0e",
      "parents": [
        "c37aca5ff30c7e842035ff9e2b0c7c5695b239ff"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Thu May 07 23:32:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 23:32:19 2026"
      },
      "message": "Enable fuzzing for relaxed atomics (#8664)\n\nPart of #8165. V8 now supports relaxed atomics with the\n--experimental-wasm-acquire-release flag.\n\ncc @rmahdav"
    },
    {
      "commit": "c37aca5ff30c7e842035ff9e2b0c7c5695b239ff",
      "tree": "767291f4d23c01ebb2a99e71afaac4678f034dd4",
      "parents": [
        "6b06b59bf477298676d628faea03c9de7131a7d0"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 07 19:52:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 19:52:16 2026"
      },
      "message": "New fuzzer mode: Fuzz against JavaScript (#8655)\n\nThe new fuzzer flag --fuzz-against-js tells the fuzzer we will only run the\nwasm against JS - not link it to wasm or something else. This lets it make\nchanges that are valid from JS\u0027s point of view, like refining things on the\nboundary while not changing the arity.\n\nFor example, if we sent JS an anyref, but the actual type we send is\n(ref $A) then we can refine to that type (or any type between it and\nanyref). We can do this for both export results and import params, as in\nboth cases we send things to JS and know their type.\n\nThis is useful for fuzzers that generate JS and let Binaryen mutate the wasm:\nthey can emit anyrefs on the boundary, and Binaryen will be able to add new GC\ntypes in the module and even refine the boundary to those types. Such a fuzzer\ndoes not even need to emit GC types itself (it can emit anyref and send\nonly nulls)."
    },
    {
      "commit": "6b06b59bf477298676d628faea03c9de7131a7d0",
      "tree": "52249526138df7d602f6a02385f18bb10666ef12",
      "parents": [
        "9851810ef43454866157e40136249c8a6fe8eb34"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu May 07 01:03:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 01:03:42 2026"
      },
      "message": "Flush stdout/stderr between wasm-opt tests (#8680)\n\nWithout this the github CI often shows the errors in confusing locations\ninterspersed with the test names.\n\nI confirmed in #8679 that this addresses the issue. Maybe there is a\nbetter place to do this but this is good improvement for now."
    },
    {
      "commit": "9851810ef43454866157e40136249c8a6fe8eb34",
      "tree": "90f13e5490aa79d52d56fbac414cd4dea0e716cc",
      "parents": [
        "f6f01de88f35e40308d5fa6eaa45789627e6902f"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Wed May 06 23:55:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 23:55:20 2026"
      },
      "message": "Add fuzzing support for more FP16 instructions (#8678)\n\nThis adds fuzzing support for several FP16 half-precision vector\ninstructions: SplatVecF16x8, MaddVecF16x8, NmaddVecF16x8,\nDemoteZeroVecF32x4ToVecF16x8, and DemoteZeroVecF64x2ToVecF16x8."
    },
    {
      "commit": "f6f01de88f35e40308d5fa6eaa45789627e6902f",
      "tree": "01718e823eec142b8cc6d58a7ae86f3081ff3dfc",
      "parents": [
        "56a304912bd726de2c29da86a582d6af1ea8a429"
      ],
      "author": {
        "name": "Changqing  Jing",
        "email": "changqing.jing@bmw.com",
        "time": "Wed May 06 20:28:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 20:28:42 2026"
      },
      "message": "[NFC] Avoid O(N^2) exiting-branch checks in CodeFolding (#8599)\n\nFollow up PR of #8586 to optimize CodeFolding\n\n`optimizeTerminatingTails` calls `EffectAnalyzer` per tail item, each\nwalking the full subtree. On deeply nested blocks this is O(N^2).\n\nReplace the per-item walks with a single O(N) bottom-up `PostWalker`\n(`populateExitingBranchCache`) that pre-computes exiting-branch results\nfor every node, making subsequent lookups O(1)."
    },
    {
      "commit": "56a304912bd726de2c29da86a582d6af1ea8a429",
      "tree": "8eef653b28302ce681b12250a3affea3e8ff5b3a",
      "parents": [
        "3c9c6f314ff85c4ebea8602839702c0d46928f53"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Wed May 06 19:50:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 19:50:27 2026"
      },
      "message": "Support fuzzing more Relaxed SIMD instructions (#8676)\n\nExtend the binary and ternary WebAssembly fuzzer generators to cover\nmore Relaxed SIMD."
    },
    {
      "commit": "3c9c6f314ff85c4ebea8602839702c0d46928f53",
      "tree": "d3322a6aa3cd2a52a48ef8987d34ce49021242e9",
      "parents": [
        "d1ee405538bb150bd27de4556655ec2f55196851"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed May 06 18:02:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 18:02:19 2026"
      },
      "message": "SignatureRefining: Do not refine results of functions used in continuations (#8675)\n\nThis can break with `cont.bind`, see testcase."
    },
    {
      "commit": "d1ee405538bb150bd27de4556655ec2f55196851",
      "tree": "8faf946401947c4c0e686146da3f5e44465680f7",
      "parents": [
        "d2415b6045c470a8cad449167a3a4fdc21bdfb90"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed May 06 17:26:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 17:26:58 2026"
      },
      "message": "RemoveExports: Support comma separation and a response file (#8674)\n\nHelps #7976"
    },
    {
      "commit": "d2415b6045c470a8cad449167a3a4fdc21bdfb90",
      "tree": "4cc3ed5768889151ef7f7d57ca5be972442450e5",
      "parents": [
        "e7f8ce2e4d2831a48759fcb801031bbb9bbe26fc"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed May 06 17:12:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 17:12:20 2026"
      },
      "message": "[NFC] Use pascal-style string storage for IString/Name (#8662)\n\nPreviously our interned strings were std::string_view, which means a\npointer and a size. Instead, store the size as a header alongside the\nstring data. As we have many views on the same data, this reduces\nmemory usage, basically anywhere we use a Name, which is every\nCall, GlobalSet, Load, etc.\n\nI see a 5% RAM reduction. Changes to instructions, branches, and\nwall time are very very small.\n\nThis removes the \"reuse\" optimization where we could reuse a\nstring from the input. That was error-prone and a bad idea anyhow.\nIn practice, it might have helped a little, but this new model is\nsimpler and saves a lot more. (We can\u0027t reuse now since we need to convert\nto pascal-style storage anyhow.)"
    },
    {
      "commit": "e7f8ce2e4d2831a48759fcb801031bbb9bbe26fc",
      "tree": "73dfb28a61d3d67a9119daf8a17af958c9dea77b",
      "parents": [
        "a3b5ce99cb368eb50a5b20ed112687395fde196b"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Wed May 06 00:21:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 00:21:11 2026"
      },
      "message": "Rename relaxed SIMD instructions with prefix (#8673)\n\nRename all relaxed SIMD instruction names in Binaryen (such as\ni16x8.dot_i8x16_i7x16_s and i32x4.dot_i8x16_i7x16_add_s) to prepend the\n\"relaxed_\" prefix.\n\nThis prefix unifies relaxed SIMD instruction naming conventions across\nthe repository, aligns them with standard WebAssembly specifications,\nand ensures consistent behavior in tools like the S-Expression printer,\nparser, validator, interpreter, and tests."
    },
    {
      "commit": "a3b5ce99cb368eb50a5b20ed112687395fde196b",
      "tree": "95f5ef4ccb32a1dfd2eea8bd82af9916d35faa49",
      "parents": [
        "7f4405403a4c9166cc354725a48001fd764275b8"
      ],
      "author": {
        "name": "juj",
        "email": "jujjyl@gmail.com",
        "time": "Tue May 05 21:25:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 21:25:12 2026"
      },
      "message": "Fix clang 13 build (#8669)\n\nClang-13 advertises C++20 support with `__cplusplus \u003e\u003d 202002L`, but it\ndoes not have all the features of C++20.\n\nSo instead use the C++20 individual feature testing macros to check for\nthe various features: https://en.cppreference.com/cpp/feature_test\n\nwhich Clang-13 accurately reports.\n\nAuthored on top of PR https://github.com/WebAssembly/binaryen/pull/8668,\nwill rebase before landing, if/when\nhttps://github.com/WebAssembly/binaryen/pull/8668 is approved."
    },
    {
      "commit": "7f4405403a4c9166cc354725a48001fd764275b8",
      "tree": "1903240b9137b96e313bc59a648fe32b5d462960",
      "parents": [
        "a0981e5dcdb18f7c92fdd9b046161eeedf7d184d"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Tue May 05 18:53:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 18:53:12 2026"
      },
      "message": "Add Wide Arithmetic C + JS APIs (#8660)\n\nPart of #8544."
    },
    {
      "commit": "a0981e5dcdb18f7c92fdd9b046161eeedf7d184d",
      "tree": "7ab84eb4c678962796a05e998001b8790fc076ea",
      "parents": [
        "d675fbf125c729ca7ad5464d63b7db37a4a392b6"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue May 05 16:27:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 16:27:58 2026"
      },
      "message": "RemoveExports pass (#8670)\n\nFixes #7976"
    },
    {
      "commit": "d675fbf125c729ca7ad5464d63b7db37a4a392b6",
      "tree": "28e66a50af2c316eb3867f98d0f2cdb9c884ce97",
      "parents": [
        "1abcee9eb0842f907ab0530fe263030710fa90ce"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue May 05 15:04:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 15:04:36 2026"
      },
      "message": "table-utils: Handle table.grow (#8671)\n\nThis instruction was just not handled. That was mostly ok, as growth\nonly appends, but we did miscompile in some cases: if we call a high index in\nthe table, growth might save us from trapping, but we assumed we still\ntrap in Directize."
    },
    {
      "commit": "1abcee9eb0842f907ab0530fe263030710fa90ce",
      "tree": "077cb28143a3caeb673049ff873c928466bbae07",
      "parents": [
        "35ca7ce5eeea5fa8b710fef11c61365c486939e9"
      ],
      "author": {
        "name": "juj",
        "email": "jujjyl@gmail.com",
        "time": "Tue May 05 07:38:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 07:38:24 2026"
      },
      "message": "Avoid use of C++20 \u003cranges\u003e header in GlobalEffects.cpp (#8668)\n\nAvoid use of C++20 \u003cranges\u003e header in GlobalEffects.cpp, so that the\ncode builds on Clang-14 as well."
    },
    {
      "commit": "35ca7ce5eeea5fa8b710fef11c61365c486939e9",
      "tree": "b7c90139ea56e8fcd4622c08917bb49fb781e853",
      "parents": [
        "5210dee7b098f0f456def57e0263399c87c4cd40"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon May 04 22:04:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 22:04:17 2026"
      },
      "message": "[NFC] Refactor delta debugger utility to a struct (#8651)\n\nThe delta debugging utility was previously just a free function that\ntook a lambda for testing a partition and saying whether it worked or\nnot. The control flow was entirely in the control of the utility itself,\nwhich meant that things like exiting early needed to use exceptions. The\nuser was also not able to e.g. dynamically add new items to the set\nbeing reduced.\n\nGive users more control and flexibility by refactoring the delta\ndebugging utility into a struct that implements the algorithm as a state\nmachine. The struct provides the current working and test sets, and the\nuser says whether the current test set should be accepted or rejected."
    },
    {
      "commit": "5210dee7b098f0f456def57e0263399c87c4cd40",
      "tree": "98b0fdce5a0c41e2dcdeef6379e51bb658ec4757",
      "parents": [
        "2868a885d63e77a96380b5e245f1f293719b8170"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Mon May 04 18:17:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 18:17:22 2026"
      },
      "message": "Support i64.mul_wide_s and i64.mul_wide_u from Wide Arithmetic proposal (#8652)\n\nPart of #8544. Unit tests were written by Gemini and double-checked\nagainst python with [this\nscript](https://gist.github.com/stevenfontanella/012bfeb5a0c75032126af756f28642ee).\n\nTODO: Move the existing 128 add/sub logic from the interpreter into\nint128.h."
    },
    {
      "commit": "2868a885d63e77a96380b5e245f1f293719b8170",
      "tree": "58f9885f12e94ecfbab4c457bb2c9a636f93a1e0",
      "parents": [
        "598b03e4828a4ef15f58c62bcaf9cfb715d34b33"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon May 04 16:42:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 16:42:35 2026"
      },
      "message": "wasm-reduce: Fix integer overflows (#8665)\n\nUse a larger size than int, and be careful when multiplying by 9.\n "
    },
    {
      "commit": "598b03e4828a4ef15f58c62bcaf9cfb715d34b33",
      "tree": "7719c93b33ff549643486a24c94b44a931515e97",
      "parents": [
        "e29edaea576a4ecba41d063b54d0ee5e5223820b"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri May 01 23:14:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 23:14:57 2026"
      },
      "message": "[EH] Handle pops in Directize (#8666)"
    },
    {
      "commit": "e29edaea576a4ecba41d063b54d0ee5e5223820b",
      "tree": "b74b49f1bcde58327a2a8ebf11b00435ee2e72a4",
      "parents": [
        "cae3fbb7733ee2813e783b0d4b9e3307f4b95620"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Fri May 01 00:06:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 00:06:23 2026"
      },
      "message": "Exclude wide-arithmetic.wast from fuzzer (#8663)\n\nFix for\nhttps://github.com/WebAssembly/binaryen/pull/8638#issuecomment-4356210841."
    },
    {
      "commit": "cae3fbb7733ee2813e783b0d4b9e3307f4b95620",
      "tree": "9d15ac3a2278704f6c10554c710f4c1c48b0c38f",
      "parents": [
        "b520ed68bc28cb40fd002ed1330a671d43de9144"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Apr 29 23:38:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 23:38:21 2026"
      },
      "message": "[EH] Vacuum: Fix up pops after adding blocks in a Try (#8659)"
    },
    {
      "commit": "b520ed68bc28cb40fd002ed1330a671d43de9144",
      "tree": "b7c346748af651599e9f5d4d4bdc348ed6b43e7c",
      "parents": [
        "c6a5e65b77a4b6e9d72fa7ba674632aba4b99099"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Apr 29 20:34:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 20:34:15 2026"
      },
      "message": "Move getI64Pair to wasm::Types (#8658)\n\nFollowup to\nhttps://github.com/WebAssembly/binaryen/pull/8638#discussion_r3162004921"
    },
    {
      "commit": "c6a5e65b77a4b6e9d72fa7ba674632aba4b99099",
      "tree": "b9d3969f69fc29bb038ed739ec02b2c3b850a41c",
      "parents": [
        "6216d241739c1a92e500006deec400307e361b23"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Tue Apr 28 23:57:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 23:57:13 2026"
      },
      "message": "Support i64.add/sub128 instructions from Wide Arithmetic proposal (#8638)\n\nPart of #8544\n\ni64 to i32 lowering isn\u0027t implemented yet because supporting multi-value\ni64 returns requires more work here. Will add this in a separate change.\n\nSpec tests are adapted from the upstream proposal repo, with only tests\nrelated to i64.add128 and i64.sub128 included.\n\nDrive-by changes:\n* Remove unneeded template params in wasm-validator.cpp\n* Unconditionally assign to the result in ckd_add / ckd_sub polyfills to\nmatch the behavior of the [std\nimplementations](https://en.cppreference.com/cpp/numeric/ckd_add). All\nof the existing callers don\u0027t observe the result when overflow occurred,\nbut for our case we need the value regardless."
    },
    {
      "commit": "6216d241739c1a92e500006deec400307e361b23",
      "tree": "19244412415a0f83542c4e1160d2c7f63d89098c",
      "parents": [
        "257298c678cd9457e2682ec510a75b315e643b3f"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Apr 28 22:48:27 2026"
      },
      "committer": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Apr 28 22:48:27 2026"
      },
      "message": "Fix bad merge from #8654\n"
    },
    {
      "commit": "257298c678cd9457e2682ec510a75b315e643b3f",
      "tree": "e477f08fb1237802b7193baa16f20ffa706a5925",
      "parents": [
        "d951c04a830ba9eac59542b67c7e7b0df865d30a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Apr 28 21:38:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 21:38:54 2026"
      },
      "message": "Fuzzer: Do not return 0 from upTo when input is finished (#8653)\n\nThis was added to simplify our output when the random data is small - it\nmakes us pick simpler options, which helps a little there - but the\ndownsides are large, so revert this part.\n\nSpecifically, we consume all the random input to generate functions. We\nthen do a small amount of random usage at the end, things like export\nmutation. To handle that, we keep returning random values even after\nthe random input is consumed (using some xor-ing to try to keep things\nrandom). But if we just return 0 at that point, we are missing out on a\nlot of variety.\n\nThis was added in #7832. All the rest of that PR makes sense - we can\ncheck for the end of the random data and do simpler things - but we\nshould not do the simplest possible thing in the generic `upTo` method\nwhich would simplify everything, even things we don\u0027t want to."
    },
    {
      "commit": "d951c04a830ba9eac59542b67c7e7b0df865d30a",
      "tree": "bf8379ae8aca5f5594055ddd5a18d6d4b52ca7da",
      "parents": [
        "af1dd5ba3bbcae4b4879257c16ee89a12ef843e3"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Apr 28 20:25:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 20:25:09 2026"
      },
      "message": "Enable more ruff checks and remove flake8. NFC (#8654)"
    },
    {
      "commit": "af1dd5ba3bbcae4b4879257c16ee89a12ef843e3",
      "tree": "c81fc8a0e9d2c47e72c8d4e6764bbef66b8278e8",
      "parents": [
        "df8b79d629890d1af88027455d379329a6f533fb"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Apr 28 17:20:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 17:20:56 2026"
      },
      "message": "PreserveImportsExportsJS fuzzer: Handle crashes and function ids (#8648)\n\n1. Report VM errors as failures (rather than see they still occur after opts).\n2. Ignore function ID differences in logging."
    },
    {
      "commit": "df8b79d629890d1af88027455d379329a6f533fb",
      "tree": "7bb6c86200f8bf800ad67b7f2e3fd6c10d6a215d",
      "parents": [
        "37cf5df49e1148ae07913434c20485f7230e2002"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Apr 27 22:01:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 22:01:05 2026"
      },
      "message": "[legalize-js-interface] Don\u0027t delete exports (#8649)\n\nInstead we can just rely on emscripten\u0027s metadce to remove these like\nall other unused exports.\n\nSee https://github.com/emscripten-core/emscripten/pull/26793\n\nAlso, note that we did not have any tests for this removal anyway."
    },
    {
      "commit": "37cf5df49e1148ae07913434c20485f7230e2002",
      "tree": "61ae6e29d3b459fb58d1bfa376f99556450e119d",
      "parents": [
        "1e36622832c32ad335403065c322781982f1b55c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Apr 27 19:58:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 19:58:29 2026"
      },
      "message": "Rename `lld` tests to `finalize` tests. NFC (#8395)\n\nThese tests are for checking the behavior of `wasm-emscripten-finalize`."
    },
    {
      "commit": "1e36622832c32ad335403065c322781982f1b55c",
      "tree": "2d9fff73ef3a4ac1128ee367e5e53fa6e2e8531b",
      "parents": [
        "74ca4eb844f17fefc150faffe32b0830f845e8b3"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Apr 27 17:00:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 17:00:31 2026"
      },
      "message": "[wasm-reduce] Empty functions with delta debugging (#8640)\n\nDelta debugging is an algorithm for finding the minimal set of items\nnecessary to preserve a condition. It generally works by using\nincreasingly fine partitions of the orignal set of items and alternating\ntrying to keep just one of the partitions to make rapid progress and\ntrying to keep the complement of one of the partitions to make smaller\nchanges that are more likely to work.\n\nAdd a header containing a templatized delta debugging implementation,\nthen use it in wasm-reduce to preserve the minimal number of function\nbodies necessary to reproduce the reduction condition. This should allow\nwasm-reduce to make much faster progress on emptying out functions in\nthe common case and leave it much less work to do afterwards.\n\nUsing delta debugging for deleting functions and performing other\nreduction operations is left as future work. Deleting functions in\nparticular is challenging because it can involve reloading the module\nfrom the working file, potentially changing function names and\ninvalidating the function names that would be stored in the delta\ndebugging partitions."
    },
    {
      "commit": "74ca4eb844f17fefc150faffe32b0830f845e8b3",
      "tree": "356fbea1f2248a3787d148fc72cca6d4707deb65",
      "parents": [
        "a7fd0520d87d22690fd22691b6af1d3130f55500"
      ],
      "author": {
        "name": "walkingeyerobot",
        "email": "mitch@thefoley.net",
        "time": "Mon Apr 27 04:51:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 04:51:26 2026"
      },
      "message": "add missing include (#8646)"
    },
    {
      "commit": "a7fd0520d87d22690fd22691b6af1d3130f55500",
      "tree": "ac3dfe1c3c8593c1e8d719494538d0b0e487c1b5",
      "parents": [
        "35ba23c705ca4422d8f6102a0fe440c64d2bf1de"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Mon Apr 27 01:56:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 01:56:04 2026"
      },
      "message": "Canonicalize NaNs when casting between float and double (#8645)\n\nFixes #8626. Also part of #8261.\n\nThe bug is due to the fact that C++ doesn\u0027t guarantee a bitwise\nrepresentation for NaNs that are casted from double -\u003e float or vice\nversa. From\nhttps://en.cppreference.com/cpp/language/implicit_conversion:\n\n\u003e Floating-point promotion\nA\n[prvalue](https://en.cppreference.com/cpp/language/value_category#prvalue)\nof type float can be converted to a prvalue of type double. The value\ndoes not change.\n\nIn the case of NaNs, the value (NaN) is preserved regardless of the\nparticular NaN that is picked, so we have no guarantee of the bitwise\nrepresentation. And for double -\u003e float:\n\n\u003e If the conversion is listed under floating-point promotions, it is a\npromotion and not a conversion.\n\u003e * If the source value can be represented exactly in the destination\ntype, it does not change.\n\u003e * If the source value is between two representable values of the\ndestination type, the result is one of those two values (it is\nimplementation-defined which one, although if IEEE arithmetic is\nsupported, rounding defaults [to\nnearest](https://en.cppreference.com/cpp/numeric/fenv/FE_round)).\n\u003e * Otherwise, the behavior is undefined.\n\nI assume NaN conversions again fall under case 1 meaning that the\n\"value\" (NaN) is preserved but not the bitwise representation.\n\nCanonicalize NaNs after promotion or demotion to ensure that the quiet\nbit remains set."
    },
    {
      "commit": "35ba23c705ca4422d8f6102a0fe440c64d2bf1de",
      "tree": "b922ea5955ada768bcbf7f8a6d28dfa4b59b0de7",
      "parents": [
        "f61c445ad0549ca83089e5629ef9eae6db1c95b5"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Fri Apr 24 21:36:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 24 21:36:46 2026"
      },
      "message": "Compute effects for indirect calls in GlobalEffects (#8609)\n\nWhen running in --closed-world, compute effects for indirect calls by\nunioning the effects of all potential functions of that type. In\n--closed-world, we assume that all references originate in our module,\nso the only possible functions that we don\u0027t know about are imports.\nPreviously [we gave up on effects\nanalysis](https://github.com/WebAssembly/binaryen/blob/29b2d42e8a748fbe1095696d58a52b7bf83e2253/src/passes/GlobalEffects.cpp#L83-L87)\nfor indirect calls.\n\nYields a very small byte count reduction in calcworker (3799354 -\n3799297 \u003d 57 bytes). Also shows no significant difference in Binaryen\nruntime: (0.1346069 -\u003e 0.13375045 \u003d \u003c1% improvement, probably within\nnoise). We expect more benefits after we\u0027re able to share indirect call\neffects with other passes, since currently they\u0027re only seen one layer\nup for callers of functions that indirectly call functions (see the\nnewly-added tests for examples).\n\nFollowups:\n* Share effect information per type with other passes besides just via\nFunction::effects (#8625)\n* Exclude functions that don\u0027t have an address (i.e. functions that\naren\u0027t the target of ref.func) from effect analysis ()\n* Compute effects more precisely for exact + nullable/non-nullable\nreferences\n\nPart of #8615."
    },
    {
      "commit": "f61c445ad0549ca83089e5629ef9eae6db1c95b5",
      "tree": "8b2367a4a568354cde2ba424f9eecc04ad585ba0",
      "parents": [
        "2a594b2c4d64f9b4a6fe9499d43c464e4298b1f8"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Thu Apr 23 19:59:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 19:59:14 2026"
      },
      "message": "[FP16] Implement f16x8.demote_{f64x2, f32x4}_zero. (#8580)\n\nSpecified at\nhttps://github.com/WebAssembly/half-precision/blob/main/proposals/half-precision/Overview.md"
    },
    {
      "commit": "2a594b2c4d64f9b4a6fe9499d43c464e4298b1f8",
      "tree": "c542ef8ef4e33eebf3075ff0ec7b60d6d94f4f90",
      "parents": [
        "fb9043e501705257b6e14d3e54fc70c38d52aa1c"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Apr 23 18:09:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 18:09:33 2026"
      },
      "message": "Fuzzer: Only run one handler at a time (#8643)\n\nRather than generate one wasm and run it on a few handlers, each wasm\ngets one handler run on it.\n\nThis is simpler, in particular during reduction, where only the thing\nbeing reduced is run.\n\nIt is a tradeoff in efficiency. Running the old way vs this for 5 minutes,\nwe generate almost 2x more wasm files per second (good for variety) but\nrun 34% fewer handlers (bad for coverage). This seems reasonable to\nme."
    },
    {
      "commit": "fb9043e501705257b6e14d3e54fc70c38d52aa1c",
      "tree": "2074f209bbd747f4844463fbe5c061b10cb88366",
      "parents": [
        "cd26fc14f11e8cde849e66712a4c44ce04e539b5"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Thu Apr 23 16:09:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 16:09:48 2026"
      },
      "message": "Add feature flag for wide arithmetic (#8639)\n\nPart of #8544. Based on #8192."
    },
    {
      "commit": "cd26fc14f11e8cde849e66712a4c44ce04e539b5",
      "tree": "fffbce55b22ecc02fd623132e3d9a975806e7aff",
      "parents": [
        "595f5af69fb984ce560aad7c61fddaf09939dc72"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Thu Apr 23 04:57:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 04:57:40 2026"
      },
      "message": "Fix binary writing for test_emit_all_features (#8642)\n\nIn #8639, the CI failed on Windows 11 because the total number of\nfeatures became 26 (0x1A), which is the EOF byte in Windows. Write to a\ntemp file to ensure that the file is read as binary. Resolves the CI in\nthe next PR.\n\nPart of #8544."
    },
    {
      "commit": "595f5af69fb984ce560aad7c61fddaf09939dc72",
      "tree": "4f0a6952e1002e822318e40dc290a4a323739bf0",
      "parents": [
        "2e86518e16851eaddf1f3a9cde7458e6c6f4d9b3"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Apr 22 19:42:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 19:42:46 2026"
      },
      "message": "Account for global effects in LinearExecutionWalker (#8637)\n\nWhen --enable-exception-handling is true, we previously assumed that\nevery call throws in LinearExecutionWalker which prevented some\nopportunities for optimizing locals (and potentially other optimizations\nin passes that use this class). Change the code to make use of global\neffects when present.\n\nThe following passes use LinearExecutionWalker:\n* LocalGraph\n* LocalCSE\n* OptimizeCasts\n* SimplifyGlobals\n* SimplifyLocals\n\nIt\u0027s also used in ContentOracle which is used in GUFA and TypeRefining."
    },
    {
      "commit": "2e86518e16851eaddf1f3a9cde7458e6c6f4d9b3",
      "tree": "fb7deef55cc105a2f532f2c3370019f27a31f80a",
      "parents": [
        "40acafeb546c2a9438c61e72a036119624ac6a77"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Apr 21 21:02:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 21:02:22 2026"
      },
      "message": "PreserveImportsExportsJS fuzzer: Handle NaNs properly (#8620)\n\n1. De-NaN when that setting is on.\n2. Check if we can compare, which depends on NaNs."
    },
    {
      "commit": "40acafeb546c2a9438c61e72a036119624ac6a77",
      "tree": "fd8fa85af7d17b6d4d07d19b8481bdb701f77f19",
      "parents": [
        "1251efbc1ea471c1311d2726b2bbe061ff2a291c"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Apr 21 18:48:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 18:48:37 2026"
      },
      "message": "Fix comment about --no-auto-initial-contents (#8636)\n\n#5943 changed the default from disabled to enabled but comment was left\nunchanged."
    },
    {
      "commit": "1251efbc1ea471c1311d2726b2bbe061ff2a291c",
      "tree": "59f51c10980fc1eb640e6c8f1baaa1f67a169624",
      "parents": [
        "534eab97491642dfb9d09885ccfef5d36b2d9eef"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Apr 21 18:31:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 18:31:59 2026"
      },
      "message": "Avoid assertion in BrOn parsing (#8635)\n\nThe ref and the desc are used as references in `finalize()`, and we\nassert there if they are e.g. `i32`.\n\nFixes #8633"
    },
    {
      "commit": "534eab97491642dfb9d09885ccfef5d36b2d9eef",
      "tree": "69b7e993c8d44d2a9e708b345d0ff7ebdbf326f2",
      "parents": [
        "3ef8d1916051fa001a93c37d3270e9b218c45dc9"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue Apr 21 17:42:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 17:42:49 2026"
      },
      "message": "[wasm-merge] Preserve function names when writing a profile (#8631)\n\nWhen wasm-merge writes a wasm-split profile, it uses names to identify\nfunctions. It is never correct to then throw those names away when\nwriting the binary, because that would make the profile useless. To\navoid this problem, have --output-manifest imply --debuginfo and\npreserve the function names."
    },
    {
      "commit": "3ef8d1916051fa001a93c37d3270e9b218c45dc9",
      "tree": "b6c7ddfd08d93a5684758ff726f29b454847a049",
      "parents": [
        "604f547f5ccb51cdc02c1b12fe96a6d045c602d5"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Apr 20 22:22:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 22:22:50 2026"
      },
      "message": "Look at fallthrough when deleting branch hints (#8630)\n\nThe DeleteBranchHints pass looks at the conditions of branches to find\nthe ID operands of logging calls to determine which branch hints to\nremove. It previously expected the logging call to be the condition of\nthe branch, but in the presence of stacky code it is possible for the\nparser to create a block around the logging call. Handle this pattern by\nlooking for the logging call at the condition\u0027s fallthrough value."
    },
    {
      "commit": "604f547f5ccb51cdc02c1b12fe96a6d045c602d5",
      "tree": "c9d439305f43333027d1d1cb2f36c0338ca2a484",
      "parents": [
        "93b0629c01852fc8ac0e82accb546a126e1e0049"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Apr 20 18:06:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 18:06:15 2026"
      },
      "message": "[StackIR] Optimize the simple case of a multivalue tee and extracts (#8623)\n\nWhen getting a multivalue from e.g. a call and then consuming it\nimmediately, we get this pattern:\n\n```wat\n      (tuple.extract 3 0\n        (local.tee $temp\n          (call $multivalue-return)\n        )\n      )\n      (tuple.extract 3 1\n        (local.get $temp)\n      )\n      (tuple.extract 3 2\n        (local.get $temp)\n      )\n```\n\nWe save the entire tuple to a local, then read index by index. In\nStackIR we can just remove all the tuple operations, as the value is on the\nstack and ready to be used.\n\nFixes #8618"
    },
    {
      "commit": "93b0629c01852fc8ac0e82accb546a126e1e0049",
      "tree": "1c4e9405099df0d64b430bfa2409cbb9b2e294a7",
      "parents": [
        "b3650ea0d6533f66956f9c641ea73e623ed1e57d"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Apr 20 17:30:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 17:30:38 2026"
      },
      "message": "Simplify branch hint instrumentation (#8624)\n\nThe previous branch hint instrumentation logic would introduce a scratch\nlocal to hold the condition so it could be passed into both the logging\nfunction and the original branching instruction. The de-instrumentation\npass would then need to find this local and attempt to undo the data\nflow change. Simplify all of this by having the logging function return\nthe condition value so it can interpose between the condition and the\nbranch without any new locals. De-instrumentation can now just replace\nthe call to the log function with its condition parameter.\n\nTo allow further simplification, also change the order of parameters to\nthe logging function so the condition value is the first parameter. This\nensures that we don\u0027t need to introduce a scratch local even when the\ncondition is a `pop`, because the pop will remain the leftmost leaf\nexpression in the catch body."
    },
    {
      "commit": "b3650ea0d6533f66956f9c641ea73e623ed1e57d",
      "tree": "a866d85ab4540f311bc11abdb3e7b72c0df594f1",
      "parents": [
        "0f4d388de4edb4bf86348717fcb92b2cdf96516a"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Apr 20 17:09:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 17:09:09 2026"
      },
      "message": "[NFC] Remove redundant code from bad merge (#8627)\n\nWhen #8617 landed, it introduced this code from an out-of-date version\nof #8616. The code had been moved in such a way that the merge kept both\nold and new versions instead of creating a merge conflict. Remove the\noutdated code."
    },
    {
      "commit": "0f4d388de4edb4bf86348717fcb92b2cdf96516a",
      "tree": "e80e25c634788b01adbf90c7ba43981837d8c54d",
      "parents": [
        "9a1516f87c5fb4b75d74bfd93fdcb50807dac6e9"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Apr 20 16:23:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 16:23:00 2026"
      },
      "message": "Fix and improve unreachable parsing (#8617)\n\nThe recent change (#8608) that reduced the number of scratch locals\nintroduced by IRBuilder also inadvertently introduced a bug. That commit\nchanged the conditions under which we package multiple expressions into\na block to be popped together. We previously did this whenever there was\na get of a scratch local to hoist a value to the top of the stack. After\n#8608, we started using blocks whenever there were multiple expressions\nhoisted. These conditions are usually identical, but we missed the case\nwhere there are multiple expressions and also no `get` because the value\nis unreachable. The introduction of a block where there was none before\ninvalidated our logic for determining whether or not to pop back past an\nunreachable expression based on whether the expressions underneath it\nwould satisfy the type constraints of the parent.\n\nSimplify that logic by calculating the stack size at which we must avoid\npopping past an unreachable rather than calculating the index of the\nunreachable itself. This makes the logic work correctly whether or not\nthe unreachable will be popped as part of a block. That in turn lets us\nremove an extra unreachable we were conservatively pushing onto the\nstack when \"hoisting\" unreachable values.\n\nAdd tests for the cases where we can and cannot pop past an unreachable\nthat is followed by a none-typed expression. The former case previously\nparsed incorrectly and the latter case is now parsed without introducing\nextra unreachable instructions."
    },
    {
      "commit": "9a1516f87c5fb4b75d74bfd93fdcb50807dac6e9",
      "tree": "60df2c39116420d4d8d0e2027e0c7f28d24c92ea",
      "parents": [
        "f0519450ad58168d591db15a9d1e2d171adb6e3c"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Apr 20 14:28:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 14:28:48 2026"
      },
      "message": "[NFC] Simplify printing of unreachable replacements (#8616)\n\nWhen an instruction has a type immediate that we cannot print because\nthe expression it is supposed to come from has unreachable or null type,\nwe instead print an unreachable block with a comment saying what\ninstruction we failed to print. We previously handled this via different\ncode paths for type immediates that come from child expressions that\ntype immediates that come from the printed expression\u0027s own return type.\nUnify these code paths in the printer by improving\n`Properties::hasUnwritableTypeImmediate` to handle both cases. Also fix\nthe printing of `ShallowExpression` to check for unwritable type\nimmediates first to avoid assertion failures."
    },
    {
      "commit": "f0519450ad58168d591db15a9d1e2d171adb6e3c",
      "tree": "02b53e7f95d33c015bd355ed098f8de16989e163",
      "parents": [
        "2d093c2d2d4e3892b34ef048fa4fd0ae2a969d6b"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Apr 17 19:38:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 19:38:33 2026"
      },
      "message": "BranchHinting fuzzing: Do not remove effects when deinstrumenting (#8613)\n\nThe BranchHinting fuzzer broke after #8608, but it wasn\u0027t that PR\u0027s fault -\njust that we now generate a different pattern of blocks that BranchHinting\u0027s\ndeinstrumentation did not handle yet. The problem was that the block with\nthe condition that we replace now has effects, so we can\u0027t always remove it\nwholesale."
    },
    {
      "commit": "2d093c2d2d4e3892b34ef048fa4fd0ae2a969d6b",
      "tree": "360ae61a45e7eaa56345ec3fc696a339fd73fd35",
      "parents": [
        "069c945176879513a47623b26e02d3e8030d78ba"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Thu Apr 16 22:36:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 22:36:50 2026"
      },
      "message": "NFC: Propagate global effects via strongly-connected components (#8607)\n\nHelps prevent huge visited sets and work queues for edges when\ntraversing large call graphs. After adding support for indirect call\neffects, the previous algorithm would OOM or timeout when computing\nglobal effects for large binaries like calcworker.\n\nYields a small runtime improvement when tested on calcworker: 0.13451015\n-\u003e 0.1328012 (1.3%, averaged from 20 tries with a release build).\n\nPart of #8615."
    },
    {
      "commit": "069c945176879513a47623b26e02d3e8030d78ba",
      "tree": "ee3775dff5458beb9d25042928737eed0ef0eb57",
      "parents": [
        "ef4cbbe7dfa234b8146d5575f917af1bbaf1d041"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Apr 16 22:34:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 22:34:45 2026"
      },
      "message": "PreserveImportsExportsJS fuzzer: Handle JS differences in stack traces (#8610)\n\nGeneralize our stack-trace ignoring code, as it turns out the JS\nparts of traces can differ based on optimizations."
    },
    {
      "commit": "ef4cbbe7dfa234b8146d5575f917af1bbaf1d041",
      "tree": "a7265418f409d45ca94c9553c597f66885f5882f",
      "parents": [
        "a7d3f18c224b23db38468bbe48fa2c61c8d13918"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Apr 16 21:31:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 21:31:26 2026"
      },
      "message": "Validate descriptor clause forward references (#8611)\n\nWhen the descriptor clause on a type definition was a forward reference\nto a future rec group, we previously failed an assertion that it was\nnot a temporary type. Replace this assertion with a validation check.\n\nFixes #8606."
    },
    {
      "commit": "a7d3f18c224b23db38468bbe48fa2c61c8d13918",
      "tree": "623426b4881e18528fd20cea4594e4397a3ab6a3",
      "parents": [
        "4301eae42107ec446a49dd2849691010a0d3ba3a"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Apr 16 20:27:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 20:27:50 2026"
      },
      "message": "Handle strings when skipping function bodies (#8614)\n\nExplicitly parse strings in the logic for mostly skipping function\nbodies in the first parser phase. This avoids parentheses inside strings\ncausing the parser to skip too much or too little of the input."
    },
    {
      "commit": "4301eae42107ec446a49dd2849691010a0d3ba3a",
      "tree": "6341671bf101eca63be6e7049e98428e21a6989c",
      "parents": [
        "ea9820051110c37310bddb88bde3af186e4dcc85"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Apr 16 00:10:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 00:10:34 2026"
      },
      "message": "Use fewer scratch locals in IRBuilder (#8608)\n\nWhen popping children for an expression, greedily pop none-typed\nexpressions below the last value-producing expression in the stack,\npackaging all the popped instructions into a new block. This avoids\nleaving the none-typed expressions on top of the stack, which is good\nbecause having them on top of the stack would force the use of a scratch\nlocal when the next operand is popped.\n\nBesides producing better IR with fewer scratch locals, this also has the\nbenefit of better round-tripping IR through binaries. The binary writer\nhas an optimization where it will elide unnamed blocks because they\ncannot possibly be branch targets, but this could create \"stacky\" code\nthat would previously introduce a scratch local when it was parsed back\ninto IR. Now IRBuilder just recreates exactly the unnamed block that had\nbeen present in the IR in first place.\n\nWhile we don\u0027t generally guarantee that we can perfectly round-trip IR\nthrough binaries, this reduces the number of cases where round-trips\nlead to increased code size.\n\nFixes #8413."
    },
    {
      "commit": "ea9820051110c37310bddb88bde3af186e4dcc85",
      "tree": "f4be26ec8695f2389c6c8c28ad491dd803a76402",
      "parents": [
        "95d88767a7543abbb42071457970433a9a0d7732"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Apr 15 23:39:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 23:39:47 2026"
      },
      "message": "Heap2Local: Handle unreachable ref.test replacement (#8605)\n\nAs with `local.get` in other cases, here we replace with something\nconcrete (a `const`), and we can\u0027t do that if we became unreachable."
    },
    {
      "commit": "95d88767a7543abbb42071457970433a9a0d7732",
      "tree": "a7a697d7e3fdb3e0b452eca2f26d9e6f056b2c04",
      "parents": [
        "2fa35d65d6a2bf05266e396fe7e8de4376c40601"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Apr 15 17:05:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 17:05:02 2026"
      },
      "message": "[NFC] Skip parsing instructions in first parser pass (#8601)\n\nThe first parser pass is responsible for two things: finding the\nlocations of definitions of top-level module items like globals and\nfunctions and finding the locations of implicit function type\ndefinitions. It previously accomplished the latter by fully parsing\nevery instruction in each function. But the IR is not constructed in\nthis phase of parsing, so fully parsing every instruction was largely\nwasted work. Optimize the parser by parsing only the instructions that\nmight have implicit type definitions and otherwise just blindly match\nparentheses to skip the function body. Combined with #8597, this speeds\nup parsing by 30-40%."
    },
    {
      "commit": "2fa35d65d6a2bf05266e396fe7e8de4376c40601",
      "tree": "a7992d4ed6ba85cae6bf8c2d9dbe17382908eccd",
      "parents": [
        "fc43f0d6c882941df0688d2b912a3d689229ab58"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Apr 14 23:11:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 23:11:23 2026"
      },
      "message": "[NFC] Simplify a bit of logic in RemoveUnusedBrs (#8603)\n\nThe checks in the old code were not needed: we have a block that\nhas a single child, another block. Any branch to the child sends a\nvalue that flows out to the parent immediately. No circumstances\nexist in which we can error.\n\n(block $outer\n  (block $inner\n    ..code and a br to $inner, which can branch to $outer instead..\n  )\n)\n\nAlso, this code only handles blocks *without* a value, so even\nsubtyping is not an issue here. (Merging blocks with different\ntypes is handled elsewhere, RemoveUnusedNames, so no\nneed to add new logic here.)"
    },
    {
      "commit": "fc43f0d6c882941df0688d2b912a3d689229ab58",
      "tree": "47be0c57e2a8075a16458fab2622cbc6b6ccef62",
      "parents": [
        "54f9f7afa703ade4a34aa3291abbe237bb0cd8a4"
      ],
      "author": {
        "name": "Changqing  Jing",
        "email": "changqing.jing@bmw.com",
        "time": "Tue Apr 14 18:14:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 18:14:00 2026"
      },
      "message": "[NFC] Use unordered containers for Name sets in SimplifyLocals and DuplicateFunctionElimination (#8600)\n\nThis PR is proposed by\nhttps://github.com/WebAssembly/binaryen/pull/8586#issuecomment-4240228894\n\nThe passes get 0.7% faster."
    },
    {
      "commit": "54f9f7afa703ade4a34aa3291abbe237bb0cd8a4",
      "tree": "0e171a7b94367d2c4a704141b15883c494158c3c",
      "parents": [
        "1f65c573ac6a644f3f99a18d5f0c08aabadea3a1"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue Apr 14 15:29:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 15:29:51 2026"
      },
      "message": "[NFC] Simplify lexer and move to header (#8597)\n\nThe lexer previously used its own internal `LexerCtx` abstraction that\nallowed it to consume the characters that made up a token without\nchanging the lexer state, then update the state at once when committing\nto consuming the characters. However, manually resetting the lexer to\nthe original position when giving up on parsing a token is simple enough\nthat this abstraction was not holding its weight. Simplify the lexer by\nremoving internal contexts, and move the simplified method bodies to\nlexer.h. Generally we try to avoid putting lots of code in headers, but\nin this case making the code available to the inliner, along with\nremoving the extra layer of abstraction, makes the parser about 20%\nfaster."
    },
    {
      "commit": "1f65c573ac6a644f3f99a18d5f0c08aabadea3a1",
      "tree": "d288bd0a7ebb9faf90e75bfbcd96c32edd1cd8de",
      "parents": [
        "ce7f86949d5f951292f1a276808ebd75696b691d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Apr 14 15:20:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 15:20:13 2026"
      },
      "message": "New fuzzer: PreserveImportsExportsJS (#8592)\n\nThis starts from wasm+js testcases and then modifies the wasm in a way\nthat preserves imports and exports, so the wasm+js can still be run. This is\nvery different from our usual approach of starting with only wasm, then\nbashing it into the shape that our general js code can handle.\n\nThe main benefit here is testing of more interesting wasm+js\ninteractions, specifically for the JS Interop proposal. Three\nwasm+js combinations are added in this PR that test features\nfrom that proposal."
    },
    {
      "commit": "ce7f86949d5f951292f1a276808ebd75696b691d",
      "tree": "7e8009f5e60fb8f96167e4b8244a69dc7a99dd1f",
      "parents": [
        "031e1639e6b15b90b4224105ed62484e52d806a6"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Mon Apr 13 23:07:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 23:07:58 2026"
      },
      "message": "Refactor graph traversal in GlobalEffects (#8593)\n\nRefactor GlobalEffects to not compute the transitive call graph\nexplicitly but instead aggregate effects as we go. This improves the\nruntime of the pass by 4.3% on calcworker (1.21792 s -\u003e 1.16586 s\naveraged over 20 compilations). It also helps prepare the code for\nfuture changes to support effects for indirect calls.\n\nAnother potential future improvement here is to use SCC, which would let\nus stop processing children early in cases where there are no effects to\nupdate. Currently we can\u0027t do this because we add trap effects to\npotentially-recursive call loops, so even if no effects were updated, we\nneed to keep going to find potential cycles."
    },
    {
      "commit": "031e1639e6b15b90b4224105ed62484e52d806a6",
      "tree": "c6c961cc53b7d46800f2cd888dc7ee0f8d5fe264",
      "parents": [
        "39906157445c9dfa1db5c355f25e40d17f700c21"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Apr 13 23:05:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 23:05:25 2026"
      },
      "message": "Increase Alpine stack size to 8MB (#8595)\n\nThe default in musl is apparently tiny, and MergeSimilarFunctions has\nrecursion which can hit it.\n\nWe can perhaps improve that pass to avoid recursion, but this change\nseems generally good for robustness. It just makes us use the usual\n8 MB stack size on Linux that all other Linuxes use.\n\nFixes #8594"
    },
    {
      "commit": "39906157445c9dfa1db5c355f25e40d17f700c21",
      "tree": "ce7b866e786daf1561d028687a1c7ec860f9d1f6",
      "parents": [
        "baa15640556aff4043c57a7ca8a05535c3107e02"
      ],
      "author": {
        "name": "Changqing  Jing",
        "email": "changqing.jing@bmw.com",
        "time": "Mon Apr 13 19:48:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 19:48:57 2026"
      },
      "message": "[NFC] Use unordered_set in effects.h and CodePushing (#8586)\n\nThis avoids large slowdowns in cases with very long string names, etc."
    },
    {
      "commit": "baa15640556aff4043c57a7ca8a05535c3107e02",
      "tree": "0d6ace7a16506b66bc9ae3087859ee6132eacfc2",
      "parents": [
        "a827aa524c0aa8b77943c98cc2d57a26ba891a63"
      ],
      "author": {
        "name": "daichifukui",
        "email": "a.dog.will.talk@akane.waseda.jp",
        "time": "Fri Apr 10 16:43:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 16:43:20 2026"
      },
      "message": "[NFC] Fix spelling typos (#8591)\n\nFix various spelling typos in source and test files, as reported by\nDebian Lintian."
    },
    {
      "commit": "a827aa524c0aa8b77943c98cc2d57a26ba891a63",
      "tree": "c6b989d13e90a65acb5760ebf4be65ab66aee906",
      "parents": [
        "eb6c79d29ec1a5133f52fed122541c1bdb23388d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Apr 09 23:45:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 23:45:41 2026"
      },
      "message": "Fuzzer: Make --fuzz-preserve-imports-and-exports also preserve the start function (#8589)\n\nThe start may be needed for the ABI between the wasm and the outside.\n\nThe point of preserve-imports-and-exports is to not break such ABIs (or\nat least have a chance of not doing so), so it doesn\u0027t seem like we need\na new option here."
    },
    {
      "commit": "eb6c79d29ec1a5133f52fed122541c1bdb23388d",
      "tree": "b17c0eadeb94e303b8dc20389b9569e41e4238e6",
      "parents": [
        "f7b08ed50ad5aec56584d25478be34b475a488cb"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Apr 09 19:05:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 19:05:34 2026"
      },
      "message": "[NFC] Fuzzer: Add a run_js() method (#8588)\n\nThis refactors the code a bit to allow the VM classes in the fuzzer to\nrun JS. The function also allows running it in a checked (Python\nexception on a non-0 return code) or unchecked way.\n\nA future fuzzer will use this `run_js` method."
    },
    {
      "commit": "f7b08ed50ad5aec56584d25478be34b475a488cb",
      "tree": "5ba5671ff180fca9cea94c3d54c035efcb9b9bce",
      "parents": [
        "d918f9c2743c24e764f56d79c3ea2c00572b95dc"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Apr 09 18:16:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 18:16:00 2026"
      },
      "message": "[NFC] Move fuzzer VMs out of CompareVMs (#8587)\n\nDiff without whitespace is trivial."
    },
    {
      "commit": "d918f9c2743c24e764f56d79c3ea2c00572b95dc",
      "tree": "be0b35d01b661a7bcda258d3f76fa2b4fa7406f8",
      "parents": [
        "1527ce09fbade0f13a98ac9dccc5364886a37929"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Apr 09 16:03:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 16:03:36 2026"
      },
      "message": "[Stack Switching] wasm-ctor-eval: stop on serializing continuations to globals (#8585)\n\nContinuations cannot be serialized."
    },
    {
      "commit": "1527ce09fbade0f13a98ac9dccc5364886a37929",
      "tree": "2b2d87466611a57e8dac240ae00a2dfce505aa0e",
      "parents": [
        "68ea908068659dafc2dd2932cb59ab8ce6b061fb"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Apr 09 14:46:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 14:46:43 2026"
      },
      "message": "Move a v8 fuzzer flag to a more prominent place (#8582)\n\nThis is basically NFC but in the new place more code paths end up using\nthe flag, so this may increase our coverage slightly."
    },
    {
      "commit": "68ea908068659dafc2dd2932cb59ab8ce6b061fb",
      "tree": "d0297825914ea1407bbaae9cba7648a7d229c30c",
      "parents": [
        "b9a9afb22dabcc6d001cdf67a484843e4601dd7c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Apr 08 22:11:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 22:11:58 2026"
      },
      "message": "[ci] Use emsdk-setup github action (#8584)\n\nSee https://github.com/emscripten-core/setup-emsdk"
    },
    {
      "commit": "b9a9afb22dabcc6d001cdf67a484843e4601dd7c",
      "tree": "35b76c77abc6ef7ce93e49613b6654aa69ced8ed",
      "parents": [
        "15ad2b27c0d7c4e3c233b8f63b8d0685904bc03d"
      ],
      "author": {
        "name": "Spotandjake",
        "email": "40705786+spotandjake@users.noreply.github.com",
        "time": "Wed Apr 08 15:17:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 15:17:02 2026"
      },
      "message": "[JS \u0026 C API] Rename MemorySegment functions to DataSegment (#8576)\n\nfixes #8537"
    },
    {
      "commit": "15ad2b27c0d7c4e3c233b8f63b8d0685904bc03d",
      "tree": "afa358d46ec0ff76bf8134c9a1e47919768dc04a",
      "parents": [
        "98ad697ba231abd5c63aef3ed9e18139c6b20ccc"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Apr 08 14:26:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 14:26:49 2026"
      },
      "message": "Make everything 1.5% faster by calling leaf visitors immediately [NFC] (#8581)\n\nContinuing #8571, use a constexpr check to see when we are about\nto visit something that has no children. In that case we don\u0027t need to\npush a task for it and pop it later, we can just do the visit inline."
    },
    {
      "commit": "98ad697ba231abd5c63aef3ed9e18139c6b20ccc",
      "tree": "07e7d082a12bdb9c08f7f3f1bc53b08b7e31b929",
      "parents": [
        "a6f85e5785fc51ab0eda7e9f7e465af9aafc7c54"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Apr 08 01:18:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 01:18:31 2026"
      },
      "message": "Make getters const in Module class (#8579)\n\nSplit off from my [WIP for improving effects analysis for indirect\ncalls](https://github.com/WebAssembly/binaryen/compare/indirect-effects-3?expand\u003d1).\nThese methods don\u0027t mutate the Module so they can be const.\n\nAlso move getModuleElement into the anonymous namespace to prevent the\nname from leaking.\n\nSince these getters are now const, I also change some usages of\nModule\u0026/Module* to const e.g. EffectsAnalyzer, since these usages also\nonly need read-only access to the Module."
    },
    {
      "commit": "a6f85e5785fc51ab0eda7e9f7e465af9aafc7c54",
      "tree": "66305aaac96762d6ca9a4add5134a350e95b1df5",
      "parents": [
        "27dbce1c0b5d6cb39f6a1fab93bf79cf271db94b"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue Apr 07 23:24:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 23:24:20 2026"
      },
      "message": "Fix optimized grouping of locals (#8577)\n\nIn #8568 we optimized the grouping of locals in the binary writer to\naccount for how types will be written given the enabled features.\nHowever, that change did not properly update the handling of scratch\nlocals accordingly, leading to inconsistencies in the indices assigned\nto local types in different locations. Fix the problem by reverting the\nchanges from #8568 and handling the mapping from IR types to written\ntypes at a lower level; specifically, create a new `TypeIndexMap` type\nthat extends `InsertOrderedMap` but always applies\n`asWrittenGivenFeatures` to its keys. Use this new map type both for the\n`numLocalsByType` map and the `scratchLocals` map."
    },
    {
      "commit": "27dbce1c0b5d6cb39f6a1fab93bf79cf271db94b",
      "tree": "fa5ee7629f7de3209d9c2c243b9aa11a2b7cacf1",
      "parents": [
        "cfa8abd25943c595b8f99ae7c7cc70dd3938ef70"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Tue Apr 07 22:25:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 22:25:56 2026"
      },
      "message": "[FP16] Implement f32x4.promote_low_f16x8. (#8578)\n\nSpecified at\nhttps://github.com/WebAssembly/half-precision/blob/main/proposals/half-precision/Overview.md\n\nNote:\nThe instruction name `promote_low_f16x8` is different than the overview.\nI intend to update the spec overview to fix the name to match the other\npromote instruction."
    },
    {
      "commit": "cfa8abd25943c595b8f99ae7c7cc70dd3938ef70",
      "tree": "275f34f55dd064e034154a7fceb84ca08167774c",
      "parents": [
        "b09fad05ca73491a59de1a0b353019aecb0feafa"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Apr 07 15:33:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 15:33:33 2026"
      },
      "message": "[NFC] Optimize ModuleUtils type-scanning code (#8572)\n\nBefore, we always did a loop on `type.getHeapTypeChildren()` which\nmeans setting up a scanner object and going through a generic\npath. Instead, handle the common cases directly. This avoids any\ngeneric path in the common case.\n\nThis makes us 1% faster on `-O3`, as measured by instruction\ncount, number of branches, and walltime. The noise in the first\ntwo is incredibly small, so this looks reliably faster."
    },
    {
      "commit": "b09fad05ca73491a59de1a0b353019aecb0feafa",
      "tree": "f208e6373a65f39cc6d618256a62835f72685117",
      "parents": [
        "a3ac1d959b7bbe9f33ec1d05cd3ccbf41886dcb6"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Apr 06 21:01:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 21:01:44 2026"
      },
      "message": "Temporarily disable Split in fuzz_opt (#8575)\n\nUntil a fix for #8510 has landed."
    },
    {
      "commit": "a3ac1d959b7bbe9f33ec1d05cd3ccbf41886dcb6",
      "tree": "1ee8fbf0933bcb6d17ea6ef378d1792c2b1f602c",
      "parents": [
        "6780d4b160648df0a28d9ba62385ce7354b31710"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Apr 06 19:52:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 19:52:16 2026"
      },
      "message": "[NFC] Allow SubTypes::iterSubTypes to stop early (#8573)\n\nIn ConstantFieldPropagation this is important: we scan subtypes\nto check if they all have 2 possible values we can `ref.test` between.\nIn the common case there are many values and we can stop early.\n\nThis makes the pass 4.2x faster on a large Dart testcase, and\n`-O3` overall 3.5% faster."
    },
    {
      "commit": "6780d4b160648df0a28d9ba62385ce7354b31710",
      "tree": "7e3b1aedbb4065f008fe30b3df3f8c61c7bc07d8",
      "parents": [
        "6c70e2caa4b559f9fc9714d535b2986a05815fb0"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Apr 03 19:39:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 19:39:22 2026"
      },
      "message": "Make everything 4% faster by skipping empty tasks [NFC] (#8571)\n\nWhen a visitor is the original\n\n```cpp\nvoid visitFoo(Foo* curr) {}`\n```\n\n(that is, empty), and the doVisit is also unchanged,\n\n```cpp\nstatic void doVisitFoo(Self* self, Foo* curr) { self-\u003evisitFoo(curr); }\n```\n\n(that is, it just calls the visitor), then we do not need to queue such\ntasks for execution at all.\n\nMeasurements show a 2.5%-5% speedup, average 4%."
    },
    {
      "commit": "6c70e2caa4b559f9fc9714d535b2986a05815fb0",
      "tree": "51ccb98f2ab81291323a5578b9982cf3440d772d",
      "parents": [
        "0bb686f8367d880a1d530e7f8f8169f94b86b3eb"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Apr 03 00:07:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 00:07:15 2026"
      },
      "message": "Fix typos (#8570)\n\nCo-authored-by: Alon Zakai \u003cazakai@google.com\u003e"
    },
    {
      "commit": "0bb686f8367d880a1d530e7f8f8169f94b86b3eb",
      "tree": "fb67d0788b3c3bbfed6b336d2180084e52408fe3",
      "parents": [
        "13cb9187a4c8cb49350e0f24fd18186e35ce8c16"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Apr 02 17:59:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 17:59:15 2026"
      },
      "message": "More ArrayCmpxchg expected opts in Heap2Local (#8567)\n\nWhen non-escaping allocations flow into the `expected` field of an\nArrayCmpxchg, optimize even if the ArrayCmpxchg has a non-constant\nindex. We typically only optimize array instructions with constant\nfields, but that\u0027s because we need to know what field of the array is\naccessed. Arrays flowing into the `expected` field are not accessed,\nthough, so there is no need for the accessed index to be constant.\n\nMake sure that effects in the potentially non-constant index field are\npreserved in the correct order by using a new scratch local to propagate\nthe index value past the `expected` and `replacement` expressions to the\nnewly generated `struct.atomic.get`."
    }
  ],
  "next": "13cb9187a4c8cb49350e0f24fd18186e35ce8c16"
}
