)]}'
{
  "commit": "a9bb0b3a964159dcc9010f93c4440a3a6c43df8a",
  "tree": "1cb2275c820fb2bc6a31c919d532c1de7f7446a1",
  "parents": [
    "a348628f8900339b60a8ed1367526492a096790b"
  ],
  "author": {
    "name": "Thomas Lively",
    "email": "tlively@google.com",
    "time": "Wed Jul 26 23:42:09 2023"
  },
  "committer": {
    "name": "Thomas Lively",
    "email": "tlively@google.com",
    "time": "Thu Jul 27 02:12:02 2023"
  },
  "message": "Support sending additional values with BrOn\n\nLike the MVP (+multivalue) `br` and `br_if` instructions, `br_on*` instructions\nare supposed to be able to send an arbitrary number of values to their target\nlabels. Add support for this along with tests for round-tripping through the\nbinary format, and also update RemoveUnusedBrs to handle these additional values\ncorrectly.\n\nThe complexity here comes from the fact that the BrOn instructions already propagate\ntheir inspected reference operands to their following code, their branch target,\nor both, so adding additional values necessarily introduces multivalue. The use\nof multivalue produces a significant amount of bloat after round-tripping and\nalso makes RemoveUnusedBrs significantly more complicated.\n\nDespite this extra complexity, supporting arbitrary sent values is important for\nspec compliance and because a follow-up PR will make Binaryen\u0027s output send\nvalues on these branches in some cases as a fixup for other-wise invalid\nbr_on_cast instructions. Supporting these sent values in the IR and parsers will\nbe necessary for Binaryen to parse its own output.\n\nSee https://github.com/WebAssembly/gc/issues/381#issuecomment-1644489622 for\nmore context on the planned follow-up work.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dd2ad5c4a5de07a370c56ec63cf44659df45f7e1",
      "old_mode": 33188,
      "old_path": "src/binaryen-c.cpp",
      "new_id": "728fe4642339fd4e87808362fa5ef801de9ac9e4",
      "new_mode": 33188,
      "new_path": "src/binaryen-c.cpp"
    },
    {
      "type": "modify",
      "old_id": "197126f5e265629489f828a558047b1042b63bab",
      "old_mode": 33188,
      "old_path": "src/passes/RemoveUnusedBrs.cpp",
      "new_id": "de5e60d9ed62226d43c1c442166858a98f1d0a7d",
      "new_mode": 33188,
      "new_path": "src/passes/RemoveUnusedBrs.cpp"
    },
    {
      "type": "modify",
      "old_id": "a3bf22fdcb951e29ccaf714f64918d634769aae0",
      "old_mode": 33188,
      "old_path": "src/wasm-builder.h",
      "new_id": "b4479681173e9be266489b3cca884ce973c72a2a",
      "new_mode": 33188,
      "new_path": "src/wasm-builder.h"
    },
    {
      "type": "modify",
      "old_id": "1d9d6244d25cfc0b41c29c166f5c14c77d9395ef",
      "old_mode": 33188,
      "old_path": "src/wasm-delegations-fields.def",
      "new_id": "b7feaa38737bc8aecbd70656f5c5f604deb8b2f4",
      "new_mode": 33188,
      "new_path": "src/wasm-delegations-fields.def"
    },
    {
      "type": "modify",
      "old_id": "c059009b63c14d1b5ec68bf705cc5acea89f0815",
      "old_mode": 33188,
      "old_path": "src/wasm.h",
      "new_id": "27601fd20bc9083334a183784d3bf0039cd04b5c",
      "new_mode": 33188,
      "new_path": "src/wasm.h"
    },
    {
      "type": "modify",
      "old_id": "639f4b8489983c38fa0fad1c3879e36517aebc29",
      "old_mode": 33188,
      "old_path": "src/wasm/wasm-binary.cpp",
      "new_id": "d78ef2d2eb4e7ed0bfd7efef098567dc21477590",
      "new_mode": 33188,
      "new_path": "src/wasm/wasm-binary.cpp"
    },
    {
      "type": "modify",
      "old_id": "9b7a1a90d34f55da90aa3083bde808b14ca2f538",
      "old_mode": 33188,
      "old_path": "src/wasm/wasm-s-parser.cpp",
      "new_id": "23dfdab786a26c916e6d5513cd94207bc50b2eb0",
      "new_mode": 33188,
      "new_path": "src/wasm/wasm-s-parser.cpp"
    },
    {
      "type": "modify",
      "old_id": "552ec7e5747a636392615bd7a09dfe5c4e44c5c0",
      "old_mode": 33188,
      "old_path": "src/wasm/wasm.cpp",
      "new_id": "6967dc60d20cf48e66fe3ea57fb9425872bb7175",
      "new_mode": 33188,
      "new_path": "src/wasm/wasm.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c06700fd4f91cbdd2fc344c60c2ccddd835e1fa7",
      "new_mode": 33188,
      "new_path": "test/lit/br-on-value.wast"
    },
    {
      "type": "modify",
      "old_id": "e063fa48232797b6dfce092058c9294d046f71db",
      "old_mode": 33188,
      "old_path": "test/lit/passes/remove-unused-brs-gc.wast",
      "new_id": "82d7cd0bd3e28d9c76369acd56a7c3061bae6db8",
      "new_mode": 33188,
      "new_path": "test/lit/passes/remove-unused-brs-gc.wast"
    },
    {
      "type": "modify",
      "old_id": "8ca632040cb850a0cf431599b26e974e756270a1",
      "old_mode": 33188,
      "old_path": "test/lit/passes/remove-unused-brs_all-features.wast",
      "new_id": "41b063812c5898d34d6f7da23416f8ee9ab9569c",
      "new_mode": 33188,
      "new_path": "test/lit/passes/remove-unused-brs_all-features.wast"
    }
  ]
}
