)]}'
{
  "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.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "44b4ba0b27013f737f5c036c98f03a0b327db991",
      "old_mode": 33188,
      "old_path": "src/wasm-ir-builder.h",
      "new_id": "92b8a8acfb1f4cc56f31c1246af0a532674ef3d5",
      "new_mode": 33188,
      "new_path": "src/wasm-ir-builder.h"
    },
    {
      "type": "modify",
      "old_id": "61aff65f24dd9a9c3b7c4885a953f609f1c179ca",
      "old_mode": 33188,
      "old_path": "src/wasm/wasm-ir-builder.cpp",
      "new_id": "55ef512b103091c757c06f59bb834c9f7ab27156",
      "new_mode": 33188,
      "new_path": "src/wasm/wasm-ir-builder.cpp"
    },
    {
      "type": "modify",
      "old_id": "ca840036818e69a7ed9559db18e5531971b4aded",
      "old_mode": 33188,
      "old_path": "test/lit/basic/extra-branch-values.wast",
      "new_id": "953ca7d634fb3e435bab55248cfb5bcf95867a0b",
      "new_mode": 33188,
      "new_path": "test/lit/basic/extra-branch-values.wast"
    },
    {
      "type": "delete",
      "old_id": "805d477b8a2d8b6f83ecc4812abe136275dbaf52",
      "old_mode": 33188,
      "old_path": "test/lit/passes/roundtrip-gc.wast",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "74bbc97eaffacf7a511ab27646d4c25807991f09",
      "old_mode": 33188,
      "old_path": "test/lit/string.as_wtf16.wast",
      "new_id": "db5cf6c746a9bcdbeaa01ad707af95f96e8ac309",
      "new_mode": 33188,
      "new_path": "test/lit/string.as_wtf16.wast"
    },
    {
      "type": "modify",
      "old_id": "9e3c6171f4b3ecb0f70c3286a0728dc5ac5e95d1",
      "old_mode": 33188,
      "old_path": "test/lit/wat-kitchen-sink.wast",
      "new_id": "4b355c464f184aaad4d39322d8780641c16ed910",
      "new_mode": 33188,
      "new_path": "test/lit/wat-kitchen-sink.wast"
    },
    {
      "type": "modify",
      "old_id": "d7c85091e1d69763f3c3a861aa0a6d1a005c3666",
      "old_mode": 33188,
      "old_path": "test/stacky.wasm.fromBinary",
      "new_id": "8543fca0a4c04f9daf848a6700af0b44eee5ce92",
      "new_mode": 33188,
      "new_path": "test/stacky.wasm.fromBinary"
    }
  ]
}
