)]}'
{
  "commit": "c319c2db6034a5359f73e0e2fe66b81617707b81",
  "tree": "bba00e9bb4e6a985472f739da116253d6f8cab19",
  "parents": [
    "289b9a1ebf954be3995cc1895254d09f2623341f"
  ],
  "author": {
    "name": "Ben Vanik",
    "email": "ben.vanik@gmail.com",
    "time": "Fri Feb 24 18:18:47 2023 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Feb 25 02:18:47 2023 +0000"
  },
  "message": "Adding initial dispatch instrumention support. (#12357)\n\nThis adds a few new `hal.instrument.*` ops, a pass that instruments\r\ndispatches to a basic level, LLVM CPU support, a runtime tooling flag,\r\nand a prototype tool to dump the instrument data.\r\n\r\nAt the core of this is support for a new compiler-generated function\r\n`__query_instruments` that allows modules to pass back a list of\r\nbuffers. The `--instrument_file\u003d` tooling flag will gather all buffers\r\nfrom all modules and concatenate them together into a binary file. The\r\nformat of the resulting file is defined by a chunked transport stream\r\ncontaining today just the dispatch instrumentation chunk types.\r\n\r\nDispatch instrumentation will be enabled when the\r\n`--iree-hal-instrument-dispatches\u003d` flag is set to a power-of-two buffer\r\nsize. Most programs can usually get by with 16mib while memory access\r\ninstrumentation may require 256mib or 2gib.\r\n\r\nOn the CPU side the `--iree-llvmcpu-instrument-memory-accesses\u003dtrue`\r\nflag will enable tracking every load/store from/to a memref (scalars and\r\nvectors) by address and length. This can be used to observe memory\r\naccess patterns and the addresses being accessed by particular\r\nworkgroups. We should be able to support this on other backends\r\n(definitely CUDA, but possibly with SPIR-V using relative buffer offsets\r\nor something).\r\n\r\nIn addition to tracking workgroup launches and optionally memory\r\naccesses there are also placeholders for printf-style string formatting\r\nand value probes. `hal.instrument.print` still needs conversion work in\r\neach backend and though `hal.instrument.value` works there\u0027s no nice way\r\nof inserting them today.\r\n\r\nExample commands for getting a memory access dump (16MB is pretty small\r\nfor this, 2gib is better when access tracking is enabled):\r\n```sh\r\niree-compile \\\r\n    --iree-hal-target-backends\u003dllvm-cpu \\\r\n    --iree-hal-instrument-dispatches\u003d16mib \\\r\n    --iree-llvmcpu-instrument-memory-accesses\u003dtrue \\\r\n    runtime/src/iree/runtime/testdata/simple_mul.mlir \\\r\n    -o\u003dsimple_mul_instr.vmfb\r\niree-run-module \\\r\n    --device\u003dlocal-sync \\\r\n    --module\u003dsimple_mul_instr.vmfb \\\r\n    --function\u003dsimple_mul \\\r\n    --input\u003d4xf32\u003d2 \\\r\n    --input\u003d4xf32\u003d4 \\\r\n    --instrument_file\u003dinstrument.bin\r\niree-dump-instruments instrument.bin\r\n```\r\n\r\nExpected output for a simple_mul which has 4x4096 (multiple workgroups),\r\nnote that export sources are listed as well as all sites to that export\r\n(in this case just one):\r\n```\r\n$ ../iree-build/tools/iree-dump-instruments instrument_mem.bin\r\n\r\n//\u003d\u003d\u003d----------------------------------------------------------------------\u003d\u003d\u003d//\r\n// export[0]: simple_mul_dispatch_0_generic_16384\r\n//\u003d\u003d\u003d----------------------------------------------------------------------\u003d\u003d\u003d//\r\nfunc.func @simple_mul_dispatch_0_generic_16384(%arg0: !stream.binding {stream.alignment \u003d 64 : index}, %arg1: !stream.binding {stream.alignment \u003d 64 : index}, %arg2: !stream.binding {stream.alignment \u003d 64 : index}) {\r\n  %c0 \u003d arith.constant 0 : index\r\n  %0 \u003d stream.binding.subspan %arg0[%c0] : !stream.binding -\u003e !flow.dispatch.tensor\u003creadonly:tensor\u003c16384xf32\u003e\u003e\r\n  %1 \u003d stream.binding.subspan %arg1[%c0] : !stream.binding -\u003e !flow.dispatch.tensor\u003creadonly:tensor\u003c16384xf32\u003e\u003e\r\n  %2 \u003d stream.binding.subspan %arg2[%c0] : !stream.binding -\u003e !flow.dispatch.tensor\u003cwriteonly:tensor\u003c16384xf32\u003e\u003e\r\n  %3 \u003d flow.dispatch.tensor.load %0, offsets \u003d [0], sizes \u003d [16384], strides \u003d [1] : !flow.dispatch.tensor\u003creadonly:tensor\u003c16384xf32\u003e\u003e -\u003e tensor\u003c16384xf32\u003e\r\n  %4 \u003d flow.dispatch.tensor.load %1, offsets \u003d [0], sizes \u003d [16384], strides \u003d [1] : !flow.dispatch.tensor\u003creadonly:tensor\u003c16384xf32\u003e\u003e -\u003e tensor\u003c16384xf32\u003e\r\n  %5 \u003d tensor.empty() : tensor\u003c16384xf32\u003e\r\n  %6 \u003d linalg.generic {indexing_maps \u003d [affine_map\u003c(d0) -\u003e (d0)\u003e, affine_map\u003c(d0) -\u003e (d0)\u003e, affine_map\u003c(d0) -\u003e (d0)\u003e], iterator_types \u003d [\"parallel\"]} ins(%3, %4 : tensor\u003c16384xf32\u003e, tensor\u003c16384xf32\u003e) outs(%5 : tensor\u003c16384xf32\u003e) {\r\n  ^bb0(%in: f32, %in_0: f32, %out: f32):\r\n    %7 \u003d arith.mulf %in, %in_0 : f32\r\n    linalg.yield %7 : f32\r\n  } -\u003e tensor\u003c16384xf32\u003e\r\n  flow.dispatch.tensor.store %6, %2, offsets \u003d [0], sizes \u003d [16384], strides \u003d [1] : tensor\u003c16384xf32\u003e -\u003e !flow.dispatch.tensor\u003cwriteonly:tensor\u003c16384xf32\u003e\u003e\r\n  return\r\n}\r\n\r\n//\u003d\u003d\u003d----------------------------------------------------------------------\u003d\u003d\u003d//\r\n// dispatch site 0: simple_mul_dispatch_0_generic_16384\r\n//\u003d\u003d\u003d----------------------------------------------------------------------\u003d\u003d\u003d//\r\n\r\n0000000000000000 | WORKGROUP dispatch(0 simple_mul_dispatch_0_generic_16384 4x1x1) 0,0,0 pid:52\r\n0000000000000000 | LOAD  000002705bc3ad80 16\r\n0000000000000000 | LOAD  000002705bc4ae80 16\r\n0000000000000000 | STORE 000002705bc7a100 16\r\n0000000000000000 | LOAD  000002705bc3ad90 16\r\n0000000000000000 | LOAD  000002705bc4ae90 16\r\n0000000000000000 | STORE 000002705bc7a110 16\r\n0000000000000000 | LOAD  000002705bc3ada0 16\r\n0000000000000000 | LOAD  000002705bc4aea0 16\r\n0000000000000000 | STORE 000002705bc7a120 16\r\n0000000000000000 | LOAD  000002705bc3adb0 16\r\n0000000000000000 | LOAD  000002705bc4aeb0 16\r\n0000000000000000 | STORE 000002705bc7a130 16\r\n0000000000000000 | LOAD  000002705bc3adc0 16\r\n0000000000000000 | LOAD  000002705bc4aec0 16\r\n0000000000000000 | STORE 000002705bc7a140 16\r\n...\r\n000000000000c040 | WORKGROUP dispatch(0 simple_mul_dispatch_0_generic_16384 4x1x1) 1,0,0 pid:52\r\n000000000000c040 | LOAD  000002705bc3ed80 16\r\n000000000000c040 | LOAD  000002705bc4ee80 16\r\n000000000000c040 | STORE 000002705bc7e100 16\r\n...\r\n```\r\n\r\nThe printed data is currently just a proof of concept - the first column\r\nis the workgroup key - more advanced visualizations can do better things\r\n(still WIP, showing a dispatch listing and memory accesses by a\r\nparticular dispatch):\r\n\r\n![image](https://user-images.githubusercontent.com/75337/221122437-2eb50c30-f8af-415e-90cd-f67ae7fdbdcd.png)\r\n\r\n![image](https://user-images.githubusercontent.com/75337/221122967-bf37cf44-4991-484e-b654-a0b267ce527f.png)\r\n\r\n![image](https://user-images.githubusercontent.com/75337/221122600-767b7a1b-4f60-45f0-8a88-1c504d36c063.png)\r\n\r\nThere\u0027s still some iteration needed on printing values. For now a simple\r\ntest with this:\r\n```diff\r\ndiff --git a/compiler/src/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp b/compiler/src/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp\r\nindex 55bab04a8..24abf2255 100644\r\n--- a/compiler/src/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp\r\n+++ b/compiler/src/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp\r\n@@ -442,6 +442,22 @@ struct ConvertHALInstrumentWorkgroupOp\r\n             rewriter.create\u003cLLVM::ConstantOp\u003e(loc, i64Type, 0xFFFFFFFFFFll)),\r\n         rewriter.create\u003cLLVM::ConstantOp\u003e(loc, i64Type, 24));\r\n\r\n+    // HACK: test writing out a value.\r\n+    {\r\n+      Value valueOperand \u003d rewriter.create\u003carith::ConstantOp\u003e(\r\n+          loc, rewriter.getUI32IntegerAttr(0xFFFFFFFFu));\r\n+      rewriter.create\u003cIREE::HAL::InstrumentValueOp\u003e(\r\n+          loc, valueOperand.getType(), instrumentOp.getBuffer(), workgroupKey,\r\n+          rewriter.getI8IntegerAttr(0), valueOperand);\r\n+    }\r\n+    {\r\n+      Value valueOperand \u003d rewriter.create\u003carith::ConstantOp\u003e(\r\n+          loc, rewriter.getF32FloatAttr(1.234f));\r\n+      rewriter.create\u003cIREE::HAL::InstrumentValueOp\u003e(\r\n+          loc, valueOperand.getType(), instrumentOp.getBuffer(), workgroupKey,\r\n+          rewriter.getI8IntegerAttr(1), valueOperand);\r\n+    }\r\n+\r\n     rewriter.replaceOp(instrumentOp, workgroupKey);\r\n     return success();\r\n   }\r\n```\r\nwill produce this output:\r\n```\r\n0000000000000000 | WORKGROUP dispatch(0 simple_mul_dispatch_0_generic_16384 4x1x1) 0,0,0 pid:50\r\n0000000000000000 | VALUE 0000 \u003d 4294967295\r\n0000000000000000 | VALUE 0001 \u003d 1.234000e+00 1.234000\r\n0000000000000040 | WORKGROUP dispatch(0 simple_mul_dispatch_0_generic_16384 4x1x1) 1,0,0 pid:50\r\n0000000000000040 | VALUE 0000 \u003d 4294967295\r\n0000000000000040 | VALUE 0001 \u003d 1.234000e+00 1.234000\r\n0000000000000080 | WORKGROUP dispatch(0 simple_mul_dispatch_0_generic_16384 4x1x1) 2,0,0 pid:50\r\n0000000000000080 | VALUE 0000 \u003d 4294967295\r\n0000000000000080 | VALUE 0001 \u003d 1.234000e+00 1.234000\r\n00000000000000C0 | WORKGROUP dispatch(0 simple_mul_dispatch_0_generic_16384 4x1x1) 3,0,0 pid:50\r\n00000000000000C0 | VALUE 0000 \u003d 4294967295\r\n00000000000000C0 | VALUE 0001 \u003d 1.234000e+00 1.234000\r\n```\r\n\r\nErgonomics-wise for things like the value instrumentation we could try\r\nadding dialect attributes or something earlier on that tracks values or\r\nflagged patterns/etc for particular experiments.\r\n\r\nIn the future we can add both additional dispatch instrumentation and\r\nnew chunk types from various modules. Examples include\r\ncompiler-generated profile-guided optimization markers, VM code coverage\r\nmarkers, HAL counters for allocations or submissions, or device\r\ntimestamp streams.\r\n\r\nOnly the CPU backend is supported right now as that\u0027s what I\u0027m familiar\r\nwith. I\u0027d hoped to do the `hal.instrument.*` op lowering to memrefs so\r\nit could be shared but memref descriptors are unfortunately still a\r\nthing and with something tracking every single memory access it created\r\nhundreds of thousands of instructions. I eagerly await the day when\r\nsomeone works to kill memref descriptors.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fc321ee6b209c37217dc96bdd6db89d2e265dbea",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/BUILD",
      "new_id": "cb4597a4eb426c9fe16ae7cb2e061b42e6c78799",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/BUILD"
    },
    {
      "type": "modify",
      "old_id": "304afa9b443f3eac94616b32dbb056dd4b1f1e95",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Common/CMakeLists.txt",
      "new_id": "e887349a75ca74684eac73b500d5985c0197b692",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dabac419c364bfd977c1f23f89ac987d7267bb59",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Common/InstrumentMemoryAccesses.cpp"
    },
    {
      "type": "modify",
      "old_id": "5ebf191b9a72215dec2a5b89c47e5fff95781986",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMCPU/BUILD",
      "new_id": "5efb99a96ee815c37eef57c0057683b4f252b12c",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMCPU/BUILD"
    },
    {
      "type": "modify",
      "old_id": "693c1134431d5181c6ef12642455b24e752881ea",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMCPU/CMakeLists.txt",
      "new_id": "91a49c15d430ee9fcdd3df9d8b02c9f040ca3483",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMCPU/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "70715feb38fbb39cc14c9f6f3d9a388d97706551",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp",
      "new_id": "307432e6b5e6fe3756185023068b16d6fbbc157f",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMCPU/ConvertToLLVM.cpp"
    },
    {
      "type": "modify",
      "old_id": "18dd53f6ba0f8887391c060746562f733ab62f05",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/LLVMCPU/Passes.cpp",
      "new_id": "b5c41f56fae7bf7aa22d1f5cc6adf62fac3d036b",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/LLVMCPU/Passes.cpp"
    },
    {
      "type": "modify",
      "old_id": "01382d3de3c3c4aae733bc3ec03b3f1d55fc47cb",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Passes.h",
      "new_id": "9ffa60d14a0c5d4bd4700c17213d6cd169fa1628",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Passes.h"
    },
    {
      "type": "modify",
      "old_id": "cf705b5439ca5ebd6452d9e3b21f636c8ee044e0",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Codegen/Passes.td",
      "new_id": "fc7a3d782492e8da686dd8b9c697ac6ae24d018c",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Codegen/Passes.td"
    },
    {
      "type": "modify",
      "old_id": "038baa8ad6971d43b6b884a5906f94e61d8179af",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.td",
      "new_id": "45247ff78f281261b6fe74de81ef829e4cb76dd5",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.td"
    },
    {
      "type": "modify",
      "old_id": "c83c27ff5616d84c8d9d2809f1a6a4a94211e70b",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/BUILD",
      "new_id": "ba624eb8092fee135f1c32c2ae200ea3af67429f",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/BUILD"
    },
    {
      "type": "modify",
      "old_id": "26164d5c782768e43776e6b5ab8457647e2f650e",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/CMakeLists.txt",
      "new_id": "10ad9469eba95489c39ab9018745970b208d8cd3",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5426cc9cb590362ea807ecb1013cbab5d7b1f5cd",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/MaterializeDispatchInstrumentation.cpp"
    },
    {
      "type": "modify",
      "old_id": "afda5d2a5a8c99defec92b1a1cc2927e6ee58fb7",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/Passes.cpp",
      "new_id": "80c20d01d80c5dc69ca513fc591434e09e9cb819",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/Passes.cpp"
    },
    {
      "type": "modify",
      "old_id": "f858c62ad95b282bd191245c12f36a4cfbb44ce5",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/Passes.h",
      "new_id": "bcd949e8f3c18f4a358b5bb7a81c1d79f1756184",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/Passes.h"
    },
    {
      "type": "modify",
      "old_id": "aa15ea410ea8b90ef66b0945514e3dcff511e5ea",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/test/BUILD",
      "new_id": "623f210516d73e35545995ed711ae7691b04c07f",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/test/BUILD"
    },
    {
      "type": "modify",
      "old_id": "64eaf9badde6ab4603775d317e34db642af38931",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/test/CMakeLists.txt",
      "new_id": "dbda10bad154e7d3eca2624fcc43ad2d8e310f89",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/test/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3ea7bf2b7b16b685d2915f2dfd8b00bbec42e20b",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Dialect/HAL/Transforms/test/materialize_dispatch_instrumentation.mlir"
    },
    {
      "type": "modify",
      "old_id": "2a2a7f205ff42f1d20e7f595071d46058a1f67c4",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Utils/OptionUtils.cpp",
      "new_id": "6174e67bec9da4b36025a2da25894c2d274b1149",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Utils/OptionUtils.cpp"
    },
    {
      "type": "modify",
      "old_id": "2e7fae55ba2e36896347e8d20a26006228ca89a9",
      "old_mode": 33188,
      "old_path": "compiler/src/iree/compiler/Utils/OptionUtils.h",
      "new_id": "4bc2f3e6b777fbcf99f3f156f451453e378a88ea",
      "new_mode": 33188,
      "new_path": "compiler/src/iree/compiler/Utils/OptionUtils.h"
    },
    {
      "type": "modify",
      "old_id": "717262033c1f1056bfb5f9fc4e7905031dcd80a7",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/base/string_view.c",
      "new_id": "cd92211180d7f0674b20abebc313497e810869e4",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/base/string_view.c"
    },
    {
      "type": "modify",
      "old_id": "4fdffc0dfafb771cf20be83d2bae14c2ab5a2c05",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/base/string_view_test.cc",
      "new_id": "58182129b09d7fb4ce95e9a2b5b3491ce7625faa",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/base/string_view_test.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c666fc1a0966303e075b600713739ec442251e99",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/schemas/instruments/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "50370e74cb150b8e5a170d269eeb6643660f0fac",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/schemas/instruments/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "08def52849379a8ef74c173c507596348972125e",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/schemas/instruments/dispatch.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "820121904c9c7980fb604bc911b07591bb9dd89b",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/schemas/instruments/dispatch_def.fbs"
    },
    {
      "type": "modify",
      "old_id": "423aa2440ebaa6209bfa2e3eb1abcc67b175c755",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/tooling/BUILD",
      "new_id": "2c5873900bf0e6b65ac700bbd48adc9d3bc2b8f9",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/BUILD"
    },
    {
      "type": "modify",
      "old_id": "2e4a9e3c4059d2251917ec950af53883f682b629",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/tooling/CMakeLists.txt",
      "new_id": "423bf4da262903126ea682e1185150b3cb9a7ba4",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5566931d15f295d588cdaa38e25ae7ea250d0833",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/instrument_util.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d592bef36c04d6c32a46cd66e776cbbb6015c296",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/instrument_util.h"
    },
    {
      "type": "modify",
      "old_id": "0d94681ebe17e5447a0e059f106f266e5616c652",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/vm/buffer.c",
      "new_id": "8427a0717d45c2b33ac79ad5aad38aa047df975d",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/vm/buffer.c"
    },
    {
      "type": "modify",
      "old_id": "9cead6be3f0ee26fa7ae76ccdf7ed3f974c2347e",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/vm/buffer.h",
      "new_id": "1d2098446e85559e15f93a317fef50654c974d00",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/vm/buffer.h"
    },
    {
      "type": "modify",
      "old_id": "e3c7fe8f5b07e020658d4b5ffa338a6464a0f84c",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/vm/context.c",
      "new_id": "c287b1399b1d2078fcf50483518fc8c3c2c4b1b4",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/vm/context.c"
    },
    {
      "type": "modify",
      "old_id": "4d629d2ad238d1ea0c8f53dcdb55f63bbe346280",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/vm/context.h",
      "new_id": "1370ac5a73987d9c8b5a7fe200e1553ee655ff98",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/vm/context.h"
    },
    {
      "type": "modify",
      "old_id": "30303bf7f0d8a1bc6f2f1c9c00d6eeb94da59787",
      "old_mode": 33188,
      "old_path": "tools/BUILD",
      "new_id": "03b4fe9d3784d837abbb574b12212a94c93b0f24",
      "new_mode": 33188,
      "new_path": "tools/BUILD"
    },
    {
      "type": "modify",
      "old_id": "bd01660d46d24e03e1c22a691bfbd0e5bfaeb41b",
      "old_mode": 33188,
      "old_path": "tools/CMakeLists.txt",
      "new_id": "01111d20e9765dcc6d3f96c6daf60fe64d2af3b9",
      "new_mode": 33188,
      "new_path": "tools/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8c219e14217dd2f1855fa728ee37c9e1c0fcd48e",
      "new_mode": 33188,
      "new_path": "tools/iree-dump-instruments-main.c"
    },
    {
      "type": "modify",
      "old_id": "4f263bfb40713c3de6cfaaa5112c3edbabfcf7cb",
      "old_mode": 33188,
      "old_path": "tools/iree-run-module-main.cc",
      "new_id": "6063e86f22820e2fc81708b642f057b44006d0ac",
      "new_mode": 33188,
      "new_path": "tools/iree-run-module-main.cc"
    }
  ]
}
